Linux 文件权限之umask

2023-05-16

目录

  • 一、文件默认创建权限
  • 二、文件默认创建权限掩码
  • 三、文件权限的修改

 本文主要讲解Linux中的文件默认创建权限相关的内容,涉及到的内容有:文件默认创建权限、文件默认创建权限掩码、文件访问权限的修改。

 文件访问者共三类:文件所有者、文件所属组、其他用户。

 创建文件时有两种情况:

1.用户不指定各种文件访问者对于此文件都具有怎样的访问权限。
2.用户指定各种文件访问者对于此文件都具有怎样的访问权限。

一、文件默认创建权限

 什么是文件默认创建权限?

 就是在创建文件时,如果是情况1,那么文件最终的实际权限是通过文件默认创建权限和一个公式计算得出的。如果是情况2,那么文件最终的实际权限是通过用户指定的权限和公式计算得出的。

 这个公式可以理解为数学上的函数,而这个函数要通过传递一个参数来进行结果的计算。如果是情况1,这个参数就是文件默认创建权限。如果是情况2,这个参数就是用户指定的权限

 因此,文件最终的实际权限其实并不一定和用户指定的权限相等

 想要运用这个公式,那么就需要知道这个公式所包含的内容之一:文件默认创建权限掩码。如果不知道这个,就没办法运用公式。并且,普通用户和超级用户的文件默认创建权限掩码是不同的。

二、文件默认创建权限掩码

普通用户的文件默认创建权限掩码:0002
超级用户的文件默认创建权限掩码:0022

 如何查看文件默认创建权限掩码?

umask:查看当前默认文件创建权限掩码(以8进制表示)
umask 操作数:将操作数设置为默认文件创建权限掩码

 如图:分别在普通用户和超级用户的状态下查看掩码。

掩码

 文件的实际权限就是根据公式最终计算出的权限。

如果是情况一:实际权限 = 文件默认创建权限 & (~文件默认创建权限掩码)
如果是情况二:实际权限 = 用户指定的权限 & (~文件默认创建权限掩码)

 在Linux中,创建目录文件和普通文件的文件创建默认权限其实不一样

  • 创建目录文件的文件默认创建权限:0777
  • 创建普通文件的文件默认创建权限:0666

 同样都是文件,为什么普通文件跟目录文件的默认创建权限不一样?先来看一下两个默认权限的字符形式:
  777:rwx rwx rwx
  666:rw- rw- rw-

 普通文件和目录文件相比,去掉了可执行权限。因为普通文件中就包括了.c、.cpp之类的程序文件,如果有恶意用户上传了病毒程序文件,在系统上执行病毒文件怎么办。所以直接去掉可执行权限,就算是病毒文件,也不能运行。

 在这里验证一下:如图两个文件都是在普通用户状态下的情况1中创建的,根据文件类型标识,a是一个目录文件,b是一个普通文件,可以看到,两个文件的实际权限是不一样的。

不同之处
 如图:使用公式计算a文件的实际权限。目录文件的实际权限:111 111 101。字符形式:rwx rwx r-x。

目录计算

 如图:使用公式计算b文件的实际权限。普通文件的实际权限:110 110 100。字符形式:rw- rw- r–。

普通文件公式计算

 所以说文件的实际权限和文件默认创建权限以及文件默认创建权限掩码是有很大关系的

三、文件权限的修改

 如果想要修改一个文件的权限怎么办?使用下面两个办法:

  • chmod [用户] +/- [rwx] file :给指定文件的指定用户种类添加或删除指定权限
  • chmod [三位八进制数] file:直接修改指定文件权限
  • 用户:这个选项是指要修改哪种文件访问者的权限。u:文件所有者,g:文件所属组,o:其他用户,a:全部用户。

  • file:要修改权限的文件名

 方式一:给c文件的文件所有者添加可执行权限

chmod

 方式二:把c文件的访问权限设置为775

chmod

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 文件权限之umask 的相关文章

  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a

随机推荐