什麼是檔案系統?
檔案系統是作業系統在分區上儲存檔案資訊的方法和資料結構.
Linux檔案系統具有類似的通用結構, 其關鍵組成部分有:
超級塊 super block
索引節點 inode
資料區塊 data block
目錄塊 directory block
三種基本許可權
| 代表字元 |
許可權 |
對檔案的含義 |
對目錄的含義 |
| r |
讀許可權 |
可以讀檔案的內容 |
可以列出目錄中的檔案清單 |
| w |
寫入權限 |
可以修改,刪節檔案 |
可以在目錄中建立, 刪除檔案 |
| x |
執行許可權 |
可以執行該檔案 |
可以使用cd命令進入該目錄 |
目錄上只有執行許可權, 表示可以進入或穿越它進入更深層次的子目錄.
目錄上只有執行許可權, 要訪問該目錄下的有讀許可權的檔案, 必須知道檔案名稱才可以訪問.
目錄上只有執行許可權, 不能列出目錄列表也不能刪除該目錄.
目錄上執行許可權和讀許可權的組合, 表示可以進入目錄並列出目錄列表.
目錄上執行許可權和讀許可權的組合, 表示可以在目錄中建立,刪除和重新命名檔案.
特殊許可權
特殊許可權 |
說明 |
| SUID |
當一個設定了SUID位的可執行檔被執行時, 該檔案將以所有者的身份執行. 也就是說無論誰來執行這個檔案, 他都有檔案所有者的特權, 任意的存取該檔案的人能使用全部的系統資源. 如果所有者是root的話, 那麼執行人就具有超級使用者的許可權. |
| SGID |
當一個設定了SGID位的可執行檔運行時, 該檔案將具有所屬組的特權, 任意存取整個組所能使用的系統資源, 若一個目錄設定了SGID, 則所有被複製到這個目錄下的檔案, 其所屬的組都會被重設為和這個目錄一樣, 除非在複製檔案時加上-p(preserve, 保留檔案屬性)的參數, 才能保留原來所屬的群組設定. |
| sticky-bit |
對一個檔案設定了sticky-bit之後, 任何使用者都有寫入權限, 但必須由屬主執行刪除, 移動等操作; 對一個目錄設定了sticky-bit之後, 存放在該目錄的檔案僅允許屬主執行刪除, 移動等操作. |
一個設定了SUID的典型例子是passwd程式, 它允許普通使用者改變自己的口令, 這是通過改變/etc/shadow檔案的口令欄位實現的. 然而系統管理員絕不允許普通使用者直接改變/etc/shadow檔案的權利. 因為這絕對不是個好主意. 解決方案是將passwd的程式設定SUID, 當passwd程式被執行的時候後, 普通使用者將具有超級使用者的許可權, 而passwd程式運行結束之後, 回到普通使用者的許可權.
查看/usr/bin/passwd檔案的許可權的話, 它的使用權限設定如下: –rwsr-xr-x 當中的s代表suid.
查看/tmp目錄, 會發現它的許可權如下: drwxrwxrwt 其中的t就是sticky-bit
Linux檔案類型
普通檔案: 包括文字檔, 資料檔案, 可執行檔二進位程式檔案等.
目錄檔案: Linux系統把目錄看成是一種特殊的檔案, 利用它構成檔案系統的樹形結構.
裝置檔案: Linux系統把每一個裝置都看成是一個檔案. 其又分為塊裝置和字元裝置.
連結檔案
檔案類型的表示
| 普通檔案 |
- |
| 目錄 |
d |
| 符號連結 |
l |
| 字元裝置檔案 |
c |
| 塊裝置檔案 |
b |
| 通訊端 |
s |
| 具名管道 |
p |
系統檔案
*.conf 設定檔
*.rpm rmp包
*deb deb包
*.a 一種封存檔案
*.lock 一種鎖定檔案
*.~ 備份檔案
.* 隱含檔案
程式和指令碼
*.c C語言來源程式檔案
*.cpp C++語言來源程式檔案
*.h C或C++的標頭檔
*.o 程式對象檔案
*.pl Perl語言來源程式檔案
*.php PHP語言來源程式檔案
*.python Python語言來源程式檔案
*.tcl TCL指令檔
*.so, *.lib 庫檔案
建立檔案的命令: touch file1 該命令建立了一個名為file1的空檔案.
touch .file2 該命令建立了一個名為.file2的隱藏檔案. 查看隱藏檔案需要用ls -a命令.
sudo touch /boot/file1 該命令使用超級使用者的許可權在/boot目錄下建立名為file1的空檔案.
刪除檔案的命令: rm test 該命令刪除test檔案
rm test .test 該命令刪除多個檔案.
Unix和Linux中,如果沒有任何返回,就是說明命令運行成功了.
查看檔案的命令: cat, less, more. less跟cat的區別是less是分屏顯示. more跟less的區別是more不能用上方向鍵回選, 翻到最後自動結束. cat不管檔案多大, 全部顯示, 自動結束.
拷貝命令: cp /boot/grub/menu.lst ./menu.bak.lst 該命令把boot下的menu.lst複製到目前的目錄, 複製的檔案名稱為menu.bak.lst.
. 代表目前的目錄.
.. 代表目前的目錄的上一級目錄.
重新命名檔案命令: mv menu.bak.lst menu.backup 該命令將目前的目錄下的menu.bak.lst重新命名為目前的目錄下的menu.backup檔案. 其實他是一個剪下命令. 它既可以移動一個檔案, 也可以重新命名一個檔案.
尋找檔案的命令: find
例如: sudo find / –name ls 該命令會從根目錄找, 尋找名字為ls的檔案.
sudo find / –name “ls*” 從根目錄開始尋找, 尋找名字以ls開頭的檔案.
使用ctrl + c來終止搜尋的執行.
管理檔案許可權的命令: chmod
chmod [-R] {[ugoa][+-=][rwxst]}
-R 表示遞推地對該目錄下的所有子目錄實施使用權限設定.
{}內的內容稱為一個模式, 可以指定多個模式, 多個模式之間用逗號間隔.
u 表示屬主(user) g 表示所屬組使用者(group) o 表示其他使用者(other) a 表示所有使用者(all) |
+ 表示增加許可權 - 表示刪除許可權 = 表示分配許可權, 同時將原有許可權刪除 |
r 表示允許讀取 w 表示允許寫入 x 表示允許執行 |
chmod go-r testfile1 略
chmod u+x testfile1 略
chmod u-x,go+r testfile1 屬主刪除執行許可權, 組和其他使用者添加讀取許可權.
chmod g=u testfile1 將組使用權限設定為跟屬主相同
chmod o+u testfile1 對其他人添加屬主具有的許可權
chmod 755 testfile2
chmod 600 testfile2
數值設定法
| 讀 |
寫 |
執行 |
二進位 |
八進位 |
說明 |
| - |
- |
- |
000 |
0 |
沒有許可權 |
| - |
- |
x |
001 |
1 |
允許執行 |
| - |
w |
- |
010 |
2 |
允許寫入 |
| - |
w |
x |
011 |
3 |
允許執行和寫入 |
| r |
- |
- |
100 |
4 |
允許讀取 |
| r |
- |
x |
101 |
5 |
允許執行和讀取 |
| r |
w |
- |
110 |
6 |
允許寫入和讀取 |
| r |
w |
x |
111 |
7 |
允許執行寫入和讀取 |
改變檔案所屬的使用者與所屬的使用者組的命令: chown
命令格式: chown [-R] <使用者[:組]><檔案或目錄>
同樣地, 若操作對象是目錄, 則遞迴地對該目錄下面的所有的子目錄實施設定.
要單獨改變組, 可以使用下面的格式:
chown [-R] <:組><檔案或目錄> 注意: 組前必須有":"
例: chown jason /home/jane/testfile3 改換屬主為jason
chown :users /home/jane/testfile3 改換所屬的組為users
chown group1:group1 /home/jane/testfile3 將屬主和屬組改成group1
chown -R apache:apache /home/osmond/testdir 將testdir目錄及其子目錄下的所有檔案或目錄的屬主和組讀改成apache
Umask命令
使用者可以使用umask命令設定檔案的預設產生掩碼. 預設的產生掩碼告訴系統當建立一個檔案或目錄時, 不應該賦予其哪些許可權. 如果使用者將umask命令放在環境檔案(.bash_profile)中, 就可以控制所有建立的檔案或目錄的存取權限.
命令格式: Umask [u1u2u3]
其中u1表示的是不允許屬主的許可權; u2表示的是不允許同組的人有的許可權; u3表示的是不允許其他人有的許可權.
可以使用不帶任何參數或帶-S參數的umask命令查看當前預設產生掩碼.
$ umask
0022
$ umask –S
u=rwx, g=rx, o=rx