您的位置:首页 > 运维架构 > Linux

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

2015-05-05 22:27 579 查看
       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, 还使劲琢磨着这个玩意儿是干啥的, 哈哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: