クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ファイルシステムと inode の仕組み

このレッスンのあとで: パスをたどって、ファイルのinodeを見つける手順を、説明することができる。

60分のレッスンコマンド13件毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

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

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このラボとソースについて: 毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。