无法递归 chown

无法递归 chown

我正在使用这个命令:

chown root:www-data /var/www/example.com -R 

但我收到一条错误消息,指出该目录未列出。

怎么了?

答案1

你必须把-R选项放在前面。

chown -R root:www-data /var/www/example.com 

(我总是在用户和组之间使用点而不是冒号,但手册页说应该使用冒号)。

答案2

GNU coreutils 版本chown是 Ubuntu 下的标准版本,接受放置在任何地方的选项(只要--不使用)。那是:

chown foo:bar some/location -R
chown -R foo:bar some/location

两者都有效。这是因为如何getopt_long()作品。在我的书中,这是一个错误——因为它应该要么导致错误,要么被记录下来,但据我所知,事实并非如此。

chown foo:bar some/location -- -R

会寻找名为 的目录-R


但是,如果设置环境变量,POSIXLY_CORRECT并且没有名为 的目录,第一个示例将失败-R,并且永远不会递归。

$ export POSIXLY_CORRECT=
$ chown -v :foo a/ -R
ownership of `a/' retained as foo:foo
chown: cannot access `-R': No such file or directory

恕我直言:总是尝试遵守 POSIX 方式,因为有一天您在另一个强制执行 POSIX 的系统上输入该命令,从而破坏了。

另请注意, 的值POSIXLY_CORRECT没有任何影响。这不会禁用它:

export POSIXLY_CORRECT=0
export POSIXLY_CORRECT=no
export POSIXLY_CORRECT=false
export POSIXLY_CORRECT=...

有人需要unset它。


chown您的系统可能是使用其他工具 设置的或POSIXLY_CORRECT已设置。

检查方式:

export | grep POSIX
chown --version
# etc.

附带说明一下,使用点、.、 来分隔组和用户已被废弃POSIX 2001( info coreutils 'chown invocation'),但仍支持向后兼容,但不建议这样做。

相关内容