1.?file [選項] 文件名
- 用于確定文件類型的實用工具。它會通過分析文件內容(而不僅僅是文件擴展名)來判斷文件的實際類型
示例輸出解析
$ file /bin/bash
/bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=..., stripped
這段輸出告訴我們:
- 這是一個 ELF 格式的可執行文件
- 64位架構,x86-64指令集
- 動態鏈接
- 為 GNU/Linux 系統編譯
- 已被剝離調試符號
2. bash 和 shell 的區別
-
Shell:是用戶與操作系統內核交互的命令行界面,是統稱
-
Bash?(Bourne Again Shell):是Shell的一種具體實現,是Linux系統中最常用的shell
類比法就是
-
Shell?是「智能家居中控系統」的通用標準(比如所有品牌都支持的 Zigbee 協議)。
-
Bash?是某品牌的中控系統(比如小米 HomeKit),功能更強大、用戶最多,但本質仍是 Shell 的一種實現
3 目錄權限的深度解析(從文件系統角度理解)
1. 進入目錄(cd
)需要什么權限?
必須權限:x
(執行權限)
-
為什么?
-
目錄的本質是一個記錄子文件位置的特殊文件,
x
?權限控制你能否“執行”這個目錄(即訪問其內容)。 -
類比:進入房間需要鑰匙(
x
),即使你知道房間里有東西(r
),沒有鑰匙也進不去。
-
驗證:
chmod -x dir/ # 移除 x 權限
cd dir/ # 報錯:Permission denied
2. 目錄的?r
(讀權限)代表什么?
作用:允許查看目錄下的文件名和基礎屬性(如?ls
)
-
無?
r
?權限時:-
ls dir/
?→ 報錯?Permission denied
,但已知完整路徑的文件仍可訪問! -
文件系統原理:
-
r
?僅控制讀取目錄條目(dirent
?結構),不影響通過完整路徑訪問文件。
-
-
驗證:
chmod -r dir/ # 移除 r 權限
ls dir/ # 失敗
cat dir/known_file # 成功(需有文件本身的 r 權限)
3. 目錄的?w
(寫權限)代表什么?
作用:允許修改目錄內容(創建/刪除/重命名文件)
-
無?
w
?權限時:-
touch dir/new_file
?→ 報錯?Permission denied
-
關鍵點:刪除文件需要父目錄的?
w
,而非文件本身的權限!
-
文件系統原理:
-
目錄的?
w
?權限控制其?inode
?中“子文件列表”的修改權。
驗證:
chmod -w dir/
touch dir/new_file # 失敗
rm dir/old_file # 失敗(即使 old_file 可寫)
4. 目錄權限的底層邏輯(文件系統視角)
權限 | 對應操作 | 影響的文件系統操作 |
---|---|---|
r | 讀取目錄條目 | readdir() ?系統調用 |
w | 修改目錄條目 | unlink() (刪除)、rename() (重命名) |
x | 進入目錄/訪問子文件元數據 | open() ?文件時需要檢查父目錄的?x |
為什么這樣設計?
-
安全分層:防止用戶繞過權限直接操作文件(如通過?
rm
?刪除只讀文件)。 -
性能優化:
x
?權限避免頻繁檢查子文件權限。
5. 特殊場景與誤區
(1) 無?r
?但能訪問已知文件
chmod -r dir/
cat dir/secret.txt # 成功(若 secret.txt 有 r 權限)
-
原因:文件系統通過完整路徑直接定位 inode,不依賴父目錄的?
r
。
(2) 無?x
?但能?stat
?文件
chmod -x dir/
stat dir/file # 失敗!需父目錄 x 權限
-
原因:訪問文件元數據(如大小、時間)需要父目錄的?
x
。
(3) 目錄粘滯位(t
)
chmod +t /tmp # 僅文件所有者可刪除自己的文件
-
用途:共享目錄(如?
/tmp
)中防止他人刪除你的文件。
6. 總結:目錄權限三要素
權限 | 關鍵作用 | 無權限時的表現 |
---|---|---|
r | 查看目錄內容(文件名) | ls ?失敗,但已知路徑可訪問文件 |
w | 修改目錄內容(增刪改文件) | 無法創建/刪除/重命名文件 |
x | 進入目錄或訪問子文件元數據 | cd ?和?stat ?均失敗 |
4. 文件與目錄默認權限的底層邏輯(umask 機制詳解)
1. 默認權限的起點
-
普通文件:系統設定的起始權限是?
666
(-rw-rw-rw-
)-
所有用戶可讀、可寫,但不可執行(安全考慮,避免隨意運行未知文件)。
-
-
目錄:系統設定的起始權限是?
777
(drwxrwxrwx
)-
所有用戶可讀、寫、進入(目錄需要?
x
?權限才能訪問內容)。
-
?為什么目錄比文件多?
x
?
文件?
x
?是“執行”,目錄?x
?是“進入/搜索”,二者含義不同。目錄必須允許?
x
,否則無法?cd
?或訪問子文件。
2. 權限掩碼(umask)的作用
-
umask?是系統的一個權限過濾器,用于從起始權限中屏蔽某些權限。
-
規則:
最終權限 = 起始權限 & (~umask)
(即從起始權限中移除 umask 指定的權限)
查看當前 umask:
umask # 默認輸出(如 0022)
umask -S # 符號格式(如 u=rwx,g=rx,o=rx)
3. 默認 umask 值(常見場景)
-
Linux 普通用戶:
0002
?→ 屏蔽?other
?的?w
?權限。 -
Linux root 用戶:
0022
?→ 屏蔽?group
?和?other
?的?w
?權限。
計算示例:
-
普通文件(起始?
666
)-
umask?
022
?→ 移除?group
?和?other
?的?w
666: rw- rw- rw- & ~022: rw- r-- r-- ------------------- 644: rw- r-- r--
-
實際權限:
-rw-r--r--
(所有者可讀寫,其他人只讀)。
-
-
目錄(起始?
777
)-
umask?
022
?→ 移除?group
?和?other
?的?w
777: rwx rwx rwx & ~022: rwx r-x r-x ------------------- 755: rwx r-x r-x
-
實際權限:
drwxr-xr-x
(所有者全權,其他人不可修改目錄內容)。
-
4. 為什么普通文件默認?664
(而非?644
)?
-
現代 Linux 發行版(如 Ubuntu)默認 umask 為?
0002
(而非?0022
):-
普通用戶創建文件時:
666 & ~002 = rw- rw- r-- → 664
-
目的:允許同組用戶協作編輯文件(適合多用戶環境)。
-
驗證:
umask 0002 # 臨時設置 umask
touch test.txt
ls -l test.txt # 輸出 -rw-rw-r--
5. 修改 umask 的注意事項
-
臨時修改(僅當前會話有效):
umask 0027 # 屏蔽 group 的 w 和 other 的所有權限
-
永久修改:
將?umask 002
?添加到?~/.bashrc
?或?/etc/profile
。 -
安全建議:
-
root 用戶應保持?
umask 022
?或更嚴格(如?027
)。 -
共享目錄可設?
umask 002
(組內協作)。
-
6. 特殊場景
-
可執行文件:
-
若文件本身需要執行權限(如腳本),需手動添加?
x
:chmod +x script.sh
-
-
目錄的粘滯位(
t
):-
設置后(如?
/tmp
),即使有?w
?權限,用戶也只能刪除自己的文件:chmod +t /shared_dir
-
總結:權限設計的核心邏輯
對象 | 起始權限 | umask 作用 | 常見默認權限 |
---|---|---|---|
普通文件 | 666 | 移除?w (防止誤改) | 664 (用戶)、644 (root) |
目錄 | 777 | 保留?x (確保可進入) | 775 (用戶)、755 (root) |
關鍵點:
-
umask?不添加權限,只從起始權限中屏蔽。
-
目錄必須保留?
x
,否則無法訪問子文件。 -
權限設計遵循最小特權原則,平衡安全與便利。
5. 粘滯位(Sticky Bit)詳解:保護共享目錄中的用戶文件
1. 問題背景
-
共享目錄場景:
- 由?
root
?創建一個目錄(如?/shared_tmp
),供所有用戶存放臨時文件。 - 目錄權限通常為?
777
(drwxrwxrwx
),允許所有用戶讀寫。
- 由?
-
風險:
- 雖然文件受權限約束(如?
-rw-r--r--
),但任何有目錄?w
?權限的用戶都能刪除他人的文件! - 原因:Linux 中,刪除文件需要父目錄的?
w
?權限,而非文件本身的權限。
- 雖然文件受權限約束(如?
2. 粘滯位的作用
-
粘滯位(Sticky Bit)?是一種特殊的目錄權限,設定后:
- 用戶只能刪除自己創建的文件,即使目錄是?
777
。 - 典型應用:
/tmp
?目錄(所有用戶可寫,但無法隨意刪別人的文件)。
- 用戶只能刪除自己創建的文件,即使目錄是?
查看?/tmp
?的權限:
ls -ld /tmp # 輸出示例:drwxrwxrwt
注意最后的?t
,表示粘滯位已設置。
3. 如何設置粘滯位?
方法 1:符號模式(推薦)
chmod +t /shared_dir
方法 2:數字模式
chmod 1777 /shared_dir # 1xxx 中的 1 表示粘滯位
驗證:
ls -ld /shared_dir # 輸出應包含 `... rwt` 或 `... rwT`
t
:粘滯位 + 其他人有?x
?權限。T
:粘滯位 + 其他人無?x
?權限(罕見,可能配置錯誤)。
4. 粘滯位的規則
操作 | 無粘滯位(普通 777 目錄) | 有粘滯位(1777 目錄) |
---|---|---|
用戶創建文件 | 可以 | 可以 |
用戶刪除自己的文件 | 可以 | 可以 |
用戶刪除他人文件 | 可以(只要有目錄?w ?權限) | 禁止 |
root 用戶刪除文件 | 可以 | 可以(root 不受限制) |
關鍵點:
-
粘滯位僅影響文件刪除,不影響讀取或修改文件內容(文件自身的?
rw
?權限仍有效)。 -
誰可以刪除文件?
-
文件所有者、目錄所有者、
root
。
-
5. 為什么需要粘滯位?
-
共享目錄的權限矛盾:
-
若目錄無?
w
?權限 → 用戶無法創建文件。 -
若目錄有?
w
?權限 → 用戶可刪除他人文件。
-
-
粘滯位的平衡:
-
允許所有人創建文件(
777
),但禁止隨意刪除他人文件(+t
)。
-
6. 實際應用示例
場景:創建一個共享臨時目錄?/shared_tmp
,要求:
-
所有用戶可讀寫。
-
用戶只能刪除自己的文件。
步驟:
# 1. 創建目錄并設置權限
sudo mkdir /shared_tmp
sudo chmod 1777 /shared_tmp # 或 chmod a+rwxt /shared_tmp# 2. 驗證權限
ls -ld /shared_tmp # 應顯示 drwxrwxrwt# 3. 測試(用戶A和用戶B)
# 用戶A創建文件
touch /shared_tmp/userA_file# 用戶B嘗試刪除(失敗)
rm /shared_tmp/userA_file # 報錯:Operation not permitted
7. 常見問題
Q1:粘滯位對文件有效嗎?
-
無效!粘滯位僅適用于目錄。對文件設置?
+t
?會被忽略(顯示為?T
)。
Q2:為什么?/tmp
?默認有粘滯位?
-
因為?
/tmp
?是系統級共享目錄,需防止用戶互相刪除文件導致安全問題。
Q3:如何移除粘滯位?
chmod -t /shared_dir
總結:粘滯位的核心邏輯
權限 | 作用 |
---|---|
目錄?w | 控制能否在目錄內創建/刪除文件。 |
粘滯位?t | 限制刪除權限(僅允許所有者刪除)。 |
6.?使用系統自帶的包管理工具(推薦)
- 在 Linux 服務器上安裝軟件,主要通過?包管理工具?來實現,類似于手機上的應用商店。以下是詳細的操作流程和常見方法:
不同的 Linux 發行版有不同的包管理工具,最常見的是:
Linux 發行版 | 包管理工具 | 安裝命令示例 |
---|---|---|
Ubuntu/Debian | apt ?(Advanced Package Tool) | sudo apt install 軟件名 |
CentOS/RHEL | yum ?或?dnf | sudo yum install 軟件名 ?或?sudo dnf install 軟件名 |
Arch Linux | pacman | sudo pacman -S 軟件名 |
openSUSE | zypper | sudo zypper install 軟件名 |
示例(Ubuntu/Debian 系統)
# 1. 更新軟件包列表(獲取最新軟件信息)
sudo apt update# 2. 安裝軟件(如 nginx)
sudo apt install nginx# 3. 卸載軟件
sudo apt remove nginx
?優點:
自動解決依賴關系(類似手機應用商店一鍵安裝)。
官方軟件庫,安全穩定。