この記事では、RubyのFile::Stat#modeが返すファイルモードの数値と、記号表記(symbolic notation)の対応を解説します。
ファイルモードの記号表記については以下の記事を参照ください。
1. File::Stat#modeが返す値
fs = File::Stat.new('sample.txt') p fs.mode #=> 33188 p fs.mode.to_s(8) #=> "100644"
File::Stat#mode
はファイルモードを10進数の数値で返します。(33188
)
これを意味のわかるものにするためには、8進表記の文字列に変換する必要があります。("100644"
)
2. 8進表記と記号表記の対応
ここからは8進表記の文字列と記号表記の対応を解説していきます。
先ほど出てきた100644
を記号表記に変換すると以下のようになります。
8進表記 | 記号表記 |
---|---|
100644 |
-rw-r--r-- |
この6桁の8進表記はそれぞれの桁ごとに以下の意味を持ちます。
- 1~2桁目:ファイルタイプ
- 3桁目:特殊権限
- 4桁目:所有者の権限
- 5桁目:グループの権限
- 6桁目:その他のユーザの権限
以降で8進表記の各桁と記号表記の対応について詳しく解説していきます。
1~2桁目:ファイルタイプ
File::Stat#mode
が返す6桁の8進表記の1~2桁目はファイルタイプを表します。
ファイルタイプの8進表記と記号表記の対応は以下のようになります。
8進表記 | 記号表記 | ファイルタイプ |
---|---|---|
01 |
p |
名前付きパイプ(FIFO) |
02 |
c |
キャラクタデバイス(Character special file) |
04 |
d |
ディレクトリ(Directory) |
06 |
b |
ブロックデバイス(Block special file) |
10 |
- |
通常ファイル(Regular file) |
12 |
l |
シンボリックリンク(Symbolic link) |
14 |
s |
ソケット(Socket link) |
3桁目:特殊権限
File::Stat#mode
が返す6桁の8進表記の3桁目は特殊権限を表します。
特殊権限の8進表記と記号表記の対応は以下のようになります。
8進表記 | 記号表記 | 特殊権限 |
---|---|---|
0 |
なし | なし |
1 |
t またはT |
スティッキービット |
2 |
s またはS |
SGID(Set Group ID) |
4 |
s またはS |
SUID(Set User ID) |
特殊権限については以下で詳しく解説しています。
4~6桁目:ファイルモード(権限)
まずはファイルモード(権限)の説明を行います。
ファイルモードには「読み込み」「書き込み」「実行」の3種類が存在します。
この3種類の権限の8進表記と記号表記の対応は以下のようになります。
8進表記 | 記号表記 | 権限 |
---|---|---|
0 |
- |
なし |
1 |
x |
実行 |
2 |
w |
書き込み |
4 |
r |
読み込み |
このそれぞれの権限は3桁の2進数の各桁に対応づけられており、権限のあるなしを0か1かで判断しています。
8進表記 | 2進表記 | 記号表記 | 権限 |
---|---|---|---|
0 |
000 |
- |
なし |
1 |
001 |
x |
実行 |
2 |
010 |
w |
書き込み |
4 |
100 |
r |
読み込み |
この3種類の権限は同時に持つことができるため、以下の8通り(2の3乗)のパターンが考えられます。
8進表記 | 2進表記 | 記号表記 | 権限 |
---|---|---|---|
0 |
000 |
--- |
なし |
1 |
001 |
--x |
実行 |
2 |
010 |
-w- |
書き込み |
3 |
011 |
-wx |
書き込み・実行 |
4 |
100 |
r-- |
読み込み |
5 |
101 |
r-x |
読み込み・実行 |
6 |
110 |
rw- |
読み込み・書き込み |
7 |
111 |
rwx |
読み込み・書き込み・実行 |
さらにファイルの権限は、所有者(owner)、グループ(group)、その他のユーザー(other)の3種類のクラスに分かれます。
この3種類のクラスに対して上述の8通りの権限が割り当てられます。
話を戻して、File::Stat#mode
が返す6桁の8進表記の4~6桁目(100644
の644
)の各桁は以下のクラスの権限を表します。
- 4桁目:所有者の権限
- 5桁目:グループの権限
- 6桁目:その他のユーザの権限
つまり644
は、所有者が読み込み・書き込み権限(rw-
)、グループが読み込み権限(r--
)、その他のユーザが読み出し権限(r--
)を持つことになります。
ここまでの説明をまとめると以下の8進表記と記号表記の対応の意味もわかってくるかと思います。
8進表記 | 記号表記 |
---|---|
100644 |
-rw-r--r-- |
040755 |
drwxr-xr-x |
041755 |
drwxr-xr-t |
8進表記を記号表記に変換するロジックについては以下の記事で解説しています。
【参考】