はじめに
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 つのファイルを比較する方法を学びます。