30.3. 代表的な仮想ファイルの紹介

/proc ファイルシステムで参照可能な代表的な仮想ファイルを解説します。

/proc/PID/

このディレクトリには、実行中のプロセスに対応する非常に多くのサブディレクトリ、仮想ファイルが存在します。以下の例は、プロセス ID が 2363 の status ファイルを表示したものです。

# cat /proc/2363/status
Name:   httpd
State:  S (sleeping)
SleepAVG:       88%
Tgid:   2363
Pid:    2363
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 32
Groups: 0 1 2 3 4 6 10
VmSize:    22088 kB
VmLck:         0 kB
VmRSS:     10768 kB
VmData:     3436 kB
VmStk:       708 kB
VmExe:       284 kB
VmLib:     16380 kB
StaBrk: 08095000 kB
Brk:    08b9c000 kB
StaStk: bff90d10 kB
ExecLim:        b8000000
Threads:        1
...略

以下のように確認するとプロセス ID 2363 のプロセスは、httpd であることがわかります。/proc/2363 以下にある仮想ファイルはこのプロセスに関する情報です。

# ps --pid 2363
  PID TTY          TIME CMD
 2363 ?        00:00:00 httpd

また、このディレクトリの所有者は、プロセスの所有ユーザー、所有グループになっています。Turbolinux 10 Server の httpd は、初期状態では、apache ユーザー、apache グループが所有します。以下のようにプロセス ID のディレクトリも同ユーザー、グループに所有されています。

# ls -ld /proc/2366
dr-xr-xr-x   3 apache   apache           0  8月 10 19:49 /proc/2366/

プロセスが存在する間はこのディレクトリも存在しており、cmdline(コマンドライン)、environ(環境変数)、fd/(ファイル記述子)、mem(アドレス空間)、root(/)、statm(ページ割り当て状態)、cwd(カレントワーキングディレクトリ)、exe(実行プログラムへのリンク)、maps(マップされているメモリ領域とアクセス制限)、mounts(マウント状態)、stat(プロセスの状態、ps コマンドで利用される)、statm(ページ中のメモリ状態)、status(プロセスの状態、stat と statm を人間のわかりやすいフォーマットで表示)などの仮想ファイルから様々な情報を得ることができます。

例えば、プロセスの起動コマンドは以下のように確認できます。

#  cat /proc/2366/cmdline
/usr/sbin/httpd

以下のように、実行プログラムへのリンクが存在していることもわかります。

#  ls -l /proc/2366/exe
lrwxrwxrwx  1 root root 0  8月 11 09:37 /proc/2366/exe -> /usr/sbin/httpd.prefork*

/proc/apm

APM(Advanced Power Management)のバージョンとバッテリの情報を出力します。以下の例は、AC 電源を接続せずに PC バッテリを使用した状態での出力結果です。

# cat /proc/apm
1.16ac 1.2 0x02 0x00 0x00 0x01 96% 117 min

APM BIOS と Linux APM ドライバのバージョンがそれぞれ 1.2 と 1.16ac で、バッテリの残量が 96%、残り時間が 117 分であることがわかります。以下のように apm -v コマンドからこの値は参照されます。

# apm -v
APM BIOS 1.2 (kernel driver 1.16ac)
AC off-line, battery status high: 96% (1:57:00)

AC 電源に接続している場合は、以下のように表示されます。

# cat /proc/apm
1.16ac 1.2 0x02 0x01 0x00 0x01 100% 101 min
# apm -v
APM BIOS 1.2 (kernel driver 1.16ac)
AC on-line, battery status high: 100% (1:41:00)

バッテリのない PC の場合は以下のようになります。

# cat /proc/apm
1.16ac 1.2 0x03 0x01 0xff 0x80 -1% -1 ?
# apm -v
APM BIOS 1.2 (kernel driver 1.16ac)
AC on-line, no system battery

/proc/bus/

このディレクトリ以下に各種バスに関する様々な情報があります。PCI 、USB 、PC カードなどのバスを搭載している場合には、このディレクトリ以下の仮想ファイルで情報を確認することができます。以下の例は、PC カードのドライバに関する情報です。

# cat /proc/bus/pccard/drivers
ide-cs                   1 0

以下の例は、USB デバイスに関する情報です。

# cat /proc/bus/usb/devices

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 2.06
S:  Manufacturer=Linux 2.6.7-0.30 uhci_hcd
S:  Product=UHCI Host Controller
S:  SerialNumber=0000:00:14.2
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms

/proc/bus 以下はハードウェアの環境などにより大きく異なります。搭載するバスごとに、input、usb、pci、usb、isa などのディレクトリが存在し、そのディレクトリに 001 や 00 などの数字のディレクトリ(バイナリ)や、dirvers、device といったディレクトリも存在します。

/proc/cmdline

システム起動時に渡されたカーネルパラメータの情報を出力します。以下の例では、/(ルート)ファイルシステムとしてマウントするパーティションに /dev/hda2 が指定されていることがわかります。

# cat /proc/cmdline
root=0302
/proc/cpuinfo

CPU に関するの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 3
cpu MHz         : 697.084
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat p
se36 mmx fxsr sse
bogomips        : 1376.25

processor は、プロセッサ番号です。1 CPU の場合は 0 になります。cpu family は、CPU のアーキテクチャが表示されます。他にも、model name(CPU の名称)、cpu MHz(処理速度)といった情報や、bogomips (カーネルの初期化時に計算されるシステム定数)などが出力されます。 SMP マシンの場合には、各 CPU ごとに情報が出力されます。

/proc/devices

デバイスのメジャー番号とデバイス名の情報を出力します。標準的な出力例を以下に示します。

# cat /proc/devices | less
Character devices:
  1 mem
  2 pty
  3 ttyp
  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
 29 fb
116 alsa
128 ptm
136 pts
180 usb

Block devices:
  1 ramdisk
  3 ide0
  7 loop
  9 md
 22 ide1
254 mdp

データの受け渡しを特定サイズのブロック単位で行えるデバイスがブロックデバイスです。バッファを利用できるため効率よくデータの書き込みが行えます。一方、バッファリングなしで連続した文字単位の受け渡しを行うのがキャラクタデバイスです。ls -l コマンドで、1 桁目に表示される文字が b のデバイスはブロックデバイスで、c のデバイスはキャラクタデバイスです。また、通常ファイルでサイズが表示される部分には、デバイスのメジャー番号とマイナー番号が表示されます。/dev/hda1 の場合は、メジャー番号 3 とマイナー番号 1 になります。

# ls -l /dev/hda1
brw-rw----  1 root disk 3, 1  7月 27 19:49 /dev/hda1
# ls -l /dev/tty1
crw-------  1 root tty 4, 1  8月 10 20:07 /dev/tty1

/proc/dma

ISA DMA(direct memory access)チャネルの割り当て情報を出力します。標準的な出力例を以下に示します。

# cat /proc/dma
 4: cascade

/proc/driver

このディレクトリには、カーネルの使用するドライバに関する情報があります。以下の例は、Real Time Clock(マザーボード上にある時計専用のチップで、PC の電源断の間も内蔵電池から電源を供給し動作する)に関する情報です。

# cat /proc/driver/rtc
rtc_time        : 19:54:12
rtc_date        : 2004-08-11
rtc_epoch       : 1900
alarm           : 17:17:00
DST_enable      : no
BCD             : yes
24hr            : yes
square_wave     : no
alarm_IRQ       : no
update_IRQ      : no
periodic_IRQ    : no
periodic_freq   : 1024
batt_status     : okay

環境により異なりますが、他に USB コントローラ uhci に関する情報などがあります。

/proc/execdomains

カーネルが現在サポートしている実行ドメインとパーソナリティの範囲に関する情報を出力します。標準的な出力例を以下に示します。

# cat /proc/execdomains
0-0     Linux                   [kernel]

Linux は、プロセスごとに複数の実行ドメイン(domain)をサポートします。これは、パーソナリティ(personality)により指定され、シグナル番号とシグナルの割り付けやカーネルの提供するシステムコールを決定します。実行するプロセスのパーソナリティを変更することで、他の UNIX ライクな OS のバイナリで使用されるシステムコールの処理方法に対応が可能になります。

/proc/fb

フレームバッファデバイスに関する情報を出力します。標準的な出力例を以下に示します。

0 VESA VGA

フレームバッファデバイスとは、ビデオカードごとに異なるハードウェアの違いを吸収するために抽象化した仮想デバイスです。搭載するビデオカードにあったフレームバッファ用のドライバがロードされているとき情報が表示されます。上記の例は VESA(Video Electronics Standards Association)ドライバです。

/proc/filesystems

カーネルのサポートするファイルシステムの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   sockfs
nodev   futexfs
nodev   tmpfs
nodev   pipefs
nodev   eventpollfs
nodev   devpts
        ext3
        ext2
nodev   ramfs
nodev   hugetlbfs
nodev   mqueue
nodev   usbfs
nodev   usbdevfs
        ntfs

1 列目に nodev と表示されているファイルシステムは、ブロックデバイスにマウントされていないことを表します。表示されていないファイルシステムはマウントされています。また、2 列目にはファイルシステムの名前が表示されます。mount コマンドはファイルシステムのタイプが指定されないとき、このリストを探してファイルシステムを決定しようとします。

/proc/ide/

このディレクトリ以下に IDE デバイスに関する情報があります。以下の例は、IDE デバイスのドライバに関する情報です。

# cat /proc/ide/drivers
ide-disk version 1.18

他に ide0、ide1 などのチャネルやそれに取り付けられたデバイスごとのディレクトリがあり、cache(キロバイト単位のバッファサイズ)、capacity(セクタ数)、driver(ドライバのバージョン)、geometry(物理ジオメトリと論理ジオメトリ)、identify(16 進数表記)、media(メディアのタイプ)、model(製造者のモデル番号)、settings(ドライブの設定)、smart_thresholds(16 進数表記)、smart_values(16 進数表記)などの仮想ファイルから様々な情報を得ることができます。デバイスに関するこれらの情報をわかりやすいフォーマットで表示するコマンドに hdparm があります。

# hdparm /dev/hda

/dev/hda:
 multcount    = 16 (on)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 1323/240/63, sectors = 20010816, start = 0

/proc/interrupts

IRQ ごとの割り込み回数の情報を出力します。標準的な出力例を以下に示します。

# cat /proc/interrupts
           CPU0
  0:  160138783          XT-PIC  timer
  1:      15744          XT-PIC  i8042
  2:          0          XT-PIC  cascade
  8:          1          XT-PIC  rtc
 11:     839639          XT-PIC  uhci_hcd, eth0, eth1
 12:      15373          XT-PIC  i8042
 14:     261068          XT-PIC  ide0
 15:          3          XT-PIC  ide1
NMI:          0
LOC:          0
ERR:          0
MIS:          0

1 列目が IRQ 番号(割り込み要求番号)です。IRQ 番号は、PC に接続された各種機器が CPU に処理要求を通知する際の識別番号です。以降の列は、割り込み数(SMP システムの場合は、CPU0、CPU1 のように各 CPU ごとに表示されます。)、割り込みタイプ、デバイス名です。

/proc/iomem

I/O メモリマップに関する情報を出力します。標準的な出力例を以下に示します。

# cat /proc/iomem
00000000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000f0000-000fffff : System ROM
00100000-0fffffff : System RAM
  00100000-002ac55b : Kernel code
  002ac55c-00346dff : Kernel data
40000000-40ffffff : PCI Bus #01
  40000000-40ffffff : 0000:01:00.0
41000000-4100007f : 0000:00:10.0
  41000000-4100007f : via-rhine
42000000-42ffffff : PCI Bus #01
  42000000-42ffffff : 0000:01:00.0
44000000-47ffffff : 0000:00:00.0
fffc0000-ffffffff : reserved

1 列目はメモリレジスタ、2 列目はメモリの種類を表します。

/proc/ioports

I/O ポートに関する情報を出力します。標準的な出力例を以下に示します。

# cat /proc/ioports  | less
0000-001f : dma1
0020-0021 : pic1
0040-005f : timer
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial
0cf8-0cff : PCI conf1
1000-107f : 0000:00:10.0
  1000-107f : via-rhine
1080-10bf : 0000:00:0f.0
  1080-10bf : 0000:00:0f.0
10c0-10df : 0000:00:0e.0

省略...

1 列目は予約された I/O ポートアドレス、2 列目はデバイスを表します。I/O ポートアドレスとは、CPU が各入出力機器とデータをやりとりするための窓口を表します。

/proc/kcore

物理メモリ内をコアファイル形式で出力します。出力サイズは物理メモリサイズに 4 キロバイトを加えたものになります。これは各デバッガなどによって使用されるもので、cat やその他のコマンドで表示はしないようにしてください。アクセスには、スーパーユーザーの権限が必要です。

/proc/kmsg

syslog システムコールによりカーネルメッセージを読み込む代わりに使用できる情報です。syslog プロセスが稼働中には読み込むべきではありません。アクセスには、スーパーユーザーの権限が必要です。dmesg コマンドで得られる値です。

/proc/kallsyms

カーネルのスタック以外のすべてのシンボル定義に関する情報を出力します。モジュールから利用されるシンボル定義だけでなく、デバッグで利用されるカーネルのシンボル定義を出力します。標準的な出力例を以下に示します。

# cat /proc/kallsyms | less
c0100240 t _stext
c0100240 t calibrate_delay
c0100240 t stext
c0100360 t rest_init
c0100390 t do_pre_smp_initcalls
c01003a0 t run_init_process
c01003d0 t init
c01004b0 t early_param_test
c01004e0 t early_setup_test
c0100500 t huft_build
c01009f0 t huft_free
c0100a20 t inflate_codes
c0100f60 t inflate_stored
c0101100 t inflate_fixed
c0101240 t inflate_dynamic
c0101820 t inflate_block
c0101920 t inflate
c01019d0 t makecrc
c0101a50 t gunzip
c01020d0 t huft_build
c01025c0 t huft_free
c01025f0 t inflate_codes
c0102ac0 t inflate_stored
...省略
/proc/loadavg

ロードアベレージに関する情報を出力します。標準的な出力例を以下に示します。

2.27 3.59 1.75 1/91 14286

1、5、15 分あたりの CPU 使用率、実行中のプロセス/総プロセス数、直近に実行されたプロセス ID を表示します。uptime コマンドで得られる値です。

# uptime
 11:55:54 up 1 day, 21:33,  7 users,  load average: 2.27, 3.59, 1.75
/proc/locks

現在のファイルロックとリースに関する情報を出力します。標準的な出力例を以下に示します。

# cat /proc/locks
1: POSIX  ADVISORY  WRITE 2648 03:08:32068 0 EOF
2: FLOCK  ADVISORY  WRITE 766 03:08:313157 0 EOF

環境や使用状況により値が異なります。1 行に 1 つのファイルロックに関する情報を出力します。1 列目には識別する番号が、2 列目には POSIX(POSIX スタイル)または、FLOCK(UNIX ファイルロックスタイル)が、3 列目にはロック中の他ユーザーからのアクセスについて ADVISORY(アクセス可)、MANDATORY(アクセス不可)が、次にロックタイプにより WRITE または READ が、続いてそのプロセスのプロセス ID、その後には :(コロン)で区切られてメジャー番号:マイナー番号:inode 番号が出力されます。

/proc/meminfo

物理メモリと SWAP 領域に関する情報を出力します。標準的な出力例を以下に示します。

# cat /proc/meminfo  | less
MemTotal:       256608 kB
MemFree:         69720 kB
Buffers:          4476 kB
Cached:          62208 kB
SwapCached:       4104 kB
Active:         103432 kB
Inactive:        33124 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       256608 kB
LowFree:         69720 kB
SwapTotal:      521600 kB
SwapFree:       499292 kB
Dirty:               0 kB
Writeback:           0 kB
Mapped:          99176 kB
Slab:            45444 kB
Committed_AS:   440628 kB
PageTables:       2380 kB
VmallocTotal:   770040 kB
VmallocUsed:      1512 kB
VmallocChunk:   768468 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     4096 kB

この例では、約 256 メガバイトの物理メモリを搭載し(約 68 メガバイトの空き容量)、約 512 メガバイトのスワップ領域(約 487 メガバイトの空き容量)があることがわかります。free コマンドで得られる値です。

# free
             total       used       free     shared    buffers     cached
Mem:        256608     186924      69684          0       4928      62208
-/+ buffers/cache:     119788     136820
Swap:       521600      22304     499296
/proc/mdstat

RAID に関する情報を出力します。以下の例は、ソフトウェア RAID が正常に動作している場合の出力例です。

# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 sdb1[1] sda1[0]
      31872 blocks [2/2] [UU]
unused devices: <none>

RAID が構築されていない場合は、以下のように何も表示されません。

# cat /proc/mdstat
Personalities :
unused devices: <none>
/proc/mounts

現在マウントされているファイルシステムの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw 0 0
/proc /proc proc rw,nodiratime 0 0
usbfs /proc/bus/usb usbfs rw 0 0
/dev/hda6 /boot ext2 rw 0 0
/dev/hda5 /mnt/winnt1 ntfs ro,noatime,nodiratime,uid=0,gid=0,umask=022,nls=euc-jp,errors=continue,mft_zone_multiplier=1 0 0
none /dev/pts devpts rw 0 0
sysfs /sys sysfs rw 0 0

1 列目にはマウント対象のファイルシステム、2 列目にマウントポイント、3 列目はファイルシステムのタイプ、4 列目には、rw(読み書き可能)、ro(読み込みのみ)が表示されます。

/proc/modules

ロードされているモジュールの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/modules
iptable_filter 2176 0 - Live 0xd0954000
ip_tables 14976 1 iptable_filter, Live 0xd0957000
snd_pcm_oss 45352 0 - Live 0xd097c000
snd_pcm 75144 1 snd_pcm_oss, Live 0xd0968000
snd_page_alloc 8456 1 snd_pcm, Live 0xd084a000
snd_timer 18948 1 snd_pcm, Live 0xd0946000
snd_mixer_oss 15616 1 snd_pcm_oss, Live 0xd094c000
snd 42084 4 snd_pcm_oss,snd_pcm,snd_timer,snd_mixer_oss, Live 0xd0930000
soundcore 6368 1 snd, Live 0xd0845000
3c59x 33832 0 - Live 0xd093c000
via_rhine 16260 0 - Live 0xd092b000
mii 3840 1 via_rhine, Live 0xd0848000
crc32 3968 1 via_rhine, Live 0xd0808000
dump_blockdev 4608 0 - Live 0xd0818000
dump_gzip 2052 0 - Live 0xd0806000
zlib_deflate 21528 1 dump_gzip, Live 0xd089a000
nls_cp932 80768 1 - Live 0xd0864000
nls_euc_jp 4996 1 - Live 0xd0803000
ntfs 85844 1 - Live 0xd084e000
psmouse 19596 0 - Live 0xd0812000
uhci_hcd 27152 0 - Live 0xd080a000
usbcore 92388 3 uhci_hcd, Live 0xd081c000

1 列目にはモジュール名が、2 列目にはメモリサイズ、3 列目には使用カウンタが表示されます。使用カウンタは、現在ロードしているモジュールが参照されている数を表わします。0 にならない限りアンロードされません。典型的なものにデバイスのオープンやファイルシステムのマウントがあります。 例外としてモジュールが自分のアンロードを制御している場合は、この値は -1 になります。 次の列には参照しているモジュールが表示されます。lsmod コマンドで得られる値です。

# lsmod
Module                  Size  Used by
iptable_filter          2176  0
ip_tables              14976  1 iptable_filter
snd_pcm_oss            45352  0
snd_pcm                75144  1 snd_pcm_oss
snd_page_alloc          8456  1 snd_pcm
snd_timer              18948  1 snd_pcm
snd_mixer_oss          15616  1 snd_pcm_oss
snd                    42084  4 snd_pcm_oss,snd_pcm,snd_timer,snd_mixer_oss
soundcore               6368  1 snd
3c59x                  33832  0
via_rhine              16260  0
mii                     3840  1 via_rhine
crc32                   3968  1 via_rhine
dump_blockdev           4608  0
dump_gzip               2052  0
zlib_deflate           21528  1 dump_gzip
nls_cp932              80768  1
nls_euc_jp              4996  1
ntfs                   85844  1
psmouse                19596  0
uhci_hcd               27152  0
usbcore                92388  3 uhci_hcd

/proc/mtrr

Intel P6 ファミリー(Pentium Pro、Pentium II 以降)の CPU で使用される MTRRs(the Memory Type Range Registers)の情報を出力します。標準的な出力例を以下に示します。

# cat /proc/mtrr
reg00: base=0x00000000 (   0MB), size= 256MB: write-back, count=1
reg01: base=0x42000000 (1056MB), size=   8MB: write-combining, count=1

MTRRs は、CPU がメモリにアクセスする範囲を制御します。PCI や AGP バス上のビデオ(VGA)カードを使っている場合、効果があります。通常は変更する必要はありません。:(コロン)で区切られて、1 列目には MTRR の名前が、2別目には、ベースアドレスとサイズが、3列目にはタイプが表示されます。

/proc/net/

/proc/net 以下にはネットワークに関する様々な仮想ファイルが存在します。標準的な出力例を以下に示します。

# cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:   66035     307    0    0    0     0          0         0    66035     307    0    0    0     0       0          0
  eth0:73605675  791018    0    0    0     0          0         0 61166831  205380    1    0    1     0       0          0
  eth1:92505980 1017746    3    0    0     3          0         0   843000    1487    0    0    0     0       0          0

この例では、ネットワークデバイスと各インターフェースで送受信したデータのバイト数、パケット数、エラーの数といった情報が表示されています。他にも、arp(アドレス解決に使われるカーネルの ARP テーブル の情報)、dev_mcast(マルチキャスト)、ip_mr_cache(マルチキャストルーティングキャッシュ)、netstat(送受信した SYN クッキーや TCP の詳細パッケット情報など、総合的なパケットの統計情報)、route(ルーティングテーブル)、rt_cache(ルーティングキャッシュ)、snmp(Simple Network Management Protocol データ)、tr_rif(トークンリング RIF ルーティングテーブル)、unix(UNIX ドメインソケットのリスト)、igmp(Internet Group Management Protocol のデータ)、ip_mr_vif(マルチキャスト仮想インターフェース)、netlink(PF_NETLINK ソケットのリスト)、raw(raw デバイスの統計)、sockstat(ソケットの統計)、tcp(TCP ソケット情報)、udp(UDP ソケット情報)、wireles(無線 LAN に関する情報 )などを確認することができます。

/proc/partitions

各パーティションの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/partitions
major minor  #blocks  name

   3     0   10005408 hda
   3     1    2094088 hda1
   3     2          1 hda2
   3     5    2094088 hda5
   3     6      60448 hda6
   3     7     521608 hda7
   3     8    4089928 hda8
   3     9    1126408 hda9

1 列目から各パーティションのメジャー番号、マイナー番号、ブロック数、デバイス名を表示します。

/proc/pci

PCI デバイスの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/pci
PCI devices found:
  Bus  0, device   0, function  0:
    Class 0600: PCI device 8086:7190 (rev 3).
      Master Capable.  Latency=64.
      Prefetchable 32 bit memory at 0x44000000 [0x47ffffff].
  Bus  0, device   1, function  0:
    Class 0604: PCI device 8086:7191 (rev 3).
      Master Capable.  Latency=64.  Min Gnt=140.
  Bus  0, device  14, function  0:
    Class 0401: PCI device 1102:0002 (rev 8).
      IRQ 11.
      Master Capable.  Latency=64.  Min Gnt=2.Max Lat=20.
      I/O at 0x10c0 [0x10df].
  Bus  0, device  14, function  1:
    Class 0980: PCI device 1102:7002 (rev 8).
      Master Capable.  Latency=64.
      I/O at 0x1410 [0x1417].
  Bus  0, device  15, function  0:
    Class 0200: PCI device 10b7:9050 (rev 0).
      IRQ 11.
      Master Capable.  Latency=64.  Min Gnt=3.Max Lat=8.
      I/O at 0x1080 [0x10bf].
...省略

カーネル初期化のタイミングで検出した全 PCI バスの情報です。IRQ(IRQ の部分)や I/O ポートアドレス(I/O at の部分)、マッピングされているメモリ(memory at の部分)などの情報も表示されます。

/proc/scsi/

このディレクトリ以下に SCSI デバイスの情報があります。システムが SCSI ホストアダプタを搭載している場合、/proc/scsi ディレクトリが存在します。標準的な出力例を以下に示します。

# cat proc/scsi/scsi
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: IBM      Model: DNES-309170W     Rev: SA60
  Type:   Direct-Access                    ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: QUANTUM  Model: ATLAS10K2-TY092L Rev: DDD6
  Type:   Direct-Access                    ANSI SCSI revision: 03

上記の例のように仮想ファイル scsi ですべての SCSI デバイスのデバイスタイプ、モデル名、製造元、SCSIチャネルID を確認することができます。例では、2 台の HDD が接続されています。

他に /proc/scsi には、各 SCSI ドライバ名のディレクトリがあり、ディレクトリ以下にはドライバを使用する SCSI ホストアダプタ固有の様々な情報があります。出力される内容は SCSI ドライバにより異なります。以下の例は、Adaptec 社の aic7890 Ultra2 SCSI アダプタに関する情報です。

# cat /proc/scsi/aic7xxx/0
Adaptec AIC7xxx driver version: 6.2.36
Adaptec aic7890/91 Ultra2 SCSI adapter
aic7890/91: Ultra2 Wide Channel A, SCSI Id=7, 32/253 SCBs
Allocated SCBs: 68, SG List Length: 128

Serial EEPROM:
0x03bb 0x03bb 0x03bb 0x03bb 0x03bb 0x03bb 0x03bb 0x03bb
0x03bb 0x03bb 0x03bb 0x03bb 0x03bb 0x03bb 0x03bb 0x03bb
0x18a6 0x1c5c 0x2807 0x0010 0xffff 0xffff 0xffff 0xffff
0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0x98be

Target 0 Negotiation Settings
        User: 80.000MB/s transfers (40.000MHz, offset 127, 16bit)
        Goal: 80.000MB/s transfers (40.000MHz, offset 31, 16bit)
        Curr: 80.000MB/s transfers (40.000MHz, offset 31, 16bit)
        Channel A Target 0 Lun 0 Settings
                Commands Queued 37749
                Commands Active 0
                Command Openings 64
                Max Tagged Openings 64
                Device Queue Frozen Count 0
Target 1 Negotiation Settings
        User: 80.000MB/s transfers (40.000MHz, offset 127, 16bit)
        Goal: 80.000MB/s transfers (40.000MHz, offset 127, 16bit)
        Curr: 80.000MB/s transfers (40.000MHz, offset 127, 16bit)
        Channel A Target 1 Lun 0 Settings
                Commands Queued 8
                Commands Active 0
                Command Openings 64
                Max Tagged Openings 64
                Device Queue Frozen Count 0
...省略

/proc/self

現在実行中のプロセスディレクトリ(/proc/PID)へのリンクのディレクトリです。プロセスがそのプロセス自身の PID を知らなくてもプロセスディレクトリにアクセスできるようになります。

/proc/slabinfo

カーネルの slab キャッシュの情報を出力します。標準的な出力例を以下に示します。

# cat /proc/slabinfo
slabinfo - version: 2.0
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <batchcount> <limit> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
ip_fib_hash           14    226     16  226    1 : tunables  120   60    0 : slabdata      1      1      0
ntfs_big_inode_cache    237    240    480    8    1 : tunables   54   27    0 : slabdata     30     30      0
ntfs_inode_cache       0      0    160   25    1 : tunables  120   60    0 : slabdata      0      0      0
ntfs_name_cache        0      0    512    8    1 : tunables   54   27    0 : slabdata      0      0      0
ntfs_attr_ctx_cache      0      0     32  119    1 : tunables  120   60    0 : slabdata      0      0      0
ntfs_index_ctx_cache      0      0     64   61    1 : tunables  120   60    0 : slabdata      0      0      0
uhci_urb_priv          0      0     44   88    1 : tunables  120   60    0 : slabdata      0      0      0
unix_sock            103    110    384   10    1 : tunables   54   27    0 : slabdata     11     11      0
ip_mrt_cache           0      0     96   41    1 : tunables  120   60    0 : slabdata      0      0      0
tcp_tw_bucket          0      0    128   31    1 : tunables  120   60    0 : slabdata      0      0      0
tcp_bind_bucket        4    226     16  226    1 : tunables  120   60    0 : slabdata      1      1      0
tcp_open_request       0      0     96   41    1 : tunables  120   60    0 : slabdata      0      0      0
inet_peer_cache        0      0     64   61    1 : tunables  120   60    0 : slabdata      0      0      0
secpath_cache          0      0    128   31    1 : tunables  120   60    0 : slabdata      0      0      0
xfrm_dst_cache         0      0    256   15    1 : tunables  120   60    0 : slabdata      0      0      0
ip_dst_cache         319    435    256   15    1 : tunables  120   60    0 : slabdata     29     29      0
arp_cache            213    310    128   31    1 : tunables  120   60    0 : slabdata     10     10      0
raw4_sock              0      0    480    8    1 : tunables   54   27    0 : slabdata      0      0      0
...省略

カーネル内部で使用頻度の高いバッファヘッド、i-node、ディレクトリエントリなどのオブジェクトはそれぞれに slab キャッシュを持っています。キャッシュ名、現在アクティブなオブジェクトの数、利用可能なオブジェクトの総数、各オブジェクトのサイズ (バイト単位)、アクティブなオブジェクトを有するページ数、アロケートされたページ総数、slab あたりのページ数などを確認できます。出力の 2 行目(# name ではじまる行)には各値のタイトルが表示されます。

/proc/stat

カーネルやシステムの統計情報を出力します。標準的な出力例を以下に示します。

# cat /proc/stat
cpu  106309 31413 63008 18676423 77726 2340 1855
cpu0 106309 31413 63008 18676423 77726 2340 1855
intr 191225951 189619590 15750 0 0 0 0 0 0 1 0 0 1305742 15373 0 269492 3 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 44221773
btime 1092115366
processes 15202
procs_running 1
procs_blocked 0
preempt 21535348

アーキテクチャにより表示内容は異なります。1 行目(cpu の行)は CPU 全体についてユーザーモード、低い優先度 (nice) でのユーザーモード、システムモード、アイドル状態でそれぞれシステムが消費した時間を jiffies (1/100 秒) を単位として計測した値です。アイドル状態の値は仮装ファイル uptime の 2 番目の値を 100 倍したものになります。2行目から cpu0 のように CPU ごとの値が表示されます。以降では、intr (システム起動時からの割り込み総数:IRQ 番号ごと)、ctxt の行(コンテクストスイッチの総数)、btime の行(システム起動からの総時間:秒単位)、processes の行(システム起動からの総フォーク数)などが表示されます。

/proc/sys/

/proc/sys ディレクトリ以下には、abi(パーソナリティタイプ)、debug、dev(特定のデバイス)、fs(ファイルシステム)、kernel(カーネル)、net(ネットワーク)、proc、vm(仮想メモリ領域)といったサブディレクトリが存在します。/proc/sys 以下に存在する仮想ファイルの多くは、カーネルのリコンパイルやシステムの再起動をすることなく運用中であってもダイナミックにパラメータの値を変更することが可能です。 以降では、このディレクトリに存在する代表的な仮想ファイルを解説します。

/proc/sys/dev

このディレクトリには特定のデバイスに関する情報があります。環境によって cdrom、rtc、scsi、parport、raid などといったサブディレクトリが存在し、それぞれの情報を確認することができます。以下の例は、マウント中の CDROM ドライブに関する情報です。

# cat /proc/sys/dev/cdrom/info
CD-ROM information, Id: cdrom.c 3.20 2003/12/17

drive name:             hdc
drive speed:            32
drive # of slots:       1
Can close tray:         1
Can open tray:          1
Can lock tray:          1
Can change speed:       1
Can select disk:        0
Can read multisession:  1
Can read MCN:           1
Reports media changed:  1
Can play audio:         1
Can write CD-R:         1
Can write CD-RW:        1
Can read DVD:           0
Can write DVD-R:        0
Can write DVD-RAM:      0
Can read MRW:           1
Can write MRW:          1
Can write RAM:          1

Can ではじまる各値が、1 のものは有効、0 のものは無効です。例えば、Can close tray: や Can open tray: の値は、/proc/sys/dev/cdrom/ 下の autoclos や autoeject の値を使用して変更することができます。

/proc/sys/fs/

このディレクトリには、ファイルシステムに関連する様々な情報があります。以下の例は、システム全体で一度にオープンできるファイル数です。1 つのプロセスで多くのファイルをオープンするシステムの場合など、この値がパフォーマンスに影響します。

# cat /proc/sys/fs/file-max
25280

他にも以下のように様々な情報を確認することができます。

表 30-1. /proc/sys/fs/ の主な仮想ファイル

/proc/sys/fs/binfmt_miscバイナリフォーマットサポートのための仮想ファイル用のディレクトリです。
/proc/sys/fs/inode-maxメモリ内の inode 数の上限です。file-max の値の 3 から 4 倍にすべきです。
/proc/sys/fs/inode-nrnr_inodes(システムの確保している inode 数)、nr_free_inodes(あいている inode 数)です。inode-state のはじめの 2 つの数字です。
/proc/sys/fs/inode-statenr_inodes(システムの確保している inode 数)、nr_free_inodes(あいている inode 数)、preshrink と 4 つのダミーの値を持ちます。
/proc/sys/fs/lease-break-timeファイルを保持しているプロセスに対してカーネルがシグナルを送り、他のプロセスがそのファイルをオープンするのを待っていることを通知以降のリースを許す猶予期間です。
/proc/sys/fs/leases-enableシステムのファイルリースの有効(1)/ 無効(0)を切り替えます。
/proc/sys/fs/overflowgid固定 GID の書き換え可否の指定です。
/proc/sys/fs/overflowuid固定 UID の書き換え可否の指定です。
/proc/sys/fs/super-maxスーパーブロックの最大値(カーネルがマウントできる最大数)です。
/proc/sys/fs/super-nr現在マウントされているファイルシステム数です。
/proc/sys/fs/dentry-stateキャッシュされているディレクトリエントリです。
/proc/sys/fs/dir-notify-enablednotify インターフェースをシステム全体で無効/有効に切り替えます。
/proc/sys/fs/dquot-maxディスククォータエントリの最大数です。
/proc/sys/fs/dquot-nrディスククォータのエントリ数と、空いているディスククォータのエントリ数です。
/proc/sys/fs/file-maxシステム全体でプロセスがオープンできるファイル数の上限です。
/proc/sys/fs/file-nrプロセスがオープンしているファイル数です。

/proc/sys/kernel/

このディレクトリ以下にはカーネルの動作に関連する様々な情報があります。以下の例は、キーボードの[Ctrl]+[Alt]+[Del]が押されたときの処理に関する情報です。

# cat /proc/sys/kernel/ctrl-alt-del
0

値が 0 の時、init プロセスに処理が渡り正しく再起動を行います。0 より大きいとき、すぐにリブートの処理を行い、処理されていないバッファの sync を行いません。

以下の例は、OS タイプとそのリリース番号です。

# cat  /proc/sys/kernel/ostype
Linux
# cat  /proc/sys/kernel/osrelease
2.6.7-0.30

他にも以下のように様々な情報を確認することができます。

表 30-2. /proc/sys/kernel/ の主な仮想ファイル

/proc/sys/kernel/カーネルに関する情報の仮想ファイル用ディレクトリです。
/proc/sys/kernel/cap-bound capability bounding set(符号付き 10 進数表現)の値です。
/proc/sys/kernel/core_uses_pidcoredump のファイル名に PID を使用する(1)/ 使用しない(0)を切り替えます。
/proc/sys/kernel/ctrl-alt-delキーボードの[Ctrl]+[Alt]+[Del]の扱い(0 のとき init プロセスにわたり正しく再起動する)です。
/proc/sys/kernel/domainnameドメイン名です。domainname コマンドにより得られる値です。
/proc/sys/kernel/hostnameホスト名です。hostname コマンドにより得られる値です。
/proc/sys/kernel/modprobemodprobe のパスです。
/proc/sys/kernel/msgmaxSystem V メッセージキューに書き込まれるメッセージの最大値(バイト)です。
/proc/sys/kernel/msgmniメッセージキュー識別子の最大数です。
/proc/sys/kernel/msgmnbmsg_qbytes の設定(メッセージキューに書き込まれる最大バイト数)を初期化するパラメータです。
/proc/sys/kernel/ostypeOS のタイプに関する情報です。
/proc/sys/kernel/osreleaseOS のバージョンに関する情報です。
/proc/sys/kernel/overflowgid/proc/sys/fs/overflowgid のコピーです。
/proc/sys/kernel/overflowuid/proc/sys/fs/overflowuid のコピーです。
/proc/sys/kernel/panicカーネル変数 panic_timeout への書き込みと読み出しアクセス秒数です。0 のとき無限ループします。0 秒以外の時、その秒数後に自動的に再起動されます。
/proc/sys/kernel/printkエラーメッセージの表示と記録に関する情報です。
/proc/sys/kernel/random//dev/randam の操作を制御する値の書かれた仮想ファイル用のディレクトリです。
/proc/sys/kernel/real-root-devroot ファイルシステムのデバイス番号です。
/proc/sys/kernel/rtsig-maxPOSIX realtime(queued)signal の最大数です。
/proc/sys/kernel/rtsig-nr現在キューに入っている POSIX realtime(queued)signal の数です。
/proc/sys/kernel/semSyste V IPC セマフォを制限する値です。
/proc/sys/kernel/sg-big-buff汎用 SCSI デバイス(sg)のバッファサイズの最大値です。
/proc/sys/kernel/shmallSystem V 共有メモリの総ページ数のシステム内最大値です。
/proc/sys/kernel/shmmaxSystem V 共有メモリ作成時の最大値です。
/proc/sys/kernel/shmmniSystem V 共有メモリのシステム内の最大セグメント数です。
/proc/sys/kernel/versionカーネル構築バージョン(このシステムで何番目に構築されたか)、日付、時刻です。

/proc/sys/vm

このディレクトリ以下に仮想メモリサブシステムに関する処理とダーティデータのディスクへの書き出しに関する様々な情報があります。以下の例は、メモリオーバーコミットに関する値です。

# cat /proc/sys/vm/overcommit_memory
0

ユーザー空間からの要求に対し、0 の場合はメモリの空き領域の容量を評価します。1 の場合は、メモリを使い切るまでは空き領域があるように振る舞い、2 の場合にはどのようなメモリオーバーコミットも許可しなくなります。

以下の例は、1 つのプロセスが保持できるメモリマップ領域の最大数です。

# cat /proc/sys/vm/max_map_count
65536

デフォルトの 65536 に設定されています。他にも overcommit_ratio(overcommit_memory が 2 のとき、スワップおよび物理メモリにこのパーセンテージを掛けたものをそれぞれ足した値をコミットされるアドレス空間が越えて利用できない)、page-cluster(カーネルが一度に読み込むページ数)、min_free_kbytes(強制的にフリーにする最小メモリ容量)、block_dump(読み書きのすべての操作、ダーティな書き込みなどに関する dump の有効/無効)などの情報を確認することができます。

/proc/sysvipc/

System V プロセス間通信オブジェクトに関する情報を出力します。以下の例は、System V プロセス間通信オブジェクトのメッセージキューのリストです。

# cat /proc/sysvipc/msg
       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime

他にも、sem(セマフォノリスト)、shm(共有メモリのリスト)などの情報を確認できます。

/proc/tty/

tty デバイスに関する情報を出力します。以下の例は、現在利用されている tty に関する情報です。

# cat /proc/tty/drivers
/dev/tty             /dev/tty        5       0 system:/dev/tty
/dev/console         /dev/console    5       1 system:console
/dev/ptmx            /dev/ptmx       5       2 system
/dev/vc/0            /dev/vc/0       4       0 system:vtmaster
serial               /dev/ttyS       4  64-111 serial
pty_slave            /dev/pts      136 0-1048575 pty:slave
pty_master           /dev/ptm      128 0-1048575 pty:master
pty_slave            /dev/ttyp       3   0-255 pty:slave
pty_master           /dev/pty        2   0-255 pty:master
unknown              /dev/tty        4    1-63 console

他にも、driver/serial(回線規約:line descipline)、ldiscs(使用状況統計、各 tty 回線の状況)を確認できます。

/proc/uptime

システム起動後に経過した時間を出力します。標準的な出力例を以下に示します。

67832.53 67683.94

1 列目の値はシステム起動後に経過した時間(秒)、2 列目はアイドル時間(秒)です。

/proc/version

カーネルのバージョン情報を出力します。標準的な出力例を以下に示します。

# cat /proc/version
Linux version 2.6.7-0.30 (go@kernel.turbolinux.co.jp) (gcc version 3.3.3 (Turbolinux 3.3.3-2)) #1 Sun Aug 8 17:02:30 JST 2004

カーネルのバージョン情報には、/proc/sys/kernel/ostype、/proc/sys/kernel/osrelease、/proc/sys/kernel/version の内容が含まれます。