ls 显示文件,但尝试读取时却说它不存在

ls 显示文件,但尝试读取时却说它不存在

我的电脑上有一个 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

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

[bf@localhost dirX]$ cat WeirdFile
cat: WeirdFile: No such file or directory

尝试cat GoodFile做工作。

自从升级到 Fedora 26 并不得不在 fstab 中强制使用 2.1 版本以来,我一直遇到 CIFS 问题。主要问题是性能不佳(慢!),但这简直太奇怪了。

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

答案1

一个可能的原因是 Weirdfile 的名称中实际上没有使用 ASCII 字符。如果是这种情况,如果您输入文件名,它不起作用,但如果您使用复制/粘贴,它就可以工作(它也可以与命令完成一起使用,具体取决于非 Ascii 字符的位置)。

非 ASCII 字符有两种可能:

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

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

  • 如果这样做ls suspisciousfile | wc -c,则使用全 ASCII 时,wc输出将只比文件名中的字符多一个字节(由于最后的换行符),如果有非 ASCII 字符,则输出将会更长。
  • 使用hexdump:ls suspisciousfile | hexdump -C会使任何非 ASCII 字符非常明显。使用特制的示例filе(其中最后一个е实际上是西里尔字符):

在此处输入图片描述

  • 使用uniname来自包的uniutils。此实用程序逐个字符转储字符串。例如,使用相同的 crafted filе

![在此处输入图片描述

答案2

我有一个来自供应商应用程序的日志文件,它确实让我很困惑。

结果发现它的文件名以空格结尾。

尝试cat *WeirdFile*查看是否有非打印字符

相关内容