> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
Warum braucht "w" urandom? Wie vermeide ich das?
AKTUALISIEREN:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
Also ist es die Filterung, die etwas mit Urandom zu tun hat?
> strace who 2>&1 | grep urandom
>
Warum ist dann nicht "wer" betroffen?
w
was brauchturandom
. Es ist weilPiped commands run concurrently
: unix.stackexchange.com/questions/37508/…urandom
Zugriff imw
Quellcode.grep
und Ihrenawk
. Die Gerätedatei wird nichtw
geöffnet/dev/urandom
. Es ist ähnlich wieps -aux | grep grep
strace w 2>&1 | grep unicorns
;-)Antworten:
Wie in anderen Antworten und Kommentaren erläutert, ist der Grund für Ihre Beobachtung der Umgang
Bash
mit Rohren. Um zu filtern, was Sie in ähnlichen Situationen wirklich wollen, können Sie versuchen, den ersten Buchstaben desgrep
Arguments[]
wie folgt einzuschließen :BEARBEITEN:
Wie korrekt bemerkt R. im Kommentar unten in der Tat
strace
sieht die andere Seite des Rohrs nicht. Ähnlich wie esps aux | grep grep
auchgrep grep
in seiner Ausgabe zu sehenw
ist, geht es durch das/proc
Verzeichnis und findet dort dengrep
Prozess.quelle
strace
verfolgt die anderen Befehle in der Shell-Pipeline nicht (und kann sie auch nicht auf einfache Weise verfolgen). Es wird vielmehrw
nach den aktuellen Befehlen gesucht, die auf Ihrem Terminal (und anderen Terminals) ausgeführt werden, und im Rahmen seiner Arbeit über den Grep ausgeführt.Aus der Manpage
w(1)
:Um die Prozesse der Benutzer anzuzeigen, werden alle auf dem Computer ausgeführten Prozesse durchlaufen. Lass uns das versuchen:
In der Spur finden wir Zeilen wie diese (auf einem Linux-System):
Dies zeigt, wie
w
explizit/proc
die Befehlszeilen aller Prozesse (und anderer Dinge, die nicht gezeigt werden) durchlaufen und betrachtet werden. Es findet dasgrep
, was parallel dazu läuft und das ist wasstrace
sieht es. Die Pipe hat nichts damit zu tun, außer beide Prozesse gleichzeitig zu starten. In gewisser Weise ähnelt esps | grep
dem Grep selbst.who
und die meisten anderen Befehle benötigen keine Informationen zu den Prozessen und suchen nicht, sodass Sie beim Nachverfolgen nicht dasselbe sehen.quelle