Saya tahu ini adalah topik lama, tetapi saya memiliki masalah yang sama dan saya ingin berbagi.
Inilah kisah saya (bersabarlah, ada akhir yang bahagia).
Lingkungan:
Kernel Gentoo 4.12.5 64 bit pada reiserfs
Bagaimana ini bisa terjadi?
Saya memiliki beberapa mesin dengan folder yang dibagikan menggunakan sinkronisasi. Di beberapa titik di masa lalu, saya telah menghapus file bernama ".stfolder" dan membuat direktori dengan nama itu. Jadi, mungkin bug tersebut disebabkan oleh sinkronisasi yang menyinkronkan operasi ini di komputer lain.
Sekarang mari kita periksa bug: (Saya beroperasi sebagai root di sini)
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
Sepertinya file tersebut adalah hantu namun folder tersebut menjawab secara normal (dengan menemukan)
file .*
.: directory
..: directory
.stfolder: directory
.stfolder: empty
.stignore: C source, ASCII text
file .s*
.stfolder: directory
.stignore: C source, ASCII text
Saya tahu, sangat aneh ...
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
Saya tidak bisa menghapus file hantu itu!
Tetapi pada akhirnya, saya berhasil menghapusnya dengan memindahkannya pada tmpfs mount point
mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/
Saya harus mengatakan bahwa bug tersebut masih ada pada tmpfs, jadi tidak terkait dengan 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
Seperti yang Anda lihat dalam output bash ini, file hadir dan tidak-hadir pada saat yang sama. Karena kemampuan kucing Schrödinger ini , kita dapat membuat folder dengan nama yang sama.
Tapi tunggu, masih ada lagi (dan Anda harus mengetahui ini dengan jelas): kita juga dapat membuat file dengan nama yang sama.
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"
Hantu tersebut dapat disalin (jadi saya dapat menduplikasi bug), atau dimanipulasi oleh chown, chmod, dll. Satu-satunya batasan adalah Anda tidak dapat memberi nama sehingga Anda harus meletakkannya di direktori kosong dan menggunakan ". *" Sebagai argumen untuk perintah-perintah itu ... tetapi berhasil!
Karena sifatnya itu, file ini kosong sejak awal (itu hanya sebuah bendera untuk sinkronisasi).
Jadi saya ingin tahu apakah saya bisa memasukkan beberapa data ke file itu.
Dan di sini, solusinya datang kepada saya:
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
Ya, ada karakter yang tidak terlihat dalam file itu, tepat setelah titik.
Ini menjelaskan semuanya.
Terima kasih Tuhan, saya tidak menggunakan "echo test >>. *" Dan ...
.myfile
,?