Linuxでプロセスの開いているファイルを一覧表示する方法

プロセスに「lsof」コマンドを使用するためのガイド

LinuxまたはUnixシステムを頻繁に使用する場合は、「Linuxではすべてがファイルです」というフレーズを聞いたことがあるはずです。これは、概念の過度の単純化として分類される可能性がありますが、Linuxシステム内のファイルがどのように機能するかを理解することは非常に役立ちます。

Linux環境に表示されるすべてがファイルである必要はありません。プロセスの場合もあれば、ハードウェア情報やディレクトリなどを表す特別なファイルの場合もあります。

このチュートリアルでは、Linuxの特定のプロセスで開いているすべてのファイルを見つける方法について説明します。

はじめに lsof 指示

Linuxシステムの優れている点は、コマンドをよく理解していれば、ターミナルを介してシステム全体を制御および管理できることです。コマンドがわかると、ターミナル上のすべてのタスクが簡単になります。

lsof を意味する '開いているファイルのリスト‘。コマンドの長いバージョンを知ったら、コマンドを理解して生産的な方法で使用することが非常に簡単になります。

The lsof コマンドは、開いているファイル、ソケット、およびパイプのリストを表示します。このコマンドを使用すると、開いているファイルを簡単に検索できます。いつ lsof コマンドはオプションなしで使用され、実行中のアクティブなプロセスに関して開いているすべてのファイルを表示します。

ノート: 必ず使用してください sudo コマンドの実行中。

を使用して lsof 指示

のアウトプットを研究します lsof 詳細なコマンド。次のコマンドを調べてください。

sudo lsof |以下

ノート: 直接実行する場合 lsof コマンドを実行すると、出力が非常に大きくなり、先に進むために混乱が生じる可能性があります。したがって、ここで使用しました lsof |以下 チュートリアルの便宜のためのコマンド。

出力:

gaurav @ ubuntu:〜$ sudo lsof |少ないコマンドPIDTIDユーザーFDタイプデバイスサイズ/オフノード名kdevtmpfs31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 roottxt不明/ proc / 31 / exe netns 32 root cwd DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt unknown / proc / 32 / exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd DIR 8,8 4096 2 / rcu_tasks33ルートtxt不明/ proc / 33 / exe kauditd34ルートcwdDIR 8,8 4096 2 / kauditd34ルートrtdDIR 8,8 4096 2 / kauditd34ルートtxt不明/ proc / 34 / exe 

以下は、を使用して表示される属性です。 lsof 指図。

パラメータ説明
指示ファイルを開くコマンドの名前を表示します。
PIDファイルを開くプロセスのプロセスID番号。
TIDスレッド識別子番号。スレッド番号またはタスク番号のいずれかです。
ユーザープロセスの所有者であるユーザーIDまたはユーザーの名前。
FDファイルのファイル記述子を表示します。
タイプファイルに関連付けられているノードのタイプ。
端末デバイス番号を表示します。
サイズ/オフファイルのサイズをバイト単位で表示します。
ノードディレクトリまたは親ディレクトリのiノード番号を表示します。
名前プロセスが配置されているファイルシステムの名前を表示します。

プロセスの一覧表示

何よりもまず、実行中のプロセスとそれぞれのプロセスIDを取得することが重要です。 Linuxには、プロセスをPID、ユーザー、ディレクトリなどの属性とともに一覧表示するためのさまざまなコマンドが用意されています。

次のようなコマンドを使用できます , ps, htop, pstree ターミナル上のプロセスを一覧表示します。

チュートリアル全体を通して、私は そうするためのコマンド。 The コマンドは、実行中のシステムの動的なリアルタイムビューを提供します。また、Linuxカーネルによって現在管理されているすべてのプロセスとスレッドも表示されます。以下のブロックを調べて、出力を確認します。 指図。

構文:

sudo top

出力:

gaurav @ ubuntu:〜$ sudo top PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.08 Web Content 1173 mongodb 20 0 288536 6776 3428 S 5.9 0.2 2: 34.41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1:42.34Webコンテンツ1ルート200 225904 6824 4900 S 0.0 0.2 0:27.25システム2ルート20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd4ルート0-20 0 0 0 I 0.0 0.0 0:00.00 kworker / 0:0H 6 root 0-20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:01.89 ksoftirqd / 0 8 root 20 0 0 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 Migration / 0 

上記のブロックでは、すべてのプロセス関連情報を1か所で確認できます。ここから私たちは見つけることができます PID を使用して開いているファイルを表示する必要があるプロセスの lsof 指図。

ただし、特定のプロセスのみのプロセスIDを確認し、他の不要なプロセスを回避したい場合は、次のコマンドを使用します。

構文:

sudo top | grep [Process_Name]

例:

gaurav @ ubuntu:〜$トップ| grepターミナル13819gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.63 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0:53.66 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.67 gnome -ターミナル-gaurav @ ubuntu:〜$

ここでは、プロセス名に「terminal」という文字列が含まれているプロセスのプロセスIDを具体的に表示しています。この方法は、完全なプロセス名またはPIDがわからない場合に便利です。

PIDを使用したプロセスに関連する開いているファイルの表示

上記のブロックでは、topコマンドを使用してプロセス関連の情報を取得する方法を学習しました。今、私たちは使用します PID システム上の任意のプロセスに対応し、を使用してそのプロセスに関連する開いているファイルのリストを表示しようとします lsof 指図。

上記の出力から、強調表示されているPID1173に対応するプロセスを実行してみましょう。を使用します lsof -p [PID] そうするためのコマンド。

構文:

sudo lsof -p [PID]

このコマンドは、プロセスのPIDを入力として受け取り、このPIDに対応するすべてのファイルを一覧表示します。

出力:

gaurav @ ubuntu:〜$ sudo lsof -p 1173 lsof:警告:stat()できませんfuse.gvfsd-fuseファイルシステム/ run / user / 1000 / gvfs出力情報が不完全な場合があります。コマンドPIDユーザーFDタイプデバイスサイズ/オフノード名mongod1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,8 38379496 2885608 / usr / bin / mongod mongod 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 2624643 /lib/x86_64-linux-gnu/libresolv-2.27.so mongod 1173 mongodb mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 mongod 1173 mongodb mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 / usr / lib / locale / locale-archive mongod 1173 mongodb mem REG 8,8 2030544 2621501 / lib / x86_64-linux-gnu / libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mongodb mem REG 8,8 96616 2624649 / lib / x86_64-linux-gnu / libgcc_s.so.1 mongod 1173 mongodb me m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/libdl-2.27.so mongod 1173 mongodb mem REG 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 gaurav @ ubuntu :〜$

プロセスID1713のプロセス用に開いているファイルは、 lsof 指図。

ノート: GNOMEユーザーは以下の警告に遭遇するかもしれません。あなたはそれを安全に無視することができます。

lsof:警告:stat()できませんfuse.gvfsd-ファイルシステム/ run / user / 1000 / gvfsを融合します出力情報が不完全である可能性があります。

プロセス名を使用したプロセスに関連するオープンファイルの一覧表示

The lsof コマンドには、プロセスの名前を使用して開いているファイルを一覧表示するオプションもあります。名前は、入力文字列としてコマンドに指定する必要があります。このオプションを使用するには、以下の構文を参照してください。

構文:

sudo lsof -c [プロセス名]

例:

sudo lsof -c mysql

出力:

gaurav @ ubuntu:〜$ sudo lsof -c mysql lsof:警告:stat()できませんfuse.gvfsd-fuseファイルシステム/ run / user / 1000 / gvfs出力情報が不完全な場合があります。コマンドPIDユーザーFDタイプデバイスサイズ/オフノード名mysqld1266 mysql cwd DIR 8,8 4096 3154135 / var / lib / mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 1266 mysql txt REG 8,8 24691368 2889411 / usr / sbin / mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 / [aio] mysqld 1266 mysql DEL REG 0,18 28126 / [ aio] mysqld 1266 mysql DEL REG 0,18 28125 / [aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mysqld 1266 mysql mem REG 8,8 47576 2624592 / lib / x86_64-linux-gnu / libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so 

出力は、プロセス名の代わりにプロセスIDが使用されたものと同じになります。

ネットワーク接続によって開かれたファイルの一覧表示

Linuxでは、ファイルはネットワーク接続、ハードウェア接続などに関する情報の形式にすることもできます。 lsof ネットワーク接続によって開かれたファイルを一覧表示するコマンド。次の方法を使用します。

sudo lsof -i

出力:

gaurav @ ubuntu:〜$ sudo lsof-iコマンドPIDユーザーFDタイプデバイスサイズ/オフノード名systemd-r969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost: domain(LISTEN)systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090-> _ gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 23811 0t0 UDP *:mdns avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *:58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *:37512 mongod 1173 mongodb 6u IPv4 28149 0t0 TCP localhost:27017(LISTEN)mysqld 1266 mysql 19u IPv4 25992 0t0 TCP localhost mysql(LISTEN)apache2 1283 root 4u IPv6 28140 0t0 TCP *:http(LISTEN)gaurav @ ubuntu:〜$

ここでは、を使用してネットワーク接続によって開かれているファイルに関する情報を確認できます。 lsof -i 指図。

結論

この簡単なチュートリアルでは、使いやすいさまざまな方法を使用して、Linuxでプロセスの開いているファイルを一覧表示する方法を学習しました。のその他の用途について lsof コマンド、を参照してください lsof マニュアルページ。