Was macht „w“ mit urandom?

Was macht „w“ mit urandom?
> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
> 

Warum benötigt „w“ urandom? Wie kann man das vermeiden?

AKTUALISIEREN:

> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047)       = 14
> 

also hat die Filterung etwas mit Urandom zu tun?

> strace who 2>&1 | grep urandom
> 

Warum ist dann das „Wer“ nicht betroffen?

Antwort1

Aus der Manpagew(1):

mzeigt Informationen über die Benutzer an, die sich derzeit auf dem Computer befinden.und ihre Prozesse

Um die Prozesse der Benutzer anzuzeigen, durchläuft es alle auf dem Computer laufenden Prozesse. Versuchen wir Folgendes:

$ strace -o w.trace w | grep whatever

Innerhalb der Ablaufverfolgung finden wir Zeilen wie diese (auf einem Linux-System):

open("/proc/8286/cmdline", O_RDONLY)    = 4
read(4, "grep\0whatever\0", 2047)       = 14

Dies zeigt, wie die Befehlszeilen aller Prozesse (und anderer Dinge, die nicht gezeigt werden) wexplizit durchgegangen und betrachtet werden. Es findet das parallel dazu laufende und sieht, was es tut. Die Pipe hat damit nichts zu tun, außer dass beide Prozesse gleichzeitig gestartet werden. In gewisser Weise ist es ähnlich, als würde man das Grep selbst sehen./procgrepstraceps | grep

whound die meisten anderen Befehle benötigen die Informationen zu den Prozessen nicht und suchen auch nicht danach, sodass Sie beim Verfolgen nicht dieselben Informationen sehen.

Antwort2

Wie in anderen Antworten und Kommentaren erklärt, liegt der Grund für Ihre Beobachtung in der Art und Weise, wie BashPipes gehandhabt werden. Um in ähnlichen Situationen herauszufiltern, was Sie wirklich wollen, können Sie versuchen, den ersten Buchstaben des grepArguments []wie folgt einzuschließen:

$ 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
(...)

BEARBEITEN:

Wie richtig bemerkt vonR.imkommentiere untensieht tatsächlich stracenicht die andere Seite der Pipe. Ähnlich wie in der Ausgabe ps aux | grep grep wird auch angezeigt, dass durch das Verzeichnis gegangen wird und dort Prozesse gefunden werden.grep grepw/procgrep

verwandte Informationen