はじめに
彼らのキャリアのある時点で、誰もが問題のトラブルシューティングを行う予定です。そして、誰もが使用するお気に入りのトラブルシューティング手順を持っています。多くのシステム管理者にとって、最初に行うべきステップは、すべてが最新であることを確認することです。他の人にとっては、解決策を見つける前にログファイルをチェックするだけです。ここAtlantic.Netにいる私や他の人にとって、それはlsofです。さまざまなプロセスによって開かれたファイルに関する情報を一覧表示するために使用されるコマンドラインユーティリティ。
主にネットワーク接続の問題のトラブルシューティングに使用されるlsofは、強力でありながらあまり知られていないアプリケーションです。一般的なLinuxコマンドに精通している場合、lsofは「開いているファイルを一覧表示」するため、覚えやすいツールです。
前提条件
lsofはUnix固有のコマンドです。システム情報の識別に使用するには、CentOSやUbuntuなどのUnixスタイルのシステムを使用する必要があります。 lsofはこれらのシステムにプリインストールされています。
Windowsシステムを使用している場合は、Process Explorerメニュー、およびnetstatコマンドとsysinternalsコマンドの両方を使用して同様の結果を得ることができます。
lsof使用フラグ
理解しておくべき重要なことの1つは、lsofには、受信する出力を変更するために使用できる多数の使用可能なフラグがあるということです。以下に、使用可能なすべてのフラグを示します。
[example@unixlinux.online ~]# lsof --help usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s] [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
各フラグを確認するのははるかに長い記事になるため、物事をシンプルに保ち、最もよく使用される日常のオプションのみを取り上げます。
キーオプションフラグ
特にデフォルトでは、lsofがどのように機能するかを理解することが重要です。 lsofコマンドにオプションを渡す場合、デフォルトの動作はまたはです。 結果。これは、-i
の両方を使用してlsofを実行することを意味します -p
と同様に フラグを立てると、両方の結果が得られます。
これらは、トラブルシューティングで最も頻繁に使用されるフラグです:
default : with no options flags, lsof lists all open files for active processes grouping : it's possible to group options, such as passing the flags though -nPi. Just keep an eye out for which options take additional parameters -a : AND the result (instead of the default OR) -l : show the userID instead of the username in the output -h : get help -i : selects the listing of files that match -n : stop host name resolution of network numbers -t : get process IDs only -P : stop conversion of port numbers to port names
はじめに
開いているすべてのファイルを一覧表示します。
# lsof

開いているすべてのファイルを一覧表示します。
すべての接続を表示する:
# lsof -i

すべての接続を表示
テストしているサーバーは、追加のソフトウェアパッケージがインストールされていない新しいAtlantic.NetCentOS6サーバーです。上記の出力から、サーバーがSSHおよびSMTPトラフィックのみをリッスンしていることがわかります。サービス名の代わりに実際のポート番号を確認したい場合は、-Pi
を使用してコマンドを実行する必要があります フラグ:
lsof -Pi

サービス名を解決せずにポートをリッスンしているすべての接続を表示します。
ご覧のとおり、すべての *:ssh およびlocalhost:smtp 出力は*:22に変換されました およびlocalhost:25 。ほとんどのシステム管理者にとって、特にシステムサービスの調査と分析に慣れていない場合は、サービス名を使用する代わりにポートを直接特定することで、問題のトラブルシューティングが容易になることがよくあります。
IPv6ポートの接続を表示する:
lsof -i6

IPv6ポートの接続を表示する
lsof -i
との比較 以前のコマンドでは、このコマンドは特に TYPEのサービスを検索します IPv6 。
サービス名を解決せずに特定のポートの接続を表示する:
lsof -Pi :25

サービス名を解決せずに特定のポートの接続を表示する
ポート25でリッスンしている現在のすべてのプロセスを具体的に調べると、システム上に2つの現在のプロセス(1つはIPv4、もう1つはIPv6)が実行されていることがわかります。これらのプロセスはどちらも外部接続をリッスンしていません。
リスニングポートを表示する:
lsof -i -sTCP:LISTEN

リスニングポートを表示する
このコマンドは、 LISTENにある実行中のすべてのプロセスを一覧表示します 状態、つまり、着信接続を積極的にリッスンしています。
ファイルを使用しているユーザーを表示する:
lsof /path/of/file
上記のコマンドから、2つのプロセスがアクティブに実行されて / var /log/を使用していることがわかります。メッセージ 何らかの方法でファイルします。
ディレクトリ内の開いているすべてのファイルを再帰的に表示します:
lsof +D /usr/lib

ディレクトリ内の開いているすべてのファイルを再帰的に表示する
テストシステムでは、+D
を使用します フラグは、 / usr / libから発生する6つの個別のオープンプロセスを示します。 ディレクトリ。
開いているファイルをユーザー別に表示する:
lsof -u atlantic-noc

ユーザーごとに開いているファイルを表示する
atlantic-nocユーザーは、プロセスID(PID)が7769のアクティブなSSHセッションを持っています。
特定のプロセスIDで開いているすべてのファイルを表示する:
lsof -p 7790

特定のプロセスIDを持つ開いているファイルをすべて表示する
-p
オプションは開いているファイルを除外して、指定されたプロセスIDを持つファイルのみが表示されるようにします。この場合、PID7790です。-p 7789,7790
のようにカンマを指定すると、複数のPIDを選択できます。
特定のユーザーのすべてのネットワークアクティビティを表示する:
lsof -a -u atlantic-noc -i
-a
フラグは、-u
を組み合わせます(デフォルトのOR動作をANDに変更します) および-i
ユーザーatlantic-nocのネットワークファイル使用量のリストを提供するフラグ。この場合、SSHセッションは1つだけです。
他に何かありますか?
上記のコマンドは、lsofのほんの始まりにすぎません。単独で使用することも、straceなどの他のUnixトラブルシューティングツールと組み合わせて使用することもできる多用途のツールです。しかし、それはまた別の記事です。
この記事の更新、その他のLinux関連の投稿、さらにUnixコマンドの入門書については、ブログを確認するか、信頼性の高いVPSホスティングサービスの詳細を確認してください。