Linux RHEL
2025-06-16
筆記 Red Hat Enterprise Linux (RHEL) 的基本操作與設定,方便查詢。
說明
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 - 開源的即時通訊伺服器,支援多種通訊協議