특정 프로그램/명령으로 열린 모든 파일을 어떻게 계산/나열할 수 있나요? [복사]

특정 프로그램/명령으로 열린 모든 파일을 어떻게 계산/나열할 수 있나요? [복사]

아래와 같이 특정 PID로 열린 파일만 나열할 수 있습니다.

lsof -p 1000
lsof -p 1000 | wc -l

특정 프로그램/명령(예: java)으로 열린 파일을 어떻게 나열/계산할 수 있나요?

각 프로그램에서 연 파일 수를 그룹화할 수 있다면 더 좋을 것입니다. 어떤 프로그램에 열린 파일 수가 더 많은지 확인하고 싶습니다.

나는 다음과 같은 것을 원한다

lsof -c "java" # -c is an imaginary argument similar to -p for process

우분투 20.04를 사용합니다.

답변1

나는 lsof에서 이와 같은 것을 구현하는 것이 논란의 여지가 있다고 생각하지 않으며 lsof 바이너리에서 어떤 플래그를 사용할 수 있는지 모릅니다.
헤더를 "grep java"로 바꾸면 원하는 것을 얻을 수 있을 것 같습니다.

lsof | awk '{print $1}' | sort | uniq -c | sort -rn | head


라소프:기본적으로 열려 있는 모든 파일을 나열합니다.
awk '{인쇄 $1}':프로세스 이름인 첫 번째 열만 인쇄합니다.
유형: uniq를 적용하기 전에 정렬해야 합니다. 그렇지 않으면 개수가 분할되므로 lsof가 인쇄되는 순서에 따라 java가 여러 번 나타날 수 있습니다.
유니클로-c:프로세스 이름 및 개수 라인별로 그룹화합니다.
마지막 2개는 가독성을 위한 것입니다.

이것의 문제는 모든 Java 인스턴스가 함께 그룹화된다는 것입니다. 동일한 논리를 PID에 적용한 다음 PID를 기준으로 Java 인스턴스와 하위 프로세스를 필터링할 수 있을 것 같습니다.

도움이 되었기를 바랍니다.

관련 정보