Linux系OSでパーミッションといえば、755などの数値表記がスタンダードですが、今回は、なぜそういった数字が使用されるのかをまとめてみました。
パーミッションとは
パーミッションは、権限を表す情報で、「読み込み」「書き込み」「実行可能」の3種類で表されています。
chmod
コマンドで変更できます。
数字の意味
パーミッション変更時の権限は、よく数字で表記します。これは、「読み込み」「書き込み」「実行可能」を3ビットの2進数で表し、8進数へ変換したものを使います。
基数変換については、以下の記事もご参照ください。
読み込み | 書き込み | 実行 | 8進数表記 |
---|---|---|---|
1 | 1 | 1 | 7 |
1 | 1 | 0 | 6 |
1 | 0 | 1 | 5 |
1 | 0 | 0 | 4 |
0 | 1 | 1 | 3 |
0 | 1 | 0 | 2 |
0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 |
これらの8進数を、「所有者」「グループ」「その他」のユーザーに対してそれぞれ付与します。
例えば、所有者以外には書き込み権限を与えたくない場合は、
ユーザー | 読み込み | 書き込み | 実行 | 8進数表記 |
---|---|---|---|---|
所有者 | 1 | 1 | 0 | 6 |
グループ | 1 | 0 | 0 | 4 |
その他 | 1 | 0 | 0 | 4 |
となるので、「644」が正解です。上記に加えて実行権限を与えたい場合は、実行権限のビットが1になりますので、以下のようになります。
ユーザー | 読み込み | 書き込み | 実行 | 8進数表記 |
---|---|---|---|---|
所有者 | 1 | 1 | 1 | 7 |
グループ | 1 | 0 | 1 | 5 |
その他 | 1 | 0 | 1 | 5 |
その昔、cgiというスクリプトが流行していたころは、「パーミッションを755に設定してください」などといった解説がされていましたが、それは、「所有者フルアクセス、その他は読み取りと実行のみ」という権限を与えるものだったのですね。
ところで、2進数 -> 8進数が苦手であれば、以下のように考えることもできます。
読み込み | 書き込み | 実行 |
---|---|---|
4 | 2 | 1 |
割り当てたい権限を足していけばOKです。
最後に
このように、フラグ列の管理をn進数で管理するのは、Windowsレジストリなどでも利用されているとおり、割とポピュラーな方法です。
実際にプログラムを書くときは、あまり活用できないかもしれませんが、手法を覚えておくと、いつか使えるときが来るかもしれません。