文件權限詳解
一、chmod命令詳解
文件權限和所有權是Unix/Linux文件系統最顯著的特征之一。linux中的每一個文件都與多種權限類型相關聯,在這些權限中主要分類為3種:
用戶(User)是文件的所有者;
用戶組(Group)是多個用戶的集合,系統允許用戶進行某些形式的訪問;
其他用戶(others)是除用戶和用戶組以外的任何用戶。
用命令ls -l(或者ll)可以列出文件的權限:
實例:
amosli@amosli-pc:/$ ls -l drwxr-xr-x 11 root root 4096 6月 17 2013 usr lrwxrwxrwx 1 root root 33 12月 5 23:52 initrd.img -> /boot/initrd.img-3.2.0-57-generic -rw-rw-r-- 1 amosli amosli 1575 12月 26 21:25 bdlogo.jpg prw-rw-r-- 1 amosli amosli 0 12月 20 01:21 scriptfifo
第1列輸出明確了后面的輸出。其中第一個字母的對應關系如下:
- 普通文件
d 目錄
c 字符設備
b 塊設備
l 符號鏈接
s 套接字
p 管道
剩下的每3個字符分為一組,共3組,如下所示:
d rwx r-x r-x
d表示目錄,第一組的3個字符rwx表示對應用戶的所有權限(所有者User),第二組對應用戶組(Group)權限,第三組對應其他用戶(Others)權限。這9個字符(即9個權限).
rwx分別表示read,write,execute,讀權限,寫權限,執行權限。
如何更改文件的權限??這里將用到的是chmod命令
amosli@amosli-pc:~/learn/re$ chmod --help Usage: chmod [OPTION]... MODE[,MODE]... FILE... or: chmod [OPTION]... OCTAL-MODE FILE... or: chmod [OPTION]... --reference=RFILE FILE... Change the mode of each FILE to MODE. -c, --changes like verbose but report only when a change is made --no-preserve-root do not treat `/' specially (the default) --preserve-root fail to operate recursively on `/' -f, --silent, --quiet suppress most error messages -v, --verbose output a diagnostic for every file processed --reference=RFILE use RFILE's mode instead of MODE values -R, --recursive change files and directories recursively --help display this help and exit --version output version information and exit Each MODE is of the form `[ugoa]*([-+=]([rwxXst]*|[ugo]))+'. Report chmod bugs to bug-coreutils@gnu.org GNU coreutils home page: <http://www.gnu.org/software/coreutils/> General help using GNU software: <http://www.gnu.org/gethelp/> For complete documentation, run: info coreutils 'chmod invocation'
參數說明(cfvR):
-c : 若該檔案權限確實已經更改,才顯示其更改動作
-f : 若該檔案權限無法被更改也不要顯示錯誤訊息
-v : 顯示權限變更的詳細資料
-R : 對目前目錄下的所有檔案與子目錄進行相同的權限變更(即以遞回的方式逐個變更), 這個-R 用的還是很多的。
關於MODE:(都是同一種格式)
`[ugoa]*([-+=]([rwxXst]*|[ugo]))+'.
說明:u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
實例:
1.將檔案 a.txt 設為其他人皆可執行 :
amosli@amosli-pc:~/learn/re$ ls -l total 0 -rw-rw-r-- 1 amosli amosli 0 12月 27 00:18 a.txt amosli@amosli-pc:~/learn/re$ chmod o+x a.txt amosli@amosli-pc:~/learn/re$ ls -l total 0 -rwxrw-r-x 1 amosli amosli 0 12月 27 00:18 a.txt
2.將檔案a.txt設為所有人皆不可讀取 :
方法1:
amosli@amosli-pc:~/learn/re$ chmod a-r a.txt amosli@amosli-pc:~/learn/re$ ls -l total 0 --wx-w---x 1 amosli amosli 0 12月 27 00:18 a.txt
方法2:
amosli@amosli-pc:~/learn/re$ chmod ugo-r a.txt amosli@amosli-pc:~/learn/re$ ls -l total 0 --wx-w---x 1 amosli amosli 0 12月 27 00:18 a.txt
反之,若將讀權限賦給所有人,則將ugo-r 和a-r改為ugo+r 、a+r即可。
3.將讀寫執行三種權限賦給所有人
amosli@amosli-pc:~/learn/re$ chmod a+rwx a.txt amosli@amosli-pc:~/learn/re$ ls -l total 0 -rwxrwxrwx 1 amosli amosli 0 12月 27 00:18 a.txt
使用數字來進行權限管理:
r-- = 4;對應的二進制:100
-w-=2;對應的二進制: 010
--x=1; 對應的二進制:001
將對應的值相加即可進行權限管理,如:
rw-=4+2=6;
r-x=4+1=5;
rwx=4+2+1=7;
-wx=2+1=3;
實例:
755就表示rwx r-x r-x
amosli@amosli-pc:~/learn/re$ chmod 755 a.txt amosli@amosli-pc:~/learn/re$ ls -l total 0 -rwxr-xr-x 1 amosli amosli 0 12月 27 00:18 a.txt
其他皆可依照。如:
chmod 777 file1 <==> chmod a=rwx file
chmod 771 file <==> chmod ug=rwx,o=x file
二、更改文件所有權(chown命令詳解)
看一下提示信息:
amosli@amosli-pc:~/learn/re$ chown --help Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE... or: chown [OPTION]... --reference=RFILE FILE... Change the owner and/or group of each FILE to OWNER and/or GROUP. With --reference, change the owner and group of each FILE to those of RFILE. -c, --changes like verbose but report only when a change is made --dereference affect the referent of each symbolic link (this is the default), rather than the symbolic link itself -h, --no-dereference affect each symbolic link instead of any referenced file (useful only on systems that can change the ownership of a symlink) --from=CURRENT_OWNER:CURRENT_GROUP change the owner and/or group of each file only if its current owner and/or group match those specified here. Either may be omitted, in which case a match is not required for the omitted attribute --no-preserve-root do not treat `/' specially (the default) --preserve-root fail to operate recursively on `/' -f, --silent, --quiet suppress most error messages --reference=RFILE use RFILE's owner and group rather than specifying OWNER:GROUP values -R, --recursive operate on files and directories recursively -v, --verbose output a diagnostic for every file processed The following options modify how a hierarchy is traversed when the -R option is also specified. If more than one is specified, only the final one takes effect. -H if a command line argument is a symbolic link to a directory, traverse it -L traverse every symbolic link to a directory encountered -P do not traverse any symbolic links (default) --help display this help and exit --version output version information and exit Owner is unchanged if missing. Group is unchanged if missing, but changed to login group if implied by a `:' following a symbolic OWNER. OWNER and GROUP may be numeric as well as symbolic. Examples: chown root /u Change the owner of /u to "root". chown root:staff /u Likewise, but also change its group to "staff". chown -hR root /u Change the owner of /u and subfiles to "root". Report chown bugs to bug-coreutils@gnu.org GNU coreutils home page: <http://www.gnu.org/software/coreutils/> General help using GNU software: <http://www.gnu.org/gethelp/> For complete documentation, run: info coreutils 'chown invocation'
語法格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE...
參數說明:
必要參數:
-c 若該檔案擁有者確實已經更改,才顯示其更改動作
-f 忽略錯誤信息,若該檔案擁有者無法被更改也不要顯示錯誤訊息
-h 修復符號鏈接,只對於連結(link)進行變更,而非該 link 真正指向的檔案
-R 處理指定目錄以及其子目錄下的所有文件
-v 顯示詳細的處理信息
-deference 作用於符號鏈接的指向,而不是鏈接文件本身
選擇參數:
--reference=<目錄或文件> 把指定的目錄/文件作為參考,把操作的文件/目錄設置成參考文件/目錄相同擁有者和群組
--from=<當前用戶:當前群組> 只有當前用戶和群組跟指定的用戶和群組相同時才進行改變
--help 顯示幫助信息
--version 顯示版本信息
常用格式:
chown user.group filename
實例:
1.將所有者改為root:
amosli@amosli-pc:~/learn/re$ ll #改之前 total 8 drwxrwxr-x 2 amosli amosli 4096 12月 27 00:18 ./ drwxrwxr-x 7 amosli amosli 4096 12月 26 22:32 ../ -rwxr-xr-x 1 amosli amosli 0 12月 27 00:18 a.txt*
amosli@amosli-pc:~/learn/re$ sudo su [sudo] password for amosli: root@amosli-pc:/home/amosli/learn/re# chown root a.txt root@amosli-pc:/home/amosli/learn/re# ll #改之后 total 8 drwxrwxr-x 2 amosli amosli 4096 12月 27 00:18 ./ drwxrwxr-x 7 amosli amosli 4096 12月 26 22:32 ../ -rwxr-xr-x 1 root amosli 0 12月 27 00:18 a.txt*
ll的結果返回七列,分別表示如下含義:
第一欄 [文件屬性] drwxrwxr-x
第二欄 [文件數] 2
第三欄 [擁有者] amosli
第四欄 [所有者群組] amosli
第五欄 [大小] 4096
第六欄 [建檔日期] 12月 27 00:18
第七欄 [檔名] ./
2.將整個目錄下的文件的所有者都改為root
改之前:
root@amosli-pc:/home/amosli/learn# ll total 128 drwxrwxr-x 7 amosli amosli 4096 12月 26 22:32 ./ drwxr-xr-x 69 amosli amosli 4096 12月 26 23:55 ../ ---------- 1 amosli amosli 3 12月 18 22:49 a1 -rw-rw-r-- 1 amosli amosli 3 12月 18 22:49 a2 -rw-rw-r-- 1 amosli amosli 3 12月 18 22:49 a3 -rw-rw-r-- 1 amosli amosli 0 12月 26 00:39 a.mp3
更之后:
root@amosli-pc:/home/amosli/learn# chown root . -R root@amosli-pc:/home/amosli/learn# ll total 128 drwxrwxr-x 7 root amosli 4096 12月 26 22:32 ./ drwxr-xr-x 69 amosli amosli 4096 12月 26 23:55 ../ ---------- 1 root amosli 3 12月 18 22:49 a1 -rw-rw-r-- 1 root amosli 3 12月 18 22:49 a2 -rw-rw-r-- 1 root amosli 3 12月 18 22:49 a3 -rw-rw-r-- 1 root amosli 0 12月 26 00:39 a.mp3
三、chattr命令詳解
使用chattr命令創建不可修改的文件
終端里,chattr命令的提示信息非常少,只給了一個語法格式:
root@amosli-pc:/home/amosli/learn/re# chattr --help Usage: chattr [-RVf] [-+=AacDdeijsSu] [-v version] files...
常用語法格式:
sudo chattr +i a.txt 或者 chattr +i a.txt
實例:
root@amosli-pc:/home/amosli/learn/re# chattr +i a.txt root@amosli-pc:/home/amosli/learn/re# ll total 8 drwxrwxr-x 2 amosli amosli 4096 12月 27 01:02 ./ drwxrwxr-x 7 amosli amosli 4096 12月 26 22:32 ../ -rw-r--r-- 1 root root 0 12月 27 01:02 a.txt root@amosli-pc:/home/amosli/learn/re# rm a.txt rm: cannot remove `a.txt': Operation not permitted
使用chattr命令更改的權限即使是chmod命令也不能更改文件現有權限,如下:
root@amosli-pc:/home/amosli/learn/re# chmod 777 a.txt chmod: changing permissions of `a.txt': Operation not permitted root@amosli-pc:/home/amosli/learn/re# chmod a+rwx a.txt chmod: changing permissions of `a.txt': Operation not permitted
但是如果文件要重新獲取可寫應該怎么辦呢??
如下,chattr -i a.txt即可
root@amosli-pc:/home/amosli/learn/re# chattr -i a.txt root@amosli-pc:/home/amosli/learn/re# ll total 8 drwxrwxr-x 2 amosli amosli 4096 12月 27 01:02 ./ drwxrwxr-x 7 amosli amosli 4096 12月 26 22:32 ../ -rw-r--r-- 1 root root 0 12月 27 01:02 a.txt root@amosli-pc:/home/amosli/learn/re# chmod a+rwx a.txt root@amosli-pc:/home/amosli/learn/re# ll total 8 drwxrwxr-x 2 amosli amosli 4096 12月 27 01:02 ./ drwxrwxr-x 7 amosli amosli 4096 12月 26 22:32 ../ -rwxrwxrwx 1 root root 0 12月 27 01:02 a.txt*
