ipコマンド備忘録

# はじめに
CentOS7ではifconfigやrouteやarp等のコマンドがipコマンドで置き換えられました。今まで慣れ親しんできたコマンド体系から新しいコマンド体系へと移行するのは苦手な人もいるかもしれません。そんな時は用途別に纏めておき、「あれを見るコマンドは何だったっけ」→「ip xxxxだ！」と記憶に定着させるのが良いと思います。

# 用途別コマンド

## インターフェース関連（旧ifconfigコマンド）

### インターフェースのIPを確認したい
ip a

```text:bash
[root@sv12-CentOS74 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:01:52:9b:00:09 brd ff:ff:ff:ff:ff:ff
    inet 10.6.0.191/21 brd 10.6.7.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::1:52ff:fe9b:9/64 scope link 
       valid_lft forever preferred_lft forever
```

ip aは正確にはip address showの省略系です。address部分はaで代用可能であり、showは省略可能です。ipコマンドはtab補完にも対応していますので、迷ったときはtabを押すと良いと思います。


### 特定のインターフェースのIPを確認したい
ip a show \<interface>

```text:bash
[root@sv12-CentOS74 ~]# ip a show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:01:52:9b:00:09 brd ff:ff:ff:ff:ff:ff
    inet 10.6.0.191/21 brd 10.6.7.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::1:52ff:fe9b:9/64 scope link 
       valid_lft forever preferred_lft forever
```

インターフェースを指定する場合にはshowを省略できません。インターフェースが多数あり、特定のインターフェースの情報のみを絞って出力したい場合に使います。

### 入出力、エラーカウンタを表示したい

ip -s a

```text:bash
[root@sv12-CentOS74 ~]# ip -s a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    3168       24       0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    3168       24       0       0       0       0       
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:01:52:9b:00:09 brd ff:ff:ff:ff:ff:ff
    inet 10.6.0.191/21 brd 10.6.7.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::1:52ff:fe9b:9/64 scope link 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    206419026  117466   0       127     0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    6224508    85173    0       0       0       0       
```

初期構築時や通信が不安定になった時に確認します。

## ルーティング関連（旧routeコマンド）

### ルーティングテーブルを表示したい

ip r

```text:bash
[root@sv12-CentOS74 ~]# ip r
default via 10.6.0.1 dev ens160 proto static metric 100 
10.6.0.0/21 dev ens160 proto kernel scope link src 10.6.0.191 metric 100 
```

rはrouteの略です。説明不要のルーティングテーブルですね。

### 特定のアドレスに対するネクストホップを表示したい

ip r get \<address>

```text:bash
[root@sv12-CentOS74 ~]# ip r get 8.8.8.8
8.8.8.8 via 10.6.0.1 dev ens160 src 10.6.0.191 
    cache 
```

ネットワーク屋には馴染み深いコマンドです。スタティックルートがたくさん書いてある時に一発で探せて便利です。

## arp関連（旧arpコマンド）

### arpキャッシュを表示したい

ip n

```text:bash
[root@sv12-CentOS74 ~]# ip n
10.6.0.9 dev ens160 lladdr 02:01:52:9b:00:01 STALE
10.6.0.1 dev ens160 lladdr 02:01:52:9b:00:01 DELAY
```

nはneigh（ネイバー）の略です。

### 特定のIPアドレスに対するarpキャッシュを表示したい

ip n s \<address>

```text:bash
[root@sv12-CentOS74 ~]# ip n s 10.6.0.1
10.6.0.1 dev ens160 lladdr 02:01:52:9b:00:01 REACHABLE
```

ip neigh show \<address>の省略形。省略されすぎて逆に覚えるのが辛そうですね。ciscoの`switchport t e d`みたいなものです。