檔案權限的改變使用的是「chmod」這個指令,但是,權限的設定方法有兩種,分別可以使用「數字」或者是「符號」
來進行權限的變更。
1. 數字類型改變檔案權限
Linux 檔案的基本權限就有九個,分別是「owner、group、others」三種身分各自有自己的「Read、Write、Execute」
權限,先複習一下剛剛上面提到的資料:檔案的權限字元為:「-rwxrwxrwx」,這九個權限是三個三個一組!其中,可以
使用數字來代表各個權限,各權限的分數對照表如下:
字元 | 權限分數 |
r | 4 |
w | 2 |
每種身分(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@study ~]# chmod [-R] xyz 檔案或目錄
選項與參數:
xyz:就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R: 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更。
舉例來說,如果要將 .bashrc 這個檔案所有的權限都設定啟用,那麼就下達:
[root@study ~]# ls -al .bashrc -rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc [root@study ~]# chmod 777 .bashrc [root@study ~]# ls -al .bashrc -rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
如果要將權限變成「-rwxr-xr–」呢?那麼權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754,所以需要下達「chmod 754 filename」。
另外,在實際的系統運作中最常發生的一個問題就是,常以 vim 編輯一個 shell 的文字批次檔後,他的權限通常是
-rw-rw-r– 也就是 664,如果要將該檔案變成可執行檔,並且不要讓其他人修改此一檔案的話, 那麼就需要 -rwxr-xr-x
這樣的權限,此時就得要下達:「chmod 755 test.sh」的指令囉!
另外,如果有些檔案你不希望被其他人看到,那麼應該將檔案的權限設定為例如:「-rwxr—–」,那就下達「chmod 740 filename」。
例如:將剛的 .bashrc 這個檔案的權限修改回 -rw-r–r– 的情況。
答:-rw-r–r– 的分數是 644,所以指令為:chmod 644 .bashrc
2. 符號類型改變檔案權限
還有一種改變權限的方法,從之前的介紹中可以發現,基本上就九種權限分別是(1)user(2)group(3)others 三種身
份,那麼就可以藉由 u、g、o 來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成
r、w、x,也就是可以使用底下的方式來看:
chmod |
u g o a |
+(加入) -(除去) =(設定) |
r w x |
檔案或目錄 |
來實作一下!假如要「設定」一個檔案的權限成為「-rwxr-xr-x」時,基本上就是:
user(u):具有可讀、可寫、可執行的權限。
group 與 others(g、o):具有可讀與執行的權限。
所以就是:
[root@study ~]# chmod u=rwx,go=rx .bashrc
注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元!
[root@study ~]# ls -al .bashrc -rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
那麼假如是「-rwxr-xr–」這樣的權限呢?可以使用「chmod u=rwx,g=rx,o=r filename」來設定。
此外,如果不知道原先的檔案屬性,而只想要增加 .bashrc 這個檔案的每個人均可寫入的權限,那麼就可以使用:
[root@study ~]# ls -al .bashrc -rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc [root@study ~]# chmod a+w .bashrc [root@study ~]# ls -al .bashrc -rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限:
[root@study ~]# chmod a-x .bashrc [root@study ~]# ls -al .bashrc -rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc [root@study ~]# chmod 644 .bashrc # 測試完畢得要改回來喔!
知道 +、-、= 的不同點了嗎? + 與 – 的狀態下,只要是沒有指定到的項目,則該權限「不會被變動」,例如上面的例子
中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變;如果想讓程式可以擁有執行的權限,但又不知道該檔案原本的權限
為何,此時,利用「chmod a+x filename」,就可以讓該程式擁有執行的權限了。
如果想計算一下每個身分的權限數值,也可以嘗試下面的 chmod 計算機,透過實際的操作會讓人更印象深刻!
CHMOD 計算機
下方的圖片是在 FileZilla 中設定檔案權限視窗,現在有沒有更了解它實際運作的流程了呢?
Reference:http://shian420.pixnet.net/blog/post/344938711-%5Blinux%5D-chmod-%E6%AA%94%E6%A1%88%E6%AC%8A%E9%99%90%E5%A4%A7%E7%B5%B1%E6%95%B4!
留言列表