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函数,
它常用来控制进程创建文件/目录的默认权限, 代码如下:
结果为:
[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, 还使劲琢磨着这个玩意儿是干啥的, 哈哈。
我们先打开一个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, 还使劲琢磨着这个玩意儿是干啥的, 哈哈。
相关文章推荐
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- cmake在linux下安装、命令与用法简介<转>
- Linux服务器开发之:chmod()函数,chmod命令,以及文件屏蔽umask命令,程序修改umask,详细介绍+案例演示
- unprotoize命令_Linux unprotoize 命令用法详解:删除C语言源代码文件中的函数原型
- linux umask命令参数及用法详解
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- unlink命令_Linux unlink 命令用法详解:系统调用函数unlink去删除指定的文件
- [应用] 【整理】linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- Linux中控制文件权限修改的chgrp和umask命令用法
- umask命令_Linux umask 命令用法详解:用来设置限制新建文件权限的掩码
- Linux下umask命令的用法
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- 【整理】linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- linux常用命令用法简介
- readonly命令_Linux readonly 命令用法详解:定义只读shell变量或函数
- linux unset命令参数及用法详解--linux删除自定义变量或函数
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- unset命令_Linux unset 命令用法详解:删除指定的shell变量或函数
- linux crontab命令参数及用法详解--linux自动化定时任务cron