lsofコマンドは、管理者およびパワーユーザーにとって最も魅力的なLinuxターミナルコマンドの1つです。 lsofという名前は「開いているファイルのリスト」の略で、何らかのプロセスで開かれたすべてのファイルに関する情報を提供します。開いているファイルは、通常のファイル、ディレクトリ、ネットワークストリーム、実行中の参照、ブロックファイルなど、いくつかのファイルタイプを参照する場合があります。 lsofの最も一般的な使用法は、システムの問題のデバッグです。 Linuxネットワーク管理者は、ネットワークの問題をトラブルシューティングするときにlsofにも依存しています。私たちの編集者は、ユーザーがこのコマンドをより詳細に学習できるように、40のシンプルで非常に便利なlsofの例を選択しました。
Linuxで最も役立つ「lsofコマンド」
Linuxファイルシステムはシステム内のすべてのものをファイルと見なすため、ファイルをより適切に制御する必要があります。 lsofユーティリティを使用すると、これを実行でき、デバッグに役立つさらに多くの追加情報が提供されます。ネットワーク管理者は、lsofを使用して、開いているネットワークソケットを確認し、この情報を使用してネットワークセキュリティを強化できます。
1。開いているファイルをすべて一覧表示する
最も単純な使用法では、lsofは現在開いているすべてのファイルを出力します。不明なファイルがたくさん表示されても、慌てないでください。これらは、基盤となるプロセスとLinuxカーネルによって作成されたシステムファイルです。出力情報は、COMMAND、PID、USER、FD、TYPEなどのいくつかの列に分割されています。
$ lsof $ lsof |少ない
COMMANDはファイルを呼び出したプログラムを示し、PIDはプロセスIDを示し、TYPEはファイルタイプを示し、FDはファイル記述子を示します。このガイドを進めていくと、それらについて詳しく知ることができます。
2。カーネルブロックの抑制
上記のコマンドの出力には、カーネルによって開かれる多くのブロックファイルが含まれており、技術者以外のほとんどのユーザーにはほとんど意味がありません。幸い、lsofを使用すると、 -bを使用してこれらのファイルを抑制できます。 オプション。
$ lsof -b---
これで、lsofはカーネルブロックの一覧表示を回避し、 statのようなコマンドを保証します。 、 lstat 、および読み取りリンク 問題なく動作します。低レベルのシステムファイルなどを操作する場合は、このオプションを使用する必要があります。
3。ユーザー名に基づいてファイルを一覧表示する
lsof Linuxコマンドを使用して、特定のユーザーの開いているすべてのファイルを簡単に一覧表示できます。 -uを追加するだけです オプションの後にユーザー名を続けます。
$ lsof -u abc
このコマンドは、ユーザーが開いたファイルを一覧表示します abc 。カンマ区切りのリストを使用して、複数のユーザー名を同時に使用することもできます。ただし、ユーザー名の間にスペースがあると失敗します。
$ lsof -u aaa、bbb、ccc
これで、3人の仮想ユーザーによって開かれたファイルが一覧表示されます。 ^(否定)を追加することもできます ユーザー名の前の演算子。これにより、lsofはそれらのユーザーによって開かれたファイルを省略します。
$ lsof -u ^ xyz
4。ネットワークファイルの一覧表示
ネットワークファイルは、TCP / IPスタック、つまりソケットに関連付けられたファイルです。 -iを使用できます lsofを使用して現在開いているすべてのネットワークファイルを一覧表示するオプション。
$ lsof -i
タイプと関連するプロトコルとともにすべてのネットワークファイルを印刷します。 -i4を使用する または-i6 IPv4ファイルとIPv6ファイルのいずれかを一覧表示します。
$ lsof -i4 $ lsof -i6
5。すべてのTCP/UDPファイルを一覧表示する
以下のコマンドは、現在開いているすべてのTCPおよびUDPプロセスを出力するためにlsofを使用する方法を示しています。 TCPまたは伝送制御プロトコルは、最新のネットワークで使用されている事実上の通信プロトコルです。すべてのTCPプロセスを一覧表示するには、次のコマンドを使用します。
$ lsof -i TCP
UDPまたはユーザーデータグラムプロトコルは、低遅延のデータ転送に使用されるステートレスプロトコルです。次のコマンドを使用して、lsofを使用するすべてのUDPプロセスを一覧表示できます。
$ lsof -i UDP
6。特定のポートで実行されているプロセスを一覧表示する
-i オプションを使用すると、管理者は特定のポートで実行されているすべてのファイルを一覧表示することもできます。これはネットワークのトラブルシューティングに役立ち、管理者が堅牢なLinuxiptablesルールを定義できるようにします。
$ lsof -i TCP:22
このコマンドは、TCPポート22で実行されているプロセスを一覧表示します。sshデーモンは通常、ポート22で実行されます。他のポートも確認できます。次のコマンドは、ポート443で実行されているすべてのプロセスを検索します。
$ lsof -i TCP:443
7。さまざまなポートで実行されているプロセスを一覧表示する
次のコマンドは、指定された範囲のポートで実行されているプロセスによって作成されたすべてのファイルを一覧表示します。範囲を定義するだけで、lsofはこれらのポート番号のいずれかに関連付けることができるすべてのファイルを出力します。
$ lsof -i TCP:1-1024
これで、lsofは1〜1024のTCPポートで実行されているプロセスを検索し、これらのプロセスによって作成されたすべてのアクティブなファイルを一覧表示します。
8。 PIDを使用してファイルを一覧表示する
PIDまたはプロセスIDは、オペレーティングシステムプロセスのタグ付けに使用される一意の識別子です。 lsofコマンドを使用すると、管理者はPIDに基づいてファイルを検索および一覧表示できます。次のコマンドは、プロセスID1に関連付けられているすべてのファイルを一覧表示します。
$ lsof -p 1
カンマ区切りのリストを使用して、複数のPIDを指定することもできます。ただし、空白を使用しないでください。使用しないと、コマンドが期待どおりに機能しません。
$ lsof -p 1,2,3、^ 111
このコマンドは、プロセス1、2、および3によって開かれたすべてのファイルを一覧表示します。プロセス111によって開かれたファイルは省略されます。
9。特定のファイルシステムのファイルを一覧表示する
Linuxファイルシステム階層は非常に堅牢であり、管理者はそれらに対してさまざまな操作を実行できます。 Linuxでlsofコマンドを使用すると、以下に示すように、特定のファイルシステムで開いているすべてのファイルを印刷できます。
$ lsof / proc $ lsof / run / $ lsof / sys /
/ proc ディレクトリには、アクティブに実行されているプロセスに関する情報が含まれています。 LinuxおよびBSDディストリビューションのlsofを使用して、この情報を簡単に調べることができます。
10。 Unixドメインソケットの一覧表示
lsofユーティリティを使用すると、すべてのUnixソケットファイルまたはIPC(プロセス間通信)ソケットを一覧表示できます。これらのファイルにより、ホストはマシン内の他のプロセスと通信できます。以下の例をざっと見て、これが実際にどのように機能するかを確認してください。
$ lsof -U
個別のプロセスIDを持つすべてのUnixソケットファイルを検索するには、次のlsofコマンドを使用します。
$ lsof -U -a -p 18250
18250を、調べたいプロセスのPIDに置き換えます。同じPIDを含むすべてのUnixドメインソケットが表示されます。
11。すべてのアクティブなPIDを一覧表示する
lsofユーティリティを使用すると、管理者はPIDを使用して現在実行中のすべてのプロセスを一覧表示することもできます。これは、結果をLinuxのkillコマンドにパイプするなど、さまざまな状況で役立ちます。
$ lsof -t $ lsof -t -i
最初のコマンドは、通常のlsofを実行してから、PIDを除くすべての出力フィールドを省略します。 2番目のバリアントは、ネットワークプロセスのPIDのみを表示します。特定のPIDをgrepして、他のコマンドにフィードするだけです。
12。デバイスに基づいてファイルを一覧表示する
デバイスファイルは、LinuxおよびBSDシステムの特殊なタイプのファイルです。これらは通常、さまざまなデバイスドライバへのインターフェイスとして機能し、通常のファイルのようには動作しません。次の例は、特定のデバイスで開いているすべてのファイルを一覧表示する方法を示しています。
$ lsof / dev / sda9 |少ない
lsblkを使用してブロックデバイスを一覧表示できます 指図。最新のLinuxディストリビューションのほとんどは、これらのファイルを / devに保持しています。 ディレクトリ。
13ターミナルファイルの一覧表示
/ dev ディレクトリには、 / dev / ttyなどの特別なデバイスファイルも含まれています 。これらは、特定のプロセスの端末へのアクセスを提供する一意のデバイスファイルです。 lsofを利用して、端末に関連付けられている開いているすべてのファイルを一覧表示できます。
$ lsof / dev / tty * $ lsof / dev / tty2 $ lsof / dev / ttyS0
最初のコマンドはすべての制御端末の開いているファイルを一覧表示しますが、2番目のコマンドは特定のコンソールを対象としています。最後の例では、シリアルポート(/ dev / ttyS0)に関連付けられているファイルを一覧表示します。
14。ディレクトリ内の開いているファイルを一覧表示する
lsofコマンドを使用して、特定のディレクトリで開いているすべてのファイルを一覧表示できます。以下のコマンドは、単純ですが実用的な例を使用してこれを示しています。
$ lsof + D Documents $ sudo lsof + D〜/
最初のコマンドは、Documentsディレクトリの下にあるすべての開いているファイルを一覧表示します。 2番目のコマンドは、ホームディレクトリとそのサブディレクトリの下にあるすべての開いているファイルを一覧表示します。 2番目のコマンドは、 sudoがなくても機能します ただし、出力にいくつかの警告が表示されます。
15。ディレクトリ内の開いているファイルを再帰的に一覧表示する
上記のコマンドは、Documentsディレクトリで開かれているファイルのみを表示します。ドキュメントのサブディレクトリの下に開いているファイルは表示されません。幸い、lsofには、これを有効にするためのもう1つの便利なオプションがあります。このオプションをよりよく理解するには、以下の例をご覧ください。
$ lsof + d Documents $ sudo lsof + d〜/
このコマンドは、Documentsディレクトリ内の開いているすべてのファイルを表示してから、サブディレクトリ(存在する場合)に移動します。ドキュメントが大きく、サブディレクトリが多い場合、これには非常に時間がかかる可能性があることに注意してください。
16。プロセスに基づいて開いているファイルを一覧表示する
以前、PIDを使用して開いているすべてのファイルを一覧表示しました。ただし、プロセス名を使用して、特定の時間にアクティブなファイルのリストを印刷することもできます。以下の例を見て、お気に入りのLinuxターミナルエミュレータにこれを入力して、それらがどのように機能するかを確認してください。
$ lsof -c chrome
このコマンドは、chromeプロセスによって生成されたすべての開いているファイルを出力します。名前が文字列chromeで始まるプロセスがいくつかある可能性があることに注意してください。このコマンドは、それらすべてを出力に表示します。
17。親プロセスID(PPID)を一覧表示する
lsofユーティリティを使用すると、管理者は通常の出力フィールドと一緒に親プロセス識別番号(PPID)を一覧表示できます。以下に示すように、これを有効にするには-Rオプションを渡す必要があります。
$ lsof -R $ lsof -p [PID HERE] -R
最初のコマンドは、現在アクティブなすべてのプロセスとそのPPID情報を出力します。最後のコマンドはPID番号を取得し、そのプロセスのPPIDを表示します。
18。ファイルを開いたPIDを一覧表示する
次のコマンドは、特定のファイルを開いたすべてのプロセスIDを一覧表示します。ここでは-tを使用しています 以前に導入されたオプション。
$ lsof -t /usr/share/mime/mime.cache
-tオプションはPIDのみを提供するため、期待される出力を生成するためにそれを活用します。このコマンドは、 /usr/share/mime/mime.cacheを開いたすべてのプロセスIDを一覧表示します。 ドキュメント。
19。ファイル記述子に基づいてファイルを一覧表示する
ファイル記述子に基づいて開いているファイルを一覧表示するようにlsofに指示できます。次のコマンドは、FD(File Descriptor)フィールドがcwd(Current Working Directory)として設定されている現在開いているすべてのファイルを検索する方法を示しています。
$ lsof -d cwd $ lsof -u xyz -d cwd -a
最初のコマンドは、現在の作業ディレクトリの下にあるすべての開いているファイルを出力します。 2番目のコマンドは、ユーザーxyzに属するファイルを一覧表示します。 -a このビットにはオプションが必要であり、このオプションがないとコマンドは期待どおりに機能しません。
20。他のプログラムの出力を表示する
lsofコマンドを使用すると、管理者はawk、Perl、Cプログラミング言語などの外部ツールを使用して解析するための出力を生成できます。 -Fに合格する必要があります フィールド識別用の文字リストと一緒のオプション。
$ lsof -F $ lsof -FucsS
最初のコマンドは、リダイレクト演算子(> )を使用して保存できる便利な出力を生成します )そして後で解析されます。 2番目の例では、プロセスコマンド名、ユーザーID、ストリームID、サイズなどの追加データに対応するために出力を変更します。
21。失敗したアイテムのリスト
多くの場合、lsofはユーザーが要求したいくつかのアイテムを見つけることができません。 lsofによって生成される出力は非常に広範囲にわたるため、これらのアイテムを見つけるのは非常に困難です。幸い、 -V オプションを使用すると、lsofはこれらのアイテムを非常に便利に印刷できます。
$ lsof -V $ lsof -c ssh -c http -V $ lsof -p 12312312 -V
最初の例では、lsofが検出できなかったすべてのファイルを一覧表示します。 2番目の例は、名前がsshまたはhttpで始まるプロセスコマンドがあるかどうかを確認するために使用できます。最後の例は、 -Vの使用法を示しています プロセスID用。
22。 TCP/TPI情報を表示する
デフォルトでは、lsofはTCP/TPI接続に関する情報をほとんど提供しません。接続状態に関するレポートのみを提供します。ただし、以下に示すように、-Tオプションを利用して追加のレポート機能を有効にすることができます。
$ lsof -i -Tq $ lsof -i -Tqs
最初のコマンドは、出力にキューの長さ(q)を表示します。 2番目のコマンドは、キューの長さとともに接続状態を表示します。デフォルトは-Ts、 -Tのみを使用する場合 、すべてのTCP/TPIレポートがオフになります。
23。ポート番号変換を無効にする
-P オプションを使用すると、管理者はネットワークファイルまたはUnixソケットを検索するときにポート番号から名前への変換を無効にできます。そのようなファイルが多すぎると、かなりの時間を節約できます。
$ lsof -i -Tqs -P
このコマンドにかかる時間と、 -Pを使用しない同じコマンドにかかる時間とを比較できます。 オプション。この目的のために、timeと呼ばれる標準のLinuxターミナルツールを使用します。
$ time lsof -i -Tqs $ time lsof -i -Tqs -P
私のマシンでは、実行時間が6分の1に短縮されました。
24。ホスト名変換を無効にする
ポート名と同様に、ネットワーク番号からのホスト名変換を無効にすることもできます。ご覧のとおり、パフォーマンスも大幅に向上します。 Linuxのtimeコマンドは、これを証明するのに再び役立ちます。
$ lsof -i -n
今回は、lsofはネットワーク番号をホスト名に変換しません。次のコマンドを使用して、実行速度の変化を確認します。
$ time lsof -i $ time lsof -i -n $ time lsof -i -n -P
25。リピートモードを有効にする
Linuxのlsofコマンドは、出力コンソールを終了せずにライブ操作を監視するための便利なリピートモードを提供します。これについて詳しくは、以下の例をご覧ください。
$ lsof -r 5 -i UDP
このコマンドは、 Ctrl + C を使用してコマンドを終了するまで、5秒ごとに進行中のすべてのUDP接続を出力します。 。 + rを使用することもできます オプション。出力に追加料金がない場合は自動的に終了します。
$ lsof + r 5 -i UDP
26。 TCPポートをリッスンしているすべてのプロセスを一覧表示する
lsofユーティリティを使用して、TCPポートをリッスンしているすべてのプロセスを一覧表示できます。このタスクを実行するために、すでに示されているいくつかのパラメーターを使用します。以下の例を見て、これがどのように機能するかを理解してください。
$ lsof -nP -i TCP -s TCP:LISTEN
このコマンドは、 -nを使用したホスト名とポート名の変換を無効にします および-P 一緒にマージされるオプション。 -s オプションは、TCPポートをリッスンしているプロセスのみに関心があることをlsofに通知します。
27。プロトコルに基づいてプロセスを一覧表示する
関心のある特定のプロトコルを定義することもできます。以下のコマンドをざっと見ると、これをよりよく理解するのに役立ちます。
$ lsof -i TCP:https $ lsof -i UDP:ntp
最初のコマンドは、httpsポート(デフォルトでは443)を使用しているすべてのTCPファイルを表示します。後者のコマンドは、NTP(Network Time Protocol)ポートを使用しているすべてのUDPファイルを表示します。次のコマンドは、IPv4接続を使用しているそのようなUDPファイルをすべて表示します。
$ lsof -i4 -a -i UDP:ntp
28。 TCP/UDP接続の合計量を表示する
grepやawkなどの従来の端末ツールを使用して、アクティブなTCPまたはUDP接続の総数を出力できます。以下のコマンドは、awk、sort、およびuniqとともにこのlsofを示しています。
$ lsof -i | awk'{print $ 8}' |並べ替え| uniq -c | grep'TCP \ | UDP'
ここでは、いくつかのコマンドを使用してタスクを実行しました。 awk部分は、lsofによって提供される出力のNODEセクションを出力し、uniqは行数をカウントし、grepは指定されたパターンを検索します。パターン検索の詳細については、Linuxgrepコマンドに関するガイドをご覧ください。
29。確立されたネットワーク接続を一覧表示する
以下のコマンドは、標準のLinuxツールを使用して確立されたすべてのネットワーク接続を取得する方法を示しています。最初にすべてのネットワークファイルを一覧表示し、次にawkとgrepを使用してlsofによって提供される出力から特定のデータを抽出します。
$ lsof -i -nP | grep ESTABLISHED | awk'{print $ 1、$ 9}' | sort -u
-nP オプションは、ホスト名とポート名の変換を無効にします。プロセス全体を高速化するために使用され、必須ではありません。
30。すべてのアクティブなSSH接続を一覧表示する
lsofとgrepを使用して、システムとの間で行われたすべてのssh接続を一覧表示することもできます。次の例をざっと見て、これがリアルタイムでどのように機能するかを確認してください。
$ lsof -i TCP | grep ssh | grep ESTABLISHED $ lsof -nP -iTCP -sTCP:ESTABLISHED | grep SSH
上記のコマンドはどちらもまったく同じように機能します。ただし、 -n のようないくつかの禁止フラグを使用するため、後者の方が高速です。 および-P 。
31。ファイルアクセスに基づいてプロセスを一覧表示する
lsofコマンドを使用すると、システム管理者は、指定されたファイルを使用しているプロセスを判別することもできます。以下のコマンドは、Linuxを使用したこれを示しています。Linuxはlsofと一緒にコマンドを実行します。
$ lsof `which lsof` $ lsof` which kate`
したがって、特定のファイルをバッククォート内のlsofに渡すだけで、これを行うことができます。上記のいずれかを、検査して、それにアクセスしているプロセスのリストを取得するファイルに置き換えることができます。 -tを使用します PIDのみを取得するオプション。
$ lsof -t `which chrome` $ lsof -t` which nmap`
32。ユーザーが所有するプロセスを強制終了する
lsofは開いているファイルの所有権情報を提供するため、これを利用してターミナルからプロセスを強制終了できます。以下のコマンドは、lsofと一緒にkillコマンドを使用して、ユーザーABCが所有するすべてのプロセスを作成する方法を示しています。
$ sudo kill -9 `lsof -t -u ABC`
そのユーザーによって生成されたプロセスを正常に強制終了するには、ABCを実際のユーザー名に置き換える必要があります。最近のLinuxディストリビューションでは、 sudoが必要です。 他のユーザーのプロセスを強制終了する場合の特権。
33。正規表現を使用してファイルを表示する
lsofユーティリティを使用すると、管理者は正規表現パターンを使用して情報を除外できます。これを機能させるには、指定したパターンを2つのスラッシュ(/)の中に入れる必要があります。たとえば、次の例では、6文字を超えるすべてのコマンドが一覧表示されます。
$ lsof -c /^......*/
lsofで正規表現を使用する場合は、スラッシュが必須であることに注意してください。 6つのドットはそれぞれ単一の文字を表しますが、アスタリスク(*)は、これらの6つの文字以降が適格であることを示します。
34。 NFSを使用しているプロセスを一覧表示する
サーバー上でNFS(ネットワークファイルシステム)リソースを使用しているすべてのプロセスを簡単に一覧表示できます。 Linuxのlsofコマンドは、 -Nを公開します。 このタスクのオプション。詳細については、以下の例を参照してください。
$ lsof -N
このコマンドの出力には、マウントポイントとともにプロセスIDなどの情報が含まれます。このデータは、grepコマンドを使用して非常に簡単に抽出でき、LinuxNASおよびSANソリューションに関する問題を減らすのに役立ちます。
35。使用されたが削除されたファイルのリスト
lsofコマンドを使用すると、以前に一部のプロセスで使用され、現在削除されているファイルを判別できます。これは、Linuxdfコマンドを使用してディスク容量を確認する場合などの多くの状況で便利です。
$ lsof / var / log | grep-i"削除済み"
このコマンドは、オペレーティングシステムカーネルによって最近削除されたが、まだマシンのスペースを使用しているすべてのファイルのPIDを一覧表示します。これらのPIDを使用して、これらのプロセスを強制終了できます。
36。エントリ数を数える
lsofによって生成される出力には多くのエントリが含まれているため、それらを視覚化するのが困難になることがよくあります。このデータをwcと呼ばれる便利で便利なLinuxツールにパイプすることで、この出力に存在する行数を簡単に数えることができます。以下の例を見て、これがどのように機能するかを確認してください。
$ lsof | wc -l $ lsof -t -i -nP | wc -l </ pre>上記のコマンドは、lsofの出力をwcにフィードし、lsofの出力に存在する行の総数を表示します。
37。警告メッセージを有効/無効にする
一部のlsofコマンドは、実行時に警告メッセージを表示する場合があります。幸い、適切と思われる場合は、これらの警告を有効/無効にすることができます。 lsofの出力で警告を無効にするには、次のコマンドを使用します。
$ lsof -t -i -nP -w-w オプションは、潜在的な警告を抑制します。 + wを使用する必要があります この機能を再度有効にするためのオプション。
$ lsof -t -i -nP + wしたがって、このようにして、必要に応じて警告パラメータを設定できます。 Linuxシェルスクリプトと組み合わせて使用すると便利なことがよくあります。
38。バージョン情報を表示する
lsofユーティリティには、LinuxとBSDのバリアント間でいくつかのバリエーションがある場合があります。これらのマシンのlsofのバージョン情報を一覧表示し、リビジョン番号、コンパイル日、コンパイラのバージョンなどの有用な情報を確認できます。
$ lsof -vまた、バイナリ最終製品の構築に使用されるすべての構成パラメーターも示しています。さらに、コンパイラフラグとローダーフラグの値は、システム開発者だけでなく管理者にも役立ちます。
![]()
39。ヘルプページを表示する
lsofのヘルプページには、使用可能なすべてのコマンドラインオプションとその基本的な使用法の要約情報が含まれています。特定のオプションがわからない場合はいつでもこれを参照できます。
$ lsof --helpこのページは、lsofのパラメーターの可能なすべての組み合わせを返し、初心者と経験豊富なLinuxユーザーの両方に役立ちます。
40。マニュアルページを表示する
このマニュアルには、lsofユーティリティの詳細な説明が含まれており、使用可能なパラメータが詳細に説明されています。 lsofまたは同様のLinuxターミナルコマンドの経験がない新しいLinuxユーザーの場合は、必ずこのマニュアルを参照してください。
$ man lsofこれにより、lsofを処理し、それを日常のシステム監視タスクに使用するために必要なすべての情報が提供されます。これは新規ユーザーにとって非常に便利であり、問題が発生した場合は常にこれを参照する必要があります。
終わりの考え
Linuxのlsofコマンドは、管理者がプロセスがさまざまなファイルをどのように使用しているかを視覚化できる魅力的な監視ツールです。多くの人にとっては複雑に見えますが、このツールの使用は他の従来のコマンドラインツールと何ら変わりはありません。私たちの編集者は、この驚くべきツールで旅を始めるのに役立つ、これらの40のシンプルで実用的なLinuxの例を選択しました。うまくいけば、私たちはあなたが探していた重要な情報をあなたに提供しました。これで、lsofを自分で処理できるようになります。 lsofユーティリティに関して質問がある場合はコメントを残し、エキサイティングなLinuxコマンドに関するその他のガイドについては定期的にアクセスしてください。
Linux