0

0

Linux如何设置目录的执行权限

P粉602998670

P粉602998670

发布时间:2025-09-06 12:18:01

|

588人浏览过

|

来源于php中文网

原创

目录的执行权限是访问其内容的“钥匙”,使用chmod命令可通过符号或八进制模式设置,常见权限为755(所有者rwx,组和其他用户rx),递归设置时推荐结合find命令分别处理文件和目录,避免误加执行权限。

linux如何设置目录的执行权限

在Linux中,设置目录的执行权限(

x
)并非意味着你可以“运行”这个目录,而是赋予了你进入(
cd
)、遍历(
traverse
)这个目录的权力。没有这个权限,即使你对目录下的文件有读写权限,你也无法访问它们,系统会直接报错“Permission denied”。简单来说,目录的执行权限是访问其内容的“钥匙”。

解决方案

要设置Linux目录的执行权限,最常用的工具

chmod
命令。你可以通过符号模式或八进制数字模式来操作。

使用符号模式:

如果你想给所有用户(

a
)添加执行权限,或者仅仅是所有者(
u
)、组(
g
)、其他用户(
o
)添加,可以这样做:

  • 给所有者添加执行权限:
    chmod u+x my_directory/
  • 给组添加执行权限:
    chmod g+x my_directory/
  • 给其他用户添加执行权限:
    chmod o+x my_directory/
  • 给所有用户添加执行权限:
    chmod a+x my_directory/
    # 或者更简洁地
    chmod +x my_directory/

使用八进制数字模式:

这种方式更精确,因为它一次性设定了所有的权限位。对于目录,一个常见的、安全的权限设置是

755
,这意味着:

  • 所有者(
    u
    )拥有读、写、执行权限(
    rwx
    ,对应数字
    7
    )。
  • 组(
    g
    )拥有读、执行权限(
    rx
    ,对应数字
    5
    )。
  • 其他用户(
    o
    )拥有读、执行权限(
    rx
    ,对应数字
    5
    )。

要将目录设置为

755
权限:

chmod 755 my_directory/

如果你需要更严格的权限,比如只允许所有者访问,那么可以设置为

700

chmod 700 my_directory/

递归设置权限:

如果你需要为一个目录及其所有子目录和文件递归地设置权限,可以使用

-R
选项。但这里有个小陷阱,因为文件和目录的执行权限含义不同,直接
chmod -R 755 .
可能会给所有文件都加上执行权限,这通常不是我们想要的。更推荐的做法是结合
find
命令来分别处理文件和目录:

  • 递归地给所有子目录添加执行权限(并设置为755):
    find my_directory/ -type d -exec chmod 755 {} +
  • 递归地给所有文件添加读写权限(并设置为644,如果需要):
    find my_directory/ -type f -exec chmod 644 {} +

    (这里

    644
    意味着文件所有者读写,组和其他用户只读,不带执行权限)

目录的执行权限究竟意味着什么?它和文件执行权限有何不同?

我个人觉得,很多人初学Linux时都会被这个“执行权限”搞混,尤其是在目录上。它和文件上的“执行”完全是两码事。对于一个文件来说,

x
权限意味着你可以将它当作一个程序或脚本来运行。比如,一个Shell脚本,如果你没有给它
x
权限,即使你用
bash script.sh
可以运行,但直接
./script.sh
就会报错“Permission denied”。

然而,对于目录,

x
权限的核心含义是“遍历”(traverse)或“进入”(enter)。想象一下,一个目录就像一个房间,
x
权限就是你进入这个房间的钥匙。

  • 如果你有目录的
    x
    权限,你就可以使用
    cd
    命令进入这个目录。
  • 如果你有目录的
    x
    权限和
    r
    (读)权限,你不仅能进入,还能列出(
    ls
    )这个目录下的文件和子目录。
  • 如果你只有目录的
    r
    权限而没有
    x
    权限,你或许能看到目录的名称(如果父目录允许),但你无法
    cd
    进去,也无法列出其内容,即使你知道里面有个文件,你也无法访问。系统会告诉你“Permission denied”。这就像你看到一扇门,知道它存在,但没有钥匙,你进不去也看不到里面有什么。

所以,目录的

x
权限是访问其内部所有内容的基础。这是一个非常重要的区分点,理解了它,很多“Permission denied”的问题就能迎刃而解。

在哪些常见场景下,我需要调整目录的执行权限?

这几乎是日常Linux操作中不可避免的一部分,我常常会遇到因为目录权限设置不当而导致的问题。以下是一些非常典型的场景:

  1. Web服务器配置(Apache, Nginx等)

    • 当你在
      /var/www/html
      或用户主目录下的
      public_html
      中部署网站时,这些目录及其父目录链(比如
      /var/www
      甚至
      /var
      )都需要有适当的
      x
      权限,才能让Web服务器进程(通常以
      www-data
      nginx
      用户运行)遍历到你的网站文件。如果缺少,用户访问网站就会看到
      403 Forbidden
      错误。
    • 我经常看到有人把整个网站目录设置为
      777
      ,虽然能解决问题,但安全风险巨大。正确的做法是目录
      755
      ,文件
      644
      ,确保Web服务器用户有读和遍历权限。
  2. 用户主目录和共享目录

    • 你的主目录(
      ~/
      ,比如
      /home/username
      )通常需要至少
      700
      750
      的权限,确保你能够登录并访问自己的文件。如果其他用户需要访问你主目录下的某个子目录(比如共享文件夹),那么从根目录到那个子目录的路径上的所有目录,都至少需要对这些用户有
      x
      权限。
    • 在团队协作中,创建一个共享目录时,所有团队成员的用户组都需要对该目录有
      rx
      权限(例如
      775
      ),才能互相访问和操作。
  3. 脚本或程序的运行环境

    发卡宝-卡密寄售系统
    发卡宝-卡密寄售系统

    发卡宝是一个专业的软件卡密等虚拟商品在线交易平台,拥有多种兑换方式,费率低,结算快,正规企业平台一直稳定运营,24小时不间断提供自动发卡服务。【模板说明】试用版自带一套模板(响应式)【环境支持】PHP环境 / 200M或以上空间大小 / 开启父路径 / 设置index.php为默认首页 / 目录写入权限需要开启【数据库】MySQL【安装步骤】将文件上传至空间目录,运行“http://域名/inst

    下载
    • 如果你有一个程序需要访问某个配置文件目录,或者需要在一个特定目录中创建临时文件,那么这个程序运行的用户就必须对这些目录有
      x
      权限。
    • 有时,我会把一些自定义脚本放在
      /usr/local/bin
      之类的目录中,确保这些目录的
      x
      权限是关键,这样系统才能在
      PATH
      中找到并执行这些脚本。
  4. FTP/SFTP访问

    • 当用户通过FTP或SFTP客户端连接到服务器时,他们需要对他们被限制的根目录以及他们想要访问的任何子目录有
      x
      权限,否则他们将无法导航目录树。
  5. 备份和归档操作

    • 使用
      tar
      rsync
      等工具进行备份时,如果源目录路径中的任何一个目录缺少
      x
      权限,这些工具就无法遍历到子目录和文件,导致备份失败或不完整。

这些场景提醒我们,目录的

x
权限是文件系统可访问性的基石,其重要性不亚于文件的读写权限。

如何安全有效地管理大量目录的执行权限?

管理大量目录的执行权限确实需要一些技巧和策略,尤其是要兼顾安全性和效率。我个人在处理这类问题时,会倾向于使用一些组合命令和系统级的默认设置。

  1. 结合

    find
    命令进行精细化操作: 这是最灵活也最推荐的方法。
    find
    命令可以让你根据文件类型(目录或文件)来执行不同的
    chmod
    操作,从而避免误伤。

    • 给所有子目录设置执行权限(例如,

      755
      ):

      find /path/to/your/project -type d -exec chmod 755 {} +

      这里

      -type d
      确保只对目录操作,
      755
      给了所有者读写执行,组和其他用户读和执行的权限。

    • 给所有文件设置读写权限(例如,

      644
      ):

      find /path/to/your/project -type f -exec chmod 644 {} +

      -type f
      确保只对文件操作,
      644
      给了所有者读写,组和其他用户只读的权限,通常文件不需要执行权限,除非它是脚本。

    这种分离处理的方式,可以避免给普通文件不必要的执行权限,提高安全性。

  2. 利用

    umask
    设置默认权限:
    umask
    是一个非常强大的工具,它定义了新创建的文件和目录的默认权限。它是一个“权限掩码”,从最大权限(文件
    666
    ,目录
    777
    )中减去
    umask
    值来得到最终权限。

    • 常见的

      umask
      值是
      0022

      • 对于目录:
        777 - 022 = 755
        。新创建的目录默认就是
        755
      • 对于文件:
        666 - 022 = 644
        。新创建的文件默认就是
        644
        。 这通常是Web服务器环境下的一个安全且实用的默认设置。
    • 如果你希望组用户也能写入(例如在协作环境中),可以设置

      umask 0002

      • 对于目录:
        777 - 002 = 775
      • 对于文件:
        666 - 002 = 664
        。 这意味着组用户对新创建的文件和目录都有写权限。

    你可以在用户的

    ~/.bashrc
    ~/.profile
    或系统级的
    /etc/profile
    /etc/bash.bashrc
    中设置
    umask
    ,这样每次登录或启动Shell时都会生效。

  3. 考虑使用 ACLs (Access Control Lists) 进行更细粒度的控制: 当传统的

    rwx
    权限无法满足复杂需求时,比如你需要给特定用户或组在某个目录中设置不同的权限,而又不影响其他用户,ACLs就派上用场了。
    setfacl
    getfacl
    命令可以帮助你实现这一点。

    例如,给用户

    john
    /data/project
    目录中添加读写执行权限:

    setfacl -m u:john:rwx /data/project

    这比

    chmod
    更强大,因为它不改变文件原有的所有者、组和其他用户的权限位。不过,使用ACLs会增加一些管理上的复杂性,通常在共享存储或多用户协作的复杂场景下才需要。

  4. 版本控制系统中的权限管理: 像Git这样的版本控制系统,通常只会跟踪文件的执行位(

    x
    ),而不会跟踪所有权或完整的
    rwx
    权限。这意味着当你从Git仓库克隆或拉取代码时,你可能需要手动或通过脚本来设置正确的权限。我通常会在项目的部署脚本中加入
    find
    chmod
    的命令,以确保部署后文件和目录的权限是正确的。

管理大量目录权限的关键在于理解权限的含义,选择合适的工具,并预先规划好权限策略。避免盲目地使用

chmod -R 777
,那几乎总是一个坏主意。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

230

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

501

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

498

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

227

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

335

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3510

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

21

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

26

2026.01.13

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号