那些沒人教你又超實用的 Linux 指令

這篇文章寫於 2022 年,文中的工具與版本可能已經更新,實作時請以官方文件為準。

本文目錄
  1. vim 編輯器常用指令
  2. 顯示行數(:set number)
  3. 前往指定行數(:行數)
  4. 刪除多行
  5. 大量註解/反註解
  6. 搜尋文字並取代
  7. 查詢 Server 各項資源
  8. Server 啟動多久了(uptime)
  9. 找出最耗費資源的程式(top)
  10. 以目錄形式呈現目前磁碟使用狀況(ncdu)
  11. 搜尋檔案(find)
  12. 搜尋歷史指令(Control+R)
  13. 檢查網路環境
  14. 網路診斷瑞士刀(nc)
  15. 設定好 DNS 後,確認回應是否正常(nslookup)
  16. 查詢佔用的 port(lsof)

儘管在 Linux 用 cd、vi、mv、cp、rm、ls 這些基礎指令就能滿足大部分的需求,但遇到一些特殊狀況時,這些指令就不夠用了。

這篇文章彙整了筆者常用的 Linux 指令,以「vim 編輯器、查詢 Server 各項資源、檢查網路環境」為主。

那些沒人教你又超實用的 Linux 指令(圖 1)

大綱
▋ vim 編輯器常用指令
 ➤ 顯示行數(:set number)
 ➤ 前往指定行數(:行數)
 ➤ 刪除多行
 ➤ 大量註解/反註解
 ➤ 搜尋文字並取代
▋ 查詢 Server 各項資源
 ➤ Server 啟動多久了(uptime)
 ➤ 找出最耗費資源的程式(top)
 ➤ 以目錄形式呈現目前磁碟使用狀況(ncdu)
 ➤ 搜尋檔案(find)
 ➤ 搜尋歷史指令(Control+R)
▋ 檢查網路環境
 ➤ 網路診斷瑞士刀(nc)
 ➤ 設定好 DNS 後,確認回應是否正常(nslookup)
 ➤ 查詢佔用的 port(lsof)

vim 編輯器常用指令

有時我們會需要進入 Server 做一些緊急調整(ex:Debug 時),搭配下面的操作可以增進你的效率。

顯示行數(:set number)

方便與 Local 端程式做比對。

顯示行數(:set number)(圖 2)

前往指定行數(:行數)

直接跳轉到你要修改的位置。

刪除多行

刪除一行的指令是「dd」,但如果有幾十行甚至上百行需要刪除,那會 dd 到崩潰,而且很容易有誤刪的情形。

  • 刪除從游標開始的 N 行(ex:刪除 5 行就是 5dd)
可以觀察右下角,會看到我的輸入
  • 刪除指定開始、結束的行 :[start],[end]d (ex:刪除第 3~17 行 3,17d)

大量註解/反註解

有時我們不是要刪除程式,只是想要把一定範圍內的程式註解起來做一些測試或是 Debug,如果你依靠「i」來慢慢編輯,真的會心死。

  • 大量註解:先將游標移至想開始註解的行,按「Control+v」進入 VISUAL BLOCK 模式,接著選擇想要註解的區塊;按下「Shift+i」進入編輯模式填寫註解符號(ex://),按「Esc」離開。
  • 反註解:先將游標移至想開始註解的行,按「Control+v」進入 VISUAL BLOCK 模式,接著選擇想要反註解的區塊(因為我的註解用//所以要按右鍵刪除兩列);按下「d」刪除註解。

搜尋文字並取代

:[範圍]s/[比對字串]/[取代字串]/g
  • 將全部的「test」取代為「try」: :%s/test/try/g
  • 將 1~10 行的「test」取代為「try」::1,10s/test/try/g

查詢 Server 各項資源

了解資源的使用狀況,可以幫你更快地找出問題點,與優化方向。

Server 啟動多久了(uptime)

Server 啟動多久了(uptime)(圖 10)

  • 21:21:33:系統時間
  • up 6 days, 7:40:Server 已執行時間,時間越大代表越穩定。
  • 1 user:使用者總連線數(注意不是使用者數!)。
  • load average:系統平均負載狀況,顯示1 / 5 / 15 分鐘的系統平均負載(以單核 CPU 來說,建議數值不大於 3,超過 5 就需要注意了)。

找出最耗費資源的程式(top)

top 這個指令會顯示 Server 即時的資源使用狀況。

找出最耗費資源的程式(top)(圖 11)

top 也可以指定欄位做排序,以下面的指令( top -b -o +%MEM | head -n 17)為例,他是指:

  • -b:以 batch 模式輸出報表。
  • -o:我們使用「%MEM」這個欄位,以「正序」來排序。
  • head -n 17:因為上面的資訊就佔了 7 行,所以你想要顯示前 10 名就要用 10+7=17。

找出最耗費資源的程式(top)(圖 12)

在找出最耗費資源的程式後,有時會搭配 kill [PID] 的方式來終止程式;如果無法順利終止,可使用 kill -9 [PID] 來強行終止。

以目錄形式呈現目前磁碟使用狀況(ncdu)

如果發現磁碟空間快滿了,又不確定哪個資料夾佔用了大量空間,ncdu 可以幫你高效率的檢查(指令會以你當前的目錄來做顯示,)。

以目錄形式呈現目前磁碟使用狀況(ncdu)(圖 13)

如果你想要掃描根目錄硬碟使用狀況,請使用 ncdu -x /,若要退出請按 q 。

以目錄形式呈現目前磁碟使用狀況(ncdu)(圖 14)

此指令並非預設安裝,Ubuntu 環境下的安裝指令為: apt-get -y install ncdu

搜尋檔案(find)

假使我們想從根目錄開始搜尋「php.ini」在哪裡:

sudo find / -name php.ini

搜尋檔案(find)(圖 15)

如果我們不確定檔名,也可以透過「?」來進行模糊搜尋:

sudo find / -name ph?.ini

搜尋檔案(find)(圖 16)

搜尋歷史指令(Control+R)

有時我們會用到帶有一長串噁心的參數的指令,這些指令只要下過一次後 history 就會記住。

因此我們下次想要再使用它時,只要按下「Control+R」輸入要搜尋的字串,bash 就會顯示最近一項匹配的指令;連續按「Control+R」則繼續搜尋更早的歷史指令,按「Enter」則會執行顯示的指令。


檢查網路環境

想要知道網路彼此環境的狀況,除了用最基礎的 ping 以外,下面這些指令可以幫你獲得更詳盡的資訊。

網路診斷瑞士刀(nc)

Netcat (nc)能夠做到的事情很多,這邊跟大家分享常用的功能。

  • 測試目標 Server 特定的 port 是否開啟: nc -v [host] [port]

網路診斷瑞士刀(nc)(圖 18)

  • 在兩台 Server 間複製檔案

在接收檔案的 Server 上執行 nc -l 5000 > demo.js ,在傳送檔案的 Server 上執行 nc [host] 5000 < demo.js

網路診斷瑞士刀(nc)(圖 19)

這個操作跟 scp 很類似,但特別的地方在於不需要登入的動作(不需要帳號密碼),假使遇到兩台 Server 無法互相登入時, 他就是一個解決方案。

Netcat 還有非常多的功能,有興趣的可以再自行鑽研。

設定好 DNS 後,確認回應是否正常(nslookup)

下面以查詢 google.com 的 ip 為例: nslookup google.com

設定好 DNS 後,確認回應是否正常(nslookup)(圖 20)

在執行結果中「192.168.220.186」是查詢的 DNS Server,而「172.217.160.110」則是返回的 ip。

在內網/外網執行時會有不同回應,可用來確認設定是否符合預期。

查詢佔用的 port(lsof)

lsof (List Open Files)可以列出所有被行程打開的檔案,筆者會透過這個指令來看 port 被哪個行程佔用了。

lsof -i -P | grep :443

-i 是查找網路連線, -P 是列出實際的 port,最後透過 grep 將 port 為 443 的顯示出來。

查詢佔用的 port(lsof)(圖 21)

以上是筆者常用的 Linux 指令,如果你平常有用到其他實用的指令,也歡迎留言分享喔!

Talk

留言討論

留言載入中…