てもとツール
ツール紹介

755とrwxr-xr-xを行き来する手順|ls -lの行も読む

パーミッションの数字と記号を行き来する手順をまとめました。ls -l の行をそのまま貼る方法、ファイルとディレクトリで w の意味が変わること、chmod の記号指定を打つ前に結果を見る方法、s と S の違いまで、画面を追いながら書いています。

公開読了目安 約4分

この記事の要点

  • 数字も記号もls -lの行もそのまま読める
  • 桁の内訳が4+2+1の足し算で出る
  • ファイルとディレクトリで説明文が変わる
  • 記号指定は打つ前に結果を確かめられる
  • 大文字のSとTは実行ビットが無い印
目次

権限まわりの数字は、見た目のわりに読み替えが面倒です。755 と rwxr-xr-x が同じものだと知っていても、手元で足し算をやり直すことになります。

その行き来をまとめて済ませるのがchmodパーミッション計算です。数字でも記号でも、ls -l の行そのままでも読み取ります。

桁の内訳が足し算のまま出る

入力欄に 755 と入れると、上に 4 つの読み方が並びます。4 桁の 0755、3 桁の 755、記号の rwxr-xr-x、ls -l 形式の -rwxr-xr-x です。

その下に、所有者・グループ・その他の 3 行が出ます。

所有者 7 rwx が 4 + 2 + 1 = 7、グループ 5 r-x が 4 + 1 = 5、その他 5 r-x が 4 + 1 = 5 と、それぞれの記号と短い意味つきで並んでいる

7 が 4 + 2 + 1 の足し算として出るので、どの数がどの権限に当たるかを覚え直さずに済みます。読みが 4、書きが 2、実行が 1 です。

1 桁だけ書いたときは右詰めになる

chmod 7 と打つと、権限が付くのは所有者ではありません。桁は右から その他・グループ・所有者 の順に並ぶので、7 は 0007 として読まれます。

このツールに 7 と入れると 0007 と出て、右詰めで読んだことが通知に出ます。記号にすると ------rwx で、権限を持つのはその他のユーザーだけです。

ls -l の行をそのまま貼る

ターミナルの出力を数字に直したいときは、行をまるごと貼り付けます。行頭の 10 文字だけが使われ、残りは無視されます。

読み取り方の通知。先頭の d をディレクトリとして読んだこと、ls -l の 1 行として読み、使ったのは行頭の 10 文字だけであることが 2 行で出ている

先頭の 1 文字も読みます。d ならディレクトリ、- なら通常のファイルとして、種別のボタンが自動で切り替わります。

ls -l の末尾に + や . や @ が付いていることがあります。これは拡張属性の印なので読み飛ばし、飛ばしたことを通知に出します。

ファイルとディレクトリで説明文が変わる

種別のボタンは手でも切り替えられます。同じ 755 のまま切り替えると、内訳の説明だけが変わります。

いちばん差が出るのは w です。ファイルでは「中身を書き換える」ですが、ディレクトリでは「中のものを作る・消す・名前を変える」になります。

ここが実際のつまずきどころです。読み取り専用にしたファイルでも、置いてあるディレクトリに w と x があれば消えます。消される側の権限は関係しません。

w だけでは足りない点にも注意してください。中をたどれないと、消す相手にたどり着けないためです。

x も違います。ファイルでは実行、ディレクトリでは「中のパスをたどる」です。r だけあって x が無いディレクトリは、名前の一覧は取れても中身を開けません。

chmod の記号指定を打つ前に結果を見る

「chmod の記号指定を当てる」の欄に u+x,go-w のように入れると、いまの値に当てた結果が出ます。

適用前 0664 rw-rw-r-- が 0744 rwxr--r-- に変わる表示。かたまりごとに u+x で 0764 になり 0100 が立ったこと、go-w で 0744 になり 0020 が落ちたことが並んでいる

かたまりごとの内訳も出ます。u+x で所有者の実行が立ち、go-w でグループの書き込みが落ちた、という順序がそのまま読めます。

u+rw-x のように 1 つのかたまりに複数書く形も、a=r のようにいったん全部落とす形も受け取ります。

u・g・o を書かないと umask が効く

+w のように相手を書かない指定には、umask が関わります。POSIX は「相手を書かないときは umask のビットを対象から外す」と定めているためです。

下の umask 欄の値がそのまま使われ、外したビットが結果に出ます。chmod +w が思ったほど広がらないのは、この仕組みが働いているからです。

umask 欄が空だったり読めない値だったりすると、この形の指定は計算せずに断ります。入れていない値で結果を出さないためです。

かたまりは左から順に効く

u+x,a+X のように並べると、右のかたまりは左の結果を見ます。0600 に当てると u+x で 0700 になり、a+X がその実行ビットを見て 0711 になります。

a+X だけを 0600 に当てると何も変わりません。実行ビットが 1 つも無いためです。

意味が定まっていない組み合わせは、そう書く

t を u や g と組んだときの意味を、POSIX は定めていません。ディレクトリ以外に t を付けたときの効果も同じです。

このツールはそういう指定を黙って通さず、「定められていない」と書いたうえで、こちらがどう扱ったかを出します。環境ごとに結果が違いうる箇所を、先に知っておけます。

大文字の S と T は実行ビットが無い印

rwsr-xr-x の 3 文字目が小文字の s なら、setuid と所有者の実行ビットの両方が立っています。大文字の S だと、setuid は立っているのに実行ビットがありません。

setuid の行。4000 が立っていること、実行したプロセスの実効ユーザー ID がファイルの所有者のものに変わること、出典が inode(7) であること、記号表記では大文字になり対応する実行ビットが立っていないことが並んでいる

9 文字目の t と T も同じ関係です。大文字なら sticky だけが立っています。

setuid・setgid・sticky の 3 行には、出典(inode(7))に書かれた意味を添えています。出典に記述が無い組み合わせ、たとえばディレクトリに付けた setuid は、意味を作らずに「書かれていません」と出します。

関連ツール

umask の側でつまずいているなら、umaskを引き算で覚えると合わない理由に別途まとめてあります。

あわせて読みたい

同じテーマ・関連ツールの記事です。