Tôi biết đây là một chủ đề cũ, nhưng tôi chỉ có cùng một vấn đề và tôi muốn chia sẻ.
Đây là câu chuyện của tôi (hãy kiên nhẫn, có một kết thúc có hậu).
Môi trường:
Gentoo kernel 4.12,5 64 bit trên reiserfs
Làm thế nào điều này có thể xảy ra?
Tôi đã có một số máy với một thư mục được chia sẻ bằng cách sử dụng đồng bộ hóa. Tại một số thời điểm trong quá khứ, tôi đã xóa một tệp có tên ".stfolder" và thay vào đó, tạo một thư mục có tên đó. Vì vậy, có thể lỗi là do đồng bộ hóa đồng bộ hóa hoạt động này trên một máy khác.
Bây giờ chúng ta hãy kiểm tra lỗi: (Tôi đang hoạt động như root ở đây)
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
Có vẻ như tệp là một con ma tuy nhiên thư mục đang trả lời bình thường (có tìm)
file .*
.: directory
..: directory
.stfolder: directory
.stfolder: empty
.stignore: C source, ASCII text
file .s*
.stfolder: directory
.stignore: C source, ASCII text
Tôi biết, rất kỳ lạ ...
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
Tôi không thể xóa tập tin ma đó!
Nhưng cuối cùng, tôi đã loại bỏ nó thành công bằng cách di chuyển nó trên điểm gắn kết tmpfs
mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/
Tôi phải nói rằng lỗi vẫn còn trên tmpfs, vì vậy không liên quan đến 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
Như bạn có thể thấy trong đầu ra bash này, tệp có mặt và không hiện diện cùng một lúc. Vì khả năng mèo Schrödinger này , chúng tôi có thể tạo một thư mục có cùng tên.
Nhưng chờ đã, còn nhiều điều nữa (và bạn sẽ thấy điều này rõ ràng): chúng ta cũng có thể tạo một tệp khác có cùng tên.
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"
Con ma có thể được sao chép (vì vậy tôi có thể sao chép lỗi) hoặc thao tác bằng chown, chmod, v.v. Hạn chế duy nhất là bạn không thể đặt tên cho nó để bạn phải đặt nó vào một thư mục trống và sử dụng ". *" đối số cho các lệnh đó ... nhưng nó hoạt động!
Do bản chất của nó, tập tin này trống rỗng khi bắt đầu (nó chỉ là một lá cờ cho đồng bộ hóa).
Vì vậy, tôi đã tò mò nếu tôi có thể đặt một số dữ liệu trong tập tin đó.
Và đây, giải pháp đã đến với tôi:
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
Vâng, có một nhân vật vô hình trong tập tin đó, ngay sau dấu chấm.
Cái này giải thích tất cả.
Cảm ơn chúa, tôi đã không sử dụng "echo test >>. *" Và mèo ...
.myfile
?