proc ファイル システムには、カーネルの現在の状態を表す特別なファイルの階層が含まれています。デバッグ ツールをサポートするために、実行中のプロセス内の構造へのインターフェイスであるという本来の目的にちなんで名付けられました。 Linux はこれを Solaris から採用しましたが、カーネルにもインターフェースを追加しました。 proc ファイル システムは長年にわたって非常に乱雑になったため、Linux はそれをクリーンアップするために sysfs ファイル システムを作成しました。
/proc ディレクトリ内のファイルには、ハードウェアおよびシステムで実行中の現在のプロセスに関する情報が含まれています。書き込み許可を持つファイルを変更して、カーネルの構成を変更できます。
仮想ファイル システム
/proc ディレクトリ内のファイルは仮想ファイルです。したがって、proc は仮想ファイル システムと呼ばれます。ほとんどの仮想ファイルは、サイズが 0 バイトとして表示されますが、表示すると大量の情報が含まれます。仮想ファイルの時刻と日付のスタンプのほとんどは、現在の時刻と日付を反映しています。ただし、これらのファイルは常に更新されます。
/proc/interrupts、/proc/meminfo、/proc/cpuinfo、/proc/devices などの仮想ファイルは、システムのハードウェアのビューを提供します。 /proc/filesystems ファイルや /proc/sys ディレクトリなどのその他のファイルは、システム構成情報とインターフェースを提供します。同様のトピックに関する情報を含むファイルは、仮想ディレクトリにグループ化されます。たとえば、プロセス ディレクトリには、システムで実行中の各プロセスに関する情報が含まれています。
仮想ファイルの表示
/proc 内のほとんどの仮想ファイルは、cat、more、less などのコマンドを使用して表示できます。たとえば、システムの CPU に関する情報を表示するには、次のように入力します。
# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 79 model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz stepping : 1 microcode : 0x1 cpu MHz : 2199.998 cache size : 30720 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 rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt bogomips : 4399.99 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
一部のファイルは、root 権限でのみアクセスできます。 /proc 内の一部のファイルには、人間が判読できない情報が含まれています。これらのファイルを表示するには、lspci、free、top などのユーティリティを使用します。たとえば、lspci コマンドを使用して、すべての PCI デバイスを一覧表示します。
# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Red Hat, Inc. QXL paravirtual graphic card (rev 04) 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: Red Hat, Inc Virtio SCSI 00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:06.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:07.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
仮想ファイルの変更
/proc ディレクトリ内のほとんどの仮想ファイルは読み取り専用です。ただし、一部は書き込み可能で、カーネルの設定を調整するために使用できます。これは、/proc/sys ディレクトリ内のファイルに特に当てはまります。仮想ファイルの値を変更するには、次の構文を使用します:
# echo value > /proc/file
たとえば、ホスト名を変更するには、次のように入力します:
# echo www.example.com > /proc/sys/kernel/hostname
その他のファイルは、バイナリまたはブール スイッチとして機能します。ファイルを表示すると、0 (オフまたは false) または 1 (オンまたは true) が返されます。例:
# cat /proc/sys/net/ipv4/ip_forward 0
0 は、カーネルがネットワーク パケットを転送していないことを示します。パケット転送をオンにするには:
# echo 1 > /proc/sys/net/ipv4/ip_forward # cat /proc/sys/net/ipv4/ip_forward 1
/proc 内の最上位ファイル
/proc ディレクトリのトップレベルにあるより有用な仮想ファイルのいくつかをここで説明します。これはすべてを網羅したリストではなく、いくつかのファイルとその目的の例を示すためのものです。これらのファイルの多くは、該当するレッスンで詳しく説明されています。
- /proc/buddyinfo :このファイルは、主にメモリの断片化の問題を診断するために使用されます。
- /proc/cmdline :このファイルは、カーネルの起動時に渡されるパラメーターを示します。
- /proc/cpuinfo :この仮想ファイルは、システムで使用されているプロセッサの種類を識別します。
- /proc/crypto :このファイルには、Linux カーネルで使用されるインストール済みのすべての暗号化方式が、それぞれの詳細を含めて一覧表示されます。
- /proc/devices :このファイルには、現在構成されているさまざまなキャラクター デバイスとブロック デバイスが表示されます (モジュールが読み込まれていないデバイスは含まれません)。
- /proc/dma :このファイルには、使用中の登録済み ISA DMA チャネルのリストが含まれています。
- /proc/execdomains :このファイルには、Linux カーネルで現在サポートされている実行ドメインと、それらがサポートするパーソナリティの範囲がリストされています。
- /proc/filesystems :このファイルは、カーネルで現在サポートされているファイル システム タイプのリストを表示します。最初の列は、ファイル システムがブロック デバイスにマウントされているかどうかを示します。 nodev で始まるものは、デバイスにマウントされていません。 2 番目の列は、サポートされているファイル システムの名前を示しています。マウント コマンドは、引数として指定されていない場合、ここにリストされているファイル システムを循環します。
- /proc/interrupts :このファイルは、x86 アーキテクチャでの IRQ ごとの割り込み数を記録します。
- /proc/iomem :このファイルには、各物理デバイスのシステム メモリの現在のマップが表示されます。
- /proc/ioports :このファイルは、デバイスとの入力または出力通信に使用される、現在登録されているポート リージョンのリストを提供します。
- /proc/kcore :このファイルは、システムの物理メモリを表し、コア ファイル形式で保存されます。このファイルの内容は、gdb などのデバッガーによって検査されるように設計されており、人間が判読することはできません。
- /proc/kmsg :このファイルは、カーネルによって生成されたメッセージを保持するために使用されます。これらのメッセージは、/bin/dmesg などの他のプログラムによって取得されます。
- /proc/loadavg :このファイルは、時間の経過に伴う CPU と I/O の両方に関する負荷平均と、稼働時間やその他のコマンドで使用される追加データを示します。
- /proc/locks :このファイルは、現在カーネルによってロックされているファイルを表示します。このファイルの内容には、内部のカーネル デバッグ データが含まれており、システムの使用状況によって大きく変わる可能性があります。
- /proc/mdstat :このファイルには、複数ディスクの RAID 構成に関する現在の情報が含まれています。
- /proc/meminfo :このファイルは、システムの RAM 使用量に関する貴重な情報を大量に報告します。
- /proc/modules :このファイルは、カーネルにロードされたすべてのモジュールのリストを表示します。この情報のほとんどは、/sbin/lsmod コマンドを使用して表示することもできます。
/proc 内のプロセス ディレクトリ
/proc ディレクトリには、数字の名前が付いたディレクトリが含まれています。これらのディレクトリは、プログラムのプロセス ID に基づいて名前が付けられ、そのプロセスに関する情報が含まれています。各プロセス ディレクトリの所有者とグループは、プロセスを実行しているユーザーに設定されます。各プロセス ディレクトリには、以下を含むいくつかのファイルが含まれています。
- コマンドライン :プロセスの開始時に発行されたコマンド
- cwd :プロセスの現在の作業ディレクトリへのシンボリック リンク
- 環境 :プロセスの環境変数のリスト
- exe :このプロセスの実行可能ファイルへのシンボリック リンク
- fd :特定のプロセスのすべてのファイル記述子を含むディレクトリ
- 地図 :プロセスに関連付けられた実行可能ファイルとライブラリ ファイルへのメモリ マップのリスト
- 私 :プロセスが保持するメモリ (ユーザーはファイルを読み取ることができません)
- ルート :プロセスのルート ディレクトリへのリンク
- 統計 :実行状態とメモリ使用量を含むプロセスのステータス
- ステータス :プロセスで使用中のメモリのステータス
- ステータス :stat または statm よりも読みやすい形式でのプロセスのステータス
/proc 内のその他のディレクトリ
/proc ディレクトリ内の他のディレクトリは、トピックごとに同様の情報をグループ化しています。以下は、これらのディレクトリの部分的なリストです:
- /proc/bus :このディレクトリには、システムで使用可能なさまざまなバスに関する情報が含まれています。 /proc/bus 内で使用可能なサブディレクトリとファイルは、システムに接続されているデバイスによって異なります。
- /proc/bus/pci, /proc/bus/usb :これらのディレクトリ内のデバイス ファイルで cat コマンドを使用すると、システムに存在するすべての PCI および USB デバイスのリストを取得できますが、出力を読み取ったり解釈したりすることは困難です。人間が判読できるデバイスのリストについては、lspci および lsusb コマンドを実行します。
- /proc/driver :このディレクトリには、カーネルが使用する特定のドライバに関する情報が含まれています。
- /proc/fs :このディレクトリには、エクスポートされるファイル システムが表示されます。 NFS サーバーを実行している場合、cat /proc/fs/nfsd/exports と入力すると、共有されているファイル システムと権限が表示されます。
- /proc/irq :このディレクトリは、IRQ to CPU アフィニティを設定するために使用されます。これにより、システムは特定の IRQ を 1 つの CPU のみに接続できます。または、CPU を IRQ の処理から除外することもできます。
- /proc/self/net :このディレクトリでは、さまざまなネットワーク パラメータと統計を総合的に確認できます。このディレクトリ内の各ディレクトリと仮想ファイルは、システムのネットワーク構成の側面を記述します。 /proc/net ファイルは、このディレクトリへのシンボリック リンクです。
- /proc/scsi :このディレクトリのプライマリ ファイルは /proc/scsi/scsi で、認識されているすべての SCSI デバイスのリストが含まれています。このリストから、デバイスのタイプ、モデル名、ベンダー、SCSI チャネル、および ID データを利用できます。
- /proc/sys :このディレクトリは、システムに関する情報を提供するだけでなく、カーネル機能をすぐに有効化および無効化できるため、/proc 内の他のディレクトリとは異なります。ファイルに書き込み権限がある場合、それを使用してカーネルを構成できます。 /proc/sys/ ファイル内の値の変更は、新しい値をファイルにエコーすることによって行われます。たとえば、ホスト名を www.example.com に変更するには :
# echo www.example.com > /proc/sys/kernel/hostname
その他のファイルは、バイナリまたはブール スイッチとして機能します。値 0 は、オフまたは false を表します。値 1 は on または true を表します。たとえば、パケット転送をオンにするには:
# echo 1 > /proc/sys/net/ipv4/ip_forward
echo コマンドを使用して行った変更は永続的ではなく、システムを再起動すると消えます。システムの再起動後に構成の変更を有効にするには、変更を /etc/sysctl.conf ファイルに追加します。
- /proc/sys/dev :このディレクトリは、システム上の特定のデバイスのパラメータを提供します。
- /proc/sys/fs :このディレクトリには、クォータ、ファイル ハンドル、inode 情報など、ファイル システムのさまざまな側面に関するオプションと情報が含まれています。
- /proc/sys/kernel :このディレクトリには、カーネルの動作に直接影響するさまざまな構成ファイルが含まれています。
- /proc/sys/net :このディレクトリには、さまざまなネットワーク トピックに関するサブディレクトリが含まれています。これらのディレクトリ内のファイルを変更して、実行中のシステムのネットワーク構成を調整できます。
- /proc/sysvipc :このディレクトリには、System V プロセス間通信 (IPC) リソースに関する情報が含まれています。このディレクトリ内のファイルは、メッセージ (msg)、セマフォ (sem)、および共有メモリ (shm) の System V IPC 呼び出しに関連しています。
- /proc/tty :このディレクトリには、システムで利用可能で現在使用されている tty デバイスに関する情報が含まれています。ドライバ ファイルは、現在使用中の tty デバイスのリストです。