跳至主要内容

進階操作與環境檢視

vi / vim 生存操作

  1. vi / vim:終端機裡的純文字編輯器 這是 Linux 世界裡最經典,但也最常讓新手崩潰(不知道怎麼存檔離開)的編輯器。vimvi 的進階版(多了語法顏色提示),兩者操作邏輯完全一樣。 在 Linux 維運中,修改設定檔幾乎百分之百都靠它,因此學會基本的「生存操作」是絕對必要的!

    實用快捷鍵(請確保在「一般指令模式」下使用,若不確定請先按幾下 Esc

    • 跳行與移動
      • G(大寫):直接跳到檔案的「最後一行」(看 Log 極度常用)。
      • gg:直接跳回檔案的「第一行」。
      • :數字 + Enter:例如輸入 :100,會精準跳到第 100 行。
    • 複製與貼上
      • yy:複製游標所在的「整行」。
      • p:將剛才複製(或刪除)的內容,貼在游標的「下一行」。
    • 刪除與復原
      • dd:刪除游標所在的「整行」(在 vim 裡刪除其實等於剪下,你可以用 p 貼上)。
      • u:(Undo) 復原上一步的動作(不小心刪錯時的救命神鍵!)。
    • 搜尋關鍵字
      • /字串 + Enter:往下尋找該字串。按 n 找下一個,按 N 找上一個。

    輸入指令(編輯或建立檔案):

    vi file.txt
    ⚠️ vi / vim 新手生存指南(三大模式)

    剛打完指令進入 vi 畫面時,你處於**「一般指令模式」**,這時候按鍵盤上的字會被系統當作指令,無法正常打字。請牢記以下標準操作流程:

    1. 開始打字(進入編輯模式):按一下鍵盤的 i (Insert),畫面左下角會出現 -- INSERT --,這時候你才能像普通記事本一樣正常打字。
    2. 打完字要準備存檔(回到指令模式):按一下鍵盤左上角的 Esc 鍵,此時左下角的 -- INSERT -- 會消失。
    3. 存檔離開(底線命令模式)
      • 請輸入 :wq 然後按 Enter(Write & Quit,存檔並離開)。
      • 如果不小心改壞了、不想存檔,請輸入 :q! 然後按 Enter(強制不存檔離開)。

檔案打包與壓縮

【跨平台與備份】

  1. 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.txt
    my_folder/file2.log
    # (會把所有被打包進去的檔案名稱印出來)
  2. 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 系統中,有許多設定是透過「變數」來記憶與存取的(例如目前的語系、家目錄路徑、終端機外觀等)。

【查看環境變數】

  1. env:列出所有的「環境變數」 (Environment) 會列出目前 Shell 環境中,可以被後續執行的程式(子程序)繼承的全域環境變數。

    輸入指令

    env

    輸出結果(部分節錄):

    USER=root
    HOME=/root
    LANG=en_US.UTF-8
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  2. set:列出所有的「Shell 變數與函式」 相比於 envset 印出來的東西會多非常多!因為它不僅會印出環境變數,還會把當前終端機自訂的「區域變數」與「Shell 內部函式」全部印出來。

    輸入指令

    set
💡 envset 最大的差別在哪?
  • env:只看得到「有 Export 的全域變數」(例如你執行了 export MY_VAR="hello")。
  • set:看得到全域變數,也看得到「只活在當前終端機的區域變數」(例如你只執行了 MY_VAR="hello" 但沒有 export)。

實務技巧:因為這兩個指令的輸出量通常都長達好幾頁,我們幾乎都會搭配剛剛學過的「管線 |」與 grep 指令來尋找特定的變數! 例如你想尋找包含 PATH 的變數,可以直接輸入:env | grep PATH

【尋找指令的真實路徑】 3. which:找出指令的執行檔位在哪裡 當我們在終端機敲下 lsgrep 等指令時,系統之所以能成功執行,是因為它會去剛才印出來的 PATH 環境變數裡(那些用冒號 : 隔開的目錄清單)由左至右去尋找有沒有同名的執行檔。 如果你想知道「我現在執行的這個指令,到底是放在系統的哪個路徑下?」,就可以用 which

輸入指令

which ls

輸出結果

/usr/bin/ls
  1. type:判斷指令的類型(是內建指令還是外部檔案) which 雖然好用,但它只能去 PATH 裡面找「外部檔案」。如果你嘗試輸入 which cd,通常會找不到東西,因為 cd 其實是 Shell 自己的「內建指令 (builtin)」。這時候就需要 type 出馬來幫忙驗證了!

    輸入指令(分別測試 cd 與 ls):

    type cd
    type ls

    輸出結果

    cd is a shell builtin
    ls 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)手動打開它,或是直接用這招實務上最快的三步驟:

  1. 寫入設定檔:利用接下來章節會教到的 >> 重導向符號,將字串附加到設定檔的最後一行。
    echo "alias ll='ls -lah'" >> ~/.bashrc
  2. 重新載入設定:設定檔修改後,目前的視窗不會立刻更新,必須用 source 指令要求系統重新讀取它。
    source ~/.bashrc
  3. 大功告成:此後不管你怎麼重開機或開新視窗,ll 這個別名都會永遠為你服務囉!

尋求幫助與指令手冊

💡 實務觀念:AI 時代為什麼還要學這個?

你可能會想:「現在是網路與 AI 時代,忘記語法直接上網查不就好了嗎?」 這觀念完全沒錯,但在企業實務的維運環境中(尤其是金融業、機房或高資安的正式伺服器),極有可能是一個「沒有對外網路 (Intranet)」的封閉環境。這時候你無法依賴 Google 或 ChatGPT,系統內建的這兩個求助指令就會成為你唯一的救命稻草!

Linux 的指令與參數多如繁星,即使是資深工程師也不可能全部背下來。當你忘記某個指令怎麼用,或是想完成某件事卻不知道該用什麼指令時,這兩個「求生工具」就是你的最佳戰友:

【當你「知道」指令名稱,但忘記怎麼用時】

  1. 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
進階延伸閱讀:備份與環境變數實戰篇

在熟悉了基礎的 tarenvalias 後,若在機房維運或 K8s 部署中遇到複雜情境,請參閱進階實戰章節: 👉 14-compression-backup.md (🗜️ 檔案壓縮與解壓縮:備份與還原) 👉 16-env-shell-config.md (🖥️ 環境變數與 Shell 設定:開發環境排錯)