"w"는 우랜덤과 무슨 관련이 있나요?

"w"는 우랜덤과 무슨 관련이 있나요?
> 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

맨페이지에서w(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 | grepgrep 자체를 보는 것과 비슷합니다 .

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 grepw/procgrep

관련 정보