Linux上执行Shell脚本运行失败提示Permission denied一个问题,挺好的问题,切中了知识盲点。

问题现象

Shell脚本在/tmp目录下,执行./test.sh运行失败,提示Permission denied。

问题分析

1、检查ls -al test.sh脚本是否有可执行权限。权限为777。看来套路不行啊。。以前通常90%都是这个原因引起的。

2、尝试使用sh test.sh运行,可以执行。为啥。。

3、是/tmp目录没有执行权限?执行stat / 和stat /tmp发现权限都满足。。有点慌。。解决不了了。下图stat命令执行结果供参考。

4、借助搜索。发现是/tmp文件系统的属性被设置了noexec。noexec表示对应文件系统不允许执行可执行程序,即使文件具有可执行过权限。通常是考虑安全原因会这么设置。

问题解决

1、将脚本放到其他不具有noexec文件系统目录执行或者使用sh test.sh运行。

2、如果可以将/tmp文件系统中noexec属性去掉,可以使用如下操作步骤(说明:仅限测试环境操作)

(1)在/etc/fstab文件中将/tmp文件系统的noexec属性删掉。

(2)重新挂载/tmp文件系统。执行umount /tmp; mount /tmp将/tmp文件重新挂载。

知识拓展

这里主要是因为不了解文件系统挂载参数的约束导致问题无法及时解决。学习下/etc/fstab文件及挂载参数内容。

/etc/fstab文件内容总共包含6列。

第一列:Device:磁盘设备文件或者该设备的Label、UUID

第二列:Mount point:设备的挂载点,就是你要挂载到哪个目录下。

第三列:filesystem:磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等。可以使用df -T查看

第四列:parameters:文件系统的参数

Async/sync 设置是否为同步方式运行,默认为async(性能较佳)

auto/noauto  当执行mount -a 的命令时,此文件系统是否被主动挂载。默认为auto

rw/ro   是否以只读或者读写模式挂载

exec/noexec   限制此文件系统内是否能够运行可执行文件。

user/nouser是否允许用户使用mount命令挂载

suid/nosuid 是否允许SUID的存在

Usrquota 启动文件系统支持磁盘配额模式。这个涉及到磁盘配额的知识。有兴趣可以扩展看看

Grpquota 启动文件系统对群组磁盘配额模式的支持

Defaults  同时具有rw,suid,dev,exec,auto,nouser,async等参数。基本上,默认使用Defaults设置即可。

第五列:能否被dump备份命令作用:dump是一个用来作为备份的命令。通常值为0或者1。测试环境很少用。

第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。一般来说,根目录设置为1,其他的文件系统设置为2。以前经常会在IBM的AIX系统遇到该问题。

总结

看了这个案例,相信如果你以后再遇到Shell脚本运行失败提示Permission denied的问题,解决它的概率就比别人大很多了。。

/tmp目录下执行脚本失败提示Permission denied的更多相关文章

  1. [转帖]Linux /tmp目录下执行脚本失败提示Permission denied

    Linux /tmp目录下执行脚本失败提示Permission denied https://www.cnblogs.com/linyfeng/p/11087655.html 国产化的环境上 就有一个 ...

  2. linux 下执行.sh文件提示permission denied

    linux 下执行.sh文件提示permission denied 在脚本文件目录下运行命令,赋予权限: chmod 777 *.sh or chmod +x  *.sh

  3. 执行*.sh脚本时提示Permission denied

    使用chmod修改.sh的权限 chmod u+x *.sh 再次执行

  4. linux下执行脚本失败的解决办法

    现象: 1的解决办法:赋予该文件可执行权限即可,chmod +x docker.sh 2的解决办法:https://blog.csdn.net/youzhouliu/article/details/7 ...

  5. shell 脚本中的当前工作目录等于执行脚本时所在的工作目录

    1. 测试脚本 在当前目录下创建 h1 h2两个文件夹 2. 在脚本所在目录执行脚本 在当前目录下创建了h1 h2两个目录 3. 在其他目录爱=下执行脚本 在其他目录下执行脚本时,在执行脚本所在的目录 ...

  6. 安卓8.0真机运行appium1.4遇到的问题:运行自动化脚本,手机自动安装 settings.apk和unclock.apk,执行脚本时提示安装UnicodeIME-debug.apk失败,怎么关掉自动安装?

    运行自动化脚本,手机自动安装 settings.apk和unclock.apk,执行脚本时提示安装UnicodeIME-debug.apk失败,怎么关掉自动安装? 这3个apk的目录分别是: D:\P ...

  7. linux 下执行.sh文件总是提示permission denied

      linux 下执行.sh文件总是提示permission denied 如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) chmod 777 *.sh or ch ...

  8. SpringBoot使用logback自定义配置时遇到的坑 --- 在 /tmp目录下自动生成spring.log文件

    问题描述 SpringBoot项目使用logback自定义配置后,会在/tmp/ 目录下生成 spring.log的文件(如下图所示). 解决方案 通过各种资料的搜索,最终发现问题的所在(logbac ...

  9. 解决从内部存储设备安装apk提示Permission Denied

    做应用商店,下载apk,考虑一种情况,如果没有sd卡的情况下就将apk下载到 Internal Cache目录下. 下载都正常,但是在安装的时候提示Permission Denied /data/da ...

随机推荐

  1. How to do IF NOT EXISTS in SQLite

    http://stackoverflow.com/questions/531035/how-to-do-if-not-exists-in-sqlite How about this? INSERT O ...

  2. centos7 二次封装定制

  3. 最新昆石VOS2009/VOS3000手机号段导入文件(手机归属地)

    使用2017年4月最新版手机号段归属地制作,支持所有版本的VOS 共360569条记录,兼容所有版本的昆石VOS,包括VOS2009.vos3000.vos5000 导入比较简单.下载后解压到桌面在V ...

  4. PCB MongoDb安装与Windows服务安装

    工程MI流程指示做成Web网页形式,采用MVC框架制作,数据传输用Web API方式, 最终此网页会挂到公司各系统中访问,为了提高访问并发量,并将工程数据统一结构化管理, 采用No SQL Mongo ...

  5. CALayer帧动画

    CALayer帧动画 _sunLayer = [[CALayer alloc]init]; _sunLayer.contents = (id)[UIImage imageNamed:@"su ...

  6. Asp.net MVC访问框架页中嵌套的iframe页面时,如果session或cookie过期,登录验证超时怎样自动跳转到登录页

    一般登录验证的过滤器中,使用验证过滤器的Redirect方法,将请求重定向到指定的URL.但是如果我们要访问的页面是一个嵌套在框架页中的iframe页面时,这种重定向只会对iframe页面凑效,也就是 ...

  7. 这是一个无效的原路径/url

    当我们在SourceTree上新建一个“从URL克隆”的远程项目时,在确认“URL”无误的前提下依然报红色字体“这是一个无效的原路径/URL”错误,我们只需要快捷键“Command + ,”打开Sou ...

  8. oracle中sum求和问题

    如列表所示:都是选填字段name   age salary weight张三     18      20李四     17王五     21燕小六  15      22 sum(age+salar ...

  9. 协议(Protocol) 和代理(Delegate)

    1.概念与组成 delegate是iOS中一种常见的设计模式,是一种消息传递的的方式,常见的消息传递方式还有以下几种: 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. ...

  10. XML、集合、JSP综合练习

    一.利用DOM解析XML文件得到信息:存入泛型集合中在JSP页面循环打印读取的信息 a)         编写XML文件:添加测试节点数据 b)         建立web项目:在JSP页面中使用DO ...