ssコマンドに-pantsuをつけるといい感じになる

# はじめに
ssコマンドのオプションを調べてたときに閃いてしまったので記事にする。
この覚え方ならオプション忘れないだろう。

# ssコマンドとは
ソケットの状態表示をするコマンド。
`netstat`というコマンドでも確認できるらしい。

# オプション一覧
| オプション | 内容 | 私的覚え方 |
|:-:|:-|:-|
| p | ソケットを使ってるプロセスを表示させる | processの`p` |
| a | 接続待ちを含めたすべてのソケットを表示する | allの`a` |
| n | 名前解決を行わない | nameの`n` |
| t | TCPソケットを表示する | tcpの`t` |
| s | 統計情報を表示する | statisticsの`s` |
| u | UDPソケットを表示する | udpの`u` |

他にも色んなオプションがあるけど、あえて触れない。
気になる人は`man ss`や、`ss -h`で調べたら良いと思う。

# 実行結果
練習用に立てたVMでコマンドを実行してみた。
```
$ ss -pantsu
Total: 244
TCP:   19 (estab 5, closed 6, orphaned 0, timewait 2)

Transport Total     IP        IPv6
RAW       0         0         0        
UDP       0         0         0        
TCP       13        11        2        
INET      13        11        2        
FRAG      0         0         0        

Netid               State                    Recv-Q               Send-Q                             Local Address:Port                              Peer Address:Port               Process                                        
tcp                 LISTEN                   0                    128                                      0.0.0.0:8000                                   0.0.0.0:*                                                                 
tcp                 LISTEN                   0                    128                                    127.0.0.1:40801                                  0.0.0.0:*                   users:(("node",pid=3047,fd=18))               
tcp                 LISTEN                   0                    128                                      0.0.0.0:22                                     0.0.0.0:*                                                                 
tcp                 CLOSE-WAIT               0                    0                                      127.0.0.1:40801                                127.0.0.1:51836               users:(("node",pid=3047,fd=21))               
tcp                 CLOSE-WAIT               0                    0                                      127.0.0.1:40801                                127.0.0.1:52198               users:(("node",pid=3047,fd=23))               
tcp                 ESTAB                    0                    220                                192.168.0.101:22                                192.168.0.10:49897                                                             
tcp                 TIME-WAIT                0                    0                                      127.0.0.1:52246                                127.0.0.1:40801                                                             
tcp                 ESTAB                    0                    0                                      127.0.0.1:40801                                127.0.0.1:52250               users:(("node",pid=3047,fd=25))               
tcp                 ESTAB                    0                    0                                      127.0.0.1:40801                                127.0.0.1:52252               users:(("node",pid=8349,fd=20))               
tcp                 TIME-WAIT                0                    0                                      127.0.0.1:52248                                127.0.0.1:40801                                                             
tcp                 ESTAB                    0                    0                                      127.0.0.1:52252                                127.0.0.1:40801                                                             
tcp                 ESTAB                    0                    0                                      127.0.0.1:52250                                127.0.0.1:40801                                                             
tcp                 CLOSE-WAIT               0                    0                                      127.0.0.1:40801                                127.0.0.1:51856               users:(("node",pid=3047,fd=24))               
tcp                 LISTEN                   0                    128                                         [::]:8000                                      [::]:*                                                                 
tcp                 LISTEN                   0                    128                                         [::]:22                                        [::]:*                                                                
```

## 統計情報
`-s`オプションをつけると表示される統計部分。
これ、どういうときに見るんだろう？
不要なら`ss -pantu`にして非表示にしてもいいかもしれない。
```
Total: 244
TCP:   19 (estab 5, closed 6, orphaned 0, timewait 2)

Transport Total     IP        IPv6
RAW       0         0         0        
UDP       0         0         0        
TCP       13        11        2        
INET      13        11        2        
FRAG      0         0         0        
```

## ソケット情報
メインで確認したい部分はここだろうと思う。
```
Netid               State                    Recv-Q               Send-Q                             Local Address:Port                              Peer Address:Port               Process                                        
tcp                 LISTEN                   0                    128                                      0.0.0.0:8000                                   0.0.0.0:*                                                                 
tcp                 LISTEN                   0                    128                                    127.0.0.1:40801                                  0.0.0.0:*                   users:(("node",pid=3047,fd=18))               
tcp                 LISTEN                   0                    128                                      0.0.0.0:22                                     0.0.0.0:*                                                                 
tcp                 CLOSE-WAIT               0                    0                                      127.0.0.1:40801                                127.0.0.1:51836               users:(("node",pid=3047,fd=21))               
tcp                 CLOSE-WAIT               0                    0                                      127.0.0.1:40801                                127.0.0.1:52198               users:(("node",pid=3047,fd=23))               
tcp                 ESTAB                    0                    220                                192.168.0.101:22                                192.168.0.10:49897                                                             
tcp                 TIME-WAIT                0                    0                                      127.0.0.1:52246                                127.0.0.1:40801                                                             
tcp                 ESTAB                    0                    0                                      127.0.0.1:40801                                127.0.0.1:52250               users:(("node",pid=3047,fd=25))               
tcp                 ESTAB                    0                    0                                      127.0.0.1:40801                                127.0.0.1:52252               users:(("node",pid=8349,fd=20))               
tcp                 TIME-WAIT                0                    0                                      127.0.0.1:52248                                127.0.0.1:40801                                                             
tcp                 ESTAB                    0                    0                                      127.0.0.1:52252                                127.0.0.1:40801                                                             
tcp                 ESTAB                    0                    0                                      127.0.0.1:52250                                127.0.0.1:40801                                                             
tcp                 CLOSE-WAIT               0                    0                                      127.0.0.1:40801                                127.0.0.1:51856               users:(("node",pid=3047,fd=24))               
tcp                 LISTEN                   0                    128                                         [::]:8000                                      [::]:*                                                                 
tcp                 LISTEN                   0                    128                                         [::]:22                                        [::]:*                                                                
```
各情報の内容を以下に示す。
| 情報 | 内容 |
|:-:|:-|
| Netid | プロトコル名(tcpやudpなど)を示す |
| State | ソケットの状態を示す |
| Recv-Q | 受信バッファに残っているデータのバイト数 |
| Send-Q | 送信バッファに残っているデータ(Ackが返ってこない)のバイト数 |
| Local Address:Port | ローカル側のアドレスとポート番号 |
| Peer Address:Port | リモート側のアドレスとポート番号 |
| Process | ソケットを使っているプロセス |

### State
代表的なステータスを示す。
| 情報 | 内容 |
|:-:|:-|
| LISTEN | 接続待ち |
| ESTAB | 接続中 |
| CLOSE-WAIT | 終了処理中 |
| TIME-WAIT | 終了手前の状態なのかな？ |

##  欲しい情報を絞り込む
grepで絞り込む方法は汎用的に使える。
```
$ ss -pantu | grep :22
tcp   LISTEN     0      128          0.0.0.0:22         0.0.0.0:*                                    
tcp   ESTAB      0      52     192.168.0.101:22    192.168.0.10:49897                                
tcp   LISTEN     0      128             [::]:22            [::]:*     
```

Local AddressのPortで絞り込む方法。
`==`の条件の部分は、`!=`や`>=`などに変更可能。
```
$ ss -pantu 'sport == :22'
Netid                     State                      Recv-Q                     Send-Q                                         Local Address:Port                                         Peer Address:Port                      Process                     
tcp                       LISTEN                     0                          128                                                  0.0.0.0:22                                                0.0.0.0:*                                                     
tcp                       ESTAB                      0                          0                                              192.168.0.101:22                                           192.168.0.10:49897                                                 
tcp                       LISTEN                     0                          128                                                     [::]:22                                                   [::]:*                                                     
```

`state`オプションを使うことでステータスで絞り込みすることもできる。
※`ss state established`で、ESTABのみ表示させる。
```
$ ss -pantu state established
Netid                     Recv-Q                     Send-Q                                         Local Address:Port                                           Peer Address:Port                      Process                                              
tcp                       0                          0                                                  127.0.0.1:52272                                             127.0.0.1:40801                                                                          
tcp                       0                          0                                                  127.0.0.1:52270                                             127.0.0.1:40801                                                                          
tcp                       0                          84                                             192.168.0.101:22                                             192.168.0.10:50311                                                                          
tcp                       0                          0                                                  127.0.0.1:40801                                             127.0.0.1:52270                      users:(("node",pid=3047,fd=27))                     
tcp                       0                          0                                                  127.0.0.1:40801                                             127.0.0.1:52272                      users:(("node",pid=9129,fd=20))                     
```

# 最後に一言
午前2時で眠くて全然頭回らない中で書いたのでおかしな点があればご指摘ください。
なんで2022年最終日のこんな時間まで、真面目に`pantsu`ネタ書いてんだろう・・・。