Linux RHEL

2025-06-16

筆記 Red Hat Enterprise Linux (RHEL) 的基本操作與設定,方便查詢。

logo

說明

Red Hat Enterprise Linux (RHEL) 是一個商業級的 Linux Distribution,主要用於企業環境。RHEL 提供穩定的系統更新和長期支援,Fedora 是 RHEL 的先行社群版本,最新的更新會出現在 Fedora 上,接著會將穩定的功能移往 CentOS Stream,最後成熟穩定的功能才會進入 RHEL。

開源的朋友會選擇 Rocky Linux,功能上與 RHEL 相同,但沒有商業支援。

常見的管理工具

RHEL 提供 GUI 的介面,但對於管理者而言,CLI 會是更常用的方式,因為通常不會使用遠端桌面進入伺服器,而是透過 SSH 連線,操作上都是在 Terminal 中進行,因此熟悉 CLI 的指令與相關工具是基本功夫。

如果要透過遠端桌面連線到 RHEL,可以使用 x2go 或 xrdp 等工具。

tty 表示目前的終端機,tty1 固定為 GUI 的登入畫面,登入後的使用者會出現在 tty2 等終端機

Linux GUI 環境支援虛擬桌面,可以透過 Ctrl + Alt + left/right 切換不同的虛擬桌面。

  • man - 查詢指令的使用說明,例如 man ls 會顯示 ls 指令的詳細說明
  • w - 快速查看目前登入的使用者
  • ssh - 遠端連線至 Linux 主機
  • exit - 退出目前的 shell 或終端機
  • dnf - RHEL 的套件管理工具,用於安裝、更新和移除軟體包
  • file - 檢查檔案類型
  • cat - 顯示檔案內容,搭配 -A 參數可以顯示不可見字元,例如換行符號等
  • dos2unix/unix2dos - 轉換檔案的換行符號格式,從 DOS 格式轉換為 Unix 格式或反之
  • split - 分割檔案,常用於處理大檔案
  • head - 顯示檔案的前幾行,預設是前 10 行
  • tail - 顯示檔案的後幾行,預設是後 10 行
  • wc - 計算檔案的行數、字數和字元數
  • history - 顯示最近執行的指令歷史
  • clear - 清除終端機畫面
  • unalias - 移除指令別名,例如 unalias ll 會移除 ll 的別名設定
  • echo - 輸出文字到終端機,常用於顯示變數的值,例如 echo $HOME 會顯示使用者的家目錄路徑
  • which - 查詢指令的路徑,例如 which python 會顯示 Python 執行檔的路徑

man 指令要熟練如何使用鍵盤來瀏覽,例如使用 j 和 k 鍵來上下滾動,使用 q 退出,使用 / 來搜尋關鍵字,使用 n 和 N 來切換搜尋結果。

如果要執行多個指令,可以透過 ; 連結以依序執行
如果指令有換行的需求,可以使用 \ 加上 Enter 後繼續輸入下一行指令

檔案系統與目錄結構

注意!Linux 對於大小寫字母是區分的,因此 file.txt 和 File.txt 是兩個不同的檔案,在使用指令參數時也要注意大小寫。

Linux 只有一個管理者 root 並且整個作業系統的資料夾結構只有一個 / 根目錄,所有的檔案和資料夾都在這個根目錄下。其他的使用者的資料夾都在 /home 目錄下,例如使用者 user1 的資料夾會是 /home/user1,而 root 使用者的資料夾則是 /root。

使用者可以透過 cd ~ 來快速切換到自己的 home 目錄,也可以透過 cd # 來切換到根目錄 /。

Linux 的檔案及資料夾名稱如果開頭是 .,表示這是一個隱藏檔案或資料夾,例如 .bashrc 是使用者的 bash 設定檔,想要顯示隱藏檔案可以使用 ls -a 指令。

  • lsscsi - 列出 SCSI 裝置的資訊
  • pwd - 顯示目前所在的工作目錄
  • ls - 列出目錄中的檔案和資料夾,常用的參數有 -l (詳細資訊)、-a (顯示隱藏檔案)、-h (人類可讀的格式)、-R (遞迴列出子目錄)
  • cd - 切換目錄,透過 cd .. 可以回到上一層目錄,cd - 可以切換到前一個目錄
  • tree - 以樹狀結構顯示目錄內容,加上 -a 參數可以顯示隱藏檔案

預設 Linux 不支援 NTFS 檔案系統,如果需要掛載 NTFS 檔案系統,需要安裝 ntfs-3g 套件。

稍微認識根目錄以下的常見目錄:

  • /bin - 放置基本的系統指令,例如 ls, cp, mv 等
  • /boot - 系統啟動所需的檔案,例如核心檔案和啟動設定
  • /dev - 設備檔案,包含系統中的所有設備,例如硬碟、USB 裝置等
  • /etc - 系統設定檔案,包含系統的配置和服務設定
  • /home - 使用者的家目錄,每個使用者都有自己的資料夾
  • /root - 系統管理員的家目錄,只有 root 使用者可以存取
  • /lib - 系統函式庫檔案,包含系統指令和應用程式所需的函式庫
  • /mnt - 用於臨時掛載檔案系統的目錄
  • /usr - 用於存放使用者應用程式和相關檔案的目錄,通常包含 /usr/bin, /usr/lib, /usr/share 等子目錄
  • /tmp - 用於存放臨時檔案的目錄,系統會定期清理這個目錄
  • /run - 系統運行時的臨時檔案,包含系統啟動後的狀態資訊

linux 的檔案權限分成 read, write 和 execute 三種,分別用 r、w 和 x 來表示。

Permission File Directory
Read (r) 可以讀取檔案內容 可以列出目錄中的檔案和資料夾 (ls)
Write (w) 可以修改檔案內容
Execute (x) 可以執行檔案 可以進入目錄,即切換到該目錄 (cd)

學習 Linux 一定要掌握如何閱讀 ls 輸出結果的意涵,包含第一碼所代表的檔案類型:

  • -:一般檔案
  • d:目錄
  • l:符號連結

以及解讀權限的部分,例如 -rwxr-xr-- 的意涵並能夠解讀二進位制的表示方式,例如 rwxr-xr-- 可以轉換為 754。

後續則是所屬的使用者、群組以及日期代表的是檔案的修改時間。

Linux 檔案的時間總共有四種時間,Accessed 是最後存取時間,Modified 是最後修改時間,Changed 是最後狀態改變時間,Birth 是檔案建立時間,其中 Change 是指 i-node 的狀態改變時間,包含權限、擁有者等屬性的變更,Modified 是指檔案內容的變更。

檔案與資料夾操作的相關指令:

  • touch - 建立新的檔案或更新現有檔案的時間戳記
  • cp - 複製檔案或資料夾,使用 -r 參數可以遞迴複製資料夾
  • mv - 移動或重新命名檔案或資料夾
  • rm - 刪除檔案或資料夾,使用 -r 參數可以遞迴刪除資料夾,使用 -f 參數可以強制刪除
  • mkdir - 建立新的資料夾,空白分隔可以一次建立多個資料夾,使用 -p 參數可以建立巢狀資料夾
  • rmdir - 刪除空的資料夾

注意!網路上喜歡捉弄菜鳥去執行 rm -rf /,這個指令會刪除整個根目錄下的所有檔案和資料夾,請小心 😥

關於 Linux 的檔案系統,在捷徑設定上不同於 Windows,Linux 分為 Symbolic Link (符號連結、也稱為 Soft Link) 和 Hard Link (硬連結),符號連結類似 Windows 的捷徑,而硬連結則是指向同一個 i-node 的另一個檔案名稱。但使用硬連結有不能跨越 Devices 及 Partitions 的限制,實務上還是用符號連結較多。

特別的是 Symbolic Link 檔案的權限固定為 lrwxrwxrwx,但實際的存取權限是由原始檔案決定的,因此 Symbolic Link 的權限不會影響原始檔案的存取權限,而 Hard Link 則是與原始檔案的權限相同。

如果要建立 Symbolic Link,可以使用 ln -s,沒有加上 -s 參數則是建立 Hard Link。

Linux 則檔案名稱參數支援 wildcard,例如 * 代表任意字元,? 代表單一字元,[abc] 代表 a、b 或 c 的任意一個字元。特別的是有 Brace Expansion 的功能,例如 file_{a,b,c}.txt 會展開為 file_a.txt file_b.txt file_c.txt。

如果要優先執行參數內容,可以使用 $(command) 例如 $(ls) 會先執行 ls 指令,然後將結果傳遞給其他指令。

要 Escape 特殊字元,可以使用 \ 來避免特殊字元被解釋,例如 echo \$HOME 會輸出 $HOME 而不是環境變數的值。

Linux 當中,雙引號 " 和單引號 ' 的差異在於,雙引號會解析其中的變數和特殊字元,而單引號則不會解析,所有內容都會被視為字串。


如果要調整檔案的權限,可以使用 chmod 指令,常用的參數有:

  • u - 使用者 (user)
  • g - 群組 (group)
  • o - 其他人 (others)
  • a - 所有人 (all)
  • + - 增加權限
  • - - 移除權限
  • = - 設定權限

例如 chmod go-rw file.txt 會移除群組和其他人的讀取和寫入權限,而 chmod u+x file.txt 會增加使用者的執行權限。

也可以加上參數 -R 來遞迴修改目錄下的所有檔案和資料夾,例如 chmod -R 755 /path/to/directory。

如果要修改檔案的擁有者和群組,可以使用 chown 指令,但只有 root 使用者可以使用。一般的使用者只能透過 chown 來將檔案換成其他自己屬於的群組。

權限除了 r, w 和 x 之外,還有 SUID、SGID 和 Sticky Bit 三種特殊權限:

  • (u+s) SUID (Set User ID) - 當檔案被執行時,會以檔案擁有者的權限執行,而不是執行者的權限。這通常用於需要特權執行的程式,例如代理密碼修改的網頁。
  • (g+s) SGID (Set Group ID) - 當檔案被執行時,會以檔案所屬群組的權限執行,而不是執行者的權限。可以達成繼承上層目錄的群組權限的效果。
  • (o+t) Sticky Bit - 當設定在目錄上時,只有檔案的擁有者或 root 使用者可以刪除或修改目錄中的檔案。這通常用於公共目錄,例如 /tmp。

s, t 在數值的表現上,會在原本的權限數值上加上 4、2 或 1,例如:

  • SUID 的數值是 4 (100) + 原本的權限數值 chmod 4755 file
  • SGID 的數值是 2 (010) + 原本的權限數值 chmod 2755 file
  • Sticky Bit 的數值是 1 (001) + 原本的權限數值

如果要移除,則是加上 00,例如 chmod 00770 file


新建立的檔案最大的權限預設是 666 (rw-rw-rw-),而新建立的目錄則是 777 (rwxrwxrwx)。這些預設權限可以透過 umask 來設定,umask 是一個三位數的八進位數字,用來設定新檔案和目錄的預設權限。

umask 採取 077 是限制新建立的檔案和目錄只能由擁有者存取,其他人無法存取。這樣的設定可以提高系統的安全性;設定為 000 則是允許所有人存取新建立的檔案和目錄,是最方便但危險的設定。

SHELL 操作

簡單的認識 stdin、stdout 和 stderr,方便後將來使用管線和重定向來處理資料的輸入和輸出。

Number Channel Description
0 stdin 標準輸入,預設是鍵盤輸入
1 stdout 標準輸出,預設是螢幕輸出
2 stderr 標準錯誤輸出,預設是螢幕輸出

透過 | 來連接指令的輸出和輸入,例如 ls | grep txt 會將 ls 的輸出傳遞給 grep 指令。

重新導向則是將輸出或錯誤輸出導向到檔案或其他裝置,例如:

  • > - 將 stdout 重定向到檔案,會覆蓋檔案內容
  • >> - 將 stdout 附加到檔案
  • 2> - 將 stderr 重定向到檔案,會覆蓋檔案內容
  • 2>> - 將 stderr 附加到檔案
  • &> - 將 stdout 和 stderr 都重定向到檔案,會覆蓋檔案內容
  • &>> - 將 stdout 和 stderr 都附加到檔案
  • 2 > /dev/null - /dev/null 是特殊的裝置檔案,表示將輸出丟棄

Shell 當中存在變數,可以直接透過 = 來設定變數的值,例如 MY_VAR=123。而如果要將 Shell 變數轉換成環境變數,可以使用 export 指令,例如 export MY_VAR=123。這樣設定的變數可以在子進程中存取。

此外可以透過 /etc/profile 或 /etc/bashrc 來設定系統的環境變數,這些檔案會在使用者登入時自動載入。

使用者與群組

root 使用者的 UID 固定是 0、root 群組的 GID 也是 0,其他使用者的 UID 和 GID 都是從依照設定依序分配編號,UID 的範圍資訊室定義在 /etc/login.defs 檔案中。

使用者帳號與密碼的資訊是儲存在 /etc/passwd 檔案中,現代 Linux 會透過 pwconv 指令將密碼資訊轉換為 /etc/shadow 檔案,並且限制對該檔案的存取權限。並且可以再結合 fail2ban 等工具來防止暴力破解攻擊。

相同地,群組的資訊則儲存在 /etc/group 檔案中,使用者會有一個主要的群組和多個次要群組,主要群組會在 /etc/passwd 中指定,而次要群組則在 /etc/group 中指定。

可以透過 id 指令來查看目前使用者的 UID、GID 以及所屬的群組,例如 id user1 會顯示使用者 user1 的資訊。

在 Shell 當中如果要提升權限,可以使用 su 指令切換到其他使用者,或是使用 sudo 指令來執行需要管理員權限的指令。

su 是否搭配 - 參數取決於是否要切換到該使用者的環境變數,例如 su - user1 會切換到使用者 user1 的環境變數,而 su user1 則只會切換使用者,但不會改變環境變數。sudo 則是暫時提升權限來執行特定的指令。

wheel 群組是用來管理 sudo 權限的群組,加入 wheel 群組的使用者會取得使用 sudo 的權限。

關於使用者帳號的操作,主要透過 useradd、usermod 和 userdel 來新增、修改和刪除使用者帳號。

關於群組的操作,則是透過 groupadd、groupmod 和 groupdel 來新增、修改和刪除群組。

使用者建立檔案的時候,會以使用者目前的主要群組來設定檔案的擁有者和群組,可以透過 newgrp 指令來變更目前使用者的主要群組。

使用 shadow 之後的密碼會以加密的方式儲存,例如以下格式:

user1:$6$randomsalt$encryptedpassword

其中 $6$ 表示使用 SHA-512 加密演算法,randomsalt 是隨機產生的 salt 值,encryptedpassword 是加密後的密碼。

在建立帳號上,如果有要提供服務使用而不需要登入的使用者,可以透過 nologin 來設定使用者的 shell 為 /sbin/nologin,這樣使用者就無法登入系統,但仍然可以執行指定的服務。

usermod -s /sbin/nologin serviceuser

各種自助式資訊解決方案

  • Nextcloud - 私有雲端儲存解決方案,提供檔案同步、分享和協作功能
  • Tinode - 開源的即時通訊伺服器,支援多種通訊協議