當你的屏幕出現了『Permission deny』的時候,不要擔心,『肯定是權限設定錯誤』啦!(以下節選自 鳥哥的 Linux 私房菜 第六章、Linux 的文件權限與目錄配置 2. Linux文件權限概念)
Linux文件屬性在你以root的身份登入Linux之后,下達『 ls -al 』看看,會看到底下的幾個咚咚:
[root@localhost ~]# ls -altotal 64dr-xr-x---. 2 root root 4096 Dec 18 09:28 .dr-xr-xr-x. 22 root root 4096 Nov 14 16:08 ..-rw-------. 1 root root 1098 Nov 3 19:57 anaconda-ks.cfg-rw-------. 1 root root 12288 Dec 18 09:28 .anaconda-ks.cfg.swp-rw-------. 1 root root 1517 Dec 18 10:36 .bash_history-rw-r--r--. 1 root root 18 May 20 2009 .bash_logout-rw-r--r--. 1 root root 176 May 20 2009 .bash_PRofile-rw-r--r--. 1 root root 176 Sep 23 2004 .bashrc-rw-r--r--. 1 root root 100 Sep 23 2004 .cshrc-rw-r--r--. 1 root root 8726 Nov 3 19:57 install.log-rw-r--r--. 1 root root 3190 Nov 3 19:56 install.log.syslog-rw-r--r--. 1 root root 129 Dec 4 2004 .tcshrc[1] [2][3] [4] [5] [6] [7][權限] [連接][擁有者][群組][文件大小][修改日期][文件]
常用于群組、擁有者、各種身份的權限之修改的指令,如下所示:
改變一個文件的群組真是很簡單的,直接以chgrp來改變即可,咦!這個指令就是change group的縮寫嘛!這樣就很好記了吧! ^_^。不過,請記得,要被改變的組名必須要在/etc/group文件內存在才行,否則就會顯示錯誤!
[root@www ~]# chgrp [-R] dirname/filename ...選項與參數:-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件、目錄 都更新成為這個群組之意。常常用在變更某一目錄內所有的文件之情況。范例:[root@www ~]# chgrp users install.log <==改變文件群組[root@www ~]# ls -l-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log[root@www ~]# chgrp testing install.logchgrp: invalid group name `testing' <== 發生錯誤訊息啰~找不到這個群組名~發現了嗎?文件的群組被改成users了,但是要改成testing的時候, 就會發生錯誤~注意喔!改變文件擁有者, chown
如何改變一個文件的擁有者呢?很簡單呀!既然改變群組是change group,那么改變擁有者就是change owner啰!BINGO!那就是chown這個指令的用途,要注意的是, 用戶必須是已經存在系統中的賬號,也就是在/etc/passwd 這個文件中有紀錄的用戶名稱才能改變。
[root@www ~]# chown [-R] 賬號名稱 文件或目錄[root@www ~]# chown [-R] 賬號名稱:組名 文件或目錄選項與參數:-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都變更范例:將install.log的擁有者改為bin這個賬號:[root@www ~]# chown bin install.log[root@www ~]# ls -l-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log范例:將install.log的擁有者與群組改回為root:[root@www ~]# chown root:root install.log[root@www ~]# ls -l-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log改變權限, chmod
文件權限的改變使用的是chmod這個指令,但是,權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:
r:4 w:2 x:1每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:
owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= --- = 0+0+0 = 0所以等一下我們設定權限的變更時,該文件的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:
[root@www ~]# chmod [-R] xyz 文件或目錄選項與參數:xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更
如果要將權限變成『 -rwxr-xr-- 』呢?那么權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下達『 chmod 754 filename』。 另外,在實際的系統運作中最常發生的一個問題就是,常常我們以vi編輯一個shell的文字批處理文件后,他的權限通常是 -rw-rw-r-- 也就是664, 如果要將該文件變成可執行文件,并且不要讓其他人修改此一文件的話, 那么就需要-rwxr-xr-x這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令啰! 另外,如果有些文件你不希望被其他人看到,那么應該將文件的權限設定為例如:『-rwxr-----』,那就下達『chmod 740 filename 』吧!
chmod | u g o a | +(加入) -(除去) =(設定) | r w x | 文件或目錄 |
來實作一下吧!假如我們要『設定』一個文件的權限成為『-rwxr-xr-x』時,基本上就是:
[root@www ~]# chmod u=rwx,go=rx .bashrc# 注意喔!那個 u=rwx,go=rx 是連在一起的,中間并沒有任何空格![root@www ~]# ls -al .bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
那么假如是『 -rwxr-xr-- 』這樣的權限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的文件屬性,而我只想要增加.bashrc這個文件的每個人均可寫入的權限, 那么我就可以使用:
[root@www ~]# ls -al .bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc[root@www ~]# chmod a+w .bashrc[root@www ~]# ls -al .bashrc-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:
[root@www ~]# chmod a-x .bashrc[root@www ~]# ls -al .bashrc-rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限『不會被變動』, 例如上面的例子中,由于僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限啰! 這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程序可以擁有執行的權限, 但你又不知道該文件原本的權限為何,此時,利用『chmod a+x filename』 ,就可以讓該程序擁有執行的權限了。是否很方便?
目錄與文件之權限意義:
現在我們知道了Linux系統內文件的三種身份(擁有者、群組與其他人),知道每種身份都有三種權限(rwx), 已知道能夠使用chown, chgrp, chmod去修改這些權限與屬性,當然,利用ls -l去觀察文件也沒問題。那么,這些文件權限對于一般文件與目錄文件有何不同呢? 有大大的不同啊!
權限對文件的重要性
文件是實際含有數據的地方,包括一般文本文件、數據庫內容文件、二進制可執行文件(binary program)等等。 因此,權限對于文件來說,他的意義是這樣的:
- r (read):可讀取此一文件的實際內容,如讀取文本文件的文字內容等;
- w (write):可以編輯、新增或者是修改該文件的內容(但不含刪除該文件);
- x (execute):該文件具有可以被系統執行的權限。
那個可讀(r)代表讀取文件內容是還好了解,那么可執行(x)呢?這里你就必須要小心啦! 因為在Windows底下一個文件是否具有執行的能力是藉由『 擴展名 』來判斷的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我們的文件是否能被執行,則是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關系的!
至于最后一個w這個權限呢?當你對一個文件具有w權限時,你可以具有寫入/編輯/新增/修改文件的內容的權限, 但并不具備有刪除該文件本身的權限!對于文件的rwx來說, 主要都是針對『文件的內容』而言,與文件檔名的存在與否沒有關系喔!因為文件記錄的是實際的數據嘛!
權限對目錄的重要性
文件是存放實際數據的所在,那么目錄主要是儲存啥玩意啊?目錄主要的內容在記錄文件名列表,文件名與目錄有強烈的關連啦! 所以如果是針對目錄時,那個 r, w, x 對目錄是什么意義呢?
- r (read contents in directory): 表示具有讀取目錄結構列表的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的文件名數據。 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!
- w (modify contents of directory): 這個可寫入的權限對目錄來說,是很了不起的! 因為他表示你具有異動該目錄結構列表的權限,也就是底下這些權限:
總之,目錄的w權限就與該目錄底下的文件名異動有關就對了啦!
- 建立新的文件與目錄;
- 刪除已經存在的文件與目錄(不論該文件的權限為何!)
- 將已存在的文件或目錄進行更名;
- 搬移該目錄內的文件、目錄位置。
- x (access directory): 咦!目錄的執行權限有啥用途啊?目錄只是記錄文件名而已,總不能拿來執行吧?沒錯!目錄不可以被執行,目錄的x代表的是用戶能否進入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當你登入Linux時, 你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是『cd』(change directory)啰!
我們在剛剛提到使用『ls -l』觀察到第一欄那十個字符中,第一個字符為文件的類型。 除了常見的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件類型呢?
權限與命令間的關系:
我們知道權限對於使用者帳號來說是非常重要的,因為他可以限制使用者能不能讀取/創建/刪除/修改文件或目錄!什么命令在什么樣的權限下才能夠運行?
一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:
二、使用者在某個目錄內讀取一個文件的基本權限為何?
三、讓使用者可以修改一個文件的基本權限為何?
四、讓一個使用者可以創建一個文件的基本權限為何?
五、讓使用者進入某目錄并運行該目錄下的某個命令之基本權限為何?
新聞熱點
疑難解答