chmod 755 究竟是什么鬼?

本文详细解析了Linux系统中文件的权限类型,包括读、写和执行权限,以及这些权限如何应用于创建者、组用户和其他用户。同时,深入介绍了如何使用chmod命令来更改文件权限,包括其两种使用方法和具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有个校招的同事问我:

(1) 使用ls –l查看文件,前面显示的-rwxrwxr-x是什么意思?

(2) chmod 755 xxx.sh又是什么意思?

1分钟简单说下,这两个和权限相关的问题。

 

先说下文件类型访问方式权限分类

 

Linux下,分为这么几种文件类型

  • d:目录directory

  • l:符号链接link

  • s:套接字socket

  • c:字符设备char

  • p:命名管道pipe

  • -:其他,不属于以上几类

 

文件创建后,有三种访问方式

  • 读(read):显示内容

  • 写(write):编辑内容,删除文件

  • 执行(execute):执行文件

 

针对用户,文件有三类权限

  • 创建人(user)权限:创建文件的人

  • 组(group)用户权限:和拥有者处于同一用户组的其他人

  • 其他(other)用户权限

 

了解了文件类型,访问方式,三类权限之后,第一个问题就比较好解答了。


640?wx_fmt=png

例如,上述a.out的第一列

-rwxrwxr-x

共有十个字符,分为四个部分:

  • 第1个字符表示文件的类型:[-]表示普通文件

  • 第234字符表示创建人的权限:[wxr]表示可读,可写,可执行

  • 第567字符表示组用户权限:[wxr]表示可读,可写,可执行

  • 第890字符表示其他用户权限:[r-x]表示可读,可执行

 

如何改变文件的权限呢?

chmod命令用于改变文件的权限,它有两种使用方法。

 

第一种:chomod [who] [operator] [permission] filename


[who]

  • u:创建人

  • g:组用户

  • o:其他用户

  • a:所有用户(all)

 

[operator]

  • +:增加权限

  • -:取消权限

  • =:设定权限

 

[permission]

  • r:读

  • w:写

  • x:执行

 

如何给一个文本文件xxx.sh增加可执行权限?

chmod u+x xxx.sh

 

如何不让其他用户修改xxx.sh?

chmod go-w xxx.sh

 

第二种方法:chmod [mode] filename


[mode]是一个3位八进制数:

  • 第一位表示创建者权限

  • 第二位表示组用户权限

  • 第三位表示其他用户权限

 

更具体的:

400:创建者可读

200:创建者可写

100:创建者可执行

040:组用户可读

020:组用户可写

010:组用户可执行

004:其他用户可读

002:其他用户可写

001:其他用户可执行

 

3位对应位的对应数字加起来,最终就是三类用户的最终权限。

 

如何回收非创建者用户对xxx.sh的所有权限?

chmod 700 xxx.sh

第一位7:4+2+1,创建者,可读可写可执行

第二位0:组用户,无权限

第三位0:其他用户,无权限

 

xxx.sh只允许创建者修改,允许其他用户读取和执行,怎么设置?

chmod 755 xxx.sh

第一位7:4+2+1,创建者,可读可写可执行

第二位5:4+1,组用户,可读可执行

第三位5:4+1,其他用户,可读可执行

画外音:一般来说,写了一个工具,只允许自己修改,不允许别人修改,但允许别人使用,这就是755。

 

-rwxrwxr-x

chmod 755

有意思么?

640?wx_fmt=jpeg

架构师之路-分享可落地的架构文章


最近1个月基本在写MySQL和InnoDB:

快照读,在RR和RC下有何差异?

超赞,InnoDB调试死锁的方法!

最近两篇偏底层,阅读比较低,还挺遗憾的,后续规划换一个话题。

<think>我们正在回答关于chmoda+x命令的问题。根据用户提供的引用资料,我们需要整合信息并给出清晰解释。引用[1]和[3]指出:chmoda+x是给所有用户(包括文件所有者owner、同组用户group、其他用户others)添加执行权限。引用[2]补充:chmoda+x等价于chmod+x,因为默认情况下chmod+x就是作用于所有用户。但也有细微区别,引用[1]提到chmod+x默认只影响文件所有者,这与引用[2]的说法不一致。我们需要明确。经查,在多数Unix/Linux系统中,chmod+x的行为与chmoda+x相同,即给所有用户添加执行权限。这是因为在没有指定用户类别(如u,g,o)时,默认使用a(all)并且会参考umask设置,但通常就是作用于所有用户。所以,我们可以这样解释:1.chmoda+x明确指定给所有用户(a表示all)添加执行权限(x)。2.chmod+x是一种简写形式,在大多数情况下等同于chmoda+x,即给所有用户添加执行权限。但要注意,不同的系统可能有不同的默认设置(根据POSIX标准,当没有给定用户类别时,效果等同于a)。因此,为了可移植性,建议使用chmoda+x。另外,用户可以使用其他形式:chmodu+x:仅给文件所有者添加执行权限chmodg+x:仅给同组用户添加执行权限chmodo+x:仅给其他用户添加执行权限执行权限(x)的意义:允许用户将该文件作为可执行程序运行。这对于脚本(如shell脚本、Python脚本等)或编译后的二进制程序是必须的。下面我们按照要求组织回答:</think> ### `chmod a+x` 命令详解 #### 1. **命令作用** `chmod a+x` 是为 Linux/Unix 系统中的文件添加**可执行权限**的命令,它面向三类用户生效: - **文件所有者**(owner) - **所属用户组**(group) - **其他用户**(others) 即覆盖系统中的所有用户(`a` 表示 "all users")[^3]。 #### 2. **权限范围对比** 使用数学描述不同命令的权限范围: | 命令 | 权限范围 | 描述 | |---------------------|-----------------------------------|--------------------------| | `chmod a+x` | $U_{\text{all}} = U_o \cup U_g \cup U_a$ | 所有用户添加执行权限 | | `chmod u+x` | $U_o$ | 仅文件所有者 | | `chmod g+x` | $U_g$ | 仅所属用户组 | | `chmod o+x` | $U_a$ | 仅其他用户 | **注**:$U_o$(owner)、$U_g$(group)、$U_a$(others) #### 3. **技术意义** - **可执行权限(x)**:允许用户直接运行该文件(如脚本或二进制程序) - **典型场景**: 对 Shell 脚本(如 `script.sh`)执行: ```bash chmod a+x script.sh # 使所有用户可运行 ./script.sh # 直接执行脚本 ``` #### 4. **与 `chmod +x` 的关系** $$ \text{chmod +x} \equiv \text{chmod a+x} $$ 两者完全等价[^2]。`+x` 是 `a+x` 的简写形式,均默认作用于所有用户类别。 #### 5. **权限系统示例** 假设文件权限初始为 `-rw-r--r--`(644): ```bash $ chmod a+x file # 添加执行权限 $ ls -l file # 查看结果 -rwxr-xr-x # 权限变为755(所有者、组、其他均有x权限) ``` 权限位构成: $$ \text{权限} = \underbrace{rwx}_{\text{owner}} \underbrace{r-x}_{\text{group}} \underbrace{r-x}_{\text{others}} $$ #### 6. **安全建议** - 若只需当前用户可执行:用 `chmod u+x` 替代 `a+x` - 敏感脚本避免开放全局执行权限(如数据库操作脚本) --- ### 实际应用场景 ```bash # 为Python脚本添加全局执行权限 chmod a+x app.py # 仅允许管理员执行维护工具 chmod u+x admin_tool.sh # 取消所有用户的执行权限 chmod a-x file ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值