Что делает «w» с урандомом?

Что делает «w» с урандомом?
> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
> 

Зачем "w" нужен urandom? Как этого избежать?

ОБНОВЛЯТЬ:

> 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 | 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там процесс.

Связанный контент