我ls ~
在 RHEL 7 上使用,但得到了<F6>q
输出!这是什么意思?
[user@server2 ~]$ ls /home/user/
<F6>q
[user@server2 ~]$ ll
total 4
-rw-r--r--. 1 root root 340 Sep 18 17:16 <F6>q
[user@server2 ~]$ cat <F6>q
-bash: F6: No such file or directory
[user@server2 ~]$ touch test
[user@server2 ~]$ ls
<F6>q test
[user@server2 ~]$ vim <F6>q
-bash: F6: No such file or directory
[user@server2 ~]$
答案1
这意味着您的文件名为<F6>q
.
这些都是不是无法显示的字符,正如评论答案和其他实际答案所暗示的那样。您可以看到它们显示在您的面前。 ☺
无论如何,都不是针对不可显示的字符发出的<F6>
任何形式。ls
[用户@server2 ~]$ cat <F6>q -bash: F6: 没有这样的文件或目录 [用户@服务器2 ~]$ vim <F6>q -bash: F6: 没有这样的文件或目录 [用户@服务器2 ~]$
您需要了解 shell 语法。
您正在运行cat
和vim
命令,其标准输入从文件重定向F6
,标准输出重定向到文件q
,没有实际的命令参数。前一个重定向失败,因为没有名为 的文件F6
,而是您的文件被命名为<F6>q
,因此根本不会尝试后一个重定向。
这是相同的命令,其中空格显示 shell 如何解析它:
[user@server2 ~]$ cat < F6 > q -bash: F6: 没有这样的文件或目录 [用户@服务器2 ~]$ vim < F6 > q -bash: F6: 没有这样的文件或目录 [用户@服务器2 ~]$
要将包含 shell 元字符的文件名按原样传递给命令,而 shell 不响应元字符,它们必须是引:
vim '<F6>q'或者逃脱了:
vim \<F6\>q
考虑到在命令输入模式下按功能键时 VIM 中发生的情况ex
,使用 VIM 很容易意外生成具有此类名称的文件。
答案2
当您使用 plain ls
(或其别名ll
)并且输出将发送到终端时,RHEL 7ls
会将控制字符和其他不可打印字符转换为可见形式。这很可能就是您所看到的。如果输出到终端以外的任何地方,则不会发生这种默认替换。
您可以使用ls -q
问号替换不可打印的字符。问号是适合单个字符的 shell 通配符,因此如果您运行ls -q /home/user/
并看到?q
响应,则意味着您的神秘文件可能有一个不可打印的字符,其第一个字符为 ASCII 值 0xF6。
您还可以用来ls -b
获取表示为 C 样式转义码的不可打印字符,这可能无法在 shell 中直接使用,但可以准确识别每个不可打印字符。
您可能希望将文件重命名为更易于处理的名称:
cd /home/user
mv ?q possible-typo
它可能是由于将vi
命令错误地输入:wq
为而创建的:w<extra character>q
。该命令的后一种形式被解释为“使用名称保存当前文件<extra character>q
”而不是“使用现有名称保存然后退出”。