Rah*_*til 57
这不是答案,但它显示的是二进制文件,您可以运行该命令
compgen -c
Run Code Online (Sandbox Code Playgroud)
(假设bash)
其他有用的命令
compgen -a # will list all the aliases you could run.
compgen -b # will list all the built-ins you could run.
compgen -k # will list all the keywords you could run.
compgen -A function # will list all the functions you could run.
compgen -A function -abck # will list all the above in one go.
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 21
使用 zsh:
whence -pm '*'
Run Code Online (Sandbox Code Playgroud)
或者:
print -rC1 -- $commands
Run Code Online (Sandbox Code Playgroud)
(请注意,对于出现在 的多个组件中的命令$PATH,它们将仅列出第一个)。
如果您想要没有完整路径的命令,并进行排序以获得良好的度量:
print -rC1 -- ${(ko)commands}
Run Code Online (Sandbox Code Playgroud)
(即,获取该关联数组的键而不是值)。
小智 9
这个怎么样
find ${PATH//:/ } -maxdepth 1 -executable
Run Code Online (Sandbox Code Playgroud)
字符串替换与 Bash 一起使用。
在任何 POSIX shell 中,除了最终排序外,不使用任何外部命令(假设printf是内置的,如果没有回退到echo),并假设没有可执行文件名称包含换行符:
{ set -f; IFS=:; for d in $PATH; do set +f; [ -n "$d" ] || d=.; for f in "$d"/.[!.]* "$d"/..?* "$d"/*; do [ -f "$f" ] && [ -x "$f" ] && printf '%s\n' "${x##*/}"; done; done; } | sort
Run Code Online (Sandbox Code Playgroud)
如果您在$PATH(.代替使用)中没有空组件,也没有以 开头的组件-,也没有\[?*PATH 组件或可执行文件名称中的通配符,并且没有以 开头的可执行文件.,您可以将其简化为:
{ IFS=:; for d in $PATH; do for f in $d/*; do [ -f $f ] && [ -x $f ] && echo ${x##*/}; done; done; } | sort
Run Code Online (Sandbox Code Playgroud)
使用 POSIXfind和sed:
{ IFS=:; set -f; find -H $PATH -prune -type f -perm -100 -print; } | sed 's!.*/!!' | sort
Run Code Online (Sandbox Code Playgroud)
如果您愿意在路径中列出罕见的非可执行文件或非常规文件,还有一个更简单的方法:
{ IFS=:; ls -H $PATH; } | sort
Run Code Online (Sandbox Code Playgroud)
这会跳过点文件;如果您需要它们,请将-A标志添加到ls您的标志中,或者如果您想坚持使用 POSIX:ls -aH $PATH | grep -Fxv -e . -e ..
我想出了这个:
IFS=':';for i in $PATH; do test -d "$i" && find "$i" -maxdepth 1 -executable -type f -exec basename {} \;; done
Run Code Online (Sandbox Code Playgroud)
编辑:这似乎是唯一一个在 apache 用户读取 bin 目录中的某些文件时不会触发 SELinux 警报的命令。