LPIC /proc/周りについて

そろそろLPICを取りたいなぁなんて考えていて下記の本をやり始めたんですが。。

徹底攻略 LPI問題集 Level1 [Version 3.5]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略 LPI問題集 Level1 [Version 3.5]対応 (ITプロ/ITエンジニアのための徹底攻略)

知らないことが多すぎる!そんな訳で勉強も兼ねて記録をつけて行きたいと思います。 今回は /proc/についてです。

まず適当なプロセスを選ぶ

$ ps aux
…
kisho     2178  0.0  0.2  23700  1248 pts/0    S+   01:30   0:00 tmux
…

このtmuxプロセスの情報を見てみることに。 /proc/プロセスID/以下のファイルがプロセスに関する様々情報を提供してくれます。

cwdでは実行されたディレクトリを見ることができます。

# ls -l /proc/2178/cwd
lrwxrwxrwx. 1 root root 0 May 23 05:11 /proc/2178/cwd -> /home/kisho
# cat /proc/2178/cmdline
tmux

exeは実行されたプログラム。

# ls -l /proc/2178/exe 
lrwxrwxrwx. 1 root root 0 May 23 05:11 /proc/2178/exe -> /usr/bin/tmux

environ環境変数

# cat /proc/2178/environ
HOSTNAME=localhost.localdomainSELINUX_ROLE_REQUESTED=TERM=xterm-256colorSHELL=/bin/bashHISTSIZE=1000SSH_CLIENT=10.0.2.2 50142 22SELINUX_USE_CURRENT_RANGE=SSH_TTY=/dev/pts/0USER=kishoLS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lz=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.bz=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.rar=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:MAIL=/var/spool/mail/kishoPATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/kisho/binPWD=/home/kishoLANG=ja_JP.UTF-8SELINUX_LEVEL_REQUESTED=HISTCONTROL=ignoredupsSHLVL=1HOME=/home/kishoLOGNAME=kishoSSH_CONNECTION=10.0.2.2 50142 10.0.2.15 22LESSOPEN=|/usr/bin/lesspipe.sh %sG_BROKEN_FILENAMES=1_=/usr/bin/tmuxOLDPWD=/home/kisho/dev/study.erlang

fdは そのプロセスのオープンしているファイルディスクリプタが見えるようになっています。ファイルディスクリプタとはプログラムがアクセスするファイルや標準入出力などをOSが識別するために用いる識別子。fd配下のファイル記述子(番号)に対応するファイルを開くと、そのプロセスがオープンしている記述子と同じものがオープンされます。以下はvimプロセスの例。

# ls -l /proc/4154/fd
total 0
lrwx------. 1 kisho kisho 64 May 23 05:38 0 -> /dev/pts/2
lrwx------. 1 kisho kisho 64 May 23 05:38 1 -> /dev/pts/2
lrwx------. 1 kisho kisho 64 May 23 05:38 2 -> /dev/pts/2
lrwx------. 1 kisho kisho 64 May 23 05:38 4 -> /home/kisho/dev/study.perl/.intermed_c01_001.pl.swp

cpuっていうのはなかった。

# ls /proc/2178/cpu
ls: cannot access /proc/2178/cpu: No such file or directory

mapsはプロセスのアドレス空間にどのような情報が配置されているかを示します。

# cat /proc/2178/maps
00400000-00457000 r-xp 00000000 fd:00 159995                             /usr/bin/tmux
00656000-00659000 rw-p 00056000 fd:00 159995                             /usr/bin/tmux
00659000-00672000 rw-p 00000000 00:00 0
00d2e000-00d4f000 rw-p 00000000 00:00 0                                  [heap]
7fe6bdeb2000-7fe6bdec9000 r-xp 00000000 fd:00 132384                     /lib64/libpthread-2.12.so
7fe6bdec9000-7fe6be0c9000 ---p 00017000 fd:00 132384                     /lib64/libpthread-2.12.so
7fe6be0c9000-7fe6be0ca000 r--p 00017000 fd:00 132384                     /lib64/libpthread-2.12.so
7fe6be0ca000-7fe6be0cb000 rw-p 00018000 fd:00 132384                     /lib64/libpthread-2.12.so
7fe6be0cb000-7fe6be0cf000 rw-p 00000000 00:00 0
7fe6be0cf000-7fe6be0e5000 r-xp 00000000 fd:00 132370                     /lib64/libnsl-2.12.so
7fe6be0e5000-7fe6be2e4000 ---p 00016000 fd:00 132370                     /lib64/libnsl-2.12.so
…

mountsはマウントしているファイルシステム

# cat /proc/4154/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=241880k,nr_inodes=60470,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,seclabel,relatime 0 0
/dev/mapper/VolGroup-lv_root / ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /selinux selinuxfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=241880k,nr_inodes=60470,mode=755 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0

memは見れなかった。

# cat /proc/2178/mem
cat: /proc/2178/mem: Operation not permitted

statusstatはプロセスの状態を表すとても使えるファイル。

# cat /proc/2178/status
Name:   tmux
State:  S (sleeping)
Tgid:   2178
Pid:    2178
PPid:   1155
TracerPid:      0
Uid:    500     500     500     500
Gid:    500     500     500     500
Utrace: 0
FDSize: 256
Groups: 500
VmPeak:    23704 kB
VmSize:    23700 kB
VmLck:         0 kB
VmHWM:      1248 kB
VmRSS:      1248 kB
VmData:      324 kB
VmStk:        88 kB
VmExe:       348 kB
VmLib:      2368 kB
VmPTE:        68 kB
VmSwap:        0 kB
Threads:        1
SigQ:   0/3779
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000081802
SigCgt: 0000000188034201
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed:   1
Cpus_allowed_list:      0
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        11
nonvoluntary_ctxt_switches:     1

statmはページの使用状況。 先頭から順に、総ページ数、メモリ中に駐在しているページ数、共有されているページ数、自分自身のテキストのページ数、データ/スタックのページ数、ダーティなページ数。

# cat /proc/2178/statm
5925 312 232 87 0 103 0 

次に/proc/直下にあるファイルを見てみます。 以下、システムのブート時のパラメーター。

$ cat /proc/cmdline
ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16   KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet

カーネルのバージョン

$ cat /proc/version
Linux version 2.6.32-358.2.1.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Wed Mar 13 00:26:49 UTC 2013

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 42
model name      : Intel(R) Core(TM) i5-2557M CPU @ 1.70GHz
stepping        : 7
cpu MHz         : 1703.943
cache size      : 6144 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
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 syscall nx rdtscp lm constant_tsc up rep_good pni monitor ssse3 lahf_lm
bogomips        : 3407.88
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

システム動作時間

$ cat /proc/uptime
99032.25 95271.36

デバイスとメジャー番号の対応

$ cat /proc/devices |more
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 14 sound
 21 sg
 29 fb
 99 ppdev
116 alsa
128 ptm
136 pts
162 raw
180 usb
189 usb_device
202 cpu/msr
203 cpu/cpuid
249 hidraw
250 usbmon
251 bsg
252 pcmcia
253 watchdog
254 rtc

Block devices:
  1 ramdisk
259 blkext
  7 loop
  8 sd
  9 md
 11 sr
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd

認識パーティション一覧

$ cat /proc/partitions
major minor  #blocks  name

   8        0    8388608 sda
   8        1     512000 sda1
   8        2    7875584 sda2
 253        0    6856704 dm-0
 253        1    1015808 dm-1

扱えるファイルフォーマット一覧

[kisho@localhost ~]$ cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cpuset
nodev   tmpfs
nodev   devtmpfs
nodev   binfmt_misc
nodev   debugfs
nodev   securityfs
nodev   sockfs
nodev   usbfs
nodev   pipefs
nodev   anon_inodefs
nodev   inotifyfs
nodev   devpts
nodev   ramfs
nodev   hugetlbfs
        iso9660
nodev   pstore
nodev   mqueue
nodev   selinuxfs
        ext4

割り込み要因リスト

$ cat /proc/interrupts
           CPU0
  0:        194   IO-APIC-edge      timer
  1:          7   IO-APIC-edge      i8042
  8:          0   IO-APIC-edge      rtc0
  9:          0   IO-APIC-fasteoi   acpi
 12:        106   IO-APIC-edge      i8042
 14:          0   IO-APIC-edge      ata_piix
 15:         89   IO-APIC-edge      ata_piix
 19:    1772221   IO-APIC-fasteoi   eth0
 21:      67827   IO-APIC-fasteoi   ahci, Intel 82801AA-ICH
 22:          0   IO-APIC-fasteoi   ohci_hcd:usb1
NMI:          0   Non-maskable interrupts
LOC:    3022137   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
IWI:          0   IRQ work interrupts
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:        333   Machine check polls
ERR:          0
MIS:          0

スワップファイル一覧

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1015800 20676   -1

ファイルロックリスト

$ cat /proc/locks
1: FLOCK  ADVISORY  WRITE 1101 fd:00:2896 0 EOF
2: FLOCK  ADVISORY  WRITE 1101 fd:00:2895 0 EOF

ロードアベレージ

$ cat /proc/loadavg
0.00 0.00 0.00 1/84 5261

システム状態

    $ cat /proc/stat
cpu  157397 0 28129 9619778 3609 4889 4489 0 0
cpu0 157397 0 28129 9619778 3609 4889 4489 0 0
intr 4869583 194 7 0 0 0 0 0 0 0 0 0 0 106 0 0 89 0 0 0 1773584 0 67878 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 5616300
btime 1369205840
processes 5262
procs_running 1
procs_blocked 0
softirq 6957109 0 2529094 20019 1746657 62051 0 2 0 8274 2591012

空きメモリ情報

$ cat /proc/meminfo
MemTotal:         502412 kB
MemFree:          374688 kB
Buffers:           14376 kB
Cached:            27828 kB
SwapCached:         4836 kB
Active:            21628 kB
Inactive:          37452 kB
Active(anon):       8336 kB
Inactive(anon):     8540 kB
Active(file):      13292 kB
Inactive(file):    28912 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1015800 kB
SwapFree:         995124 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:         12912 kB
Mapped:             7628 kB
Shmem:                 0 kB
Slab:              56612 kB
SReclaimable:       7788 kB
SUnreclaim:        48824 kB
KernelStack:         664 kB
PageTables:         2992 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1267004 kB
Committed_AS:      90456 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        3924 kB
VmallocChunk:   34359719836 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        8128 kB
DirectMap2M:      516096 kB

スラブキャッシュ状態

$ cat /proc/slabinfo slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_expect      0      0    240   16    1 : tunables  120   60    0 : slabdata      0      0      0
nf_conntrack_ffffffff81b16540      2     13    304   13    1 : tunables   54   27    0 : slabdata      1      1      0
fib6_nodes            22     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0
ip6_dst_cache         13     20    384   10    1 : tunables   54   27    0 : slabdata      2      2      0
ndisc_cache            1     15    256   15    1 : tunables  120   60    0 : slabdata      1

dmaチャンネル

$ cat /proc/dma
4: cascade

なんかやったことをそのまま記録しただけになってしまったのでまた詳しく情報を見て行きたいと思います。
今日はここまで~。