
> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
¿Por qué "w" necesita urandom? ¿Cómo evitar esto?
ACTUALIZAR:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
¿Entonces es el filtrado el que tiene algo que ver con urandom?
> strace who 2>&1 | grep urandom
>
Entonces, ¿por qué no se ve afectado "quién"?
Respuesta1
Desde la página de manualw(1)
:
wmuestra información sobre los usuarios actualmente en la máquina,y sus procesos
Para mostrar los procesos de los usuarios, revisa todos los procesos que se ejecutan en la máquina. Intentemos esto:
$ strace -o w.trace w | grep whatever
Dentro del rastro encontramos líneas como estas (en un sistema Linux):
open("/proc/8286/cmdline", O_RDONLY) = 4
read(4, "grep\0whatever\0", 2047) = 14
Lo que muestra w
cómo revisar /proc
y observar explícitamente las líneas de comando de todos los procesos (y otras cosas, que no se muestran). Encuentra el grep
que corre paralelo a él y eso es lo que strace
ve hacer. La tubería no tiene nada que ver con eso, más que iniciar ambos procesos al mismo tiempo. En cierto modo, es similar a ps | grep
ver el propio grep.
who
y la mayoría de los demás comandos no necesitan información sobre los procesos y no buscan, por lo que no ves lo mismo al rastrearlos.
Respuesta2
Como se explica en otras respuestas y comentarios, el motivo de lo que observa es la forma en que Bash
maneja las tuberías. Para filtrar lo que realmente desea en situaciones similares, puede intentar encerrar la primera letra del grep
argumento []
así:
$ 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
(...)
EDITAR:
Como lo señala correctamenter.en elComenta abajoDe hecho, strace
no ve el otro lado de la tubería. De manera similar a ps aux | grep grep
lo que también se muestra grep grep
en su salida, w
está recorriendo
/proc
el directorio y encuentra grep
el proceso allí.