無法遞歸 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'),但仍支援向後相容,但不建議這樣做。

相關內容