Uiuiuiautsch. Am Wochenende habe ich mir versehentlich ein nicht ganz unwichtiges Verzeichnis auf dem Server geleert, weil ich eigentlich nur einen veralteten Symlink auf das Verzeichnis löschen wollte. Es hat eine Weile gedauert, bis ich das merkte, und dann war es nicht mehr ganz einfach nachzuvollziehen, warum das Verzeichnis auf einmal leer war.

Dann dämmerte es mir; ich hatte statt
rm -rf symlink versehentlich -rf symlink/ abgesetzt -- weil ich den Namen des Links per "tab" Vervollständigung der Shell in den Befehl aufnahm; da kam irgendwie das abschliessende "/" mit rein.

Gerade eben habe ich das noch mal kontrolliert getestet:

# create test directory
(23:41:22) [~] mkdir TESTDIR
# dive into test directory
(23:41:28) [~] cd TESTDIR/
# create some dummy files
(23:41:31) [TESTDIR] touch thing.txt
(23:41:38) [TESTDIR] touch thang.txt
(23:41:44) [TESTDIR] touch thung.txt
# list directory contents
(23:41:50) [TESTDIR] ls
total 8
drwxr-x---  2 user nobody 4096 Mar 23 23:41 .
drwx--x--- 23 user nobody 4096 Mar 23 23:41 ..
-rw-r-----  1 user nobody    0 Mar 23 23:41 thang.txt
-rw-r-----  1 user nobody    0 Mar 23 23:41 thing.txt
-rw-r-----  1 user nobody    0 Mar 23 23:41 thung.txt
# move one step up in directory tree
(23:42:03) [TESTDIR] cd ..
# create symlink to test directory
(23:42:06) [~] ln -s TESTDIR/ TESTLNK
# now "delete" symlink, but accidentally added a trailing slash:
(23:42:21) [~] rm -rf TESTLNK/
# dive into test directory, again
(23:42:42) [~] cd TESTDIR
# list directory contents
(23:42:48) [TESTDIR] ls
total 8
drwxr-x---  2 user nobody 4096 Mar 23 23:43 .
drwx--x--- 23 user nobody 4096 Mar 23 23:42 ..
# O_o ouch

Hossa. Zum Glück hatte ich ein zeitnahes Backup des Verzeichnisses, in dem dummerweise eine komplette Java-Anwendung "lebte", und konnte es mit ein wenig Gefummel wieder zum Laufen bringen. Leute, die Option "-f" ist echt eine Sau, gerade, wenn man sich eigentlich ziemlich sicher ist, was man da macht. Unix beisst Dir trotzdem in den Hintern, sobald Du Dich zu sicher fühlst.

Führte man obigen Befehl samt "/" ohne das -"f" aus, warnt die Shell und gibt ohne den "/" eine Rückfrage, ob der link gelöscht werden soll:

(23:44:44) [~] rm TESTLNK/
rm: cannot remove 'TESTLNK/': Is a directory
(00:03:18) [~] rm TESTLNK 
rm: remove symbolic link 'TESTLNK'?

Also Augen auf beim Konsolentanz.

PS: Natürlich ist das obige Problem auch meiner Bequemlichkeit geschuldet - um einen Symlink, also eine Datei, zu löschen, braucht es natürlich nicht die Angabe "-r" für rekursives Löschen. Weil ich aber im Aufräumwahn auch Verzeichnisse gewollt löschte, habe ich den rm -rf Befehl mittels Pfeil-nach-open Taste aus der hhistory geholt und auf den Link angesetzt, mit erwähntem überraschenden Ergebnis.