進階操作與環境檢視
vi / vim 生存操作
-
vi/vim:終端機裡的純文字編輯器 這是 Linux 世界裡最經典,但也最常讓新手崩潰(不知道怎麼存檔離開)的編輯器。vim是vi的進階版(多了語法顏色提示),兩者操作邏輯完全一樣。 在 Linux 維運中,修改設定檔幾乎百分之百都靠它,因此學會基本的「生存操作」是絕對必要的!實用快捷鍵(請確保在「一般指令模式」下使用,若不確定請先按幾下
Esc):- 跳行與移動:
G(大寫):直接跳到檔案的「最後一行」(看 Log 極度常用)。gg:直接跳回檔案的「第一行」。:數字+Enter:例如輸入:100,會精準跳到第 100 行。
- 複製與貼上:
yy:複製游標所在的「整行」。p:將剛才複製(或刪除)的內容,貼在游標的「下一行」。
- 刪除與復原:
dd:刪除游標所在的「整行」(在 vim 裡刪除其實等於剪下,你可以用p貼上)。u:(Undo) 復原上一步的動作(不小心刪錯時的救命神鍵!)。
- 搜尋關鍵字:
/字串+Enter:往下尋找該字串。按n找下一個,按N找上一個。
輸入指令(編輯或建立檔案):
vi file.txt⚠️ vi / vim 新手生存指南(三大模式)剛打完指令進入
vi畫面時,你處於**「一般指令模式」**,這時候按鍵盤上的字會被系統當作指令,無法正常打字。請牢記以下標準操作流程:- 開始打字(進入編輯模式):按一下鍵盤的
i(Insert),畫面左下角會出現-- INSERT --,這時候你才能像普通記事本一樣正常打字。 - 打完字要準備存檔(回到指令模式):按一下鍵盤左上角的
Esc鍵,此時左下角的-- INSERT --會消失。 - 存檔離開(底線命令模式):
- 請輸入
:wq然後按 Enter(Write & Quit,存檔並離開)。 - 如果不小心改壞了、不想存檔,請輸入
:q!然後按 Enter(強制不存檔離開)。
- 請輸入
- 跳行與移動:
檔案打包與壓縮
【跨平台與備份】
-
tar:打包與解壓縮檔案 (Tape Archive) 是 Linux 領域中最標準的備份工具。與 Windows 習慣的.zip不同,Linux 最常見的壓縮檔格式是.tar.gz(有時候會縮寫為.tgz)。實用口訣與參數:
- 打包並壓縮 (Create):
tar -czvf 檔名.tar.gz 目標目錄c:(create) 建立打包檔。z:(gzip) 透過 gzip 演算法壓縮,這是速度與壓縮率最平衡的常見標準。 (💡 進階補充:若想追求更小的檔案體積,可以把z換成j(bzip2 演算法,副檔名為 .tar.bz2) 或是大寫J(xz 演算法,副檔名為 .tar.xz)。檔案會壓得更小,但會花費更多時間!)v:(verbose) 顯示處理過程。f:(file) 指定產生的檔案名稱(注意:f一定要放在所有參數的最後面)。
- 解壓縮 (eXtract):
tar -xzvf 檔名.tar.gz- 其實就是把剛才的
c換成x(extract 解開) 而已!
- 其實就是把剛才的
輸入指令(將
my_folder打包壓縮成一個檔案):tar -czvf backup.tar.gz my_folder輸出結果:
my_folder/my_folder/file1.txtmy_folder/file2.log# (會把所有被打包進去的檔案名稱印出來) - 打包並壓縮 (Create):
-
zip/unzip:跨平台的壓縮檔標準 雖然 Linux 世界最愛用tar.gz,但如果今天你的檔案打包後是要傳給 Windows 或 Mac 的一般使用者,使用.zip格式絕對是最安全的跨平台選擇! (註:有些極簡版的 Linux 系統預設不會安裝zip,若出現 command not found,則需要手動透過套件管理工具安裝。)常用指令:
- 壓縮:
zip -r 檔名.zip 目標目錄(-r代表 recursive,這樣才能把整個資料夾包含裡面的檔案一起壓縮)。 - 解壓縮:
unzip 檔名.zip。
輸入指令(將
my_folder壓縮為 zip 檔):zip -r backup.zip my_folder輸出結果:
adding: my_folder/ (stored 0%)adding: my_folder/file1.txt (deflated 15%)adding: my_folder/file2.log (deflated 50%) - 壓縮:
tar.gz 還是 zip?tar.gz:這是 Linux 的親兒子。它最大的優勢是能完整保留 Linux 系統特有的檔案權限與擁有者屬性。如果你是在備份伺服器的設定檔或網頁程式,請一律用這個!zip:優勢在於跨平台兼容性極佳。如果是要把報表、Log 檔下載到 Windows 電腦看,或是傳給一般非工程師的使用者,請用這個才不會被抱怨「檔案打不開」😂。
管線命令 (Pipeline)
在 Linux 中有一個極度強大且無所不在的符號:管線 | (Pipeline)。
它的作用是「把左邊指令的輸出結果,交給右邊的指令繼續處理」。
這就像是一條加工流水線,我們可以用它把多個簡單的指令串接起來,完成複雜的任務。
【經典組合技:搭配 grep 尋找特定結果】
前面學過的 grep 除了用來搜尋檔案內容,一旦搭配了管線 |,我們就可以搜尋「任何指令印出來的結果」!
輸入指令(先用 ls 列出 /etc 底下所有檔案,再用 grep 挑出名字包含 "network" 的行):
ls -la /etc | grep "network"
環境變數檢視
在 Linux 系統中,有許多設定是透過「變數」來記憶與存取的(例如目前的語系、家目錄路徑、終端機外觀等)。
【查看環境變數】
-
env:列出所有的「環境變數」 (Environment) 會列出目前 Shell 環境中,可以被後續執行的程式(子程序)繼承的全域環境變數。輸入指令:
env輸出結果(部分節錄):
USER=rootHOME=/rootLANG=en_US.UTF-8PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -
set:列出所有的「Shell 變數與函式」 相比於env,set印出來的東西會多非常多!因為它不僅會印出環境變數,還會把當前終端機自訂的「區域變數」與「Shell 內部函式」全部印出來。輸入指令:
set
env 和 set 最大的差別在哪?env:只看得到「有 Export 的全域變數」(例如你執行了export MY_VAR="hello")。set:看得到全域變數,也看得到「只活在當前終端機的區域變數」(例如你只執行了MY_VAR="hello"但沒有 export)。
實務技巧:因為這兩個指令的輸出量通常都長達好幾頁,我們幾乎都會搭配剛剛學過的「管線 |」與 grep 指令來尋找特定的變數!
例如你想尋找包含 PATH 的變數,可以直接輸入:env | grep PATH
【尋找指令的真實路徑】
3. which:找出指令的執行檔位在哪裡
當我們在終端機敲下 ls 或 grep 等指令時,系統之所以能成功執行,是因為它會去剛才印出來的 PATH 環境變數裡(那些用冒號 : 隔開的目錄清單)由左至右去尋找有沒有同名的執行檔。
如果你想知道「我現在執行的這個指令,到底是放在系統的哪個路徑下?」,就可以用 which。
輸入指令:
which ls
輸出結果:
/usr/bin/ls
-
type:判斷指令的類型(是內建指令還是外部檔案)which雖然好用,但它只能去PATH裡面找「外部檔案」。如果你嘗試輸入which cd,通常會找不到東西,因為cd其實是 Shell 自己的「內建指令 (builtin)」。這時候就需要type出馬來幫忙驗證了!輸入指令(分別測試 cd 與 ls):
type cdtype ls輸出結果:
cd is a shell builtinls is aliased to `ls --color=auto'
當你在終端機敲下一個指令時,如果剛好有同名的指令,系統其實會依照以下順序來決定優先執行誰:
1. 別名 (Alias) > 2. 內建指令 (Builtin) > 3. 外部指令 (PATH 裡的檔案)
透過 type 指令,你就能像照妖鏡一樣,清楚知道你目前敲的指令究竟是哪一種化身!
【自訂指令別名】
5. alias:建立或查看指令別名
在剛才的優先順序中,我們看到「別名」擁有最高的執行權!
alias 允許我們為落落長的指令組合設定一個簡短的暱稱,這在實務維運上可以省下非常多打字的時間。
常用操作:
alias:(不加參數) 顯示目前系統設定的所有別名。alias 暱稱='完整指令':建立新的別名(注意等號兩邊不能有空白)。unalias 暱稱:刪除別名。
輸入指令(將 ls -lah 縮寫為 ll):
alias ll='ls -lah'
輸出結果:
# (設定成功無輸出,之後只要輸入 ll 就等同於執行 ls -lah)
你在終端機直接輸入 alias 所建立的別名是「暫時性」的,只要關閉這個視窗或登出就會立刻失效。
【如何讓別名永久生效?】
要讓它永久存活,你必須把指令寫進你家目錄下的 Shell 設定檔裡(在 Rocky Linux 預設是 ~/.bashrc)。
你可以用編輯器(如 vi)手動打開它,或是直接用這招實務上最快的三步驟:
- 寫入設定檔:利用接下來章節會教到的
>>重導向符號,將字串附加到設定檔的最後一行。echo "alias ll='ls -lah'" >> ~/.bashrc - 重新載入設定:設定檔修改後,目前的視窗不會立刻更新,必須用
source指令要求系統重新讀取它。source ~/.bashrc - 大功告成:此後不管你怎麼重開機或開新視窗,
ll這個別名都會永遠為你服務囉!
尋求幫助與指令手冊
你可能會想:「現在是網路與 AI 時代,忘記語法直接上網查不就好了嗎?」 這觀念完全沒錯,但在企業實務的維運環境中(尤其是金融業、機房或高資安的正式伺服器),極有可能是一個「沒有對外網路 (Intranet)」的封閉環境。這時候你無法依賴 Google 或 ChatGPT,系統內建的這兩個求助指令就會成為你唯一的救命稻草!
Linux 的指令與參數多如繁星,即使是資深工程師也不可能全部背下來。當你忘記某個指令怎麼用,或是想完成某件事卻不知道該用什麼指令時,這兩個「求生工具」就是你的最佳戰友:
【當你「知道」指令名稱,但忘記怎麼用時】
-
man:呼叫指令的操作手冊 (Manual) 會打開該指令的官方詳細說明書。裡面包含了指令的用途、所有可用參數的詳細介紹,通常在最後面還會附上實戰範例。 進入手冊後,操作方式跟前面學過的less完全一樣(用上下鍵翻頁、按/往下搜尋關鍵字、按q離開)。輸入指令(查看 ls 的說明書):
man ls
【當你「不知道」指令名稱,只知道關鍵字時】
2. apropos:透過關鍵字反查指令
(Apropos 來自法文,意指「關於...」) 如果你想找某個功能,但完全想不起來指令叫什麼名字,只要輸入你想找的英文關鍵字,它就會從系統所有的手冊簡介中,幫你撈出所有相關的指令!
輸入指令(尋找跟目錄 "directory" 相關的指令):
apropos directory
輸出結果(部分節錄):
cd (1) - change the working directory
mkdir (1) - make directories
rmdir (1) - remove empty directories
在熟悉了基礎的 tar、env 與 alias 後,若在機房維運或 K8s 部署中遇到複雜情境,請參閱進階實戰章節:
👉 14-compression-backup.md (🗜️ 檔案壓縮與解壓縮:備份與還原)
👉 16-env-shell-config.md (🖥️ 環境變數與 Shell 設定:開發環境排錯)