UNIX lsof コマンドに必要なヘルプ

UNIX lsof コマンドに必要なヘルプ

RHEL 8でいくつかのGhostファイルが見つかりました(そのファイルはOSでは削除されましたが、MongoDBでは削除されませんでした)。 Ghostファイルがいつ作成されるかを確認したいと思います。次のコマンドを使用してGhostファイルの作成日時を確認する方法を学びます。

lsof | grep deleted | grep mongod | wc -l

ベストアンサー1

まず、コマンドを実行する別のより良い方法は次のとおりです。

lsof +L 1 -a -c mongod

+L 1リンク数が1より小さいすべてのファイルが表示され(削除されたファイルのリンク数は0になります)、-c mongod名前が「mongod」で始まるプロセスが表示され、-a2つのファイルの組み合わせが表示されます。削除されたファイルを開くプロセスそして彼らの名前は「mongod」で始まります。

「生成時間」(Linuxでは「生成時間」と呼ばれる)に関して、Linuxでは少数のファイルシステムでのみこれをサポートします。ほとんどのファイルシステムはこれをまったくサポートしていません。stat <some file>「生年月日」フィールドを実行して確認して、ファイルシステムが生年月日をサポートしていることを確認できます。

たとえば、

$ stat /etc/motd |grep Birth
 Birth: -

私の例では、出生時間がサポートされていないことがわかります。

ただし、ファイルシステムがビスタイムをサポートしていない場合でも、役に立つ可能性があるファイルの別のタイムスタンプを取得できます。

まず、コマンド出力からlsofプロセスのpidと削除されたファイルのファイル記述子を取得する必要があります。

$ lsof +L 1 -a -c tail
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NLINK NODE NAME
tail    44305 root    3r   REG   8,10        6     0 4193 /tmp/testfile (deleted)

この場合、pidは44305、ファイル記述子(下FD)フィールドは次のとおりです。サムstat次のコマンドを実行して、削除されたファイルを実行できます。stat -L /proc/<pid>/fd/<fd number>

この-Lフラグは、ファイル記述子へのリンクを逆参照するために使用されます。つまり、リンク自体ではなくファイル記述子(単純なシンボリックリンク)がリンクされたファイルでstatを実行します。私:

$ stat -L /proc/44305/fd/3
  File: '/proc/44305/fd/3'
  Size: 6               Blocks: 8          IO Block: 4096   regular file
Device: 80ah/2058d      Inode: 4193        Links: 0
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-10-27 16:14:24.519483990 +0300
Modify: 2022-10-27 16:12:06.676463711 +0300
Change: 2022-10-27 16:15:55.425475599 +0300
 Birth: -
  • Accessファイルに最後にアクセスした時間を表示します(この場合は16:14:24)。
  • Modifyファイルの内容が最後に変更された時刻を表示します。この場合は16:12:06です。
  • Change通常、最後の*を表示します。メタデータファイルの内容(所有者、ユーザー、権限など)が変更されたがファイルが削除された場合、ファイルが削除された時間が表示されます。だから私の場合、ファイルは16:15:55に削除されました。

おすすめ記事