linux下open创建文件权限

img

img


我创建文件的时候,文件权限是0666,就是读写权限,但是创建完成后,我看熟悉,竟然有x,就是可执行,这里为啥,请教一下

因为你加了可执行的权限。

在Linux中,文件权限的三种类型是读、写、执行。这三种权限的表示方式分别是数字4、2、1,三者组合可以表示出8种不同的文件权限,分别是:

权限 数字表示
读 4
写 2
执行 1
读和写 6
读和执行 5
写和执行 3
读、写和执行 7
没有权限 0
当您使用open函数创建文件时,可以使用mode参数来指定文件的权限,例如0666表示该文件的权限为读写权限。如果您在创建文件时没有明确指定文件的执行权限,那么文件的执行权限就会被设置为系统默认值,也就是通常情况下是没有执行权限的。

当您看到创建的文件有x权限时,可能有以下几种情况:

如果您是在NTFS或FAT文件系统上创建的文件,x权限可能是由于在Windows系统中该文件被标记为可执行文件,在Linux系统中自动继承了该标记。

如果您在创建文件时使用了SUID或SGID权限,则文件的x权限将被自动设置为1。SUID和SGID权限分别允许普通用户在以特权用户权限执行特定程序时,获得特定的权限。

如果您在创建文件时使用了粘着位(sticky bit)权限,则文件的x权限也将被自动设置为1。粘着位通常用于控制在一个目录中只有目录所有者和文件所有者才能删除文件。

在Linux系统中,通过chmod命令可以修改文件权限。如果您想移除一个文件的x权限,可以使用chmod命令并将x权限的数字表示(即1)从文件权限中去除。

如果对您有帮助,请给与采纳,谢谢。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你试下创建一个0444 0222 权限的看下有啥区别吗

这个可能是因为那个umask造成的,我以前遇到过类似的问题,
尤其是创建linux账户的时候,一定要给这个umask权限,当使用这个umask的时候系统创建文件的时候会有默认读写执行权限,缺省umask值为022,也就是说,它会把新文件的权限掩码从0666减去022,新文件的权限就变成了0644。
这样,新建文件的权限就是644,即可读可写不可执行。如果设置的权限是066,那么经过umask的计算后就会变成0644,
即可读可写不可执行,而实际的权限是777,可以读可写可执行,因此,最终的权限是0644加上777,结果就是777,即可读可写可执行。
题主可以尝试一下这个方向,只是方向,也不一定保证完全是这个原因造成的