linux中umask命令/函数的用法简介

       umask命令用得相对不多, 而umask函数则用得相对较多。 下面, 我们先来看看umask命令, 它主要用来设置权限屏蔽, 说白了, 就是间接地设置权限。

 

       我们先打开一个linux shell终端, 执行一些命名, 得到如下的结果:

 

 [taoge@localhost learn_c]$ umask
0002
[taoge@localhost learn_c]$ touch a.txt
[taoge@localhost learn_c]$ ls -l
total 0
-rw-rw-r-- 1 taoge taoge 0 May  5 06:57 a.txt
[taoge@localhost learn_c]$ umask 022
[taoge@localhost learn_c]$ umask
0022
[taoge@localhost learn_c]$ touch b.txt
[taoge@localhost learn_c]$ ls -l
total 0
-rw-rw-r-- 1 taoge taoge 0 May  5 06:57 a.txt
-rw-r--r-- 1 taoge taoge 0 May  5 06:58 b.txt
[taoge@localhost learn_c]$ mkdir zzz
[taoge@localhost learn_c]$ ls -l
total 4
-rw-rw-r-- 1 taoge taoge    0 May  5 06:57 a.txt
-rw-r--r-- 1 taoge taoge    0 May  5 06:58 b.txt
drwxr-xr-x 2 taoge taoge 4096 May  5 07:00 zzz
[taoge@localhost learn_c]$ 
 
      我们看到, 在我的系统中, umask的默认值是002(当然, 在你系统中, 很可能就不是酱紫的)。 002是个什么意思呢? 意思是说, 如果创建文件, 那么它的默认权限是664, 如果是创建目录, 那么它的权限是775. 
      好, 我们创建一个文件a.txt, 然后查看一下, 发现该文件的权限果然是664.
      下面, 我们来改一下umask的默认值, 改为022, 并检验一下, 发现确实是修改成功的, 这意味着:创建文件的默认权限是644, 创建目录的默认权限是755, 我们实践一下, 发现果真如此。
     
      由此可见, umask就是为控制默认权限而生的。
 
       还没完, 我们再打开另一个终端, 进行操作, 结果为:
[taoge@localhost learn_c]$ umask
0002
[taoge@localhost learn_c]$ ls -l
total 4
-rw-rw-r-- 1 taoge taoge    0 May  5 06:57 a.txt
-rw-r--r-- 1 taoge taoge    0 May  5 06:58 b.txt
drwxr-xr-x 2 taoge taoge 4096 May  5 07:00 zzz
 
      我们看到, 在另外一个shell终端中, umask的值仍然是002,   可见, 一个shell进程中的umask值仅在当前shell进程中才有效。
 
 
      好, 我们接着看 umask函数 它常用来控制进程创建文件/目录的默认权限, 代码如下:
#include <stdio.h>

int main()
{
	system("touch test0.txt");
	system("mkdir folder0");
	
	umask(022);
	system("touch test1.txt");
	system("mkdir folder1");
	
	umask(066);
	system("touch test2.txt");
	system("mkdir folder2");
	
	system("ls -l");
	
	return 0;
}
      结果为:
 [taoge@localhost learn_c]$ umask 000
[taoge@localhost learn_c]$ gcc test.c 
[taoge@localhost learn_c]$ ./a.out 
total 24
-rwxrwxrwx 1 taoge taoge 4925 May  5 07:43 a.out
drwxrwxrwx 2 taoge taoge 4096 May  5 07:43 folder0
drwxr-xr-x 2 taoge taoge 4096 May  5 07:43 folder1
drwx--x--x 2 taoge taoge 4096 May  5 07:43 folder2
-rw-rw-rw- 1 taoge taoge    0 May  5 07:43 test0.txt
-rw-r--r-- 1 taoge taoge    0 May  5 07:43 test1.txt
-rw------- 1 taoge taoge    0 May  5 07:43 test2.txt
-rwxrw-rw- 1 taoge taoge  279 May  5 07:42 test.c
[taoge@localhost learn_c]$ umask
0000
[taoge@localhost learn_c]$ 
 
     我们知道,  shell是父进程, ./a.out进程是子进程.  下面来分析一下:
     1. 根据test0.txt可知, 父进程可以影响子进程的默认屏蔽字。
     2. 根据test1.txt可知, 子进程可以改变自己的默认屏蔽字。
     3. 根据最后shell进程的屏蔽字为000可知, 子进程不会改变父进程的屏蔽字。 
 
 
     实际上, umask命令与函数的用法是一致的。 那一年, 我第一次看到umask, 还使劲琢磨着这个玩意儿是干啥的, 哈哈。
 
 
 
 
 
 
 
 

 
 
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值