Linuxでlsofコマンドを使用して開いているファイルを一覧表示する方法
Linuxの良いところは、ブートプロセスからソフトウェアパッケージのインストールまで、すべてを簡単に表示および管理できることです。ここでは、Linuxでlsofコマンドを使用して、開いているファイルとそれらを使用するプロセスを表示する方法について説明します。これを表示する方法を知っていると、システムがどのように機能するかを理解し、特定のプロセスに必要なアクションを実行するのに役立ちます。
Lsofコマンド
開いているファイルとそれらを担当するユーザーまたはプロセスを表示するには、lsof
を使用します 効用。デフォルトでは、lsof
ほとんどのディストリビューションにプリインストールされています。
ただし、インストールしていない場合は、パッケージマネージャーを使用してシステムにインストールできます。
Debian / Ubuntu
Debianでは、次のコマンドを実行します:
sudo apt-get install lsof
Arch / Manjaro
Manjaroおよびその他のArchベースのディストリビューションでは、次のコマンドを実行してpacmanを使用します。
sudo pacman -S lsof
CentOS / REHL / Fedora
CentOSおよびREHLファミリーの場合、dnfを使用できます:
sudo dnf install lsof
lsofコマンドを使用してLinuxプロセスの開いているファイルを一覧表示する
ほとんどのLinuxコマンドと同様に、lsofユーティリティは非常に簡単に使用できます。コマンドlsof
を入力することから始めます :
sudo lsof
上記のコマンドを実行すると、lsofはシステムで開いているファイルに関する情報を返すはずです。
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,48 4096 2 / init 1 root rtd DIR 8,48 4096 2 / init 1 root txt REG 0,19 632048 281474976743906 /init init 1 root 0u CHR 1,3 0t0 15362 /dev/null init 1 root 1u CHR 1,3 0t0 15362 /dev/null init 1 root 2u CHR 1,3 0t0 15362 /dev/null init 1 root 3w CHR 1,11 0t0 15367 /dev/kmsg init 1 root 4u sock 0,8 0t0 22689 protocol: AF_VSOCK init 1 root 5r REG 0,4 0 4026532185 mnt init 1 root 6r REG 0,4 0 4026532201 mnt init 1 root 7r DIR 8,48 4096 240 /home/cap init 1 root 8u DIR 8,48 4096 2 / init 1 root 9u sock 0,8 0t0 21853 protocol: AF_VSOCK
注: sudo権限がある場合は、sudo
を指定してコマンドを実行します 特定のファイルでの「許可が拒否されました」エラーを回避するため。
上記の出力に示されているように、lsof出力には次の列があります。
列 | 表現 |
---|---|
コマンド | ターゲットファイルを使用するプロセスの名前を表示します。 |
PID | ファイルを使用するプロセスの一意の識別子。 |
TID | 列にはスレッド識別子が表示されます。 |
TASKCMD | タスクコマンドの名前。 |
ユーザー | プロセスを実行しているユーザーのユーザー名またはUID。 |
FD | ファイルとモードのファイル記述子。 |
タイプ | ターゲットファイルに関連付けられているノード。 |
デバイス | カンマで区切られたデバイス番号。 |
サイズ/オフ | ファイルオフセットサイズのバイト単位のファイルサイズ |
ノード | ローカルファイルのiノード値。 statコマンドを使用してinode を表示できます ファイルの情報。 |
名前 | ファイルのマウントポイント。 |
lsofコマンドの出力の内容が何を表しているかを理解したので、コマンドを使用して特定の情報をフィルタリングしてみましょう。
特定のプロセスをフィルタリングする方法
特定のプロセスによって開かれた特定のファイルのみをフィルタリングするには、プロセス名またはPID値のいずれかを使用できます。
たとえば、Firefoxプロセスで使用されるファイルを表示するには、次のコマンドを使用できます。
sudo lsof -c firefox
このコマンドは、Firefoxプロセスによって開かれたすべてのファイルを表示します。
プロセスIDでフィルタリングするには、-p
を使用できます。 オプションを選択し、プロセスIDを渡します。 top
を使用できます ターゲットプロセスのプロセスIDを取得するコマンド。
たとえば、FirefoxプロセスのPIDを取得するには、次のコマンドを使用できます。
sudo ps aux | grep firefox
ターゲットプロセスのPIDを取得したら、lsofを使用して開いているファイルを表示します。
sudo lsof -p 2121
上記のコマンドは、PIDが指定されたプロセスによって開かれたファイルを出力します。
特定のユーザーをフィルタリングする方法
特定のユーザーが開いたファイルのみを表示するには、-u
を使用できます 国旗。たとえば、Debianユーザーをフィルタリングするには、次のコマンドを使用します。
sudo lsof -u debian
特定のファイルをフィルタリングする方法
プロセスと特定のファイルを開いたユーザーだけを知りたいとします。これを行うには、ファイルの名前をlsofに渡します:
sudo lsof /bin/sleep
上記では、特定のファイルのみをフィルタリングし、ユーザー、プロセスIDなどの関連情報を返します。
まとめ
この簡単なチュートリアルでは、Linuxでlsofコマンドを使用して開いているファイルに関する情報をシステムに照会する方法について説明しました。ターミナル内のディレクトリの内容を一覧表示するための追加のコマンドを次に示します。
-
LinuxでTeeコマンドを使用する方法
Linuxシェルでパイプとリダイレクトを使用したことがある場合は、teeを使用する必要がある場合もあります。 ユーティリティ。 ティーは何をしますか? などのコマンド ls 現在のディレクトリの内容が表示されます。つまり、これらのコンテンツをstdout(標準出力)(通常は画面)、より正確には仮想端末ディスプレイに表示します。 のようなコマンド ls > file123 画面には何も表示されません。 signは、すべての出力をstdoutに表示するのではなく、ファイルにリダイレクトします。 file123には、以前に画面に表示されていたコンテンツが入力されます。 ディレクトリ
-
LinuxおよびmacOSでfdを使用してファイルをすばやく検索する方法
fdは、findコマンドのより簡単な代替手段です。切り捨てられた構文と省略されたコマンド構造を使用して、入力したコマンドを簡潔かつ的確に保ちます。ただし、fdの入力を容易にする冗長性の欠如により、理解がより困難になります。 fdは、デフォルトのfindコマンドよりも高速にパターンマッチングも実行します。 LinuxとmacOSでfdを使用する方法を学びます。 Linuxにfdをインストールする fdは、デフォルトでは多くのシステムに出荷されていません。好みのパッケージマネージャーを使用してアプリケーションをダウンロードしてインストールする必要があります。そうすれば、ターミナル内から実行できま