* 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エントリ。