web-dev-qa-db-ja.com

chmod -uは何をしますか?

偶然にchmod -u filenameを実行すると、filenameに対するすべての権限が削除されました。

マニュアルページは-uオプションを参照していません。実験の結果、すべての権限が削除されるわけではなく、読み取りと実行のアクセス権のみが削除され、書き込みアクセス権はそのまま残っていると結論付けることができました。

これは正確に何をするのでしょうか?


上記の私の結論は間違っています。今やっていることは、所有者が持っているアクセス許可をすべてのカテゴリから削除することだと思います。


動作はa=uに類似していると思います。-ではなく=のみであり、aは、たとえば、a+xと同じように削除できます。

19
y_wc

これはオプションではありませんが、アクセス許可を指定する標準的な(ただし一般的ではない)方法です。これは、すべてのユーザーに対して(uu、またはgの前にない)、ファイル所有者(o)に関連付けられた権限を削除(-)することを意味します。これはですがマニュアルページに記載されています。

GNU chmodのマニュアルページ これは次のように記述されています。

シンボリックモードの形式は[ugoa...][[-+=][perms...]...]です。ここで、permsは、セットrwxXstの0個以上の文字、またはセットの1文字ugo

以降

これらの文字の1つ以上の代わりに、文字ugoの1つだけを指定できます。ファイルを所有するユーザーに付与される権限(u)、ファイルのグループのメンバーである他のユーザーに付与される権限(g)、上記の2つのカテゴリのいずれにも属さないユーザーに付与される権限(o

したがって、-uは、すべてのユーザーの所有者(u)に対して現在有効になっているすべての権限(-)を削除することを意味します(現在のumaskを尊重する以外はa-uと同等)。これはあまり役に立ちませんが、たとえばchmod +uは、たとえば、再帰的に操作するときに、所有者から他のユーザーに権限をコピーする場合に役立ちます。


それは POSIXにも文書化されています ですが、より明確に定義されていません。許可の仕様は広くwho[+-=]perms(または数値)であり、それらの効果はさらに指定されています。

Permcopyシンボルug、およびoは、それぞれファイルモードビットのユーザー、グループ、およびその他の部分に関連付けられている現在のアクセス許可を表すものとします。このセクションの残りの部分では、permは、文法の非終端記号permおよびpermcopyを指します。

その後

-

...whoが指定されていない場合、所有者、グループ、およびその他の権限のpermで表されるファイルモードビット(対応するビットを持つものを除く)呼び出しプロセスのファイルモード作成マスクでは、クリアされます。

19
Michael Homer

答えは https://unix.stackexchange.com/a/429424/255251 と少し似ています。

chmod -u file_name

すべての権限が削除されるわけではありませんが、umaskの値が考慮されます。

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

次にumask値を変更します

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
2
Prvt_Yadav