我正在使用 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
(如本论坛)或者可能只是格式化整个安装。希望我能找到一个更简单、更温和的解决方案。
我尝试过的一些方法:
sudo
:我尝试运行,sudo ls
但输出没有变化。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
- inode ID:我尝试通过 inode 删除(按照对类似问题的回答),但我也没有运气,因为从上面
ls
命令的输出可以看出,该vcs
目录没有 inode ID。 非 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.
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
为目录设置可执行位:根据类似的问题,“目录的 ls 中显示问号。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
任何帮助将不胜感激。
答案1
这可能是安装服务(例如 Samba)的问题。尝试在远程主机上重新启动 Samba 服务:
sudo service smb restart
答案2
在 Docker 上运行绑定挂载时我遇到了这个问题。我重新启动了 Docker 守护程序,文件被正确删除。
编辑:我在 Windows 10 上使用了 WSL(Ubuntu 16.04)。
答案3
遇到同样的问题:
# ll /tmp/mtp
ls: cannot access /tmp/mtp: Input/output error
root@lenov01 ~ # ll /tmp
ls: cannot access /tmp/mtp: Input/output error
total 68
? d????????? ? ? ? ? ? mtp/
2 drwxr-xr-x 25 root root 4096 Nov 11 05:15 ../
393218 drwx------ 2 root root 4096 Nov 11 05:16 pulse-PKdhtXMmr18n/
393222 -r--r--r-- 1 root root 11 Nov 11 05:16 .X0-lock
创建 /tmp/mtp 目录是为了访问 Android 设备存储:
# jmtpfs /tmp/mtp
我可以用以下方法删除该目录:
# fusermount -u /tmp/mtp