加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【Linux】小林帶你盤一盤,Linux系統(tǒng)常用的網(wǎng)絡(luò)命令

2021/07/20
471
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是小林。

服務(wù)器一般都是命令頁面,不像 windows 有圖形頁面點(diǎn)點(diǎn)鼠標(biāo)就好,所以掌握些基本的 Linux 命令是很有必要的,不然就無法操作 Linux,更體會(huì)不到 Linux 的精髓。

這次,我們就來看看關(guān)于網(wǎng)絡(luò)相關(guān)的命令。

學(xué)習(xí)網(wǎng)絡(luò)不應(yīng)該只局限于理論,作為工程師的我們,掌握一些基本的網(wǎng)絡(luò)命令對(duì)我們幫助會(huì)很大,因?yàn)槠綍r(shí)在遠(yuǎn)程操作、開發(fā)、調(diào)試、排查線上問題的時(shí)候,會(huì)常常用到。

Linux 為我們提供了很多網(wǎng)絡(luò)相關(guān)的命令,我們這次就來看看 Linux 系統(tǒng)里有哪些常用的網(wǎng)絡(luò)命令。

 

遠(yuǎn)程連接命令

如果我們要想操作 Linux 服務(wù)器,不可能說拿個(gè)顯示器、鼠標(biāo)和鍵盤接到服務(wù)器上,服務(wù)器一般都是放在機(jī)房里的,只需讓服務(wù)器把網(wǎng)絡(luò)接通,我們?cè)谧约旱碾娔X就可以使用 ssh 命令遠(yuǎn)程登錄服務(wù)器,進(jìn)而操作和管理服務(wù)器。

還有一個(gè)很常用的遠(yuǎn)程命令是 scp,它可以幫助我們傳輸文件到服務(wù)器上。

ssh

在需要遠(yuǎn)程登錄 Linux 系統(tǒng),可以使用 ssh 命令,比如你想遠(yuǎn)程登錄一臺(tái)服務(wù)器,可以使用 ssh user@ip 的方式,如下圖:

接著,會(huì)有輸入密碼的提示,輸入正確的密碼后,就進(jìn)入到了服務(wù)器的終端頁面,之后你操作的命令就是控制服務(wù)器的了。

 

scp

當(dāng)我們需要把一臺(tái)機(jī)器上的文件傳輸給另一臺(tái)機(jī)器時(shí),使用 scp 命令就可以。

如下圖,我使用 scp 命令將本地 test.txt 文件傳輸給了 IP 地址為 192.168.12.35 機(jī)器的 /home 目錄。

輸入 scp 命令后,會(huì)彈出需要輸入對(duì)方密碼的提示,輸入完成后,輸入回車即可,如果密碼驗(yàn)證通過后,就進(jìn)行文件的傳輸。

 

查看本地網(wǎng)絡(luò)狀態(tài)

要想知道本地機(jī)器的網(wǎng)絡(luò)狀態(tài),比較常用的網(wǎng)絡(luò)命令是 ifconfig 和 netstat。

 

ifconfig

當(dāng)你想知道機(jī)器上有哪些網(wǎng)口,和網(wǎng)口對(duì)應(yīng)的狀態(tài)信息時(shí),使用 ifconfig 就可以,狀態(tài)信息包含 IP 地址、子網(wǎng)掩碼、MAC 地址等。

如下圖,是在我設(shè)備上的 ifconfig 信息。

可以看到,這臺(tái)機(jī)器一共有 3 個(gè)網(wǎng)口,分別是 eth0、eth1、lo。其中 lo 是本地回路,發(fā)送給 lo 就相當(dāng)于發(fā)送給自己,eth0 和 eth1 都是真實(shí)的網(wǎng)口。

 

netstat

netstat 命令主要用于查看目前本機(jī)的網(wǎng)絡(luò)使用情況。

查看所有 socket

如果只是單純執(zhí)行 netstat 命令,則查詢的是本地所有 socket,如下圖:

上圖中,我們看到的都是 socket 文件,socket 負(fù)責(zé)在客戶端與服務(wù)端之間收發(fā)數(shù)據(jù),當(dāng)客戶端和服務(wù)端建立連接時(shí),各自同時(shí)都會(huì)生成一個(gè) socket 文件,用于管理這個(gè)連接。

 

查看 TCP/UDP 連接

如果只想看 TCP 連接的網(wǎng)絡(luò)信息,可以使用 netstat -t。

比如下面我通過 netstat -t 看 tcp 協(xié)議的網(wǎng)絡(luò)情況:

上圖的末尾的 state 描述的是當(dāng)前 TCP 連接處于的狀態(tài)。

另外,如果要想看 UDP 的網(wǎng)絡(luò)信息,可以使用 netstat -u。

查看端口占用

如果你想知道某個(gè)端口是哪個(gè)進(jìn)程在占用,比如我想查 80 端口被哪個(gè)進(jìn)程占用了,如下圖:

可以看到,80 端口被 http 進(jìn)程占用了,最末尾的信息也能看到這個(gè)進(jìn)程對(duì)應(yīng)的 pid。

 

網(wǎng)絡(luò)測(cè)試

當(dāng)我們想確認(rèn)網(wǎng)絡(luò)的延時(shí)情況,以及與服務(wù)器網(wǎng)絡(luò)是否暢通,則可以使用 ping 和 telnet 命令。

 

ping

想知道本機(jī)到目標(biāo)網(wǎng)頁的網(wǎng)絡(luò)延時(shí),可以使用 ping 命令,如下圖所示:

ping 是基于 ICMP 協(xié)議的,所以對(duì)方防火墻如果屏蔽了 ICMP 協(xié)議,那么我們就無法與它 ping 通,但這并不代表網(wǎng)絡(luò)是不通的。

每一個(gè) ICMP 包都有序號(hào),所以你可以看到上圖中 icmp 序號(hào),如果序號(hào)是斷斷續(xù)續(xù)的,那么可能出現(xiàn)了丟包現(xiàn)象。

time 顯示了網(wǎng)絡(luò)包到達(dá)遠(yuǎn)程主機(jī)后返回的時(shí)間,單位是毫秒。time 的時(shí)間越小,說明網(wǎng)絡(luò)延遲越低,如果你看到 time 的時(shí)間變化很大,這種現(xiàn)象叫做網(wǎng)絡(luò)抖動(dòng),這說明客戶端與服務(wù)器之間的網(wǎng)絡(luò)狀態(tài)不佳。

ttl 全稱叫 time to live,指定網(wǎng)絡(luò)包被路由器丟棄之前允許通過的網(wǎng)段數(shù)量,說白了就是定義了網(wǎng)絡(luò)包最大經(jīng)過路由器的數(shù)量,這個(gè)目的是防止網(wǎng)絡(luò)包在網(wǎng)絡(luò)中被無限轉(zhuǎn)發(fā),永不停止。當(dāng)網(wǎng)絡(luò)包在網(wǎng)絡(luò)中被傳輸時(shí),ttl 的值通過一個(gè)路由器時(shí)會(huì)遞減1,當(dāng) ttl 遞減到 0 時(shí),網(wǎng)絡(luò)包就會(huì)被路由器拋棄。

另外,ping 不單單只能輸入 ip 地址,也能輸入域名地址,如果輸入的是域名地址,會(huì)先通過 DNS 查詢?cè)撚蛎?ip 地址,再進(jìn)行通信。

telnet

有時(shí)候,我們想知道本機(jī)到某個(gè) IP + 端口的網(wǎng)絡(luò)是否通暢,也就是想知道對(duì)方服務(wù)器是否有對(duì)應(yīng)該端口的進(jìn)程,于是就可以使用 telnet 命令,如下所示:

telnet 192.168.0.5 

telnet 執(zhí)行后會(huì)進(jìn)入一個(gè)交互式的頁面,這時(shí)就可以填寫你將要發(fā)送給對(duì)方的信息,比如你想發(fā) HTTP 請(qǐng)求給服務(wù)器,那么你就可以寫出 HTTP 請(qǐng)求 的格式信息,但是手寫 HTTP 報(bào)文太累人吧,后面會(huì)介紹專門用于 HTTP 的網(wǎng)絡(luò)工具。

 

DNS 查詢

如果想知道 DNS 解析域名的過程,可以使用 host 和 dig 命令。

 

host

host 就是一個(gè) DNS 查詢命令,比如我們要查百度的 DNS,如下圖所示:

可以看到,www.baidu.com 只是個(gè)別名,原名是 www.a.shifen.com,且對(duì)應(yīng)了 2 條 IPv4 地址。

如果想追查某種類型的記錄,可以加個(gè) -t 參數(shù),比如下圖我們追查百度的 AAAA 記錄,也就是查詢域名對(duì)應(yīng)的 IPv6 地址,由于百度還沒部署 IPv6 地址,所以沒有查詢到 :

 

dig

dig 同樣也是做 DNS 查詢的,區(qū)別在于,dig 顯示的內(nèi)容更加詳細(xì),比如下圖是 dig 百度的結(jié)果:

也可以看到 www.baiu.com 的別名(CNAME)為 www.a.shifen.com,然后共有 2 條 A 記錄,也就是 IPv4 地址的記錄,通常對(duì)應(yīng)多個(gè)是為了負(fù)載均衡或分發(fā)內(nèi)容。

 

HTTP

在電腦桌面我們常使用瀏覽器去請(qǐng)求網(wǎng)頁,而在服務(wù)器一般是沒有可視化頁面的,也就沒有瀏覽器,這時(shí)如果想要 HTTP 訪問,就需要網(wǎng)絡(luò)相關(guān)的命令。

 

curl

如果要在命令行請(qǐng)求網(wǎng)頁或者接口,可以使用 curl 命令,curl 支持很多應(yīng)用協(xié)議,比如 HTTP、FTP、SMTP 等,實(shí)際運(yùn)用中最常用還是 HTTP。

比如,我用 curl 訪問了百度網(wǎng)頁,如下圖:

如果不想看 HTTP 數(shù)據(jù)部分,只想看 HTTP GET 返回頭,可以在加個(gè) -I 參數(shù),如 curl -I,如下圖所示:

上面演示的 HTTP GET 請(qǐng)求,如果想使用 POST 請(qǐng)求,命令如下:

curl 向 http://localhost/myapi 接口發(fā)送 POST 請(qǐng)求,各參數(shù)的說明:

-d 后面是要發(fā)送的數(shù)據(jù),例子中發(fā)送的是 JSON 格式的數(shù)據(jù); 

-X 后面是指定 HTTP 的方法,例子中指定的是 POST 方法;

-H 是指定自定義的請(qǐng)求頭,例子中由于發(fā)送的是 JSON 數(shù)據(jù),所以內(nèi)容類型指定了 JSON;

 

總結(jié)

最后,列一下本次提到的 Linux 下常用的網(wǎng)絡(luò)命令:

遠(yuǎn)程登錄的 ssh 指令;

遠(yuǎn)程傳輸文件的 scp 指令;

查看網(wǎng)絡(luò)接口的 ifconfig 指令;

查看網(wǎng)絡(luò)狀態(tài)的 netstat 指令;

測(cè)試網(wǎng)絡(luò)延遲的 ping 指令;

可以交互式調(diào)試和服務(wù)端的 telnet 指令;

兩個(gè) DNS 查詢指令 host 和 dig;

可以發(fā)送各種請(qǐng)求包括 HTTPS 的 curl 指令。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜