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