bash命令检查目录是否可执行

时间:2016-02-29 22:09:32

标签: linux permissions bit execution

我的目标是检查是否没有为目录设置执行位。

我更改了/ tmp的权限,以便执行位关闭。

root$: chmod 666 /tmp

root$: ls -l /
    ....
    .....    
    drw-rw-rw-  12 root root  4096 Feb 29 15:17 tmp

在我的bash脚本中,我尝试了以下内容但没有成功:

if [ ! -x /tmp ]; then 
......

我已经在以下链接中尝试了所有建议,但唯一不同的语法方法对我来说也不起作用:

if [[ ! -x /tmp] ; then

check if a file is executable

这些工作与常规文件一样,但不适用于任何目录,但我不知道原因。有什么想法吗?

更新#2

我写了一个迷你bash脚本,只有下面评论中建议的代码。

结果:

[root@mc/]# cat tst.sh
#!/bin/bash
if [ ! -x /tmp ]; then echo 'not executable!'; fi
exit

[root@mc/]# ./tst.sh
[root@mc/]#

2 个答案:

答案 0 :(得分:1)

您在问题中提供的所有代码都是正确的(我刚刚完成了自己的测试)。因此,有理由认为脚本中的其他内容是失败的。如果可以,请尝试运行此简化代码段: if [ ! -x /tmp ]; then echo 'not executable!'; fi

简而言之,Unix系统中目录的“可执行”标志实际上并不意味着“可执行”。它实际上是将目录标记为可搜索的方式。虽然我不确定这是否有助于解决您正在处理的问题,但这是对现有字段的有趣用法。

答案 1 :(得分:0)

您可以使用find命令单独输出任何没有可执行位的目录

notex=$(find . -type d -maxdepth 1 -perm 666)

我认为这可能有所帮助..

相关问题