儘管在 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. 也歡迎您到書局選購支持,透過豐富的案例來重新檢視自己的職涯