在Linux系統中,網絡設置、問題查找和故障修復是系統管理的重要技能,對于開發人員來說,了解Linux故障排除命令對于日常任務十分有幫助。
本文將介紹在Linux系統中已經可用的重要的網絡和故障排除命令。
以下是已經存在于Linux機器上的故障排除命令列表:
命令??????????????????描述
|?hostname?????|?檢查和設置服務器的主機名
|?host?????????|?檢索給定主機的DNS詳細信息
|?ping?????????|?使用ICMP檢查遠程服務器的可達性,并顯示往返時間
|?curl?????????|?用于數據傳輸的通用工具,用于故障排除網絡問題
|?wget?????????|?下載文件,解決代理連接和連通性問題
|?ip???????????|?替代ifconfig,配置和檢索有關網絡接口的信息
|?arp??????????|?管理和查看ARP緩存
|?ss/netstat???|?檢查端口和Unix套接字上的連接和PID
|?traceroute???|?使用ICMP查找到目標服務器的躍點,并顯示躍點之間的時間
|?mtr??????????|?結合ping和traceroute,提供額外的信息,如中間主機
|?dig??????????|?檢索與域名相關的DNS記錄
|?nslookup?????|?類似于dig,用于DNS查詢
|?nc???????????|?用于調試TCP/UDP套接字的實用工具
|?telnet???????|?在端口上測試遠程連接
|?route????????|?檢索路由表信息
|?tcpdump??????|?捕獲用于分析網絡問題的網絡數據包
|?lsof?????????|?列出打開的文件和關聯的進程信息
本文中提到的每個命令或實用程序都帶有各種選項和標志。要了解這些選項和標志,可以參考每個命令的手冊頁。手冊頁提供了有關命令功能及其使用方法的詳細信息。只需在終端中鍵入man
,然后輸入命令即可訪問指南,并查看適合大家需求的可用選項和標志。
1 hostname
hostname
命令可幫助檢查機器的當前主機名,并支持給其指定新的主機名。
要查看當前名稱,請鍵入:
hostname
如果想更改名稱,可以使用以下方式使用hostname
命令:
sudo?hostname?example.com
注意:使用此命令進行的更改是臨時的。在重新啟動機器后,會恢復為保存在文件中的原始名稱(例如/etc/hostname)。
但是,如果想永久更改主機名,可以使用/etc/hosts
文件或服務器上存在的hostname文件:
-
對于Ubuntu,請編輯
/etc/hostname file
。 -
對于RHEL、CentOS和Fedora,請在?
/etc/sysconfig/network file
中進行更改。
2 ping
ping
網絡工具用于檢查遠程服務器是否可達。其主要目的是驗證連接性并排除網絡問題。
它提供以下信息:
-
發送和接收的字節數
-
發送、接收和丟失的數據包
-
往返時間的大致時間(以毫秒為單位)
ping命令的語法:ping IPADDRESS or DOMAINANME
例如:
ping?medium.com
要ping一個IP地址:
ping?1.1.1.1
如果想在不使用Ctrl+C的情況下限制ping輸出,可以使用帶有數字的-c
標志,如下所示:
ping?-c?1?medium.com
3 curl
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
檢查FTP連接:
curl?ftp://ftptest.net
還可以使用curl來排查Web服務器的連接性:
curl?http://medium.com?-I
在這些示例中,curl用于驗證不同端口和協議上的連接性,使其成為網絡診斷的通用工具。
4 wget
wget
命令主要用于獲取網頁,但也可以幫助排查網絡問題。
例如,可以使用wget來排查通過代理服務器的連接:
wget?-e?use_proxy=yes?http_proxy=?http://externalsite.com
要檢查網站是否可用,可以獲取其文件:
wget?www.google.com
在這些示例中,wget擴展了其功能,不僅可以獲取網頁,還可以用于診斷網絡問題,如代理服務器連接和網站可用性。
5 IP(ifconfig)
ip
命令用于顯示和管理路由和網絡接口。它是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
這些示例說明了如何使用ip
命令顯示有關網絡設備、配置和路由表的詳細信息。
6 arp
ARP(地址解析協議)顯示了系統與本地網絡的IP地址和MAC地址之間的緩存表。
arp
示例輸出:
vagrant@somelab:~$?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
7 ss(netstat)
ss
命令可以作為netstat
的替代品使用,但在所有系統上仍然可以使用netstat
命令。
使用ss
命令,可以獲取比netstat
命令更多的信息。ss命令速度快,因為它從內核用戶空間獲取所有信息。
下面來看一下ss
命令的幾個用法。
7.1 列出所有連接
"ss"命令將列出計算機上的所有TCP、UDP和Unix套接字連接。
ubuntu@medium:~$?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"命令使輸出可滾動。
7.2 過濾TCP、UDP和Unix套接字
如果要過濾掉TCP、UDP或UNIX套接字的詳細信息,請使用"ss"命令的"-t"、"-u"和"-x"標志。它將顯示所有連接到特定端口的已建立連接。如果要使用"a"和特定標志同時列出已連接和監聽端口,請參考下面的示例。
ss?-ta
ss?-ua
ss?-xa
7.3 列出所有監聽端口
要列出所有監聽端口,請使用"ss"命令的"-l"標志。要列出特定的TCP、UDP或UNIX套接字,請使用"-t"、"-u"和"-x"標志與"-l"一起,如下所示。
ubuntu@medium:~$?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???????????????????:::*
ubuntu@medium:~$
7.4 列出所有已建立連接
要列出所有已建立的端口,請使用狀態已建立標志,如下所示。
ss?-t?-r?state?established
要列出所有處于監聽狀態的套接字,
ss?-t?-r?state?listening
8 mtr
mtr
工具是用于排查網絡瓶頸的網絡診斷工具。它結合了ping
和traceroute
的功能。
例如,以下命令實時顯示traceroute
輸出。
mtr?google.com
mtr報告
可以使用"--report"標志生成報告。運行mtr報告時,它會向目標發送10個數據包并生成報告。
mtr?-n?--report?google.com
9 dig
如果有與DNS查找相關的任務,可以使用“dig”命令查詢DNS名稱服務器。
9.1 使用dig獲取所有DNS記錄
下面的命令返回twitter.com的所有DNS記錄和TTL信息
dig?twitter.com?ANY
使用+shor
t參數可以獲得無冗余的輸出。
dig?google.com?ANY?+short
9.2 使用dig獲取特定的DNS記錄
例如,如果想獲取特定域名的A記錄,可以使用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
9.3 使用dig進行反向DNS查找
可以使用以下命令使用dig進行反向DNS查找。將8.8.8.8
替換為所需的IP地址。
dig?-x?8.8.8.8
10 nc(netcat)
nc
(netcat)命令被稱為網絡命令中的瑞士軍刀。
使用nc
,可以檢查特定端口上運行的服務的連接性。
例如,要檢查ssh
端口是否打開,可以使用以下命令。
nc?-v?-n?192.168.33.10?22
netcat
還可以用于TCP/UDP數據傳輸和端口掃描。
在云環境中不推薦進行端口掃描。您需要請求云服務提供商在您的環境中執行端口掃描操作。
11 telnet
telnet命令用于故障排除端口上的TCP連接。
要使用telnet檢查端口連接性,請使用以下命令。
telnet?10.4.5.5?22
12 lsof
lsof
是個在日常Linux故障排除中使用的命令。對于任何與Linux系統工作的人來說,這個命令同樣重要。
要列出所有打開的文件,請執行lsof
命令。
開發人員和DevOps工程師經常遇到的一個常見錯誤是“綁定失敗錯誤:地址已在使用中”。可以使用以下命令找到與端口關聯的進程ID,然后可以終止該進程以釋放端口。
lsof?-i?:8080
本文介紹了修復和設置網絡所需的重要Linux命令。每個命令都有很多功能,讀者可以根據需要深入挖掘。