12個不可不知的Linux網絡命令,精通Linux網絡編程
在Linux系統(tǒng)中,網絡設置、問題查找和故障修復是系統(tǒng)管理的重要技能,對于開發(fā)人員來說,了解Linux故障排除命令對于日常任務十分有幫助。
本文將介紹在Linux系統(tǒng)中已經可用的重要的網絡和故障排除命令。
以下是已經存在于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網絡工具用于檢查遠程服務器是否可達。其主要目的是驗證連接性并排除網絡問題。
它提供以下信息:
- 發(fā)送和接收的字節(jié)數
- 發(fā)送、接收和丟失的數據包
- 往返時間的大致時間(以毫秒為單位)
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支持多種協(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服務器的連接性:
curl http://medium.com -I
在這些示例中,curl用于驗證不同端口和協(xié)議上的連接性,使其成為網絡診斷的通用工具。
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在所有系統(tǒng)中都可以工作,但建議使用ip命令以獲得更好的功能。
以下是使用ip命令的幾個示例:
顯示網絡設備和配置:
ip addr
可以將此命令與管道和grep結合使用,以獲取特定信息,例如eth0接口的IP地址。這對于需要動態(tài)獲取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(地址解析協(xié)議)顯示了系統(tǒng)與本地網絡的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命令速度快,因為它從內核用戶空間獲取所有信息。
下面來看一下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"和特定標志同時列出已連接和監(jiān)聽端口,請參考下面的示例。
ss -ta
ss -ua
ss -xa
7.3 列出所有監(jiān)聽端口
要列出所有監(jiān)聽端口,請使用"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 列出所有已建立連接
要列出所有已建立的端口,請使用狀態(tài)已建立標志,如下所示。
ss -t -r state established
要列出所有處于監(jiān)聽狀態(tài)的套接字,
ss -t -r state listening
8 mtr
mtr工具是用于排查網絡瓶頸的網絡診斷工具。它結合了ping和traceroute的功能。
例如,以下命令實時顯示traceroute輸出。
mtr google.com
mtr報告
可以使用"--report"標志生成報告。運行mtr報告時,它會向目標發(fā)送10個數據包并生成報告。
mtr -n --report google.com
9 dig
如果有與DNS查找相關的任務,可以使用“dig”命令查詢DNS名稱服務器。
9.1 使用dig獲取所有DNS記錄
下面的命令返回twitter.com的所有DNS記錄和TTL信息
dig twitter.com ANY
使用+short參數可以獲得無冗余的輸出。
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數據傳輸和端口掃描。
在云環(huán)境中不推薦進行端口掃描。您需要請求云服務提供商在您的環(huán)境中執(zhí)行端口掃描操作。
11 telnet
telnet命令用于故障排除端口上的TCP連接。
要使用telnet檢查端口連接性,請使用以下命令。
telnet 10.4.5.5 22
12 lsof
lsof是個在日常Linux故障排除中使用的命令。對于任何與Linux系統(tǒng)工作的人來說,這個命令同樣重要。
要列出所有打開的文件,請執(zhí)行l(wèi)sof命令。
開發(fā)人員和DevOps工程師經常遇到的一個常見錯誤是“綁定失敗錯誤:地址已在使用中”??梢允褂靡韵旅钫业脚c端口關聯的進程ID,然后可以終止該進程以釋放端口。
lsof -i :8080
本文介紹了修復和設置網絡所需的重要Linux命令。每個命令都有很多功能,讀者可以根據需要深入挖掘。