인덱스 24의 총 파일 설명자 수를 인쇄하는 방법

인덱스 24의 총 파일 설명자 수를 인쇄하는 방법

Linux에서 실행 중인 모든 프로세스에 대해 인덱스 24를 사용하여 총 파일 설명자 수를 인쇄하는 방법은 무엇입니까?

나는 노력했다

$ ls /proc/*/fd 2> errors.txt > stdout.txt | grep "^24" stdout.txt | wc -l

이 솔루션은 매번 0을 반환합니다.

나는 내 과제를 해결하기 위해 한 줄의 코드를 작성해야 한다고 언급했습니다.

답변1

당신이 사용할 수있는

find /proc/[0-9]*/fd/ -name 24 2> /dev/null | wc -l

또는 사용을 고집하는 경우 ls(이것은몇 가지 예안전할 때 이 작업을 수행하십시오):

ls /proc/[0-9]*/fd 2>/dev/null | grep -c '^24$'

출력을 파일( > output.txt)로 리디렉션하기 때문에 첫 번째 시도가 실패합니다. 즉, grep일치하는 출력이 없기 때문에 일치하지 않습니다. |위와 같이 파이프( )를 사용하거나 ;또는 &명령을 구분하여 사용할 수 있습니다 .

ls /proc/[0-9]*/fd 2> errors.txt > stdout.txt; grep "^24" stdout.txt | wc -l

답변2

ls전화를 하거나 여기에 와도 아무 소용이 없습니다 find. 이것이 쉘이 전역을 확장하여 수행하는 작업입니다.

오직:

set -- /proc/[0-9]*/fd/24 && echo "$#"

Except 를 zsh받으면 1그것이 하나 있기 때문인지 또는 패턴 불일치가 있기 때문인지 알 수 없습니다.

그것으로 bash당신은 할 수 있습니다

shopt -s nullglob
fds=(/proc/[0-9]*/fd/24)
echo "${#fds[@]}"

또 다른 이식성 있는 옵션은 다음을 사용하는 것입니다 lsof.

lsof -td24 | wc -l

관련 정보