Linux

如何使用所有問號作為權限修復目錄

  • November 11, 2018

我正在使用 CentOS 7 並試圖列出目錄的內容但不能。當我嘗試列出內容時,我得到以下輸出:

[entpnerd@myhost ~]$ ls -ali /data/sharedlogs/otherhost/
ls: cannot access /data/sharedlogs/otherhost/vcs: Not a directory
total 12
2361284 drwxr-xr-x 4 root root 4096 Sep 26 14:40 .
2359297 drwxr-xr-x 6 root root 4096 Apr 26 17:41 ..
2362573 drwxr-xr-x 2 root root 4096 Mar 22  2017 tkr
     ? d????????? ? ?    ?       ?            ? vcs

輸出表明我的目錄 ,vcs是“不是目錄”,即使它應該是,因為這是以前記錄文件的位置。此外,文件權限位現在都是問號,所有者和(莫名其妙的)inode ID 也是如此。

如何讓文件系統再次將我的目錄辨識為目錄?

在嘗試了我在下面概述的所有內容之後,我看到的唯一前進道路是確保磁碟已備份並執行fsck(如本論壇所建議的那樣),或者可能只是格式化整個安裝。希望我能找到一個更簡單、不那麼激烈的解決方案。


我嘗試過的一些事情:

  1. sudo:我嘗試執行sudo ls但輸出沒有差異。
  2. rm: 我試著把vcs它取下來放回去,但沒有運氣。我在有無的情況下都試過了sudo,但也沒有運氣。奇怪的是,當我嘗試sudo rm它時說Is a directory. 我也嘗試rm-r-d開關,也沒有運氣。我從rm命令嘗試中得到的輸出是:
[entpnerd@myhost ~]$ rm /data/sharedlogs/otherhost/vcs
rm: cannot remove ‘/data/sharedlogs/otherhost/vcs’: Not a directory
[entpnerd@myhost ~]$ sudo rm /data/sharedlogs/otherhost/vcs
rm: cannot remove ‘/data/sharedlogs/otherhost/vcs’: Is a directory
[entpnerd@myhost ~]$ sudo rm -r /data/sharedlogs/otherhost/vcs
rm: cannot remove ‘/data/sharedlogs/otherhost/vcs’: Is a directory
[entpnerd@myhost ~]$ rm -r /data/sharedlogs/otherhost/vcs
rm: cannot remove ‘/data/sharedlogs/otherhost/vcs’: Not a directory
[entpnerd@myhost ~]$ rm -rd /data/sharedlogs/otherhost/vcs
rm: cannot remove ‘/data/sharedlogs/otherhost/vcs’: Not a directory
[entpnerd@myhost ~]$ sudo rm -rd /data/sharedlogs/otherhost/vcs
rm: cannot remove ‘/data/sharedlogs/otherhost/vcs’: Is a directory
  1. inode ID:我嘗試通過 inode 刪除(正如this answer to a similar question所建議的那樣),但我也沒有運氣,因為從上述ls命令的輸出中可以看出,該vcs目錄沒有 inode ID。
  2. 非 ASCII 字元:在文章“如何刪除不可刪除的目錄”中,目錄包含非 ASCII 字元。這也不是我從xxd輸出中看到的情況:
[entpnerd@myhost ~]$ ls -l /data/sharedlogs/otherhost/ | xxd
ls: cannot access /data/sharedlogs/otherhost/vcs: Not a directory
0000000: 746f 7461 6c20 340a 6472 7778 722d 7872  total 4.drwxr-xr
...
0000040: 3f3f 3f3f 3f20 3f20 3f20 2020 203f 2020  ????? ? ?    ?  
0000050: 2020 2020 203f 2020 2020 2020 2020 2020       ?          
0000060: 2020 3f20 7663 730a                        ? vcs.
  1. lsattr:正如類似問題“為什麼我不能以 root 身份刪除此文件? ”所建議的那樣,我嘗試使用該lsattr命令,但也沒有運氣:
[entpnerd@myhost ~]$ lsattr /data/sharedlogs/otherhost/
-------------e-- /data/sharedlogs/otherhost/tkr
/data/sharedlogs/otherhost/vcs: Not a directory
[entpnerd@myhost ~]$ lsattr /data/sharedlogs/otherhost/vcs
lsattr: Not a directory while trying to stat /data/sharedlogs/otherhost/vcs
[entpnerd@myhost ~]$ sudo lsattr /data/sharedlogs/otherhost/vcs
[sudo] password for entpnerd: 
lsattr: Not a directory while trying to stat /data/sharedlogs/otherhost/vcs
  1. 為目錄設置可執行位:根據類似的問題,“問號顯示在 ls of directory.IO 錯誤中”,我嘗試為目錄設置可執行位,但也沒有運氣。
[entpnerd@myhost ~]$ sudo chmod -R g+x /data/sharedlogs/otherhost/vcs
[sudo] password for entpnerd: 
chmod: cannot access ‘/data/sharedlogs/otherhost/vcs’: Not a directory
[entpnerd@myhost ~]$ sudo chmod -R u+x /data/sharedlogs/otherhost/vcs
chmod: cannot access ‘/data/sharedlogs/otherhost/vcs’: Not a directory
[entpnerd@myhost ~]$ sudo chmod -R a+x /data/sharedlogs/otherhost/vcs
chmod: cannot access ‘/data/sharedlogs/otherhost/vcs’: Not a directory

任何幫助將不勝感激。

這可能是安裝服務(例如 Samba)的問題。嘗試在遠端主機上重新啟動 Samba 服務:

sudo service smb restart

我在 Docker 上執行綁定掛載時遇到了這個問題。我重新啟動了 Docker 守護程序,文件被正確刪除。

編輯:我在 Windows 10 上使用了 WSL(Ubuntu 16.04)。

引用自:https://serverfault.com/questions/878267