
> 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
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) w
explizit 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./proc
grep
strace
ps | grep
who
und 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 Bash
Pipes gehandhabt werden. Um in ähnlichen Situationen herauszufiltern, was Sie wirklich wollen, können Sie versuchen, den ersten Buchstaben des grep
Arguments []
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 strace
nicht 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 grep
w
/proc
grep