web-dev-qa-db-ja.com

ss-Linuxソケット統計ユーティリティの出力形式

-pオプションを指定してssを使用すると、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への移行を妨げる唯一の理由です。

22
NarūnasK

理由などは.

ss、Linuxカーネルの iproute2ユーティリティコレクション の一部、 を使用ioctl()request 端末の現在の幅を取得します。

しかしながら; "other"フィールドには幅全体が使用され、プロセスフィールドは次の行に圧縮されます。

たとえば、これを表示することができます(端末に制限がある場合):

script ss.txt
ss -nlup4
exit

それからwiden端末ウィンドウとcat ss.txt

理由理由

ss -nulp4 | cat -A

"機能する"は、ユーティリティがそれを認識するかどうかです ttyに書き込むかどうか

if (isatty(STDOUT_FILENO)) {

}

ソースコードの前の行からわかるように、デフォルトの幅は80に設定されています。したがって、ターミナルが130カラムである場合、次のようにします。

ss -nulp4 | cat

出力がtty(ではなくパイプ)ではなく、otherフィールドが80列に詰め込まれていることを認識し、processフィールドこれらの80列の後に書き込まれます。しかし、あなたの端末はもっと広いそして80カラムであり、プロセスエントリのためのスペースがあるので、それは1行で表示されます。

たとえば、同じことが言えます:

ss -nulp4 > ss.txt

"私の好みのフォーマットを実現する方法"については、おそらく不適切な方法の1つは、(端末によっては)方向に何かを行うことです:

stty cols 100
ss -nlup4
12
Runium

次のいずれかが出力の変更に役立つ場合があります。

ss -ltunp | column -t 
19
tamerlaha