ネットワーク構成、診断、および一般的なLinuxのトラブルシューティング システム管理の重要な部分。 Linuxシステムを使用する開発者でも、Linuxネットワークコマンドに関する知識 追加の利点です。
具体的には、DevOpsエンジニアになるか、SREに参加する場合は、すべてのLinuxトラブルシューティングコマンドを知っておくことが不可欠です。 彼らはあなたの日々の活動の一部になるからです。
この投稿では、重要なLinuxネットワークおよびトラブルシューティングコマンドについて説明します。 Linuxシステムでネイティブに利用可能です。
Linuxのネットワークおよびトラブルシューティングコマンドとして最適なものは何ですか?
以下は、ネイティブで使用可能なトラブルシューティングコマンドのリストです。
コマンド | 説明 |
hostname | サーバーのホスト名を確認して設定します。 |
host | ホストDNSの詳細を取得するには |
ping | ICMPプロトコルを使用してリモートサーバーに到達できるかどうかを確認します。パケットの往復時間も表示されます。 |
curl | データの転送に使用されるクロスプラットフォームユーティリティ。いくつかのネットワークの問題のトラブルシューティングに使用できます。 |
wget | ファイルをダウンロードするためのユーティリティ。プロキシ接続と接続のトラブルシューティングに使用できます。 |
ip | ifconfig の代わり 。システムネットワークインターフェースに関する情報を構成および取得するために使用できます |
arp | arpキャッシュを表示および管理するためのユーティリティ。 |
ss/netstat | 主にポートとUnixソケットの接続とPIDを確認するために使用されます。 |
tracerout e | このユーティリティはICMPプロトコルを使用して、宛先サーバーの読み取りに関係するホップを検出します。また、ホップ間の時間も表示されます。 |
mtr | mtrはping の組み合わせです およびtraceroute 。また、中間ホストや応答性などの追加情報も提供します。 |
dig | ドメイン名に関連付けられたDNSレコードを取得するのに役立ちます。 |
nslookup | digに似たコマンド。 |
nc | TCP/UDPソケットをデバッグするためのユーティリティ。 |
telnet | ポートのリモート接続をテストするために使用できます |
route | すべてのルートテーブル情報を取得するのに役立ちます |
tcpdump | このユーティリティは、ネットワークパケットをキャプチャし、ネットワークの問題を分析するのに役立ちます。 |
lsof | 開いているすべてのファイルとそれを開いたプロセス情報を一覧表示します |
各コマンドを理解し、それを使用してLinuxのトラブルシューティングを行う方法を見てみましょう。
重要な注意: この投稿で言及されているすべてのコマンド/ユーティリティには、多くのオプションとフラグがあります。すべてのコマンドにはマニュアルページがあり、それを使用して、ユースケースに必要なフラグとオプションを識別できます。たとえば、
ip
の場合 コマンドの場合は、man ip
と入力するだけです。 ターミナルで、そのコマンドに関するすべての詳細を取得します。
1。ホスト名
Hostnameコマンドは、マシンのホスト名を表示し、ホスト名を設定するために使用されます。
hostname
hostnameコマンドを使用して、マシンの新しいホスト名を設定できます。たとえば、
sudo hostname temp.com
「hostname
」を使用してホスト名を設定した場合 」コマンドを実行すると、マシンを再起動すると、ホスト名がホスト名ファイルで指定された名前に変更されます(例:/ etc / hostname)。
したがって、ホスト名を永続的に変更する場合は、/etc/hosts
を使用できます。 サーバー上に存在するファイルまたは関連するホスト名ファイル。
- Ubuntuマシンの場合、
/etc/hostname
で変更できます ファイル。 - RHEL、CentOS、Fedoraの場合は、
/etc/sysconfig/network
で変更できます。 ファイル。
2。ホスト
ホストコマンドは、IPまたはDNS名の逆引き参照用です。
たとえば、IPが接続されたDNSを検索する場合は、次のようにhostコマンドを使用できます。
host 8.8.8.8
逆の操作を行って、ドメイン名に関連付けられているIPアドレスを見つけることもできます。たとえば、
host devopscube.com
3。 ping
pingネットワークユーティリティは、リモートサーバーが到達可能かどうかを確認するために使用されます。これは主に、接続の確認とネットワークのトラブルシューティングに使用されます。
以下の詳細を提供します。
- 送受信されたバイト数
- パケットの送信、受信、および紛失
- おおよそのラウンドトリップ時間(ミリ秒単位)
Pingコマンドの構文は次のとおりです。
ping <IP or DNS>
たとえば、
ping devopscube.com
IPアドレスにpingを送信するには
ping 8.8.8.8
ctrl + cを使用せずにping出力を制限する場合は、以下に示すような番号で「-c」フラグを使用できます。
ping -c 1 devopscube.com
4。カール
Curlユーティリティは、主にサーバーとの間でデータを転送するために使用されます。ただし、ネットワークのトラブルシューティングには使用できます。
ネットワークのトラブルシューティングについては、curl
DICT
などのプロトコルをサポートします 、FILE
、FTP
、FTPS
、GOPHER
、HTTP
、HTTPS
、IMAP
、IMAPS
、LDAP
、LDAPS
、MQTT
、POP3
、POP3S
、RTMP
、RTMPS
、RTSP
、SCP
、SFTP
、SMB
、SMBS
、SMTP
、SMTPS
、TELNET
およびTFTP
たとえば、curl
telnetを使用してポート22の接続を確認できます。
curl -v telnet://192.168.33.10:22
curlを使用してFTP接続を確認できます。
curl ftp://ftptest.net
Webサーバー接続のトラブルシューティングもできます。
curl http://devopscube.com -I
5。 wget
wget
コマンドは主にWebページをフェッチするために使用されます。
wget
を使用できます ネットワークの問題のトラブルシューティングにも使用できます。
たとえば、wgetを使用してプロキシサーバー接続のトラブルシューティングを行うことができます。
wget -e use_proxy=yes http_proxy=<proxy_host:port> http://externalsite.com
ファイルを取得することで、Webサイトが稼働しているかどうかを確認できます。
wget www.google.com
6。 ip(ifconfig)
ip
コマンドは、ルートとネットワークインターフェイスを表示および操作するために使用されます。 ip コマンドは、 ifconfig
の新しいバージョンです。 。 ifconfigはすべてのシステムで機能しますが、ifconfigの代わりにipコマンドを使用することをお勧めします。
ip
の例をいくつか見てみましょう。 コマンド。
ip addr
このコマンドをパイプおよびgrepで使用すると、eth0インターフェイスのIPアドレスなどのより詳細な出力を取得できます。 IPを動的にフェッチする必要がある自動化ツールで作業する場合に非常に便利です。
次のコマンドは、eth0
のIPアドレスを取得します ネットワークインターフェース。
ip a | grep eth0 | grep "inet" | awk -F" " '{print $2}'
特定のインターフェースの詳細を取得する
ip a show eth0
ルーティングテーブルを一覧表示できます。
ip route
ip route list
7。 arp
ARP(アドレス解決プロトコル )は、システムが相互作用したローカルネットワークのIPアドレスとMACアドレスのキャッシュテーブルを示しています。
arp
出力例
[email protected]:~$ arp
Address HWtype HWaddress Flags Mask Iface
10.0.2.3 ether 52:54:00:12:35:03 C eth0
192.168.33.1 ether 0a:00:27:00:00:00 C eth1
10.0.2.2 ether 52:54:00:12:35:02 C eth0
8。 ss(netstat)
ss
コマンドはnetstat
の代わりになります 。 netstat
は引き続き使用できます すべてのシステムでコマンド。
ss
を使用する コマンドを使用すると、netstat
よりも多くの情報を取得できます 指図。 ssコマンドは、カーネルユーザースペースからすべての情報を取得するため、高速です。
それでは、ss
のいくつかの使用法を見てみましょう。 コマンド。
「ss
」コマンドは、マシン上のすべてのTCP、UDP、およびUnixソケット接続を一覧表示します。
[email protected]:~$ ss Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 7594 * 0 u_str ESTAB 0 0 @/com/ubuntu/upstart 7605 * 0 u_str ESTAB 0 0 * 29701 * 0 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 29702 * 0 tcp ESTAB 0 400 172.31.18.184:ssh 1.22.167.31:61808
ss
の出力 コマンドが大きくなるので、” ss | less
」コマンドを使用して、出力をスクロール可能にします。
TCP、UDP、およびUnixソケットの除外
TCP、UDP、またはUNIXソケットの詳細を除外する場合は、「ss」コマンドで「-t」、「-u」、および「-x」フラグを使用します。特定のポートへの確立されたすべての接続が表示されます。以下に示すように、特定のフラグとともに「a」を使用して、接続されているポートとリスニングポートの両方を一覧表示する場合。
ss -ta ss -ua ss -xa
すべてのリスニングポートを一覧表示するには、ssコマンドで「-l」フラグを使用します。特定のTCP、UDP、またはUNIXソケットを一覧表示するには、以下に示すように、「-t」、「-u」、および「-x」フラグと「-l」を使用します。
[email protected]:~$ ss -lt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:ssh *:* LISTEN 0 50 :::http-alt :::* LISTEN 0 50 :::55857 :::* LISTEN 0 128 :::ssh :::* LISTEN 0 50 :::53285 :::* [email protected]:~$
確立されたすべてのポートを一覧表示するには、state established
を使用します 以下に示すようにフラグを立てます。
ss -t -r state established
リスニング状態のすべてのソケットを一覧表示するには、
ss -t -r state listening
9。 traceroute
traceroute
がない場合 システムまたはサーバーのユーティリティ。ネイティブリポジトリからインストールできます。
traceroute
ネットワークトラブルシューティングユーティリティです。 tracerouteを使用すると、特定のパケットが宛先に到達するために必要なホップ数を見つけることができます。
たとえば、
traceroute google.com
これが出力です。
traceroute to google.com (173.194.33.163), 30 hops max, 60 byte packets 1 ec2-50-112-0-84.us-west-2.compute.amazonaws.com (50.112.0.84) 1.974 ms 1.895 ms 1.899 ms 2 100.64.1.247 (100.64.1.247) 1.414 ms 100.64.1.137 (100.64.1.137) 1.127 ms 100.64.1.97 (100.64.1.97) 1.313 ms 3 100.64.0.198 (100.64.0.198) 1.443 ms 100.64.0.62 (100.64.0.62) 2.160 ms 100.64.0.60 (100.64.0.60) 2.116 ms 10 66.249.94.214 (66.249.94.214) 6.313 ms 7.104 ms 209.85.249.34 (209.85.249.34) 5.986 ms 11 209.85.244.65 (209.85.244.65) 6.157 ms 6.341 ms 6.574 m. . 12 sea09s18-in-f3.1e100.net (173.194.33.163) 6.302 ms 6.517 ms 6.071 ms [email protected]:~$
上記の出力は、devopscube AWS ec2サーバーからgoogle.comに到達するためのホップカウント(12)を示しています。
10。 mtr
mtr
ユーティリティは、ネットワークのボトルネックをトラブルシューティングするためのネットワーク診断ツールです。両方のping
の機能を組み合わせています およびtraceroute
たとえば、次のコマンドはtraceroute
を示しています。 リアルタイムで出力します。
mtr google.com
これが出力です。

mtrレポート
–reportフラグを使用してレポートを生成できます。 mtrレポートを実行すると、宛先に10パケットが送信され、レポートが作成されます。
mtr -n --report google.com

11。掘る
DNSルックアップに関連するタスクがある場合は、「dig
」を使用できます。 」コマンドを使用して、DNSネームサーバーを照会します。
次のコマンドは、twitter.comのすべてのDNSレコードとTTL情報を返します
dig twiter.com ANY

+short
を使用する 詳細なしで出力を取得します。
dig google.com ANY +short
digを使用して特定のDNSレコードを取得する
たとえば、A record
を取得する場合 特定のドメイン名については、digコマンドを使用できます。 +short
詳細なしで情報を提供します
dig www.google.com A +short
同様に、次のコマンドを使用して、他のレコード情報を個別に取得できます。
dig google.com CNAME +short
dig google.com MX +short
dig google.com TXT +short
dig google.com NS +short
digを使用した逆引きDNSルックアップ
次のコマンドを使用して、digで逆DNSルックアップを実行できます。 8.8.8.8
を置き換えます 必要なIPを使用
dig -x 8.8.8.8
12。 nslookup
Nslookup (Name Server Lookup)ユーティリティは、DNSエントリをチェックするために使用されます。 digコマンドに似ています。
ドメインのDNSレコードを確認するには、次のコマンドを使用できます。
nslookup google.com
IPアドレスを使用して逆引き参照を実行することもできます。
nslookup 8.8.8.8
ドメイン名のすべてのDNSレコードを取得するには、次を使用できます。
nslookup -type=any google.com
同様に、mx
のようなレコードをクエリできます 、soa
など
13。 nc(netcat)
nc
(netcat)コマンドは、ネットワークコマンドのスイス軍として知られています。
nc
を使用する 、特定のポートで実行されているサービスの接続を確認できます。
たとえば、ssh
かどうかを確認するには ポートが開いている場合は、次のコマンドを使用できます。
nc -v -n 192.168.33.10 22
netcat
TCP/UDPを介したデータ転送やポートスキャンにも使用できます。
クラウド環境では、ポートスキャンは推奨されません。ご使用の環境でポートスキャン操作を実行するようにクラウドプロバイダーにリクエストする必要があります。
14。 telnet
telnetコマンドは、ポートでのTCP接続のトラブルシューティングに使用されます。
telnetを使用してポート接続を確認するには、次のコマンドを使用します。
telnet 10.4.5.5 22
15。ルート
「route
」コマンドは、システムのルートテーブルの詳細を取得し、それを操作するために使用されます。 routeコマンドの例をいくつか見てみましょう。
「route
」を実行します 」コマンドを引数なしで指定して、システムまたはサーバー内の既存のすべてのルートを一覧表示します。
[email protected]:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default ip-172-31-16-1. 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 172.31.16.0 * 255.255.240.0 U 0 0 0 eth0 [email protected]:~$
ホスト名なしで完全な出力を数値形式で取得する場合は、routeコマンドで「-n」フラグを使用できます。
[email protected]:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.31.16.1 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 [email protected]:~$
16。 tcpdump
tcpdump
コマンドは主にネットワークトラフィックのトラブルシューティングに使用されます。
注:
tcpdump
の出力を分析するには コマンドにはある程度の学習が必要なため、それを説明することはこの記事の範囲外です。
tcpdump
コマンドは、システムのネットワークインターフェイスで機能します。したがって、コマンドを実行するには管理者権限を使用する必要があります。
次のコマンドを使用して、すべてのインターフェイスを一覧表示します。
sudo tcpdump --list-interfaces
特定のインターフェースでパケットのダンプを取得するには、次のコマンドを使用できます。
注:
ctrl + c
を押します パケットのキャプチャを停止します。
sudo tcpdump -i eth0
パケットキャプチャを制限するには、-c
を使用できます 番号の付いたフラグ。
たとえば、
sudo tcpdump -i eth0 -c 10
すべてのインターフェースでパケットをキャプチャするには、any
を使用します 以下に示すようにフラグを立てます。
sudo tcpdump -i any
17。 lsof
lsof
日常のLinuxトラブルシューティングで使用されるコマンドです。このコマンドは、Linuxシステムを使用するすべての人にとって同様に重要です。
開いているすべてのファイルを一覧表示するには、lsof
を実行します コマンド。
lsof
開発者とDevOpsエンジニアが直面する一般的なエラーの1つは、「バインドに失敗したエラー:アドレスはすでに使用されています 「。次のコマンドを使用して、ポートに関連付けられているプロセスIDを見つけることができます。プロセスを強制終了してポートを解放できます。
lsof -i :8080
サードパーティネットワークトラブルシューティングユーティリティ
サードパーティのソリューションから利用できるネットワークトラブルシューティングコマンドラインユーティリティは他にもあります。
それらを個別にインストールし、トラブルシューティングの目的で使用する必要があります。セキュリティコンプライアンス上の理由により、すべての組織がそれを許可するわけではありません。ただし、サードパーティのツールを使用するオプションが必要な場合は、それらを調べることができます。
結論
この記事では、ネットワークのトラブルシューティングと構成のための重要なLinuxコマンドラインユーティリティについて説明しました。
システム管理、DevOps、またはSREの役割を開始する場合は、作業中のプロジェクトをサポートするためにこれらのユーティリティについて学ぶことが不可欠です。
各ユーティリティには多くの機能があり、要件を満たすためにさらに探索することができます。
重要なコマンドを見逃したと思われる場合は、コメントセクションでお知らせください。
また、シェルスクリプトを学習したい場合は、シェルスクリプトの学習方法に関するガイドを確認してください。開発者の方は、すべての開発者が知っておくべきLinuxコマンドに関するガイドをご覧ください。