2009-09-10 11:56:56 +0000 2009-09-10 11:56:56 +0000
170
170

如何在Linux中只找到某个目录下的可执行文件?

如何在Linux中只找到某个目录下的可执行文件?

答案 (7)

170
170
170
2009-09-10 11:59:26 +0000

检查可执行文件可以用-perm(不建议使用)或-executable(建议使用,因为它考虑了ACL)。如果要使用-executable选项:

find <dir> -executable

,如果你只想查找可执行文件而不是搜索目录,请结合-type f

find <dir> -executable -type f
35
35
35
2009-09-10 15:55:13 +0000

使用查找的-perm选项。这个选项可以找到当前目录中的文件,这些文件是由它们的所有者、组成员或其他人执行的:

find . -perm /u=x,g=x,o=x

编辑:

我刚刚发现另一个选项,至少在GNU find 4.4.0中是存在的:

find . -executable

这应该会更好,因为ACL也被考虑到了。

16
16
16
2017-06-01 06:59:33 +0000

我知道这个问题特别提到了Linux,但由于它是Google上的第一个结果,我只是想补充一下我想找的答案(比如说,如果你和我一样,被雇主强迫使用非GNU/Linux系统的话)。

3
3
3
2016-04-24 02:38:26 +0000

我有另一种方法,以防你真正想要的只是对可执行文件做一些事情—-而不一定要实际强迫find过滤自己:

for i in `find -type f`; do [-x $i] && echo "$i is executable"; done

我更喜欢这个方法,因为它不依赖于-executable,因为它不依赖于-perm,因为它有点玄乎,有点平台的特殊性,而且像上面写的那样,要求文件对每个人(不只是你)都是可执行的。

这个-type f很重要,因为在*nix中,目录必须是可执行的才能被遍历,而find命令中的查询越多,你的命令的内存效率就越高。

2
2
2
2014-03-26 07:52:24 +0000

标有可执行文件的文件不需要是可执行或可加载的文件或对象。

1
1
1
2017-07-09 12:31:14 +0000

作为一个单行本的粉丝…..

find /usr/bin -executable -type f -print0 | xargs file | grep ASCII

使用'xargs'来获取find命令的输出(使用print0来确保带空格的文件名被正确处理)。我们现在有了一个可执行的文件列表,我们把它们逐一提供给'file'命令的参数。然后用grep来忽略二进制文件。请在find命令中用你喜欢的样式(见前面的答案)或你的'NIX操作系统

我要求用上面的方法来查找root用户所拥有的脚本中带有eval的文件,所以创建了下面的命令来帮助查找root用户运行带有不安全参数的脚本的priv escalation弱点…..

echo -n "+ Identifying script files owned by root that execute and have an eval in them..."
find / -not \( -path /proc -prune \) -type f -executable -user root -exec grep -l eval {} \; -exec file {} \; | grep ASCII| cut -d ':' -f1 > $outputDir"/root_owned_scripts_with_eval.out" 2>/dev/null &
0
0
0
2019-06-06 00:08:27 +0000

我今晚在~/.bashrc中创建了一个功能来查找不在系统路径和目录中的可执行文件:

# Quickly locate executables not in the path
xlocate () {
    locate -0r "$1" | xargs -0 -I{} bash -c '[[-x "$1"]] && [[! -d "$1"]] \
        && echo "executable: $1"' _ {}
} # xlocate ()