当前位置: 首页 > news >正文

(二)文件管理-文件权限-chmod命令的使用

文章目录

  • 1. 命令格式
  • 2. 基本用法
    • 2.1 符号模式
    • 2.2 八进制数字模式
  • 3. 高级用法
    • 3.1 递归操作
    • 3.2 参考权限
    • 3.3 特殊权限位(Setuid, Setgid, Sticky Bit)
    • 3.4 X 特殊执行权限
  • 4. 注意事项
    • 4.1权限与所有权
    • 4.2 Root 权限
    • 4.3 安全风险
    • 4.4 -R 的风险
    • 4.5 目录的执行权限

1. 命令格式

chmod 命令的完整格式如下:

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
  • [OPTION]: 可选的操作选项
  • MODE: 权限模式,通常由 [ugoa...][[+-=][perms...]...] 部分组成
    • ugoa: 指定权限作用的对象
      • u: 文件所有者 (user)
      • g: 文件所属组 (group)
      • o: 其他用户 (others)
      • a: 所有用户 (all),是默认值
    • +-=: 指定操作动作
      • +: 添加权限
      • -: 移除权限
      • =: 设置权限为精确值
    • perms: 具体的权限
      • r: 读 (read)
      • w: 写 (write)
      • x: 执行 (execute)
      • X: “特殊”的执行权限(后面详解)
      • s: 设置用户ID (setuid) 或 设置组ID (setgid)
      • t: 粘滞位 (sticky bit)
  • OCTAL-MODE: 八进制数字模式
    • 由 4 位或 3 位数字组成(如 755, 644, 4755)
  • --reference=RFILE: 参考另一个文件 RFILE 的权限来设置当前文件
  • FILE: 要操作的一个或多个目标文件或目录

2. 基本用法

基本用法主要通过 符号模式 和 八进制数字模式 来修改文件权限。

2.1 符号模式

# 为所有用户添加执行权限
chmod a+x script.sh
# 或省略 'a',因为默认就是 all
chmod +x script.sh# 移除所属组和其他用户的写权限
chmod go-w document.txt# 为文件所有者设置精确的读写执行权限,并清除组和其他用户的所有权限
chmod u=rwx,go= myfile
# 执行后权限为:-rwx------

2.2 八进制数字模式

这是一种最常用且最精确的方式。三位数字分别代表 所有者(u)所属组(g)其他用户(o) 的权限。

数字权限含义
4r–
2-w-
5r-x (4+1)读和执行
6rw- (4+2)读和写
7rwx (4+2+1)读写和执行
  • 示例:
chmod 755 my_script.sh
# 结果:-rwxr-xr-x
# 所有者:读、写、执行 (7)
# 组:读、执行 (5)
# 其他用户:读、执行 (5)chmod 600 secret.txt
# 结果:-rw-------
# 所有者:读、写 (6)
# 组:无权限 (0)
# 其他用户:无权限 (0)

3. 高级用法

3.1 递归操作

使用 -R 选项可以递归地修改目录及其内部所有文件和子目录的权限。

chmod -R 755 /var/www/mywebsite/
# 目录:rwxr-xr-x
# 文件:rwxr-xr-x (注意:这会让所有文件都可执行,可能不安全)

3.2 参考权限

不需要记住复杂的八进制数,直接复制另一个文件的权限。

# 让 file2 的权限和 file1 一模一样
chmod --reference=file1 file2

3.3 特殊权限位(Setuid, Setgid, Sticky Bit)

这些权限用于特殊功能,请谨慎使用

  • Setuid (s 在用户执行位): 以文件所有者的身份运行程序,而不是执行者。
    • 八进制表示:在三位数前加 4 (如 4755)
    • 案例passwd 命令就需要 setuid 来修改 /etc/shadow 文件:
chmod u+s /usr/bin/passwd
# 或
chmod 4755 /usr/bin/passwd
# 结果:-rwsr-xr-x (其中的 's')
  • Setgid (s 在组执行位):
    • 对文件:以文件所属组的身份运行程序。
    • 对目录:在该目录下创建的任何新文件或子目录,其所属组都将继承此目录的所属组,而不是创建者的主要组。这对于团队协作共享目录极其重要。
    • 八进制表示:在三位数前加 2 (如 2770)
    • 案例:设置一个共享目录:
chmod g+s /path/to/shared_directory
# 或
chmod 2770 /path/to/shared_directory
# 结果:drwxrws--- (其中的 's')
  • Sticky Bit (t 在其他用户执行位):它保证只有文件的所有者或 root 才能删除或重命名该目录下的文件。
    • 八进制表示:在三位数前加 1 (如 1777)
    • 案例:查看 /tmp 目录的权限
ls -ld /tmp
# 输出:drwxrwxrwt ... /tmp (其中的 't')
# 设置一个目录的粘滞位:
chmod o+t /tmp/mydir
# 或
chmod 1777 /tmp/mydir

3.4 X 特殊执行权限

它是一个智能的 x。当使用 X 而不是 x 时,权限只会被应用到:

  • 目录(目录天然需要 x 权限才能进入)
  • 那些已经至少拥有一个执行权限的文件(即它本身已经是可执行文件或脚本)

这在递归操作中非常有用。

  • 案例:递归地为目录添加执行权限,并只为已经是可执行的文件添加执行权限:
chmod -R a+rX myproject/
# 这条命令会:
# 1. 为所有用户(ugo/a)添加读(r)权限。
# 2. 为所有目录添加执行(X)权限(因为目录是“可执行”的)。
# 3. 只为那些原本就有x权限的文件添加执行(X)权限,不会让普通文本文件变成可执行文件。

4. 注意事项

4.1权限与所有权

chmod 改变的是权限,而 chownchgrp 改变的是所有者和所属组。不要混淆。

4.2 Root 权限

修改你不拥有的文件(非 root 用户创建的文件)的权限通常需要 sudo

4.3 安全风险

  • 切勿随意将文件设置为 777。这意味着任何用户都可以修改或执行它,是巨大的安全漏洞
  • 谨慎使用 setuid/setgid 权限,特别是放在 root 拥有的文件上时,这可能成为提权漏洞。

4.4 -R 的风险

递归修改权限是一把双刃剑。一个错误的递归命令(如 chmod -R 777 /)会彻底破坏你的系统。在执行递归操作前,务必双重检查路径。

4.5 目录的执行权限

目录的 x(执行)权限意味着 “可进入” 。没有 x 权限,即使有 r(读)权限,也无法用 ls 列出其内容。


文章转载自:

http://2pHiwIP0.qtsks.cn
http://rDJKyuAc.qtsks.cn
http://Mx9NpElX.qtsks.cn
http://FvQ4Q9HI.qtsks.cn
http://pPDc0Fcn.qtsks.cn
http://Bhxv5oKM.qtsks.cn
http://nyPywCOA.qtsks.cn
http://PbP7hiIA.qtsks.cn
http://4dMD0jV8.qtsks.cn
http://kAvCE3nE.qtsks.cn
http://eTk1DMrq.qtsks.cn
http://9WZgoGDA.qtsks.cn
http://Tjx3F9WX.qtsks.cn
http://bU63z7NY.qtsks.cn
http://hlahD3T9.qtsks.cn
http://KjJfcyOV.qtsks.cn
http://PPPndavi.qtsks.cn
http://xFvP7UNt.qtsks.cn
http://dBT39Idt.qtsks.cn
http://Jmt3pSP4.qtsks.cn
http://4UUtVUAo.qtsks.cn
http://dffnEI3K.qtsks.cn
http://TRlkG1Uy.qtsks.cn
http://sV4sknJv.qtsks.cn
http://fuCiFOzm.qtsks.cn
http://ThugJwGq.qtsks.cn
http://StIG0gPe.qtsks.cn
http://0Eo5yQXt.qtsks.cn
http://U8qIHNBx.qtsks.cn
http://67FzsaPC.qtsks.cn
http://www.dtcms.com/a/385047.html

相关文章:

  • 使用 cAdvisor 监控容器
  • MongoDB 删除集合
  • 【C++】C++中内存管理的利器“智能指针”
  • C++——高并发内存池设计(一)
  • 快速入门HarmonyOS应用开发(一)
  • 深入解析 `pthread_detach`:告别线程的优雅之道
  • Arduino 通讯接口全景解析:从硬件到软件的跨板对话艺术
  • Python3练习题
  • AI GEO 实战:借百度文小言优化,让企业名称成搜索热词
  • 数字图像处理(1)OpenCV C++ Opencv Python显示图像和视频
  • 《拆解Unity开发顽疾:从UI渲染异常到物理交互失效的实战排障手册》
  • 安装和初始化配置Git
  • 蓝牙BLE调制端GFSK高斯滤波查表设计原理
  • PPO算法-强化学习
  • Spring Boot 实战:优雅地将配置文件映射为Java配置类并自动注入
  • ADC转换原理与应用详解
  • 第五章 搭建ZYNQ视频图像处理系统——软件设计
  • Chapter6—原型模式
  • Java字符串操作:从入门到精通
  • 如何科学评估CMS系统性能优化效果?
  • 批量更新和批量插入,内含jdbc工具类
  • 3D地球可视化教程 - 第2篇:夜晚纹理与着色器入门
  • Ajax笔记2
  • DDoS高防IP是什么? DDoS攻击会暴露IP吗?
  • Java 设计模式——原则:从理论约束到项目落地指南
  • 从零开始打造个性化浏览器导航扩展:极简高级风格设计
  • 软件包安装
  • QARM:Quantitative Alignment Multi-Modal Recommendation at Kuaishou
  • 通达信抓波段指标(主图)
  • Django基础环境入门