ss - format keluaran utilitas statistik soket linux

21

Saat menggunakan ssdengan -popsi, user/pid/fdkolom melompat di bawah garis tertentu. Sebagai contoh, inilah yang sebenarnya saya lihat:

# 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))

Pemformatan output yang disukai :

# 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))

Untuk mengonfirmasi bahwa tidak ada jeda baris, saya sudah mencoba ini:

# 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))$

Dan memang Anda dapat melihat bahwa tidak ada, tapi sekarang, anehnya, format output adalah seperti yang saya inginkan. Bisakah seseorang menjelaskan apa yang terjadi di sini? Bagaimana saya bisa mencapai format pilihan saya?

Ini adalah satu-satunya hal yang menghentikan saya dari migrasi dari netstatke ss.

NarūnasK
sumber

Jawaban:

10

Adapun alasannya dll.

ss, bagian dari kumpulan utilitas iproute2 di kernel Linux, menggunakan permintaan ioctl () untuk mendapatkan lebar terminal saat ini.

Namun; seluruh lebar digunakan untuk bidang «lainnya» dan bidang proses bisa diperas ke baris berikutnya.

Anda dapat melihat ini dengan misalnya (ketika memiliki terminal terbatas pada):

script ss.txt
ss -nlup4
exit

Kemudian perluas jendela terminal Anda dan cat ss.txt.

Alasan mengapa

ss -nulp4 | cat -A

«Berfungsi» adalah karena utilitas mengenali apakah ia menulis ke tty atau tidak :

if (isatty(STDOUT_FILENO)) {

}

Seperti yang Anda lihat dari baris sebelumnya dalam lebar kode sumber defaultnya adalah 80. Jadi jika terminal Anda katakan 130 kolom dan Anda melakukannya:

ss -nulp4 | cat

itu mengakui output tidak ke tty (tetapi ke pipa) dan bidang lainnya dijejalkan menjadi 80 kolom, sementara bidang proses ditulis setelah 80 kolom ini. Tetapi karena terminal Anda lebih luas dari 80 kolom dan memiliki ruang untuk entri proses itu ditampilkan dalam satu baris.

Hal yang sama berlaku misalnya:

ss -nulp4 > ss.txt

Adapun cara «mencapai pemformatan pilihan saya» salah satu cara yang mungkin tidak sesuai adalah dengan melakukan sesuatu ke arah (tergantung pada terminal):

stty cols 100
ss -nlup4
Runium
sumber
Penjelasan indah dan trik yang bagus dengan pengaturan stty cols. Terimakasih banyak!
monsune
Penjelasan yang bagus, tetapi menggunakan column -ttampaknya cara paling sederhana.
pevik
18

Yang berikut mungkin membantu untuk mengubah output:

ss -ltunp | column -t 
tamerlaha
sumber
1
Ini harus menjadi komentar pada jawabannya. Anda memiliki reputasi yang cukup untuk menambahkan komentar, silakan gunakan.
grochmal