はじめに
lsof
コマンドは LiSt Open Files の略です 開いているファイルと、それらを使用するプロセスが表示されます。 Linux はデバイスやディレクトリなどのすべてのオブジェクトをファイルと見なすため、未確認の開いているファイルはユーザーによる変更を防ぎます。
さらに、ファイルの数が非常に多いため、悪意のあるプロセスを見つけるのが難しくなります。 lsof
コマンドは、これらのプロセスを特定するのに役立つため、それらを終了できます。
この記事では、 Linux の lsof コマンドと例。

前提条件
- ターミナルへのアクセス
- Sudo グループの権限
- 一部のコマンドのルート権限
lsof コマンド構文
lsof
コマンド構文は次のとおりです:
lsof [options]
注: ほとんどのコマンドでは、lsof
を実行します sudo
で 「許可が拒否されました」というエラーを回避します。
lsof コマンド オプション
lsof
コマンドには多くのオプションがあります。以下の表には、最も頻繁に使用される引数が含まれています:
オプション | 説明 |
---|---|
lsof | 開いているすべてのファイルを一覧表示します。 |
-b | カーネル ブロックを抑制します。 |
/ [file system] / | 特定のファイル システムで開いているファイルを表示します。 |
/dev/tty* | 端末に関連付けられたファイルを表示します。 |
-u [username] | ユーザーが開いたすべてのファイルを印刷します。 |
-u ^[username] | 特定のユーザーを除く全員が開いたすべてのファイルを印刷します。 |
-c [process] | 特定のプロセスによってアクセスされるすべてのファイルを一覧表示します。 |
-p [process ID] | 特定のプロセス ID に関連付けられたすべての開いているファイルを表示します。 |
-p ^[process ID] | 他のすべての PID によって開かれたファイルを表示します。 |
-R | 親プロセス ID を一覧表示します。 |
+D [directory path] | ディレクトリ内の開いているすべてのファイルを出力します。 |
-i | ネットワーク接続によってアクセスされるすべてのファイルを表示します。 |
-i [IP version number] | IP に基づいてファイルをフィルタリングします。 |
- i [udp or tcp] | 接続タイプ (TCP または UDP) に基づいて、開いているファイルをフィルタリングします。 |
-i :[port number] | 特定のポートで実行されているプロセスを検索します。 |
-i :[port range] | 特定のポート範囲で実行されているプロセスを検索します。 |
-t [file name] | 特定のファイルにアクセスしたプロセスの ID を一覧表示します。 |
# kill -9 'lsof -t -u [user] ' | すべてのユーザー プロセスを強制終了します。 |
-d mem | すべてのメモリ マップ ファイルを表示します。 |
[path] | grep deleted | ロックされた削除済みファイルを印刷します。 |
man | man ページを開きます。 |
lsof コマンドの例
lsof
ユーザーがシステムおよびネットワーク管理アクティビティを管理できるように、さまざまな引数が組み込まれています。以下は、最も一般的な lsof
の概要です。 ユースケース。
すべてのファイルを一覧表示
オプションなしで実行すると、lsof
任意のプロセスによって開かれたすべてのファイルを一覧表示します:
sudo lsof

lsof
コマンドは多くの詳細を出力します。したがって、常に lsof
をパイプします。 less
で 出力を一度に 1 ページずつ表示します。
sudo lsof | less

リストの一番下に移動するには、Enter を押します または 下矢印 . Q でリストを終了します .
lsof
出力は異なる列で構成されます。ただし、すべての列がすべての種類のファイルに適用されるわけではありません。ヘッダーは次のようになります:

lsof
のデフォルトの列 出力は次のとおりです:
- コマンド - ファイルを開いたプロセスに関連付けられたコマンドを参照します。
- PID - ファイルを実行しているプロセスのプロセス識別番号。
- TID - 各プロセスのタスク識別番号を表します。タスクではなくプロセスがファイルを開いた場合は空白です。
- TASKCMD - 最初の列のコマンド名を参照します。ただし、TASKCMD タスクがそのコマンド名を変更すると、異なる場合があります。
- ユーザー - プロセスを実行しているユーザーの名前。列にはユーザー ID または名前が含まれます。
- FD - プロセスがファイルに関連付けるために使用するファイル記述子です。
- タイプ - ファイルの種類とその識別番号を表示します。
- デバイス - ファイルに関連するデバイス番号を出力します。
- サイズ/オフ - 実行時に取得された値またはファイルを表します (サイズまたはオフセット)。
- NODE - ディレクトリ/親ディレクトリのローカル ファイルのノード番号または i ノード番号。
- 名前 - ファイルへのパスまたはリンクを表示します。
カーネル ブロックを隠す
デフォルトの lsof
出力には、カーネルによって開かれたファイルも含まれます。カーネル ブロックを抑制するには、lsof
を実行します。 -b
で フラグ:
sudo lsof -b

特定のファイルシステムのファイルを表示
lsof
を使用 特定のファイル システムで開いているファイルを表示するコマンド:
sudo lsof / [file system] /
たとえば、sys
で開いているすべてのファイルを表示するには ディレクトリ、実行:
sudo lsof / sys/

端末ファイルの印刷
dev
をターゲットにして、ターミナルに接続されているすべての開いているファイルを一覧表示します lsof
のディレクトリ :
lsof /dev/tty*

ユーザーがアクセスしたすべてのファイルを表示
lsof
を使用 -u
で 特定のユーザーが開いたファイルを表示するフラグ:
sudo lsof -u [username]
例:
lsof -u saraz

このコマンドは、saraz によって開かれたファイルを一覧表示します .
特定のユーザーを除くすべてのユーザーが開いているすべてのファイルを印刷するには、次のコマンドを実行します:
sudo lsof -u ^[username]
例:
lsof -u ^saraz

出力には、saraz 以外のユーザーによって制御されているファイルが表示されます .
プロセスが使用するファイルを表示
-c
フラグは、プロセスによって使用されるすべてのファイルを開きます:
sudo lsof -c [process]
たとえば、wpa_suppl
によって開かれたファイルを一覧表示するには プロセス、実行:
sudo lsof -c wpa_suppl

別のオプションは、プログラム名の一部のみを使用することです:
sudo lsof -c wpa

lsof
wpa
という用語で始まるすべてのプログラムを返します 、これには wpa_suppl が含まれます .
さらに、-c
オプションは lsof
をパイプするのと同じ出力を与えます grep で :
sudo lsof | grep wpa_suppl

特定の PID によって開かれたファイルを印刷
-p
を使用します プロセス ID 番号 (PID) で特定のファイルをフィルタリングするオプション。たとえば、以下の出力は PID 635 のすべてのファイルを示しています。
sudo lsof -p 635

一方、キャレット ^
を追加します 他のすべてのプロセスによって開かれたファイルを印刷する記号:
sudo lsof -p ^635

さらに、lsof
を組み合わせて -R
で フラグは、親プロセス識別番号 (PPID) を出力に追加します。
特定の PID の PPID 情報を取得するには、次を実行します:
sudo lsof -p [PID] -R
たとえば、635 PID の PPID を取得するには、次のように入力します。
sudo lsof -p 635 -R

出力は、ヘッダーに追加された PPID 列を示しています。
ディレクトリ下のファイルを表示
ディレクトリの下で開かれているすべてのファイルを表示するには、次のコマンドを使用します:
sudo lsof +D [directory path]

このオプションは、サブディレクトリも再帰します。再帰を避けるには、+d
を使用します 国旗。
ネットワーク接続によってアクセスされたファイルを表示
-i
を使用します lsof
のフラグ ネットワーク接続によって開かれているファイルを確認します。このコマンドを実行してください:
sudo lsof -i

上記の例では、接続の種類に関係なく、ネットワーク接続によって開かれているファイルを出力します。
-i
フラグは lsof
に多くの汎用性を追加します 、ユーザーがさまざまな基準に基づいてファイルをフィルタリングできるようにします。 lsof -i [options]
を使用 へ:
- IP に基づいてファイルをフィルタリング と:
sudo lsof -i [IP version number]
たとえば、IPv4 ファイルのみを表示するには、次のコマンドを実行します:
sudo lsof -i 4

反対に、IPv6 ファイルのみを次のように印刷します:
sudo lsof -i 6

- tcp を使用するファイルのみを表示 または udp プロトコル タイプを指定して接続:
sudo lsof -i [udp or tcp]

- 特定のポートで実行されているプロセスを見つける .このオプションは、別のアプリが特定のポートにバインドするのを妨げているファイルを確認するのに役立ちます。名前列のポート番号またはサービス名を使用してコマンドを実行します。
sudo lsof -i :[port number/name]

- 特定のポート範囲で開いているすべてのファイルを印刷します .
たとえば、UDP ポート範囲 1 ~ 1024 の開いているファイルを一覧表示するには、次を実行します。

開いているファイルを保持しているプロセスの ID を一覧表示する
特定のファイルを開いたプロセスの PID を表示するには、-t
を使用します ファイル名を入力してください。
lsof -t [file name]

すべてのユーザーのプロセスを強制終了
-t
フラグは、特定のユーザーによるすべてのプロセスも強制終了します。たとえば、ユーザー notsara によってすべてのプロセスを強制終了するには 、このコマンドをルートとして実行します:
# kill -9 'lsof -t -u notsara'

すべてのメモリ マップ ファイルを印刷
lsof
どのプロセスがメモリ マップト ファイルを持っているかを出力します。これらのプロセスを表示するには、次を実行します:
lsof -d mem

ロックされた削除済みファイルの表示
大きなファイルが削除された後でもプロセスによってロックされたままになり、ディスク領域が消費されることがあります。
Lsof
を使用 Linux で削除されたが、1 つまたは複数のプロセスによってまだロックされているファイルを検索します。
たとえば、スラッシュ (/
) を使用して、ルート ディレクトリから削除されたファイルを検索します。 ) パス記号として:
sudo lsof [path] | grep deleted

複数のオプションを組み合わせる
lsof
コマンドでは、コマンド ラインで複数の検索項目を使用できます。 AND を使用 および または さまざまな引数を組み合わせて特定の結果を得るロジック。以下は最も一般的な例です。
- 特定のユーザーが開いているファイルを一覧表示する または 処理:
sudo lsof -u [username] -c [process]

出力には、ユーザー saraz によって開かれた両方のファイルが表示されます およびプロセス snapd によって使用されるもの .
- 最初の検索用語と論理演算子
-a
を含む 2 番目の検索用語に一致するファイルのみを表示します (および):
sudo lsof -u [username] -c [process] -a

この場合、lsof
ユーザー saraz によって開かれたファイルのみを表示します そしてバッシュ
- ユーザーのすべてのネットワーク接続を検索:
sudo lsof -i -u [username] -a

-i
そして -a
lsof
のフラグ コマンドは、ユーザー root のすべてのアクティビティを出力します .
lsof の詳細
lsof
コマンドには、他のどの Linux コマンドよりも多くのオプションがあります。 man
ページはほぼ 2000 行の長さで、多くの情報を提供します。
コマンドの可能性を調べるには、次を実行します:
man lsof

結論
このチュートリアルでは、lsof
の使用方法を示します
実際の例を使用して、潜在的なセキュリティとシステムの問題をトラブルシューティングするためのコマンド
次に、Linux でファイルとディレクトリをコピーし、Linux の diff コマンドを使用して 2 つのファイルを比較する方法を学びます。