如何在Linux中的某个目录下仅找到可执行文件?
ls -l | egrep '^[^d]..x..x..x.*$'
上面的内容将列出当前目录中的所有可执行文件(对于all / user和group)。 注意:该-executable
选项在Mac上不起作用,因此可以使用上述解决方法。
-rwxr-x---
)的文件(以及fifos,套接字,符号链接等),但某些用户仍然可以执行。
如何在Linux中的某个目录下仅找到可执行文件?
ls -l | egrep '^[^d]..x..x..x.*$'
上面的内容将列出当前目录中的所有可执行文件(对于all / user和group)。 注意:该-executable
选项在Mac上不起作用,因此可以使用上述解决方法。
-rwxr-x---
)的文件(以及fifos,套接字,符号链接等),但某些用户仍然可以执行。
Answers:
可以使用-perm
(不推荐)或-executable
(推荐,因为它考虑了ACL )来检查可执行文件。要使用该-executable
选项:
find <dir> -executable
如果只想查找可执行文件而不是可搜索目录,请结合使用-type f
:
find <dir> -executable -type f
-type x
。
find: invalid predicate -executable'
在RHEL上
使用查找-perm
选项。这将在当前目录中找到可由其所有者,组成员或其他人可执行的文件:
find . -perm /u=x,g=x,o=x
编辑:
我只是找到了至少在GNU find 4.4.0中存在的另一个选项:
find . -executable
因为还考虑了ACL,所以它应该可以更好地工作。
find: invalid mode
/ u = x,g = x,o = x'`
-perm /111
是最便携的版本。
我有另一种方法,以防万一,您真正想要的只是对可执行文件做一些事情,而不必强迫自己进行过滤:
for i in `find -type f`; do [ -x $i ] && echo "$i is executable"; done
我更喜欢这样做,因为它不依赖于-executable
特定于平台的内容。并且它并不依赖于-perm
哪个有点神秘,特定于平台,并且如上所述,要求文件对所有人(不仅仅是您)都可执行。
-type f
之所以重要,是因为* nix目录中的文件必须是可执行文件才能被遍历,并且find
命令中查询的次数越多,命令的内存使用效率就越高。
无论如何,仅提供另一种方法,因为* nix是十亿种方法的领域。
find -perm
,查找设置了任何执行许可权的文件。(2)相反,此答案仅查找当前用户具有执行权限的文件。当然,这可能是OP想要的,但尚不清楚。…(续)
-perm
论点是要求全部三个,而不是三个。另外,感谢您提供有关保护shell参数的输入,这些都是我所不知道的。
for i in
find。类型f ; do [ -x $i ] && echo "$i is executable"; done
; 您缺少<dir>部分,我使用了点号(。)
标有可执行文件的文件不必是可执行文件或可加载文件或对象。
这是我使用的:
find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
case "$(head -n 1 "$1")" in
?ELF*) exit 0;;
MZ*) exit 0;;
#!*/ocamlrun*)exit0;;
esac
exit 1
' sh {} \; -print
-name "*"
它没有任何作用find
-它通常会找到所有未被测试消除的文件。
作为一个班轮的粉丝...
find /usr/bin -executable -type f -print0 | xargs file | grep ASCII
使用'xargs'获取find命令的输出(使用print0以确保正确处理带空格的文件名)。现在,我们有了可执行文件的列表,并逐一提供它们作为“文件”命令的参数。然后使用grep表示ASCII来忽略二进制文件。请在find命令中将-executable替换为您喜欢的样式(请参见前面的答案)或在您的'NIX OS上有效的样式
我需要上述内容才能在root拥有的脚本中找到带有eval的文件,因此创建了以下内容以帮助发现priv升级弱点,其中root用户使用不安全的参数运行脚本...
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 &
file
报告编码,因此python脚本可以报告为a /usr/bin/python script, UTF-8 Unicode text executable
。 find ... | xargs file -b | grep -v '^ELF'
可以更好地发现非二进制文件。
我~/.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 ()
这样做的好处是它将在一秒钟之内搜索三个Linux发行版和一个Windows安装,而find
命令将花费15分钟。
例如:
$ time xlocate llocate
executable: /bin/ntfsfallocate
executable: /home/rick/restore/mnt/e/bin/llocate
executable: /mnt/clone/bin/ntfsfallocate
executable: /mnt/clone/home/rick/restore/mnt/e/bin/llocate
executable: /mnt/clone/usr/bin/fallocate
executable: /mnt/e/bin/llocate
executable: /mnt/old/bin/ntfsfallocate
executable: /mnt/old/usr/bin/fallocate
executable: /usr/bin/fallocate
real 0m0.504s
user 0m0.487s
sys 0m0.018s
或对于整个目录及其所有子目录:
$ time xlocate /mnt/e/usr/local/bin/ | wc -l
65
real 0m0.741s
user 0m0.705s
sys 0m0.032s