Wiem, że to stary temat, ale właśnie miałem ten sam problem i chciałem się nim podzielić.
Oto moja historia (bądź cierpliwy, jest szczęśliwy koniec).
Środowisko:
jądro Gentoo 4.12.5 64 bity na reiserfs
Jak to się mogło stać?
Mam kilka komputerów z folderem współdzielonym za pomocą synchronizacji. W pewnym momencie w przeszłości usunąłem plik o nazwie „.stfolder” i zamiast tego utworzyłem katalog o tej nazwie. Może więc błąd wynika z synchronizacji synchronizacji tej operacji na innym komputerze.
Teraz zbadajmy błąd: ( działam tutaj jako 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
wygląda na to, że plik jest duchem, jednak folder odpowiada normalnie (z funkcją wyszukiwania)
file .*
.: directory
..: directory
.stfolder: directory
.stfolder: empty
.stignore: C source, ASCII text
file .s*
.stfolder: directory
.stignore: C source, ASCII text
Wiem, bardzo dziwne ...
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
Nie mogę usunąć tego pliku ducha!
Ale w końcu udało mi się go usunąć, przenosząc go na punkt montowania tmpfs
mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/
Muszę powiedzieć, że błąd jest nadal obecny na tmpfs, więc nie jest związany z reiserfs:
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
Jak widać na tym wyjściu bash, plik jest obecny i jednocześnie nieobecny. Dzięki tej zdolności kota Schrödingera możemy utworzyć folder o tej samej nazwie.
Ale poczekaj, jest więcej (i powinieneś znaleźć to oczywiste): możemy również stworzyć inny plik o tej samej nazwie.
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"
Ducha można skopiować (więc mogę zduplikować błąd) lub manipulować przez chown, chmod itp. Jedynym ograniczeniem jest to, że nie możesz go nazwać, więc musisz umieścić go w pustym katalogu i użyć „. *” Jako argumenty dla tych poleceń ... ale to działa!
Ze względu na samą naturę ten plik od samego początku był pusty (jest to tylko flaga do synchronizacji).
Byłem więc ciekawy, czy mogę umieścić jakieś dane w tym pliku.
I tutaj przyszło mi rozwiązanie:
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
Tak, w pliku znajduje się niewidoczny znak, tuż za kropką.
To wszystko wyjaśnia.
Dzięki Bogu, nie użyłem „testu echa >>. *” I kota ...
.myfile
?