Linux文件属性
# Linux文件属性
在 Linux 系统中,所有的资源都被视为文件。文件包括普通文件、目录文件、设备文件、符号链接文件等。在 Linux 中,每个文件都有一组权限,决定了该文件能被哪些用户读、写和执行。
# 概述
Linux的大多数资源都以文件的形式存在
普通文件:以字节为单位进行访问
管道:有名管道、无名管道
目录:也称为目录文件
设备:字符特殊文件、块特殊文件
符号链接:到达另一个文件的路径
套接字:在不同机器间通信
# 文件模式
文件的模式是一个16bit
位的域,一般由八进制数来表示
ls -l /bin/cat
-rwxr-xr-x 1 root root 35064 1月 18 2018 /bin/cat
1
2
2
**** (1~4bit) | *** (5~7bit) | *********(8~16bit) |
---|---|---|
文件类型 | 修饰位 | 访问位(八进制表示) |
管道/目录文件/普通文件等 | 9bit分成3组(3个八进制数),分别表示: 1.文件的属主对文件权限、 2.文件属主同组的其他成员的权限 3.除上述两种所有其他用户对文件的权限 |
上面的例子分析如下:
最左侧是个-
,表示文件类型是普通文件。接下来rwx
,这三位分别表示读、写、执行,即文件的属主对它的权限是读、写、执行。再下面3位r-x
,表示文件属主同组的其他成员有读和执行的权限,但是没有写权限。最后3位r-x
表示其他用户对该文件有读和执行权限,没有写权限。
# 访问位控制
位掩码umask:设置新创建的文件或目录应关闭的权限位的掩码
umask系统调用
#include <sys/stat.h> mode_t umask(mode_t newmask)
1
2
返回原来的mask值。
# 示例代码
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
mode_t newmask = 0222, oldmask;
system("touch before");
oldmask = umask(newmask);
printf("old mask is %#o\n", oldmask);
printf("new mask is %#o\n", newmask);
system("touch after");
exit(EXIT_SUCCESS);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 分析:
定义变量
newmask=0222
,0222是一个8进制数。system("touch before")
使用系统的命令touch,用默认的权限生成一个文件before。默认权限644,文件的属主有读写权限,其他用户只有读权限。oldmask = umask(newmask);
改变当前文件的掩码,使用0222关闭所有用户的写权限,默认的644就变成了444。system("touch after");
使用444的权限生成文件after,此时after文件对于任何用户都是只读权限。
# 执行结果
$ ./umask
old mask is 022
new mask is 0222
$ ls -l
总用量 12
-r--r--r-- 1 wx wx 0 2月 16 20:44 after
-rw-r--r-- 1 wx wx 0 2月 16 20:44 before
-rwxrwxrwx 1 wx wx 8432 2月 16 20:42 umask
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
编辑 (opens new window)
上次更新: 2023/02/19, 10:48:02
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05