1. 程式人生 > >文件和目錄權限chmod 更改所有者和所屬組chown,umask,lsattr/chattr

文件和目錄權限chmod 更改所有者和所屬組chown,umask,lsattr/chattr

all 開啟 能夠 但是 信息 umask 文件格式 文件和子目錄 swd

在我們用ls -l這個命令的時候,會出現文件的詳細信息,其中第一列的第一位表示文件的類型外,後面的九位就表示文件的權限,文件的權限和文件的所屬主和所屬組是有關系的

他主要分三個權限為,一共九位,分三段。rwxr-xr-x。其中的含義是r:可讀、w:可寫、x:可執行,如果沒有權限,用 - 表示

第一段的三位是所屬主的權限,第二段的三位是所屬組的權限,第三段的三位是其他人的權限。
其中第一段的三位為rwx,含義就是所屬主對這個文件有可讀,可寫,可執行的權限,而第二和第三段的權限為r-x,這就說明所屬組和其他人的權限只有可讀和可執行。
權限也可以用三位數字表示,其中r=4、w=2、x=1,除去第一位的字母(文件類型),剩下的九個字母也按照三個為一組去組合,每一個權限為三個字母對應的數字之和。

對應上面的例子,所屬主的權限數字為4+2+1=7,那麽所屬主的對應數字是7,一次類推,所屬組和其他人的權限數字為4+1=5,那麽所屬組合其他人的權限是5。那麽上面文件的權限就是
rwxr-xr-x=755。

如果我們要改變權限,我們要用到一個命令chmod(change mode的縮寫)。
-rw-r--r--. 1 root root 887 1月 7 14:20 2.txt
drwxr-xr-x. 2 root root 6 1月 6 09:01 aming
-rw-------. 1 root root 2289 12月 17 21:56 anaconda-ks.cfg.1
我們要改變2.txt的權限,如果用字母表示的話,應該是rwx------,數字表示為700,那麽我們就需要輸入chmod這個命令了 格式為chmod 【權限數字】 【文件名+文件格式】

[root@localhost ~]# chmod 700 2.txt
[root@localhost ~]# ll
總用量 8
-rwx------. 1 root root 887 1月 7 14:20 2.txt
drwxr-xr-x. 2 root root 6 1月 6 09:01 aming
-rw-------. 1 root root 2289 12月 17 21:56 anaconda-ks.cfg.1
這樣2.txt的權限就已經改變成功了。

如果我們想改變目錄下的子目錄和子文件,也可以用chmod這個命令,但是後面要加-R這個參數,如果不加,則只能改變文件的權限,目錄下的子文件和目錄則不能更改

[root@localhost tmp]# ll
drwxr-xr-x. 2 root root 19 1月 7 14:55 aming2

[root@localhost tmp]# cd aming2
[root@localhost aming2]# ll
總用量 4
-rwxr-xr-x. 1 root root 887 1月 7 14:55 1.txt

這是初始的情況,目錄權限為755,進入到目錄下查看文件1.txt,權限也是755,。然後我們將權限為777。
[root@localhost tmp]# ll
drwxrwxrwx. 2 root root 19 1月 7 14:55 aming2

[root@localhost tmp]# ll aming2
-rwxr-xr-x. 1 root root 887 1月 7 14:55 1.txt
我們可以發現,雖然目錄的權限已經改為777,但是目錄下的子文件權限依然沒有改變,這一因為沒有加參數-R,這個參數是批量的將目錄下的子目錄和文件全部改成與目錄一致的權限。

[root@localhost tmp]# ll
drwxrwxrwx. 2 root root 19 1月 7 14:55 aming2

[root@localhost tmp]# ll aming2
-rwxrwxrwx. 1 root root 887 1月 7 14:55 1.txt
這樣就全部改為777權限了。

chmod還有這樣一種用法,就直接用權限相對應的字母去更改,比如我們現在要將aming2的權限改為rwxr-xr--,我們可以這樣改
[root@localhost tmp]# chmod u=rwx,g=rx,o=r aming2
其中u代表所屬主,g代表所屬組,o代表其他人。每個組之間用逗號隔開。
[root@localhost tmp]# ll
drwxr-xr--. 2 root root 19 1月 7 14:55 aming2
這也是一種方法,這種方法很直觀,但是比較繁瑣,沒有數字法高效。

還有一種方法,就是chmod a+ 目錄名,這裏a代表all(全部)
比如
[root@localhost tmp]# chmod a+w aming2
[root@localhost tmp]# ll
drwxrwxrw-. 2 root root 19 1月 7 14:55 aming2
這是講所有人的權限都加上w(可寫)權限,我們也可以輸入a- 講所有人 的權限全部減去某個權限,也可以具體到u+、u-、g+、g-、o+、o-。

還有一種情況是在權限位後面有一個點。例如下面的文件
-rw-r--r--. 1 root root 887 1月 7 13:36 1.txt
drwxr-xr-x. 4 root root 24 12月 17 21:42 aming
drwxr-xr-x. 5 root root 42 12月 17 21:02 aming1
drwxr-xr-x. 5 root root 42 1月 7 13:39 aminglinux
最後一位都有一個點,這個點表示文件受制於selinux,如果selinux(安全加強工具)開啟了,那麽你創建的文件或者目錄最後一位就會有一個點。

chown:更改文件的所有者
首先我們找出需要更改所有者的文件
[root@localhost ~]# ll /tmp
-rw-------. 1 root root 0 1月 7 15:35 yum.log

然後輸入命令
[root@localhost ~]# chown aming /tmp/yum.log
然後再查看
[root@localhost ~]# ll /tmp
-rw-------. 1 aming root 0 1月 7 15:35 yum.log
我們可以看到相同的文件大是所有者發生了變化。
chown也可以改變所屬組,具體用法是chown (所屬主):(所屬組) 文件的全路徑。註意的是主和組之間要用“:”分割。
chown後面加-R的話也可以改變目錄下文件的所屬情況。
比如:
[root@localhost tmp]# chown -R :aming /tmp/aming2/1.txt
[root@localhost aming2]# ll
-rwxrwxrwx. 1 root aming 887 1月 7 14:55 1.txt
這樣我們就將1.txt的所屬組改為aming了

chgrp:(change group)改變所屬組
比如說我們現在要將tmp下的yum.log的所屬組從root改為aming1,我們需要這樣改

[root@localhost ~]# chgrp aming /tmp/yum.log
然後查看
[root@localhost tmp]# ll
-rw-------. 1 aming aming 0 1月 7 15:35 yum.log
這樣我們也將yum.log的所屬組改變成功了。

隱藏權限命令:
chattr:給文件增加隱藏屬性。常用參數+i、+a。
加參數i,你就無法對這個文件做任何操作,包括寫入,刪除,重命名,移動文件,更改文件的創建時間,就算你把它拷貝到其他目錄後更改後,也無法覆蓋 原來的文件。
chattr +i 1.txt
lsattr:查看文件的隱藏屬性
[root@localhost ~]# lsattr 1.txt
----i----------- 1.txt
則輸入chattr -i
[root@localhost aming]# cp 1.txt /root
cp:是否覆蓋"/root/1.txt"? y
cp: 無法創建普通文件"/root/1.txt": 權限不夠

[root@localhost ~]# mv 1.txt /tmp/aming1
mv: 無法將"1.txt" 移動至"/tmp/aming1/1.txt": 不允許的操作

[root@localhost ~]# rm -f 1.txt
rm: 無法刪除"1.txt": 不允許的操作

[root@localhost ~]# mv 1.txt 8.txt
mv: 無法將"1.txt" 移動至"8.txt": 不允許的操作

加參數a,只能在文件的末尾追加,不能編輯文件,不能刪除,不能重命名,但是可以改變文件的創建時間。
[root@localhost ~]# chattr +a 1.txt
[root@localhost ~]# mv 1.txt 8.txt
mv: 無法將"1.txt" 移動至"8.txt": 不允許的操作
[root@localhost ~]# rm -f 1.txt
rm: 無法刪除"1.txt": 不允許的操作
我們先查詢一下1.txt這個文件
[root@localhost ~]# ll
總用量 8
-rw-rw-r--. 1 root root 0 1月 7 21:10 1.txt
然後我們touch 1.txt,然後再查詢
總用量 8
-rw-rw-r--. 1 root root 0 1月 7 21:45 1.txt
這時我們發現參數+a可以改變創建時間。-a可以去掉權限。

給目錄加上隱藏權限和給文件加隱藏目錄是一樣的,同樣是+i,效果也是一樣的,不能刪除,不能重命名,不能創建子文件和子目錄。但是可以在已經創建好的文件中追加和編輯內容。
[root@localhost ~]# chattr +i 111
[root@localhost ~]# rm -r 111
rm:是否進入目錄"111"?
[root@localhost ~]# rm -r 111
rm:是否進入目錄"111"? y
rm:是否刪除目錄 "111/222"?y
rm: 無法刪除"111/222": 權限不夠(無法刪除)
[root@localhost ~]# mv 111 1212
mv: 無法將"111" 移動至"1212": 不允許的操作(無法重命名)
[root@localhost ~]# touch 111/12.txt
touch: 無法創建"111/12.txt": 權限不夠(無法創建子目錄)
[root@localhost ~]# head -n2 /etc/passwd >> 111/12.txt
[root@localhost ~]# cat 111/12.txt
sdjflkjsadlkfjs;adlkjf;sakd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin(追加的內容)

如果我們+a權限,是可以在這個目錄下創建子文件的,因為這個操作視同於追加操作,也可以向裏面的文件追加內容。但是不能夠刪除,重命名。
[root@localhost ~]# rm -r 111
rm:是否進入目錄"111"?
[root@localhost ~]# rm -r 111
rm:是否進入目錄"111"? y
rm:是否刪除目錄 "111/222"?
rm:是否刪除普通文件 "111/12.txt"?y
rm: 無法刪除"111/12.txt": 不允許的操作
rm:是否刪除普通空文件 "111/.12.txt.swp"?n
rm:是否刪除普通空文件 "111/.12.txt.swx"?^[[A
rm:是否刪除普通文件 "111/12_txt.swp"?y
rm: 無法刪除"111/12_txt.swp": 不允許的操作
rm:是否刪除普通空文件 "111/4913"?y
rm: 無法刪除"111/4913": 不允許的操作
rm:是否刪除普通空文件 "111/12.tx~"?y
rm: 無法刪除"111/12.tx~": 不允許的操作(無法刪除)

[root@localhost ~]# mv 111 222
mv: 無法將"111" 移動至"222": 不允許的操作(無法重命名)

[root@localhost ~]# touch 111/12.txt
[root@localhost ~]# vi 111/12.txt
[root@localhost ~]# head -n2 /etc/passwd >> 111/12.txt
[root@localhost ~]# cat 111/12.txt
sdjflkjsadlkfjs;adlkjf;sakd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin(可以在裏面創建文件,向文件裏追加內容)

lsattr -R可以查看有隱藏目錄下的全部文件和目錄,如果不加,只能看到一層。

[root@localhost ~]# lsattr 111
---------------- 111/222
---------------- 111/12.txt
---------------- 111/12_txt.swp
---------------- 111/4913
---------------- 111/12.tx~(不加參數)

[root@localhost ~]# lsattr -R 111
---------------- 111/222

111/222:

---------------- 111/12.txt
---------------- 111/12_txt.swp
---------------- 111/4913
---------------- 111/12.tx~(加了參數)

lsattr -a查看全部文件,包括隱藏文件。
[root@localhost ~]# lsattr /root
---------------- /root/anaconda-ks.cfg.1
---------------- /root/aming
---------------- /root/2.txt
---------------- /root/aming2
-----a---------- /root/1.txt
---------------- /root/1.txt~
----i----------- /root/111
---------------- /root/12.txt(不加參數a)

[root@localhost ~]# lsattr -a /root
---------------- /root/.
---------------- /root/..
---------------- /root/.bash_logout
---------------- /root/.bash_profile
---------------- /root/.bashrc
---------------- /root/.cshrc
---------------- /root/.tcshrc
---------------- /root/.bash_history
---------------- /root/.ssh
---------------- /root/anaconda-ks.cfg.1
---------------- /root/.lesshst
---------------- /root/aming
---------------- /root/2.txt
---------------- /root/aming2
-----a---------- /root/1.txt
---------------- /root/1.txt~
----i----------- /root/111
---------------- /root/12.txt(加參數a)*文件名前面帶點的為隱藏文件。

文件和目錄權限chmod 更改所有者和所屬組chown,umask,lsattr/chattr