Ausgabeformat des Dienstprogramms ss - linux socket statistics

21

Bei Verwendung ssmit -pOption user/pid/fdspringt die Spalte unter die jeweilige Zeile. Zum Beispiel ist es das, was ich gerade sehe:

# ss -nulp4
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
UNCONN     0      0                                                            *:20000                                                       *:*      
users:(("perl",pid=9316,fd=6))
UNCONN     0      0                                                            *:10000                                                       *:*      
users:(("perl",pid=9277,fd=6))
UNCONN     0      0                                               192.168.100.10:53                                                          *:*      
users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN     0      0                                                    127.0.0.1:53                                                          *:*      
users:(("named",pid=95,fd=515),("named",pid=95,fd=514))

Bevorzugte Ausgabeformatierung :

# ss -nulp4
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
UNCONN     0      0                                                            *:20000                                                       *:*      users:(("perl",pid=9316,fd=6))
UNCONN     0      0                                                            *:10000                                                       *:*      users:(("perl",pid=9277,fd=6))
UNCONN     0      0                                               192.168.100.10:53                                                          *:*      users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN     0      0                                                    127.0.0.1:53                                                          *:*      users:(("named",pid=95,fd=515),("named",pid=95,fd=514))

Um zu bestätigen, dass es keine Zeilenumbrüche gibt, habe ich Folgendes versucht:

# ss -nulp4 | cat -A
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port $
UNCONN     0      0                         *:20000                    *:*      users:(("perl",pid=9316,fd=6))$
UNCONN     0      0                         *:10000                    *:*      users:(("perl",pid=9277,fd=6))$
UNCONN     0      0            192.168.100.10:53                       *:*      users:(("named",pid=95,fd=517),("named",pid=95,fd=516))$
UNCONN     0      0                 127.0.0.1:53                       *:*      users:(("named",pid=95,fd=515),("named",pid=95,fd=514))$

Und tatsächlich können Sie sehen, dass es keine gab, aber jetzt ist das Ausgabeformat seltsamerweise so, wie ich es mir gewünscht habe. Könnte jemand erklären, was hier los ist? Wie kann ich meine bevorzugte Formatierung erreichen?

Dies ist das einzige, was mich davon abhält, von netstatnach zu migrieren ss.

NarūnasK
quelle

Antworten:

10

Wie für warum etc.

ss, Einen Teil der iproute2 Dienstprogramm Sammlung im Linux - Kernel, verwendet eine ioctl () Anforderung die aktuelle Breite von Terminal zu erhalten.

Jedoch; Die gesamte Breite wird für die «anderen» Felder verwendet und das Prozessfeld wird in die nächste Zeile gedrückt.

Sie können dies zum Beispiel anzeigen, indem Sie Folgendes tun (wenn Sie eine Beschränkung für ein Terminal haben):

script ss.txt
ss -nlup4
exit

Erweitern Sie dann Ihr Terminalfenster und cat ss.txt.

Der Grund warum

ss -nulp4 | cat -A

«Works» liegt daran, dass das Dienstprogramm erkennt, ob es in ein tty schreibt oder nicht :

if (isatty(STDOUT_FILENO)) {

}

Wie Sie in der vorherigen Zeile im Quellcode sehen können, ist die Standardbreite auf 80 gesetzt. Wenn Ihr Terminal also beispielsweise 130 Spalten hat und Sie dies tun:

ss -nulp4 | cat

Es erkennt, dass die Ausgabe nicht auf ein Tty (sondern auf eine Pipe) erfolgt, und die anderen Felder sind in 80 Spalten eingepfercht, während das Prozessfeld nach diesen 80 Spalten geschrieben wird. Da Ihr Terminal jedoch breiter als 80 Spalten ist und Platz für die Prozesseingabe bietet, wird es in einer Zeile angezeigt.

Das gleiche gilt zum Beispiel:

ss -nulp4 > ss.txt

Was das "Erreichen meiner bevorzugten Formatierung" angeht, ist eine wahrscheinlich ungeeignete Möglichkeit, etwas in der Richtung zu tun (abhängig vom Terminal):

stty cols 100
ss -nlup4
Runium
quelle
Wunderbare Erklärung und netter Trick mit dieser stty cols Einstellung. Danke vielmals!
Monsun
Gute Erklärung, aber die Verwendung column -tscheint am einfachsten zu sein.
Pevik
17

Folgendes kann hilfreich sein, um die Ausgabe zu ändern:

ss -ltunp | column -t 
Tamerlaha
quelle
1
Dies sollte ein Kommentar zur Antwort sein. Sie haben genug Reputation, um Kommentare hinzuzufügen. Bitte verwenden Sie diese.
voraussichtlich