##はじめに##
現在Linux標準教科書で簡単にLinux学習を始めているものです。
文系プログラミング未経験者でOSすらもよく知らなかったわたしですが、学習する中でうまく飲み込むことのできなかった内容についてかみ砕いてかみ砕いて細かくして解説させていただきます。(非常に細かく解説することを心掛けているため、この記事はとても長いのでご注意ください)もし読んでいて理解が腹落ちしないという方がいらっしゃいましたら、参考にしてください。
また、わたしなりに解釈した内容であるため、本来の意味とは違うよ? というものがありましたら、コメントをお願いします。
(※2019年3月26日 コメントにご指摘いただきまして、一部加筆修正いたしました。ありがとうございます。)
今回は、ファイルのアクセス権の数字表記について解説いたします。
Linux環境:仮想環境(Oracle VirtualBox)
CentOS Ver.7
##わたしが理解できなかった点##
ではさっそく、わたしが何を理解できなかったのかについて説明します。わからなかったのはファイルのアクセス権限を8進数で表記するという説明です。新しい空のファイルを作成したとして、説明します。
$ touch idontknow.txt
$ ls -la indontknow.txt
-rw-rw-r--. 1 is212 is212 0 3月 25 11:11 idontknow.txt
ファイルのアクセス権とは、コードの3行目、
-rw-rw-r--
の部分がそれぞれ
ファイル or ディレクトリ or シンボリックリンク(- or d or l)
※シンボリックリンクにつきましては、こちらをご覧ください。
所有ユーザーのアクセス権(--- ~ rwx)
所有グループのアクセス権(--- ~ rwx)
その他のユーザーのアクセス権(--- ~ rwx)
という区切りで示されています。
わからないのは、アクセス権を8進数を割り振って考えるというもの。
基数変換は簡単にやったものの、「8進数はそんなにつかわないよ」という言葉を信じてスルーした結果、なぜ8進数なのかさっぱりわかりませんでした。
一応、それぞれの組み合わせを0~7まで割り振っていて、その表が下記になるんですが、かなり覚えにくい。
・8進数表記の割り振り表
「
0(---) 4(r--)
1(--x) 5(r-x)
2(-w-) 6(rw-)
3(-wx) 7(rwx) 」
##2進数で理解するとわかりやすい##
8進数が全く分からなかったので、訓練校の先生に聞いてみました。そうすると、まだわかっている(つもりの)2進数で理解してみた方がわかりやすいという答えをいただきました。
0~7は分解してみると、2の乗数で計算が可能になります。つまり、2進数変換で考えればもっと簡単に覚えられるのです。
考え方としては、
桁の重み = rwxの順番
→2(2) 2(1) 2(0) = r w x
※()内は乗数
表にすると
「
2(0)= 1 =x
2(1)= 2 =w
2(2)= 4 =r 」
という対応表になります。これを適応すれば今回のidontknowファイルは
$ touch idontknow.txt
$ ls -la indontknow.txt
-rw-rw-r--. 1 is212 is212 0 3月 25 11:11 idontknow.txt
所有ユーザーのアクセス権(rw-)
→r(4) + w(2) + -(0) = 4 + 2 + 0
= 6
所有グループのアクセス権(rw-)
→r(4) + w(2) + -(0) = 4 + 2 + 0
= 6
その他のユーザーのアクセス権(r--)
→r(4) + -(2) + -(0) = 4 + 0 + 0
= 4
つまり、今回touchでつくった空のファイルidontknowのアクセス権を数字表記にすると、664となります。