【 lsof 】コマンド――オープンしているファイルを一覧表示するLinux基本コマンドTips(298)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、オープンしているファイルを一覧表示する「lsof」コマンドです。

» 2019年04月18日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、オープンしているファイルを一覧表示する「lsof」コマンドです。

lsofコマンドとは?

 「lsof」はオープンしているファイルを一覧表示するコマンドです。



lsofコマンドの書式

lsof [オプション] [パス名]

※[ ]は省略可能な引数を示しています。





lsofの主なオプション

短いオプション 意味
-a 複数のオプションを指定した際に、AND(かつ)の意味で機能させる
-u ユーザー 表示対象にしたいユーザーの名前またはユーザーIDを指定する(※1)
-p プロセスID 表示対象にしたいプロセスIDを指定する(※2)
-c 文字列 表示対象にしたいプロセスの先頭文字列を指定する(※3)
+c 文字数 プロセス名を表示する際の長さを指定する(※4)
-d 数字 表示対象にするファイルディスクリプタ(※5)
+d ディレクトリ 表示対象にするディレクトリ名(※6)
+D ディレクトリ 表示対象にするディレクトリ名(サブディレクトリ以下も対象になる)
-D デバイスキャッシュファイルを使用する
-e ディレクトリ 対象外にするディレクトリ
-i ネットワークソケットを対象にする(※7)
-T TCPの状態(LISTENなど)を表示しない
-X TCP/UDPのファイルを対象外にする(-iと同時には使用できない)
-l ユーザー名の換わりにユーザーIDを表示する
-n ホスト名の換わりにIPアドレスを表示する
-P ポート名の換わりにポート番号を表示する
-R 親プロセスのプロセスID(PPID)を表示する
-t プロセスIDのみを表示する(警告を出力しないオプション「-W」も同時に指定した扱いになる)
+L リンク数(NLINK欄)を表示する
-L リンク数(NLINK欄)を表示しない(デフォルト)
-o SIZE/OFF欄で常にオフセット(OFFSET)を表示する
+w 警告(warning)を表示する
-- オプションの区切り。「--」以降はオプションではなくファイル名として扱う

※1 指定したユーザー以外を選ばせたい場合は「^」を付けて「-u ^username」のように記述する。user1とuser2を指定したい場合は「-u user1 -u user2」のように記述する。
※2 1以外を指定する場合は「-p ^1」、1または2を指定する場合は「-p 1 -p 2」のように記述する。
※3 「-c sys」と指定すると名前がsysから始まるプロセスを選択し、「-c a -c b」と指定すると、aから始まるプロセスとbから始まるプロセスを表示する。「^」で否定し、「/文字列/」で正規表現になる。
※4 デフォルトは9、最大15。0を指定するとプロセス名全てを表示する。
※5 「-d ^5」や「-d 3-10」といった指定が可能。シェル以外のプロセスは標準入出力0〜2に続く3番以降を使用する。
※6 「+d /var/log」で、/var/log以下のファイルを対象にする。
※7 「-i」で全てのネットワークソケットを対象にする。「-i4」でIPv4、「-i6」でIPv6を指定できる。この他、「-iTCP」「-iUDP」「-i@ホスト」「-i:ポート番号」を指定可能。





現在開いているファイルを一覧表示する

 「lsof」で現在開いているファイルを一覧表示します(画面1)。

 表示する項目は、次の表の通りです。この他、オプションや対象の指定によってTID(スレッドID)や、PPID(親プロセスのプロセスID)、NLINK(リンク数)なども表示します。

項目名 内容
COMMAND ファイルを開いているプロセスのコマンド名
PID プロセスのPID
USER ユーザー名
FD ファイルディスクリプタ(※8)
TYPE 種類
DEVICE デバイス
SIZE/OFF ファイルサイズまたはオフセット
NODE iノード番号
NAME ファイル名

※8 シェル以外のプロセスは標準入出力0〜2に続く3番以降を使用する。数字の後にr(read access)、w(write access)、u(readとwrite両方)を表示する。また、プロセスによってはcwd(カレントディレクトリ)、mem(memory-mapped file)、txt(program text)などを表示することもある。



 調査対象にしたいファイルが決まっている場合は、引数で指定します。「/var/log/」など、アクセス権が必要なフォルダのファイルを調べる場合はroot権限が必要です。sudoコマンド(連載第68回)などを利用してください。

コマンド実行例

lsof

(現在開いているファイルを一覧表示する)

lsof /var/log/*

(「/var/log/*」で開いているファイルを一覧表示する)(画面1


画面1 画面1 現在開いているファイルを一覧表示したところ 赤線を引いた「/run/user/1000/gvfs」はGNOMEが使用しているユーザー(この場合はUID=1000でユーザー"study"が所有)専用のマウントポイント


ユーザーやディレクトリを指定する

 「-u ユーザー」で対象にするユーザーを指定できます。複数ユーザーを指定する場合は「-u ユーザー1 -u ユーザー2」のように指定します。このように、表示対象を指定するオプションは、「OR(または)」の関係になります。

 対象ファイルを引数で指定するのではなく、ディレクトリで指定したい場合は、「+D ディレクトリ」と指定します。

 ユーザーとディレクトリを指定したい場合、「AND(かつ)」の関係にするため「-a」オプションを併用します。

 画面2はrootユーザーで実行しています。また、表示内容が多いので、headコマンドで先頭部分のみを表示しています。

コマンド実行例

lsof -u ユーザー

(対象のユーザーを指定する)

lsof -u study -u penguin

(ユーザー「study」とユーザー「penguin」のどちらかが開いているファイルを対象にする)

lsof -a -u study +D /var

(ユーザー「study」が「/var」ディレクトリ下で開いているファイルを対象にする。ANDの関係にするため「-a」も指定))(画面2


画面2 画面2 ユーザーやディレクトリを指定して現在開いているファイルを表示したところ

 lsofの出力が長くて読みにくい場合は、awkコマンドcutコマンドと組み合わせてもよいでしょう。

 画面3の最初のコマンドラインで使用している「+c 0」は、プロセス名(COMMAND欄)を途中で切らずに全て出力するオプションです。パイプライン後段のawkコマンドでは1番目、2番目、9番目のフィールドを出力しています。

 画面3の2番目のコマンドラインで使用している「+c 15」は、プロセス名を15文字で出力するというオプションです。cutコマンドでは、1文字目から20文字目と、63文字目以降を出力しています。

コマンド実行例

lsof +c 0 /var/log/* | awk '{print $1,$2,$9}'

(1、2、9番目のフィールドのみを出力する)(画面3

lsof +c 15 /var/log/* | cut -b 1-20,63-

(1-20文字目と63文字目以降を出力する)(画面3


画面3 画面3 lsofコマンドの出力のうち、特定のフィールドなどに限って表示したところ


プロセスを指定する

 「-p プロセスID」または「-c プロセス名」で、表示対象のプロセスを指定できます(画面4)。「-c」ではプロセス名の全体を指定する必要はなく、先頭部分だけで構いません。

コマンド実行例

lsof -p 5

(プロセスIDが5のプロセスのみを出力対象にする)

lsof -c kworker

(プロセスのコマンド名がkworkerのものを出力対象にする)


画面4 画面4 指定したプロセスIDやプロセス名に限定して、開いているファイルを表示したところ


ポートやIPアドレスを指定する

 「-i」オプションを使うと、「-i:ポート」や「-iTCP」のようにして、ポート番号やプロトコルを指定して表示できます。画面5は、rootユーザーで実行しています。

コマンド実行例

lsof -i

(ネットワークソケットのみを対象にする)(画面5

lsof -i:80

(ポート番号80のみを対象にする)

lsof -i:ssh

(ポート番号20のsshのみを対象にする)(画面5

lsof -iTCP

(TCP接続のみを対象にする)

lsof -i@192.168.1.126

(「192.168.1.126」からの接続のみを対象にする)


画面5 画面5 ネットワークソケットなどを限定して、開いているファイルを表示したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。