news 2026/6/10 18:19:00

飞凌嵌入式ElfBoard-获取文件的状态信息之文件属主

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞凌嵌入式ElfBoard-获取文件的状态信息之文件属主

在Linux的文件系统中,文件属主 (Owner)是一个重要的概念,这里属主的通俗解释可以理解为文件的所有者,也就是拥有此文件权限的用户。本质上,每一个文件都有一个所有者,通常就是创建该文件的用户。文件的所有者可以控制文件的访问权限,比如:哪些用户可以控制该文件的访问权限、读写权限或者执行权限。属主通常用用户ID(User ID:UID)表示,在文件系统中,属主的名字也可以通过UID查找。

除了属主之外,文件还会被分配一个用户组。用户组包含了很多个用户,不同的用户组对文件有着不同的权限。用户组用组ID(Group ID:GID)。

所以每一个文件都有一组权限,权限包括属主、属组和其他用户对该文件的访问级别。文件的权限包括读(r)、写(w)、和执行(x)。

下面就以上一小节lstat_test文件为例,看一下文件属主(UID)和用户组(GID)。

File: lstat_test

Size: 16272 Blocks: 32 IO Block: 4096 regular file

Device: 803h/2051d Inode: 5255761 Links: 1

Access: (0755/-rwxr-xr-x) Uid: ( 1000/ elf) Gid: ( 1000/ elf)

Access: 2024-11-06 16:58:48.619197176 +0800

Modify: 2024-11-06 16:58:48.619197176 +0800

Change: 2024-11-06 16:58:48.619197176 +0800

Birth: 2024-11-06 16:58:48.608198276 +0800

可以看到lstat_test文件属主是elf,这里的UID是1000,用户组是elf,GID为1000。

在Linux系统中,还有关于有效用户ID(Effective User ID, EUID)和有效组ID(Effective Group ID, EGID)的相关概念,这些都是与进程权限相关的概念。

有效用户ID(EUID)是用于表示进程的当前权限级别,它决定了该进程可以执行哪些操作还有可以访问哪些资源权限。

有效组ID(EGID)是表示当前进程有效组权限,他决定了进程的组权限和对资源的访问。

他们都有一个共同点,都会继承其父进程的有效用户ID(EUID)或者有效组组ID(EGID)。

Chown:用于更改文件或目录的所有者(owner)和所属组(group)的系统调用。它可以修改文件或目录的所有者身份以及该文件的组权限。

1.头文件

#include <unistd.h>

2.函数原型

int chown(const char *pathname, uid_t owner, gid_t group);

3.参数

pathname:要更改所有者和所属组的文件路径。

owner:新的文件所有者用户UID,如果希望保持不变可以设置为-1。

group:新的文件所属组GID,如果希望保持不变可以设置为-1。

4.返回值

如果成功则返回0,失败返回-1。

使用此函数还需要注意一下两点:

⚫chown函数需要root权限才可以修改文件的属主和用户组ID。

⚫普通用户可以修改为其所从属的任意附属组ID。

与其相似的还有两个函数,分别为fchown()和lchown()函数,这两个就不做过都介绍了。

5.示例:(使用chown修改文件属组

#include <stdio.h>

#include <unistd.h>

#include <errno.h>

#include <string.h>

int main(){

const char *pathname = "lstat_test"; //要更改权限文件

uid_t new_owner = 0; //新的用户ID

gid_t new_group = 0; //新的组ID

printf("UID : %d GID : %d\n", getuid(), getgid());

if (chown(pathname, new_owner, new_group) == -1) {

perror("chown");

return 1;

}

printf("File ownership change successfully.\n");

return 0;

}

6.测试结果

$ ./chown_test

UID : 1000 GID : 1000

chown: Operation not permitted

$ sudo ./chown_test

[sudo] password for elf:

UID : 0 GID : 0

File ownership change successfully.

$ stat lstat_test

File: lstat_test

Size: 16272 Blocks: 32 IO Block: 4096 regular file

Device: 803h/2051d Inode: 5255763 Links: 1

Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2024-08-13 14:29:56.236464366 +0800

Modify: 2024-08-22 16:28:05.866155024 +0800

Change: 2024-08-22 16:30:52.964174357 +0800

Birth: 2024-08-13 14:29:56.236464366 +0800

这里执行了两次,第一次没有加sudo权限,可以看到有效用户ID和有效组ID是1000,增加sudo权限后,有效用户ID和有效组ID变成了0。验证了上一小节中“chown函数需要root权限才可以修改文件的属主和用户组ID”的问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:52:17

华为OD机试真题精讲:单词接龙(Python/Java/C++多语言实现)

华为OD机试真题精讲:单词接龙(Python/Java/C++多语言实现) 一、题目描述(2025B卷高频100分题) 在单词接龙游戏中,玩家需要按照特定规则将起始单词转换为目标单词: 每次转换只能修改一个字符; 转换后的单词必须存在于给定的单词列表wordList中(列表内单词唯一); 起…

作者头像 李华
网站建设 2026/6/10 11:05:28

COLMAP十年进化:从单目相机到多传感器三维重建的完整指南

在计算机视觉和三维重建领域&#xff0c;COLMAP已经从一个学术研究工具成长为工业级应用的标杆。这个开源项目能够从普通的照片中重建出精确的三维模型&#xff0c;为数字孪生、虚拟现实和历史遗迹保护提供了强大的技术支持。无论你是摄影爱好者、研究人员还是开发者&#xff0…

作者头像 李华
网站建设 2026/6/10 9:15:02

DETR模型2025年技术突破:从实验室到边缘设备的目标检测革命

导语 【免费下载链接】detr-resnet-50 项目地址: https://ai.gitcode.com/hf_mirrors/facebook/detr-resnet-50 DETR&#xff08;Detection Transformer&#xff09;模型家族在2025年迎来重大技术突破&#xff0c;通过动态卷积与轻量化设计的融合&#xff0c;重新定义了…

作者头像 李华
网站建设 2026/6/9 17:19:06

MeterSphere内网部署实战:3步解决企业测试环境隔离难题

MeterSphere内网部署实战&#xff1a;3步解决企业测试环境隔离难题 【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台&#xff0c;为软件质量保驾护航。搞测试&#xff0c;就选 MeterSphere&#xff01; 项目地址: https://gitcode.com/gh_mirrors/me/meters…

作者头像 李华
网站建设 2026/6/10 10:49:55

21、红外遥控技术与设备构建全解析

红外遥控技术与设备构建全解析 在当今的科技生活中,远程控制已成为我们操作各种设备的常见方式,而红外遥控更是其中广泛应用的技术之一。下面将详细介绍构建设备图形用户界面(GUI)以及红外遥控相关的技术知识。 构建设备 GUI 的层次结构 构建设备的 GUI 需要多个层次的协…

作者头像 李华
网站建设 2026/6/10 10:49:26

23、红外遥控与SNMP协议入门指南

红外遥控与SNMP协议入门指南 1. 红外遥控 1.1 配置lircd守护进程 LIRC(Linux Infrared Remote Control)包中最核心的部分是lircd守护进程。它负责分析来自 /dev/lirc 设备文件的含噪时序值,并生成一系列易于下游LIRC工具或用户应用程序解析的命令。 为了让lircd守护进…

作者头像 李华