概要
Red Hat Enterprise Linux 4: リファレンスガイド - 5.3. /proc/配下のディレクトリ の説明によると
カーネルに関する情報の共通グループは、/proc/ ディレクトリ内のディレクトリ及びサブディレクトリにグループ化されます。
だそうです、あんまり分かりません。
通信用語の基礎知識 - /proc によると
UNIXやPOSIX準拠OS(Linux等)で、プロセス関係の情報が置かれるディレクトリ。
概要
具体的には、procfsをマウントするためのディレクトリ(マウントポイント)である。
UNIX System V、BSD、Linuxなどオペレーティングシステム(OS)を問わずこのディレクトリは存在するが、その内容については各OSのカーネルの仕様に依存しており、相互の互換性などはない。
OSによっては、プロセスの情報だけでなく、カーネルの情報を読み出すこともできる。
Linuxでも、どのディストリビューションにも例外なくあるが、FHSには規定されていない。
特徴
ファイル
ここに置かれた情報は、実際にはファイルとしてその実体は存在しない。
procfsがマウントされていると、PIDのディレクトリがあるように見え、ここから各種プロセスの情報を読み出すことができる。情報は一見ディレクトリやファイルに見えるが、仮想化されたものであって、ディスク上にファイル等がある訳ではない。
UNIXだけでなくLinuxでも同様だが、加えてカーネル内部の情報にアクセスするための情報がある。これも一見ファイルに見えるが、同様にファイルではない。
だそうです
こっちの方が分かりやすいですね
man proc
してみるとめちゃくちゃ長いですが、概要は
DESCRIPTION
The proc filesystem is a pseudo-filesystem which provides an interface to kernel data
structures. It is commonly mounted at /proc. Typically, it is mounted automatically by
the system, but it can also be mounted manually using a command such as:
mount -t proc proc /proc
Most of the files in the proc filesystem are read-only, but some files are writable,
allowing kernel variables to be changed.
DeepL に突っ込むと
説明
proc ファイルシステムはカーネルのデータ構造へのインターフェイスを提供する擬似ファイルシステムです。 一般的には /proc にマウントされます。 通常、システムによって自動的にマウントされますが、以下のようなコマンドを使って手動でマウントすることもできます。
mount -t proc proc /proc
proc ファイルシステム内のほとんどのファイルは読み込み専用ですが、一部のファイルは書き込み可能で、カーネル変数を変更することができます。
なんとなく分かってきました
プロセスディレクトリ
まず、ls
してみると数字のディレクトリが複数あります。
これは実行時大してプロセスが起動していないので少ないですが、
ps
してみると同じプロセスIDが確認出来ると思います。
$ ls -al /proc | head
total 4
dr-xr-xr-x 144 root root 0 Jun 10 00:59 .
drwxr-xr-x 23 root root 4096 Jun 10 00:59 ..
dr-xr-xr-x 9 root root 0 Jun 10 00:59 1
dr-xr-xr-x 9 mizutoki_ mizutoki_ 0 Jun 10 00:59 10
dr-xr-xr-x 9 mizutoki_ mizutoki_ 0 Jun 10 01:15 188
dr-xr-xr-x 9 mizutoki_ mizutoki_ 0 Jun 10 01:15 189
dr-xr-xr-x 9 root root 0 Jun 10 00:59 8
dr-xr-xr-x 9 root root 0 Jun 10 00:59 9
dr-xr-xr-x 2 root root 0 Jun 10 00:59 acpi
$ ps
PID TTY TIME CMD
10 pts/0 00:00:00 zsh
218 pts/0 00:00:00 ps
それぞれのプロセス固有の情報が置かれているのでこれらをプロセスディレクトリと呼ぶそうです。
そして /proc/self
は自分のプロセスIDを分かっていなくても、自分自身のプロセスディレクトリにアクセス出来るそうです。
そのプロセスディレクトリの中身を覗いてみます
$ ls -al /proc/10
total 0
dr-xr-xr-x 9 mizutoki_ mizutoki_ 0 Jun 10 00:59 .
dr-xr-xr-x 143 root root 0 Jun 10 00:59 ..
dr-xr-xr-x 2 mizutoki_ mizutoki_ 0 Jun 10 01:26 attr
-r-------- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 auxv
-r--r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cgroup
--w------- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 clear_refs
-r--r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cmdline
-rw-r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 comm
-rw-r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 coredump_filter
-r--r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cpuset
lrwxrwxrwx 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cwd -> /mnt/c/Users/mizutoki_
-r-------- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 environ
lrwxrwxrwx 1 mizutoki_ mizutoki_ 0 Jun 10 00:59 exe -> /bin/zsh
dr-x------ 2 mizutoki_ mizutoki_ 0 Jun 10 00:59 fd
dr-x------ 2 mizutoki_ mizutoki_ 0 Jun 10 01:26 fdinfo
-rw-r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 gid_map
-r-------- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 io
-r--r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 limits
dr-x------ 2 mizutoki_ mizutoki_ 0 Jun 10 01:26 map_files
-r--r--r-- 1 mizutoki_ mizutoki_ 0 Jun 10 01:26 maps
.
.
.
ファイル群
理解が容易だったものをいくつか抜粋して見ますと
/proc/[pid]/cmdline
プロセスの完全なコマンドラインを保持
例えば、
$ cat /proc/10/cmdline
-zsh
$ cat /proc/self/cmdline
cat/proc/self/cmdline
/proc/[pid]/cwd
プロセスの現在の作業ディレクトリ
/proc/[pid]/environ
現在実行中のプログラムが起動された時に設定された最初の環境が含まれている。
この説明だとあまり分かりませんが、cat
して見ると環境変数が入っています
* /proc/[pid]/status
/proc/[pid]/stat
, /proc/[pid]/statm
の情報の多くを、人間が解析しやすい形式で表示する
$ cat /proc/self/status
Name: cat
Umask: 0022
State: R (running)
Tgid: 1035
Ngid: 0
Pid: 1035
PPid: 10
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 64
Groups: 4 20 24 25 27 29 30 44 46 108 114 1000
NStgid: 1035
NSpid: 1035
NSpgid: 1035
NSsid: 10
VmPeak: 6324 kB
VmSize: 6324 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 836 kB
VmRSS: 836 kB
RssAnon: 68 kB
RssFile: 768 kB
RssShmem: 0 kB
VmData: 312 kB
VmStk: 140 kB
VmExe: 32 kB
VmLib: 2112 kB
VmPTE: 52 kB
VmSwap: 0 kB
HugetlbPages: 0 kB
CoreDumping: 0
Threads: 1
SigQ: 0/102431
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
.
.
.
-
/proc/cpuinfo
CPU と アーキテクチャに依存する項目のコレクション
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
stepping : 10
microcode : 0xffffffff
cpu MHz : 3695.998
cache size : 12288 KB
physical id : 0
siblings : 12
core id : 0
cpu cores : 6
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 21
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall
.
.
.
他にもたくさんあるので、詳しく知りたい方は man proc
を読んでみてください