こんにちは、小島です。

今回はパーミッションについて書かせていただきます。
私は最初に数字だけを見てしまうとumaskは “引き算” の考え方でいいのかと思っていました。

umask

新規作成する際にファイルとディレクトリのデフォルトのパーミッションを設定するコマンド。
デフォルト値はディレクトリが 777 、ファイルが 666 設定されており、 umask 000 の形で数値を差し引く(差し引くが表現として一番わかりやすいです)

結論からいうとパーミッションは数字ビット演算(2進数)で行われている。でした。
「パーミッション ビット演算」とかで調べると詳しい解説がたくさん出てきます。

下記の表記のように記号と数値が減っていくことで権限が変わるのは”引き算”になっていると勘違いしていました。

左から「所有者」「グループ」「その他のユーザー」
記号表現「r」(読み)「w」(書き)「x」(実行)
数値表現「4」(読み)「2」(書き)「1」(実行)

rwxrwxrwx(777) ディレクトリ
ーーーーwーーwー(022) umask 022
rwxrーxrーx(755) 設定値

では umask コマンドで umask 077 とした際に引き算であれば、ディレクトリは 700 、ファイルは 589 、1桁ずつでも「6、-1、-1」となってしまいます。(マイナス数値は無いです)
これをビット演算で見てみると以下になります。

rwxrwxrwx(777) ディレクトリ
111111111
ーーーrwxrwx(077) umask 077
000111111
rwxーーーーーー(700) 設定値
111000000

rw-rw-rw-(666) ファイル
110110110
ーーーrwxrwx(077) umask 077
000111111
rwーーーーーー(600) 設定値
110000000

正解としてはディレクトリは 700 、ファイルは 600 になります。
なんとなくわかるといった感じですね。
正直ビット演算をそこまで私は学習していない為、引き算ではあるが引かれた数値がマイナスになったら0になるんだな~ぐらいで考えるようにしました。

See you next time👉