You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Server中脚本内执行chmod a+x无效,运行脚本遭权限拒绝

解决脚本内执行chmod后仍提示Permission Denied的问题

你遇到的这个问题确实有点让人困惑——明明ls -l显示update.sh已经是-rwxrwxrwx的全权限,主脚本里也执行了chmod a+x,但就是无法运行。结合Ubuntu Server 20.04的环境,我给你梳理几个最可能的原因和解决方案:

1. 检查/test分区的挂载属性

最常见的元凶是/test所在的分区被挂载时添加了noexec(禁止执行)属性。这个属性会直接忽略文件的执行权限设置,哪怕你给了rwx也没用。

怎么验证?

运行这条命令查看分区挂载参数:

mount | grep /test

如果输出里能看到noexec字样,那就是它的问题了。

怎么解决?

  • 临时修复(重启后失效):
sudo mount -o remount,rw,exec /test
  • 永久修复:编辑/etc/fstab文件,找到对应/test的挂载行,删掉noexec参数,保存后执行sudo mount -a让修改生效。

2. 调整unzip的解压参数

有时候unzip工具默认不会保留原始文件的权限设置,哪怕你之后手动加了chmod,也可能因为某些隐藏的权限问题导致执行失败。你可以试试给unzip加上-X参数,强制保留原文件的权限和属性:

把主脚本里的unzip命令改成:

unzip -o -X update-file.zip

这个参数会让解压后的文件完全继承压缩包里的权限,可能解决权限不生效的问题。

3. 显式指定Shell运行脚本

有时候即使权限没问题,shebang行(就是脚本开头的#!/bin/bash)也可能因为某些原因无法被正确解析。你可以试试在主脚本里不用直接运行update.sh,而是显式调用bash来执行它:

替换主脚本里的运行命令:

# 原来的:/test/update/update.sh
bash /test/update/update.sh

这样相当于让bash主动读取并执行脚本内容,绕开了系统对脚本文件本身的执行权限检查(本质是bash有执行权限,它去处理脚本内容)。

4. 检查文件系统完整性

极端情况下,文件系统损坏可能导致权限显示和实际生效不一致。你可以尝试修复文件系统(注意要先卸载分区,或者进入单用户模式操作):

sudo umount /test
sudo fsck /dev/[你的分区设备名]

比如/test对应的设备是/dev/sda3,就运行sudo fsck /dev/sda3,修复可能存在的文件系统错误。


内容的提问来源于stack exchange,提问作者Floating Sunfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:47:28