Web Analytics Made Easy - StatCounter

工業大学生ももやまのうさぎ塾

うさぎでもわかるをモットーに大学レベルの数学・情報科目をわかりやすく解説! 数式が読み込まれない場合は1回再読み込みしてみてください。

うさぎでもわかる計算機システム Part15 Unixのファイルシステムその2 iノードとは

こんにちは、ももやまです。

今回はUnixのファイルシステムについてiノードを中心にまとめていきたいとおもいます。

前回の記事(Unixのファイルシステムその1 ファイル・ディレクトリ・絶対パス・相対パスなどについて)はこちらからご覧いただけます!

1, 2の部分は復習なので、もしわかっているのであれば飛ばしてOKです!

1.ファイルシステムとは(復習)

まずファイルシステムについて復習していきたいと思います。

皆さんは使っている教科書やプリントなどを整理するために本棚やクリアファイルなどに収納しておきますよね*1

ファイルシステムとは、パソコン上の(補助記憶装置*2にある)ファイルを整理・管理・操作するシステムのことです。

ファイルシステムがあることでパソコン上のどこにデータがあるかがすぐにわかるようになっています。ファイル検索も削除も簡単にできますよね。


また、パソコン以外、例えばスマホ、ゲーム機、デジカメなどにもファイルシステムが搭載されています。
パソコン以外であってもどこにどんなアプリ、ゲーム、写真があるのかがわかるのはファイルシステムのおかげなのですね。


皆さんはSDカードやUSBメモリなど(の補助記憶装置)を初めて使うときに「フォーマットしてください」と言われたことはありませんか?

補助記憶装置のフォーマットを行うことで、空・もしくは壊れたSDカードやUSBメモリなどにファイルシステムを作成し、データの管理ができるようになるのです。


人間に例えると、机周りを一端すべて一掃してから空の本棚やクリアファイルを設置する操作がフォーマットに該当します。

2.ファイル・ディレクトリ

いくらファイルを管理するといっても数が1,000や2,000…となっていくとファイルを探すのが大変になりますよね。

そこで関連するファイルはグループ化したくなりますよね。

Unixでは、ファイルをグループ化して管理するためにディレクトリを用います。
(Windowsではフォルダとよばれます。こちらのほうがなじみが深いですね。)


さらにディレクトリにディレクトリを入れ、階層的なディレクトリ構造を作ることができます。

ここまでの内容でなんかよく理解できていないなと思った人はこちらのリンクに復習記事があるので復習しましょう。

3.iノード

(1) iノードとは

ハードディスクなどの補助記憶装置にファイルを保存するとき、ファイル名だけでなく、「ファイルの所有者」・「データの大きさ」・「アクセス権限」などのファイル管理に必要な情報が一緒に保存されます。

Unixではファイル管理に必要な情報はファイル本体(ファイル名)とは別にiノードで保管されます*3


実世界に例えると、我々人間はどこかに住んでいますよね。この住んでいる場所がファイル名に相当します。

人が住んでいる場所、年齢、性別…などの個人情報は住んでいる場所とは別に役所などに記録されていますね。この個人情報がiノードに相当します。


つまり、Unixのデータはファイル名iノードの2つから構成されているといえますね!

f:id:momoyama1192:20191205094107g:plain

(2) iノードに記録されている情報

iノードには実際にどんな情報が記録されているのでしょうか。

Unixコマンド ls -l*4 で出力される代表的な情報の中からiノードに記録されているものを探してみましょう。

f:id:momoyama1192:20191205122054g:plain

その1 ファイルタイプ・保護情報

実行結果の一番左側に -rw-r---r-- のような10文字の値が並んでいますね。

この一番左側の文字がファイルタイプを表します。
ファイルタイプは

  • -:ただのファイル
  • d:ディレクトリ
  • l:シンボリックリンク*5

の3つがあります。

残りの9文字がファイルの保護情報を表します。
詳しくは下のアクセス制御で説明します。

その2 ハードリンク数(参照カウント)

ファイルを指しているinodeの数(ハードリンク)がいくつあるかを示しています。

ただのファイルであれば基本的に1、ディレクトリであれば入っているファイルの数によって数値が決まります。

その3 所有者名(ID)・グループ名(ID)

ファイルを所有している人・グループの名前が表示されています。

なお、実際にiノードに保管されているのは所有者・グループのIDです。

その4 ファイルサイズ

ファイルの大きさがバイト単位で表示されています。

その5 タイムスタンプ

最後にファイルを更新 or アクセスした時間が記されています。

iノードに記載されているのは以上の5つの情報です。

ファイルタイプ・保護情報・所有者ID・グループID・ファイルの大きさ・タイムスタンプなどのファイル名以外の情報は基本的にiノードにあると思ってOKです。

(3) iノードに記録されている情報

また、ls -l -i のように -i をつけると、ファイルにリンクしているiノードの番号を確認することができます。

例えば一番上のファイルのiノード番号は 65144691 です。

f:id:momoyama1192:20191205122058g:plain

(4) iノードの残りを調べてみよう!

もしUnix系のOS(Mac, Ubuntuなど)を持っている人は df -i のコマンドを実行することで空きiノード数・使ったiノード数などを調べることができます。

dhcp80:kenkyu-jikken momoyama_usagi$ df -i
Filesystem                                              512-blocks      Used Available Capacity iused               ifree %iused  Mounted on
/dev/disk1s1                                             976490576 481430328 483171544    50% 2494044 9223372036852281763    0%   /
devfs                                                          371       371         0   100%     642                   0  100%   /dev
/dev/disk1s4                                             976490576  10485856 483171544     3%       5 9223372036854775802    0%   /private/var/vm
map -hosts                                                       0         0         0   100%       0                   0  100%   /net
map auto_home                                                    0         0         0   100%       0                   0  100%   /home
dhcp80:kenkyu-jikken momoyama_usagi$ 
  • iused :現在使用しているiノード数
  • ifree :空いているiノード数
  • %iused :全体のiノード数に対する使用しているiノードの割合

を示しています。

(こう見るとiノードってすごい数あるんですね…… 私がもっているMacでは ifree の数が900京個くらいありました……)

4.ファイルの検索・削除

つぎにファイルの検索・削除でUnixのファイルシステムがどのような動きをするかについて説明していきましょう。

(1) ファイルの検索

ファイルを検索するときはつぎの3ステップの操作が行われます

  1. ディレクトリから該当するファイル名を検索
  2. ファイル名に対応するiノード番号からiノードを特定
  3. 特定したiノードの情報からデータブロックを見つける

図でわかりやすくしたので参考までにどうぞ

f:id:momoyama1192:20191205094057g:plain

(2) ファイルの削除

ファイルを削除するときはつぎの3ステップの操作が行われます

  1. ファイル名をディレクトリから削除
  2. iノードの解放
  3. データブロックを空きブロックへ(中身は消さない)


ファイルの削除はデータブロックを空きブロック扱いにするだけで、データの中身(データブロック)自体が消えるわけではないので注意が必要です。

イメージとしては、トイレの使用中が空きに変わる感じです(空きに変わっただけで人はその中にいる)。

こちらも図でわかりやすくしたので参考までにどうぞ

f:id:momoyama1192:20191205094102g:plain

5.Unixのブロック数について

Unixではそれぞれのデータをブロックで管理し、iノード内に「どこにデータブロックがあるのか」を記録しています。

ブロック数の数え方について詳しくはこちらの記事に書いてあるので気になる人はご覧ください。

www.momoyama-usagi.com

6.アクセス制御

例えば他の人に読まれたくない黒歴史な機密文章(ファイル)があるとします。
あなたはこの文章を他の人に読まれたくはありませんよね。

Unixではアクセス制御リストを用いることでファイルを読み・書き・実行できる人を制限することができます。これで黒歴史があっても見られなくてすみます。

先程 ls-l の一番左に出てきた10文字の保護情報を見てみましょう。

f:id:momoyama1192:20191205132033g:plain

一番左の1文字がファイルタイプ、右から順番に3文字ずつ自分自身、グループ、その他(つまり他人)のアクセス権限が示されています。

また、アクセス権限は読み取り・書き込み・実行の3つに分かれており、それぞれ

  • r:読み取り可能
  • w:書き込み可能
  • x:実行可能
  • -:権限なし

を示しています。

例えば、drwxr-xr-x と書かれていれば

  • 一番左の d:ディレクトリ
  • そこから3文字 rwx:自分自身の読み取り、書き込み、実行権限あり
  • そこから3文字 r-x :グループの読み取り、実行権限あり(書き込みはできない)
  • そこから3文字 r-x :他人の読み取り、実行権限あり(書き込みはできない)

であることを示しています。

また、-rw------- であれば

  • 一番左の -:ただのファイル
  • そこから3文字 rw-:自分自身の読み取り、書き込み権限あり(実行はできない)
  • そこから3文字 --- :権限なし
  • そこから3文字 --- :権限なし

を示しています。

アクセス権限を変更するためには chmod コマンドを使います。
(コマンドの使い方は後日にでも別の記事にまとめたいと思います。)

7.さいごに

今回は特に練習する内容がないので練習問題を省略します。ご了承ください。

今回はUnixのファイルシステムについてiノードを中心にまとめていきました。

次回は磁気ディスクについてのお話をしていきたいと思います。

*1:ごくまれにぐちゃくちゃにしている人がいるのですが今回はその人はおいておきます…。

*2:HDD, SSD, USBメモリ, SDカードの記憶媒体を表します。補助記憶装置について詳しくはこちらの記事になるので気になる人はこちらの記事もご覧ください。

*3:ちなみにiノードのiはindexのiです。

*4:このコマンドを使うと

*5:Windowsのショートカットとほぼ同じです。