Linux 0644、0755 的来龙去脉

本文详细解释了Linux系统中文件项权限的默认设置(如0644和0755),介绍了umask的作用、如何与chmod配合,以及它们在新建文件和修改权限时的不同应用场景。
摘要由CSDN通过智能技术生成

Linux系统下,新建文件项的权限属性通常是0644(-rw-r–r–)、0755(drwxr-xr-x),为什么不是0666、0600呢,umask又是哪来的拦路虎,抹掉进程给文件的授权…🤔

文件项权限是什么

Linux系统下,每个文件项都有一个权限属性,用于限制系统多用户下的安全访问。

在这里插入图片描述

(文件默认权限属性)

如何新建文件项

进程通过以下两组API函数(c语言版)新建文件项、设置权限属性。


/*
* 设置进程的 
* file mode creation mask(umask)
*/
mode_t umask(mode_t mask);

/*
* 新建文件项、并通过mode设置权限属性
*/
int open(const char *pathname, \
         int flags, \
         mode_t mode);
int mkdir(const char *pathname, \
         mode_t mode);

为了弄清楚两组API是如何配合使用,直接上代码(c语言版)演示:

我们模拟Shell的touch命令和mkdir命令,函数参数mode设置为0777(drwxrwxrwx)、0666(-rw-rw-rw-),也就是给出了所有的权限,然后通过改变umask,测试新建文件项权限的变化:

int main(){

int fd1,fd2;

/*
* 设置进程的umask为0000
* 新建文件项g1-dir、g1-file
*/
umask( 0000 );
mkdir( "./g1-dir", 0777 );
fd1 = open( "./g1-file", \
            O_RDWR|O_CREAT, \
            0666 );
close( fd1 );

/*
* 设置进程的umask为更改为0022,
* 其他的保持不变
* 新建文件项g2-dir、g2-file
*/
umask(0022);
mkdir( "./g2-dir", 0777 );
fd2 = open( "./g2-file",  \
            O_RDWR|O_CREAT, \
            0666 );
close( fd2 );

return 0;

}
(my_touch.c)

执行结果:

两次新建文件项g1、g2,通过设置不同的umask,得到了两组不同权限的文件,当使用umask(0022)时,g2组的权限出现了 0644、0755。

在这里插入图片描述
从上述执行结果可得出,新建文件项的权限由两组函数决定:

  • open、mkdir API的mode参数
  • 进程的umask

文件最终权限计算结果:


permission = mode & ~umask
比如:
0644 = 0666 & ~0022
0755 = 0777 & ~0022

看,我们找到 0644、0755这两个神秘数字的来源了,也不是很难嘛😊!

各种默认值

在这里插入图片描述
这段代码中有几个常量 0022、0777、0666。没错,这就是系统中的默认值,也是0755、0644的来源。

  • 0022:系统默认的umask,后续可以通过函数umask来更改。

  • 0777:shell 命令mkdir新建目录,进程调用mkdir函数mode参数的值。

  • 0666:shell 命令touch新建文件,进程调用open函数 mode参数的值。

umask的作用及继承

对于开发人员,相信我们对open、mkdir函数比较熟悉,但umask是什么,平时也没用到啊,不用行不行啊🤔

结合上面的示例代码(my_touch.c)我们已经可以看出:

permission = mode & ~umask

  • umask用于屏蔽open、mkdir函数参数mode中对应的权限位。例如:umask默认值0022,即禁止组成员用户及其他用户对该文的写权限。
  • 子进程继承父进程的umask值,后续通过umask函数修改。

那在写代码新建文件项时,是否需要修改umask?还是那句话,结合业务需要。

  • 不修改:继承父进程的umask,mode设为0666、0777,遵守系统调遣。
  • 自定义:自定义进程umask,我的文件我做主。
    umask(0):关闭umask的影响,权限仅由mode指定,世界清静了。

umask vs chmod

以上两个命令都可以影响、修改文件项的权限属性,但使用场景却各有不同。

umask

1、工作方式:屏蔽权限位。
2、作用对象:新建文件项的默认权限属性。
3、作用范围:严格说是进程级别,但可认为是系统级别或用户级别。

chmod

1、工作方式:设置权限位。
2、作用对象:已存在的文件项权限属性。
3、作用范围:明确指定的文件项。
4、chmod不受umask的影响。

至此0644,0755已不再神秘,umask也由拦路虎变成了破抹布,可以统统丢到垃圾桶了,因为写代码,我选umask(0)。当然咯,非研发人员慎用,大招伤人,容易

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL Server是一种关系型数据库管理系统,由Microsoft公司开发。它使用SQL语言进行数据管理和查询。以下是SQL Server的来龙去脉系列: 1. SQL Server的历史:SQL Server最初是由Sybase公司开发的,后来由Microsoft公司收购并继续开发。自1993年以来,Microsoft一直在开发和发布新版本的SQL Server。 2. SQL Server的版本:SQL Server有多个版本,包括Express、Standard、Enterprise和Developer等版本。每个版本都有不同的功能和限制。 3. SQL Server的体系结构:SQL Server的体系结构包括数据库引擎、分析服务、集成服务和报告服务等组件。数据库引擎是SQL Server的核心组件,用于存储和管理数据。 4. SQL Server的安全性:SQL Server提供了多种安全功能,包括身份验证、授权和加密等。它还支持Windows身份验证和SQL Server身份验证。 5. SQL Server的高可用性:SQL Server提供了多种高可用性功能,包括复制、日志传送、数据库镜像和AlwaysOn可用性组等。 6. SQL Server的性能优化:SQL Server提供了多种性能优化功能,包括索引、分区、查询优化器和内存优化等。 7. SQL Server的监视和管理:SQL Server提供了多种监视和管理工具,包括SQL Server Management Studio、SQL Server Profiler和Dynamic Management Views等。 8. SQL Server的开发:SQL Server支持多种编程语言和开发工具,包括.NET Framework、Visual Studio和PowerShell等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值