我的电脑上有一个 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
。此实用程序逐个字符转储字符串。例如,使用相同的 craftedfilе
:
答案2
我有一个来自供应商应用程序的日志文件,它确实让我很困惑。
结果发现它的文件名以空格结尾。
尝试cat *WeirdFile*
查看是否有非打印字符