天天看點

umask(程序的檔案權限掩碼)

umask(程序的檔案權限掩碼) 講解

1 umask指令講解

  • umask概述:登入系統之後在目前登入shel程序l中,建立一個檔案總是有一個預設權限的,預設權限的由來就是umask幹的事情,umask設定了使用者建立檔案的預設權限,它與chmod的效果剛好相反,umask設定的是權限“補碼”,而chmod設定的是檔案權限碼
    1. 針對目錄檔案來說x權限代表可以進入該目錄,是以說目錄檔案建立時是777和檔案掩碼運算
    2. 針對一般的檔案x權限代表該檔案可以執行,風險太高,一般初始指派是采用666和檔案掩碼運算
  • 檢視該使用者目前系統的檔案權限掩碼的指令:
    1. /*0022是系統目前預設的檔案權限碼,進行分析
      第一個0代表suid 丢棄的權限;
      第二個0代表本檔案/目錄擁有者什麼權限都沒丢棄(如果是檔案,x權限除外);
      第三個2代表本檔案/目錄的使用者組丢棄了w權限(如果是檔案那麼它的x權限也丢棄);
      第四個2代表本檔案/目錄的其他使用者能使用的權限隻有有r和x(檔案隻丢棄x)
      綜合上面:
      		 如果你新建立一個檔案,那麼它的權限是:-rw--r--r-- 即是:644
      		 計算過程:666 & (~022) = 644
               如果你新建立一個目錄,那麼它的權限是:drwxr-xr-x 即是:755
               計算過程  777 & (~022) = 755
      */
        
                 
    2. /*
      umask nnn
      設定系統目前預設的檔案權限掩碼為nnn
      nnn取值範圍:000~777(8進制)
      使用者退出之後,檔案權限掩碼會傳回預設值。如果要永久生效的話,必須在相應的配置檔案(/etc/login.defs)中修改
      */
                 
  • 如何計算一個檔案的權限值了的:
    1. /*
      mode:設定的檔案權限
      cmask:檔案權限掩碼
      檔案最終的權限碼:mode & (~cmask)
      也可以了解為建立檔案時去掉檔案權限碼對應的權限位
      4->r
      2->w
      1->x
      */
                 
  • umask設定注意:
    1. umask 指令允許你設定檔案建立時的預設模式,對應每一類使用者(檔案屬主、同組使用者、其他使用者)存在一個相應的umask值中的數字。對于檔案來說,這一數字的最 大值分别是6。系統不允許你在建立一個文本檔案時就賦予它執行權限,必須在建立後用chmod指令增加這一權限。目錄則允許設定執行權限,這樣針對目錄來說,umask中各個數字最大可以到7

2 umask函數講解

  • /********************
    函數功能:為目前程序設定檔案權限掩碼,傳回以前的檔案權限掩碼
    ********************/
    #include <sys/stat.h>
    mode_t umask(mode_t cmask);
    /*cmask是由下表列出的9個常量中的若幹個按位“或”構成的
    S_IRUSR       使用者讀
    S_IWUSR      使用者寫
    S_IXUSR       使用者執行
    S_IRGRP       組讀
    S_IWGRP      組寫
    S_IXGRP       組執行
    S_IROTH       其他讀
    S_IWOTH      其他寫
    S_IXOTH       其他執行
    */
               
  • 在Linux中一個檔案的權限分為3組9個權限 分别為上面列出的9個,組間的順序為所有者,所屬組,其他人。例如:

    ls -l test

    -rw-rw-rw- 1 shmily shmily 0 5月 6 17:16 test

    表示test檔案的權限為:所有者可讀可寫,所屬組可讀可寫,其他人可讀可寫 (r代表可讀 w代表可寫 x代表可執行 -代表未設定)

    可用三位8進制數表示 則test的權限為666

  • umask的主要作用是在建立檔案時設定或者屏蔽掉檔案的一些權限

    在建立一個檔案時要指明該檔案的權限,open函數的最後一個參數mode并不是要設定的權限,它需要執行以下操作

    mode & (~cmask)得出的結構才是最終檔案的權限

繼續閱讀