☰
Linux权限管理深度解析:从基础概念到实战应用
2026/9/27 18:00:56 网站建设 项目流程

1. 项目概述:为什么权限管理是Linux的基石

干了这么多年运维和开发,我越来越觉得,Linux系统里最容易被新手忽视,但又最要命的部分,就是权限管理。很多人刚接触Linux,觉得敲几个ls -l看看文件权限,知道chmod 755、chown怎么用就差不多了。但真到了实际生产环境,一个配置文件的权限设错了,可能导致服务起不来;一个目录的归属没弄对,自动化脚本就报“Permission denied”;更别提那些因为umask设置不当,导致新创建的文件谁都能读写的安全漏洞了。权限这东西,就像空气,平时感觉不到它的存在,一旦出了问题,立马让你寸步难行。

这一章,我们就来彻底掰扯清楚Linux的权限管理。它绝不仅仅是几个命令的简单组合,而是一套贯穿系统设计哲学的安全模型。从最基本的文件权限位,到深入骨髓的用户与组机制,再到那个默默无闻却至关重要的默认权限掩码umask,每一个细节都关乎系统的稳定与安全。无论你是想搭建个人服务器、从事运维工作,还是进行软件开发,吃透这一章,都能让你避开无数大坑,操作起来更加得心应手。接下来,我会结合大量实际案例和踩坑经验,带你从“知道”走向“精通”。

2. 权限管理的核心思想与模型拆解

2.1 一切皆文件与权限的绑定

Linux有一个著名的设计哲学:“一切皆文件”。这不仅指普通的文本文件、二进制程序,还包括目录、设备(如硬盘、键盘)、进程信息,甚至是网络套接字。既然都是“文件”,那么一套统一的权限管理机制就成为了可能。这套机制的核心,就是将访问控制信息直接绑定在文件系统的一个特殊数据结构——inode上。

当你执行ls -l时,看到的类似-rwxr-xr--的字符串,就是这种绑定的直观体现。它不是一个独立于文件的“属性表”,而是文件元数据的一部分。这种设计的精妙之处在于高效和统一:系统内核在每次访问文件时,无需查询额外的数据库,直接读取inode中的权限位即可做出裁决。理解这一点,就能明白为什么移动(mv)文件通常不会改变权限(因为inode没变),而复制(cp)文件会使用新创建的inode并继承目录的默认权限。

2.2 用户(User)、组(Group)与其他(Other)的三元组模型

Linux权限管理基于一个经典的三元组模型:文件所有者(User)、文件所属组(Group)和其他用户(Other)。这个模型是权限分配的基石。

  • 文件所有者(u):通常就是文件的创建者。拥有对该文件最高、最灵活的控制权,可以任意修改文件的权限和归属。
  • 文件所属组(g):一个用户组,组内的所有成员共享该组对应的权限。这个设计是为了方便团队协作。例如,一个项目组的所有成员可以同属于一个dev组,那么将项目目录的组权限设置为可读写,组内所有成员就都能操作了,无需为每个人单独设置。
  • 其他用户(o):指既不是文件所有者,也不在文件所属组里的任何其他系统用户。这通常代表了“公众”或“其他人”的访问级别。

这个三元组模型决定了权限分配的粒度。它不像一些现代RBAC(基于角色的访问控制)系统那样可以定义非常复杂的角色关系,但其简单、高效的特点,足以应对绝大多数系统管理和软件运行的需求。每个文件和目录,都独立地存储着针对这三类主体的权限设置。

2.3 读(r)、写(w)、执行(x)权限的深层含义

r、w、x这三个字母是权限的具体表现形式,但它们对普通文件和目录的含义有本质区别,这是新手最容易混淆的地方。

对于普通文件:

  • 读(r, 数值4):允许读取文件内容。例如用cat、less查看,或者被程序加载。
  • 写(w, 数值2):允许修改文件内容。包括清空、追加、覆盖。但删除文件的权限不在这里,它由文件所在目录的写权限决定。
  • 执行(x, 数值1):允许将文件作为程序或脚本来执行。对于二进制程序(如/bin/ls)或脚本(如#!/bin/bash开头的Shell脚本),此权限必须开启。

对于目录:

  • 读(r, 数值4):允许列出目录下的文件和子目录名称。执行ls命令成功的前提。
  • 写(w, 数值2):允许在目录内创建、删除、重命名文件和子目录。这是关键!要删除一个文件,你需要对该文件所在目录有写权限,而不一定需要对该文件本身有写权限。
  • 执行(x, 数值1):允许进入该目录,并将其作为当前工作目录(cd命令),或访问目录内文件的元数据(inode信息)。这是访问目录内任何文件的前提。如果一个目录没有x权限,即使你有r权限能看见里面有什么,也无法cd进去,也无法访问里面的任何文件。

注意:目录的x权限常被称为“搜索(search)”权限。没有它,路径名解析就无法通过这个目录节点,导致访问被拒绝。这是很多“Permission denied”错误的根源,尤其是当用户只有目录的r权限而没有x权限时。

3. 权限查看、设置与修改实战详解

3.1 使用 ls -l 和 stat 命令深度解读权限信息

ls -l是最常用的权限查看工具。输出的一行如:-rwxr-xr-- 1 alice devteam 2048 Jun 12 10:00 myscript.sh我们可以将其拆解:

  1. 第一个字符:文件类型。-代表普通文件,d代表目录,l代表软链接,等等。
  2. 后续9个字符:权限位。每3个一组,分别对应用户(u)、组(g)、**其他(o)**的rwx权限。-代表无此权限。本例中:rwx(用户可读、写、执行),r-x(组员可读、执行,不可写),r--(其他人仅可读)。
  3. 数字1:硬链接计数。
  4. alice:文件所有者。
  5. devteam:文件所属组。
  6. 后续为文件大小、修改时间和文件名。

对于更详细的信息,可以使用stat命令。stat filename会显示文件的inode编号、权限的八进制和符号表示、所有者和所属组的UID/GID、以及三个时间戳(访问Atime、修改Mtime、状态变更Ctime)。在排查复杂权限问题时,stat命令提供的inode信息和精确时间戳非常有用。

3.2 chmod命令:符号法与数字法的精髓与选用场景

chmod用于修改文件或目录的权限。它有两种主流用法:

1. 符号法(相对修改):通过操作符+(添加)、-(移除)、=(精确设置)来调整特定权限。

  • 格式:chmod [ugoa][+-=][rwx] file
    • u,g,o,a分别代表用户、组、其他、全部。
    • 例如:
      • chmod u+x script.sh:给所有者添加执行权限。
      • chmod g-w,o-r file.txt:移除组员的写权限和其他人的读权限。
      • chmod a=rw config.ini:设置所有人(所有者、组、其他)的权限为可读可写。
  • 优点:直观,适合对已有权限进行微调。
  • 缺点:需要知道当前权限,且命令较长。

2. 数字法(绝对设置):使用三位八进制数直接设置完整的权限。

  • 原理:将rwx视为二进制位,r=4,w=2,x=1。将需要的权限数值相加,得到一个0-7的数字。
    • 7 (4+2+1)=rwx
    • 6 (4+2)=rw-
    • 5 (4+1)=r-x
    • 4=r--
    • 0=---
  • 格式:chmod ABC file,其中A、B、C分别是代表用户、组、其他权限的八进制数。
    • 例如:
      • chmod 755 myscript:u=rwx (7),g=r-x (5),o=r-x (5)。这是可执行脚本和程序的经典权限。
      • chmod 644 config.txt:u=rw- (6),g=r-- (4),o=r-- (4)。这是配置文件的经典权限,所有者可读写,其他人只读。
      • chmod 700 private_dir:u=rwx (7),g=--- (0),o=--- (0)。目录仅所有者完全控制,其他任何人无法访问。
  • 优点:简洁、精确、不易出错,尤其在脚本和自动化任务中广泛应用。
  • 缺点:不够直观,需要记忆或计算数值。

选用建议:在交互式命令行中微调权限,用符号法。在脚本、配置文档或需要明确设定固定权限时,强烈推荐使用数字法,因为它能确保结果一致,避免因当前权限状态不同而导致意外。

3.3 chown与chgrp:改变归属权的操作与影响

权限是“谁能做什么”,而归属权是“谁是这个文件的主人/属于哪个组”。改变归属权通常需要root权限。

  • chown(change owner):改变文件所有者和/或所属组。

    • 格式:chown [新所有者][:新所属组] 文件
    • 示例:
      • sudo chown alice logfile.log:将文件所有者改为alice。
      • sudo chown :devteam project/:将目录project/的所属组改为devteam。
      • sudo chown alice:devteam server.conf:同时改变所有者和所属组。
    • 重要选项:-R,递归操作,常用于修改整个目录树的所有权。sudo chown -R alice:devteam /var/www/。
  • chgrp(change group):专门改变文件所属组。功能是chown的子集。

    • 格式:chgrp 新组名 文件
    • 示例:sudo chgrp www-data /var/www/html/index.php

实操心得:在Web服务器部署中,这是一个经典场景。假设Web服务器进程(如Nginx或Apache)以用户www-data运行。你的网站代码由开发者alice上传。为了让Web服务器能读取和执行代码,通常需要:sudo chown -R alice:www-data /var/www/myapp,然后设置目录权限为755(drwxr-xr-x),文件权限为644(-rw-r--r--)。这样,alice可以读写代码,www-data组可以读取和执行,确保了安全与功能的平衡。

3.4 特殊权限位:SUID, SGID, Sticky Bit的机制与风险

除了基本的rwx,还有三个特殊的权限位,它们设置在权限位的**用户执行位(x)**的位置,用另一个八进制数(位于普通权限三位数之前)表示。

1. SUID (Set User ID, 数值4)

  • 表现:在文件的用户执行位(x)上,如果该位原本是x,则显示为s(如-rwsr-xr-x);如果是-,则显示为S(大写,表示设置了SUID但无执行权限,这是无效状态)。
  • 作用:当用户执行这个设置了SUID的程序时,在执行期间,进程的有效用户ID(EUID)将临时变更为该文件的所有者,而非当前执行用户。
  • 经典案例:/usr/bin/passwd。普通用户执行passwd修改自己的密码时,需要写入/etc/shadow文件,而这个文件通常只有root可写。passwd命令设置了SUID且所有者为root,使得普通用户在执行它时,临时拥有了root权限去修改shadow文件。
  • 风险:SUID是巨大的安全风险点。如果一个属于root且设置了SUID的程序存在漏洞(缓冲区溢出等),攻击者可能利用它获得root shell。原则:尽可能减少系统SUID程序的数量,绝对不要给自己编写的普通程序随意设置SUID。

2. SGID (Set Group ID, 数值2)

  • 对文件的作用:类似SUID,但影响的是有效组ID(EGID),临时变更为文件的所属组。
  • 对目录的作用(更常用):在目录的组执行位(x)上显示为s或S。当一个目录设置了SGID位后,任何用户在此目录下新建的文件或子目录,其所属组将自动继承该目录的所属组,而不是创建者的主要组。这对于需要团队协作的共享目录极其有用。
  • 设置与示例:
    • 设置:chmod 2775 shared_dir或chmod g+s shared_dir
    • 查看:drwxrwsr-x(目录的组权限位是rws)
    • 效果:用户bob(主要组为bob)在shared_dir(所属组为devteam)里创建文件newfile,newfile的所属组会自动是devteam,而不是bob。

3. Sticky Bit (粘滞位, 数值1)

  • 表现:在目录的其他用户执行位(x)上显示为t或T(如drwxrwxrwt)。
  • 作用:设置在目录上。在设置了粘滞位的目录里,用户只能删除或重命名自己拥有的文件,即使他对该目录有写权限。这防止了用户随意删除他人的文件。
  • 经典案例:系统的临时目录/tmp。权限通常是drwxrwxrwt。所有用户都可以在里面创建文件,但只能删除自己的文件。
  • 设置:chmod 1777 /tmp或chmod o+t /tmp

特殊权限的数字表示法:在chmod的数字法中,它们是一个放在普通权限三位数之前的第四位数。

  • chmod 4755 file:设置SUID,普通权限755。
  • chmod 2755 dir:设置SGID,普通权限755。
  • chmod 1755 dir:设置Sticky Bit,普通权限755。
  • chmod 6755 file:同时设置SUID和SGID(4+2=6)。

4. 默认权限与umask的深入剖析

4.1 文件与目录的初始权限是如何产生的

当我们创建一个新文件或目录时,系统并不是随机赋予它一个权限,而是遵循一个明确的规则。这个规则基于一个预设的“最大权限”减去一个“权限掩码”。

  • 文件的最大默认权限:666(-rw-rw-rw-)。即,如果没有任何限制,新创建的文件应该是所有人可读可写的。但系统从不默认赋予执行权限(x),因为一个文本文件、数据文件默认可执行是危险且无意义的。
  • 目录的最大默认权限:777(drwxrwxrwx)。目录需要x权限才能进入,所以最大权限包含了执行位。

4.2 umask的作用原理与计算方法

umask(user mask)是一个进程属性,它定义了创建新文件或目录时,需要从最大默认权限中“屏蔽”掉哪些权限。它是一个八进制数。

  • 查看当前umask:直接在终端输入umask。通常普通用户的默认值是0002,root用户的默认值是0022。
  • 理解输出:0002和0022是四位数,但最后三位才是我们关心的。0022表示屏蔽掉**组(g)和其他(o)的写(w)权限。0002表示只屏蔽掉其他(o)**的写(w)权限。
  • 权限计算(关键):
    • 对于文件:最终权限 =666-umask(按位相减)。注意,这里不是数学减法,而是权限位的“去除”。更准确的理解是:umask中为1的位,在最终权限里被屏蔽(设为0)。
    • 对于目录:最终权限 =777-umask。

计算示例(以umask=0022为例):

  1. 创建文件:
    • 最大权限666二进制:110 110 110
    • umask022二进制:000 010 010(屏蔽组写和其他写)
    • 按位“与”操作(更准确):666 & ~022。~022是取反。
    • 结果权限:110 100 100, 即八进制644(-rw-r--r--)。
  2. 创建目录:
    • 最大权限777二进制:111 111 111
    • umask022二进制:000 010 010
    • 结果权限:111 101 101, 即八进制755(drwxr-xr-x)。

这就是为什么默认情况下,你创建的文件是644,目录是755。

4.3 如何永久与临时修改umask值

  • 临时修改(仅对当前Shell会话有效):

    • umask 0007:设置为007,屏蔽其他用户的所有权限(rwx)。新创建文件权限为660,目录为770。
    • umask 077:设置为077,屏蔽组和其他用户的所有权限。新创建文件权限为600,目录为700(最严格,仅所有者自己可访问)。
  • 永久修改(对用户或全局生效):

    • 针对单个用户:将umask设置命令写入用户的家目录下的Shell配置文件。
      • Bash用户:编辑~/.bashrc,在末尾添加一行,例如umask 002。然后执行source ~/.bashrc使其生效。
      • 注意:有时也需要写入~/.profile,以确保在图形界面登录时也能生效。
    • 针对所有用户(系统级):修改全局配置文件,如/etc/profile或/etc/bash.bashrc。但不推荐随意修改全局设置,除非有明确的、统一的安全策略需求。

注意事项:在生产服务器上,特别是共享环境的服务器,合理设置umask至关重要。一个过于宽松的umask(如000)可能导致脚本、配置文件被非授权用户读取或修改,引发信息泄露或安全事件。通常,将umask设置为002(便于同组协作)或022(更严格)是常见做法。

5. 权限管理高级应用与实战场景

5.1 ACL(访问控制列表):应对复杂权限需求的利器

标准的三元组(u,g,o)权限模型虽然简单,但在复杂的权限需求面前就显得力不从心。例如,你想让一个特定的用户jack能读取某个文件,但他既不是文件所有者,也不在文件所属组里,用标准模型就无法实现,除非为他单独创建一个组,这很繁琐。这时就需要ACL(Access Control List)。

ACL可以为单个文件或目录设置更精细的访问控制,允许你为任意用户或组指定权限。

  • 查看ACL:getfacl filename
    • 输出会显示文件的所有者、所属组、以及额外的用户和组条目。
  • 设置ACL:
    • setfacl -m u:jack:r file.txt:为用户jack添加对file.txt的读权限。
    • setfacl -m g:contractors:rwx project/:为组contractors添加对project/目录的读、写、执行权限。
    • setfacl -x u:jack file.txt:删除用户jack的ACL条目。
    • setfacl -b file.txt:删除文件的所有扩展ACL条目,恢复为标准权限。
  • 默认ACL(仅对目录有效):可以设置在目录上,使得在该目录下新建的文件和子目录自动继承这些ACL规则。
    • setfacl -m d:u:jack:rwx shared_dir/:为shared_dir设置默认ACL,以后在此目录下创建的任何新项目,jack都会自动拥有rwx权限。

使用前提:文件系统需要支持ACL(如ext4, xfs等),并且在挂载时启用了acl选项(现代发行版通常默认启用)。你可以通过mount | grep acl或tune2fs -l /dev/sda1 | grep acl来检查。

5.2 权限在系统服务与安全中的关键作用

权限管理是系统安全的基石。一个配置不当的权限,可能就是攻击者入侵的突破口。

  • 最小权限原则:这是安全领域的黄金法则。任何用户、进程或服务,都应该只拥有其完成工作所必需的最小权限。例如:
    • Web服务器进程(如www-data)通常不应该有Shell登录权限,其家目录也应严格限制。
    • 数据库进程(如mysql)通常只应访问自己的数据目录和配置文件。
    • 避免使用root用户运行应用程序。永远问自己:这个任务真的需要root权限吗?
  • 敏感文件权限:
    • /etc/shadow(存储加密密码):权限应为640或400,所有者root,组shadow,确保只有root和必要的认证程序能读。
    • ~/.ssh/目录及内部文件:权限应为700(目录)和600(私钥文件id_rsa),防止私钥泄露。
    • 用户家目录:通常应为755(drwxr-xr-x)或750,防止其他用户随意浏览。
  • SUID/SGID程序审计:定期检查系统中的SUID/SGID程序,移除不必要的。可以使用命令:
    • find / -type f -perm /4000 2>/dev/null查找SUID文件。
    • find / -type f -perm /2000 2>/dev/null查找SGID文件。
    • 对于非系统关键的程序(如/bin/ping通常需要SUID来使用原始套接字),要特别警惕。

5.3 共享目录的权限规划最佳实践

在团队协作环境中,如何设置一个安全的共享目录是常见需求。假设有一个项目目录/shared/project,需要让dev组的成员都能读写,而其他用户不能访问。

方案一:使用标准权限+SGID(推荐)

  1. 创建目录并设置所属组:sudo mkdir -p /shared/project && sudo chown :dev /shared/project
  2. 设置权限和SGID位:sudo chmod 2775 /shared/project。此时权限为drwxrwsr-x。
  3. 将团队成员加入dev组:sudo usermod -aG dev alice,sudo usermod -aG dev bob。
  4. 效果:任何dev组成员都可以在/shared/project内创建文件,并且新创建的文件会自动属于dev组,保证了组内成员都能互相读写。SGID位是关键,它避免了每个人创建的文件属于自己的主要组,导致其他组员无法操作。

方案二:使用ACL(更灵活)如果权限需求更复杂,比如还需要给某个特定外部用户只读权限。

  1. 先设置基础权限:sudo chmod 775 /shared/project,sudo chown :dev /shared/project。
  2. 为外部用户guest添加只读ACL:sudo setfacl -m u:guest:rx /shared/project。
  3. (可选)设置默认ACL,让新建内容也继承组权限:sudo setfacl -m d:g:dev:rwx /shared/project。

6. 常见权限问题排查与修复实录

权限问题引发的错误五花八门,但报错信息通常很直接:“Permission denied”。下面是一些典型场景和排查思路。

6.1 “Permission denied” 错误诊断流程图

遇到权限错误,可以按以下步骤排查:

  1. 确认当前用户:whoami。
  2. 确认文件/目录权限:ls -l /path/to/item。
  3. 对文件操作失败:
    • 读取失败:检查用户对该文件是否有r权限。
    • 写入失败:检查用户对该文件是否有w权限。注意:如果是删除失败,检查的是对文件所在目录是否有w和x权限。
    • 执行失败:检查文件是否有x权限,并且确认文件确实是可执行格式(脚本要有shebang,二进制文件要匹配架构)。
  4. 对目录操作失败:
    • cd失败或ls失败:检查用户对该目录是否有x权限(进入权限)。没有x权限,r权限也无效。
    • 在目录内创建/删除文件失败:检查用户对该目录是否有w和x权限。
  5. 检查文件所有者/组:确认当前用户是否匹配所有者(u),或是否在所属组(g)中,以应用相应的权限位。
  6. 检查父目录权限:访问一个文件,需要对其路径上的每一级目录都有x权限。例如访问/home/alice/docs/file.txt,需要对/、home、alice、docs都有x权限。
  7. 检查特殊权限和ACL:使用ls -l看是否有s、t位,使用getfacl查看是否有额外的ACL规则。
  8. 检查SELinux/AppArmor:如果以上都正常,可能是强制访问控制(如SELinux)在阻止。查看系统日志(/var/log/audit/audit.log或journalctl)或使用ls -Z查看上下文,临时调试可尝试setenforce 0(仅用于测试,生产环境慎用)。

6.2 典型案例分析与解决

案例1:Web服务器无法读取网站文件

  • 现象:访问网站出现“403 Forbidden”或“Permission denied”日志。
  • 排查:
    1. 假设网页根目录是/var/www/html,Web服务器以www-data用户运行。
    2. ls -l /var/www/html查看目录和文件权限。假设index.html权限是640,所有者是root,组是root。
    3. www-data用户既不是root,也不在root组,而640权限只允许所有者读,组员读,其他人无权限。因此www-data无法读取。
  • 解决:
    • 方法A(改归属):sudo chown -R www-data:www-data /var/www/html,然后设置合理权限(如目录755,文件644)。
    • 方法B(改权限):保持所有者是root(便于管理员维护),将组改为www-data,并给组加读权限:sudo chgrp -R www-data /var/www/html && sudo chmod -R g+r /var/www/html。对于目录,还需要x权限:sudo find /var/www/html -type d -exec chmod g+x {} \;。

案例2:用户无法删除自己创建的文件

  • 现象:用户alice在共享目录/shared里创建了文件myfile.txt,但无法删除。
  • 排查:
    1. ls -l /shared/myfile.txt显示文件属于alice,她有rw-权限,看起来可以删。
    2. 关键:删除文件的操作对象是目录,不是文件本身。检查目录权限:ls -ld /shared。发现目录权限可能是drwxr-xr-x(755),所属组是dev。
    3. alice不在dev组里,因此她作为“其他用户(o)”,对目录只有r-x权限(读和执行),没有写(w)权限。没有目录的写权限,就不能删除其中的文件,即使这个文件是她自己的。
  • 解决:要么将alice加入dev组(sudo usermod -aG dev alice),并确保目录组权限有w(如775);要么修改目录的o权限为rwx(chmod o+w /shared,不推荐,太宽松)。

案例3:脚本文件有执行权限却无法执行

  • 现象:./myscript.sh报错Permission denied,但ls -l显示权限是-rwxr-xr-x。
  • 排查:
    1. 检查脚本第一行(shebang):head -1 myscript.sh。确保指向的解释器路径正确,例如#!/bin/bash。
    2. 检查脚本文件格式:可能是Windows换行符(CRLF)导致的问题。使用cat -A myscript.sh查看,行尾如果是^M$,则包含CRLF。或者用file myscript.sh查看。
    3. 检查文件系统是否挂载为noexec选项:mount | grep /path/to/script。如果所在分区挂载时有noexec,则上面的任何文件都无法执行。
  • 解决:
    • shebang错误:修正为正确的解释器路径。
    • 换行符问题:使用dos2unix myscript.sh转换。
    • noexec问题:需要重新以允许执行的方式挂载文件系统(修改/etc/fstab并重启或重新挂载),或者将脚本移到其他可执行的文件系统。

6.3 权限管理常用命令速查与技巧

  • 快速备份并恢复权限:在重大修改前,可以备份目录的权限和所有权。

    • 备份:getfacl -R /path/to/dir > /backup/permissions.acl
    • 恢复:setfacl --restore=/backup/permissions.acl
    • (对于不支持ACL的环境,可以用find配合tar备份元数据,但getfacl/setfacl是更现代和完整的方式)
  • 查找特定权限的文件:

    • find /path -type f -perm 644:查找权限恰好是644的文件。
    • find /path -type f -perm -644:查找权限包含644所有位的文件(即所有者至少可读写,组员至少可读,其他人至少可读)。
    • find / -type f -perm /4000 -ls 2>/dev/null:查找所有设置了SUID位的文件。
  • 递归修改权限时的谨慎操作:

    • chmod -R 755 /some/dir:这个命令很危险!它会将目录下所有文件也改为可执行(755)。对于文件,通常我们只需要644。
    • 安全做法:分别处理目录和文件。
      • find /some/dir -type d -exec chmod 755 {} \;# 只修改目录
      • find /some/dir -type f -exec chmod 644 {} \;# 只修改文件
    • 或者使用更精细的find命令:find /some/dir -type f -name "*.sh" -exec chmod 755 {} \;只给脚本加执行权限。
  • 使用--reference参数复制权限:如果你希望文件B拥有和文件A完全一样的权限,不需要手动计算数字。chmod --reference=fileA fileB。这个技巧在需要保持权限一致的场景下非常高效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询