> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
Mengapa "w" membutuhkan urandom? Bagaimana cara menghindarinya?
MEMPERBARUI:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
jadi pemfilteran yang ada hubungannya dengan urandom?
> strace who 2>&1 | grep urandom
>
Lalu mengapa "siapa" tidak terpengaruh?
w
kebutuhan manaurandom
. Itu karenaPiped commands run concurrently
: unix.stackexchange.com/questions/37508/…urandom
akses dalamw
kode sumber.grep
dan Andaawk
. Itu tidakw
membuka/dev/urandom
file perangkat. Ini mirip denganps -aux | grep grep
strace w 2>&1 | grep unicorns
;-)Jawaban:
Sebagaimana dijelaskan dalam jawaban dan komentar lain alasan apa yang Anda amati adalah cara
Bash
menangani pipa. Untuk memfilter apa yang benar-benar Anda inginkan dalam situasi serupa, Anda dapat mencoba melampirkan huruf pertama darigrep
argumen[]
seperti ini:EDIT:
Sebagaimana dicatat dengan benar oleh R. dalam komentar di bawah ini sebenarnya
strace
tidak melihat sisi lain dari pipa. Demikian pulaps aux | grep grep
yang juga ditampilkangrep grep
dalam outputnyaw
adalah berjalan melalui/proc
direktori dan menemukangrep
proses di sana.sumber
strace
tidak (dan tidak bisa, dengan cara mudah) melacak perintah lain dalam pipa shell. Sebaliknya,w
mencari perintah saat ini sedang dieksekusi di terminal Anda (dan terminal lainnya), dan berjalan melintasi grep sebagai bagian dari pekerjaannya.Dari halaman manual
w(1)
:Untuk menampilkan proses pengguna, ia melewati semua proses yang berjalan pada mesin. Mari kita coba ini:
Di dalam jejak kami menemukan baris seperti ini (pada sistem Linux):
Yang menunjukkan
w
secara eksplisit melalui/proc
dan melihat baris perintah dari semua proses (dan hal-hal lain, tidak ditampilkan). Ia menemukangrep
yang berjalan sejajar dengannya dan itulah yangstrace
melihatnya berfungsi. Pipa itu tidak ada hubungannya dengan itu, selain memulai kedua proses pada saat yang sama. Di satu sisi, ini mirip denganps | grep
melihat grep itu sendiri.who
dan sebagian besar perintah lain tidak memerlukan informasi tentang prosesnya, dan jangan mencari, sehingga Anda tidak melihat hal yang sama saat melacaknya.sumber