chomd 命令的解释和常用用法和高级用法

chmod (Change Mode) 是 Linux/Unix 系统中用于改变文件或目录权限的核心命令。它允许你控制谁可以读取、写入或执行某个文件。

注意 :你输入的 chomd 是拼写错误,正确的命令是 chmod


1. 核心概念:权限基础

在理解 chmod 之前,必须先看懂 ls -l 输出的权限字符串(例如 -rwxr-xr--):

复制代码
-rwxr-xr--
^  ^  ^  ^
|  |  |  └─ 其他用户 (Others) 的权限
|  |  └──── 所属组 (Group) 的权限
|  └─────── 所有者 (User/Owner) 的权限
└────────── 文件类型 (- 代表文件, d 代表目录)
  • r (Read) : 读权限(文件可看内容,目录可列出文件)。数值:4
  • w (Write) : 写权限(文件可修改,目录可创建/删除文件)。数值:2
  • x (Execute) : 执行权限(文件可运行,目录可进入)。数值:1

2. 两种设置模式

chmod 支持两种方式来修改权限:数字法(绝对模式)字母法(符号模式)

A. 数字法 (Absolute Mode) - 最常用

将 r, w, x 的数值相加得到三位数字。

  • rwx = 4+2+1 = 7
  • rw- = 4+2+0 = 6
  • r-x = 4+0+1 = 5
  • r-- = 4+0+0 = 4
  • --- = 0

语法chmod [数字][数字][数字] 文件名

  • 第一位:所有者 (User)
  • 第二位:所属组 (Group)
  • 第三位:其他人 (Others)

常用示例

复制代码
# 赋予所有者读写执行,组和其他人只读执行 (最常见脚本权限)
chmod 755 script.sh
# 结果:-rwxr-xr-x

# 赋予所有者读写,组和其他人只读 (常见配置文件)
chmod 644 config.txt
# 结果:-rw-r--r--

# 赋予所有人所有权限 (危险!慎用)
chmod 777 file.txt
# 结果:-rwxrwxrwx

# 只有所有者能读写执行,其他人无任何权限 (私密文件)
chmod 700 secret.key
# 结果:-rwx------
B. 字母法 (Symbolic Mode) - 更灵活

通过字符来增加、移除或设定权限。

语法chmod [谁][操作符][权限] 文件名

    • u: 所有者 (user)
    • g: 所属组 (group)
    • o: 其他人 (others)
    • a: 所有人 (all, 默认)
  • 操作符
    • +: 添加权限
    • -: 移除权限
    • =: 设定确切权限 (覆盖原有)
  • 权限r, w, x

常用示例

复制代码
# 给文件添加执行权限 (所有人都能执行)
chmod +x script.sh
# 等同于 chmod a+x script.sh

# 移除其他人的写权限 (保护文件不被误改)
chmod o-w file.txt

# 让所有者拥有读写执行,组和其他人只有读权限
chmod u=rwx,g=r,o=r file.txt

# 递归地给目录下所有文件添加执行权限
chmod -R +x my_folder/

3. 常用场景速查表

表格

场景 命令 解释
运行脚本 chmod +x script.sh 让脚本可执行
上传网页文件 chmod 644 index.html 网站标准权限,安全且可读
私有密钥 chmod 600 id_rsa SSH 密钥必须严格限制,否则报错
临时目录 chmod 1777 /tmp 任何人可写,但只能删除自己的文件 (粘滞位)
修复权限 chmod -R 755 dir/ 递归修复目录权限
修复文件权限 find dir -type f -exec chmod 644 {} \; 递归修复目录下仅文件的权限 (不改动目录)

4. 高级用法

A. 特殊权限位 (Special Bits)

除了 rwx,Linux 还有三个特殊权限位,通常用4位数字 表示(例如 4755)。

  1. SUID (Set User ID, 4xxx)

    • 作用 :用户执行该文件时,暂时拥有文件所有者的权限。
    • 典型应用passwd 命令。普通用户需要修改 /etc/shadow (root 所有),所以 passwd 设置了 SUID。
    • 设置chmod 4755 file (显示为 -rwsr-xr-x,注意 s)。
    • 风险:如果被黑客利用,可能导致提权。
  2. SGID (Set Group ID, 2xxx)

    • 作用 (文件) :执行时拥有文件所属组的权限。
    • 作用 (目录)非常重要 。在该目录下创建的新文件,会自动继承该目录的所属组,而不是创建者的主组。常用于团队协作目录。
    • 设置chmod 2775 shared_folder (显示为 drwxrwsr-x)。
  3. Sticky Bit (粘滞位, 1xxx)

    • 作用 :主要用于公共目录 (如 /tmp)。开启后,即使用户对目录有写权限,也只能删除自己拥有的文件,不能删除别人的文件。
    • 设置chmod 1777 /tmp (显示为 drwxrwxrwt,注意末尾的 t)。

组合示例

复制代码
# 设置一个协作目录:
# 2 (SGID): 新文件继承组
# 7 (Owner): rwx
# 7 (Group): rwx
# 5 (Other): r-x
chmod 2775 /team_project
B. 参考文件设置权限 (--reference)

如果你想让文件 A 的权限完全变得和文件 B 一样,不需要计算数字:

复制代码
chmod --reference=config_backup.txt config_new.txt
C. 递归修改中的陷阱

使用 chmod -R 时要非常小心,因为它会同时修改目录和文件的权限。

  • 错误做法chmod -R 755 /var/www

    • 后果:所有文件都变成了可执行 (x),这可能带来安全风险,且不符合常规文件权限规范。
  • 正确做法 :分别处理目录和文件。bash

    复制代码
    # 1. 目录设为 755 (可进入)
    find /var/www -type d -exec chmod 755 {} \;
    
    # 2. 文件设为 644 (不可执行)
    find /var/www -type f -exec chmod 644 {} \;
D. 使用 chmod 的 verbose 模式

查看具体改变了哪些文件:

复制代码
chmod -v 755 script.sh
# 输出:mode of 'script.sh' changed to 0755 (rwxr-xr-x)

总结

  • 日常使用 :推荐用 数字法 (755, 644),简单直观。
  • 微调权限 :推荐用 字母法 (+x, o-w),无需计算。
  • 协作目录 :记得用 SGID (2xxx)。
  • 公共目录 :记得用 粘滞位 (1xxx)。
  • 安全第一 :永远不要随意使用 777,除非你明确知道自己在做什么且处于隔离环境。
相关推荐
_OP_CHEN2 小时前
【Linux系统编程】(四十五)线程池基础:日志系统设计与策略模式的优雅落地
linux·操作系统·线程池·进程·策略模式·c/c++·日志系统
Johnstons2 小时前
当网络运维遇上全流量回溯:一次关于「看得见」的实践
运维·网络
B2_Proxy2 小时前
什么是住宅 IP?住宅代理的工作原理与应用指南
服务器·网络·tcp/ip
zzh0812 小时前
web技术与nginx网站环境部署
运维·前端·nginx
人间打气筒(Ada)2 小时前
zabbix报警多媒介(企业微信、钉钉)
运维·钉钉·企业微信·zabbix·监控·告警媒介
一水鉴天2 小时前
整体设计的自动化部署完整方案设计与程序实现 (完善版)20260311 之2 (豆包助手)
运维·人工智能·自动化
returnthem2 小时前
Linux 测试环境完整部署手册(CentOS 7 + Ubuntu 20.04 双版本)
linux·运维·服务器
kiku18182 小时前
linux系统安全及应用
linux·运维·系统安全
进击切图仔2 小时前
linux 上编译 c++ 项目结构
linux·运维·c++