Lsofの概要

Linuxでは、オブジェクトが実際にファイル、デバイス、ディレクトリ、またはソケットであるかどうかに関係なく、多くのオブジェクトはファイルと見なされます。ファイルのリストは簡単lsです。そのための組み込みシェルがあります。しかし、ユーザーがWebサーバープロセスによって現在開かれているファイルを確認したい場合はどうでしょうか。または、そのユーザーが特定のディレクトリで開かれているファイルを確認したい場合はどうなりますか?それがlsof出番です。「オープンファイル」が追加さlsofれたlsと想像してください。

BSDにはこのジョブ用の別のユーティリティがありfstatますが、Unixの他のいくつかのフレーバー(Solarisなど)にもがあることに注意してくださいlsof。他のプラットフォームではオプションとフラグが異なり、出力の外観も異なりますが、通常、この記事の知識はそれらにも適用できるはずです。

まず、lsof出力の形式とそれがどのように読み取られるかを見てみましょう。lsofパラメータなしの通常の出力は次のようになります。これは読みやすくするために省略されています。

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

これらの列の意味は次のとおりです。

  • コマンド-開いているファイルが属するプロセスinit。この例では、すべてがに関連しています。
  • PID-当該プロセスのプロセス識別番号。
  • USER-プロセスが実行されるユーザー。のためinit、それはほとんど常にrootです。
  • FD-ファイルのファイル記述子。最も一般的なものは次のとおりです。
    • cwd-現在の作業ディレクトリ(現在の作業ディレクトリpwdを出力するコマンドとの類似性に気付くかもしれません)。
    • rtd -プロセスのルートディレクトリ。
    • txt-A text file、これは、プロセスに関連する構成ファイル、またはプロセスに関連する(またはプロセスに属する)「ソースコード」を意味します。
    • mem -いわゆる「メモリマップファイル」。ファイルに割り当てられている仮想メモリ(読み取り:RAM)のセグメントを意味します。
    • 数字-数字は実際のファイル記述子を表し、数字の後の文字はファイルが開かれているモードです。
    • r - 読んだ。
    • w - 書く。
    • u - 読み書き。
  • TYPE-ファイルの実際のタイプを指定します。最も一般的なタイプは次のとおりです。
    • REG -通常のファイル。
    • DIR -ディレクトリ。
    • FIFO - 先入先出。
  • DEVICE-ファイルを保持するデバイスのメジャー番号とマイナー番号。
  • SIZE-ファイルのサイズ(バイト単位)。
  • NODE-ファイルのiノード番号。
  • NAME-ファイルの名前。

これは今のところ少し圧倒されるかもしれませんが、lsof数回作業すると、すぐに脳に沈みます。

上���のとおり、lsofここではの出力が短縮されています。引数やフィルターがないと、lsof何百行もの出力が生成され、混乱するだけです。

その問題を解決するには、2つの基本的なアプローチがあります。

  • 1つ以上のlsofコマンドラインオプションを使用して、結果を絞り込みます。
  • たとえば、出力をパイプ処理しますgrep

後者のオプションは、lsofコマンドラインオプションを覚える必要がないので、より快適に聞こえるかもしれませんが、一般にそれほど柔軟で効率的ではないため、最初のオプションに固執します。

お気に入りのテキストエディターでファイルを開き、別のプログラムが既にアクセスしているため、テキストエディターはファイルを読み取り専用モードでのみ開くことができると通知するとします。lsof加害者が誰であるかを見つけるのに役立ちます:

lsof /path/to/your/file

これにより、次のような出力が生成されます。

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

どうやら、古いセッションを閉じるのを忘れました!NFS共有をマウント解除しようとumountすると、マウントされたフォルダーにまだアクセスしているためにマウントできないという非常に類似した問題が発生します。繰り返しlsofますが、原因を特定するのに役立ちます。

lsof +D /path/to/your/directory/

末尾のスラッシュに注意してください。これは重要です。それ以外の場合lsofは、通常のファイルを意味すると見なされます。+フラグの前にあると混同しないでください。一般的なlsofオプション+に加えて、必要なコマンドラインオプションが多数あります-。出力は次のようになります。

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

これは、ユーザーに属するプロセスmocpがPIDを5637使用しmusicて、というファイルを開いたことを意味しますRMS_GNU_SONG.ogg。ただし、そのプロセスを閉じた後でも、まだ問題があります-NFSボリュームをアンマウントできません。

lsof-c任意のプロセス名で開かれたファイルを表示するフラグがあります。

lsof -c mocp

これにより、次のような出力が生成されます。

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

この例では、mocprunningの別のインスタンスがあり、共有をアンマウントできません。そのプロセスをシャットダウンした後、ユーザーmusicが他の潜在的に問題のあるファイルを開いていないことを確認する必要があります。特定のユーザーが開いたファイルを表示するためlsof-uフラグがあります。ファイルがハードディスク上の通常のファイルであるとは限らないことに注意してください。

lsof -u music

複数のユーザーをカンマで区切って渡すこともできます。

lsof -u music,moremusic

のデフォルトの動作に関する重要な注意lsof:結果はORベースです。musicつまり、ユーザーまたはユーザーが所有するプロセスによって開かれたファイル結果が表示されますmoremusic。両方のユーザーが所有するプロセスと一致する結果を表示する場合は、フラグを渡す必要があります-a

lsof -au music, moremusic

両方のユーザーがグループに属しているため、グループmusicusersに基づいてファイルを一覧表示することもできます。

lsof -g musicusers

コマンドラインフラグを組み合わせることもできます。

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

最後の行で^、論理NOTを表す別の特別なフラグ-を追加しました。そのコマンドの実行後に出力が空の場合、アンマウントはおそらく成功します。

前の例では、主に通常のファイルを調べました。ソケットとネットワーク接続はどうですか?

現在のネットワーク接続をすべてリストするにlsofは、次の-iフラグがあります。

lsof -i

出力はこれまでに見たものに似ています...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... 1つの違いを除いて:ファイル名やディレクトリの代わりに、列にNAME接続情報が表示されるようになりました。各接��は、次の部分で構成されています。

  • プロトコル。
  • ローカルホスト名。
  • 接続の送信元ポート。
  • 宛先DNS名。
  • 宛先ポート。
  • 接続のステータス。

他の多くのツールと同様に、DNS名とポート(-nおよび-P、それぞれ)の解決をオプトアウトできます。フラグ-iは追加のパラメーターを取ります。あなたは、表示するかどうかを指定することができtcpudpまたはicmp接続または特定のポートを:

lsof -i :25
or
lsof -i :smtp

この場合も、パラメータを組み合わせることができます。次の例...

lsof -i tcp:80

...ポート80を使用したTCP接続のみが表示されます。「クラシック」ファイルからすでに知っているオプションと組み合わせることもできます。

lsof -a -u httpd -i tcp

これにより、ユーザーが開いているすべてのTCP接続が表示されますhttpd-aフラグに注意してください(これは、lsof前述のように)のデフォルトの動作を変更します。ほとんどのコマンドラインツールと同様に、非常に深く理解できます。以下は、状態が「確立」であるTCP接続のみを示します。

lsof -i -s TCP:ESTABLISHED

この時点で、lsofいくつかの一般的な使用例とともに、動作の基本について理解しているはずです。詳細についてlsofは、システムののマンページを参照してください。



Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。