inodeとは何か
inode(アイノード)とは、ファイルの持ち主、大きさ、データの場所など、名前以外のすべてを記録した小さな表です。ファイルの名前は、inode を指す札にすぎません。
だから、1つのファイルに名前を2つ付けることも、名前を変えてもデータを動かさないこともできます。図書館で、題名の札と、棚の位置を書いた台帳が別にあるのと同じです。
このレッスンのゴール
メモ
パスをたどって、ファイルのinodeを見つける手順を、説明することができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| inode | ファイルの名前以外の情報を記録した表 | |
| ディレクトリ | 名前とinode番号の対応を入れた特別なファイル | |
| ブロック | ディスクにデータを置く、同じ大きさの単位 | 4096バイト |
| パス | ファイルまでの名前の道すじ | /home/sora/memo.txt |
| ハードリンク | 同じinodeを指す、もう1つの名前 | |
| シンボリックリンク | 別のパスの文字を持つ、特別なファイル |
学生が入力するセルは、このプレビューでは空白です。
パスはディレクトリを順にたどる
ディレクトリは、名前とinode番号の対応を入れた特別なファイルです。パスから場所を探すとき、OSは根の / から始めます。
根のinodeは、ふつう決まった番号です。その表で最初の名前を引き、出てきたinodeの表で次の名前を引きます。これを最後の名前まで繰り返します。
例: 小さなinodeの表
| inode | 種類 | 中身(名前から番号) |
|---|---|---|
| 1 | ディレクトリ (根) | home → 2, etc → 3 |
| 2 | ディレクトリ (home) | sora → 5 |
| 5 | ディレクトリ (sora) | memo.txt → 9, photo.png → 10 |
| 9 | ファイル | 6バイト、データはブロックにある |
学生が入力するセルは、このプレビューでは空白です。
自分のファイルのinodeを調べる
ホームに作業用のフォルダを作り、短いファイルを1つ作って、stat で調べます。stat は、そのファイルのinodeの中身を読みます。
%F は種類、%s はバイト数です。6文字のファイルなら、regular file 6 と出ます。改行も1文字に数えるからです。
作業用のフォルダを作る
mkdir -p ~/osint-demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
そこへ移る
cd ~/osint-demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
6バイトのファイルを作る
printf 'hello\n' > a.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
種類と大きさを見る
stat -c '%F %s' a.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
inodeが持つもの、持たないもの
| 項目 | 例 | inodeにあるか |
|---|---|---|
| 種類 | ファイル、ディレクトリ | ある |
| 持ち主と権限 | sora、rw-r--r-- | ある |
| 大きさ | 6バイト | ある |
| 時刻 | 最後に書いた時刻 | ある |
| リンクの数 | 名前の数 | ある |
| ブロックの場所 | 40番、41番 | ある |
| ファイルの名前 | a.txt | ない。ディレクトリにある |
学生が入力するセルは、このプレビューでは空白です。
ハードリンクは名前を増やす
ln a.txt b.txt は、ハードリンクを作ります。同じinodeを指す、もう1つの名前です。リンクの数は2になります。
ln -s は、シンボリックリンクを作ります。別のパスの文字を持つ、新しい小さなファイルです。元の名前が消えると、行き先を失います。
2つ目の名前を付ける
ln a.txt b.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
リンクの数を見る
stat -c '%h' a.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2つの名前のinodeは、いくつあるか
ls -i a.txt b.txt | cut -d' ' -f1 | sort -u | wc -lここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
シンボリックリンクを作る
ln -s a.txt s.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
リンクが持つ文字を読む
readlink s.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
名前を1つ消す
rm b.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
リンクの数をもう一度見る
stat -c '%h' a.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「名前を消すと、ファイルの中身が消える」と考える人が多くいます。消えるのは名前1つと、リンクの数の1です。リンクの数が0になり、開いているプログラムもなくなって、初めてinodeとブロックが空きます。
ホームへ戻る
cd ~ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
作業用のフォルダを片づける
rm -r ~/osint-demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。