在这个 chown 命令中反斜杠冒号起什么作用?

在这个 chown 命令中反斜杠冒号起什么作用?

\:下面的命令在做什么?

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 中,冒号可用于分隔文件名和主机名(通常用于 和 等命令rsyncscp。在 chown 中,它用于分隔用户和组。

shell 首先读取命令,并确保冒号不被视为特殊字符,而是作为发送给 chown 的参数的一部分,使用反斜杠进行转义。

值得注意的是,在这种特殊情况下,我认为根本没有必要在那里使用冒号,因为使用 chown 不需要指定组,更不用说空白组名了。

如何:

在字符前添加反斜杠很常见,并且可以用于其他许多 shell 会以不同方式处理的字符。例如:

ls test*将列出所有以 test 开头的文件, 并将列出以星号作为实际文件名的一部分的ls test\*文件。test*


有时,当你想对普通字符进行特殊处理时,可以反过来使用转义字符。示例包括:

  • \n换行符
  • \t制表符

答案4

反斜杠是转义符这会修改特殊字符的解释。但是冒号对于 shell 解释器来说不是特殊字符(例如bash),所以它实际上什么也不做。

chown/中的冒号chmod用于区分用户和组名(当指定组操作数时)。以前版本的 chown 实用程序使用点,但它被改为冒号,因为用户和组名可能包含点字符。

相关内容