/Linuxコマンド

ネットワーク

ネットワーク

ip・ss・ping・curl・wget・nc・dig など、接続の確認・通信・ポートの調査に使うコマンド。

ipアドレスや経路を見る・設定する

IP アドレスやネットワークの経路を表示・設定します(昔の ifconfig の代わり)。

bash
$ ip a                       # IPアドレスの一覧(ip addr show)
$ ip -br a                   # 1行ずつ簡潔に
$ ip r                       # 経路(ルーティングテーブル)
$ ip -4 addr show eth0       # eth0 のIPv4アドレス
$ ip link                    # ネットワークインターフェースの一覧

ss使われているポートと接続

どのポートが使われているか、どこと接続しているかを表示します(昔の netstat の代わり)。

オプション意味
-t / -uTCP / UDP
-l待ち受け(LISTEN)中のものだけ
-n名前に変換せず数字で表示
-p使っているプロセスも表示(他人のものは sudo が必要)
-aすべて
bash
$ ss -tlnp                   # 待ち受け中のTCPポートとプロセス(定番)
$ sudo ss -tlnp | grep :80
$ ss -tn state established  # 接続中のもの
$ ss -s                      # 集計だけ

ping相手に届くか確かめる

相手のマシンに届くかどうか、どれくらいで応答が返るかを確かめます。

bash
$ ping -c 4 8.8.8.8          # 4回だけ
$ ping -c 3 example.com
$ ping -i 0.2 -c 20 192.168.1.1   # 間隔を短く

curlHTTP などで通信する

URL にアクセスして、ページやファイルを取得したり、API にデータを送ったりします。

オプション意味
-o <ファイル> / -O保存する / URLの名前で保存する
-Lリダイレクトをたどる
-s / -S進捗を表示しない / エラーは表示する(-sS で組み合わせ)
-fHTTPエラー(4xx・5xx)で失敗扱いにする
-Iヘッダーだけ取得(HEAD)
-i応答ヘッダーも表示
-v通信の詳細を表示
-X <メソッド>POST PUT DELETE など
-H '<ヘッダー>'リクエストヘッダーを付ける
-d '<データ>'本文を送る(自動で POST になる)
--json '<JSON>'JSON を送る(Content-Type も自動で付く)
-F '[email protected]'フォームでファイルを送る
-u user:passBasic認証
-w '%{http_code}'状態コードなどを表示する
-C -途中から再開する
bash
$ curl https://example.com
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ curl -LO https://example.com/file.tar.gz
$ curl -I https://example.com
$ curl -s https://api.github.com/users/octocat | jq .name
$ curl -X POST --json '{"name":"alice"}' https://httpbin.org/post
$ curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me
$ curl -s -o /dev/null -w '%{http_code} %{time_total}s\n' https://example.com
$ curl ipinfo.io             # 自分のグローバルIP

wgetファイルをダウンロードする

URL からファイルをダウンロードします。途中からの再開やサイトの丸ごと保存もできます。

bash
$ wget https://example.com/file.iso
$ wget -c https://example.com/big.iso       # 途中から再開
$ wget -O out.html https://example.com
$ wget -q -O- https://example.com | head     # 画面に出す
$ wget -r -np -k https://example.com/docs/   # サイトを再帰的に保存

nc (netcat)TCP/UDP で直接つなぐ

TCP/UDP で直接つないで、ポートが開いているか調べたり、データを送受信したりします。

bash
$ nc -zv example.com 443                  # ポートが開いているか
$ nc -zv 192.168.1.10 20-100              # 範囲をまとめて
$ nc -l 9000 > received.bin               # 受け取る側
$ nc 192.168.1.10 9000 < file.bin         # 送る側

socat何でもつなぐ多機能版 netcat

2つの通信をつないで中継するなど、多機能な通信ツールです。

bash
$ socat TCP-LISTEN:8080,fork TCP:localhost:3000   # 8080 → 3000 に中継
$ socat - TCP:example.com:80

dig / nslookupDNS を調べる

Ubuntu には最初から入っていません。 で入れられます。

ドメイン名の DNS 情報(IP アドレスやメールサーバーなど)を調べます。

bash
$ dig example.com
$ dig +short example.com A
$ dig +short example.com MX
$ dig @1.1.1.1 example.com        # DNSサーバーを指定
$ dig -x 8.8.8.8 +short           # 逆引き
$ nslookup example.com

traceroute / tracepath経路を調べる

Ubuntu には最初から入っていません。 で入れられます。

相手までの通信がどの経路を通っているかを調べます。

bash
$ traceroute example.com
$ tracepath example.com

ethtoolネットワークカードの情報

ネットワークカードの速度や状態を表示します。

bash
$ ethtool eth0

iptables / nftファイアウォール

通信を許可・遮断するファイアウォールのルールを表示・設定します。

bash
$ sudo iptables -L -n -v              # ルールの一覧
$ sudo nft list ruleset

ip の便利なサブコマンド

bash
$ ip neigh                         # ARP テーブル(同じLANの機器のMACアドレス)
$ ip route get 8.8.8.8             # その宛先へはどこから出ていくか
$ sudo ip addr add 192.168.50.10/24 dev eth0   # アドレスを追加(再起動で消える)
$ sudo ip link set eth0 down        # インターフェースを止める
$ sudo ip link set eth0 up          # 起動する
$ ip -s link                       # 送受信の量とエラー

nmcliNetworkManager を操作する

NetworkManager を使って、Wi-Fi への接続やネットワーク設定を行います。

bash
$ nmcli general status
$ nmcli device status
$ nmcli connection show
$ nmcli device wifi list                               # 周りの Wi-Fi
$ nmcli device wifi connect "SSID" password "pass"
$ nmcli connection up "有線接続 1"

resolvectl名前解決(systemd-resolved)

どの DNS サーバーを使っているか確認したり、DNS のキャッシュを消したりします。

bash
$ resolvectl status                 # 使っているDNSサーバー
$ resolvectl query example.com
$ sudo resolvectl flush-caches      # DNSキャッシュを消す

hostかんたんな DNS 問い合わせ

ドメイン名から IP アドレスを調べる、かんたんな DNS 問い合わせのコマンドです。

bash
$ host example.com
$ host -t MX example.com
$ host 8.8.8.8                      # 逆引き

whoisドメインやIPの登録情報

Ubuntu には最初から入っていません。 で入れられます。

ドメインや IP アドレスの登録情報(登録者・有効期限など)を調べます。

bash
$ whois example.com | grep -iE 'expir|registrar'
$ whois 8.8.8.8 | grep -i orgname

nmapポートスキャン

Ubuntu には最初から入っていません。 で入れられます。

ネットワーク上の機器や、開いているポートを調べます。

bash
$ nmap -sn 192.168.1.0/24           # LAN の中の生きている機器(ping スキャン)
$ nmap -p 22,80,443 example.com
$ nmap -sV localhost                # 動いているサービスとバージョン

mtrping と traceroute を合わせた経路診断

ping と traceroute を組み合わせて、どこで遅くなっているかを調べます。

bash
$ mtr example.com                 # 経路の各地点の遅延と損失をリアルタイムに
$ mtr -rwc 50 example.com         # 50回測ってレポートを出す

tcpdump通信を覗く

流れている通信(パケット)を記録・表示します。

bash
$ sudo tcpdump -i any port 53                  # DNS の通信
$ sudo tcpdump -i eth0 host 192.168.1.10 -n
$ sudo tcpdump -i any -w cap.pcap port 443     # 保存(Wireshark で開ける)
$ sudo tcpdump -A -i lo port 3000              # 中身を文字で表示

aria2c高速ダウンロード(分割・並列)

Ubuntu には最初から入っていません。 で入れられます。

1つのファイルを分割して並列にダウンロードするなど、高速なダウンロードツールです。

bash
$ aria2c -x 8 https://example.com/big.iso      # 8本の接続で分割ダウンロード
$ aria2c -i urls.txt -j 4                      # 一覧を4つ同時に
$ aria2c file.torrent

sftpSSH でファイルをやり取りする(対話式)

SSH を使って、対話式でファイルをやり取りします。

bash
$ sftp user@host
sftp> ls / cd / lcd       # リモート / ローカルの移動
sftp> get file.txt        # ダウンロード
sftp> put local.txt       # アップロード
sftp> put -r dir/         # ディレクトリごと
sftp> bye

sshfsリモートのディレクトリをマウントする

Ubuntu には最初から入っていません。 で入れられます。

SSH の先のフォルダを、手元のフォルダとしてマウントします。

bash
$ mkdir -p ~/mnt/vps && sshfs vps:/srv ~/mnt/vps
$ fusermount -u ~/mnt/vps      # 外す

python3 -m http.server — 手元をすぐにWebサーバーにする

bash
$ python3 -m http.server 8000 --bind 127.0.0.1
$ python3 -m http.server 8000 -d ./dist

curl でよく使う診断

bash
$ curl -w '\nDNS %{time_namelookup}s 接続 %{time_connect}s TLS %{time_appconnect}s 最初の応答 %{time_starttransfer}s 合計 %{time_total}s\n' -o /dev/null -s https://example.com
$ curl --resolve example.com:443:203.0.113.10 https://example.com   # DNSを使わずIPを指定
$ curl -x http://proxy:8080 https://example.com                    # プロキシ経由
$ curl -k https://self-signed.local                                # 証明書の検証をしない(開発用)