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

Posted

技术标签:

【中文标题】bash 命令检查目录是不是可执行【英文标题】:bash command to check if a directory is executablebash 命令检查目录是否可执行 【发布时间】:2016-02-29 22:09:32 【问题描述】:

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

我更改了/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/]#

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

查看我帖子中的更新 #2。我只用简化的 sn-p 编写了一个迷你 bash 脚本,然后运行它。没有任何输出。 嗯...你能再次回显 /tmp 上的权限吗? ls -lAh /tmp drw-rw-rw- 12 root root 4096 Mar 1 13:15 tmp 你使用的是什么操作系统和shell? 红帽企业 Linux 服务器版本 5.11 (Tikanga)。我正在使用 bash。【参考方案2】:

您也许可以使用 find 命令来挑选任何没有可执行位的目录

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

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

【讨论】:

以上是关于bash 命令检查目录是不是可执行的主要内容,如果未能解决你的问题,请参考以下文章

Mac 命令行中添加命令直接调用可执行文件

执行n stable命令在Windows系统中更新node版本报错“‘bash‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。“

如何使用 ANSI C 检查文件是不是可执行?

linux bash 命令

sh 使bash命令可执行

bash命令