Я знаю, що це стара тема, але у мене просто було те саме питання, і я хотів поділитися.
Ось моя історія (будьте терплячі, там щасливий кінець).
Навколишнє середовище:
ядро Gentoo 4.12.5 64 біт на рейзерфі
Як це могло статися?
У мене є декілька машин із папкою, якою поділено синхронізацію. Якось у минулому я видалив файл з назвою ".stfolder" і створив натомість каталог із цим ім'ям. Тож можливо помилка пов’язана із синхронізацією синхронізації цієї операції на іншій машині.
Тепер вивчимо помилку: (я тут працюю як 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
схоже, що файл - привид, проте папка відповідає нормально (з пошуку)
file .*
.: directory
..: directory
.stfolder: directory
.stfolder: empty
.stignore: C source, ASCII text
file .s*
.stfolder: directory
.stignore: C source, ASCII text
Я знаю, дуже дивно ...
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
Я не можу видалити цей привидний файл!
Зрештою, я його успішно видалив, перемістивши його на точку монтування tmpfs
mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/
Треба сказати, що помилка все ще присутня на tmpfs, тому не пов’язана з 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
Як ви бачите в цьому виведенні bash, файл одночасно присутній і не присутній. Через цю здатність кота Шредінгера ми можемо створити папку з такою ж назвою.
Але зачекайте, є більше (і вам це здається очевидним): ми також можемо створити ще один файл з такою ж назвою.
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"
Привид може бути скопійований (так що я можу дублювати помилку), або маніпулювати chown, chmod тощо. Єдине обмеження - ви не можете його назвати, тому вам доведеться помістити його в порожній каталог і використовувати ". *" Як аргументи для цих команд ... але це працює!
Через саму природу цього файлу спочатку було порожньо (це лише прапор для синхронізації).
Тож мені було цікаво, чи зможу я помістити деякі дані у цей файл.
І ось до мене прийшло рішення:
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
Так, у цьому файлі є невидимий символ, одразу після крапки.
Це пояснює все.
Слава Богу, я не використовував "ехо-тест >>. *" І котячий ...
.myfile
,?