umask 和 新建文件、目錄的默認權限


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的八進制值

默認權限驗證

[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的八進制值

默認權限驗證

[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 模式方式顯示

[ming@centos6 ~]$umask -S
u=r,g=wx,o=w

umask -p 輸出可被調用

[ming@centos6 ~]$umask -p
umask 0345
[ming@centos6 ~]$umask -p >> ~/.bashrc 

設置默認權限的兩種方式

方法1 通過設置 umask的方式

umask 0022

方法2 直接設置默認權限

umask u=r,g=wx,o=w

本文鏈接:https://www.cnblogs.com/shichangming/p/10007697.html


免責聲明!

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



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