umask 和 新建檔案、目錄的預設許可權

scm1911發表於2018-11-23

umask (8進位制數值)

  • umask的值決定了使用者建立的檔案和目錄的預設許可權
  • umask的值是和使用者相關的
  • root使用者預設的umask值是 0022
  • 普通使用者的預設的umask的值是 0002
[root@centos6 ~]#umask
0022
[root@centos6 ~]#su - ming
[ming@centos6 ~]$umask
0002

預設許可權 (8進位制數值)

  • 檔案的預設許可權最大是 666
  • 目錄的最大許可權最大是 777

檔案或目錄的預設許可權的計算(原理)

最終的表現為

檔案的預設許可權 + umask = 666 (注意是按位相加)
目錄的預設許可權 + umask = 777 (注意是按位相加)

核心計算方法

  • 對於檔案

示例1 計算預設許可權

666        # <-- 最大許可權的八進位制數值
145        # <-- umask 的八進位制數值

轉換為二進位制數值
110 110 110 # <-- 最大許可權666的二進位制值
001 100 101 # <-- umask 145 的二進位制值,0 表示不關心;1 表示從最大許可權中要去掉對應的許可權(1變成0,0不變)
110 010 010 # <-- 計算的最終許可權default的二進位制值
6   2   2   # <-- 計算的最終許可權default的八進位制值

示例1 預設許可權驗證

[ming@centos6 ~]$umask 145
[ming@centos6 ~]$touch testfile
[ming@centos6 ~]$ll testfile 
-rw--w--w-. 1 ming ming 0 Nov 22 19:30 testfile
[ming@centos6 ~]$stat testfile 
  File: `testfile'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 524419      Links: 1
Access: (0622/-rw--w--w-)  Uid: (  500/    ming)   Gid: (  500/    ming)
Access: 2018-11-22 19:30:24.580931076 +0800
Modify: 2018-11-22 19:30:24.580931076 +0800
Change: 2018-11-22 19:30:24.580931076 +0800
[ming@centos6 ~]$

示例2 計算預設許可權

666        # <-- 最大許可權的八進位制數值
257        # <-- umask 的八進位制數值

110 110 110  # <-- 最大許可權666的二進位制值
010 101 111  # <-- umask 257 的二進位制值,0 表示不關心;1 表示從最大許可權中要去掉對應的許可權(1變成0,0不變)
100 010 000  # <-- 計算的最終許可權default的二進位制值
4   2   0    # <-- 計算的最終許可權default的八進位制值

示例2 預設許可權驗證

[ming@centos6 ~]$umask 257
[ming@centos6 ~]$touch f5
[ming@centos6 ~]$stat f5
  File: `f5'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 524420      Links: 1
Access: (0420/-r---w----)  Uid: (  500/    ming)   Gid: (  500/    ming)
Access: 2018-11-22 19:36:06.052894381 +0800
Modify: 2018-11-22 19:36:06.052894381 +0800
Change: 2018-11-22 19:36:06.052894381 +0800
[ming@centos6 ~]$ll f5
-r---w----. 1 ming ming 0 Nov 22 19:36 f5
[ming@centos6 ~]$
  • 對於目錄

計算預設許可權

777        # <-- 最大許可權777的八進位制值
345        # <-- umask 的八進位制值

轉換為二進位制數值
111 111 111 # <-- 最大許可權777的二進位制值
011 100 101 # <-- umask 345 的二進位制值,0 表示不關心;1 表示從最大許可權中要去掉對應的許可權(1變成0,0不變)
100 011 010 # <-- 計算的最終許可權default的二進位制值
4   3   2   # <-- 計算的最終許可權default的八進位制值

預設許可權驗證

[ming@centos6 ~]$umask 345
[ming@centos6 ~]$umask
0345
[ming@centos6 ~]$mkdir test_dir1
[ming@centos6 ~]$ls -ld test_dir1/
dr---wx-w-. 2 ming ming 4096 Nov 22 19:42 test_dir1/
[ming@centos6 ~]$stat test_dir1/  
  File: `test_dir1/'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d      Inode: 524421      Links: 2
Access: (0432/dr---wx-w-)  Uid: (  500/    ming)   Gid: (  500/    ming)
Access: 2018-11-22 19:42:45.437920151 +0800
Modify: 2018-11-22 19:42:45.437920151 +0800
Change: 2018-11-22 19:42:45.437920151 +0800
[ming@centos6 ~]$

簡單的計算方法

  • 對目錄
default=777-umask   (注意是按位相減)
  • 對檔案
default=666-umask   (注意是按位相減)
觀察結果
有偶數:最終結果就是 default
有奇數:最結結果加 1 就是 default

配置 umask 值

上面通過 umask 命令設定 umask 的值是暫時的,使用者重新登陸後就會還原為系統的預設值

我們可以通過配置檔案的方式來實現永久生效

  • 全域性設定:/etc/bashrc
  • 使用者設定:~/.bashrc

相關命令介紹

  • umask -S 模式方式顯示
  • umask -p 輸出可被呼叫
[ming@centos6 ~]$umask -S
u=r,g=wx,o=w
[ming@centos6 ~]$umask -p
umask 0345
[ming@centos6 ~]$umask -p >> ~/.bashrc 

設定預設許可權的兩中方式

  • 方法1 通過設定 umask的方式
umask 0022
  • 方法1 直接設定預設許可權
umask u=r,g=wx,o=w

本文連結:https://www.cnblogs.com/shichangming/p/10007697.html

相關文章