Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
coreutils/rm Dive Deep
Search
tanuki
February 17, 2023
Programming
29
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
35
クラウドネイティブ化への第一歩/excitech-20211018
_ht_mn_
0
2.3k
Other Decks in Programming
See All in Programming
速習iPhone Duo対応
yuukiw00w
1
510
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
310
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
130
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
1.3k
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
120
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.2k
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
240
App Intentsのビルドプロセスを支える技術
kntkymt
0
380
Security issues being discussed on Web Platforms
petamoriken
0
950
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
110
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
7k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Exploring anti-patterns in Rails
aemeredith
4
510
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building Applications with DynamoDB
mza
96
7.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Building AI with AI
inesmontani
PRO
1
1.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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