linux-文件和目录属性

引言

本章描述文件系统的其他特征和文件的属性,以及修改这些属性的函数。

文件类型

UNIX系统文件类型:
-:普通文件
d: 目录
b: 块设备
c: 字符设备
l: 链接文件
p: 管道
s: 套接字

获取文件信息

stat、fstat、fstatat、lstat
这几个函数都是获取文件相关的信息。
这些函数不常用到,知道作用即可。用到时查询函数原型。

文件权限

  1. 访问权限:包括所属用户、组和其他用户的权限,每个对应读、写、执行。
    例如,-rwxr–r--,即所属用户对该文件具有读、写、执行权限。所属组具有读权限。其他用户具有读权限。
  2. 所属用户和所属组
    例如,
$ls -l /usr/bin/passwd
$-rwsr-xr-x 1 root root 54256 5月  17  2017 /usr/bin/passwd

其中,第一个root为有效所属用户。第二个root为有效所属组
3. 实际用户和有效用户
实际用户和有效用户的区别及作用:
实际用户ID或实际组ID: 标识这个文件实际是谁拥有。
有效用户ID/有效组ID/附属组ID:用于文件访问权限检查。
一般而言,有效用户就是实际用户。
而当这种情况:有两个用户A和B,一个可执行文件bin,bin文件的所属用户为A。
当使用用户B登录系统时,运行bin进程,则bin进程有一个实际用户和有效用户。
其中,实际用户为该文件的拥有者即A。
而有效用户是谁要看bin文件的属性,当bin文件的属性中设置了“设置用户ID位”时,有效用户为实际用户即A,否则为B
设置用户ID位,就是例如上面passwd文件属性中的s。
进程有效用户的意义在于,进程去访问一个文件时,内核需要进行文件访问权限测试,内核将比较进程的有效用户ID和待访问文件中关于该有效用户的权限,判断是否满足访问条件。

文件相关函数

测试文件权限

access和faccessat函数:
这两个函数用于测试进程的实际用户和待测试文件的权限比较。

	函数声明:
		#incldue <unistd.h>
		int access(const char *pathname, int mode);
		int faccessat(int fd, const char *pathname, int mode, int flag);
	参数:
		pathname:文件名
		mode:
			R_OK: 测试读权限
			W_OK: 测试写权限
			X_OK: 测试执行权限
		flag:
			当flag设置为AT_EACCESS,访问检查的是调用进程的有效用户和有效组,而不是实际用户和实际组。
	返回值:
		success: 0
		fail: -1

控制创建文件权限

umask函数:进程创建新文件或新目录之前,控制所创建文件的默认权限。在进程中被调用,不影响系统本身的umask值(默认权限)

	函数声明:
		#include <sys/stat.h>
		mode_t umask(mode_t cmask)
	参数:
		mode_t cmask:权限位,例如022,八进制
	返回值:
		之前的文件模式权限值
	例1//设置了哪个位,哪个位的权限就被禁止
		umask(0);// ==>777? 555
		umask(022);// ==> 111 101 101
		umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); // ==》500

创建和删除目录

mkdir、mkdirat创建目录。
rmdir删除目录

创建和删除链接文件

link、linkat、unlink、unlinkat和remove函数:关于链接文件(硬链接)的创建和删除。
symlink和symlinkat函数:创建符号链接(软链接)

更改文件访问权限

chmod、fchmod和fchmodat函数:更改现有文件的访问权限。

更改文件所属用户和组

chown、fchown、fchownat和lchown函数:更改文件的用户ID和组ID。

重命名

rename和renameat函数:对文件和目录重命名

获取和更改工作路径

chdir、fchdir:更改当前的工作目录
getcwd:获取当前工作目录的绝对路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值