Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Linuxのディレクトリ構造の話
Search
Osumi, Yusuke
August 21, 2020
Technology
900
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Linuxのディレクトリ構造の話
「新しいLinuxの教科書」を読む会 オンライン #4 での発表資料です。
https://linuxbook.connpass.com/event/184754/
Osumi, Yusuke
August 21, 2020
More Decks by Osumi, Yusuke
See All by Osumi, Yusuke
本の紹介の補足
ozuma
1
420
gitサービス3兄弟
ozuma
0
420
簡体字は楽
ozuma
0
500
ソフトウェアは固定資産
ozuma
0
450
ASCIIコードの小話
ozuma
0
470
今いるディレクトリを消すとどうなる
ozuma
1
420
名前付きパイプ FIFO
ozuma
0
580
文章、作文技法 リモートワーク
ozuma
1
940
CentOSの今後のリリース(簡易説明)
ozuma
0
430
Other Decks in Technology
See All in Technology
強化学習「理論」入門
enakai00
3
3.6k
モバイルアプリ開発概論2026
recruitengineers
PRO
6
650
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
630
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.6k
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
340
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
220
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
140
関東Kaggler会発表資料
takoi
1
250
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
320
What's new in Go 1.27?
ciarana
0
210
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
6.2k
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
610
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
How GitHub (no longer) Works
holman
316
150k
The Spectacular Lies of Maps
axbom
PRO
1
920
Scaling GitHub
holman
464
140k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
650
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
210
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Transcript
ちょっとだけ細かいLinuxの ディレクトリ構造の話 @ozuma5119 1 「新しいLinuxの教科書」を読む会 オンライン #4 2020/08/23
新しいLinuxの教科書: Chapter04 2 > このようにLinuxではすべてがファイルとして表現されているため、
新しいLinuxの教科書: Chapter04 3 > このようにLinuxではすべてがファイルとして表現されているため、 コマンド → ファイルです。 /bin/cp など
ディスク → ファイルです。 /dev/sda など カーネル → ファイルです。 /boot/vmlinuz-3.10.0-xxxxxxx など ディレクトリ → これも実はファイルです! ※正確にはファイルシステムによるので、「Linuxでは」はちょっと語弊
話すと長いので、ここでは以下だけ理解しよう 1. ディレクトリは、ファイルシステム上ではファイルと 本質的な違いは無い 2. ファイルは「ファイル名」を持っていない ではどこにファイル名があるのか? → ディレクトリが持っています 4
ディレクトリの構造 (CentOS 7: xfsファイルシステム) ext2,ext3,ext4 などちょっと前のも基本は同じ 5 ディレクトリ /home/ozuma/workdir ディレクトリ
subdir ファイル ls.txt ファイル abc.txt
ディレクトリの構造 (CentOS 7: xfsファイルシステム) ext2,ext3,ext4 などちょっと前のも基本は同じ 6 /home/ozuma/workdir ディレクトリ subdir
ファイル ls.txt ファイル abc.txt struct linux_dirent64 { u64 d_ino; s64 d_off; unsigned short d_reclen; unsigned char d_type; char d_name[0]; }; ディレクトリエントリ • d_ino: iノード番号 • d_type: ファイルtype • d_name: ファイル名 ※ディレクトリは、「ディレクトリエントリを持つファイル」 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/include/linux/dirent.h?h=linux-3.10.y
ディレクトリの構造 (CentOS 7: xfsファイルシステム) 7 #include <stdio.h> #include <dirent.h> int
main(int argc, char *argv[]) { DIR *dir; struct dirent *dentry; dir = opendir(argv[1]); while (dentry = readdir(dir)) { printf("d_ino:%8i, d_type:%2i, d_name:%s\n", dentry->d_ino, dentry->d_type, dentry->d_name); } closedir(dir); return 0; } struct linux_dirent64 { u64 d_ino; s64 d_off; unsigned short d_reclen; unsigned char d_type; char d_name[0]; }; https://gist.github.com/ozuma/cbb3952387894f44ab88254ebfa03499 view_dirent.c
ディレクトリの構造 (CentOS 7: xfsファイルシステム) 8 /home/ozuma/workdir ディレクトリ subdir ファイル ls.txt
ファイル abc.txt ディレクトリエントリ • d_ino: iノード番号 • d_type: ファイルtype ◦ 通常ファイル: 8 ◦ ディレクトリ: 4 • d_name: ファイル名 ※ディレクトリは、配下の iノード番号とファイル名のセットを持ってい るだけのちょっと変わった「ファイル」 $ ./view_dirent ./ d_ino: 64012, d_type: 4, d_name:. d_ino:51665359, d_type: 4, d_name:.. d_ino: 64002, d_type: 8, d_name:abc.txt d_ino: 1438999, d_type: 8, d_name:ls.txt d_ino:50796252, d_type: 4, d_name:subdir $
新しいLinuxの教科書: Chapter04 9 > このようにLinuxではすべてがファイルとして表現されているため、
ディレクトリの構造 (CentOS 7: xfsファイルシステム) 10 ディレクトリ /home/ozuma/workdir iノード番号=64012 ディレクトリ subdir
iノード番号=50796252 ファイル ls.txt iノード番号=1438999 ファイル abc.txt iノード番号=64002 $ ./view_dirent ./ d_ino: 64012, d_type: 4, d_name:. d_ino:51665359, d_type: 4, d_name:.. d_ino: 64002, d_type: 8, d_name:abc.txt d_ino: 1438999, d_type: 8, d_name:ls.txt d_ino:50796252, d_type: 4, d_name:subdir $
ディレクトリの構造 (CentOS 7: xfsファイルシステム) 11 ディレクトリ subdir iノード番号=50796252 ファイル ls.txt
iノード番号=1438999 ファイル abc.txt iノード番号=64002 $ ./view_dirent ./ d_ino: 64012, d_type: 4, d_name:. d_ino:51665359, d_type: 4, d_name:.. d_ino: 64002, d_type: 8, d_name:abc.txt d_ino: 1438999, d_type: 8, d_name:ls.txt d_ino:50796252, d_type: 4, d_name:subdir $ 1. Linuxのファイルは iノード番号が本質 2. iノード番号とファイル名のセットが壊れると、ファイルが 見つからない(復旧ソフトなどはこれを上手くくっつけ る) 3. ls -i コマンド、df -i コマンドなどを試してみよう
ひとつ紹介:失敗例 • プログラムはファイルをiノードで考える • 人間はファイルをファイル名で考える このギャップがミスを生む 12
実際に私がやらかしたこと (再現イメージです) 13 # ./program > out.log # tail -f
out.log [09/May/2020:11:32:36] start A01 [09/May/2020:11:33:45] end A01 [09/May/2020:11:33:47] start B01 .... (大丈夫そうだな…)
ログをローテートしたかった → 古いログを日付けつきにして、新しいout.logを用意 14 # ./program > out.log (ログファイル名を昨日の日付にして……) #
mv out.log out.20200822.log (元と同じファイル名のファイルを用意……) # touch out.log (これでええやろ) programは止めずに……
失敗:これでは out.20200822.log に出力が続く 15 # ./program > out.log mvではiノード番号は変わりません $
ls -i out.log 2102832 out.log $ mv out.log out.20200822.log $ ls -i out.20200822.log 2102832 out.20200822.log ※そのためこの場合、out.20200822.logに ログは出力され続けます!!
失敗:これでは out.20200822.log に出力が続く 16 # ./program > out.log mvではiノード番号は変わりません $
ls -i out.log 2102832 out.log $ mv out.log out.20200822.log $ ls -i out.20200822.log 2102832 out.20200822.log ※そのためこの場合、out.20200822.logに ログは出力され続けます!! この数週間後、out.logに吐か れていると信じたまま、out.< 日付>.logは古いログと思って 消してしまった (皆さん同じ失敗しないで)
参考文献 このスライドでは、かなりはしょって説明しているので、一部不正確と言える部分もありま す。 より詳しく知りたい方は: • iノードとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 ← 分かりやすくオススメ • readdir(3)
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/readdir.3.html • dirent.h https://man7.org/linux/man-pages/man0/dirent.h.0p.html • Linux/XFS の directory size で 6 byte や 4096 byte が多い理由 • 書籍:詳解 Linuxカーネル ← 意欲のある方は…… 17