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
coreutils/rm Dive Deep
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tanuki
February 17, 2023
Programming
27
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
coreutils/rm Dive Deep
tanuki
February 17, 2023
More Decks by tanuki
See All by tanuki
AWSへの移行 1年間の軌跡
_ht_mn_
0
28
クラウドネイティブ化への第一歩/excitech-20211018
_ht_mn_
0
2.3k
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.3k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
140
スマートグラスで並列バイブコーディング
hyshu
0
160
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
170
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
270
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
270
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.4k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
200
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
350
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Side Projects
sachag
455
43k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Limits of Empathy - UXLibs8
cassininazir
1
360
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Faster Mobile Websites
deanohume
310
31k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
coreutils/rm Dive Deep ΤΩαΠτגࣜձࣾɹٶ൏ਓ 1
͡Ίʹ 2
͜Μͳ͜ͱͳ͍Ͱ͔͢ʁ 3
ྫ͑ 1.োൃੜʂ 2.͍Ζ͍Ζௐ͚ͨͲΑ͘Θ͔ΒΜʂ 3.ոͦ͠͏ͳͱ͜ΖΛݟ͚ͭͨʂमਖ਼ͯ͠σϓϩΠʂ 4.ͳΜ͔Α͘Θ͔ΒΜ͚Ͳಈ͍ͨʂ 4 ͡Ίʹ
͑ͬ 5
νϣοτϚος • ࠶ಉ͡ࣄʹૺ۰ͯ͠ରԠͰ͖Δʁ • ͦΜͳোใࠂͰେৎ͔ʁ • ͪΌΜͱղܾͰ͖͍ͯͳ͍ɺͬͯͳΜ͔չ͘͠ͳ͍ʁ 6 ͡Ίʹ
7 ࠓͷΰʔϧ ͡Ίʹ • ಈ͍͔ͨΒϤγɺͰऴΘΒͤͳ͍ͨΊʹʁ • ͳΜ͔Α͘Θ͔ΒΜɺ͔Β٫͢Δʹʁ • ٕज़ͷਂ۷Γͱͦͷઌʹ͋Δͷʁ
8 ࠓɺ͞ͳ͍͜ͱ ͡Ίʹ • CPUͱ͔ϝϞϦཧͱ͔ • ઐྖҬͰͳ͍ͷͰɺࡉ͔͍࣭ʹ͑ΒΕͳ͍Α • ͱɺ༧ઢΛ͓ͬͯ͘
Coreutilsʹ͍ͭͯ 9
lsͯ͠Δʁ • ࠇ͍ը໘ʹίϚϯυೖྗɺ୭ͬͨ͜͠ͱ͕͋Δͣ 10 $PSFVUJMTʹ͍ͭͯ
͓·͚ɿexa͍͍κ 11 $PSFVUJMTʹ͍ͭͯ
ଞʹcatͱ͔rmͱ͔ • ͜ΕΒΛϢʔςΟϦςΟʢίϚϯυʣͱݺͿ • CoreutilsͦͷϢʔςΟϦςΟΛ·ͱΊͨͷ • POSIXSUSͰنఆ͞Ε͍ͯΔ • lscatrmɺ࠷৽ͷنఆʢPOSIX.1-2017ʣͰඞਢ 12
$PSFVUJMTʹ͍ͭͯ
LinuxίϚϯυ is Կʁ 13
ͦͦLinuxͱʁ • ਖ਼֬ʹΧʔωϧ͚ͩΛࢦࣔ͢͠ • LinuxΧʔωϧͱGNUιϑτΣΞ܈Λ߹ΘͤͯGNU/Linux • glibcʢGNU C Libraryʣ •
gccʢGNU Compiler Collectionʣ • GNU CoreutilsʢGNU Core Utilitiesʣ • ͜ΕΒʹै͑ɺLinuxίϚϯυͳΜͯଘࡏ͠ͳ͍͚Ͳ... 14 $PSFVUJMTʹ͍ͭͯ
LinuxίϚϯυͰྑ͍͡ΌΜ 15 ͜·͚͍͍͐ͨ͊͜ΜͩΑ
͓͞Β͍ɿΧʔωϧͷجૅ • ϓϩηεετϨʔδͳͲͷϋʔυΣΞʹΞΫηεͰ͖ͳ͍ • ϓϩηεΧʔωϧΛհͯ͠σόΠεͳͲʹΞΫηε͢Δ • ϓϩηεγεςϜίʔϧΛൃߦͯ͠ΧʔωϧʹॲཧΛґཔ͢Δ 16 $PSFVUJMTʹ͍ͭͯ
GNU Coreutils • macͷlsͱGNU/Linuxͷlsผ • ωοτʹస͕͍ͬͯΔίϚϯυ͕macͰಈ͔ͳ͍ɺ͋Δ͋Δ • ྫ͑psɺmacͷඪ४ίϚϯυͰ--sortΦϓγϣϯ͕ͳ͍ 17 $PSFVUJMTʹ͍ͭͯ
※ CPU༻ϝϞϦফඅͰιʔτͰ͖Δ
ʮmacͰGNU Coreutils͕͍ͨ͠ʂʯ • macʹGNU CoreutilsΛΠϯετʔϧͯ͠ΈΑ͏ • brew install coreutils 18
$PSFVUJMTʹ͍ͭͯ
rmͷΦϓγϣϯ 19
લఏ • GNU Coreutils 8.22 • glibc 2.26 • kernel
5.10.x • Amazon Linux 2 x86_64 20 SNͷجຊΛ͓͞Β͍
ϓϩϯϓτ͕ग़Δ݅ɺͳʔΜͩʁ • ॳճ͚ͩ • -I, --interactive=once ͕༩͑ΒΕɺ3ͭΑΓଟ͍ϑΝΠϧΛআ͢Δͱ͖ • -r, -R,
--recursive ͕༩͑ΒΕͨͱ͖ • ຖճ • ॻ͖ࠐΈෆՄೳɺඪ४ೖྗ͕ɺ-f, --force ͕༩͑ΒΕ͍ͯͳ͍ͱ͖ • -i, --interactive=always ͕༩͑ΒΕͨͱ͖ 21 SNͷجຊΛ͓͞Β͍
ͦͷଞͷΦϓγϣϯ • ۭͷσΟϨΫτϦΛআ͢Δʹʁ • rm -t <ۭͷσΟϨΫτϦ> • -iͱ-fΛಉ࣌ʹࢦఆͨ͠Βʁ •
ޙऀͷΦϓγϣϯͰ্ॻ͖͞ΕΔ • ϑΝΠϧ໊ʹ - ͕ண͍͍ͯΔ߹ʁ • rm -- -foo ͘͠ɺrm ./-foo 22 SNͷجຊΛ͓͞Β͍
ίʔυϦʔσΟϯά 23
४උ • GNU Coreutils • git clone git://git.sv.gnu.org/coreutils • linux
• git clone
[email protected]
:torvalds/linux.git • glibc • git clone https://sourceware.org/git/glibc.git 24 ίʔυϦʔσΟϯά
·ͣstraceͯ͠ΈΔ • strace ʻ࣮ߦίϚϯυʼ Έ͍ͨʹ͏ • ྫɿstrace rm test.txt •
ҎԼͷΑ͏ͳ͜ͱ͕֬ೝͰ͖Δ • ϓϩάϥϜ͕ൃߦͨ͠γεςϜίʔϧ • ݺͼग़͞ΕͨΧʔωϧػೳͷ࣮ߦʹ͔͔ͬͨ࣌ؒ • ଟ͘ར༻͞ΕͨγεςϜίʔϧͳʹ͔ 25 ίʔυϦʔσΟϯά
26
unlinkat(AT_FDCWD, "test.txt", 0) 27 Ͳ͔͜ͰunlinkatγεςϜίʔϧ͕ൃߦ͞Ε͍ͯΔ
coreutils/src/rm.c • ࠷ऴతʹɺremove.c ͷ rm ؔʹඈΜͰ͍Δ 28 ίʔυϦʔσΟϯά
coreutils/src/remove.c 29 ίʔυϦʔσΟϯά
coreutils/src/remove.c • xfts_open • ϑΝΠϧσΟεΫϦϓλΛؚΉFTSߏମΛฦ͢ • σΟϨΫτϦΛͤ࠶ؼతʹ֊Λḷͬͯ͘ΕΔ • fts_read •
FTSENTߏମΛฦ͢ • ύεϑΝΠϧ໊ͳͲͷใΛ֨ೲ͍ͯ͠Δ 30 ίʔυϦʔσΟϯά
• લड़ͷFTSͱFTSENTΛunlinkatʹ͢ coreutils/src/remove.c 31 ίʔυϦʔσΟϯά
glibc/sysdeps/unix/sysv/linux/x86_64/sysdep.h 32 ίʔυϦʔσΟϯά
ΞηϯϒϦ܅... • ઌ΄ͲͷΞηϯϒϦΛ࣮ߦ͞ΕΔͱ • ϨδελʹΛηοτ͠ɺsyscall໋ྩΛ࣮ߦ • CPU͕ΧʔωϧϞʔυʹભҠ • ϓϩηεͷΘΓʹΧʔωϧ͕ॲཧΛ࣮ߦ •
ॲཧ͕ऴΘͬͨΒɺCPUϢʔβϞʔυʹભҠ • ݺͼग़͠ݩʹΔ 33 ίʔυϦʔσΟϯά
linux/fs/namei.c • γεςϜίʔϧͷઌΧʔωϧͷॲཧ 34 ίʔυϦʔσΟϯά
linux/fs/namei.c 35 ίʔυϦʔσΟϯά
VFSͬͯͳΜͶΜ 36 ίʔυϦʔσΟϯά • ϑΝΠϧγεςϜΛҙࣝ͢Δඞཁ͕ແ͍ • ϑΝΠϧૢ࡞ͷΠϯλʔϑΣʔεͱͯ͠ͷׂ ϓϩηε VFSʢVirtual Filesystemʣ
ext4༻ͷॲཧ zfs༻ͷॲཧ σόΠευϥΠό σόΠεA σόΠεB
dentryͱinodeͷ؆୯ͳҧ͍ 37 ίʔυϦʔσΟϯά • inodeϑΝΠϧ໊Λ͍࣋ͬͯͳ͍ • lsͰฦ͞ΕΔUIDαΠζͳͲΛอ࣋ • dentry͕ϑΝΠϧ໊ͱinodeΛඥ͚Δ
linux/fs/ext4/namei.c 38 ίʔυϦʔσΟϯά • vfs_unlink͔Β֤fsຖͷ࣮ • ͜͜Ͱext4 • ͜ͷઌ·ͩ·ͩଓ͘
39 rmͷཱྀ࿏ͷՌͯ ίʔυϦʔσΟϯά • Coreutilsͷrm͕γεςϜίʔϧΛൃߦ • glibcͷϥούʔ͕ؔγεςϜίʔϧΛ࣮ߦ • ΧʔωϧVFSܦ༝ͰΦϒδΣΫτͷআ •
ϑΝΠϧγεςϜଆͰɺdentryinodeͷআ͕࢝·Δʢআ͞Εͨ ͱݴͬͯͳ͍ʣ
͓ΘΓʹ 40
݁ہɺԿ͕ݴ͍͍ͨͷʁ • CoreutilsͷιʔείʔυʹڵຯΛ࣋ͬͨͷ͕࢝·Γ • ݁ՌతʹΧʔωϧʹḷΓண͍ͯ͠·͚ͬͨͩ • ࠷ॳ͔ΒਂΛ͖͔ͨͬͨΘ͚Ͱͳ͍ 41 ͓ΘΓʹ
݁ہɺԿ͕ݴ͍͍ͨͷʁ • ෳࡶͳՕॴͰநԽ͞Ε͍ͯΕɺཪଆΛਂ͘ཧղ͠ͳͯ͘ ʢมԽ͕͋ͬͯʣγεςϜ։ൃ͕Ͱ͖Δ • ͋Εʁ͜ΕͬͯීஈͷΞϓϦέʔγϣϯ։ൃͱಉ͡͡ΌΜʁ • ۀͱతʹؔͷͳ͍ྖҬ͔ΒಘΒΕΔͷ͕͋Δʂ 42 ͓ΘΓʹ
ʮຊʹʯಘΒΕͨͷ • ʮ༁ͷΘ͔Βͳ͍ͷʯʹग़ձ͏ָ͠Έ • ϨΠϠʔͷڪා৺ɺΛ্ճΔ΄Ͳͷڵຯؔ৺ • ࠔͳࣄʹཱ͔ͪ͏ͨΊͷڧ͘ંΕͳ͍৺ • ʑֶͼଓ͚Δɺͱ͍͏͜ͱ 43
͓ΘΓʹ
Keep Going! 44