我正在使用这个命令:
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'
),但仍支持向后兼容,但不建议这样做。