/procファイルシステムとは

![20150307003237.jpg](https://qiita-image-store.s3.amazonaws.com/0/258841/1bb5ff3c-161a-3698-6d28-119c99a30d10.jpeg)

## 背景

procファイルシステムについて気になったので調べた際の備忘録

## 疑似ファイルシステムとは

記憶装置上にあるファイル以外のものを、さもファイルであるかのように見せかけるファイルシステムです。
本記事ではその中でもprocファイルシステムについて取り上げます。

## procファイルシステムとは

procファイルシステムとはカーネルの現在の状態を示す特別なファイルが置いてある階層
これを利用してアプリケーションやユーザーがカーネルのシステム情報を見ることが出来ます。

/procディレクトリ配下には、システムハードウェアや現在実行中のプロセスの豊富な 詳細情報があります。

``` console
$ ls -l /proc/vmstat
-r--r--r--. 1 root root 0 Mar 26 08:36 /proc/vmstat
```

また他にも

/proc/net - ネットワークのプロトコルスタックに関する情報
/proc/tty - （擬似）端末に関する情報
/proc/version - カーネルのバージョン番号

等があります。
ここら辺の詳細はwikipediaをご参照ください。
https://ja.wikipedia.org/wiki/Procfs

## /proc/mounts

このファイルは、システムで使用中の全マウントの一覧を提供します。
/etc/mtabやmountコマンドでも同様の結果が得られます。

``` console
$ cat /proc/mounts
rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=929184k,nr_inodes=232296,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
```

## /proc/uptime

このファイルには、システムを最後に再起動してから経過した時間についての情報が保存されています。
このファイルを整形してuptimeコマンドやwコマンドは起動時間を出力しています。

``` console
$ cat /proc/uptime
1482329.71 1478226.66
```

## /proc/cpuinfo

物理 CPU、CPU コア、および論理 CPU の数を確認できます。
保持している情報については実装によって違うようです。
https://www.wdic.org/w/TECH//proc/cpuinfo

``` console
cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Pentium(R) CPU G3420 @ 3.20GHz
stepping        : 3
microcode       : 0x24
cpu MHz         : 3192.607
cache size      : 3072 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
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 syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer xsave rdrand hypervisor lahf_lm abm ibrs ibpb stibp fsgsbase tsc_adjust invpcid xsaveopt arat spec_ctrl intel_stibp arch_capabilities
bogomips        : 6385.21
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:
```

## /proc/meminfo

システム上の現在のRAM使用率についての情報が記載されています。
物理的なメモリ量だったりを見ることができます。
ただしカーネルが内部的に管理している枠組みでのメモリ情報でありユーザ視点での内容とは少し別となります。
http://enakai00.hatenablog.com/entry/20110906/1315315488

``` console
$ cat /proc/meminfo
MemTotal:        1882560 kB
MemFree:         1212888 kB
MemAvailable:    1483648 kB
Buffers:               0 kB
Cached:           370828 kB
SwapCached:          256 kB
Active:           282168 kB
Inactive:         156996 kB
Active(anon):       3604 kB
Inactive(anon):    73468 kB
Active(file):     278564 kB
Inactive(file):    83528 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2096372 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         68100 kB
Mapped:            16388 kB
Shmem:              8736 kB
Slab:             127540 kB
SReclaimable:      79660 kB
SUnreclaim:        47880 kB
KernelStack:        2896 kB
PageTables:         4084 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3038428 kB
Committed_AS:     287156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      147232 kB
VmallocChunk:   34359341052 kB
HardwareCorrupted:     0 kB
AnonHugePages:      8192 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       79744 kB
DirectMap2M:     2017280 kB
DirectMap1G:           0 kB
```

## /proc/sysrq-trigger

sysrq-triggerとはSysRqキーからのコマンドキーを受け取るためのファイルです。
kernel panicなどを意図的に起こす際に使用したりします。
即座に再起動させたり、システムを強制停止させたりすることも可能です。

``` console
$ sudo sh -c 'echo 1 > /proc/sys/kernel/sysrq'
$ sudo sh -c 'echo c > /proc/sysrq-trigger'
```

## あとがき

有名どころのprocファイルシステム配下について書いてみました。
他にも様々な情報が即座にとれる便利な仕組みがあるので是非見てみてください。