Linux
ss - linux 套接字統計實用程序輸出格式
使用
ss
with-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))$
實際上你可以看到沒有,但是現在,奇怪的是,輸出格式是我想要的方式。有人可以解釋這裡發生了什麼嗎?如何實現我喜歡的格式?
這是阻止我從遷移
netstat
到ss
.
至於為什麼等等。
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