根本原因是脚本缺少执行权限位(x)或文件系统挂载禁用执行;解决方法包括:①chmod u+x添加执行权;②图形界面勾选“执行”权限;③remount exec解除noexec限制;④pkexec提权运行;⑤chown修正所有权后chmod赋权。

如果您在统信UOS中双击或终端执行.sh脚本时提示“权限被拒绝”“command not found”或直接无响应,则根本原因在于该脚本文件缺少可执行权限位(x),或文件系统挂载选项禁用了执行功能。以下是解决此问题的多种方法:
一、使用chmod命令添加执行权限
Linux系统要求脚本必须具备执行位(x)才能通过./script.sh方式运行;仅靠sh script.sh虽可绕过权限检查,但会丢失bash特性和环境变量支持。
1、在文件管理器中右键目标脚本,选择“在终端中打开”,进入其所在目录。
2、执行命令查看当前权限:ls -l deploy.sh,确认输出中所有者权限位不含x(如显示-rw-r--r--)。
3、为所有者添加执行权限:chmod u+x deploy.sh。
4、验证是否生效:ls -l deploy.sh,应显示-rwxr--r--或类似含x的权限字符串。
5、在终端中运行:./deploy.sh,观察是否正常启动。
二、通过图形界面属性设置执行权限
该方式无需记忆命令,适合不熟悉终端操作的用户,直接在文件管理器中完成权限勾选,实时生效。
1、在文件管理器中右键点击目标.sh脚本,选择“属性”。
2、切换至“权限”选项卡,找到“所有者”权限组。
3、勾选“执行”复选框;若需允许同组或其他用户运行,也相应勾选对应组的“执行”项。
4、点击“应用”按钮保存更改,系统立即更新权限状态。
5、双击脚本图标,确认是否弹出执行确认对话框或直接运行。
三、检查并修复文件系统noexec挂载限制
当脚本位于NTFS/FAT格式的Windows分区或外部U盘上时,统信UOS默认使用noexec选项挂载,此时即使设置+x也无法执行任何程序。
1、执行命令查看挂载情况:mount | grep noexec,定位到含noexec的行及对应设备路径(如/dev/sdb1)。
2、临时重新挂载启用执行:sudo mount -o remount,exec /mnt/windows(将/mnt/windows替换为实际挂载点)。
3、再次运行ls -l deploy.sh,确认权限已含x,再尝试./deploy.sh。
4、若需永久生效,编辑/etc/fstab,在对应分区行末尾的挂载选项中添加exec,例如:defaults,exec。
四、使用pkexec以管理员身份运行脚本
当脚本需访问系统级资源(如修改网络配置、重启服务)且当前用户无足够权限时,可借助pkexec临时提权,避免全局开放执行权限。
1、确保脚本已具备执行权限(参考方法一或二)。
2、在终端中执行:pkexec ./deploy.sh。
3、弹出图形化认证窗口后,输入当前用户的登录密码。
4、认证通过后,脚本将以root权限运行,可操作受保护路径与服务。
五、修正脚本所有权并递归授权
若脚本属主为root或其他用户,普通用户即使拥有执行位也无法调用execve()系统调用,必须先变更归属再赋权。
1、执行命令查看归属:ls -lha deploy.sh,确认第三列(所有者)是否为当前用户名。
2、若属主非当前用户,执行所有权变更:sudo chown $USER:$USER deploy.sh。
3、同步赋予标准执行权限:chmod 755 deploy.sh。
4、验证归属与权限均正确后,再次尝试./deploy.sh运行。










