檔案系統、權限觀念與實務操作

来源:百度文库 编辑:神马文学网 时间:2024/04/30 11:45:44
# 版權宣告: 1999 Copyright OLS3 All rights reserved.
# 作者: OLS3 (臥龍小三)
# 本講義僅供台南縣 87 學年度網路管理進階研習班上課之用.
# 學員可保存一份自用, 供日後網管時參考備查.
# 作者保有一切形式的著作權.
# 欲作其它用途者, 需經作者授權同意.
# 未經作者授權同意之前, 請勿轉載刊登.
檔案系統、權限觀念與實務操作
一. Linux 的檔案系統:
在 Linux中, 任何東西, 包括周邊硬體, 都被視為檔案. (請牢記)
因為檔案的數量很多, 必須有一套良好的檔案系統予以管理.
註: Linux 支援非常多的檔案系統喔! 如 msdos, vfat, minix, ext, ext2 .... 等.
目前以 ext2 (Second Extended File System) 為主要的檔案系統.
1. Linux的檔案系統, 採用 階層式(hierarchical) 的樹狀目錄結構.
最上層是根目錄 / , 其下一層還包含有其它目錄,
一般而言, 有這些目錄 :
/usr 應用程式安裝位置 /etc 設定檔的大本營 /lib 函式庫 /var 具變動性質的相關程式目錄 /tmp 暫存檔目錄 /bin 使用者程式目錄 /sbin 管理員程式目錄 /mnt 檔案系統掛入點 /dev 設備檔目檔 /home 自家目錄大本營, 其下建有各帳號的自家目錄, 也就是各帳號放置網頁空間的地方 /lost+found 遺失檔案放置目錄
(目錄之下, 還可以有其它的子目錄, 依此下去....)
每個目錄都可以選擇 掛在(mount) 不同的分割區上, (您應該記得當初我們安裝 RedHat 時, 所做的一些分割吧?) 為了安全起見, 有經驗的系統管理者, 通常也是如此作法.
這些目錄, 因為歷史的原因, 漸漸地, 有了特定的儲存內容, 不過各家出廠的 Unix 系統仍有不同的作法, 因此造成了各自為政的紊亂感覺, 無疑地, 這將帶給系統管理者極大的不便, 因此, 目前, 有一套規範檔案目錄的命名及存放標準 File System Standard(簡稱 FSSTND) 出現了, RedHat Linux 便是遵守此一標準. 若您對這個標準有興趣, 可以至http://www.pathname.com/fhs/ 瞧瞧.
2. Linux 的檔案由一連串的 data block (區塊) 所組成.
block 的大小, 在安裝檔案系統時決定, 通常是 512 bytes 的倍數, 如 512, 1024, 2048, 4096 bytes 不等.
RedHat 內定是 4096 bytes, 一般目的而言, 並不需要改變, 若是您的主機打算做為 BBS 站用途, 則通常會將 block 設為 1024 bytes, 因為, 信件檔的size通常都不大, 如此, 可以節省許多硬碟空間.
3. Linux 採 Inode (Index node) 做為區塊索引, 用來存取資料.
所謂的 Inode 是一個單獨的儲存區(128 bytes), 用來描述某一個檔案的權限屬性、檔案大小及檔案資料存放區塊(Data block)位置等資訊. 每個檔案在建立之時, 系統即會配置一個專屬的 Inode, 其中含有代表該檔案的一個獨一無二的 inode number (inode 編號).
Linux 的檔案系統, 即根據該 Inode number 來索引找檔, 以存取該檔案的資料.
如何得知檔案的 inode 編號呢?
用 ls -i 便可以看見了. ( -i 是 inode 之意)
18073 bin 2 home 2 ols3 2 usr20081 boot 41 home2 1 proc 2 var42 config 2010 lib 16066 root10041 dev 11 lost+found 18074 sbin12049 etc 6026 mnt 14057 tmp
4. 檔案種類.
常見的檔案, 有以下幾種:
文字檔(ascii) 二進位檔(binary) 目錄 符號連結檔 設備檔
其中設備檔, 又可分為二種:
區塊 (block) 設備檔 字元 (character) 設備檔
所謂區塊設備檔, 就是儲存資料, 供人讀取的周邊, 如軟碟與硬碟的分割區 /dev/hda1 等.
而字元設備檔, 就是一個可以讀取序列字元的周邊, 如 keyboard , serial port 滑鼠, 終端機等.
設備檔放在 /dev 這個目錄之中.
那麼, 如何判斷某一個檔案是屬於那一種呢? 有以下二個方法:
用 ls -l
-rw-rw-r-- 1 root root 135 Apr 11 12:01 config -rwxr-xr-x 1 root root 58156 May 8 1998 mail drwxr-xr-x 4 root root 2048 Aug 31 1998 lib lrwxrwxrwx 1 root root 5 Feb 25 16:28 home2 -> /ols3 brw-rw-r-- 1 root floppy 2, 0 May 6 1998 fd0 brw-rw---- 1 root disk 3, 1 May 6 1998 hda1 crw-rw---- 1 root uucp 5, 64 May 6 1998 cua0 crw------- 1 root root 4, 0 May 6 1998 tty0
用 file 指令, 如: file 檔名 或 file *
5. 檔案的命名.
Linux 的檔案可用 A-Z 0-9 . _ - 等符號來命名, 最長 256 個字元.
( DOS 有 8.3 的檔名格式限制, 而目前 Win95/98 的 vfat 長檔名格式, 相信是仿效自 Unix 系統的作法.)
您可以使用副檔名, 來區別檔案的用途, 比如: ols3gbk.pl, test.c, myword.txt, squid.doc, httpd.conf
不過, 檔案的名稱, 和該檔的種類, 並沒有直接的關連, 換言之, 您可以將一個文字檔, 名為 runit.exe, 但並不代表它就是一個執行檔. 在 Linux 中, 檔案是否可以執行, 僅和該檔的權限屬性有關, 和副檔名沒有絕對的關聯.
由於 Linux 具長檔名的能力, 因此, 許多檔案的名稱, 看起來都十分地長, 這讓習慣於 DOS/WIN 平台的人, 十分不能適應, 特別是打字能力不頂好的人, 更是頗有怨言.
因此, 您必須突破這層心理障礙才行! ^_^
6. 目錄 (它也是檔案的一種)
目錄的存在, 是為了分類, 方便管理. 目錄中包含有檔案及子目錄.
在 Linux 中, 請務必牢記二點:
. 代表該該目錄本身
.. 代表上一層的目錄
如何得知, 那些檔名, 其實本身是目錄呢? 下 ls -la 試試.
擁檔 有案 檔種 案 檔案大小 最近修改的類 檔案權限 數 擁有人 組別 (byte單位)日期及時間 檔案名稱drwxr-xr-x 14 root root 1024 Jul 21 21:31 .drwxr-xr-x 17 root root 1024 Apr 11 12:01 ..drwxr-xr-x 8 82 82 1024 Feb 25 19:23 apache-rw-r--r-- 1 root root 1335460 Feb 25 17:45 apache_1_3_4.tar.gzdrwxr-xr-x 6 root root 1024 Aug 31 1998 ftpdrwxr-xr-x 5 root root 1024 Aug 31 1998 httpddrwx------ 2 james james 1024 Apr 23 06:47 jamesdrwxr-xr-x 2 root root 12288 Aug 31 1998 lost+founddrwxr-xr-x 2 msql nobody 1024 Dec 28 1998 msqldrwxr-xr-x 28 ols3 ols3 2048 Jul 19 21:38 ols3drwxr-xr-x 3 1022 nobody 1024 Jan 25 23:40 ols3cgidrwxrwxr-x 3 perl ols3 1024 Feb 2 07:11 perl-rw------- 1 root root 2097152 Jul 21 18:39 quota.group-rw------- 1 root root 1278656 Jul 21 18:39 quota.userdrwxrwxr-x 2 root nobody 1024 May 11 1998 sambadrwxr-xr-x 3 apache nobody 1024 Feb 25 16:58 tempdrwxrwxr-x 2 webadm nobody 1024 Mar 14 16:34 webadm
檔案權限開頭為 d 者, 即為一個目錄. 若是一個 - 號, 則為普通的檔案.
若該檔是普通檔案, 則檔案數為 1, 若是目錄, 則至少為 2 (即 . 及 ..)
如何得知有目前的位置(pwd : print name of current/working directory) 中有幾個目錄?
檔案擁有數-2 file * | grep directory | wc -l
7. 符號連結檔. (Symbolic Link)
所謂的符號連結檔, 就是該檔案(本尊)的別名(分身)的意思.
Linux 中有二種符號連結檔:
硬式連結 (hard link) 軟式連結 (soft link)
所謂硬式連結檔, 就是某一個檔案的複本, 其檔內容大小完全和原本的檔案一模一樣. 當原本檔案內容改變時, 硬式連結檔也跟著作相同的改變. 但若原檔被刪除, hard link 檔仍然會存在.
而軟式連結, 則是該檔案的一個別名, 用來連結至原本的檔案.
不管是那一種, 存取符號連結檔, 就等於是存取原來的那一個檔案.
底下是符號連結檔的例子:
-rw-rw-r-- 2 root root 20 Jul 21 22:00 hard-linklrwxrwxrwx 1 root root 11 Jul 21 21:59 soft-link -> source-file-rw-rw-r-- 2 root root 20 Jul 21 22:00 source-file
符號連結檔有非常大的用途, 這是 DOS/WIN 等其它平台無法比擬的.
例如: 某一個目錄空間不足, 那麼, 我可以將新的硬碟空間, 用符號連結檔的方式掛入, 同時可保持原有的目錄結構不變.
不過, 太方便, 也是種致命傷, 另一種 Linux distribution : Slackware, 早期便是 link 太紊亂了, 為人所垢病不已.
如何製造 symbolic link files ?
方法如下:
ln [-sf] source target
例:
ln  source-file  hard-link
ln -sf  source-file soft-link
s 表示 soft link 之意, f 表示, 若有同名檔存在, 則將它覆蓋過去.
8. 隱藏檔.
Linux 也有隱藏檔案的機制喔! 只要檔名以 . 號開頭, 那麼, 用 ls 來查看時, 是不會顯示出來的, (除非你用 ls -a) , 我們通常將隱藏檔, 拿來作為程式的初始化設定檔, 或者作為特殊的功能用途(如 .forward, .rhosts)
如下所示:
[root@ols3 /root]# ls -latotal 54drwxr-xr-x 9 root root 1024 Jul 18 22:53 .drwxr-xr-x 17 root root 1024 Apr 11 12:01 ..-rw-r--r-- 1 root root 548 Jul 18 22:56 .FVWM2-errors-rw-r--r-- 1 root root 1126 Aug 24 1995 .Xdefaults-rw-r--r-- 1 root root 11974 Jul 21 22:19 .bash_history-rw-r--r-- 1 root root 24 Jul 14 1994 .bash_logout-rw-r--r-- 1 root root 253 Apr 11 12:07 .bash_profile-rw-r--r-- 1 root root 176 Aug 24 1995 .bashrc-rw-r--r-- 1 root root 180 Mar 4 1996 .cshrcdrwx------ 2 root root 1024 Sep 1 1998 .elmdrwx------ 2 root root 1024 Aug 31 1998 .gnomedrwx------ 2 root root 1024 Aug 31 1998 .gnome_private-rw------- 1 root root 2222 Mar 14 16:42 .mysql_historydrwx------ 4 root root 1024 Apr 11 11:19 .netscape-rw-r--r-- 1 root root 166 Mar 4 1996 .tcshrcdrwx------ 2 root root 1024 Sep 1 1998 Mail-rw-r--r-- 1 root root 353 Jul 18 22:53 Xrootenv.0drwxr-xr-x 2 root root 3072 Apr 11 11:39 chinese--wxrw--wt 1 root root 22 Apr 11 11:28 chinesech_profile-rw-r--r-- 1 root root 165 Apr 11 11:28 chinesekcfont-rw-r--r-- 1 root root 11320 Jul 15 19:56 debug
9.檔案路徑.
Linux 的檔案路徑可分為二種表示法, 不過, 可沒有磁碟機代碼這種東東喔!
絕對路徑 相對路徑
所謂絕對路徑, 就是由根目錄開始表示起, 如 : /home/ols3/www/index.html, 就是實際的路徑位置.
也可以說凡是檔案路徑位置以 / 開頭者, 便是絕對的.
那麼, 所謂相對路徑, 就是開頭沒有 / 這個根目錄符號者.
若一個路徑是相對路徑, 那麼, 就是表示由目前的目錄開始算起, 因此, 系統會自動幫你在前面加上目前的目錄位置.
例如: src/linux/arch/i386/linux.c (pwd 為 /usr 的話)
即其實際的路徑位置, 為: /usr/src/linux/arch/i386/linux.c
二. 檔案權限的觀念:
對於 Linux 的檔案系統, 相信各位已經有了初步的了解. 接下來, 必須認識 Linux 的檔案權限觀念.
因為 Linux 是多人多工的 OS, 所以, 檔案系統必須要有一套嚴密的保護措施, 以免, 因為有意或無意的人為破壞, 造成混亂及損失.
Linux 使用檔案權限的觀念, 來達成上述目的.
一位系統管理員, 應該要有正確而清楚的檔案權限觀念, 才能使系統正常運作, 並且避免檔案損毀, 更可防止不屑宵小入侵. (駭客已非 hacker 的本意, 請大家正名!)
1. Linux 將檔案分成三種身份、四種權限:
三種身份是:
u: 自己(user) g: 和自己同一組的人(group) o: 其它人 (other)
而 a 則是代表所有的人.
每種身份皆有四種可能的權限:
r : 讀取權 (read) w : 寫入權 (write) x :執行權 (execute)
及: (上面這三種權限用得最多, 以下則較少用, 也請儘量不使用, 除非你確實知道你在做啥麼?!)
s : set user id / set group id 及 t : sticky bit (簡稱為 sst 模式)
4000 : set user id, 2000 set group id, 1000 set sticky bit
Linux 用 9 個 bits 來代表檔案的權限, 如下所示:
- - - - - - - - - -
- rwx rwx rwx
擁有人 同組人 其它人
最左邊表示檔案的種類, 可能有:
- d l b c 其它
其它 9 個位置, 每三個形成一組, 由左至右, 分別代表擁有人、同組人、其它人的權限.
每一組的三個位置, 由左至右為: 讀取,寫入,執行的權限, 若該位置只有一條線, 則表示不具有該權限.
另外, 我們也用數字來代表不同的權限:
讀取: 4 寫入: 2 執行: 1
如果某檔, 其擁有的權限為 rwx 的話, 那麼, 我們便把它們所代表的數字大小加起來, 即 4+2+1 =7
以下是可能的組合:
--- 0
--x 1
-w- 2
r-- 4
-wx 2+1=3
r-x 4+1=5
rw- 4+2=6
rwx 7
因為所有可能的組合, 其權限大小僅 0 ~ 7的範圍,
所以, 我們也將它視為一種八進位的數字系統, 並且常常用數字來表示某一個檔案的權限開放的程度.
例子:
擁檔 有案 檔種 案 檔案大小 最近修改的類 檔案權限 數 擁有人 組別 (byte單位)日期及時間 檔案名稱drwxr-xr-x 14 root root 1024 Jul 21 21:31 .drwxr-xr-x 17 root root 1024 Apr 11 12:01 ..drwxr-xr-x 8 82 82 1024 Feb 25 19:23 apache-rw-r--r-- 1 root root 1335460 Feb 25 17:45 apache_1_3_4.tar.gzdrwxr-xr-x 6 root root 1024 Aug 31 1998 ftpdrwxr-xr-x 5 root root 1024 Aug 31 1998 httpddrwx------ 2 james james 1024 Apr 23 06:47 jamesdrwxr-xr-x 2 root root 12288 Aug 31 1998 lost+founddrwxr-xr-x 2 msql nobody 1024 Dec 28 1998 msqldrwxr-xr-x 28 ols3 ols3 2048 Jul 19 21:38 ols3drwxr-xr-x 3 1022 nobody 1024 Jan 25 23:40 ols3cgidrwxrwxr-x 3 perl ols3 1024 Feb 2 07:11 perl-rw------- 1 root root 2097152 Jul 21 18:39 quota.group-rw------- 1 root root 1278656 Jul 21 18:39 quota.user-rwxr-xr-x 1 root root 656 Jul 12 01:39 ols3gbk.pl^^^^^^^^^^drwxrwxr-x 2 root nobody 1024 May 11 1998 sambadrwxr-xr-x 3 apache nobody 1024 Feb 25 16:58 tempdrwxrwxr-x 2 webadm nobody 1024 Mar 14 16:34 webadm
以上圖為例:
ols3gbk.pl 是一個普通的檔案, 其擁有人是 root, 組別是 root, 該檔案的權限是:
擁有人: 可讀,可寫,可執行 同組人: 可讀,可執行 (但不可寫) 其它人: 可讀,可執行 (但不可寫)
用八進位數字來表示, 該檔權限為: 755
試問: 以下權限其對應的八進位數字是多少?
rwx--x--x
r--r--r--
rw-rw-rw-
--x--x--x
rwxrwxrwx
r-xr-xr-x
試問: 以下八進位數字其對應的權限為何?
611
755
666
544
733
634
2. 改變權限的方法.
有兩種改變檔案權限的方法:
八進位數字模式 符號模式
使用的指令是: chmod (change mode : change the access permissions of files)
方法如下:
chmod  權限  檔案/目錄
例:
chmod 666 myfile chmod 777 myfile chmod 755 myfile chmod 111 myfile
以上是採八進位數字模式
chmod u+x myfile chmod u-x myfile chmod ug+x myfile chmod g-x myfile chmod o+x myfile chmod o-x myfile chmod a+x myfile chmod a-x myfile chmod a=x myfile chmod u=wr myfile chmod go=rx myfile
以上是採符號模式.
+ 表增加該種權限
- 表去掉該種權限
= 表設定作該種權限
3. 目錄的權限.
目錄的權限, 觀念及設法, 同於檔案的權限, 但其包含的意義則大不相同.
以 "可執行的" 這個權限而言, 對檔案來說, 若該檔設為可執行的話, 其意義很容易了解, 但如果將目錄設為可執行, 那麼難道目錄真的是可以執行的嗎? :-Q
當然不是.
Linux 對於目錄的權限, 另有一套看法:
r 可列出目錄中的檔案名稱, 即 ls 有作用
w 在該目錄中, 可刪檔,改檔名,建新檔
x 可以進入該目錄之中(重要觀念, 用處大)
如果某一個目錄下, 尚有許多檔案和子目錄, 有無方法可以一次改變所有的檔案權限呢?
當然有.
chmod -R 權限 目錄名稱
其中 -R 表示 Recursively change permissions of directories and their contents, 意即遞迴地將其下的所有檔案、目錄全數改變.
4. 改變檔案的擁有者(owner) 或 組別 (group)
通常這只有 root 等級的使用者, 才有此項權力. (否則就天下大亂了! 不過, 某些 Uuix clone 開放有限制的作法)
方法如下:
chown [-R] owner:group 檔案/目錄
例:
chown -R 3slo:hacker /home/ols3
5. umask(檔案的安全濾網).
什麼是 umask ? umask 是在新建立一個檔案或目錄時, 檔案權限的遮罩值.
其運作方式是: 將系統的預設值減去 umask 值, 就是最後檔案/目錄的權限.
一般而言, 新建檔案的預設值是 666, 新建目錄的預設值是 777, 如果 umask 定為 022,
那麼一個新的檔案建立時, 其真正的權限應該是 666-022=644
新的目錄建立時, 其權限則是 777-022=755
有了 umask 的話, 新建的檔案及目錄, 會比較安全一點.
如何得知目前的 umask 值是多少呢?
下 umask
三. 實務操作:
ls cd ~ file cat head tail more less pwd grep wc vi man clear cp mv rm find which locate whereis ln mkdir rmdir chmod chown umask id whoami mount umount mkfs mke2fs fdformat dd