Home Hosters Blog Undelte für Linux geht nicht ? Geht doch !

Undelte für Linux geht nicht ? Geht doch ! Drucken

Linux ist ein feines Betriebsystem. Doch die Funktion 'rm' ist sehr heftig. Das liegt daran, wie Linux mit seinem Filesystem umgeht. Eine mit 'rm' gelöschte Datei ist unwiderruflich gelöscht. Das Script, das wir Ihnen hier vorstellen, umgeht dieses Problem. Es ist sogar mit 'unrm' möglich, die Datei anschließend wieder herzustellen.

Legen Sie zwei neue Dateien mit dem Namen newrm und unrm an. Legen Sie die Dateien z.B. in den Ordner /bin

newrm
#!/bin/sh

mydir="$HOME/.TRASH"
realrm="/bin/rm "
copy="/bin/cp -R"


if [ $# -eq 0 ] ; then
exec $realrm
fi

flags=""

while getopts "dfiPRrvW" opt
do

case $opt in
f ) exec $realrm "$@"      ;;
* ) flags="$flags -$opt"   ;;

esac
done
shift $(( $OPTIND - 1 ))


if [ ! -d $mydir ] ; then
if [ ! -w $HOME ] ; then
echo "$0 failed: kann $mydir in $HOME nicht erstellen" >&2
exit 1
fi
mkdir $mydir
chmod 700 $mydir
fi

for arg
do
newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")"
if [ -f "$arg" ] ; then
$copy "$arg" "$newname"
elif [ -d "$arg" ] ; then
$copy "$arg" "$newname"
fi
done

exec $realrm $flags "$@"

----------------------------------------------

unrm

#!/bin/sh

mydir="$HOME/.TRASH"
realrm="/bin/rm"
move="/bin/mv"

dest=$(pwd)

if [ ! -d $mydir ] ; then
echo "$0: No deleted files directory: nothing to unrm" >&2 ; exit 1
fi

cd $mydir

if [ $# -eq 0 ] ; then # no args, just show listing
echo "Contents of your deleted files archive (sorted by date):"
#  ls -FC | sed -e 's/[[:digit:]][[:digit:]]\.//g' -e 's/^/  /'
ls -FC | sed -e 's/\([[:digit:]][[:digit:]]\.\)\{5\}//g' \
-e 's/^/  /'
exit 0
fi

# Otherwise we must have a pattern to work with. Let's see if the
# user-specified pattern matches more than one file or directory
# in the archive.

matches="$(ls *"$1" 2> /dev/null | wc -l)"

if [ $matches -eq 0 ] ; then
echo "No match for \"$1\" in the deleted file archive." >&2
exit 1
fi

if [ $matches -gt 1 ] ; then
echo "More than one file or directory match in the archive:"
index=1
for name in $(ls -td *"$1")
do
datetime="$(echo $name | cut -c1-14| \
awk -F. '{ print $5"/"$4" at "$3":"$2":"$1 }')"
if [ -d $name ] ; then
size="$(ls $name | wc -l | sed 's/[^0-9]//g')"
echo " $index)   $1  (contents = ${size} items, deleted = $datetime)"
else
size="$(ls -sdk1 $name | awk '{print $1}')"
echo " $index)   $1  (size = ${size}Kb, deleted = $datetime)"
fi
index=$(( $index + 1))
done


echo ""
echo -n "Which version of $1 do you want to restore ('0' to quit)? [1] : "
read desired

if [ ${desired:=1} -ge $index ] ; then
echo "$0: Restore cancelled by user: index value too big." >&2
exit 1
fi

if [ $desired -lt 1 ] ; then
echo "$0: restore cancelled by user." >&2 ; exit 1
fi

restore="$(ls -td1 *"$1" | sed -n "${desired}p")"

if [ -e "$dest/$1" ] ; then
echo "\"$1\" already exists in this directory. Cannot overwrite." >&2
exit 1
fi

echo -n "Restoring file \"$1\" ..."
$move "$restore" "$dest/$1"
echo "done."

echo -n "Delete the additional copies of this file? [y] "
read answer

if [ ${answer:=y} = "y" ] ; then
$realrm -rf *"$1"
echo "deleted."
else
echo "additional copies retained."
fi
else
if [ -e "$dest/$1" ] ; then
echo "\"$1\" already exists in this directory. Cannot overwrite." >&2
exit 1
fi

restore="$(ls -d *"$1")"

echo -n "Restoring file \"$1\" ... "
$move "$restore" "$dest/$1"
echo "done."
fi

exit 0

-------------------------------------

Soll das ganze Script für User des Systems noch so gebaut werden, dass der User gar nichts davon mitbekommt, dass es 'newrm' benutzt, können Sie im Profil des Users einen neuen Eintrag wie folgt definieren:

alias rm=/bin/newrm

Achten Sie darauf, dass im Ordner $Home/.TRASH nun alle gelöschten Datein gespeichert werden. Sie sollten von Zeit zu Zeit checken, dass der Ordner nicht überläuft.
Eventuell ist zu prüfen, ob man nicht einen CRON-JOB laufen lassen will, der den Ordern $HOME/.TRASH automatisch von seinen Inhalten cleant.

 

 

Kontakt
Impressum
AGB
Datenschutz
DomainAutomat 
Joomla-Hosting24 
German-Congress-Group 
Isp4you Software 
Joomla Hosting
Typo3 Hosting
Wordpress Hosting
 © 2010 by Provider4u GmbH
Alle Preise inkl. 19% MwSt.

 

 




 
 


Joomla Best Price Hosting Joomla Webhosting Joomla Hosting Joomla Webhosting Joomla Hosting serving deutschen bundestag fairprice garantie