ls 显示文件,但是当试图读取它时说它不存在

Bar*_*chs 5 linux fedora mount cifs

我的 PC 上有一个 CIFS 挂载,ls命令显示某个文件在那里:

[bf@localhost dirX]$ ls -la
total 4096
drwxr-xr-x. 2 bf bf      0 20 okt 09:12 .
drwxr-xr-x. 2 bf bf      0  5 sep 11:05 ..
-rwxr-xr-x. 1 bf bf    880 19 okt 17:44 WeirdFile
-rwxr-xr-x. 1 bf bf    880 19 okt 17:44 GoodFile
Run Code Online (Sandbox Code Playgroud)

但是,当尝试从中读取(或保存到其中)时,它说该文件不存在:

[bf@localhost dirX]$ cat WeirdFile
cat: WeirdFile: No such file or directory
Run Code Online (Sandbox Code Playgroud)

试图cat GoodFile做的工作。

自从迁移到 Fedora 26 并且不得不在 fstab 中强制使用 2.1 版后,我无论如何都遇到了 CIFS 问题。主要问题是性能不佳(慢!),但这只是很奇怪。

重新安装共享时更新,文件消失了。

xen*_*oid 3

可能的原因是 Weirdfile 的名称中并未真正使用 ASCII 字符。如果是这种情况,如果您键入文件名,它将不起作用,但如果您使用复制/粘贴,它就会起作用(它也可以与命令完成一起使用,具体取决于非 Ascii 字符的位置)。

\n

非 ASCII 字符有两种可能:

\n
    \n
  • 非 ASCII 字符的字形与拉丁字母中的字形相同(典型的是西里尔字母 \'a\'、\'o\'、\'e\')
  • \n
  • 非 ASCII 字符不可见(例如 +U200B、不间断零宽度空格)。
  • \n
\n

除了复制/粘贴与重新输入的区别之外:

\n
    \n
  • 如果你这样做ls suspisciousfile | wc -c,使用全 ASCIIwc输出将比你可以计算的文件名中的字符多一个字节(由于最终换行),如果有非 ASCII 字符,它会更长。
  • \n
  • with hexdump:ls suspisciousfile | hexdump -C将使任何非 ASCII 字符变得非常明显。特制的示例fil\xd0\xb5(其中结尾\xd0\xb5实际上是西里尔字符):
  • \n
\n

在此输入图像描述

\n
    \n
  • uniname来自包uniutils。该实用程序逐字符转储字符串。例如,使用相同的制作fil\xd0\xb5
  • \n
\n

![在此输入图像描述

\n