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

lsof:コマンドが見つかりません

ファイルが使用されていると表示されているため、ディスクをアンマウントできない状況に直面することがありますが、それがどのファイルを参照しているのか理解できません。このような状況では、システム上で実行されているプロセスによってどのファイルが開かれているかを確認できます。

これは、開いているファイルのリストを意味する lsof コマンドを使用して行うことができます。 Linux は、ディレクトリ、デバイス、ソケットなどを含むすべてをファイルと見なすため、lsof を使用して、開いているすべてのファイルを簡単に識別できます。

lsof を実行すると、システム上のアクティブなプロセスに属するすべての開いているファイルが一覧表示されます。出力が長い場合は、less コマンドを使用して出力をスクロールできます。

# lsof | less

表示される出力には、ファイルの理解を深めるために、コマンド、PID、ユーザー、FD、タイプ、デバイスなどの列があります。 FD 列には、現在の作業ディレクトリ (CWD)、ルート ディレクトリ (RTD)、プログラム テキスト (TXT) など、ファイルの説明に関する情報が含まれています。 FD 列に 0u、1u などの情報が含まれている場合、数字は実際のファイル記述子を表し、アルファベットはさまざまなモード (読み取りアクセス、書き込みアクセス、読み取り/書き込みアクセス) を表します。

lsof コマンドの実行中に以下のエラーが発生した場合:

lsof: command not found

ypu は、選択したディストリビューションに従って、以下のパッケージをインストールできます。

分布 コマンド
OS X brew install lsof
Debian apt-get install lsof
Ubuntu apt-get install lsof
アルパイン apk add lsof
Arch Linux pacman -S lsof
カリ Linux apt-get install lsof
CentOS yum install lsof
Fedora dnf install lsof
Raspbian apt-get install lsof

よく使う lsof オプション

  • -c x :実行可能ファイルが x で指定された文字で始まるプロセスによって開かれているファイルのみを表示します。
  • -i x :開いているファイルを表示する代わりに、インターネット アドレスが x であるソケットを表示します。 x が指定されていない場合は、すべての IP 接続を表示します。これは、netstat –anp と機能的に同等です。
  • -u ユーザー名 :username が開いているファイルのみを表示します。
  • -P :ポート番号をポート名に変換しないでください (たとえば、smtp の代わりに 25 を表示します)。

lsof コマンドの例

lsof コマンドを実行するだけで、システム上で開いているすべてのファイルのリストが表示されます。 -u オプションを使用してユーザー名を指定すると、特定のユーザーが開いているファイルのリストが取得されます。 -i オプションを使用してポート番号を指定すると、そのポートで実行されているプロセスに関する情報が取得されます。特定のユーザー名で -i オプションと -u オプションの両方を使用すると、そのユーザーがアクセスしているファイルとコマンドに関する情報が取得されます。

1. 特定のファイルを開いているプロセスを見つけます:

# lsof path/to/file

2. ローカル インターネット ポートを開いたプロセスを見つけます:

# lsof -i :port

3. プロセス ID (PID) のみを出力:

# lsof -t path/to/file

4. 特定のユーザーが開いたファイルを一覧表示します:

# lsof -u username

5. 指定されたコマンドまたはプロセスによって開かれたファイルを一覧表示します:

# lsof -c process_or_command_name

6. PID を指定して、特定のプロセスによって開かれたファイルを一覧表示します。

# lsof -p PID

7. ディレクトリ内の開いているファイルを一覧表示する:

# lsof +D path/to/directory

8. ローカル IPv6 TCP ポートでリッスンしているプロセスを見つけ、ネットワークまたはポート番号を変換しない:

# lsof -i6TCP:port -sTCP:LISTEN -n -P

9. ホーム ディレクトリが開かれているプロセスを一覧表示します。

# lsof ~

10. ホーム ディレクトリで開いているすべてのファイルを一覧表示します。

# lsof +D

11. 名前が「i」で始まり、所有者が「geek」であるプロセスによって開かれたファイルを一覧表示します。

# lsof -a -c i -u geek

12. TCP ポート 80 を使用してファイルを一覧表示し、lsof が終了するまで 2 秒ごとに繰り返します。

# lsof -i TCP:80 -r 2

結びの言葉

lsof は、開いているファイルを一覧表示します。 Linux ではすべてがファイルであるため、このツールは実行中のシステムに関する膨大な量の情報を教えてくれます。主に、どのプロセスがどのファイルを開いているかを知るために使用されますが、特に TCP および UDP 接続情報を表示するためにも使用できます。


Linux
  1. ifrename:コマンドが見つかりません

  2. dpkg:コマンドが見つかりません

  3. netstat:コマンドが見つかりません

  1. kubectl:コマンドが見つかりません

  2. tvservice:コマンドが見つかりません

  3. ln:コマンドが見つかりません

  1. nc:コマンドが見つかりません

  2. サブスクリプション マネージャー:コマンドが見つかりません

  3. dnf:コマンドが見つかりません