Linux 常用命令 - chmod 【改变文件或目录权限】

server/2025/1/17 13:24:45/

简介

“chmod” 这个命令来自于 “change mode” 的缩写,用于更改文件或目录的访问权限。这个命令允许用户设定谁可以读取、写入或执行一个文件。在 Linux 和其他类 Unix 系统中,文件权限对系统安全和用户隐私至关重要。
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users):
在这里插入图片描述

使用方式

chmod [选项] 模式 文件或目录

常用参数

  • -c:仅在权限被成功修改时才输出操作信息。
  • -v:始终输出操作信息。
  • -R:对目录及目录下的文件递归执行权限修改操作。
  • -f:阻止大多数错误信息的输出。
  • --no-preserve-root:不对根目录/做特殊处理,这也是默认选项。
  • --preserve-root:无法在根目录下执行递归操作。
  • --reference=RFILE:使用参考文件或参考目录(RFILE)的权限来设置目标文件或目标目录的权限。
  • --help:显示帮助信息。
  • --version:显示版本信息。

权限字符说明

权限字符的模式为:[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+

用户类型:

  • u:表示当前用户。
  • g:代表和当前用户在同一个组的用户,以下简称组用户。
  • o:代表其他用户。
  • a:代表所有用户。

权限类型:

  • r:代表读权限以及八进制数 4 。
  • w:代表写权限以及八进制数 2 。
  • x:代表执行权限以及八进制数 1 。
  • X:仅在对应文件是目录或已对一些用户有执行权限的情况下设置执行权限。
  • s:设置特殊模式,如使用权限组合 u+s 设置用户 ID 位(SUID)或 g+s 设置组 ID 位(SGID)。
  • t:设置粘滞位,只有目录或文件的所有者才能删除或重命名目录下的文件。

操作类型:

  • +:为指定的用户类型增加权限。
  • -:为指定的用户类型删除权限。
  • =:为指定用户类型设置对应的权限,删除未提及的权限。

八进制类型:

  • 7:读+写+执行 rwx 111
  • 6:读+写 rw- 110
  • 5:读+执行 r-x 101
  • 4:只读 r-- 100
  • 3:写+执行 -wx 011
  • 2:只写 -w- 010
  • 1:只执行 --x 001
  • 0:无 --- 000

参考示例

1. 设定某个文件的权限为 775

chmod 775 test.txt

更新权限后使用 ls 命令查看文件的权限信息

jay@jaylinuxlenovo:~/test/chmod$ chmod 775 test.txt 
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwxrwxr-x 1 jay jay 0 Jan  1 12:02 test.txt

2. 设定某个文件让所有人都可以读取

chmod a+r test.txt

文件初始权限为 rwx------,更新后为 rwxr--r--

jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwx------ 1 jay jay 0 Jan  1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod a+r test.txt 
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwxr--r-- 1 jay jay 0 Jan  1 12:02 test.txt

3. 设定某个目录及其内部的子文件可以被其他用户读取

chmod -R o+r dir2

目录中文件的权限初始为 rwx------,更新后为 rwx---r--

jay@jaylinuxlenovo:~/test$ ls -l dir2/
total 12
drwx------ 2 jay jay 4096 Dec  6 14:51 dir3
-rwx------ 1 jay jay   27 Dec  6 15:21 test1.txt
-rwx------ 1 jay jay   27 Dec  6 14:52 test2.txt
jay@jaylinuxlenovo:~/test$ chmod -R o+r dir2
jay@jaylinuxlenovo:~/test$ ls -l dir2/
total 12
drwx---r-- 2 jay jay 4096 Dec  6 14:51 dir3
-rwx---r-- 1 jay jay   27 Dec  6 15:21 test1.txt
-rwx---r-- 1 jay jay   27 Dec  6 14:52 test2.txt

4. 去除所有用户的写权限

chmod a-w test.txt 

文件的初始权限为 rwxrwxrwx,更新后为 r-xr-xr-x

jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwxrwxrwx 1 jay jay 0 Jan  1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod a-w test.txt 
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-r-xr-xr-x 1 jay jay 0 Jan  1 12:02 test.txt

5. 将参考文件的权限赋给指定文件

chmod --reference test2.txt test.txt  

指定文件 test.txt 的初始权限与参考文件 test2.txt 不同,再执行更新指令后可以发现指定文件的权限变得与参考文件相同。

jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rw-rw-r-- 1 jay jay 0 Jan  1 13:02 test2.txt
-r-xr-xr-x 1 jay jay 0 Jan  1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod --reference test2.txt test.txt 
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rw-rw-r-- 1 jay jay 0 Jan  1 13:02 test2.txt
-rw-rw-r-- 1 jay jay 0 Jan  1 12:02 test.txt 

6. 为每个类别的用户单独设置不同的权限

chmod u=rwx,g=rw,o=r test.txt

为当前用户设置所有权限,组用户设置读写权限,其他用户设置读权限。

jay@jaylinuxlenovo:~/test/chmod$ ls -l test.txt 
-r-------- 1 jay jay 0 Jan  1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod u=rwx,g=rw,o=r test.txt 
jay@jaylinuxlenovo:~/test/chmod$ ls -l test.txt 
-rwxrw-r-- 1 jay jay 0 Jan  1 12:02 test.txt

注意事项

  • 模式中的数字为 8 进制形式。
  • 更改文件或目录权限需要相应的权限,通常需要是文件的所有者或超级用户。
  • 在使用 -R 选项递归地改变目录权限时要特别小心,因为这可能会意外更改子目录和文件的权限。
  • 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。但如果是在递归模式下,则会忽略符号链接。
  • 粘滞位的作用取决于文件的类型:
    • 对于目录,如果设置了粘滞位,则意味着只有文件的所有者或者目录的所有者才能删除或重命名目录内的文件。这个功能对于像 /tmp 这样的所有用户可写的目录非常有用,因为它允许多个用户访问和写入文件,但防止用户删除或重命名其他用户的文件。这就是所谓的目录“受限删除标记”。
    • 对于常规文件,粘滞位在一些较老的系统上用于将程序文本映像保存在交换设备上,以便程序在运行时能够更快地加载。当然在现代系统中,这个用途通常不再有效。

http://www.ppmy.cn/server/159094.html

相关文章

服务器数据恢复—Zfs文件系统数据恢复案例

服务器数据恢复环境&故障: 一台zfs文件系统的服务器,管理员误操作删除了服务器上的数据。 服务器数据恢复过程: 1、将故障服务器中所有硬盘做好标记后取出,硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…

获取文章分类详情功能

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 目录 总说 一、功能实现 1.1 Controller层 1.2 Service层 1.3 Impl层 1.4 Mapper层 1.5 测试接口 一、功能实现 写一个根据…

(蓝桥杯)使用差分数组和前缀和解决区间更新问题——倒水

题目描述 在一个桌子上摆放了 n 个杯子,每个杯子中有一定量的水。小 A 同学负责向杯子中倒水,他总共倒了 k 次,每次会向从第 L 个杯子到第 R 个杯子中添加 P 毫升的水(注意:水只可能增加,不可能减少&#x…

Jmeter 简单使用、生成测试报告(一)

一、下载Jmter 去官网下载,我下载的是apache-jmeter-5.6.3.zip,解压后就能用。 二、安装java环境 JMeter是基于Java开发的,运行JMeter需要Java环境。 1.下载JDK、安装Jdk 2.配置java环境变量 3.验证安装是否成功(java -versio…

Mysql数据库索引

Spring Data JPA建立索引所使用的语法 Entity Table(name "user",indexes {Index(name "idx_user_username", columnList "username"),Index(name "idx_user_email_status", columnList "email, status")},uniqueCon…

Cisco ASA nat配置示例-NAT的顺序

需要10.248.1.1 访问internet时转换为outside接口IP object network 10.248.1.1 host 10.248.1.1 nat (inside,outside) source dynamic 10.248.1.1 interface 有时会遇到nat配置正确,但业务不通的情况 。 这时可以通过packet-tracer命令查看数据流在哪一步出问题…

初学者如何用 Python 写第一个爬虫?

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

doris:导入概览

Apache Doris 提供了多种导入和集成数据的方法,您可以使用合适的导入方式从各种源将数据导入到数据库中。Apache Doris 提供的数据导入方式可以分为四类: 实时写入:应用程序通过 HTTP 或者 JDBC 实时写入数据到 Doris 表中,适用于…