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 항목.

관련 정보