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


21

オプションを使用するssと、特定の行の下-puser/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

回答:


10

理由などなど

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

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

これは、たとえば次の方法で表示できます(オン端末で制限がある場合)。

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カラムよりも広く、プロセスエントリ用のスペースがあるため、1行で表示されます。

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

ss -nulp4 > ss.txt

する方法については«書式設定私の優先を達成» 1そう不適当な方法を(端末によって異なります)の方向に何かをすることです:

stty cols 100
ss -nlup4

素晴らしい説明とそのstty cols設定での素敵なトリック。どうもありがとう!
-monsune

良い説明ですが、使用column -tは最も簡単な方法のようです。
ペビック

18

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

ss -ltunp | column -t 

1
これは答えに対するコメントである必要があります。あなたはコメントを追加するのに十分な評判を持っています、それを使用してください。
-grochmal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.