\:
下面的命令在做什么?
sudo chown nobody\: folder/
这是什么错误?
答案1
这\
没有任何区别,因为 shell 会消除这一点。该chown
实用程序将接收一个文字nobody:
作为其第一个参数。
不过,存在与否:
确实会有所不同。请参阅 chown 的手册页以获取清晰的描述。
sudo chown nobody folder/
更改所有者,但保持文件组不变。
sudo chown nobody: folder/
更改文件的所有者和组。组设置为nobody
用户的默认组,如在/etc/passwd
或其他机制(例如 ldap)中定义的那样。
答案2
反斜杠 (\) 确保 shell 不会将以下字符解释为shell 元字符. 由于结肠是不是对于这样的字符,反斜杠实际上什么也不做。
冒号 (:) 用于将“用户”与“组”分隔开——该chown
命令会同时更改两者用户和团体所有权。如果没有指定组,则不需要冒号,因此实际上什么也不做。
答案3
什么:
它被称为字符转义,并确保结肠确实得到如此对待。
为什么:
在 shell 中,冒号可用于分隔文件名和主机名(通常用于 和 等命令rsync
)scp
。在 chown 中,它用于分隔用户和组。
shell 首先读取命令,并确保冒号不被视为特殊字符,而是作为发送给 chown 的参数的一部分,使用反斜杠进行转义。
值得注意的是,在这种特殊情况下,我认为根本没有必要在那里使用冒号,因为使用 chown 不需要指定组,更不用说空白组名了。
如何:
在字符前添加反斜杠很常见,并且可以用于其他许多 shell 会以不同方式处理的字符。例如:
ls test*
将列出所有以 test 开头的文件, 并将列出以星号作为实际文件名的一部分的ls test\*
文件。test*
有时,当你想对普通字符进行特殊处理时,可以反过来使用转义字符。示例包括:
\n
换行符\t
制表符
答案4
反斜杠是转义符这会修改特殊字符的解释。但是冒号对于 shell 解释器来说不是特殊字符(例如bash
),所以它实际上什么也不做。
chown
/中的冒号chmod
用于区分用户和组名(当指定组操作数时)。以前版本的 chown 实用程序使用点,但它被改为冒号,因为用户和组名可能包含点字符。