linux shell 腳本攻略學習12--文件權限詳解,chmod命令詳解,chown命令詳解,chattr命令詳解


文件權限詳解

一、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*

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM