[comp.unix.questions] Recovery ofremoved files

inra@axis.fr (Inst. Natl. Rech. Agronomique) (04/15/88)

After rm command is it possible to recover removed files
Please email to:
UUCP:		...axis!inra
EARN BITNET	BERTHEAU.FRINRA72
.

dg@lakart.UUCP (David Goodenough) (04/18/88)

From article <367@axis.fr>, by inra@axis.fr (Inst. Natl. Rech. Agronomique):
> 
> After rm command is it possible to recover removed files

Believe it or not, but way back in the dim and distant past, a guru I
knew at university had an unrm program (from what I could gather, it knew
the nature of the freeblock list, and it looked at where the returned blocks
were put, and then wrote their contents to a different file structure.
Admittedly this was done under UNIX V6 from bell labs - whether the idea is
portable to BSD or System 5, I have no idea.

P.S. I've X-posted to c.u.wizards, cause it's gonna take a genius to write
this program (i.e. someone who know UNIX like the back of his hand)

P.P.S. the program only worked on a fairly quiet day - if system load
was heavy you was out of luck :-) :-)
--
	dg@lakart.UUCP - David Goodenough		+---+
							| +-+-+
	....... !harvard!adelie!cfisun!lakart!dg	+-+-+ |
						  	  +---+

domo@riddle.UUCP (Dominic Dunlop) (04/21/88)

In article <367@axis.fr> inra@axis.fr (Inst. Natl. Rech. Agronomique) writes:
>
>After rm command is it possible to recover removed files

Probably not, particularly if you made your posting from the system you
deleted the files on.  However, a paper presented at the Winter 88 Usenix
conference in Dallas, entitled something like  _What to do after you type
rm *_ gives a number of strategies which, used together, can recover well
over 90% of the data in deleted files on System V and Xenix systems
PROVIDED THAT THE SYSTEM IS SHUT DOWN AT ONCE following the accident. 
The author was from an outfit in San Francisco which has found itself
specialising in this type of business after somebody brought them an
Altos system, having done something stupid (cat > valuable), then yanked
the power plug -- which turned out to be a smart move.  Regret I can't
give an exact citation, as I don't have the proceedings to hand.  Help,
somebody?

Good luck.
-- 
Dominic Dunlop
domo@sphinx.co.uk  domo@riddle.uucp

cramer@optilink.UUCP (Clayton Cramer) (04/26/88)

> From article <367@axis.fr>, by inra@axis.fr (Inst. Natl. Rech. Agronomique):
> > 
> > After rm command is it possible to recover removed files
> 
> Believe it or not, but way back in the dim and distant past, a guru I
> knew at university had an unrm program (from what I could gather, it knew
> the nature of the freeblock list, and it looked at where the returned blocks
> were put, and then wrote their contents to a different file structure.
> Admittedly this was done under UNIX V6 from bell labs - whether the idea is
> portable to BSD or System 5, I have no idea.
> 

Here's my solution.  (Not elegant, but worth considering).  Put the 
following csh script in /usr/local/bin/del.

======================================================================
#   /bin/csh
foreach file ($argv)
mv $file /tmp/$USER/$file:t
end
======================================================================

and a line in your /usr/lib/crontab file to delete files more than three
days old from /tmp/$USER.  (You generally notice that a file you've deleted
needs undeleting within about ten seconds of doing an rm).

Why not call the script rm, so it's transparent to the user?  Well, then
you have to handle all the options on rm, because every program and shell
script that uses rm will be trying to run your program, not /bin/rm.

Of course, you could always handle the problem by making the above script
an alias instead.

Clayton E. Cramer

mouse@mcgill-vision.UUCP (der Mouse) (04/26/88)

In article <54@lakart.UUCP>, dg@lakart.UUCP (David Goodenough) writes:
> From article <367@axis.fr>, by inra@axis.fr (Inst. Natl. Rech. Agronomique):

>> After rm command is it possible to recover removed files

> Believe it or not, but way back in the dim and distant past, a guru I
> knew at university had an unrm program (from what I could gather, it
> knew the nature of the freeblock list, and it looked at where the
> returned blocks were put, and then wrote their contents to a
> different file structure.)

Much like what various programs can do under MS-DOS.  This is one
advantage of a simple ("primitive") filesystem - you can pull tricks
like this.

> Admittedly this was done under UNIX V6 from bell labs - whether the
> idea is portable to BSD or System 5, I have no idea.

I looked at doing this for 4.3.  Normally, people will dismiss the idea
because 4.3 doesn't keep a freelist in the usual sense - it's more like
bitmaps of free blocks.  But I considered leaving the block pointers
around, just zapping the size field of the inode, so if you caught it
before the blocks got reused (always a requirement), you could see the
pointers still there.  However, it looks as though it isn't going to
work.  When a file is extended, it is done by writing past the end.  If
there is a hole, the block addresses there are left untouched as far as
I can tell, which means they better be zero, or the file hasn't
acquired holes; it's suddenly acquired blocks that nobody ever expected
it to have.  Bad news.  This might be fixable, but would require a fair
piece of kernel work (wherever the size is grown, it must be careful to
clear block addresses as appropriate).

					der Mouse

			uucp: mouse@mcgill-vision.uucp
			arpa: mouse@larry.mcrcim.mcgill.edu

chris@mimsy.UUCP (Chris Torek) (04/27/88)

[N.B.: There are two kinds of `deleted' files: those the user has asked
to be deleted and those that have in fact been deleted; the latter is
what `rm' implements, and what is being discussed.  In *all* systems,
even those with deferred deletion, files are eventually removed, and
that is where this becomes relevant.]

In article <1079@mcgill-vision.UUCP> mouse@mcgill-vision.UUCP (der Mouse)
writes:
>I looked at [recovering the original file blocks] for 4.3[BSD].
>... I considered leaving the [inode] block pointers around ... so
>if you caught it before the blocks got reused (always a requirement),
>you could see the pointers still there.

The main reason the block pointers are clobbered is for crash
recovery.  If you change this you may have to work on fsck.  It
is not something to be undertaken lightly.
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163)
Domain:	chris@mimsy.umd.edu	Path:	uunet!mimsy!chris

inc@tc.fluke.COM (Gary Benson) (04/28/88)

Here at Fluke, a programmer named Mike Bryant invented SAFERM (safe remove).
Uuencoded sources are attached for anyone interested. Here's how it works:
First, you set an environment variable WASTE to a directory called .waste in
your home directory. Next, link the program (it can be put in public, then
made a part of everyone's path). Then, alias rm to <programname>.

Once set up, SAFERM moves rm'd files to ~/.waste. Then, using crontab,
.waste is cleaned out after three days. In our experience with this program
(3 years), it has proven to be robust and extremely reliable. If a user goes
three days and crontab flushes .waste, then hey! that's what regular backups
are for! Following is the uuencoded program. It creates a file called RM.
Good Luck!

--------------------------------cut here---------------------------------
begin 755 RM
M"P$````L````"```?````/0%````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````````````````````````````/$4/07EK!!%I0
MT%!9T%E8U8D3`A'ZT5EH&0/"!%G06>_:*P``U.^4,P``W>_.*P``W5C=:OL#
M[Q<```#=4/L![THE```$$;L````1`001_0`````(GL[T]U[=O`C[`>]7!@``
MT%#O8#,``-&L!`$4`S$>`="L"%"8L`10T5`M$O#0K`A0P0&@!*WX,?4`[P`!
M[\DK``!0UE#P4``![[TK```QVP#14(]R````$P,QK0#O`@'OIBL``%#64/!0
M`@'OFBL``#&X`-%0CU8````36-%0CV8````3M-%0CVD````2PN\!`>]T*P``
M4-90\%`!`>]H*P``,88`F+WX4-%0CU4````2P=WOOC(``-WON#(``-_O2BL`
M`/L#[]\(``#=`/L![V8D``#=[YPR``#?[T,K``#[`N_#"```WN]?*P``S?3W
M,0\!W^]9*P``^P'OJ@@``-T`^P'O,20``-WO9S(``-WO83(``-_O.2L``/L#
M[X@(``#=`?L![P\D``#6K?B5O?@3`S%O_\`$K`C7K`3=CP`$``#[`>_@)```
MT%"M_-V/``0``/L![\\D``#04.\8,@``W03[`>^_)```T%#O_#$``-_O`RL`
M`/L![U,(``#04._L,0``$P,QI0#>[_`J``#OW#$``-3OXC$``#'/`-#-]/=0
MULWT]]#OI"\``%'6[YTO``"08&$12,[OCB\``%#14.^2+P``&%+0S?3W4-;-
M]/>08/]X+P``F/]R+P``4-%0"A,(UN]F+P``$13?[UHO``":_U@O``!^^P+O
MD!\``)'=]/<@$@,QY_[7[SPO```8B^`'[T,O``">W^\L+P``T,WT]U#6S?3W
MFF!^$<N4S?CWW>\X,0``W\WX]_L"[Y$+``#?[S\J``#?S?CW^P+O@`L``-_O
M-RH``-_-^/?[`N^W!P``T%#O$#$``-WO^C```-WO^#```/L"[_T&``#54!@I
MT._?,```4-U`[],,``#=[]DP``#=[]<P``#?[_$I``#[!._^!@``$330[[HP
M``!0/*`(4,J/_P___U#14(\`0```$R+=[Z,P``#=[Z$P``#?[]@I``#[`^_(
M!@``W0'[`>]/(@``U>^-,```$T[?S?C[^P'O4`0``-U0W^_7*0``W>]R,```
M^P/O>Q4``!$LX`#O[B@``"30[T<P``!0W4#O.PP``-V\"-WO0C```-_OIRD`
M`/L$[VD&``#`!*P(UZP$$A;5[RXP```3#=WO)C```/L![]4?```$W>\(,```
MW;P(^P+O#@8``-50&:'0[_0O``!0/*`(4,J/_P___U#14(\`0```$B#@`N]T
M*```&-V\"-WOUB\``-_O22D``/L#[_T%```1DN$![U0H``!#W;P(W>^V+P``
MW^\^*0``^P/OW04``-WOIR\``/L![P0#``"1_YHO``"/<1()W0'[`>]-(0``
MD?^'+P``CWD3<#%'_^``[PDH``!ET.]F+P``4#R@"%#*C_\/__]0T5"/`*``
M`!-*W0+=O`C[`N]E!0``U5`8.MV\"-#O."\``%#O``^@"'[=[S,O``#?[\0H
M``#[!.]:!0``W>\D+P``^P'O@0(``)'_%R\``(]Y$I#=O`C[`>_U`0``T%"M
M^-1;$0+66]VM^-U;W>_L+@``W^^E*```W:W\^P7O_!(``-WOTBX``-VM_/L"
M[]@$``#54!C/W:W\W;P(^P+OYP0``-50&!#=K?S=O`C[`N\4````,7;^W:W\
MW;P(^P+OK@$``#%F_@``",((7MWOARX``-VL!/L"[XT$``#0[W<N``!0X0Z@
M""?0[V<N``!0W4#O6PH``-VL!-WO8BX``-_O("@``/L$[XD$``#44`3=`-T"
MW:P$^P/O3`<``-!0K?P8`S$+`=V/@`$``-VL"/L"[V<!``#04*WX&0,QFP#=
M[Q@N``#=K`3=[Q,N``#?[R(H``#[!.\Z!```W:P$W^\P*```^P+O*@0``-WO
M]"T``/L![U$!``"1_^<M``"/>1**W:P$^P'O<0@``-50$P,QG@#0`5`$W5O=
M[\8M``#=K?C[`^_0(P``U5`8+=#OHBT``%#=0.^6"0``W:P(W>^=+0``W^^(
M)P``^P3OQ`,``-T!^P'O2Q\``-V/``0``-WO?RT``-VM_/L#[X41``#04%L4
MHMVL"-VL!/L"[V\```#=K?S[`>]U'0``W:WX^P'O:QT``-VL!/L![]T'``#5
M4!(#,6S_W:P(^P'OS`<``-#O'BT``%#=0.\2"0``W:P$W>\9+0``W^];)P``
M,;3^``S0K`1;W2_=6_L"[Z,$``#04%H3!M9:T%I0!-!;4`0``-7O\"P``!,9
MW:P(W:P$W^\\)P``W>_<+```^P3OY1$```07[^8B````````O`@?\@0`0"@C
M*6=E=',N8PDU+C(@*$)E<FME;&5Y*2`S+SDO.#8```````S0K`1;GN]0*@``
M6M5J%![=6OL![R('``#54!E%D5`*$@24:Q$FD%"+U:H($^(Z"FJZ!!,<PU!J
M4L)2:BA2N@1KE&/04:H$UVK6J@30K`10!"AJN@1KT%-;T*H(J@34:A&NT5NL
M!!,$E&L1X-10!```GLYD]U[>K?_-_/O>S?SWS?CWU.\>+```E-W\^]_-I/??
M[Y`F``#[`N\M!@``U5`8$]_O@28``-VL!/L"[]$0``#44`2PS:3WS?3WT,VH
M]\WL]]_O="8``-W-^/?[`N^O$```P`+-^/??S:3WW\W\]_L"[^,%``#54!D#
M,?\`W^]+)@``$;'?S:3WW=WH]_L"[_4=``"QS?;WS:3W$E?1S?#WS:CW$AW=
MS>CW^P'OH`,``)7=_/L3`S$9`=_O;28``#$4`=W-Z/?[`>]G!```T%#-Y/<2
M%-W-Z/?[`>]Q`P``W^\5)@``,4W_T=WD]\WP]Q+1$5C=S>CW^P'O-@0``-!0
MS>3W$A3=S>CW^P'O0`,``-_O_"4``#$<_\$(S>3W?MW-^/?[`N_F#P``W\UD
M]]_-_/?[`N_S````T<UH]\WP]Q*QL<UD]\WV]Q*HW<WH]_L![_H"``#=S?S[
MP0C-Y/=^^P+O?P```-U0W^^[)0``^P+O<````-!0S?S[T<VH]\WL]Q(,L<VD
M]\WT]Q(#,2#_T,VH]\WP][#-I/?-]O??[STE``#=S?CW^P+O80\``,`#S?CW
MW\W\]_L![[T"``#04,WH]Q,#,;O^W^\6)0``,6/^W<W\^]VL!/L"[S`/``#0
MK`10!```#M"L!%O0K`A:U%D1!-99UEN5:Q+XP%GO,2H``-'O*RH``(\`!```
M&041#)![>M!94-=9U5`4]-!:4`0``!?O&B````````"\*!_R!``7[PH@````
M````O"$?\@0`%^_Z'P```````+R/@``?\`0``````-_OG"<``,$(7'[=K`3[
M`^\^$```X07OER<```7.`5`1`M10!`````[0K`1;T._,(0``6M5J$S?=BMU;
M^P+O"@```-!061/LT%E0!```#-"L!%O0K`A:D6N*$@F1BST2]M!:4`25:Q(&
MD:K_/1/RU%`$`(`/T*P(6_L`[W,9``#04%H3'9&K`2L2&M`!4!$7T5"/<@``
M`!,ST5"/=P```!,ZU%`$U%#04%B8:U#14(]A````$MK56!,%T`)0$0/0`5#)
MCP`"``!05Q$DU5@3!=`"4!$"U%#04%<1%-58$P70`E`1`]`!4,F/``8``%!7
MW8^V`0``W5?=K`3[`^_1`0``T%!9&9N1:X]A$@W=`MT`W5G[`^])#0``U&KV
M6:H2U*H,U5@3"+"/``&J$!$0D6N/<A(&]P&J$!$$]P*J$-2J!-"J!*H(T%I0
M!$`H(RER:6YD97@N<PDU+C,@*$)E<FME;&5Y*2`S+SDO.#8`````?:P$4=52
M$@PZ`(___V$3^-!14`3>[[@C``!3X@!C))Y"8U669=14*H___V%C`1/WE6$3
M!]!15-91$>S05%"4991C!-!14]14.@"/__]C$ABW4#I24&,2!=!14Q'KT%%4
MP0%14]=0$>##4U%0UE`Z4E!C$PO0453!`5%3UU`1[]!44`0`````"-"L!%O=
M:_L![^47``#.`6O4JP3=JQC[`>^I&P``W5O[`>^@&P``!``````,GJ[`7MT`
MW:P$^P+OG@```-!06M%:C_____\34M^MP-U:^P+OXAD``-90$SD\K<A0RH__
M#___4-%0CP!````3,=`4[U,G```1'-5;$QC5JQ@3"MVK&/L![SX;``#=6_L!
M[S4;``#=6OL![U@7``#44`3='/L![^`9``#04%L3RMVM\/L![]$9``#04*L8
M$[K0K?"K%-2K#-2K$-!::]2K!-!;4`0``!?O&AT```````"\!1_R!```#-"L
M!%O5JP03`S&<`-7OF",``!45P0Q;?MVK%-VK&-UK^P3OYP```!%GU>][(P``
M$DW=CP`(``#[`>]8"P``T%#O92,``,$,6W[=JQ3=JQC=:_L$[[8```#04*L(
MW>]((P``^P'O00L``-6K"!@KT>]N)@``%A(BS@'O+",``-V/``(``-VK&-UK
M^P/O<@H``-!0JP@1"M10!-`![PHC``#5JP@5\=2K$-&K!*L(&0;4JP0Q3__!
MJP2K&%JUJ@03UCRJ!%#`4*L$UJL0U6H3X]!:4`0```C0K`1;U>_*(@``%0O%
MJQ2K#%#`JQ!0!-T!W0#=:_L#[XP*``#"JPA0P*L$4`0````7[P(<````````
MO(^<`!_P!````!?O[AL```````"\)A_R!`!`*",I<W1R8V%T+G,)-2XS("A"
M97)K96QE>2D@,R\Y+S@V``#``'VL!%;05E$Z`(___V$3^-!14SH`C___9Q(+
M*(___V=CT%%7$>W"5U'642A19V/05E`$%^^&&P```````+P*'_($```(GJZX
M7M"L!%OA"*L0!*@!JQ#HJQ`$S@%0!+./4`"K$!+T$1W>K;M0$1/5[W\D```3
M\IBK$E#`[W,D``!0T%"K"-6K"!)(X`*K$-_?K;R8JQ)^^P+O9A<``-50&075
MK>P4"#*/``2M_!$%T*WLK?S=K?S[`>^6%P``T%"K"!(&J`2K$!&\J`BK$-"M
M_*L,T5N/D#$``!(JX0?OI2(```W?[XXB``#[`>\3%```X0?OI"(```W?[XTB
M``#[`>_^$P``X0*K$`70`5`1!-"K#%#=4-VK")BK$G[[`^^0"```T%!KT*L(
MJP3A`JL0#=ZMNU#1JPA0$@/4JPC7:Q@AT6N/_____Q(/J!"K$.$(JQ`*J@&K
M$!$$J""K$-1K,?C^FKL$4-:K!`0`0"@C*65R<FQS="YC"34N,B`H0F5R:V5L
M97DI(#,O.2\X-@``_!````01```.$0``*!$``#@1``!0$0``6A$``'01``"&
M$0``F!$``*@1``"T$0``QA$``-@1``#J$0``]A$```P2```8$@``)!(``#82
M``!%$@``51(``&02``!U$@``B1(``)T2``"\$@``RQ(``-H2``#R$@``_Q(`
M`!43```D$P``,!,``$,3``!4$P``:A,``(03``"B$P``P1,``-X3``#O$P``
M#A0``"\4``!&%```8!0``((4``"@%```T!0``.<4```&%0``%A4``"T5``!1
M%0``<A4``(L5``"E%0``P14``-D5``#Z%0``'!8``#$6``!$%@``9A8``'D6
M``"&%@``FA8``*X6``#!%@``T!8``.06``#Z%@``'!<``#`7```^%P``5A<`
M`'$7``"$%P``EQ<``+L7``!%<G)O<B`P`$YO="!O=VYE<@!.;R!S=6-H(&9I
M;&4@;W(@9&ER96-T;W)Y`$YO('-U8V@@<')O8V5S<P!);G1E<G)U<'1E9"!S
M>7-T96T@8V%L;`!)+T\@97)R;W(`3F\@<W5C:"!D979I8V4@;W(@861D<F5S
M<P!!<F<@;&ES="!T;V\@;&]N9P!%>&5C(&9O<FUA="!E<G)O<@!"860@9FEL
M92!N=6UB97(`3F\@8VAI;&1R96X`3F\@;6]R92!P<F]C97-S97,`3F]T(&5N
M;W5G:"!M96UO<GD`4&5R;6ES<VEO;B!D96YI960`0F%D(&%D9')E<W,`0FQO
M8VL@9&5V:6-E(')E<75I<F5D`$1E=FEC92!B=7-Y`$9I;&4@97AI<W1S`$-R
M;W-S+61E=FEC92!L:6YK`$YO('-U8V@@9&5V:6-E`$YO="!A(&1I<F5C=&]R
M>0!)<R!A(&1I<F5C=&]R>0!);G9A;&ED(&%R9W5M96YT`$9I;&4@=&%B;&4@
M;W9E<F9L;W<`5&]O(&UA;GD@;W!E;B!F:6QE<P!);F%P<')O<')I871E(&EO
M8W1L(&9O<B!D979I8V4`5&5X="!F:6QE(&)U<WD`1FEL92!T;V\@;&%R9V4`
M3F\@<W!A8V4@;&5F="!O;B!D979I8V4`26QL96=A;"!S965K`%)E860M;VYL
M>2!F:6QE('-Y<W1E;0!4;V\@;6%N>2!L:6YK<P!"<F]K96X@<&EP90!!<F=U
M;65N="!T;V\@;&%R9V4`4F5S=6QT('1O;R!L87)G90!/<&5R871I;VX@=V]U
M;&0@8FQO8VL`3W!E<F%T:6]N(&YO=R!I;B!P<F]G<F5S<P!/<&5R871I;VX@
M86QR96%D>2!I;B!P<F]G<F5S<P!3;V-K970@;W!E<F%T:6]N(&]N(&YO;BUS
M;V-K970`1&5S=&EN871I;VX@861D<F5S<R!R97%U:7)E9`!-97-S86=E('1O
M;R!L;VYG`%!R;W1O8V]L('=R;VYG('1Y<&4@9F]R('-O8VME=`!/<'1I;VX@
M;F]T('-U<'!O<G1E9"!B>2!P<F]T;V-O;`!0<F]T;V-O;"!N;W0@<W5P<&]R
M=&5D`%-O8VME="!T>7!E(&YO="!S=7!P;W)T960`3W!E<F%T:6]N(&YO="!S
M=7!P;W)T960@;VX@<V]C:V5T`%!R;W1O8V]L(&9A;6EL>2!N;W0@<W5P<&]R
M=&5D`$%D9')E<W,@9F%M:6QY(&YO="!S=7!P;W)T960@8GD@<')O=&]C;VP@
M9F%M:6QY`$%D9')E<W,@86QR96%D>2!I;B!U<V4`0V%N)W0@87-S:6=N(')E
M<75E<W1E9"!A9&1R97-S`$YE='=O<FL@:7,@9&]W;@!.971W;W)K(&ES('5N
M<F5A8VAA8FQE`$YE='=O<FL@9')O<'!E9"!C;VYN96-T:6]N(&]N(')E<V5T
M`%-O9G1W87)E(&-A=7-E9"!C;VYN96-T:6]N(&%B;W)T`$-O;FYE8W1I;VX@
M<F5S970@8GD@<&5E<@!.;R!B=69F97(@<W!A8V4@879A:6QA8FQE`%-O8VME
M="!I<R!A;')E861Y(&-O;FYE8W1E9`!3;V-K970@:7,@;F]T(&-O;FYE8W1E
M9`!#86XG="!S96YD(&%F=&5R('-O8VME="!S:'5T9&]W;@!4;V\@;6%N>2!R
M969E<F5N8V5S.B!C86XG="!S<&QI8V4`0V]N;F5C=&EO;B!T:6UE9"!O=70`
M0V]N;F5C=&EO;B!R969U<V5D`%1O;R!M86YY(&QE=F5L<R!O9B!S>6UB;VQI
M8R!L:6YK<P!&:6QE(&YA;64@=&]O(&QO;F<`2&]S="!I<R!D;W=N`$AO<W0@
M:7,@=6YR96%C:&%B;&4`1&ER96-T;W)Y(&YO="!E;7!T>0!4;V\@;6%N>2!P
M<F]C97-S97,`5&]O(&UA;GD@=7-E<G,`1&ES8R!Q=6]T82!E>&-E961E9`!3
M=&%L92!.1E,@9FEL92!H86YD;&4`5&]O(&UA;GD@;&5V96QS(&]F(')E;6]T
M92!I;B!P871H`$YO="!A('-T<F5A;2!D979I8V4`5&EM97(@97AP:7)E9`!/
M=70@;V8@<W1R96%M(')E<V]U<F-E<P!.;R!M97-S86=E(&]F(&1E<VER960@
M='EP90!.;W0@82!D871A(&UE<W-A9V4`261E;G1I9FEE<B!R96UO=F5D`$1E
M861L;V-K('-I='5A=&EO;B!D971E8W1E9"]A=F]I9&5D`$YO(')E8V]R9"!L
M;V-K<R!A=F%I;&%B;&4`````%^\.$@```````+P#'_($````PA1>F8]"K?S0
MK`2M\#*/_W^M[-^M[,$,7'[=K`C[`^]&`@``UZWL&0O0K?!0UJWPE&`1-N$'
MK?PDSJWL4-%0K?@8&I2]\)B]\%#14`H3!=:M\!$6WZWLFKWP?A$&WZWLF@!^
M^P+OE`D``-"L!%`$````%^^*$0```````+P3'_($`!?O>A$```````"\CVT`
M'_`$````%^]F$0```````+R/;@`?\`0```!`*",I<W1R8W!Y+G,)-2XS("A"
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
M5U"(K>]`KA#@"%H]GJX041`FT%%6PP&M]%#Y4`)N.`)N[Y?___]ET%91X`9:
M`S$L_8P@I?PQ)?W05U;76-"M^*WTT`&M^#'!_L$#K?A0&3#"`U#14%@4*-!7
M5L)06)ZN$%$PI?[@!5H0X`E:#)%U,!/[D64N$P+65>$(6I4QW?R>KA!1,+'_
MY`A:VN`!6@/0!EC56!0#T`%8X@A:`S$N_S$K_Y2M[W",51(#,9\`%`9R5566
MK>_O!PA54IZB@%+$.U(9!9["Q`!2GJ*>4L:/Q````%(P@@!Q4%44`M92T%*M
M^,Y24M%2'14*9._A````5<(04L`)4A;O7````'105%505?E0":X0^`@)KA``
M$:X$=.^R`````%505?E0"*X0T%A7G^^<_O__T8YN%03`K?A7T5<1&0EQ50`9
M!(@0K@P@"*X0$:X$B*WOK@P%U%#0`:WX$:X```$`<`A0U%1^[TT```!3U5(8
M!\Y24N(&4@#A5%(#9&-0P`A3\P54\N4&4A-G4`A0T1Q2$@?`[\3___]1SE)2
MP2A24^%3[T$````'PN^N____49I"[V(```!4!2!"````````R$,````````<
M1P!``````+Y-(+P`````#EO)&P2_``"==:W%*ZBV<%!"//*'````]G]6=M.(
MM6*Z]3(^#DC;45,GL>_KI0=)6]D/$\W_OY?]O+8C+#L*S0``````````````
M``````````````````"@R#J$Y-R2FP#`6*X8[P``#YZNN%[0K`A;X0BK$`BH
M`JL0JA&K$.`!JQ!WS@%0!-19T%E8FJP$4`3A`JL0()"L!*W_T`%8W5C?K?^8
MJQ)^^P/OM0<``-!06=1K,>H`T*L(6A,#,;0`WZVXF*L2?OL"[^(#``#54!D%
MU:WH%`@RCP`$K?@1!="MZ*WXW:WX^P'O$@0``-!06M!:JP@21Z@$JQ#A!ZL0
MDM"K"%J0K`2[!-:K!,&K#%I0T:L$4!@)D:P$"A,#,6C_PUJK!%C=6-U:F*L2
M?OL#[S`'``#04%G06JL$,73_J`BK$-"M^*L,T5N/I#$``!(=F._@#@``?OL!
M[VX#``#54!,+X@>K$`#06JL$$8[46=!96!$@PUJK!%G065@5%M!:JP3=6=U:
MF*L2?OL#[],&``#04%G#`:L,:Y"L!(K06JL$T5A9$@,QY/ZH(*L0,=3^``[0
MK`1;,JL04,J/^?___U#14`(20-"K"%H3.L-:JP19%3/06JL$LX^$`*L0$P34
M4!$$T*L,4-!0:]U9W5J8JQ)^^P/O:P8``-%061,(J""K$,X!4`344`0```S0
MK`1;S@%:LX\#`:L0$S+@!JL0+=U;^P'OA____]!06IBK$G[[`>\U````U5`8
M`\X!6N$#JQ`*W:L(^P'O\P,``-1KU*L(U*L$U*L,M*L0E*L2T%I0!```%^\"
M!@```````+P&'_($```.U>_X#P``$E;>[XP-``!:$0^SCP,!JA`2!-!:4`3`
M%%K16H\@,P``&>C[`.]0````U5`2*M`,[X\/```1'M!K4+./`P&@$!,AP`1;
MT5OOL`\``!D1T!CO;P\``-10!-#OF@\``%O5:Q+4U6L2#MT4W0'[`N\V`0``
MT%!KT&M0!```#L($7OL`[[X!``#04*W\W03=4/L"[Q,!``#04.]<#P``U5`2
M`]10!'@"K?Q0P>]*#P``4.](#P``WN_:#```6M#O-P\``%L1!M!:B\`46M%:
MCR`S```9\=T!W:W\^P+OR0```-!0[SX.``#0`5`$``S5[P8/```2#/L`[W__
M___54!(!!-#O\@X``%L1%=5K$@[=%-T!^P+OD````-!0:\`$6]%;[]<.```9
MX@0`#M"L!%O5[\0.```2(M[O6`P``%G168\@,P``&#NSCP,!J1`3!=U9^P%K
MP!19$>70[YH.``!:$1?5:A,0T&I0LX\#`:`0$P7=:OL!:\`$6M%:[WT.```9
MX`0``-_O!/[___L![Y?___\$`````/L`[^7____=K`3[`>]5!```!``.T*P$
M6]"L"%K$6UK=6OL![\8```#04%D3"]U:W5G[`N\V````T%E0!```W:P$^P'O
MY@$```0`0"@C*6)Z97)O+G,)-2XS("A"97)K96QE>2D@,R\Y+S@V``````#0
MK`13$0K"4*P(+`!C`%!C/(___U#1K`A0%.LL`&,`K`AC!````!?OO@,`````
M``"\/A_R!``7[ZX#````````O(]9`!_P!```````P@A>WZWZW8\(=`9`W:P$
M^P/O%````-50&`/44`30`5`$`!?O=@,```````"\-A_R!```#]7O[`T``!)>
M^P#O#P,``-!06-!8[]D-``#=`/L![P@#``#04%O#!%A0PP%84=)14<M16U'#
M45!8$Q#=6/L![^<"``#64!(#U%`$U%K0"%D1!<!96=9:T>^6#0``61KRT%KO
MD`T``,,$[X4-``!8T:P$6!H*T`A9U%K.!%@1%]#O;@T``%G0[VL-``!:$0?`
M65D3M-9:P5A94-&L!%`:[]!*[]0,``!;$A/=6OL![R````#02N_!#```6Q.+
MT&M*[[8,``"0C^]K]EJK`<$$6U`$```,P@A>P0.L!%!X4`%0T%!:%`$$T5KO
M!0T``!@0T._]#```K?S'6JW\K?@1#<'O[0P``%JM_-`!K?C=K?S[`>\4`@``
MT%!;T5N/_____Q(!!-"L!%#06T#O2PP``!$'P5I;:\!:6_6M^/4$```,U:P$
M$@$$PP2L!%J::E#14(_O````$P$$FJH!6]!+[Q<,``!JT%I+[PX,```$```,
MP@Q>U*WTU:P$$@O=K`C[`>]Y_O__!,,$K`2M_)J]_%#14(_O````$@W6K?30
MK?Q0FJ`!6A$/W0'=K?S[`N^F````T%!:P0-:4'A0`5O16^\N#```'@7"!%L1
M"\,$[R`,``!0P%!;U:WT$T#56A,AP0):4'A0`5K16N\$#```'@7"!%H1"\,$
M[_8+``!0P%!:T:P(6QH+T:P(6AL%T*P$4`3=K`3[`>\C____W:P(^P'OV?W_
M_]!0K?@2`]10!-&L!*WX$Q[1K`A;'@;0K`A0$0/06U#=4-VM^-VL!/L#[U\`
M``#0K?A0!``.U%K46=!*[Q4+``!;$1716:P($Q/16ZP$$@306E`$UEG0:UO5
M6Q+GUEK16AX9U,X!4`0``$`H(REB8V]P>2YS"34N,R`H0F5R:V5L97DI(#,O
M.2\X-@```$``T*P$4="L"%/0K`Q6T5%3%`H9%P3"4%8H4&%C/(___U#15E`4
M[RA686,$P%91P%93/(___U`1&,)05L)04<)04RA086,\C___4,)04<)04]%6
M4!3CPE91PE93*%9A8P0````7[TX`````````O(]``!_P!```````P>\("@``
MK`1^W0'07%/07ER\$1\0T._S"0``4,"C!._J"0``!!?O$P```````!?O"@``
M``````"\!!_R!`#04._-"0``S@%0!````+P!````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````4````D2&5A9&5R.B`O87!O;&QO+W5S<C(O<'=L+V)R>6%N="]B
M:6XO<W)C+W-A9F5?<FTN8RQV(#$N.2`X-R\P-R\P-B`P.#HU,#HQ."!P=VP@
M17AP("0``````````"5S.B!5<V%G92`E<R!;+69I<ET*`"5S.B!A(")S869E
M(B!R96UO=F4@(%9E<G-I;VX@`"12979I<VEO;CH@,2XY("0`"@`E<SH@=6YK
M;F]W;B!O<'1I;VXN("!5<V%G93H@)7,@6RUF:7)="@!705-410`O=7-R+W1M
M<``O+FQA<W1R;0!W*P`E<SH@=V%S=&4@8F%S:V5T(&`E<R<@+2T@)7,*`"5S
M.B!W87-T92!B87-K970@8"5S)R`M+2!N;W0@82!D:7)E8W1O<GD*`"5S"@`E
M<SH@)7,@+2T@)7,*`"5S.B`E<R`M+2!$:7)E8W1O<GD*`"5S.B`E<S\@`"5S
M.B!O=F5R<FED92!P<F]T96-T:6]N("5O(&9O<B`E<S\@`"5S+R,E9"5S`"5S
M.B!C86XG="!R96UO=F4@*&-O<'DI(&1I<F5C=&]R>2`E<R`M("@E<RD*`"5S
M.B!004Y)0R`M('=R:71E(&5R<F]R('1O("5S("@E<RD*`"5S.B!C86XG="!C
M<F5A=&4@)7,@:6X@8"5S)SH*`'5N<V%F96QY(')E;6]V92`E<S\@`"5S.B!C
M86XG="!R96UO=F4@)7,@+2`E<PH`)7,@)7,@)7,*`$`H(REG971W9"YC"34N
M,B`H0F5R:V5L97DI(#,O.2\X-@```"\`9V5T=V0Z(&-A;B=T('-T870@+P`N
M+P!G971W9#H@8V%N)W0@<W1A="`N`"XN+P!G971W9#H@8V%N)W0@;W!E;B`N
M+@!G971W9#H@<F5A9"!E<G)O<B!I;B`N+@!G971W9#H@<F5A9"!E<G)O<B!I
M;B`N+@`O`"\```!`*",I<')I;G1F+F,)-2XR("A"97)K96QE>2D@,R\Y+S@V
M``!`*",I9V5T96YV+F,)-2XR("A"97)K96QE>2D@,R\Y+S@V``!`*",I9F]P
M96XN8PDU+C(@*$)E<FME;&5Y*2`S+SDO.#8`````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````0"@C*6-L;W-E9&ER+F,@,2XQ(#@V+S`R+S`S(%--
M20!`*",I;W!E;F1I<BYC(#$N,2`X-B\P,B\P,R!334D``(PP````````0"@C
M*7)E861D:7(N8PDS+C,).#8O,#DO,C<);70@6&EN=0``0"@C*69I;&)U9BYC
M"34N,R`H0F5R:V5L97DI(#,O.2\X-@``4````$`H(RES<')I;G1F+F,)-2XR
M("A"97)K96QE>2D@,R\Y+S@V```Q``!`*",I9G!R:6YT9BYC"3,N,@DX-B\Q
M,"\Q,`EM="!8:6YU``!`*",I9&]P<FYT+F,)-2XT("A"97)K96QE>2D@,R\Y
M+S@V``!`*",I9FQS8G5F+F,)-2XR("A"97)K96QE>2D@,R\Y+S@V``!`*",I
M9FEN9&EO<"YC"34N-B`H0F5R:V5L97DI(#,O.2\X-@``````````````````
M`````0`````````````````````````"``$```````````````````````8`
M`@``````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````X#,``$`H(REE>&ET+F,)-2XR
M("A"97)K96QE>2D@,R\Y+S@V`````$`H(REC86QL;V,N8PDU+C(@*$)E<FME
M;&5Y*2`S+SDO.#8``$`H(REI<V%T='DN8PDU+C(@*$)E<FME;&5Y*2`S+SDO
M.#8``$`H(REM86QL;V,N8PDU+C8@*$)E<FME;&5Y*2`S+SDO.#8```0```!\
M-```?#0`````````````````````````````````````````````````````
M```````````````````````````````````$````!`#B!@`````+````!`"2
M`%0````5````!@````@L```<````!``````'```D````!``N!Q`'```K````
M!`#^`:0'```S````!``*!\P)```[````!``""-P)``!$````!`#_!.P)``!-
M````!`!M!P`*``!6````!`!^`B@*``!?````!`!R!70*``!G````!`#%!TP+
M``!P````!`"\!_@+``![````!`!Y`R0,``"%````!`"K!LP,``",````!`#"
M`]P,``"6````!`#%!^0-``"F````!`"7!O@-``"M````!`#P`P@.``"V````
M!`"<"&`.``"_````!`!U"'`.``#(````!`"<`Y@/``#1````!````)@/``#9
M````!````-@7``#@````!`"<`^@7``#J````!`!F`EP8``#R````!`#%!VP8
M``#]````!`#;!8`8```*`0``!`"[`I08```3`0``!``A`.08```=`0``!`!,
M!E09```F`0``!`!F`N@A```O`0``!`!Y`^0C```W`0``!``[!_0C``!!`0``
M!``!!I`E``!(`0``!`#B!J0E``!1`0``!`!Y`]PE``!9`0``!`![!R@F``!A
M`0``!`"B!S@F``!Q`0``!`!+!TPF``!Z`0``!`",!W`F``""`0``!`",!X`F
M``"+`0``!`#Q!A`I``"3`0``!`#Q!I@I``"A`0``!`#7`:PI``"H`0``!`#!
M`]PI``"P`0``!`"5".PI``"Y`0``!`"7!_@I``#!`0``!P!R!0`L``#*`0``
M!0`.!0````#0`0``"0"7!\`S``#7`0``!0!^`U0```#=`0``!0"@`Y`E``#C
M`0``!0`N!DH```#O`0``!P"2``0L``#V`0``!P`I!6`L``#]`0``"0#"`\0S
M```#`@``"0`U",@S```*`@``"0`3!LPS```/`@``"0#0!=`S```4`@``"0!O
M`]0S```>`@``!0#"!;P/```K`@``!0"<!;P&```]`@``!0`8"``*``!%`@``
M!0"K!H`F``!-`@``!0!@!B@*``!5`@``!P`N`Y`Q``!;`@``!0!F`N@A``!D
M`@``!0"<""P.``!L`@``!0!T!W0*``!S`@``!0`""-0)``!Z`@``!0!>!Z0'
M``"!`@``!0"D!>08``"*`@``!0`!!HHC``"2`@``!0!Y`S0'``"8`@``!0#_
M!.0)``"@`@``!0!&`.@7``"I`@``!0!M!_0)``"Q`@``!0!_`S(%``"W`@``
M!0"/"-P&``"_`@``!0##`]0,``#%`@``!0`N!P@'``#,`@``!0!U"&@.``#4
M`@``!0"5".0I``#;`@``!0"<`^`7``#A`@``!0`[!^PC``#H`@``!0"\!W`+
M``#P`@``!0`<".PI``#W`@``!0#^`7`.`````P``!0#P`P`.```&`P``!0`A
M`+@8```.`P``!0"B!S`F```5`P``!0!:`/@+```?`P``!0#:!=P,```H`P``
M!0`*!R0,```Q`P``!0!^`E0:```Z`P``!0!^!/0C``!$`P``!0#%!V08``!+
M`P``!0!Z`\`G``!1`P``!0"7!NP-``!@`P``!0#;!708``!J`P``!0"[`H@8
M``!V`P``!0!*![(-``!_`P``!P`2!R`S``"*`P``!0!,!C`C``"2`P``!P":
M`M0P``"<`P``!0`S!TPF``"D`P``!0"C`G8D``"R`P``!0!K!:0E``"Z`P``
M!0!+!T`F``#)`P``!0!7!.8D``#5`P``!0!I!20E``#=`P``!0"6`WXE``#G
M`P``!0#B!O@I``#N`P``!0![!P`F``#U`P``!0#[!LXE``#\`P``!0",!W@F
M```#!```!0#7`:`I```0!```!0#!`ZPI```6!```!0"[!50G```@!```!P#@
M!+0S```Q!```!0`W!O`G```Z!```!0#Q!C0I``!!!```"0#,!7PT``!&!```
M!P"=`+@S``!-!```!P`]`+PS``!4!```8W)T,"YO`'-A9F5?<FTN;P!?<F-S
M:60`8W)E870N;P!G971S+F\`9V5T=V0N;P!L<W1A="YO`&%C8V5S<RYO`')E
M;F%M92YO`'!R:6YT9BYO`&=E=&5N=BYO`&9O<&5N+F\`<FEN9&5X+F\`8VQO
M<V5D:7(N;P!O<&5N9&ER+F\`;W!E;BYO`')E861D:7(N;P!G971D:7)E;G1R
M:65S+F\`<W1A="YO`'-T<F-A="YO`'5N;&EN:RYO`&9I;&)U9BYO`&5R<FQS
M="YO`%]S8V-S:60`<F5A9"YO`'-P<FEN=&8N;P!L<V5E:RYO`'-I9V)L;V-K
M+F\`<VEG<V5T;6%S:RYO`'-T<F-P>2YO`&9P<FEN=&8N;P!D;W!R;G0N;P!F
M;'-B=68N;P!C;&]S92YO`&9I;F1I;W`N;P!E>&ET+F\`8V%L;&]C+F\`8GIE
M<F\N;P!F<W1A="YO`&=E=&1T86)L97-I>F4N;P!I<V%T='DN;P!I;V-T;"YO
M`&UA;&QO8RYO`&)C;W!Y+F\`9V5T<&%G97-I>F4N;P!S8G)K+F\`=W)I=&4N
M;P!C97)R;W(N;P!?97AI="YO`%]E;G9I<F]N`'-T87)T`%]E<G)N;P!?;6%I
M;@!?97AI=`!?;6]N8V]N=')O;`!M8V]U;G0`7T9L86=S`%]S8G5F`%]W87-T
M90!?=VAO`%]B=68`7VQO9U]F:6QE`%]S>7-?97)R;&ES=`!?>F%P7VQE861I
M;F=?<&%T:`!?<')I;G1F`%]M86QL;V,`7V=E=&5N=@!?7VEO8@!?7V9L<V)U
M9@!?<W1R8V%T`%]F;W!E;@!?;'-T870`7V=E='=D`%]F<')I;G1F`%]F8VQO
M<V4`7V=E=',`7V%C8V5S<P!?<W!R:6YT9@!?<F5N86UE`%]C;W!Y`%]P=71L
M;V<`7V]P96X`7V-R96%T`%]U;FQI;FL`7W=R:71E`%]R96%D`%]C;&]S90!?
M<FEN9&5X`&-E<G)O<@!?7V9I;&)U9@!?<W1A=`!?<W1R8W!Y`%]F<W1A=`!?
M8VQO<V5D:7(`7W)E861D:7(`7V]P96YD:7(`7U]D;W!R;G0`7U]F:6YD:6]P
M`%]L<V5E:P!?9G)E90!?9V5T9&ER96YT<FEE<P!?<VEG8FQO8VL`7W-I9W-E
M=&UA<VL`7W1E;&QD:7(`7U]S;6%L;&)U9@!?9F9L=7-H`%]S>7-?;F5R<@!?
M:7-A='1Y`%]?9E]M;W)E9FEL97,`7V-A;&QO8P!?9V5T9'1A8FQE<VEZ90!?
M9E]P<F5A;&QO8P!?7V9W86QK`%]?8VQE86YU<`!?7V5X:70`7V)Z97)O`%]C
M9G)E90!?:6]C=&P`7V=E='!A9V5S:7IE`%]S8G)K`%]M;W)E8V]R90!?<F5A
M;&QO8U]S<F-H;&5N`%]R96%L;&]C`%]B8V]P>0!?96YD`&UI;F)R:P!C=7)B
M<FL`````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
F````````````````````````````````````````````````````
`
end

graham@sce.UUCP (Doug Graham) (05/03/88)

In article <1079@mcgill-vision.UUCP>, mouse@mcgill-vision.UUCP (der Mouse) writes:
> 
> I looked at doing this for 4.3.  Normally, people will dismiss the idea
> because 4.3 doesn't keep a freelist in the usual sense - it's more like
> bitmaps of free blocks.  But I considered leaving the block pointers
> around, just zapping the size field of the inode, so if you caught it
> before the blocks got reused (always a requirement), you could see the
> pointers still there.  However, it looks as though it isn't going to
> work.  When a file is extended, it is done by writing past the end.  If
> there is a hole, the block addresses there are left untouched as far as
> I can tell, which means they better be zero, or the file hasn't
> acquired holes; it's suddenly acquired blocks that nobody ever expected
> it to have.  Bad news.  This might be fixable, but would require a fair
> piece of kernel work (wherever the size is grown, it must be careful to
> clear block addresses as appropriate).
> 
> 					der Mouse
> 

    If this is the case, a block used to contain pointers to indirect blocks
would have to be cleared when the file was extended. Couldn't the inode
be treated similary: either when the inode is re-used, or when the
first data block is assigned to the new file, the inode is cleared.
Seems to me like a simple matter of moving a bit of code around.
The code that clears the inode when it is de-allocated, is moved
to the place where the inode is allocated.

    A co-worker and I have just finished recovering a directory full
of files that had been accidently deleted. Fortunately, he was using
a single-user SUN, so that the chances of the blocks being re-used
were slim. Since there was no useful information left in the inode,
(except the UID, why?) we could only search all of the free blocks
in the filesystem. We wrote a program that searched all of these blocks
looking for keywords that were known to exist in the files deleted.
(Doesn't work well for binary files). If the inodes had been largely
intact, a lot of time could have been saved.

Doug.

strong@tc.fluke.COM (Norm Strong) (05/04/88)

In article <1079@mcgill-vision.UUCP> mouse@mcgill-vision.UUCP (der Mouse) writes:
}In article <54@lakart.UUCP>, dg@lakart.UUCP (David Goodenough) writes:
}> From article <367@axis.fr>, by inra@axis.fr (Inst. Natl. Rech. Agronomique):
}
}>> After rm command is it possible to recover removed files
}
I solved this problem by creating a directory called ~/junk.  In my alias file
is a line like this:

alias rm '/bin/mv -f \!* ~strong/junk'

Every rm command is now converted to a mv to junk directory file.  After
sufficient time has elapsed, you can clear the directory and start over again
by typing /bin/rm ~/junk/*
-- 

Norm   (strong@tc.fluke.com)