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