例子:
$ ls -lahF '/mnt/test/test directory 001/'
total 1.0G
drwxr-xr-x 2 myuser root 0 Aug 10 01:00 ./
drwxr-xr-x 2 myuser root 0 Aug 10 13:53 ../
-rwxr-xr-x 1 myuser root 1.0G Aug 10 14:00 testfile.bin*
当我尝试ls
此文件时,它不起作用:
$ ls -lahF '/mnt/test/test directory 001/testfile.bin'
ls: cannot access '/mnt/test/test directory 001/testfile.bin': No such file or directory
但是,当我不自己输入文件名,而是使用 tab 键自动完成时,它确实有效:
-rwxr-xr-x 1 myuser root 1.0G Aug 10 14:00 '/mnt/test/test directory 001/testfile.bin'*
如果我然后向上箭头,使用上一个命令,并执行该命令,它就会返回到No such file or directory
。
搜索此内容的 SEO 只会让我想到“自动完成不起作用”的问题。
不知道从哪里开始寻找这个。
这是怎么回事?任何帮助都非常感谢。
该挂载本身是 Samba 挂载。这是我第一次看到这种行为。这个文件有什么特别之处吗?目录、完整路径,也许是 Samba 连接?我该如何检查?
编辑:根据要求:
$ echo '/mnt/test/test directory 001/'* | od -c
0000000 / m n t / t e s t / t e s t d
0000020 i r e c t o r y 0 0 1 / * \n
0000037
文件本身:
$ echo '/mnt/test/test directory 001/testfile.bin'* | od -c
0000000 / m n t / t e s t / t e s t d
0000020 i r e c t o r y 0 0 1 / t e s
0000040 t f i l e . b i n \n
0000052
编辑2:这样做strace ls -la
会产生略有不同的输出。
当找到该文件时,它会给出:
lstat("/mnt/test/test directory 001/testfile.bin", {st_mode=S_IFREG|0755, st_size=1027989040, ...}) = 0
但没找到:
lstat("/mnt/test/test directory 001/testfile.bin", 0x560a93648988) = -1 ENOENT (No such file or directory)
不知道是什么导致了这种差异。
另一个行为注意事项:如果执行自动完成,然后按下Home
,将光标移动到行首,也找不到该文件。
移动光标对此有何影响?
编辑3:
/mnt/test/test directory 001/$ ls | od -c
0000000 t e s t f i l e . b i n \n
挂载选项、凭证和 IP 已编辑:
//<EDIT>/remotedir /mnt/test cifs uid=1000,credentials=/home/myuser/.smb_cred_file,vers=2.1 0 0
输出mount
显示,ip 和用户名也被编辑掉了:
rw,relatime,vers=2.1,cache=strict,username=<EDIT>,domain=,uid=1000,forceuid,gid=0,noforcegid,addr=<EDIT>,file_mode=0755,dir_mode=0755,soft,nounix,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1
远程机器不受我控制。据我了解,它是一种 NAS 解决方案。