lsof - ファイルの年齢

lsof - ファイルの年齢

* nixコマンドはlsof開いたファイルのリストを提供します。特定のファイルが開かれた時間もリストする方法を知っている人はいますか?lsofまたは他のコマンドを使用して 。私はCentOS 5.3を使用していますが、残念ながら追加のリポジトリをインストールできないため、デフォルトのCentOSリポジトリを使用する必要があります。

ありがとう

答え1

pidがあれば/proc/を直接確認するだけです。$pid/ fd。それ〜らしいファイル記述子が生成される場所です。

簡単なコマンドを使用して作成日を確認すると、ls -lh特定のファイルがどれくらい開いていたかがわかります。

答え2

lsofあまり正確ではない推測は、提供されたpidを使用してpsファイルを開いたプログラムが実行された時期を見つけることです。もちろん、これはプログラムの起動時に開かれたファイルにのみ機能し、後で開かれたファイルには機能しません。

答え3

私はこれを直接手に入れようとしました。私が思いついた内容は次のとおりです。

#!/bin/sh

BASE=`basename "${0}" ".sh" `
TMP="/tmp/tmp.$$.${BASE}"

#COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
#firefox    2713      username   88u  IPv4 445702      0t0  TCP 192.168.0.10:42564->142.251.41.4:443 (ESTABLISHED)
#firefox    2713      username   94u  IPv4 445943      0t0  TCP 192.168.0.10:50416->108.138.106.67:443 (ESTABLISHED)
#firefox    2713      username  119u  IPv4  44675      0t0  TCP 192.168.0.10:49430->104.16.249.249:443 (ESTABLISHED)
#firefox    2713      username  144u  IPv4 275162      0t0  TCP 192.168.0.10:34266->34.218.164.174:443 (ESTABLISHED)

sudo lsof -Pni | grep '(ESTABLISHED)' >"${TMP}.connections"

cat "${TMP}.connections" |
awk '{
    ### fd/1 gives the timestamp of the last usage of stdin
    #printf("/proc/%s/fd/1|%s|%s|%s\n", $2, $4, $9, $10 ) ;

    ### mountinfo gives the timestamp when the [main] process was started.
    printf("/proc/%s/mountinfo|%s|%s|%s\n", $2, $4, $9, $10 ) ;
}' |
while [ true ]
do
    read line
    if [ -z "${line}" ] ; then exit 0 ; fi

    procpath=`echo "${line}" | awk -F \| '{ print $1 }' `
          fd=`echo "${line}" | awk -F \| '{ print $2 }' `
        conn=`echo "${line}" | awk -F \| '{ print $3 }' `
      status=`echo "${line}" | awk -F \| '{ print $4 }' `

    age=`stat "${procpath}" | grep '^Change' | awk '{ p=index( $3, "." ) ; time=substr( $3, 1, p-1 ) ; print $2, time ; }' `

    dat=`awk -v FD="${fd}" '{ if( $4 == FD ){ print $0 ; exit } ; }' "${TMP}.connections" `

    echo "${age}  ${dat}"
done

出力は次のとおりです。

2022-09-18 16:16:33  firefox    2713      username   88u  IPv4 776358      0t0  TCP 192.168.0.10:39970->151.101.129.69:443 (ESTABLISHED)
2022-09-18 16:16:33  firefox    2713      username  119u  IPv4  44675      0t0  TCP 192.168.0.10:49430->104.16.249.249:443 (ESTABLISHED)
2022-09-18 16:16:33  firefox    2713      username  144u  IPv4 275162      0t0  TCP 192.168.0.10:34266->34.218.164.174:443 (ESTABLISHED)
2022-09-18 16:16:33  firefox    2713      username  161u  IPv4 547918      0t0  TCP 192.168.0.10:34960->198.252.206.25:443 (ESTABLISHED)
2022-09-18 16:16:33  firefox    2713      username  170u  IPv4 543499      0t0  TCP 192.168.0.10:33700->198.252.206.25:443 (ESTABLISHED)
2022-09-18 16:16:33  firefox    2713      username  187u  IPv4 549543      0t0  TCP 192.168.0.10:47142->198.252.206.25:443 (ESTABLISHED)

問題は、すべてのFirefox関連アイテムの日付が同じであることです。他のPIDは報告されません。psは、さまざまなサブタスクに対して複数のPIDを報​​告します。

これが人々にとって利益になるかどうかはわかりません。

さらに、FD値、例えば」119u「で見つかりません。/proc/2713 ツリー、ファイル名またはこのツリー内のファイルの内容としては使用されません。私は確かに専門家ではありませんが、ユーザーとして具体的な関連性が必要だと思います。」119u「そしてプロセスツリーの下にリストされているfdエントリ

関連情報