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