カーネルに関するよく使用される情報のグループは/proc内のディレクトリとサブディレクトリにグループ分けされます。
各/procディレクトリには番号の付いた多くのディレクトリがあります。この一覧の開始は次のようになります。
[root@bleach /]# ls -l /proc total 0 dr-xr-xr-x 3 root root 0 May 8 10:56 1 dr-xr-xr-x 3 truk truk 0 May 8 10:56 1038 dr-xr-xr-x 3 root root 0 May 8 10:56 518 dr-xr-xr-x 3 rpc rpc 0 May 8 10:56 532 dr-xr-xr-x 3 rpcuser rpcuser 0 May 8 10:56 547 dr-xr-xr-x 3 root root 0 May 8 10:56 7 dr-xr-xr-x 3 daemon daemon 0 May 8 10:56 708 dr-xr-xr-x 3 root root 0 May 8 10:56 8 dr-xr-xr-x 3 xfs xfs 0 May 8 10:56 880 [root@bleach /]# |
これらのディレクトリは、プロセスのIDを示し、そのプロセス固有の情報を保存しているので、プロセスディレクトリと呼ばれます。各プロセスディレクトリの所有者とグループはプロセスを実行しているユーザーに設定されます。プロセスが終了すると、その/procプロセスディレクトリは消えます。しかし、プロセス実行中は、プロセスディレクトリのさまざまなファイルにプロセス固有の多くの情報が保存されます。
各プロセスディレクトリには次のファイルがあります。
cmdline プロセスを開始するコマンド行引数が保存されています。sshdプロセスのcmdlineファイルの出力は次のとおりです。
/usr/sbin/sshd |
cpu システムの各CPUの使用率についての固有情報を提供します。 デュアルCPUシステム上で実行されているプロセスの出力は次のようになります。
cpu 11 3 cpu0 0 0 cpu1 11 3 |
cwd そのプロセスで現在動作しているディレクトリへのリンク。
environ プロセスの環境変数の一覧を提供します。環境変数はすべて大文字で値は小文字です。
exe このプロセスの実行可能ファイルへのリンク。
fd 特定プロセスのファイル記述子すべてが保存されているディレクトリ。これらは番号の付けられたリンクで提供されます。
[root@bleach /]# ls -l /proc/14466/fd total 0 lrwx------ 1 root root 64 May 8 11:31 0 -> /dev/null lrwx------ 1 root root 64 May 8 11:31 1 -> /dev/null lrwx------ 1 root root 64 May 8 11:31 2 -> /dev/null lrwx------ 1 root root 64 May 8 11:31 3 -> /dev/ptmx lrwx------ 1 root root 64 May 8 11:31 4 -> socket:[7774817] lrwx------ 1 root root 64 May 8 11:31 5 -> /dev/ptmx lrwx------ 1 root root 64 May 8 11:31 6 -> socket:[7774829] lrwx------ 1 root root 64 May 8 11:31 7 -> /dev/ptmx [root@bleach /]# |
maps このプロセスに関連するさまざまな実行可能ファイルとライブラリファイルへのメモリマップが保存されています。このファイルはプロセスの複雑性によってかなり長くなる場合があります。sshdプロセスのサンプル出力は次のように開始されます。
08048000-08080000 r-xp 00000000 03:05 226209 /usr/sbin/sshd 08080000-08082000 rw-p 00037000 03:05 226209 /usr/sbin/sshd 08082000-080c3000 rwxp 00000000 00:00 0 40000000-40016000 r-xp 00000000 03:05 304721 /lib/ld-2.2.2.so 40016000-40017000 rw-p 00015000 03:05 304721 /lib/ld-2.2.2.so 40017000-40018000 rw-p 00000000 00:00 0 40019000-4001b000 r-xp 00000000 03:05 144433 /lib/security/pam_stack.so 4001b000-4001c000 rw-p 00001000 03:05 144433 /lib/security/pam_stack.so |
mem プロセスが保持しているメモリ。
root プロセスのルートディレクトリへのリンク。
stat プロセスのステータス。
statm プロセスが使用しているメモリのステータス。statmファイルの例は次のとおりです。
140 72 63 22 0 50 22 |
7つのカラムはプロセスの異なるメモリ統計情報に関連しています。表示されている順に、右から左に使用メモリの異なる側面をレポートしています。
プログラム合計サイズ。Kバイト単位。
メモリ部分のサイズ。Kバイト単位。
共有ページ数。
コードのページ数。
データ/スタックのページ数。
ライブラリのページ数。
ダーティなページ数。
status statやstatmよりはるかに読みやすい形式でプロセスのステータスを提供します。sshdの出力例は次のとおりです。
Name: sshd State: S (sleeping) Pid: 14466 PPid: 723 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmSize: 3596 kB VmLck: 0 kB VmRSS: 288 kB VmData: 552 kB VmStk: 28 kB VmExe: 224 kB VmLib: 2596 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 8000000000001000 SigCgt: 0000000000012000 CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff |
プロセスの名前とIDのほか、ステータス(S (sleeping)、R(running)、プロセスなどを実行しているユーザー/グループID、メモリ使用率に関する詳細情報が得られます。
/proc/selfディレクトリは現在実行中のプロセスへのリンクです。これにより、プロセスは、プロセスIDを知らなくても状況を把握できます。
シェル環境では、/proc/selfディレクトリの一覧は、そのプロセスのプロセスディレクトリの一覧と同じ内容です。
このディレクトリには、システムで利用できるさまざまなバス固有情報が保存されています。したがって、たとえばISA、PCI、USBバスを搭載した標準的なシステムでは、各バスについての現在のデータを/proc/busのディレクトリで入手できます。
利用できるサブディレクトリとファイルの内容は、システムの設定によって大幅に異なります。ただし、各バスタイプの各ディレクトリには、そのタイプの各バスにつき少なくとも1つのディレクトリがあります。これらの個々のバスディレクトリは通常、00などの数字で表し、そこにはそのバスで使用できるさまざまなデバイスに関するバイナリファイルがあります。
したがって、たとえば、USBバスを搭載しているが、USBデバイスは接続していないシステムには、いくつかのファイルの入った/proc/bus/usbディレクトリがあります。
[root@bleach /]# ls -l /proc/bus/usb total 0 dr-xr-xr-x 1 root root 0 May 3 16:25 001 -r--r--r-- 1 root root 0 May 3 16:25 devices -r--r--r-- 1 root root 0 May 3 16:25 drivers [root@thoth /]# ls -l /proc/bus/usb/001 total 1 -rw-r--r-- 1 root root 18 May 3 16:25 001 [root@bleach /]# |
/proc/bus/usbディレクトリには、USBバス上のさまざまなデバイスを追跡するファイルとそれを使用する必要のあるでデバイスがあります。001ディレクトリには、最初の(そして唯一の)USBバス上のすべてのデバイスがあります。devicesファイルの内容を見ると、これはマザーボードのUSBルートハブであることがわかります。
[root@bleach /]# 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.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=d400 C:* #Ifs= 1 Cfg#= 1 Atr=40 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= 8 Ivl=255ms [root@bleach /]# |
このディレクトリにはカーネルが使用する特定のドライバについての情報があります。
一般的にここにあるファイルは、rtcで、システムのリアルタイムクロック(RTC)用のドライバからの出力を提供します。このRTCというデバイスは、システムがオフになっている間、時計を動かしておきます。/proc/driver/rtcの出力例は次のとおりです。
rtc_time : 18:06:33 rtc_date : 2001-05-08 rtc_epoch : 1900 alarm : 02:01:19 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 |
RTCについての詳細情報は、/usr/src/linux-2.4/Documentation/rtc.txtを参照してください。
このディレクトリには特別なファイルシステム、ファイルハンドル、inode、dentry、クウォータ情報などがあります。この情報は実際は/proc/sys/fsにあります。
このディレクトリにはシステム上のIDEデバイスについてのさまざまな情報があります。各IDEチャンネルは、/proc/ide/ide0や/proc/ide/ide1などの個別ディレクトリとして表されます。さらに、driversファイルも利用できます。このファイルは、IDEチャンネル上で使用するさまざまなドライバのバージョン番号を提供します。
ide-cdrom version 4.59 ide-floppy version 0.97 ide-disk version 1.10 |
多くのチップセットはまた、さなざまなチャンネルを介して接続されているドライブに関する追加情報をこのディレクトリ内に提供します。たとえば、汎用のIntel PIIX4 Ultra 33チップセットは、/proc/ide/piixファイルを生成しますが、これにより、IDEチャンネル上のデバイス用にDMAかUDMAが有効かどうかわかります。
Intel PIIX4 Ultra 33 Chipset.
--------------- Primary Channel ---------------- Secondary Channel -------------
enabled enabled
--------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------
DMA enabled: yes no yes no
UDMA enabled: yes no no no
UDMA enabled: 2 X X X
UDMA
DMA
PIO |
最初のチャンネルのide0など、IDEチャンネルのディレクトリをナビゲーションするとさらに情報が得られます。channelファイルでチャンネル番号が、modelファイルでチャンネルのバスタイプ(pciなど)がわかります。
チャンネルディレクトリ内のデバイスディレクトリには非常に役に立つデータが入っています。そのチャンネル上のハードディスクドライブやCD-ROMなどの各デバイスには、そのデバイスについての情報と統計が入っている独自のディレクトリがあります。これらのディレクトリの内容は接続されているデバイスタイプによって異なります。各デバイスに共通した便利なファイルは次のとおりです。
cache デバイスのキャッシュ。
capacity デバイスの容量。512バイトブロック単位。
driver デバイスを制御するために使用するドライバとバージョン。
geometry デバイスの物理的、かつ論理的ジオメトリ。
media diskなどのデバイスタイプ。
model モデル名かデバイス番号。
settings デバイスの現在のパラメータの集合。このファイルには通常、非常に多くの役に立つ技術情報が保存されています。標準的なIDEハードディスクのsettingsファイル例は次のとおりです。
name value min max mode ---- ----- --- --- ---- bios_cyl 784 0 65535 rw bios_head 255 0 255 rw bios_sect 63 0 63 rw breada_readahead 4 0 127 rw bswap 0 0 1 r current_speed 66 0 69 rw file_readahead 0 0 2097151 rw ide_scsi 0 0 1 rw init_speed 66 0 69 rw io_32bit 0 0 3 rw keepsettings 0 0 1 rw lun 0 0 7 rw max_kb_per_request 64 1 127 rw multcount 8 0 8 rw nice1 1 0 1 rw nowerr 0 0 1 rw number 0 0 3 rw pio_mode write-only 0 255 w slow 0 0 1 rw unmaskirq 0 0 1 rw using_dma 1 0 1 rw |
このディレクトリを使用してIRQをCPUアフィニティに設定すると、特定のIRQを1つのCPUにのみ接続できます。また、CPUがどのIRQも処理しないように設定することもできます。
各IRQには独自のディレクトリがあり、各IRQを異なる設定にできます。/proc/irq/prof_cpu_maskファイルはIRQディレクトリのsmp_affinityファイルのデフォルト値を保存したビットマスクです。smp_affinityの値で、特定のIRQを処理するCPUを指定します。
詳細情報は、/usr/src/linux-2.4/Documentation/filesystems/proc.txt ファイルを参照してください。
このディレクトリでは、さまざまなネットワークのパラメータと統計情報を包括的に表示します。各ファイルには、システムのネットワーキングに関連する情報の特定範囲が保存されています。
arp カーネルのARPテーブルが保存されています。このファイルはハードウェアアドレスをシステム上のIPアドレスに接続する際、特に便利です。
atm さまざまな非同期転送モード(ATM)の設定と統計情報の入ったファイルのあるディレクトリ。このディレクトリはATMネットワーキングとADSLカードでおもに使用します。
dev システム上に設定されているさまざまなネットワークデバイスと送受信の統計情報の一覧を表示します。このファイルで、各インターフェイスが送受信したバイト数、入出力パケット数、表示エラー数、損失パケット数などがわかります。
dev_mcast 各デバイスがリスニングしている多くのレイヤ2マルチキャストグループを表示します。
igmp このシステムが参加しているIPマルチキャストアドレスの一覧を表示します。
ip_fwchains 現在のファイアウォールチェーンを表示します。
ip_fwnames すべてのファイアウォールチェーン名の一覧を表示します。デフォルトでは、ファイアウォールチェーンは設定されておらず、次の3つのオリジナルのチェーンが設定されています。
input ACCEPT 1 0 93537 0 12626171 forward ACCEPT 1 0 0 0 0 output ACCEPT 1 0 14270 0 3796697 |
ip_masquerade 隠蔽情報のテーブルを提供します。
ip_mr_cache マルチキャストルーティングキャッシュの一覧。
ip_mr_vif マルチキャスト仮想インターフェイスの一覧。
netstat TCPタイムアウト、送受信済みSYNクッキーなどの広範で詳細なネットワーキング統計情報が保存されています。
psched グローバルパケットスケジューラパラメータの一覧。
raw 生のデバイス統計情報の一覧。
route カーネルのルーティングテーブルを表示します。
rt_cache 現在のルーティングキャッシュが保存されています。
snmp 使用ネットワーキングプロトコルのSimple Network Management Protocol(SNMP)データの一覧。
sockstat ソケット統計情報を提供します。たとえば、次のとおりです。
sockets: used 105 TCP: inuse 7 orphan 0 tw 0 alloc 7 mem 1 UDP: inuse 3 RAW: inuse 0 FRAG: inuse 0 memory 0 |
tcp 詳細なTCPソケット情報が保存されています。
tr_rif トークンリングRIFルーティングテーブル。
udp 詳細なUDPソケット情報が保存されています。
unix 現在使用されているUNIXドメインソケットの一覧を表示します。
wireless ワイヤレスインターフェイスデータの一覧を表示します。
IDEコントローラがシステムに接続されいている場合、ディレクトリは/proc/ideのみであるのと同様、SCSIホストアダプタがある場合、使用できるディレクトリは/proc/scsiのみです。
ここでプライマリファイルは、/proc/scsi/scsiです。ここには、認識されたSCSIデバイスすべての一覧が保存されます。たとえば、システムにSCSI CD-ROM、テープドライブ、ハードディスクドライブ、RAIDコントローラがある場合、このファイルは次のようになります。
Attached devices: Host: scsi1 Channel: 00 Id: 05 Lun: 00 Vendor: NEC Model: CD-ROM DRIVE:466 Rev: 1.06 Type: CD-ROM ANSI SCSI revision: 02 Host: scsi1 Channel: 00 Id: 06 Lun: 00 Vendor: ARCHIVE Model: Python 04106-XXX Rev: 7350 Type: Sequential-Access ANSI SCSI revision: 02 Host: scsi2 Channel: 00 Id: 06 Lun: 00 Vendor: DELL Model: 1x6 U2W SCSI BP Rev: 5.35 Type: Processor ANSI SCSI revision: 02 Host: scsi2 Channel: 02 Id: 00 Lun: 00 Vendor: MegaRAID Model: LD0 RAID5 34556R Rev: 1.01 Type: Direct-Access ANSI SCSI revision: 02 |
この一覧で、デバイスタイプ、モデル名、ベンダー、SCSIチャンネルIDデータがわかります。
さらに、システムが使用する各SCSIドライバには、/proc/scsiに独自のディレクトリがあります。ここには、そのドライバを使用する各SCSIコントローラ固有のファイルがあります。したがって、たとえば上記のシステムでは、aic7xxxとmegaraidの2つのドライバが使用されているので、これらのディレクトリがあります。各ディレクトリ内のファイルには通常IOアドレス範囲、IRQ、そのドライバを使用する特定のSCSIコントローラの統計情報が保存されています。各コントローラがレポートする情報のタイプと量は異なりますが、大部分のファイルの出力はいずれも非常に役に立ち簡単に読めます。この例示システムで使用しているAdaptec AIC-7880 Ultra SCSIホストアダプタのファイルは、次のような出力を生成します。
Adaptec AIC7xxx driver version: 5.1.20/3.2.4
Compile Options:
TCQ Enabled By Default : Disabled
AIC7XXX_PROC_STATS : Enabled
AIC7XXX_RESET_DELAY : 5
Adapter Configuration:
SCSI Adapter: Adaptec AIC-7880 Ultra SCSI host adapter
Ultra Narrow Controller
PCI MMAPed I/O Base: 0xfcffe000
Adapter SEEPROM Config: SEEPROM found and used.
Adaptec SCSI BIOS: Enabled
IRQ: 30
SCBs: Active 0, Max Active 1,
Allocated 15, HW 16, Page 255
Interrupts: 33726
BIOS Control Word: 0x18a6
Adapter Control Word: 0x1c5f
Extended Translation: Enabled
Disconnect Enable Flags: 0x00ff
Ultra Enable Flags: 0x0020
Tag Queue Enable Flags: 0x0000
Ordered Queue Tag Flags: 0x0000
Default Tag Queue Depth: 8
Tagged Queue By Device array for aic7xxx host instance 1:
{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}
Actual queue depth per device for aic7xxx host instance 1:
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
Statistics:
(scsi1:0:5:0)
Device using Narrow/Sync transfers at 20.0 MByte/sec, offset 15
Transinfo settings: current(12/15/0/0), goal(12/15/0/0), user(12/15/0/0)
Total transfers 0 (0 reads and 0 writes)
< 2K 2K+ 4K+ 8K+ 16K+ 32K+ 64K+ 128K+
Reads: 0 0 0 0 0 0 0 0
Writes: 0 0 0 0 0 0 0 0
(scsi1:0:6:0)
Device using Narrow/Sync transfers at 10.0 MByte/sec, offset 15
Transinfo settings: current(25/15/0/0), goal(12/15/0/0), user(12/15/0/0)
Total transfers 132 (0 reads and 132 writes)
< 2K 2K+ 4K+ 8K+ 16K+ 32K+ 64K+ 128K+
Reads: 0 0 0 0 0 0 0 0
Writes: 0 0 0 1 131 0 0 0 |
この画面で、チャンネルIDに基づいてコントローラに接続されているさまざまなSCSIデバイスへの転送速度、デバイスが読み取り/書き込みするファイルの量とサイズについての詳細な統計情報がわかります。/proc/scsi/scsiファイルについて言えば、このコントローラは20Mビット/秒でCD-ROMと通信しており、テープドライブは10Mビット/秒で接続されていることがわかります。
このディレクトリは特別で、/proc内の他のディレクトリとは違っています。システムに関する情報を提供するだけでなく、実行中のカーネルに設定変更を加えることもできます。
![]() | 警告 |
|---|---|
/proc/sysディレクトリ内のさまざまなファイルを使用している実動システム上のカーネルの設定を変更してはいけません。設定変更によりカーネルが不安定になり、システムを再起動しなければならなくなる可能性があります。現在システムを使用しているユーザーを混乱させることになりかねないので、実動マシン上で設定変更する場合は事前に類似の開発システムを使用してチェックしてください。 /proc/sys内の値を変更する場合は、そのファイルの有効なオプションと予想される結果について必ず確認してください。 |
特定のファイルが設定可能なのか単に情報提供するだけなのかを判断するには一覧を表示させます。ファイルが書き込み可能であれば、それを使用して一定の方法でカーネルを設定することができます。 たとえば、/proc/sys/fsの一覧(一部)は以下のようになっているとします。
[root@bleach /]# ls -l /proc/sys/fs <snip> -r--r--r-- 1 root root 0 May 10 16:14 dentry-state -rw-r--r-- 1 root root 0 May 10 16:14 dir-notify-enable -r--r--r-- 1 root root 0 May 10 16:14 dquot-nr -rw-r--r-- 1 root root 0 May 10 16:14 file-max -r--r--r-- 1 root root 0 May 10 16:14 file-nr <snip> [root@bleach /]# |
この一覧を見ると、dir-notify-enableファイルとfile-maxファイルは書き込み可能なので、カーネル設定に使用することができます。他のファイルはカーネルの現在の設定に関する情報を提供するだけです。
/proc/sysファイル内の値を変更するには、新しい値をファイルにエコーします。たとえば、実行中のカーネル上のシステム要求キーを使用可能にするには、以下のコマンドを入力します。
[root@bleach /]# echo "1" > /proc/sys/kernel/sysrq |
これでsysrqファイルの値は 0から 1に変更されます。デフォルトではRed Hat Linuxカーネルのシステム要求キーは使用可能です。ただし、値0は、/etc/sysctl.confの設定を/procディレクトリを経由してカーネルに渡すため、ブート時にsysctlを呼び出すrc.sysinitによって/proc/sys/kernel/sysrqに渡されます。この場合、システム要求キー機能がオフになるので、参加していないコンソールでセキュリティに関する問題が生じる可能性があります。ただし、rootユーザーは必要に応じて常に実行中のカーネル上でこの機能をオンにすることができます。
システム要求キーの目的は、単純なキーコンビネーションを使用し、すぐにシャットダウンする、システムを再起動する、マウントした全ファイルシステムを同期化する、重要な情報を自分のコンソールにダンプするなど、多くの重要なアクティビティをすぐに実行するようカーネルに指示できるようにすることです。この機能は、開発カーネルの使用中やシステムがフリーズした場合に重宝します。システム要求キーの詳細については、 /usr/src/linux-2.4/Documentation/sysrq.txtを参照してください。
/proc/sys設定ファイルには複数の値が含まれていることがあります。その場合、ファイルに新しい値を正確に送るために、下記の例のように、echoコマンドと共に渡す値の間にスペースを1個挿入します。
[root@bleach /]# echo "4 2 45" > /proc/sys/kernel/acct |
![]() | 注意 |
|---|---|
/proc/sysファイルに値をechoさせて行った設定変更は、システムの再起動時に失われます。設定変更をシステムのブート時にも有効にするには、sysctlの使用項を参照してください。 |
/proc/sysディレクトリには、実行カーネルの異なる側面を制御するそれぞれ異なったディレクトリが含まれています。
このディレクトリはシステム上の特定のデバイス用パラメータを提供します。ほとんどのシステムには少なくとも2つのディレクトリ cdromとraidがありますが、カスタマイズされたカーネルはそれ以外に複数のデバイスドライバ間で1個のパラレルポートを共有できるようにするparportなどのディレクトリを持つことができます。
cdromディレクトリにはinfoと呼ばれるファイルがあります。多くの重要なCD-ROMパラメータを明示します。
CD-ROM information, Id: cdrom.c 3.12 2000/10/18 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: 0 Can write CD-RW: 0 Can read DVD: 0 Can write DVD-R: 0 Can write DVD-RAM: 0 |
このファイルを一瞥すると少なくともカーネルに対する未知のCD-ROMのクオリティを知ることができます。システム上で複数のCD-ROMが利用できる場合、各デバイスにはそれぞれ情報カラムが与えられます。
autocloseやcheckmediaなど、/proc/sys/dev/cdrom内のさまざまなファイルは、システムのCD-ROMを制御するために使用できます。それぞれのファイルに1をechoすると機能がオンになり、0をechoするとオフになります。
RAIDサポートをカーネルにコンパイルした場合、/proc/sys/dev/raidディレクトリは少なくとも2つのファイルspeed_limit_minとspeed_limit_maxと共に利用できるようになります。こうした設定は、ディスクの同期化など特に入出力の激しいタスクでRAIDデバイスが使用される場合の速度の調節に活用できます。
このディレクトリには、quota、file handle、inode、dentry情報を含むファイルシステムに関するさまざまな側面について多くのオプションと情報が格納されています。
binfmt_miscディレクトリは、さまざまなバイナリフォーマットにカーネルサポートを提供するために使用されます。
/proc/sys/fs内の重要なファイルには、以下のようなものがあります。
dentry-state ディレクトリキャッシュのステータスを提供します。このファイルは以下のようになっています。
57411 52939 45 0 0 0 |
1番目の数はディレクトリキャッシュエントリの総数を示し、2番目の数は未使用エントリ数を示します。3番目の数はディレクトリの開放から再要求できるまでの秒数を示しています。4番目の数は現在システムが要求しているページ数です。最後の2つの数は未使用で、現在0のみを表示します。
dquot-nr キャッシュされたディスククオータエントリの最大数を示します。
file-max カーネルが割り当てるファイルハンドルの最大数を変更することができます。このファイルの値を大きくすると、利用可能なファイルハンドルの不足によるエラーを解消することができます。
file-nr 割り当てられたファイルハンドル数、使用されたファイルハンドル数、ファイルハンドルの最大数を、この順序で表示します。
overflowgidとoverflowuid 16ビットグループIDとユーザーIDをサポートするだけのファイルシステムと共に使用するため、それぞれ固定グループIDとユーザーIDを定義します。
super-max 利用可能なスーパーブロックの最大数を制御します。
super-nr 使用中のスーパーブロックの現在数を表示します。
このディレクトリにはカーネルの動作に直接影響するさまざまな異なる設定ファイルが格納されています。最も重要なファイルには以下のようなものがあります。
acct ログがあるファイルシステム上で利用可能な空き領域の割合に基づき、プロセスアカウンティングの停止を制御します。デフォルトでは、ファイルは以下のようになっています。
4 2 30 |
一番目の値はロギングのリジュームに必要な空き領域の割合を決定し、2番目の値はロギングがサスペンドした場合の空き領域のしきい値の割合を設定します。3番目の値はファイルシステムがロギングをサスペンドするかリジュームするかを確認するためにカーネルがポーリングする間隔を秒単位で設定します。
cap-bound ケーパビリティバウンディング設定を制御します。システム上の任意のプロセスが実行可能なケーパビリティの一覧を提供します。ここに表示されないケーパビリティについては、どのような特権が与えられていても、そのプロセスを実行することはできません。ブートプロセス時に少なくとも一定のポイント以上の事項が生じないようにすることでシステムの安全をさらに確保します。
ここで可能なさまざまな値については、本書で取り上げる範囲を越えています。詳細についてはカーネルに関するドキュメンテーションを参照してください。
ctrl-alt-del initを使用しCtrl-Alt-Deleteキーでコンピュータを再起動する(値0)か、ダーティバッファを同期化せず直ちに強制的に再起動するか(値1)を制御します。
domainname domain.comなどシステムのドメイン名を設定することができます。
hostname host.domain.comなどシステムのホスト名を設定することができます。
hotplug システムが設定変更を検出した場合に使用するユーティリティを設定します。これは主としてUSBとカードバスPCIで使用されます。/sbin/hotplugのデフォルト値は、この役割を果たすために新しいプログラムをテストする場合をのぞいて変更してはいけません。
modprobe 必要に応じてカーネルモジュールをロードするために使用されるプログラムのロケーションを設定します。/sbin/modprobeのデフォルト値では、カーネルスレッドがkmodをコールすると実際にモジュールをロードするためにkmodがコールを行います。
msgmax プロセス間で送信されるメッセージの最大サイズを設定します。デフォルトは8192バイトです。プロセス間のキューメッセージはスワップできないカーネルメモリに格納され、msgmaxが増大するとシステムに対するRAMの要求も増大することになるので、この値を大きくする場合は注意が必要です。
msgmnb 単一メッセージキューの最大バイト数を設定します。デフォルトは16384です。
msgmni メッセージキュー識別子の最大数を設定します。デフォルトは16です。
osrelease Linuxカーネルリリース番号を一覧表示します。このファイルを変更するにはカーネルソースを変更し再コンパイルするしかありません。
ostype オペレーティングシステムの種類を表示します。デフォルトでは、このファイルはLinuxに設定されています。この値を変更するにはカーネルソースを変更し再コンパイルするしかありません。
overflowgidとoverflowuid 16ビットのグループIDとユーザーIDしかサポートしないアーキテクチャ上でシステムコールと共に使用するために、それぞれ固定グループIDとユーザーIDを定義します。
panic カーネルパニックが生じたときカーネルがシステムの再起動を延期する秒数を定義します。デフォルトでは、パニック後に自動再起動しないよう0に設定されています。
printk このファイルは、印刷かロギングエラーメッセージに関するさまざまな設定を制御します。カーネルがレポートするエラーメッセージにはメッセージの重要度を定義するログレベルが含まれています。ログレベル値の意味は以下のようになっています。
0 カーネルエマージェンシー。システムを使用できません。
1 カーネルアラート。 直ちに何らかの対策を講じる必要があります。
2 カーネルの状態が危機にあるとみなされます。
3 一般カーネルエラー条件。
4 一般カーネル警告条件。
5 正常だが重大な状況にあるというカーネル通知
6 カーネル情報メッセージ。
7 カーネルデバッグレベルメッセージ。
printkには4つの値があります。
6 4 1 7 |
これらの値は、それぞれ異なるエラーメッセージ処理方法を定義します。1番目の値はコンソールログレベルと呼ばれ、コンソールにプリントされる優先度が最も低いメッセージを定義します(優先度が低いほどログレベル数が大きいことに注意)。2番目の値は、メッセージに添付される明確なログレベルがないデフォルトのログレベルを設定します。3番目の値はコンソールのログレベルで一番可能性が低いログレベルを設定します。最後の値はコンソールログレベルのデフォルト値を設定します。
rtsig-max システムが1度にキューに入れるPOSIXリアルタイムシグナルの最大数を設定します。デフォルト値は1024です。
rtsig-nr カーネルがキューにしたPOSIXリアルタイムシグナルの現在数です。
sem このファイルはカーネル内のセマフォシグナルを設定します。セマフォは特定プロセスの利用を制御するために使用されるSystem V IPCオブジェクトです。
shmall システム上で1度に使用可能な共有メモリの合計(単位はバイト)を設定します。この値はデフォルトでは2097152に設定されています。
shmmax カーネルが許可する最大共有メモリセグメントのサイズ(単位はバイト)を設定します。この値はデフォルトでは33554432に設定されています。ただし、カーネルはこれ以上の値でもサポートします。
shmmni システム全体の共有メモリセグメントの最大数を設定します。この値はデフォルトでは4096です。
sysrq デフォルトの0以外の値に設定されている場合、システム要求キーをアクティブにします。
threads-max カーネルが使用するスレッドの最大数を設定します。デフォルト値は4095です。
version カーネルが最後にコンパイルされた日付と時間を表示します。#3など、このファイルの最初にあるフィールドはカーネルがソースベースからコンパイルされた回数に関係しています。
randomディレクトリには、カーネルのための乱数生成に関連した多数の値が格納されます。
このディレクトリには、さまざまなプロトコルやエンファシスの中心など、ネットワーキングトピックに関係するさまざまなディレクトリが含まれています。カーネルのコンパイル時の構成により、appletalk、ethernet、 ipv4、ipx、ipv6など、利用可能な異なるディレクトリが作成されます。これらのディレクトリ内で、実行中のシステム上の設定に適するようネットワーキング値を修正することができます。
Linuxでは多種多様なネットワーキングオプションを利用することができますが、それについてすべて説明する紙幅はないので、最も一般的な/proc/sys/netディレクトリについて説明します。
coreディレクトリには、カーネルとネットワーキングレイヤー間の相互作用を制御するさまざまな設定が格納されています。最も重要なファイルは、以下のようになっています。
message_burst 新しい警告メッセージを書き込むために必要な時間(10分の1秒単位)。これはDoS(Denial of Service)攻撃を防止するために使用されます。デフォルトでは50に設定されています。
message_cost 警告メッセージに費用を課すことでDoS攻撃を防止するために使用されます。このファイルの値(デフォルトは5)が大きいほど、警告メッセージは無視されることが多くなります。
これは、攻撃対象のシステムにエラーを発生させ、ログを満杯にしたりエラーロギング処理にシステムの全リソースを必要とさせるような要求をいっせいに流して機能停止させる攻撃を想定したものです。message_burstとmessage_costの設定は、使用するシステムが受入可能なリスクとロギング全体のニーズに基づいて変更できるよう設計されています。
netdev_max_backlog 特定のインターフェイスがカーネル処理速度以上のパケットを受け取った場合、キューに入れることができるパケットの最大数を設定します。このファイルのデフォルト値は300です。
optmem_max ソケットごとに許可された補助バッファの最大サイズを設定します。
rmem_default 受け取りソケットバッファの初期サイズ(単位はバイト)を設定します。
rmem_max 受け取りソケットバッファの最大サイズ(単位はバイト)を設定します。
wmem_default ソケットバッファ送信の初期サイズ(単位はバイト)を設定します。
wmem_max ソケットバッファ送信の最大サイズ(単位はバイト)を設定します。
Linuxは広くIPネットワークと共に使用されているのでipv4の最も重要なファイルを見ると、追加のパワフルなネットワーキング設定がわかります。こうした設定の多くを相互に適切に関連させて使用すると、システムへの攻撃を防止するために非常に役に立ちます。
![]() | 重要 |
|---|---|
これらの設定を変更する場合は、その前に何を実行しようとしているのか、それによって何が生じると予想されるのかを必ず確認してください。また、変更でミスをするとシステムへのリモート接続に影響が生じる可能性があるので、変更はローカルにとどめておいてください。 |
ipv4ディレクトリの最も重要なファイルは、以下のようになっています。
icmp_destunreach_rate、 icmp_echoreply_rate、 icmp_paramprob_rate、 icmp_timeexeed_rate Intelシステム上で条件の異なるホストに対する最大ICMP送信パケットレート(100分の1秒単位)を設定します。0に設定すると遅延がなくなるので、お勧めできません。
icmp_echo_ignore_allと icmp_echo_ignore_broadcasts カーネルがあらゆるホストやブロードキャストアドレスとマルチキャストアドレスから生じるICMP ECHOパケットを無視できるようにします。カーネルは0でパケットに応答し、1で無視します。
ip_default_ttl デフォルトのTTL(Time To Live)を設定します。これはパケットが目的地に到着する前にホップする回数を制限します。この値を大きくするとシステムパフォーマンスが低下する可能性があります。
ip_forward システム上のインターフェイスがパケットを互いに転送することを許可します。デフォルトでは、このファイルは転送しないよう0に設定されていますが、転送を可能にするには値を1に設定します。
ip_local_port_range ローカルポートが必要なときTCPかUDPで使用するポートの範囲を指定します。1番目の数は使用する最小ポートで、2番目の数は最大ポートを指定します。デフォルトの1024〜4999より多いポートを必要とすることが予想されるシステムでは、このファイルで32768〜61000の範囲にします。
tcp_syn_retries システムが接続時にSYNパケットを再伝送する回数を制限します。
tcp_retries1 着信接続に応じることが許可された再伝送回数を設定します。デフォルトは3です。
tcp_retries2 許可されたTCPパケットの再伝送回数を設定します。デフォルトは15です。
利用可能なすべてのファイルとオプションの一覧については/usr/src/linux-2.4/Documentation/networking/ip-sysctl.txtを参照してください。
/proc/sys/net/ipv4ディレクトリ内にある他の多くのディレクトリは固有のトピックを扱います。confディレクトリは、システムインターフェイスを異なる方法で設定することを可能にします。これには(defaultサブディレクトリの)未設定デバイスのためのデフォルトの設定や(allサブディレクトリ)の特別な設定を無効にする設定が含まれます。
直接自分のシステムに接続された他のシステム間の接続を制御するため、neighディレクトリはそれぞれのインターフェイスに特別な設定を行うことができます。これにより、システム間の相対的な近接や自分のシステムとの関係によりシステムを別々にもっと信頼して扱うことができるようになります。同時に、少し離れたシステムに厳密なルールを課すことも容易になります。
IPV4上のルーティングにも独自のディレクトリrouteがあります。confやneighと異なり、routeディレクトリにはシステム上のインターフェイスにルーティングを適用する仕様が含まれています。max_size、max_delay、min_delayなど設定の多くはルーティングキャッシュのサイズの制御に関係しています。ルーティングキャッシュをクリアするには、flushファイルに任意の値を書き込むだけです。
これらのディレクトリや設定ファイルの値に関する詳細については、/usr/src/linux-2.4/Documentation/filesystems/proc.txtを参照してください。
このディレクトリは、Linuxカーネルのメモリ(VM)サブシステムの設定を円滑にします。カーネルは仮想メモリを広範囲かつインテリジェントに使用します。これは一般にスワップ領域と呼ばれます。
以下のファイルは、通常/proc/sys/vmディレクトリにあります。
bdflush bdflushカーネルデーモンに関係するさまざまな値を設定します。
buffermem バッファメモリに使用する全システムメモリの割合を制御することができます。このファイルの出力は通常、以下のようになっています。
2 10 60 |
最初と最後の値は、バッファメモリとして使用するメモリの最小と最大をそれぞれ設定します。中央の値はバッファメモリで使用するシステムメモリの割合を設定しますが、その場合メモリ管理サブシステムはフリーメモリの不足を埋め合わせるため他のメモリ以上にバッファキャッシュのクリアを開始します。
freepages システムメモリのフリーページに関係するさまざまな値を表示します。このファイルは、以下のようになっています。
223 446 669 |
1番目の値はカーネルが追加メモリ割り当て管理を引き受ける前に許可されたフリーページの最小数を示しています。2番目の値はカーネルがパフォーマンス維持のため積極的にスワッピングを開始する前のフリーページ数です。3番目の値はシステムが常に利用可能とするフリーページ数です。
kswapd カーネルスワップアウトデーモンkswapdに関係するさまざまな値を設定します。このファイルには3つの値があります。
512 32 8 |
1番目の値はkswapdが1度でフリーにしようとするページの最大数を設定します。この値が大きいほど、カーネルは積極的にページをフリーにしようとします。2番目の値はkswapdがページをフリーにしようとする最小数を設定します。3番目の値はkswapdが1度に書き込もうとするページ数を設定します。この最後の値を適正に調節すると、カーネルにページを大量に書き込みディスク検索を最小限にするよう命じることで多くのスワップ領域を使用するシステム上のパフォーマンスを改善することができます。
max_map_count プロセスが持つメモリマップエリアの最大数を設定します。ほとんどの場合、デフォルト値として65536が適切です。
overcommit_memory デフォルトの0以外の値が設定された場合、割り当て前にカーネルが十分なメモリがあるか確認する標準チェックをスキップさせる値が含まれています。
pagecache ページキャッシュが使用するメモリ量を制御します。pagecacheの値はパーセントで、利用可能なページキャッシュメモリの最小と最大を実行するためbuffermemと似た方法で機能します。
page-cluster 1度で読み取るページ数を設定します。デフォルト値は4で、これは実際には16ページになりますが、ほとんどのシステムで適切な値です。
pagetable_cache プロセッサごとにキャッシュされるページテーブル数です。1番目と2番目の値は、それぞれ引き当てるページテーブルの最小数と最大数になります。
こうしたさまざまなファイルの詳細については、/usr/src/linux-2.4/Documentation/sysctl/vm.txtを参照してください。
このディレクトリにはSystem V IPCリソースに関する情報が含まれています。このディレクトリ内のファイルは、メッセージ(msg)、セマフォ(sem)、共有メモリ(shm)に対するSystem V IPCコールに関係しています。
このディレクトリにはシステム上で利用可能な現在使用されているttyデバイスに関する情報が格納されています。従来teletype deviceと呼ばれていたもので、キャラクタベースのデータ端末がttyデバイスと呼ばれます。
Linuxには3種類のttyデバイスがあります。シリアルデバイスはモデムやシリアルケーブルなどを使用する接続に使用されます。仮想端末は、システムコンソールでAlt-<F>キーを押すと利用可能な仮想コンソールなど一般のコンソール接続を作成します。疑似端末はX11など、より高いレベルのアプリケーションで使用される双方向コミュニケーションを作成します。
driversファイルは使用中の現在のttyデバイス一覧です。
serial /dev/cua 5 64-127 serial:callout serial /dev/ttyS 4 64-127 serial pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master /dev/vc/0 /dev/vc/0 4 0 system:vtmaster /dev/ptmx /dev/ptmx 5 2 system /dev/console /dev/console 5 1 system:console /dev/tty /dev/tty 5 0 system:/dev/tty unknown /dev/vc/%d 4 1-63 console |
/proc/tty/driver/serialファイルは各シリアルtty行の使用統計とステータスの一覧を示します。
ttyデバイスをネットワークデバイスと同様の方法で使用できるようにするため、Linuxカーネルはデバイスの回線制御を強化します。これにより、ドライバはデバイス上で伝送されるデータブロックに固有のヘッダーを付けることができます。接続のリモートエンドでデータブロックを1本のストリームのように見ることが可能です。SLIPやPPPは一般的な回線制御で、それぞれ一般にシリアルリンクでシステムを接続するために使用されます。
登録した回線制御はldiscディレクトリで利用可能な詳細情報とともにldiscsファイルに格納されます。