基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

chmod 命令的使用

知识点图片

chmod (Change Mode) 是 Linux 和 Unix 系统中用于修改文件或目录权限的命令。它是系统管理中最基础也最重要的命令之一。

以下是 chmod 命令的详细使用指南,分为数字法(最常用)和符号法(更直观)。


1. 基础概念:权限与用户

在 Linux 中,权限分为三类,用户分为三组。

三种权限 (Mode)

符号 含义 数字表示 对文件的作用 对目录的作用
r Read (读) 4 可以查看文件内容 可以列出目录中的文件 (ls)
w Write (写) 2 可以修改文件内容 可以创建、删除目录中的文件
x Execute (执行) 1 可以运行该文件(脚本/程序) 可以进入该目录 (cd)
- 无权限 0 禁止操作 禁止操作

三组用户 (Who)

  • u (User/Owner):文件所有者。
  • g (Group):文件所属组的用户。
  • o (Others):其他所有人。
  • a (All):所有人(u + g + o)。

2. 方法一:数字法 (Octal Mode) —— 最常用

这是最快设置权限的方法。你只需要做简单的加法。
公式: r=4, w=2, x=1

你需要为 UserGroupOthers 分别计算这三个数字的和。

常用组合示例:

  • chmod 777 file (4+2+1, 4+2+1, 4+2+1)
    • 含义: 所有人都有读、写、执行权限。
    • 注意:非常不安全,慎用!
  • chmod 755 file (4+2+1, 4+0+1, 4+0+1)
    • 含义: 所有者可读写执行;其他人只能读和执行(不能修改)。
    • 场景:网站目录、脚本文件。
  • chmod 644 file (4+2+0, 4+0+0, 4+0+0)
    • 含义: 所有者可读写;其他人只读。
    • 场景:普通的文本文件、配置文件。
  • chmod 600 file (4+2+0, 0+0+0, 0+0+0)
    • 含义: 只有所有者可读写;其他人无任何权限。
    • 场景:SSH 私钥 (id_rsa)、敏感数据。

语法:

bash
chmod 755 myscript.sh

3. 方法二:符号法 (Symbolic Mode) —— 更直观

当你只想修改某一项权限,而不想重新计算所有数字时,这种方法很好用。

操作符:

  • + :增加权限
  • - :移除权限
  • = :设置为特定权限(覆盖原有权限)

示例:

  1. 给所有人添加执行权限 (常用于脚本):

    bash
    chmod +x script.sh
    # 等同于 chmod a+x script.sh
  2. 给所有者增加写权限

    bash
    chmod u+w file.txt
  3. 移除组和其他人的写权限

    bash
    chmod go-w file.txt
  4. 同时设置不同权限 (用逗号分隔):

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

4. 递归修改 (重要选项)

如果你想修改一个目录及其内部所有文件和子目录的权限,必须使用 -R (Recursive) 参数。

语法:

bash
chmod -R [权限] [目录]

示例:
www 目录下的所有文件权限设置为 755:

bash
chmod -R 755 /var/www/html

5. 如何查看权限?

使用 ls -l 命令查看。

bash
$ ls -l myscript.sh
-rwxr-xr-- 1 user group 0 Jan 1 12:00 myscript.sh

解读 -rwxr-xr--

  1. 第一个字符 - 表示这是一个文件 (如果是 d 则为目录)。
  2. 第一组 rwx (7):所有者有读、写、执行权限。
  3. 第二组 r-x (5):组用户有读、执行权限。
  4. 第三组 r-- (4):其他人只有读权限。
  5. 所以这个文件的权限是 754

总结速查表

场景 推荐命令 说明
让脚本可运行 chmod +x file.sh 最常用的操作
标准文件权限 chmod 644 file.txt 只有我可以改,别人只能看
标准文件夹权限 chmod 755 dir/ 只有我可以改,别人能进入和查看
最高机密文件 chmod 600 secret.pem 只有我可以读写,别人完全看不见
修改整个文件夹 chmod -R 755 dir/ 递归应用到内部所有文件
00:00
00:00