Linux

ss - linux 套接字統計實用程序輸出格式

  • November 24, 2021

使用sswith-p選項時,user/pid/fd列會跳到特定行的下方。例如,這就是我實際看到的:

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

首選輸出格式

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

為了確認沒有換行符,我試過這個:

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

實際上你可以看到沒有,但是現在,奇怪的是,輸出格式是我想要的方式。有人可以解釋這裡發生了什麼嗎?如何實現我喜歡的格式?

這是阻止我從遷移netstatss.

至於為什麼等等。

ss是 Linux 核心中iproute2實用程序集合的一部分,它使用*ioctl()*請求來獲取終端的目前寬度。

然而; 整個寬度用於*“其他”*欄位,並且流程欄位被壓縮到下一行。

例如,您可以通過以下方式查看此內容(在終端上有限制時):

script ss.txt
ss -nlup4
exit

然後擴大你的終端視窗和cat ss.txt.

原因_

ss -nulp4 | cat -A

*«works»*是因為該實用程序可以辨識它是否寫入 tty

if (isatty(STDOUT_FILENO)) {

}

從原始碼中的前一行可以看出,預設寬度設置為 80。因此,如果您的終端位於 130 列並且您執行以下操作:

ss -nulp4 | cat

它辨識出輸出不是到 tty(而是到管道),其他欄位被塞進 80 列,而程序欄位寫在這 80 列之後。但是由於您的終端比80 列更寬,並且有空間用於程序條目,因此它顯示在一行中。

例如,同樣如此:

ss -nulp4 > ss.txt

至於如何*“實現我的首選格式”*,一種可能不合適的方法是朝著(取決於終端)的方向做一些事情:

stty cols 100
ss -nlup4

以下一項可能有助於更改輸出:

ss -ltunp | column -t 

引用自:https://unix.stackexchange.com/questions/252744