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

林鼎淵
Dean Lin
Published in
8 min readAug 17, 2022

--

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

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

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

▋ vim 編輯器常用指令

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

顯示行數(:set number)

方便與 Local 端程式做比對。

前往指定行數(:行數)

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

➤ 刪除多行

刪除一行的指令是「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)

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

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

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

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

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

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

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

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

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

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

➤ 搜尋檔案(find)

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

sudo find / -name php.ini

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

sudo find / -name ph?.ini

➤ 搜尋歷史指令(Control+R)

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

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

▋ 檢查網路環境

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

➤ 網路診斷瑞士刀(nc)

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

  • 測試目標 Server 特定的 port 是否開啟: nc -v [host] [port]
  • 在兩台 Server 間複製檔案

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

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

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

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

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

在執行結果中「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 的顯示出來。

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

▶︎ 如果這篇文章有幫助到你1. 可以點擊下方「Follow」來追蹤我~
2. 可以對文章拍手讓我知道 👏🏻
你們的追蹤與鼓勵是我繼續寫作的動力 🙏🏼▶︎ 如果你對工程師的職涯感到迷茫1. 也許我在iT邦幫忙發表的系列文可以給你不一樣的觀點 💡
2. 也歡迎您到書局選購支持,透過豐富的案例來重新檢視自己的職涯

--

--

林鼎淵
Dean Lin

職涯中培育過多名工程師,🧰 目前在外商公司擔任 Software Specialist |✍️ 我專注寫 (1)最新技術 (2)團隊合作 (3)工程師職涯的文章,出版過 5 本專業書籍|👏🏻 如果對這些主題感興趣,歡迎點擊「Follow」來關注我~