lsofコマンドの使い方:ネットワーク管理の基本Tipsプロセスが開いているファイルを表示するコマンド「lsof」は、プロセスやソケットなどのあらゆる情報をファイルの形で管理するUNIX/Linuxの特性を生かしたもの。プロセスが使用するポートの調査に役立ちます。本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、プロセスが開いているファイルを調べる際に使う「lsof」コマンドを紹介します。Linux(RHEL)」および「CentOS」環境で動作を確認しています。4)ネットワークを前提にしています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。]は省略可能な引数を示しています。|で区切った項目は、どちらか一つを指定します。Files」(開いているファイル群を列挙する)という言葉に由来します。その名の通り、「プロセスが開いているファイル」を表示するコマンドです。UNIX/Linuxでは、一般的なファイルだけでなく、ネットワークソケットやデバイスドライバー、プロセス情報なども「ファイル」として扱います。そのため、開かれているファイルを調べることで、待機ポートやネットワークのマッピング情報などを把握できます。lsofコマンドによって「あるファイルを開いているプロセス」「あるポートにアクセスしているプロセス」を特定し、「不要なプログラムが実行されていないか」「不正なプログラムが動作していないか」を調べることができます。引数にファイルを与えて実行すると、そのファイルを使用中のプロセスID(PID)の一覧が出力されます。目次に戻るlsofコマンドの主なオプションlsofコマンドの主なオプションは次の通りです(表1)。主なオプションオプション意味-Pポート番号をサービス名に変換しない-cプロセス名を指定する-iネットワークソケットファイルを表示する-nIPアドレスを表示する(名前解決しない)-pプロセスIDを指定する「-c」オプションに続けてプロセス名を指定すると、そのプロセスが開いているファイルを特定できます。プロセス名ではなくPIDで絞り込む場合には、「-p」オプションを利用します。待機ポートを確認する場合は、「-i」オプションを利用します。引数を指定しない場合は、全てのポートを対象に使用の有無を確認できます。ポートで絞り込む場合は、「i:XXXX」の要領でポート番号を指定します。lsofコマンドで表示できるファイル/ポートは、lsofコマンドを実行するユーザーに対し読み取り権限が与えられているものに限られます。ネットワークソケットファイルは一般ユーザーに対し読み取り権限が与えられていないため、多くの場合はrootまたはsudoコマンドと組み合わせて、管理者権限で実行します。目次に戻る待機ポートとプロセスを確認するには?ローカルホストの待機ポートとプロセスを一覧する場合は、ネットワークソケットファイルを表示するオプション「-i」を引数なしで実行します。このとき、IPアドレスをホスト名に変換しないように「-n」オプションを、ポート番号をサービス名に変換しないように「-P」オプションを併せて指定すると、高速に結果が得られます。出力される項目の内容と意味は表2の通りです。意味COMMAND実行中のプログラムPIDプロセス番号USER実行ユーザーFDファイルディスクリプター(/proc/<PID>/fd)TYPEファイル種別DEVICEデバイス番号SIZE/OFFファイルサイズNODEプロトコルNAMEファイルまたはポート待ち受け状態のポートは「(LISTEN)」と表示されています。下の実行例では、Sambaサーバーのデーモン(smbd)が待ち受け状態になっており、該当のポートとプロセスIDが分かります。目次に戻る特定のポートで実行中のプロセスを調べるには?特定のポート番号で実行中のプロセスを調べる場合には、「-i:XX」の要領で「-i」オプションに続けてポート番号を指定します。sshdは22番、httpdは80番などと主要なサービスにはポート番号が割り当てられているため(ウェルノウンポート)、通常はその番号を指定します。「-i」オプションではポート番号だけでなく、サービス名も指定できます。sshに関するサービスを調べる場合は「-i:ssh」の要領で指定します。下の実行例では、22番ポートで実行中のプロセスを表示しています。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。