GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでprocファイルシステムを使用してトラブルシューティングする

proc ファイルシステムはLinuxの重要な機能であり、無視することはできません。 proc カーネルデータ構造へのインターフェイスを提供する疑似または仮想ファイルシステムです。つまり、 proc 現実世界の意味での実際のファイルシステムではありません。むしろ、それはメモリにのみ存在し、ディスクには存在しません。システムによって自動的にマウントされます。

その内容のほとんどは通常のファイルとディレクトリであるため、ほとんどの通常のLinuxツールを使用して procをナビゲートできます。 ファイルシステム。この記事の例は、どのLinuxディストリビューションでも同じように実行する必要があります。私のシステムは以下を使用しています:

 $ cat / etc / redhat-release 
Red Hat Enterprise Linux Serverリリース7.8(Maipo)
$

$ uname -r
3.10.0- 1127.el7.x86_64
$

基本的なprocの使用法

/ procの場所を確認するには ファイルシステムが存在する場合は、マウントを実行します コマンドを実行してprocを検索します 。ここで、その proc を確認できます / procにマウントされています ディレクトリ:

$マウント| grep proc 
proc on / proc type proc(rw、nosuid、nodev、noexec、relatime)
systemd-1 on / proc / sys / fs / binfmt_misc type autofs(rw、relatime、fd =26、 pgrp =1、timeout =0、minproto =5、maxproto =5、direct、pipe_ino =9506)
nfsd on / proc / fs / nfsd type nfsd(rw、relatime)
binfmt_misc on / proc / sys / fs / binfmt_miscタイプbinfmt_misc(rw、relatime)
$

/ procに移動します ディレクトリとそれを探索します。番号付きのディレクトリがたくさん表示されます。番号は、実行中のプロセスの単なるプロセスID(PID)です。名前の付いたファイルは、システム全体に適用可能で、特定のプロセスに関連しない一般的なファイルです。

 $ cd / proc / 
$ pwd
/ proc
$ ls
1 157 22827 33 3413 3618 384 4709 512 5571 66 741 798 88 <> 10 15868 23 3340 3414 362 385 4768 513 5581 6723 742 799 880 cpuinfoのキーユーザー自己
101 15900 23323 3341 3415 3622 39 4769 514 56 68 7466 891 8暗号kmsg slabinfoはこれら
1033 16 23370 3342 346 363 392 4770 515 5637 69 747 80 9つのデバイスkpagecount softirqs
364 394 48 516 5652 104 17 23380 3343 3467 7 75 800 906 diskstats kpageflags STAT
517 57 70 76 8367 347 365 4 4804 10416 17580 23383 3344 928 DMA loadavgスワップ
105 18 23469 3346 349 37 40 4805 518 58 7071 77 839 96ドライバロックSYS
106 19 23491 3365 35 37 FB meminfoにsysvipc
11 20767 23527 3392 352 376 41 483 53 601 72 783 842 9838 482 52 6 7199 351 375 4096
107 2 23524 3366 4 4094 4807 519 59 71 78 840 98 execdomains mdstatをSysRqをトリガ784 8446 99ファイルシステムその他timer_list
11412 21 24 3397 3523 377 4180 49 5347 61 73 785 85 993 FSモジュールtimer_stats
12 21014 26 3398 358 378 42 494 5348 62 735 786 86 994割込みマウントTTY
120 21035 27 34 359 379 428 495 54 624 736 79 869 9970 IOMEM MTRR稼働時間
1263 21059 28 3408 36 38 43 508 5421 625 737 793 87 ACPIは/> 1265 21083 29 3409 360 380 1272 22 30 3410 3602 381 45 51 5464 636 739 795 874バスIRQパーティションvmstatの
13 22055 31 3411 3603 382 46 510 5500 64 74 796 878のcgroup kallsyms sched_debug zoneinfoの
14 22074 32 3412 361 383 47 511 5519 65 740 797 879 cmdline kcore schedstat
$

いくつかの一般的なシステム全体のファイルを調べることから始めます。例: / proc / cpuinfo システム上のCPUに関する情報(具体的には、そのメーカー、モデル、コア数、速度、CPUフラグなど)を表示します。

 $ cat /proc/cpuinfo 

同様に、 / proc / meminfo システムのプライマリメモリまたはRAMに関する情報を提供します。また、使用されているメモリの量や空き容量などの追加の統計情報も提供します。

 $ cat /proc/meminfo 

ロードされているすべてのカーネルモジュールを表示するには、 / proc / modulesを確認してください。 ファイル:

 $ cat /proc/modules 

システムでサポートされているすべてのファイルシステムを確認するには、 / proc / filesystemsを参照してください。 :

 $ cat /proc/filesystems 

次に、プロセスごとのファイルを確認します。たとえば、 systemd 、PIDは1:

 $ ps aux | grep -i systemd |ヘッド-1
root 1 0.0 195976 9088? Ss Mar03 0:06 / usr / lib / systemd / systemd --switched-root --system --deserialize 22
$

1という名前のディレクトリに移動します / proc内 そこに何があるか見てみましょう。多くのファイルが存在し、それらの名前はやや自明です:

 $ cd / proc / 1 
$ pwd
/ proc / 1
$

$ ls
attr cmdline environ io mem ns nsスタックタスク
AUTOGROUP COMM exeファイルの制限mountinfo numa_maps patch_state schedstatのstatタイマー
auxv coredump_filter FD loginuidマウントoom_adj人格セッションID STATM uid_map
のcgroupのcpuset fdinfo map_files mountstats oom_score projid_map setgroupsを状況WCHAN
clear_refs CWD gid_map maps net oom_score_adj root smaps syscall
$

これらのファイルが各プロセスに存在するかどうかを確認するには、現在のシェルIDを選択します。 echo $$ を実行すると、その情報を取得できます 。 $$ 現在のシェルのPIDを保存する特別な変数です。 / procに移動します およびcd PIDと同じ番号のディレクトリに移動します。ファイルは、PID 1またはsystemdのファイルとほぼ同じです:

 $ echo $$ 
21059
$
$ cd / proc / 21059
$ pwd
/ proc / 21059
$
$ lsの
のattr CMDLINE環境IO MEM NSページマップSCHEDスタックタスク
AUTOGROUP COMM exeファイルの制限mountinfo numa_maps patch_state schedstatのstatタイマー
auxv coredump_filter FD loginuidマウントoom_adj人格セッションID STATM uid_map
のcgroupのcpuset fdinfo map_files mountstats oom_score projid_map setgroups status wchan
clear_refs cwd gid_map maps root s これらのファイルに何が含まれているかを確認するには、長時間実行されるプロセスを実行します。ターミナルを開き、 ttyを実行します 使用している端末を確認するコマンド。次に、と入力します コマンドを押してEnterを押します 。このコマンドは座って入力を待ちます:

 $ tty 
/ dev / pts / 2
$
$ cat

別の端末を開き、のPIDを見つけます pgrepを使用する コマンド:

 $ pgrep cat 
24335
$

次に、最初のプロセスごとのファイルであるコマンドラインを調べます。 。このファイルは、コマンドラインがどのように実行されるか、パラメータが使用されているかどうかなどを示しています。

 $ cat / proc / 24335 / cmdline 
cat $

次に、 cwdというディレクトリを確認します。 、これは、が配置されているディレクトリへのシンボリックリンク(シンボリックリンク)の一種です。 コマンドが実行されました。この場合、それは / root

 $ ls -l / proc / 24335 / cwd 
lrwxrwxrwx。 1ルートルート03月4日03:35/proc / 24335 / cwd-> / root
$

バイナリが実行され、プロセスが生成されると、デフォルトでいくつかのファイルが開きます。一般的に、それは( stdin )、標準出力( stdout )、および標準のエラー( stderr )。 fdをリストする場合 / proc /の下のディレクトリ その後にPIDが続くと、3つのシンボリックリンクが返され、すべてが端末( pts2 )を指していることがわかります。 )コマンドの実行に使用されたもの:

 $ ls -l / proc / 24335 / fd / 
total 0
lrwx------。 1ルートルート64Mar4 03:35 0-> / dev / pts / 2
lrwx------。 1ルートルート64Mar4 03:35 1-> / dev / pts / 2
lrwx------。 1ルートルート64Mar4 03:35 2-> / dev / pts / 2
$

もう1つの重要なファイルはexe 、実行されたバイナリの絶対パスを指すシンボリックリンクです。この場合、それはのパスです コマンド:

 $ ls -l / proc / 24335 / exe 
lrwxrwxrwx。 1ルートルート03月4日03:35/proc / 24335 / exe-> / usr / bin / cat
$

同様に、の場合 環境 プロセスごとのファイルで、 catに定義されているすべての環境変数を表示できます。 プロセス:

 $ cat /proc/24335/environ 

proc内の重要なファイル

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

上記の例 問題のデバッグとトラブルシューティングに役立つ、実行中のプロセスとシステム全般に関する多くの情報を提供します。

重要なプロセスごとのファイル

以下は、 / proc /で検索する重要なプロセスごとのファイルです。 ファイルシステム:

  • / proc / $ pid / cmdline プロセスの完全なコマンドラインを保持します
  • / proc / $ pid / cwd プロセスの現在の作業ディレクトリへのシンボリックリンク
  • / proc / $ pid / environ プログラムの開始時に設定された初期環境が含まれています
  • / proc / $ pid / exe 実行されたファイルのパスへのシンボリックリンク
  • / proc / $ pid / fd プロセスによって開かれたファイルを一覧表示するためのサブディレクトリ
  • / proc / $ pid / io プロセスのI/O統計が含まれています
  • / proc / $ pid / Limits プロセスリソースの制限を表示します
  • / proc / $ pid / maps 現在マップされているメモリ領域とアクセス許可
  • / proc / $ pid / stack プロセスのカーネルスタック内の関数呼び出しのトレース
  • / proc / $ pid / stat プロセスに関するステータス情報
  • / proc / $ pid / task / スレッド情報を含むディレクトリ

重要なシステム全体のファイル

重要な一般ファイルのリストは次のとおりです(つまり、どのプロセスにも固有ではありません):

  • / proc / cmdline 起動時にLinuxカーネルに渡される引数
  • / proc / cpuinfo CPU関連の情報
  • / proc / meminfo メモリ使用量の統計
  • / proc / filesystems カーネルでサポートされているファイルシステムのリスト
  • / proc / modules 現在ロードされているカーネルモジュール
  • / proc / partition システム上の各パーティションに関する情報
  • / proc / swaps システムのスワップスペースに関する情報
  • / proc / self ディレクトリとは、 / procにアクセスするプロセスを指します ファイルシステム
  • / proc / slabinfo カーネルキャッシュに関する情報
  • / proc / sys カーネル変数に関するさまざまなファイルとサブディレクトリ

さらなるステップ

procのこの概要 ファイルシステムは、それが提供する可能性にのみ触れます。詳細については、 procを確認してください。 man procを入力してのmanページ コマンドを実行するか、オンラインバージョンのprocmanページにアクセスします。


Linux
  1. Linuxコマンドラインでのtcpdumpの使用の概要

  2. Linuxコマンドラインで力を使用する

  3. Linux/procファイルシステムの調査

  1. dfおよびduコマンドを使用してLinuxのディスク容量を確認する

  2. iノードとLinuxファイルシステム

  3. Linuxでmkfsコマンドを使用して、ディスクまたはパーティション上のファイルシステムをフォーマットする

  1. Linuxでtopコマンドを使用するためのヒント

  2. Linuxの無料コマンドの使用

  3. Linux サブシステムのファイルシステムは Windows 10 のどこにありますか?