
> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
"w"에 우랜덤이 필요한 이유는 무엇입니까? 이것을 피하는 방법?
업데이트:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
그러면 우랜덤과 관련이 있는 것이 필터링인가요?
> strace who 2>&1 | grep urandom
>
그렇다면 왜 "누가"는 영향을 받지 않습니까?
답변1
승현재 컴퓨터에 있는 사용자에 대한 정보를 표시합니다.그리고 그들의 프로세스
사용자의 프로세스를 표시하기 위해 시스템에서 실행 중인 모든 프로세스를 거칩니다. 이것을 시도해 봅시다:
$ strace -o w.trace w | grep whatever
추적 내부에는 다음과 같은 줄이 있습니다(Linux 시스템의 경우).
open("/proc/8286/cmdline", O_RDONLY) = 4
read(4, "grep\0whatever\0", 2047) = 14
이는 모든 프로세스(및 표시되지 않은 다른 항목)의 명령줄을 w
명시적으로 살펴 보고 살펴보는 것을 보여줍니다. /proc
그것은 그것과 평행하게 실행되는 것을 발견 grep
하고 그것이 strace
그것을 보는 것입니다. 파이프는 두 프로세스를 동시에 시작하는 것 외에는 아무 관련이 없습니다. 어떻게 보면 ps | grep
grep 자체를 보는 것과 비슷합니다 .
who
대부분의 다른 명령은 프로세스에 대한 정보가 필요하지 않으며 검색하지 않으므로 추적할 때 동일한 내용이 표시되지 않습니다.
답변2
다른 답변과 의견에서 설명했듯이 관찰하는 이유는 Bash
파이프를 처리하는 방식입니다. 비슷한 상황에서 실제로 원하는 것을 필터링하려면 다음과 같이 grep
인수 의 첫 글자를 묶을 수 있습니다 []
.
$ strace w 2>&1 | grep random
read(4, "grep\0random\0", 2047) = 12
$ strace w 2>&1 | grep '[r]andom'
$ strace w 2>&1 | grep '[c]lose'
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
(...)
편집하다:
올바르게 지적했듯이아르 자형.에서아래 댓글실제로 strace
파이프의 반대편은 보이지 않습니다. 마찬가지로 출력에도 ps aux | grep grep
표시되는 것은 디렉토리를 탐색 하고 거기에서 프로세스를 찾는 것입니다.grep grep
w
/proc
grep