Невозможно рекурсивно

Я использую эту команду:

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

но я получаю сообщение об ошибке, что каталог не указан.

Что не так?

Вы должны поставить опцию -R спереди.

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

(Я всегда использую точку вместо двоеточия между пользователем и группой, но страницы-мужчины говорят, что нужно использовать двоеточие).

Версия 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' ), но все же поддерживается для обратной совместимости, хотя это не рекомендуется.