标签:
在Unix系统中,所有文件类型都有访问权限。文件类型分为:普通文件(regular file),目录文件(directory file),块特殊文件(block special file),字符特殊文件(character special file),FIFO,套接字(socket),符号链接(symbolic link)。下面分别对它们进行简单的介绍:
这种文件包含了某种形式的数据,至于是文本还是二进制,Unix内核并不关心。对普通文件内容的解释由处理该文件的应用程序进行。
该文件包含了其他文件的名字以及指向其他文件的指针。对一个目录文件具有读权限的任意进程意味着可以读该目录的内容,但是只有内核可以直接写目录文件。
这种文件提供对设备(如磁盘)带缓冲的访问,每次访问以固定长度为单位进行。
这种类型文件提供对设备不带缓冲的访问,每次访问长度可变。系统中的所有设备要么是字符特殊文件,要么是块特殊文件。
用于进程间通信,有时也称为命名管道。
用于进程间网络通信,也可以用于在一台宿主机上进程之间的非网络通信。
这种文件指向另一个文件。
宏 | 文件类型 |
S_ISREG() | 普通文件 |
S_ISDIR() |
目录文件 |
S_ISCHR() |
字符特殊文件 |
S_ISBLK() |
块特殊文件 |
S_ISFIFO() |
管道或FIFO |
S_ISLNK() |
符号链接 |
S_ISSOCK() |
套接字 |
stat函数通常用于查看文件的信息结构,stat结构体一共有13个成员,如下面代码所示:
zzw@zzw-ThinkPad-Edge-E430c:~$ stat wifi.sh 文件:"wifi.sh" 大小:70 块:8 IO 块:4096 普通文件 设备:80ah/2058d Inode:922048 硬链接:1 权限:(0755/-rwxr-xr-x) Uid:( 1000/ zzw) Gid:( 1000/ zzw) 最近访问:2015-08-01 13:32:55.585847606 +0800 最近更改:2015-07-30 21:33:20.000000000 +0800 最近改动:2015-08-01 13:32:33.017846764 +0800
每个文件有9个访问权限位,可将它们分为3类:
S_IRUSR 用户读
S_IWUSR 用户写
S_IXUSR 用户执行
S_IRGRP 组读
S_WGRP 组写
S_XGRP 组执行
S_IROTH 其他读
S_IWOTH 其他写
S_IXOTH 其他执行
umask函数为每一个进程设置文件模式创建屏蔽字,并返回之前的值。
#include<sys/stat.h>
mode_t umask(mode_t cmask);
Unix系统的多数用户从不处理umask值。通常在登陆时,由shell的启动文件设置一次,然后,再不改变。尽管如此,如果我们在创建文件时,要保证制定权限位已经激活,那么必须显示修改umask。
可以通过设置umask值来控制我们所创建文件的默认权限。该值为八进制数,一位代表要屏蔽的权限,如下所示:
0400 用户读
0200 用户写
0100 用户执行
0040 组读
0020 组写
0010 组执行
0004 其他读
0002 其他写
0001 其他执行
默认情况下,shell进程的umask值为002,即其他没有执行的权限。
可以使用umask -S来打印权限。也可以通过例如umask 027来设置其值为027。
标签:
原文地址:http://my.oschina.net/zzw922cn/blog/486466