網站首頁 編程語言 正文
umask umask用途
umask令新建文件和目錄擁有默認權限。
可以看到root創建的目錄是755,文件是644
[root@zaishu zaishu]# touch test.txt [root@zaishu zaishu]# mkdir test [root@zaishu zaishu]# ls -l total 0 drwxr-xr-x 2 root root 6 Nov 25 16:29 test -rw-r--r-- 1 root root 0 Nov 25 16:28 test.txt
普通用戶
可以看到普通用戶創建的目錄是775,文件是664
[mysql@zaishu ~]$ touch test.txt [mysql@zaishu ~]$ mkdir test [mysql@zaishu ~]$ ls -l total 0 drwxrwxr-x 2 mysql mysql 6 Nov 25 16:30 test -rw-rw-r-- 1 mysql mysql 0 Nov 25 16:30 test.txt
這些默認的權限值是通過umask設置運算得到。
原理
Linux 它是通過使用 umask 默認權限來給所有新建的文件和目錄賦予初始權限的。那么,我們如何得知 umask 默認權限的值呢?直接通過 umask 命令即可:
1. umask值
[root@zaishu ~]# umask 0022 [mysql@zaishu ~]$ umask 0002
#root用戶默認是0022,普通用戶默認是 0002
umask 默認權限確實由 4 個八進制數組成,第 1 個數代表的是文件所具有的特殊權限(SetUID、SetGID、Sticky BIT)先忽略。后 3 位 “022” 對應為 ----w–w-。
2. 文件目錄權限最大值
Linux 系統中,文件和目錄的最大默認權限是不一樣:
文件來講,可擁有的最大默認權限是 666,即 rw-rw-rw-。x是文件最大權限,新建文件的時候不會給與,只能通過用戶手工賦予。
目錄來講,擁有的最大默認權限是 777,即 rwxrwxrwx。
3. 常規計算
文件和目錄的初始權限,通過計算得到:
文件(或目錄)的初始權限 = 文件(或目錄)的最大默認權限 - umask權限
[mysql@zaishu ~]$ umask 0002 [mysql@zaishu ~]$ mkdir test [mysql@zaishu ~]$ ll -d test drwxrwxr-x 2 mysql mysql 6 Nov 26 10:50 test // 目錄的默認權限最大可以是 777,777-002 =775 [mysql@zaishu ~]$ touch h.txt [mysql@zaishu ~]$ ll h.txt -rw-rw-r-- 1 mysql mysql 0 Nov 26 10:52 h.txt //文件最大權限 666, 666-002(普通用戶) 666-002 =664 [root@zaishu ~]# touch h2 [root@zaishu ~]# ls -l h2 -rw-r--r-- 1 root root 0 Nov 26 10:53 h2 //文件最大權限 666, 666-002(root) 666-022 =644
4. 嚴謹計算
在計算文件或目錄的初始權限時,直接使用最大默認權限和 umask 權限的數字形式做減法,是不嚴謹的。例如,若 umask 默認權限的值為 033,按照數字形式計算文件的初始權限,666-033=633,但我們按照字母的形式計算會得到 (rw-rw-rw-) - (----wx-wx) = (rw-r–r--),換算成數字形式是 644。
這里的減法,其實是“遮蓋”的意思,也就是說,最大默認權限中和 umask 權限公共的部分,通過減法運算會被遮蓋掉,最終剩下的“最大默認權限”,才是最終賦予文件或目錄的初始權限。
umask值修改
1. 臨時生效(當前會話)
umask 權限值可直接修改:
[root@localhost ~]# umask 002 [root@localhost ~]# umask 0002 [root@localhost ~]# umask 033 [root@localhost ~]# umask 0033
這種方式修改的 umask 只是臨時有效,一旦重啟或重新登陸系統,就會失效。
2. 永久生效
讓修改永久生效,則需要修改對應的環境變量配置文件 /etc/profile。
[root@zaishu~]# vim /etc/profile ...省略部分內容... if [ $UID -gt 199]&&[ "'id -gn'" = "'id -un'" ]; then umask 002 #如果UID大于199(普通用戶),則使用此umask值 else umask 022 #如果UID小于199(超級用戶),則使用此umask值 fi
總結
原文鏈接:https://blog.51cto.com/zaishu/4713577
相關推薦
- 2022-05-01 Windows系統安裝redis數據庫_Redis
- 2022-12-29 c#?DataView.ToTable()方法?去除表的重復項問題_C#教程
- 2022-12-15 Python?OpenCV中cv2.minAreaRect實例解析_python
- 2022-11-30 React?Native:react-native-code-push報錯的解決_React
- 2022-07-14 python如何獲取當前系統的日期_python
- 2022-08-02 C#?winform跨線程操作控件的實現_C#教程
- 2022-11-12 C語言數據結構之單鏈表的查找和建立_C 語言
- 2022-10-13 windows?server設置FTP域用戶隔離的方法_FTP服務器
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支