とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

macOSでLinuxで良く使うコマンドの代替を設定する

今回はちょっとした小ネタです。

Linuxで良く使うコマンドをmacOSでも使いたいなあと思うときがあります。 特にネットワークに繋がっているのに繋がらないときに確認するときなどです。

たいていはHomebrew等でインストールすれば解決できるのですが、ssコマンドのようなものはnetlinkと/procに依存していたりするので、このようなものの移植は難しいです。

それにipコマンドとifconfigコマンド、netstatコマンドのオプションとか覚えてられないので、関数定義することにしました。 これを~/.zshrcに書いてsource ~/.zshrcを実行すれば、私が良く使うコマンドは何とかなりそうです。

# ZSHを使っているので、その設定ファイルを開く
$ vi ~/.zshrc
...

#良く使うコマンドは関数定義
ss_natu() {
  netstat -an | awk '
    /^Active Internet connections/ {in_section=1; next}
    /^Active/ && !/^Active Internet connections/ {in_section=0}
    in_section {print}
  '
}
# ss -natuじゃなくてss -antuと実行してたなと思って、どっちも効くようにエイリアスを設定
alias ss_antu='ss_antu'

ip_r() {
  netstat -rn
}

ip_a() {
  if [ -z "$1" ]; then
    ifconfig
  else
    ifconfig "$1"
  fi
}
...

# 追加した内容を適用
$ source ~/.zshrc

実際に実行してみます。 これで少しは「あのLinuxのコマンド、macOSにはないのだった」が減って安心できます。

% ss_natu 
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0    902  192.168.1.166.64295    17.57.156.39.993       ESTABLISHED
tcp6       0      0  240b:13:1cc0:aa0.64294 2404:6800:4008:c.993   ESTABLISHED
tcp6       0      0  240b:13:1cc0:aa0.64293 2404:6800:4008:c.993   ESTABLISHED
tcp6       0      0  240b:13:1cc0:aa0.64292 2600:1901:0:38d7.80    ESTABLISHED
tcp4       0      0  192.168.1.166.64291    34.107.221.82.80       ESTABLISHED
tcp4       0      0  192.168.1.166.64290    52.196.128.139.443     ESTABLISHED
tcp4       0      0  192.168.1.166.64288    34.107.221.82.80       ESTABLISHED
...

% ss_antu 
(結果は上と同じ)

% ip_r
Routing tables

Internet:
Destination        Gateway            Flags               Netif Expire
default            192.168.1.1        UGScg                 en0       
default            192.168.1.1        UGScIg                en1       
127                127.0.0.1          UCS                   lo0       
127.0.0.1          127.0.0.1          UH                    lo0       
169.254            link#7             UCS                   en0      !
169.254            link#10            UCSI                  en8      !
169.254            link#17            UCSI                  en1      !
169.254.14.183     a:2c:b6:75:ea:7b   UHLSW                 en8    475
...

% ip_a lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000
    inet6 ::1 prefixlen 128 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    nd6 options=201<PERFORMNUD,DAD>