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

7Linuxでのlsofコマンドの例

ある時点で、プロセスまたはユーザーによって開かれたファイルを表示する方法があるかどうか疑問に思ったことがあると思います。良いことは、その質問に対する答えがlsofコマンドであるということです。

lsコマンドが「list」の略であることはすでにご存知でしょう。 lsofは「ListOpenFiles」の略です。そして、それはまさにそれが行うことであり、プロセス、ユーザー、およびプロセスIDごとに開いているファイルを一覧表示します。

lsofコマンドの最も一般的な使用法のいくつかを紹介します。

lsofコマンドの例

オプションと引数を指定せずにlsofコマンドを使用すると、システム内のすべてのプロセスによって開かれているすべてのファイルが一覧表示されます。

lsof

出力は次のようになります:

COMMAND     PID   TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME

systemd       1                   root  cwd       DIR              252,1      4096          2 /

systemd       1                   root  rtd       DIR              252,1      4096          2 /

systemd       1                   root  txt       REG              252,1   1595792      17384 /lib/systemd/systemd

systemd       1                   root  mem       REG              252,1   1700792       2077 /lib/x86_64-linux-gnu/libm-2.27.so

出力はほとんど自明ですが、FD列とTYPE列について疑問に思うかもしれません。

FDはファイル記述子を意味します。 FDの一般的な値のいくつかは次のとおりです。

  • cwd –現在の作業ディレクトリ
  • txt –テキストファイル
  • mem –メモリマップトファイル
  • mmap –メモリマップドデバイス
  • NUMBER –実際のファイル記述子。また、開いているファイルのアクセス許可に関する情報もあります。

TYPEは簡単です。ファイルタイプを指定します。次にいくつかの例を示します。

  • REG –通常のファイル
  • DIR –ディレクトリ
  • CHR –キャラクター特殊ファイル
  • FIFO –先入れ先出し

私を信じて。引数なしでlsofコマンドを実行することは望ましくありません。

なぜ私はこれを言うのですか?画面に何千もの結果が殺到し始めるからです。

Ubuntuサーバーでlsofコマンドを実行し、wcコマンドで行数を数えると、結果は次のようになります。

lsof | wc -l
11432

はい!それは正しい。システム内のさまざまなプロセスによって開かれたファイルは11,000を超えています。

心配しないで。 lsofコマンドは、どのプロセスがどのファイルを開き、どのファイルがどのプロセスによって開かれるかを確認できるため、デバッグに非常に役立ちます。

rootとしてログインしていない場合、lsofコマンドの出力は非常に制限されます。 root以外のユーザーとしてログインしている場合は、sudoを使用することをお勧めします。

1。ファイルを開いたすべてのプロセスを一覧表示します

これは簡単です。ファイルへのパスを指定するだけです。

lsof <path_to_file>

2。ユーザーが開いたすべてのファイルを一覧表示します

これは、マルチユーザー環境で役立ちます。次の方法で、特定のユーザーが開いたすべてのファイルを一覧表示できます。

lsof -u <user_name>

次のように複数のユーザーを指定することもできます:

lsof -u user1, user2

またはこのように:

lsof -u user1 -u user2

3。ディレクトリ内の開いているすべてのファイルを一覧表示する

特定のディレクトリでどのファイルが開かれたか疑問に思っている場合は、+Dオプションを指定してlsofコマンドを使用できます。

lsof +D <path_to_directory>

検索は再帰的です。そのため、上記のディレクトリで開いているすべてのファイルとそのすべてのサブディレクトリが一覧表示されます。

4。プロセスごとに開いているすべてのファイルを一覧表示する

この場合、プロセスID(pid)を知っている必要があります。プロセスIDがわかっている場合は、lsofコマンドの-pオプションを使用して、プロセスIDによって開かれているファイルを見つけることができます。

lsof -p <pid>

複数のプロセスIDを指定することもできます。

lsof -p pid1, pid2, pid3

5。コマンドによって開かれたすべてのファイルを一覧表示します

これは、デバッグに特に役立ちます。 httpデーモンで使用されているファイルを確認したい場合は、コマンド名(この例ではhttpd)を指定するだけです。

lsof -c <command>

6。ユーザーとコマンドまたはプロセスによって開かれた検索

–aオプションを使用して、ユーザーやコマンドなどのオプションとプロセスを組み合わせることができます。 AND演算子と考えてください。これにより、検索を絞り込もうとしているときに、追加のフィルターが提供されます。

lsof -a -u user_name -c command_name

7。 lsofコマンドを使用してネットワーク接続とポートを一覧表示する

lsofコマンドを使用して、開いているポートを検索したり、ポートを使用しているプロセスを検索したりすることもできます。

-iオプションを使用すると、開いているすべての種類のポートをファイリングできます。

lsof -i

出力は次のようになります:

lsof -i
 COMMAND     PID            USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
 sshd        920            root    3u  IPv4    20507      0t0  TCP *:ssh (LISTEN)
 sshd        920            root    4u  IPv6    20535      0t0  TCP *:ssh (LISTEN)
 docker-pr  1163            root    4u  IPv6    21687      0t0  TCP *:https (LISTEN)
 docker-pr  1175            root    4u  IPv6    21717      0t0  TCP *:http (LISTEN)
 sshd       7528            root    3u  IPv4 39506588      0t0  TCP testing:ssh->212.91.91.19:58904 (ESTABLISHED)
 systemd-r 10993 systemd-resolve   12u  IPv4 20901990      0t0  UDP localhost:domain 
 systemd-r 10993 systemd-resolve   13u  IPv4 20901991      0t0  TCP localhost:domain (LISTEN)

ネットワーク接続の種類を指定することもできます。たとえば、開いているすべてのTCPポートを一覧表示するには、次を使用できます。

lsof -i tcp

特定のポートを使用しているプロセスを見つけるには、ポート番号を指定できます。

lsof -i :<port_number>

ボーナスのヒント:lsofで否定演算子を使用する

否定演算子を使用して、lsofコマンドの使用中にユーザーまたはプロセスを除外できます。

たとえば、root以外のユーザーが開いたすべてのファイルを一覧表示する場合は、次のように使用します。

lsof -u ^root

lsofコマンドは、grepコマンドと一緒に使用するとさらに便利になります。

この記事で何か新しいことを学んだことを願っています。ご質問やご提案がございましたら、下にコメントを残してください。


Linux
  1. Linux での rm コマンドの例

  2. Linux での ps コマンドの例

  3. Linux での sa コマンドの例

  1. w Linux でのコマンド例

  2. Linux での ac コマンドの例

  3. Linux での df コマンドの例

  1. 7 Linux df コマンドの例

  2. 8 Linux TR コマンドの例

  3. Linux での du コマンドの例