[[:mac|{{ :Apple.png?40|}}]]
===== Datei mit Sonderzeichen löschen =====
Bei Datenaustausch kann es mal vorkommen, dass Dateien mit nicht darstellbaren Sonderzeichen auf dem Rechner landen. Diese Dateien lassen sich uU auch in einem Terminal nicht mehr so ohne Weiteres löschen. Aber es besteht noch die Möglichkeit die Datei über seine Inode((http://de.wikipedia.org/wiki/Inode)) direkt im Dateisystem zu löschen.
Das ls-Kommando zeigt die vermeindlich »kaputte« Datei ??erma?[3~ an:
$ ls -la
total 0
-rw-r--r-- 1 pronto wheel 876 23 Mai 14:33 ??erma?[3~
drwxrwxrwt 7 root wheel 238 23 Mai 14:35 .
drwxr-xr-x@ 6 root wheel 204 14 Aug 2009 ..
-rw-r--r-- 1 pronto wheel 987 23 Mai 14:52 obermann
Wenn alle Löschversuche scheitern oder ein Löschen der Datei mit Wildcards nicht in Frage kommt, weil andere Dateien uU davon betroffen wären, wie in diesem Beispiel, kann man sich mit dem stat-Kommando((http://developer.apple.com/mac/library/DOCUMENTATION/Darwin/Reference/ManPages/man1/stat.1.html)) die Inodes der Dateien anzeigen lassen. Der Parameter %d zeigt dabei die Inode des Volumes an respektive des Verzeichnisses, welches das Volume repräsentiert; der Parameter %i die Inode der Datei. Die Dateien werden ihrer Reihenfolge nach im Dateisystem angezeigt:
$ stat -f "%d %i" *erma*
234881025 2028745
234881025 2028819
Nun kann die Datei auch im Dateisystem im Pseudoverzeichnis /.vol über seine Inode gelöscht werden:
$ rm /.vol/234881025/2028745
$ ls -la
drwxrwxrwt 7 root wheel 238 23 Mai 14:35 .
drwxr-xr-x@ 6 root wheel 204 14 Aug 2009 ..
-rw-r--r-- 1 pronto wheel 987 23 Mai 14:52 obermann
--- //pronto 2010/05/23 14:45//
Folgender Workaround sollte nur in Notfällen verwendet werden. Durch das folgende Kommando werden tiefliegende Informationen im Dateisystem manipuliert
Eine weitere Möglichkeit sich widerspenstiger Dateien auf HFS Dateisystemen zu entledigen, ist die Inode der Datei mit dem Befehl clri((http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man8/clri.8.html)) zurückzusetzen. Im Gegensatz zur vorherigen Lösung, wo die Datei über seine Inode angesprochen wurde, wird hier nur die Inode zurückgesetzt, ohne die Datei als solche anzufassen. Es wird dann nur der Inhalt der Inode gelöscht und nicht die Bereiche auf dem Dateisystem wieder freigegeben, auf die der Inode werweist.
Um das deutlicher auszudrücken, muss man das Prinzip der Inodes verstanden haben. Kurz gefasst zeigt ein Dateiname (inklusive Pfad) auf einen Inode im Dateisystem. Dort sind uA die Benutzerrechte und der Eigentümer der Datei abgelegt, die Grösse, das Datum des letzten Zugriffs, der Dateityp, ein Referenzzähler wie oft ein Dateiname auf diese Datei verweist (Links etc) und die Angabe der Dateisystem Cluster, wo der eigentliche Inhalt der Datei im Dateisystem zu finden ist. All diese Informationen löscht das clri-Kommando, was bedeutet, dass der Dateiname immer noch auf die (jetzt leere) Inode verweist. Wird beim späteren Abspeichern einer Datei dieser Inode wieder verwendet, zeigt dieser zwar auf die neue Datei, jedoch ebenfalls noch der Pointer des alten Dateinamen, da dort immer noch die Information über den Inode vorhanden ist. Wird nun diese alte //Datei// gelöscht, löscht man tatsächlich auch den Inhalt der der neuen Datei.
Um mit clri zu arbeiten, sollte das Volume auf dem sich das betroffene Dateisystem befindet, nicht gemountet und ein abschliessender fsck Lauf sollte die Arbeit dann abschliessen.
\\ \\
--- //Pronto 2010/06/11 23:12//
{{keywords>OSX HFS+ inode stats löschen sonderzeichen}}