Linux 最優秀的地方之一,就在於他的多人多工的環境。 而為了讓各個使用者具有較安全的管理機制,因此檔案的權限管理就變的很重要了。 Linux 一般將檔案可存取的方式分為三個類別,分別是 owner/group/other, 且各有 read/write/execute 等權限。若管理得當,將會讓您的 Linux 主機變的較為安全。 另外,您如果首次接觸 Linux 的話,那麼, 在 Linux 底下這麼多的目錄/檔案,到底代表什麼意義呢? 底下我們就來一一介紹呢! |
[root@linux ~]# ls -al total 248 drwxr-x--- 9 root root 4096 Jul 11 14:58 . drwxr-xr-x 24 root root 4096 Jul 9 17:25 .. -rw------- 1 root root 1491 Jun 25 08:53 anaconda-ks.cfg -rw------- 1 root root 13823 Jul 10 23:12 .bash_history -rw-r--r-- 1 root root 24 Dec 4 2004 .bash_logout -rw-r--r-- 1 root root 191 Dec 4 2004 .bash_profile -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 100 Dec 4 2004 .cshrc drwx------ 3 root root 4096 Jun 25 08:35 .ssh -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log -rw-r--r-- 1 root root 5976 Jun 25 08:53 install.log.syslog [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ] [ 屬性 ][連結][擁有者][群組][檔案容量][ 修改日期 ][ 檔名 ] |
[-][rwx][r-x][r--] 1 234 567 890 1 為:代表這個檔名為目錄或檔案(上面為檔案) 234為:擁有人的權限(上面為可讀、可寫、可執行) 567為:同群組使用者權限(上面為可讀可執行) 890為:其他使用者權限(上面為僅可讀)
drwx------ 3 root root 4096 Jun 25 08:35 .ssh |
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh |
例題一:如果有下面的兩個檔案,請說明兩個檔案的擁有者與其相關的權限為何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai答:
|
例題二:如果我的目錄為底下的樣式,請問 testgroup 這個群組的成員與其他人( others )是否可以進入本目錄?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/答:
|
[root@linux ~]# chgrp [-R] dirname/filename ... 參數: -R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄 都更新成為這個群組之意。常常用在變更某一目錄的情況。 範例: [root@linux ~]# chgrp users install.log [root@linux ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@linux ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 發生錯誤訊息囉∼找不到這個群組名∼ |
[root@linux ~]# chown [-R] 帳號名稱 檔案或目錄 [root@linux ~]# chown [-R] 帳號名稱:群組名稱 檔案或目錄 參數: -R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄 都更新成為這個群組之意。常常用在變更某一目錄的情況。 範例: [root@linux ~]# chown bin install.log [root@linux ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log [root@linux ~]# chown root:root install.log [root@linux ~]# ls -l -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log |
[root@linux ~]# cp 來源檔案 目的檔案
|
[root@linux ~]# cp .bashrc .bashrc_test [root@linux ~]# ls -al .bashrc* -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test |
[root@linux ~]# chmod [-R] xyz 檔案或目錄 參數: xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。 -R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄 都更新成為這個群組之意。常常用在變更某一目錄的情況。 |
[root@linux ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@linux ~]# chmod 777 .bashrc [root@linux ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc |
例題三:將剛剛您的 .bashrc 這個檔案的屬性改回原來的 -rw-r--r-- 答:
|
chmod | u g o a |
+(加入) -(除去) =(設定) |
r w x | 檔案或目錄 |
[root@linux ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元! [root@linux ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc |
[root@linux ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@linux ~]# chmod a+w .bashrc [root@linux ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc |
[root@linux ~]# chmod a-x .bashrc [root@linux ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc |
[root@linux ~]# cd /tmp [root@linux tmp]# mkdir testing [root@linux tmp]# chmod 744 testing [root@linux tmp]# touch testing/testing [root@linux tmp]# chmod 600 testing/testing # 這個 mkdir 是在建立目錄用的指令!是 make directory 的縮寫。 # 我們用 root 的身份在 /tmp 底下建立一個名為 testing 的目錄, # 並且將該目錄的權限變為 744 ,該目錄的擁有者為 root 喔! # 另外, touch 可以用來建立一個沒有內容的檔案,因此, touch testing/testing # 可以建立一個空的 /tmp/testing/testing 檔案喔! [root@linux tmp]# ls -al drwxr--r-- 2 root root 4096 Jul 14 01:05 testing # 仔細看一下,目錄的權限是 744 ,且所屬群組與使用者均是 root 喔! # 接下來,我們將 root 的身份切換成為一般身份使用者。 # 鳥哥的系統裡面有個 dmtsai 的一般身份使用者帳號,所以切換身份成為 dmtsai [root@linux tmp]# su dmtsai # 那個 su 的指令是用來『變換身份』的一個指令,我們未來會詳細介紹。 # 注意看,底下這一行中,發現使用者變為 dmtsai 了,而且提示字元變成 $ 了! # 也就是說,現在操作系統的人變成 dmtsai 了!那麼 dmtsai 這個人對於 # /tmp/testing 是屬於 others 的權限,那他可以對 /tmp/testing 幹嘛? [dmtsai@linux tmp]$ ls -l testing <== 此時身份為 dmtsai total 0 ?--------- ? ? ? ? ? testing # 可以查閱裡面的資訊喔!因為dmtsai 具有 r 的權限,不過,畢竟權限不夠, # 很多資料竟然是問號 (?) 來的∼怪怪的緊∼ [dmtsai@linux tmp]$ cd testing <== 此時身份為 dmtsai bash: cd: testing/: Permission denied # 發現了嗎?即使我們具有 r 的權限,但是沒有 x ,所以 # dmtsai 無法進入 /tmp/testing 喔! [dmtsai@linux tmp]$ exit [root@linux tmp]# chown dmtsai testing # 使用 exit 就可以離開 su 的功能了。我們將這個 testing 目錄的擁有者設定為 # dmtsai ,此時 dmtsai 就成為 owner 了,那麼這個使用者又能幹麻呢? [root@linux tmp]# su dmtsai [dmtsai@linux tmp]$ cd testing <== 此時身份為 dmtsai [dmtsai@linux testing]$ ls -l <== 此時身份為 dmtsai -rw------- 1 root root 0 Jul 14 01:13 testing # 再切換身份成為 dmtsai ,此時就能夠進入 testing 了!查閱一下內容。 # 發現了 testing 這個檔案存在喔!權限是只有 root 才能夠存取∼ # 那我們測試一下能否刪除呢? [dmtsai@linux testing]$ rm testing <== 此時身份為 dmtsai rm: remove write-protected regular empty file `testing'? y # 竟然可以刪除!這樣理解了嗎?! |
[root@linux ~]# ls -l /
drwxr-xr-x 2 root root 4096 Jul 14 05:22 bin
drwxr-xr-x 3 root root 4096 Jul 9 05:18 boot
drwxr-xr-x 9 root root 4880 Jul 11 00:45 dev
drwxr-xr-x 6 root root 4096 Jun 29 01:06 disk1
drwxr-xr-x 3 root root 4096 Jun 25 08:53 disk2
drwxr-xr-x 83 root root 12288 Jul 14 05:23 etc
drwxr-xr-x 6 root root 4096 May 30 20:07 home
drwxr-xr-x 10 root root 4096 Jul 14 05:23 lib
drwx------ 2 root root 16384 Jun 25 16:21 lost+found
drwxr-xr-x 3 root root 4096 Jun 25 19:34 media
drwxr-xr-x 2 root root 4096 Apr 25 23:54 misc
drwxr-xr-x 2 root root 4096 May 23 12:28 mnt
drwxr-xr-x 2 root root 4096 May 23 12:28 opt
dr-xr-xr-x 59 root root 0 Jul 10 01:25 proc
drwx------ 9 root root 4096 Jul 13 11:31 root
drwxr-xr-x 2 root root 4096 Jul 14 05:22 sbin
drwxr-xr-x 2 root root 4096 Jun 25 08:23 selinux
drwxr-xr-x 2 root root 4096 May 23 12:28 srv
drwxr-xr-x 10 root root 0 Jul 10 01:25 sys
drwxr-xr-x 10 root root 4096 Jun 25 20:24 system
drwxrwxrwt 10 root root 4096 Jul 14 05:23 tmp
drwxr-xr-x 14 root root 4096 Jun 25 08:27 usr
drwxr-xr-x 24 root root 4096 Jun 25 20:16 var
|
目錄 | 應放置檔案內容 |
/ | 根目錄 root (/),一般建議在根目錄底下只接目錄,不要直接有檔案在 / 底下。 根目錄是開機的時候系統第一個掛載的 partition ,所以,所有開機過程會用到的檔案, 應該都要放置在這個 partition 當中。舉例來說, /etc, /bin, /dev, /lib, /sbin 這五個次目錄都應該要與根目錄連在一起,不可獨立成為某個 partition 呢! |
/bin, /usr/bin, /usr/local/bin | 除了 /bin 之外, /usr/local/bin, /usr/bin 也是放置『使用者可執行的 binary file 的目錄』喔!舉例來說, ls, mv, rm, mkdir, rmdir, gzip, tar, cat, cp, mount 等等重要指令都放在這個目錄當中。 |
/boot | 這個目錄主要的目的是放置 Linux 系統開機會用到的檔案。 開機會用到什麼呢?沒錯∼就是 Linux 的核心檔案。這個目錄底下檔名為 vmlinuz 的就是 Linux 的 Kernel 啦!粉重要的東西! 而如果你的開機管理程式 (loader) 選擇 grub 的話,那麼這個目錄內還有 /boot/grub 這個次目錄呦! |
/dev | 在 Linux 系統上,任何裝置與周邊設備都是以檔案的型態存在於這個目錄當中的。 您只要透過存取這個目錄底下的某個檔案,就等於存取某個裝置囉∼ 主要又分為周邊設備 (character device),例如鍵盤、滑鼠等;以及儲存設備 (block device), 例如硬碟、光碟等等。在此目錄下的檔案會多出兩個屬性,分別是 major device number , 與 minor device number 。我們的系統核心就是透過這兩個 number 來判斷裝置的呢! 比要重要的檔案有 /dev/null, /dev/tty[1-6], /dev/ttyS*, /dev/lp*, /dev/hd*, /dev/sd* 等等 |
/etc | 系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、
各種服務的啟始檔等等。一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,
但是只有 root 有權力修改。並且在此目錄下的檔案幾乎都是 ASCII 的純文字檔案哩。
不過, FHS 建議不要放置可執行檔在這個目錄中喔。比較重要的檔案有:
/etc/inittab, /etc/init.d/, /etc/modprobe.conf,
/etc/X11, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目錄有:
|
/home | 這是系統預設的使用者家目錄 (home directory)。在你新增一個一般使用者帳號時,
預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號喔: ~:代表目前這個使用者的家目錄,而 ~dmtsai :則代表 dmtsai 的家目錄! |
/lib, /usr/lib, /usr/local/lib | 系統會使用到的函式庫放置的目錄。 程式在運作的過程中,可能會呼叫一些額外的功能參數,那需要函式庫的協助! 這些函式庫就放在此處。比較重要的是 /lib/modules 這個目錄內會擺放 kernel 的相關模組喔! |
/lost+found | 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下, 通常這個目錄會自動出現在某個 partition 最頂層的目錄下。例如你加裝一棵硬碟於 /disk 中, 那在這個目錄下就會自動產生一個這樣的目錄 /disk/lost+found |
/mnt /media | 這是軟碟與光碟預設掛載點的地方;通常軟碟掛在 /mnt/floppy 下,而光碟掛在 /mnt/cdrom 下,不過也不一定啦!只要你高興,隨便找一個地方來掛載也可以呀!另外,目前也規劃出另一個 /media 的目錄呢!與 /mnt 有點類似啦∼ |
/opt | 這是給主機額外安裝軟體所擺放的目錄。舉例來說, FC4 使用的是 Fedora 社群開發的軟體, 如果您今天想要自行安裝新的 KDE 桌面軟體的話,可以將該軟體安裝在這個目錄下的意思。 不過,以前的 Linux 系統中,我們還是習慣放置在 /usr/local 目錄下呢! |
/proc | 這個目錄本身是一個『虛擬檔案系統』喔!他放置的資料都是在記憶體當中, 例如系統核心、形成資訊、周邊設備的狀態及網路狀態等等。因為這個目錄下的資料都是在記憶體當中, 所以本身不佔任何硬碟空間啊!比較重要的檔案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。 |
/root | 系統管理員 (root) 的家目錄。之所以放在這裡, 是因為我們提過,系統第一個開機就被掛載的 partition 為 / , 而我們希望 /root 能夠與 / 放在同一塊 partition 上面之故。 |
/sbin, /usr/sbin, /usr/local/sbin | 放置一些系統管理員才會動用到的執行指令,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。與 /bin 不太一樣的地方,這幾個目錄是給 root 等系統管理用的。但是本目錄下的執行檔還是可以讓一般使用者用來『察看』而不能設定喔! |
/srv | 一些服務啟動之後,這些服務所需要取用的資料目錄。舉例來說,WWW 伺服器需要的網頁資料就可以放置在 /srv/www 裡面。 |
/tmp | 這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。 這個目錄是任何人都能夠存取的,所以您需要定期的清理一下。當然,重要資料不可放置在此目錄啊! |
/usr | 由 FHS 規範的第二層內容,在 /usr 此目錄下,包含系統的主要程式、
圖形介面所需要的檔案、額外的函式庫、本機端所自行安裝的軟體,以及共享的目錄與文件等等,
都可以在這個目錄當中發現。事實上,他有點像是 Windows 作業系統當中的『Program files』與
『WinNT』這兩個目錄的結合!在此目錄下的重要次目錄有:
|
/var | 這個目錄也很重要,也是 FHS 規範的第二層目錄內容。他主要放置的是針對系統執行過程中,
常態性變動的檔案放置的目錄。舉例來說,例如快取檔案 (cache) 或者是隨時變更的登錄檔
(log file) 都是放在這個目錄中的。此外,某些軟體執行過程中會寫入的資料庫檔案,
例如 MySQL 資料庫,也都寫入在這個目錄中!很重要吧!他底下的重要目錄有:
|
『為什麼你想要從 ext 2轉換到 ext3 呢?有四個主要的理由:可利用性、資料完整性、速度及易於轉換』
『可利用性』,他指出,這意味著從系統中止到快速重新復原而不是持續的讓 e2fsck 執行長時間的修復。ext3
的日誌式條件可以避免資料毀損的可能。他也指出:
『除了寫入若干資料超過一次時,ext3 往往會較快於 ext2,因為 ext3 的日誌使硬碟讀取頭的移動能更有效的進行』
然而或許決定的因素還是在Johnson先生的第四個理由中。 『它是可以輕易的從 ext2 變更到 ext3 來獲得一個強而有力的日誌式檔案系統而不需要重新做格式化』。『那是正確的,為了體驗一下 ext3 的好處是不需要去做一種長時間的,冗長乏味的且易於產生錯誤的備份工作及重新格式化的動作』。 |