天天看點

Linux 檔案和目錄的權限設定 - umask(預設權限),chmod(改變權限)1. chmod 改變已有目錄或檔案的權限2. umask 設定使用者建立目錄或檔案時的預設權限

1. chmod 改變已有目錄或檔案的權限

chmod 設定已有目錄或檔案的權限。可以為指定範圍的使用者添加或删除權限。

權限範圍的表示法如下:

  • u:User,即檔案或目錄的擁有者;
  • g:Group,即檔案或目錄的所屬群組;
  • o:Other,除了檔案或目錄擁有者或所屬群組之外,其他使用者皆屬于這個範圍;
  • a:All,即全部的使用者,包含擁有者,所屬群組以及其他使用者;

權限設定如下:

  • r:讀取權限,數字代号為“4”;
  • w:寫入權限,數字代号為“2”;
  • x:執行或切換權限,數字代号為“1”;
  • -:不具任何權限,數字代号為“0”;
  • s:特殊功能說明:變更檔案或目錄的權限。

文法:

chmod [選項] 權限模式 檔案
           

選項:

  • -f

    --quiet

    --silent

    :不顯示錯誤資訊;
  • -R

    --recursive

    :遞歸處理,将指令目錄下的所有檔案及子目錄一并處理;
  • -v

    --verbose

    :顯示指令執行過程;
  • --reference=<參考檔案或目錄>

    :把指定檔案或目錄的所屬群組全部設成和參考檔案或目錄的所屬群組相同;
  • +

    :開啟權限範圍的檔案或目錄的該選項權限設定;
  • -

    :關閉權限範圍的檔案或目錄的該選項權限設定;
  • =

    :指定權限範圍的檔案或目錄的該選項權限設定;

示例:

chmod u+x,g+w file  // 所有者添加可執行權限,同組使用者添加可寫入權限
chmod u=rwx,g=rw,o=r file  
chmod  file  
chmod a+x file  //對檔案的 u,g,o 都設定可執行屬性
           

2. umask 設定使用者建立目錄或檔案時的預設權限

預設情況下的 umask 值是 022。

與 chmod 相反,umask 用來設定限制建立目錄或檔案的權限掩碼,用于指定在新目錄或檔案的預設權限中删除哪些權限。當建立新目錄或檔案時,預設的初始權限由權限掩碼決定。使用者每次登陸系統時都會自動執行 umask 指令,并自動設定權限掩碼來限制新檔案的權限。可以手動執行 umask 指令來改變預設值。

設定掩碼時,檔案和目錄的可執行權限有所差別。檔案基數為 666,目錄為 777,即檔案無法設定可執行位,目錄可設可執行位。是以 033 效果與 022 一樣,假設使用 033 掩碼進行設定,則真實權限應為 633 即

rw- r-x r-x

,但前提規定檔案不生成 x 位,是以檔案的權限最終将以

rw-r--r--

出現。是以建立的檔案預設權限是 644,建立的目錄的預設權限是 755。

文法:

選項:

  • -p

    :輸出的權限掩碼可直接作為指令來執行;
  • -S

    :以符号方式輸出權限掩碼。

示例:

将新檔案和目錄的預設權限就為 642,753:

下面的兩個指令建立相同作用的掩碼,取消組使用者的寫權限,其他使用者的讀、寫和執行權限:

上面的指令執行以後,對于下面建立的新檔案,其檔案主的權限未做任何改變,而組使用者沒有寫權限,其他使用者的所有權限都被取消。

檢視目前權限掩碼:

[root@VM_120_242_centos ~]# umask

[root@VM_120_242_centos ~]# umask -S
u=rwx,g=rx,o=rx
           

umask 一般在

/etc/profile

~/.bash_profile

~/.profile

中設定,由于 profile 的讀取有一定的順序:

/etc/profile

->

~/.profile

->

~/.bash_profile

,是以在

.profile

裡面設定的 umask 會被後面的 profile 覆寫,推薦設定在

~/.bash_profile

[[email protected]_120_242_centos ~]# cat /etc/profile
...
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt  ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 
else
    umask 
fi
...
           

繼續閱讀