再帰的にchownを実行できません

再帰的にchownを実行できません

このコマンドを使用しています:

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

しかし、ディレクトリがリストされていないというエラー メッセージが表示されます。

なにが問題ですか?

答え1

-Rオプションを前に置く必要があります。

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

(私は常にユーザーとグループの間にコロンの代わりにドットを使用しますが、マニュアル ページではコロンを使用する必要があると書かれています)。

答え2

Ubuntu の標準である のGNU coreutils バージョンは、(が使用されないchown限り) どこにでも配置できるオプションを受け入れます。つまり、次のようになります。--

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 2001info coreutils 'chown invocation')ですが、下位互換性のために引き続きサポートされていますが、推奨されません。

関連情報