Ich weiß, dass dies ein altes Thema ist, aber ich hatte gerade das gleiche Problem und wollte es teilen.
Hier ist meine Geschichte (sei geduldig, es gibt ein Happy End).
Umgebung:
Gentoo Kernel 4.12.5 64bit auf reiserfs
Wie konnte das passieren?
Ich habe mehrere Computer mit einem Ordner, der mithilfe der Synchronisierung freigegeben wurde. Irgendwann in der Vergangenheit habe ich eine Datei mit dem Namen ".stfolder" entfernt und stattdessen ein Verzeichnis mit diesem Namen erstellt. Vielleicht liegt der Fehler an der Synchronisierung dieses Vorgangs auf einem anderen Computer.
Lassen Sie uns nun den Fehler untersuchen: (Ich arbeite hier als root )
ls -lahd .*
drwxrwx--- 5 stopi syncthing 656 3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi 240 3 sept. 18:21 ..
drw-rw---- 2 stopi syncthing 48 3 sept. 18:24 .stfolder
-rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder
-rw-rw---- 1 stopi syncthing 23 28 oct. 2017 .stignore
find -type f -name .stfolder
(<= no output there)
find -type f -name ".*"
./.stignore
./.stfolder
find -type f -name ".s*"
./.stignore
sieht aus wie eine Geisterdatei, der Ordner antwortet jedoch normal (mit find)
file .*
.: directory
..: directory
.stfolder: directory
.stfolder: empty
.stignore: C source, ASCII text
file .s*
.stfolder: directory
.stignore: C source, ASCII text
Ich weiß, sehr seltsam ...
rm -r .stfolder
ls -lahd .*
drwxrwx--- 5 stopi syncthing 656 3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi 240 3 sept. 18:21 ..
-rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder
-rw-rw---- 1 stopi syncthing 23 28 oct. 2017 .stignore
rm .stfolder
rm: impossible de supprimer '.stfolder': Aucun fichier ou dossier de ce type
Ich kann diese Geisterdatei nicht entfernen!
Aber am Ende habe ich es erfolgreich entfernt, indem ich es auf einen tmpfs-Mount-Punkt verschoben habe
mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/
Ich muss sagen, dass der Bug immer noch auf tmpfs vorhanden ist, also nicht mit reiserfs zu tun hat:
cd /elsewhere
ls -lahd .*
-rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder
ls -lahd .s*
ls: impossible d'accéder à '.s*': Aucun fichier ou dossier de ce type
Wie Sie in dieser Bash-Ausgabe sehen können, ist die Datei gleichzeitig vorhanden und nicht vorhanden. Aufgrund dieser Schrödinger-Katzenfähigkeit können wir einen Ordner mit demselben Namen erstellen.
Aber warten Sie, es gibt noch mehr (und Sie sollten dies offensichtlich finden): Wir können auch eine andere Datei mit dem gleichen Namen erstellen.
touch .stfolder
ls -lahdQ
total 0
drwxrwxr-x 3 root users 100 3 sept. 19:13 "."
drwxrwxrwt 18 root root 440 3 sept. 17:35 ".."
-rw-r--r-- 1 root root 0 3 sept. 19:13 ".stfolder"
-rw-r----- 1 root root 0 3 sept. 19:09 ".stfolder"
Der Ghost kann kopiert (damit ich den Bug duplizieren kann) oder durch chown, chmod usw. manipuliert werden. Die einzige Einschränkung besteht darin, dass Sie ihn nicht benennen können, also müssen Sie ihn in ein leeres Verzeichnis legen und ". *" Als verwenden Argumente für diese Befehle ... aber es funktioniert!
Diese Datei war von Anfang an leer (es ist nur ein Flag für die Synchronisierung).
Ich war also neugierig, ob ich einige Daten in diese Datei einfügen könnte.
Und hier kam die Lösung zu mir:
vi .*
" ============================================================================
" Netrw Directory Listing (netrw v162)
" /elsewhere
" Sorted by name
" Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:special
" ==============================================================================
../
./
.<200b>stfolder
Ja, in dieser Datei befindet sich direkt nach dem Punkt ein unsichtbares Zeichen.
Das erklärt alles.
Gott sei Dank habe ich keinen "Echotest >>. *" Und keine Katze benutzt ...
.myfile
?