8進数形式とシンボリック形式の chmod モードとは?

chmod は、Linux、macOS、その他の Unix システムでファイルの権限を設定するコマンドで、2種類の表記方法に対応しています。755 のような 8進数形式では、所有者、グループ、その他のユーザーそれぞれに1桁を割り当て、読み取りを4、書き込みを2、実行を1で表します。一方、u=rwx,g=rx,o=rx のような シンボリック形式では、クラス(u は所有者、g はグループ、o はその他、a は全員)と権限(rwx)を名前で指定します。

シンボリック形式では、すべての権限を設定するのではなく、権限を変更することもできます。u+x は所有者に実行権限を追加し、go-w はグループとその他のユーザーから書き込み権限を削除し、g=u は所有者の権限をグループにコピーします。8進数形式では常にすべての権限を設定するため、変更後の8進数値は変更前のファイルモードによって異なります。

ツールの説明

このツールは、chmod モードを8進数形式とシンボリック形式の間で変換します。入力元と出力先の表記方法を選択するか、入力元を自動検出のままにしてください。755 を入力すると u=rwx,g=rx,o=rx に変換され、シンボリック形式を入力すると8進数値に変換されます。u+xa+X のような変更の場合は、ファイルの現在のモードを入力すると、chmod の実行後に残るモードを確認できます。-rwxr-xr-x のような ls -l の権限文字列や、chmod コマンド全体を貼り付けることもできます。

8進数 シンボリック形式 ls -l 一般的な用途
644 u=rw,go=r -rw-r--r-- 通常のファイル
755 u=rwx,go=rx -rwxr-xr-x スクリプト、プログラム、ディレクトリ
600 u=rw,go= -rw------- SSH キーなどの非公開ファイル
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x グループを維持する共有ディレクトリ
1777 a=rwx,+t drwxrwxrwt /tmp などの共有一時フォルダー
4755 u=rwxs,go=rx -rwsr-xr-x passwd などのプログラム

機能

  • 8進数形式からシンボリック形式、シンボリック形式から8進数形式へ変換し、方向を切り替える入れ替えボタンを備えています
  • 入力したモードの表記方法を検出するか、選択した表記方法から変換します
  • u+xgo-wa=r,u+wg=ua+X などの相対的な変更を現在のモードに適用します
  • setuid、setgid、sticky bit(st、4桁の8進数形式)に対応しています
  • シンボリック形式を完全な形式(u=rwx,g=rx,o=rx)または簡略形式(u=rwx,go=rx)で出力します
  • sStT を含む ls -l の権限文字列を読み取り、書き出します
  • sudo chmod -R 755 dir のような貼り付けたコマンドを受け付けます
  • モードが無効な場合、正確な文字位置を示します

動作の仕組み

8進数形式は最大4桁の数字として解釈されます。省略可能な最初の桁は setuid(4)、setgid(2)、sticky(1)を表し、残りの3桁は所有者、グループ、その他のユーザーの権限を表します。シンボリック形式は POSIX の文法に従って句ごとに解釈され、Linux 上の GNU chmod と同じ方法で現在のモードに適用されます。

  • + は権限を追加し、- は権限を削除し、= は権限を設定して、指定したクラスの残りの権限をクリアします。
  • X は、ディレクトリと、すでにいずれかのユーザーに実行権限が設定されているファイルにのみ実行権限を追加します。
  • su とともに使用すると setuid を、g とともに使用すると setgid を設定します。toa、またはクラス指定なしで使用すると sticky bit を設定します。
  • +x のようにクラスを指定しない場合、umask によってブロックされているビットを除き、変更は全員に適用されます。
  • ディレクトリでは、g-s のようにモードで指定しない限り、setuid と setgid は現在の状態のまま維持されます。

シンボリック形式の出力ではすべてのビットを明示的に設定するため、ファイルが変更前にどのモードであっても同じ結果になります。sticky bit は、GNU と BSD の chmod の両方がその形式を受け付けるため、独立した +t 句として記述されます。

ヒント

  • chmod -R とともに a+X を使用すると、すべてのファイルを実行可能にすることなく、ディレクトリを検索可能にできます。
  • GNU chmod では、ディレクトリに対する chmod 755 は setgid を解除しません。解除するには chmod 00755 または g-s を使用してください。
  • Ansible や多くの設定ファイルでは、0755 のように先頭に0を付ける形式が必要です。「8進数を常に4桁で表示」をオンにすると、この形式を取得できます。
  • ls -l の文字列の後にある . または + は、SELinux コンテキストまたは ACL を示します。モードには表示されない ACL エントリを確認するには、getfacl を使用してください。