Linux 學習 第四章 在檔案系統中移動

📢 本文由 gemini-3-flash-preview 翻譯

第四章 在檔案系統中移動

Linux 檔案系統儲存了電腦上所有的資訊

目錄描述
/bin包含常見的 Linux 使用者指令,例如 ls、sort、date 和 chmod
/boot包含可開機的 Linux 核心、初始 RAM 磁碟和開機載入程式的設定檔 (GRUB)
/dev包含用來表示系統中裝置存取點的檔案。這些裝置包括終端裝置 (tty*) 、硬碟驅動器 (hd* 或 sd*) 、RAM (ram*) 以及 CD-ROM (cd*) 。使用者可以直接透過這些裝置檔案存取相應的裝置;然而,應用程式通常會對終端使用者隱藏實際的裝置名稱
/etc包含管理設定檔。其中大多數檔案都是純文字檔案,只要使用者擁有適當權限,就可以使用任何文字編輯器編輯這些設定檔
/home包含分配給每個帶有登入帳號的一般使用者的目錄 (root 使用者是一個例外,使用 /root 作為家目錄)
/media為自動掛載裝置 (特別是行動媒體) 提供了一個標準位置。如果媒體有一個磁碟標籤,那麼通常會使用該標籤名稱作為掛載點
/lib包含 /bin 和 /sbin 目錄中的應用程式啟動系統所需的共享函式庫
/mnt在該目錄被標準的 /media 目錄取代之前,/mnt 目錄是許多裝置常見的掛載點。一些可開機的 Linux 系統仍使用該目錄來掛載硬碟分割區和遠端檔案系統。此外很多人也在使用該目錄臨時掛載那些不需要永久掛載的本機或遠端檔案系統
/misc該目錄有時用來根據請求自動掛載檔案系統
/opt用來儲存附加應用程式軟體的目錄結構
/proc包含關於系統資源的資訊
/root表示 root 使用者的家目錄。因安全原因,沒有位於 /home
/sbin包含管理指令和守護行程 (daemons)
/sys包含用於調校區塊儲存和管理 cgroups 的參數
/tmp包含應用程式使用的暫存檔案
/usr包含使用者文件、遊戲、圖形檔案 (X11) 、函式庫 (lib) 以及其他不需要在啟動過程中使用的指令和檔案。/usr 目錄中的檔案在安裝完畢後不可更改。理論上來說,/usr 可以採用唯讀方式掛載
/var包含不同應用程式所使用的資料目錄。特別可以在該目錄中放置作為 FTP 伺服器 (/var/ftp) 或 Web 伺服器 (/var/www) 共享的檔案。還包含所有的系統日誌檔案 (/var/log) 以及緩衝檔案 (/var/spool,如 mail、cups 和 news) 。/var 目錄所包含的目錄和檔案經常被修改。在伺服器電腦上,通常會建立一個 /var 目錄作為一個單獨的檔案系統,使用一個易於擴充的檔案系統

4.1 使用基本的檔案系統指令

cdpwdmkdirrmdirlstouch

4.2 使用元字元和運算子

某些特殊字元被稱為元字元 (metacharacters) 或運算子 (operators)

4.2.1 使用檔案比對元字元

元字元描述
*比對任何數量的字元
?比對任何一個字元
[…]比對括號之間的任一字元,可以包括一個連字號分隔的字母或數字範圍

例如 ls [a-g]* 列出以字母 a 到字母 g 開頭的檔案或目錄

4.2.2 使用檔案重新導向元字元

元字元描述
<將檔案的內容導向到指令。指令的預設行為,可省略,例如使用 less bigfile 等同於 less < bigfile
>將指令的標準輸出導向到一個檔案。如果檔案存在將被覆寫 (覆蓋)
2>將標準錯誤 (錯誤訊息) 導向到檔案
&>將標準輸出和標準錯誤都導向到檔案
»將指令的輸出導向到一個檔案,並將該輸出添加到現有檔案的末尾

例如以下指令

1
man chmod | col -b > /tmp/chmod

設定了手冊頁的格式 (使用 man 指令),刪除了額外的退格鍵 (col -b) 並將輸出傳送到檔案 /tmp/chmod (如果檔案存在,則刪除之前的 /tmp/chmod 檔案)

1
echo "Hello World!" >> ~/hello

將文字 Hello World! 添加到 ~/hello


重新導向的另一種類型被稱為 here text (或者 here document) ,例如

1
2
3
4
5
6
7
ed /etc/resolv.conf << resendit
a
nameserver 100.100.100.100
.
w
q
resendit

透過 ed 文字編輯器向 /etc/resolv.conf 檔案 (以 root 使用者執行的指令碼) 執行兩個 resendit 之間的內容 (範例為新增 DNS 伺服器的 IP 地址)

4.2.3 使用括號擴充字元

透過使用大括號 {} 可以跨檔案名稱、目錄名稱或者指令中的其他參數擴充一組字元,例如

1
touch memo{1,2,3,4,5}

將建立 memo1~memo5 共 5 個檔案

1
touch {John,Bill,Sally}-{Breakfast,Lunch,Dinner}

將建立 9 個檔案

1
touch {a..f}{1..5}

將建立 a1~f5 共 30 個檔案

4.3 列出檔案和目錄

一般 ls 指令被設定別名為 ls --color=auto ,可透過下面指令查看別名

1
alias ls

使用 ls -la 指令可以查看詳細資訊 (-l) 和所有檔案 (-a)

欄位檔案目錄
1權限權限
2連結到該項目的數量連結到該項目的數量
3檔案擁有者目錄擁有者
4檔案所屬群組目錄所屬群組
5檔案的位元組大小包含該目錄資訊的檔案大小,非目錄包含檔案大小
6最近一次修改的日期和時間最近一次修改的日期和時間
7檔案名稱目錄名稱

註:

  1. 時間和日期欄位的格式可以更改,根據 LANG 變數而定

  2. 有時可執行檔權限為 s (-rwsr-sr-x) ,表示應用程式可被任何使用者存取,但執行行程的所有權為應用程式的使用者/群組,而不是啟動該指令的使用者

  3. 如果目錄權限末尾是 t (drwxrwxr-t) ,則表示為該目錄設定了一個黏滯位 (sticky bit)。表明目錄的擁有者允許其他使用者添加檔案,但阻止刪除其他人添加的檔案

  4. 透過為某一目錄分配一個 Set GID,該目錄中所建立的任何檔案都會被分配到與目錄群組相同的群組。如果在一個目錄上看到的是一個大寫 S 或 T 而不是執行位元,則意味著分別設定了 Set GID 或黏滯位,而由於某些原因執行位元沒有開啟

  5. 如果權限末尾是加號 (-rw-rw-r-+) ,則說明在檔案上設定了擴充屬性,如 ACL 或 SELinux。末尾的點表示在檔案中設定了 SELinux


透過 cd ~yexca 可存取 yexca 的家目錄,cd - 以返回之前的工作目錄 ($OLDPWD 指向的目錄) ,而 `cd .` 指向目前工作目錄 ($PWD)

ls 指令:-t 以最新修改時間順序顯示檔案;-F 在目錄後添加 / ,可執行檔後添加 * ,符號連結旁顯示 @--hide=yexca 隱藏顯示 yexca 這個檔案或目錄;-S 按檔案大小列出檔案;-d 顯示該目錄的資訊而非目錄所包含的檔案和目錄

4.4 了解檔案權限和所有權

對於 ls -l 指令第一欄

第一位為檔案類型

字母類型
-檔案
d目錄
l符號連結
b區塊裝置
c字元裝置
sSocket 套接字
p具名管道 (Named pipe)

後九位為權限,前三位為使用者 (u) 的,中三位為所在群組 (g) 的,後三位為其他人 (o) 的

對於檔案和目錄,權限位元含義略有不同

權限檔案目錄
Read檢視檔案內容檢視目錄所包含的檔案和子目錄
Write更改檔案內容,重新命名或刪除檔案向目錄添加檔案或子目錄。刪除目錄中的檔案或子目錄
Execute將檔案作為一個程式執行將目錄更改為目前目錄,搜尋目錄或執行該目錄中一個程式,存取目錄中檔案的檔案中繼資料 (檔案大小、時間戳記等)

可透過 ls -ld 指令查看任何檔案或目錄的權限

在 Fedora 和 Red Hat Enterprise Linux 中,當添加了一個新使用者時,預設情況下該使用者被分配到一個同名的群組中,這種分配群組的方法被稱為使用者專用群組方案

4.4.1 使用指令 chmod (數字) 更改權限

r = 4;w = 2;x = 1

1
chmod -R 755 ~/myfile

更改 ~/myfile 下所有檔案和目錄 (-R) 和該目錄的權限為 755 (rwxr-xr-x)

4.4.2 使用 chmod (字母) 更改權限

1
chmod ug+rx files
1
chmod -R o-x ~/myfile

4.4.3 使用 umask 設定預設的檔案權限

一般使用者建立檔案預設權限為 rw-rw-r–,目錄為 rwxrwxr-x。對於 root 使用者分別為 rw-r–r– 和 rwxr-xr-x。這些預設值由 umask 值確定,輸入該指令即可查看值,例如 0002

若暫時忽略第一個 0 (前導零) ,那麼 umask 值被視為對檔案完全開放權限 (666) 或者對目錄完全開放權限 (777) 。umask 值 002 生成對目錄權限 775,檔案為 644。預設情況下一般檔案的執行權限被關閉

  • 如果臨時更改 umask 值,直接 umask [權限] ,將權限值替換 [權限] ,例如 umask 000 然後建立的檔案和目錄權限分別為 -rw-rw-rw- 和 drwxrwxrwx

  • 如果永久更改需要向家目錄 .bashrc 檔案結尾處添加一條 umask 指令

4.4.4 更改檔案所有權

僅 root 使用者可更改檔案所有權

1
chown user:group /etc/file

將 /etc/file 改為 user 所有和 group 群組,可使用 -R 遞迴更改

或者只更改所屬使用者 chown yexca /etc/file

4.5 移動、複製和刪除檔案

mv、cp、rm、rmdir

mv 指令透過添加 -i 或設定別名防止移動時覆寫已有檔案,或使用 -b 則若有同名檔案會先備份舊檔案後移動新檔案

cp 指令使用 -a 將保持原本的日期/時間戳記

使用 -f 以強制套用更改 (例如 rm -rf /*)