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
/proc を見てみる
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Osumi, Yusuke
June 20, 2020
Technology
400
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
/proc を見てみる
「新しいLinuxの教科書」を読む会 オンライン #2
での発表資料です。
https://linuxbook.connpass.com/event/178366/
Osumi, Yusuke
June 20, 2020
More Decks by Osumi, Yusuke
See All by Osumi, Yusuke
本の紹介の補足
ozuma
1
420
gitサービス3兄弟
ozuma
0
430
簡体字は楽
ozuma
0
500
ソフトウェアは固定資産
ozuma
0
450
ASCIIコードの小話
ozuma
0
470
今いるディレクトリを消すとどうなる
ozuma
1
430
名前付きパイプ FIFO
ozuma
0
590
文章、作文技法 リモートワーク
ozuma
1
950
CentOSの今後のリリース(簡易説明)
ozuma
0
430
Other Decks in Technology
See All in Technology
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
200
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
100
AIは推し活である。
kurazuuuuuu
2
990
C#コードの結合を可視化する Roslyn解析による設計改善と リファクタリング判断
dora56
0
860
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
760
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
110
猫でもわかるKiro Web
kentapapa
1
130
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
280
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
1
600
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
0
850
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
200
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
450
Featured
See All Featured
Scaling GitHub
holman
464
140k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Practical Orchestrator
shlominoach
192
12k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Navigating Weather and Climate Data
rabernat
0
540
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
250
Embracing the Ebb and Flow
colly
88
5.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Transcript
/proc を見てみる @ozuma5119 1 「新しいLinuxの教科書」を読む会 オンライン #2 2020/06/20
2
3
4 $ man proc
5 https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
6 https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html pseudo-file system : 擬似ファイルシステム
まずは見てみましょう 7
8 数字のディレクトリたくさん + それっぽいファイル名たくさん + それっぽいディレクトリ名がいくつか
9 $ cat /proc/meminfo MemTotal: 16294336 kB MemFree: 15851072 kB
MemAvailable: 15843672 kB Buffers: 25336 kB Cached: 204780 kB SwapCached: 0 kB Active: 164016 kB Inactive: 100876 kB Active(anon): 35612 kB Inactive(anon): 444 kB Active(file): 128404 kB Inactive(file): 100432 kB Unevictable: 16 kB Mlocked: 0 kB SwapTotal: 16666620 kB SwapFree: 16666620 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 34564 kB Mapped: 63636 kB Shmem: 1284 kB KReclaimable: 32704 kB Slab: 81764 kB SReclaimable: 32704 kB SUnreclaim: 49060 kB KernelStack: 2548 kB PageTables: 1304 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 24813788 kB Committed_AS: 261736 kB VmallocTotal: 34359738367 kB VmallocUsed: 41272 kB VmallocChunk: 0 kB Percpu: 3552 kB HardwareCorrupted: 0 kB AnonHugePages: 2048 kB ShmemHugePages: 0 kB
10 $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel
cpu family : 6 model : 58 model name : Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz stepping : 9 microcode : 0x21 cpu MHz : 1600.787 cache size : 8192 KB physical id: 0 siblings : 8 core id : 0 cpu cores : 4 apicid : 0 initial apicid : 0 fpu : yes ....(省略).... cache_alignment: 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz stepping : 9 microcode : 0x21 cpu MHz : 1600.503 cache size : 8192 KB physical id: 0 siblings : 8 core id : 1 cpu cores : 4 ....(省略)....
/proc ディレクトリの擬似ファイル (イメージ) 11 メモリ カーネル メモリ上に 展開 窓のような疑似 ファイル(
/proc ) /proc ファイルを通して、カーネルの現在のプロ セス管理状態や各種情報の取得 (一部は書き込み=設定変更も可能)
計算して uptime コマンドと比べてみよう 12 $ cat /proc/uptime 1313352.37 1311195.34 $
$ uptime 02:49:25 up 15 days, 4:49, 3 users, load average: 0.00, 0.01, 0.05 1313352秒 ≒ 21889分 ≒ 364時間 ≒ 15日ちょっと
13 数字のディレクトリはプロセスごとの proc ファイル。 プロセスIDに対応したディレクトリになっている
psコマンドと比べてみよう 14 # ps ww -p 20446 PID TTY STAT
TIME COMMAND 20446 ? Ss 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic" # # cat -v /proc/20446/cmdline /usr/bin/ssh-agent^@/bin/sh^@-c^@exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"^@ ※ ^@ =0x00, ゼロ終端 ※他人のプロセス情報はrootで無いとあまり見られない
procfs系のコマンドは、procから拾って組み立てる (ps, top, uptime, vmstat... 等) 15 [root@cent7 ~]# strace
ps execve("/bin/ps", ["ps"], 0x7ffc3e00eb10 /* 18 vars */) = 0 ....(省略)... stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 open("/proc/1/stat", O_RDONLY) = 6 read(6, "1 (systemd) S 0 1 1 0 -1 4202752"..., 1024) = 375 close(6) = 0 open("/proc/1/status", O_RDONLY) = 6 read(6, "Name:\tsystemd\nUmask:\t0000\nState:"..., 1024) = 1024 read(6, "0,00000000,00000000,00000000,000"..., 1024) = 178 close(6) = 0 stat("/proc/2", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 open("/proc/2/stat", O_RDONLY) = 6 read(6, "2 (kthreadd) S 0 0 0 0 -1 213817"..., 2048) = 169 close(6) = 0 ....(省略)...
書き込む例:一時的にカーネルパラメタをいじる 16 # cat /proc/sys/net/ipv4/icmp_echo_ignore_all ← pingの応答を返すか? 0 # ping
localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.028 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.029 ms ...(省略)... # # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all ← pingを無視する # ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. ^C --- localhost ping statistics --- 8 packets transmitted, 0 received, 100% packet loss, time 6999ms 永続的には /etc/sysctl.conf: net.ipv4.icmp_echo_ignore_all=1
例:わざとシステムをクラッシュ(Windowsで言うブルースクリーン) 17 # echo 1 > /proc/sys/kernel/sysrq ← sysrqを有効化 #
echo c > /proc/sysrq-trigger ← カーネルにSystem Crash命令を送る
参考文献 • Man page of PROC ◦ https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html • Linux
procfs 徹底入門 ◦ https://www.kimullaa.com/entry/2019/12/15/075138 • Wikipedia: procfs ◦ https://ja.wikipedia.org/wiki/Procfs • RedHat Enterprise Linux 6: 導入ガイド 付録E PROC ファイルシステム ◦ https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/ch-proc • その5: procfs (Satoru Takeuchi) ◦ https://www.youtube.com/watch?v=y0N4TmNRmQg 18