Ich versuche, ein angeblich leeres Verzeichnis auf einem ReiserFS-Dateisystem zu löschen, aber ich kann es nicht, weil ich rm
ständig beschwere, dass das Verzeichnis nicht leer sei.
$ rm -rf thedirectory
rm: cannot remove `thedirectory': Directory not empty
$ ls -a thedirectory
. ..
Das Problem ist, alles, was ich tue, um herauszufinden, was tatsächlichIstim Verzeichnis scheint zu zeigen, dass es drei Dateien gibtohne Namen. Zum Beispiel:
$ cd thedirectory
$ ls
ls: cannot access : No such file or directory
ls: cannot access : No such file or directory
ls: cannot access : No such file or directory
$ find .
.
./
./
./
$ ls -N | cat -A
$
$
$
Da ich keine Dateinamen abrufen kann, kann ich stat
diese mysteriösen Dateien nicht ausführen oder sonst etwas Nützliches damit machen. Ein Aufruf stat
des Verzeichnisses selbst führt zu scheinbar normalen Ergebnissen:
$ stat .
File: `.'
Size: 192 Blocks: 0 IO Block: 4096 directory
Device: 807h/2055d Inode: 825484 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ diazona) Gid: ( 1000/ diazona)
Access: 2012-01-27 16:32:45.000000000 -0500
Modify: 2012-01-27 16:31:58.000000000 -0500
Change: 2012-01-27 16:31:58.000000000 -0500
Ich nehme an, dass eine Art Dateisystembeschädigung vorliegt, was wahrscheinlich bedeutet, dass ich herunterfahren, von einem aktiven USB-Laufwerk booten und mein Glück mit versuchen muss reiserfsck
. Aber gibt es eine einfachere Möglichkeit, damit umzugehen?
Antwort1
Wenn Sie rm das -f
Flag geben, beschwert es sich nicht, wenn es etwas nicht tun kann, beispielsweise wenn es versucht, eine Datei zu entfernen, die einem anderen Benutzer gehört (z. B. root), oder wenn Sie keine Schreibberechtigung für das Verzeichnis haben. Dadurch sudo rm -rf /path/to/thedirectory
werden das Verzeichnis und die darin enthaltenen Dateien zweifellos gelöscht. Dies ls -B thedirectory | cat -ve
könnte auch aufschlussreich sein.
Antwort2
Haben Sie versucht, den Inode direkt zu löschen?
$ ls -iN | cat -A
794539 $
$ find . -inum 794539 -exec rm -i {} \;
Antwort3
Sie können alle Dateien sehen mit
ls -la /name/of/path
...dadurch erhalten Sie eine lange Liste, einschließlich aller Punktdateien.
Um ein Verzeichnis und seinen gesamten Inhalt (einschließlich anderer Unterverzeichnisse) zu entfernen, verwenden Sie:
rm -rf /name/of/path/*
...aber seien Sie vorsichtig, wenn Sie das Platzhalterzeichen verwenden möchten, denn das führt zu der (un)berühmten Aussage:
rm -rf *
...was tatsächlich gefährlich ist, sogar für „normale Benutzer“. Wenn Sie jemals das Platzhalterzeichen verwenden müssen, würde ich Folgendes vorschlagen:
rm -rf /name/of/path
oder
rm -rf ./*
... das Letzte mit dem Punkt-Schrägstrich wird unter der Annahme ausgeführt, dass Sie sich „innerhalb“ des Verzeichnisses befinden, das Sie leeren möchten. Sie müssen dennoch ein Verzeichnis nach unten verschieben und es von außerhalb seines eigenen Verzeichnisses entfernen.