chmod

chmod
原作者AT&Tベル研究所
開発者さまざまなオープンソースおよび商用開発者
初回リリース1971年11月3日 (1971年11月3日
書かれたプラン9:C
オペレーティング·システムUnixUnixライクPlan 9InfernoIBM i
プラットフォームクロスプラットフォーム
タイプ指示
ライセンスcoreutils : GPLv3プラン 9: MIT ライセンス

chmodは、ファイル(ディレクトリなどの特殊ファイルを含む)のアクセス権限と特殊モードフラグを変更するためのシェルコマンドです。このコマンド名はch ange mod eの略で、 modeは権限とフラグを総称します。[ 1 ] [ 2 ]

このコマンドはAT&T Unixバージョン1で開発され、 WindowsUnxUtils[ 3 ]IBM i [ 4 ]などの他のオペレーティングシステムに移植されるまで、UnixおよびUnix系オペレーティングシステム専用でした。

UnixおよびUnix系オペレーティングシステムでは、コマンドと同じ名前のシステムコールであるchmod()によって、基盤となるアクセス制御データへのアクセスが可能になります。このコマンドは、システムコールの機能をシェルユーザーに公開します。

ファイルシステムの権限強化の必要性が高まるにつれ、アクセス制御リスト[ 5 ]が多くのファイルシステムに追加され、アクセス制御リストを介して制御されるモードが強化されましたchmod

GNU coreutilschmodにバンドルされているの実装は、David MacKenzieとJim Meyeringによって書かれました。[ 6 ]

使用

コマンドの構文は実装によって多少異なりますが、一般的には単一の8進数値(各ファイルのすべてのモードビットを指定する)、またはコンマ区切りのシンボル指定子のリスト(各ファイルの既存のモードビットをどのように変更するかを記述する)のいずれかを受け入れます。残りの引数は、変更するファイルへのパスのリストです。[ 7 ]

権限の変更は、スーパーユーザー (root) とファイルの所有者にのみ許可されます。

シンボリックリンクが指定された場合、リンク先のモードビットが調整されます。シンボリックリンクのファイルシステムエントリに直接関連付けられた権限は通常使用されません。

オプション

オプションのコマンドライン オプションには次のものが含まれます。

  • -R再帰的; 指定されたディレクトリに含まれるファイルとサブディレクトリを含める
  • -v詳細; 変更されたファイル名をログに記録する

8進表記

数値の権限引数が与えられた場合、コマンドはそれを8進[ a ]chmodとして扱い、各ファイルのすべての モードビットを置き換えます。(4桁の数字が指定されていますが、先頭の数字は省略できます。)[ 8 ]0

標準モード ビットは 12 個あり、3 つの特殊ビット ( setuidsetgid、およびsticky ) と、それぞれ 3 ビットの3 つの権限グループ ( usergroup、およびotherによるアクセスを制御) ( readwrite、およびexec/scan ) で構成されます。各権限ビットは、設定されている場合 (1) はアクセスを許可し、クリアされている場合 (0) はアクセスを拒否します。

8進数は3ビットの値を表すため、12個のモードビットは4桁の8進数で表すことができます。最大chmod4桁まで入力でき、指定されていない左側の桁には0が使用されます(数値表現の通常の方法と同様)。実際には、特殊モードはほとんど使用されないため、通常はユーザークラスが指定され、3桁で指定されるのが一般的です。

8 進数のコンテキストでは、各演算ビットは数値を表します: 読み取り: 4、書き込み: 2、実行: 1。次の表は、8 進数の値とクラス演算値を関連付けています。

8進数の許可
#ビット rwx 許可された操作
7 4 + 2 + 1rwx読み、書き、実行
6 4 + 2 rw-読み書き
5 4 + 1r-x読み取って実行する
4 4r--読み取り専用
3     2 + 1-wx書いて実行する
2     2-w-書き込みのみ
1         1--x実行のみ
0 ---なし

このコマンドはstatファイルの権限を8進数で報告できます。例:

$ stat -c %a findPhoneNumbers.sh 754

報告された値は、754次の権限を示します。

  • ユーザークラス: 読み取り、書き込み、実行; 7 => (4 + 2 + 1)
  • グループクラス: 読み取りと実行; 5 => (4 + 1)
  • その他クラス: 読み取り専用; (4)

コードの実行は、奇数(1、3、5、または7)の場合にのみ許可されます。コードの読み取りは、4以上の場合(4、5、6、または7)にのみ許可されます。コードの書き込みは、2、3、6、または7の場合にのみ許可されます。

記号表記

このchmodコマンドは、既存の権限をどのように変更するかを指定する記号表記を受け入れます。[ 9 ]このコマンドは、次のようなコンマ区切りの指定子のリストを受け入れます。[classes]+|-|=operations

クラスは権限をユーザーにマッピングします。変更指定子は、シンボルを含めることで1つのクラスを選択することも、各クラスのシンボルを区切り文字なしで含めることで複数のクラスを選択することも、シンボルを指定せずにすべてのクラスを選択することもできます。最後の方法を使用する場合、umaskマスクのビットは変更されません。[ 10 ]クラス指定子には以下が含まれます。

クラス指定子
シンボル説明
あなたユーザー: ファイルの所有者
グラムグループ: ファイルのグループのメンバー
oその他: ファイルの所有者でもファイルのグループのメンバーでもないユーザー
1つの3つのクラスすべて; 同じugo

所有権はアクセス制御の鍵であり、記号仕様では略語o が使用されているため、実際はothersの略語であるにもかかわらず、 owner を意味すると誤解する人もいます。

変更演算子には次のものがあります:

オペレーター
シンボル説明
+操作/フラグを追加する
-操作/フラグを削除する
操作/フラグフィールド全体を設定し、指定された操作を許可し、その他を拒否します。

操作は次のように指定できます。

操作指定子
シンボル説明
r通常のファイルを読み込んだり、ディレクトリの内容を一覧表示したりする
wファイルに書き込む
×通常のファイルを実行するか、ディレクトリツリーを再帰的に 実行する
X特別な実行: ディレクトリに実行を適用し(現在の権限に関係なく)、すでに少なくとも1つの実行権限が付与されているファイルに実行を適用します(任意のクラスに対して)。操作でのみ役立ち+、通常はオプションと組み合わせて、-R通常のファイルに実行権限を設定せずにグループまたは他のユーザーにディレクトリツリーへのアクセスを許可します。これは通常、 で発生しますchmod -R a+rx .。代わりに を使用します。chmod -R a+rX .
ss etuid モードまたはs etgid モード
tスティッキーモード

ほとんどのchmod実装では、8 進数での特殊モードの指定がサポートされていますが、一部の実装ではサポートされておらず、記号表記の使用が必要です。

このlsコマンドは、 で使用される記法に似た記号表記でファイル権限を報告できますchmodls -lは10文字で構成される記法で権限を報告します。最初の文字はファイルシステムエントリの種類を示します。例えば、通常のファイルの場合はダッシュ、ディレクトリの場合は「d」です。その後に、ユーザー、グループ、その他のクラスごとにグループ化された読み取り、書き込み、実行権限を示す3文字の組が3つ続きます。各位置は、権限が不足していることを示すダッシュ、または権限が付与されていることを示す1文字の略語です。例:

$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 ドイツ人スタッフ 823 12 月 16 日 15:03 findPhoneNumbers.sh

パーミッション指定子は-rwxr-xr--ダッシュで始まり、これはfindPhoneNumbers.shディレクトリではなく通常のファイルであることを示します。次の3文字は、rwx所有ユーザーがファイルの読み取り、書き込み、実行を許可されていることを示しますdgerman。次の3文字は、グループr-xのメンバーがファイルの読み取りと実行を許可されていることを示しますstaff。最後の3文字は、r--ファイルが他のユーザーに対して読み取り専用であることを示します。

ディレクトリのグループクラスに書き込み権限を追加して、同じグループ内のユーザーがファイルを追加できるようにします。

$ ls -ld dir # drwxr-xr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir 以前$ chmod g+w dir $ ls -ld dir # drwxrwxr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir 後

すべてのクラスの書き込み権限を削除し、誰もファイルに書き込めないようにします。

$ ls -l ourBestReferenceFile -rw-rw-r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile $ chmod a-w ourBestReferenceFile $ ls -l ourBestReferenceFile -r--r--r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile

ユーザークラスとグループクラスの権限を読み取りと実行のみに設定し、書き込み権限は設定せず、誰もファイルを追加できないようにします。

$ ls -ld ReferenceLib drwxr----- 2 ebowman NORTHREGION 96 4月 8 12:53 ReferenceLib $ chmod ug = rx ReferenceLib $ ls -ld ReferenceLib dr-xr-x--- 2 ebowman NORTHREGION 96 4月 8 12:53 ReferenceLib

ユーザークラスに対して書き込み有効にし、グループやその他のクラス に対しては読み取り専用にします。

$ chmod u = rw,go = rサンプル $ ls -ldサンプル drw-r--r-- 2 oschultz warehousing 96 12月 8日 12:53 サンプル

docs/ディレクトリとその中のファイルへのアクセスを再帰的に設定するには:

chmod -R u+w docs/

ユーザーとグループを読み取りと書き込み専用に設定し、その他を読み取り専用に設定するには:

chmod 664 file

ユーザーを読み取り、書き込み、実行のみに設定し、グループとその他を読み取り専用に設定するには:

chmod 744 file

ユーザー、グループ、その他の権限に加えてスティッキー ビットを設定するには:

chmod 1755 file

ユーザー、グループ、その他の権限に加えて UID を設定するには:

chmod 4755 file

ユーザー、グループ、その他の権限に加えて GID を設定するには:

chmod 2755 file

参照

  • attrib
  • caclsアクセス制御リストを変更する
  • chattrファイルの属性を変更する
  • chgrpファイルのグループを変更します
  • chownファイルの所有者を変更する
  • グループ識別子 – Unix/POSIXシステムのアカウントグループ番号。特定のグループを表すために使用される数値。
  • POSIXコマンドのリスト
  • ユーザー識別子 – UnixおよびUnix系オペレーティングシステムでユーザーアカウントを識別する値
  • umaskファイル作成時に権限を制限する

注記

  1. ^なぜ10進数ではなく8進数なのか?今日ではほとんど使われていませんが、UNIXの初期開発においては、8進数は非常に有用でした。当時のコンピュータの物理構造では3ビットの繰り返しグループが一般的であり、これらのビットを8進数としてエンコードすると読みやすく理解しやすかったためです。これは、4ビットのグループを16進数にまとめると理解しやすくなるのと同じです。ファイルシステムのパーミッションを8進数で数値表現することは、この時代の数少ない名残の一つです。

参考文献

  1. ^長い形式でファイルをリストすると、モード/権限が表示されます
  2. ^ 「chmod のチュートリアル」 . catcode.com .
  3. ^ 「いくつかの GNU ユーティリティのネイティブ Win32 ポート。unxutils.sourceforge.net
  4. ^ IBM . 「IBM System i バージョン 7.2 プログラミング Qshell」(PDF) . IBM . 2020年9月5日閲覧
  5. ^ 「AIX 5.3 システム管理」 . IBM ナレッジセンター. IBM . 2015年8月30日閲覧
  6. ^ "chmod(1): ファイルモードビットを変更する - Linux manページ" . linux.die.net .
  7. ^ 「chmod のマニュアルページ(例と計算機付き) - Linux - SS64.com 。ss64.com (「スペース区切り」はchmod 自体の機能ではなく、シェルの機能であることに注意してください。)
  8. ^これは、 8進数の接頭辞が初期の名残である「C」言語とは異なります0
  9. ^ 「AIX 5.5 コマンド・リファレンス」 . IBM Knowledge Center . IBM . 2015年8月30日閲覧
  10. ^ 「umask、chmod、777 の 8 進数パーミッションによるパーミッション マスキング。teaching.idallen.com