列出所有可用命令和别名的 Linux 命令

     2023-02-23     144

关键词:

【中文标题】列出所有可用命令和别名的 Linux 命令【英文标题】:Linux command to list all available commands and aliases 【发布时间】:2010-10-31 04:27:29 【问题描述】:

是否有一个 Linux 命令可以列出此终端会话的所有可用命令和别名?

就好像您输入了“a”并按下了制表符,但对于字母表中的每个字母。 或者运行“别名”但也返回命令。

为什么?我想运行以下命令,看看是否有可用的命令:

ListAllCommands | grep searchstr

【问题讨论】:

按两次 TAB 键列出环境可用的所有命令 参见this answercompgen 【参考方案1】:

你为什么不直接输入:

seachstr

在终端中。

shell 会说类似

seacrhstr: command not found 

编辑:

好的,我投反对票,因为答案很愚蠢,我只想知道:这个答案有什么问题!!!提问者说:

并查看是否有可用的命令。

输入命令会告诉你它是否可用!。

可能他/她的意思是 “不执行命令”“将其包含在脚本中” 但我无法读懂他的想法(不是说我能'不经常只是他穿着 mind reading deflector)

【讨论】:

我想知道formathdd命令是否存在。哦等等,我只是运行它看看。哎呀。谢谢:) 使用“which”可能更安全。 鉴于这是Stack Overflow,而不是Super User,程序化答案会更合适。【参考方案2】:

type -a mycommand

command 列出 $PATH 中使用 mycommand 的所有别名和命令。可用于检查命令是否存在于多个变体中。除此之外......可能有一些脚本可以解析 $PATH 和所有别名,但不知道任何这样的脚本。

【讨论】:

即使它不是问题的答案,我认为它比调用 grep 更好地解决问题。所以你可以做 type -a foo 如果 foo 不可用,它会返回 command not found 或类似的东西。因此,您可以在不调用命令本身的情况下检查命令。 实际上这是对问题的回答,因为OP问“我想运行以下命令并查看命令是否可用”,因此目的是查看命令是否可用这个答案显然有效。 @lothar,如果您要查找的命令是,呃,它是什么,“startserver”?,“serverstart”?,“server-something-or-other”?我知道,我将只为服务器“grep -i”,看看它是否在那里。哎呀。 Bzzz,没有这个解决方案。 matey :-) 我不会否决这个答案(因为即使以有限的方式它也很有用),但一个完整的解决方案会考虑到 grep 用于正则表达式,而不仅仅是固定字符串。【参考方案3】:

在 debian 中:ls /bin/ | grep "whatImSearchingFor"

【讨论】:

可执行文件存在于 $PATH 的所有目录中,而不仅仅是 /bin。【参考方案4】:

你总是可以做到以下几点:

1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry: 
    ls * $entry 
4. grep your command in that output.

只有当它们被列在路径 env var 中时,shell 才会执行命令。

【讨论】:

【参考方案5】:

使用“哪个 searchstr”。如果是别名,则返回二进制文件的路径或别名设置

编辑: 如果您要查找别名列表,可以使用:

alias -p | cut -d= -f1 | cut -d' ' -f2

将其添加到您喜欢的任何 PATH 搜索答案中。假设您正在使用 bash..

【讨论】:

【参考方案6】:

问题是 tab-completion 正在搜索您的路径,但所有命令都不在您的路径中。

要使用 bash 在路径中查找命令,您可以执行以下操作:

echo $PATH | cut -d":" -f1 中的 x;做 ls $x;完成

【讨论】:

【参考方案7】:

尝试按 ALT-? (alt 和问号同时出现)。给它一两秒钟来构建列表。它应该在 bash 中工作。

【讨论】:

或者尝试在空白行的开头按 Esc 四次。 这非常有用,我还不知道谢谢 :-)【参考方案8】:

试试这个脚本:

#!/bin/bash
echo $PATH  | tr : '\n' | 
while read e; do 
    for i in $e/*; do
        if [[ -x "$i" && -f "$i" ]]; then     
            echo $i
        fi
    done
done

【讨论】:

这是迄今为止唯一适用于所有命令的代码解决方案,而不仅仅是查看给定的已知命令是否存在。 +1。【参考方案9】:

这是一个可以放入 bashrc 文件的函数:

功能命令搜索 旧IFS=$IFS IFS=“:” 对于 $PATH 中的 p 做 ls $p | 1美元 完毕 导出 IFS=$oldIFS

示例用法:

$ 命令搜索 gnome gnome-audio-profiles-properties* 侏儒弹出@ 侏儒钥匙圈* gnome-keyring-守护进程* 侏儒安装* 侏儒开放* 侏儒录音机* 侏儒文本编辑器@ 侏儒卸载@ 侏儒音量控制* polkit-gnome-授权* vim.gnome* $

仅供参考:IFS 是 bash 用来分割字符串的变量。

当然有一些更好的方法可以做到这一点。

【讨论】:

【参考方案10】:

也许我理解错了,但是如果你按下 Escape 直到你得到 Display All X 可能性怎么办?

【讨论】:

【参考方案11】:

添加到 .bashrc

function ListAllCommands

    echo -n $PATH | xargs -d : -I  find  -maxdepth 1 \
        -executable -type f -printf '%P\n' | sort -u

如果你还想要别名,那么:

function ListAllCommands

    COMMANDS=`echo -n $PATH | xargs -d : -I  find  -maxdepth 1 \
        -executable -type f -printf '%P\n'`
    ALIASES=`alias | cut -d '=' -f 1`
    echo "$COMMANDS"$'\n'"$ALIASES" | sort -u

【讨论】:

这非常接近,但不包括别名。如何附加别名 | cut -f1 到结果,但在排序之前? 如果唯一的目的是通过 grep 输出,为什么还要麻烦排序呢? Unix 的理念是制作简单的工具,然后在需要时将它们链接在一起,因此将排序排除在 ListAllCommands 之外,如果用户希望对输出进行排序,他们可以这样做。 排序是去重复。 这不会找到作为可执行文件符号链接的命令。使用选项-L 跟随符号链接到他们的目的地。注意:-L 是一个选项,而不是匹配表达式的一部分,因此它必须放在命令行上的路径之前。在这种情况下find -L 可能希望将 STDERR 重定向到 /dev/null 以抑制不存在的目录警告。 echo -n $PATH | xargs -d : -I find -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u(+1 用于 zsh 兼容性)【参考方案12】:

这是一个解决方案,可为您提供所有可执行文件别名的列表。它还可以移植到没有 xargs -d 的系统(例如 Mac OS X),并且可以正确处理其中包含空格的路径。

#!/bin/bash
(echo -n $PATH | tr : '\0' | xargs -0 -n 1 ls; alias | sed 's/alias \([^=]*\)=.*/\1/') | sort -u | grep "$@"

用法:myscript.sh [grep-options] pattern,例如要查找以ls 开头的所有命令,不区分大小写,请执行以下操作:

myscript -i ^ls

【讨论】:

【参考方案13】:

这取决于,我的意思是它取决于您使用的外壳。这是我看到的限制:

    必须在与您的 shell 相同的进程中运行,以捕获会影响您可以找到的命令的别名、函数和变量,请考虑 PATH 或 EDITOR,尽管 EDITOR 可能超出范围。您可以有未导出的变量来影响事情。 它是特定于 shell 的,或者你进入内核,/proc/pid/enviorn 和朋友没有足够的信息

我使用 ZSH,所以这是一个 zsh 答案,它做了以下 3 件事:

    转储路径 转储别名 转储环境中的函数 对它们进行排序

这里是:

feed_me() 
    (alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort

如果你使用 zsh,应该这样做。

【讨论】:

【参考方案14】:

您可以使用内置的 bash(1) compgen

compgen -c 将列出您可以运行的所有命令。 compgen -a 将列出您可以运行的所有别名。 compgen -b 将列出您可以运行的所有内置程序。 compgen -k 将列出您可以运行的所有关键字。 compgen -A function 将列出您可以运行的所有函数。 compgen -A function -abck 将一口气列出以上所有内容。

查看手册页以了解您可以生成的其他补全。

直接回答你的问题:

compgen -ac | grep searchstr

应该做你想做的。

【讨论】:

csh/tcsh 是否有与此等价的功能?这些终端也有某种在选项卡上使用的自动完成功能,所以也许存在一些东西? 而不是compgen | grep,将字符串作为参数传递给compgen 本身会更有效(如果已知它是前缀,如问题中所暗示的那样)。在这种情况下,就是compgen -ac searchstr @MarAvFe:那是因为它是 bash 内置的,而不是带有自己手册页的单独命令。您需要阅读bash(1) 手册页,或在bash 命令行中运行help compgen 通过扩展,执行compgen -c | sort | uniq | less 将打印所有可用的命令,没有重复的行并按字母顺序排序。 @endolith 这是一个内置的 bash。 sh 不会拥有它(假设 bourne - 我不知道 /system/bin/sh 是什么 - 这是一个相当不标准的路径)【参考方案15】:

对于 Mac 用户(find 没有 -executable 并且 xargs 没有 -d):

echo $PATH | tr ':' '\n' | xargs -I  find  -maxdepth 1 -type f -perm '++x'

【讨论】:

谢谢。我实际上正在使用@AntsAasma 答案不起作用的非mac unix。这也适用于我的 mac 和我的 unix。我可以键入什么命令来确定我使用的 unix 版本,以便我可以在这里回复以帮助其他人解决我的问题? Linux 2011 年 12 月 12 日星期一 13:34:16 EST x86_64 x86_64 x86_64 GNU/Linux【参考方案16】:

根据与命令关联的关键字列出命令很有用。

使用:man -k "your keyword"

随意组合:| grep "another word"

例如,要查找文本编辑器: man -k editor | grep text

【讨论】:

【参考方案17】:
compgen -c > list.txt && wc list.txt

【讨论】:

考虑添加一个简短的描述,说明它的作用或它应该如何工作。至少,指定一个参考链接(通常是相关的手册页),以便跟进和理解建议的解决方案。 使用文件并不总是一个好的选择。如果您确实需要,那么至少将其设为 tmp 文件(如果安全不是问题)。compgen -c > /tmp/list.txt && /tmp/wc list.txt【参考方案18】:

列出所有命令的快捷方式。 打开终端并按两次 "tab" 按钮。 那就是在终端中显示所有命令

【讨论】:

然后你把它输入grep到底是怎么回事?【参考方案19】:

其他命令在嵌入式系统上对我不起作用,因为它们需要 bash 或更完整版本的 xargs(busybox 受到限制)。

以下命令应该适用于任何类 Unix 系统。

按文件夹列出:

ls $(echo $PATH | tr ':' ' ')

按名称列出所有命令

ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort

【讨论】:

这仍然依赖于tr。为什么不简单地ls $(echo $PATH//:/ ) 这就是我想要的。简单明了【参考方案20】:

或者,您可以获得一个方便的命令列表以及快速描述(只要命令有手册页,大多数情况下):

apropos -s 1 ''

-s 1 returns only "section 1" manpages which are entries for executable programs.

'' is a search for anything. (If you use an asterisk, on my system, bash throws in a search for all the files and folders in your current working directory.)

然后你就随心所欲地 grep 了。

apropos -s 1 '' | grep xdg

产量:

xdg-desktop-icon (1) - command line tool for (un)installing icons to the desktop
xdg-desktop-menu (1) - command line tool for (un)installing desktop menu items
xdg-email (1)        - command line tool for sending mail using the user's preferred e-mail composer
xdg-icon-resource (1) - command line tool for (un)installing icon resources
xdg-mime (1)         - command line tool for querying information about file type handling and adding descriptions for new file types
xdg-open (1)         - opens a file or URL in the user's preferred application
xdg-screensaver (1)  - command line tool for controlling the screensaver
xdg-settings (1)     - get various settings from the desktop environment
xdg-user-dir (1)     - Find an XDG user dir
xdg-user-dirs-update (1) - Update XDG user dir configuration

结果似乎没有排序,因此如果您要查找长列表,可以抛出 |排序 |到中间,然后通过管道将它传送到像少/多/大多数这样的寻呼机。阿拉:

apropos -s 1 '' | sort | grep zip | less

它会返回名称或简短描述中包含“zip”的所有命令的排序列表,并泵出“less”寻呼机。 (您也可以将“less”替换为 $PAGER 并使用默认寻呼机。)

【讨论】:

定义命令别名

...sp;打印出现有的别名(唯一的参数)若不加任何参数,则列出目前所有的别名设置用法:#aliascp=‘cp-i‘或aliasl=‘ll‘这样就可以用cp来代替cp-i,而且cp-i这条命令依旧有效例如:6 查看详情

linux命令复盘(代码片段)

...录操作1.ls命令查看linux文件夹包含的文件以及文件权限ls列出当前目录下所有文件ls-l列出目录下所有的文件及文件权限、属性等信息ls-a列出目录下隐藏的文件ll列出目录下所有的文件(包括以后隐藏文件)和权限属性信... 查看详情

linux列出当前目录下的文件和目录用啥命令

...写,显示所有文件,包括隐藏文件(以.开头的文件)-L:列出长数据串,显示文件的大小,时间等数据信息。ls-la:表示显示文件包括的所有信息。扩展资料:注意事项linux查看日志文件内容命令有1、cat:由第一行开始显示文件... 查看详情

linux必会100个命令(五十八)dnf命令

...dnf版本 使用repolist显示系统中可用的DNF软件库 使用list列出所有来自软件库的可用软件包和所有已经安装的软件包dnflist 使用listinstalled列出所有安装过的软件dnflistinstalled 使用listavailable列出所有可安装软件包dnflist available使用... 查看详情

linux如果想直接使用ls命令时显示的就是文件的周详信息,即以长格式列出当前目录下所有内容,该如何操作?

1.直接ls只能默认显示,所以ls后要跟上-l才能显示详细格式。2.可以用alias别名命令设置一个别名,如:aliasll='ls-l',这样直接输入ll就可以显示详细格式了。3.直接alias显示所有的别名定义;可以把自己的别名定义放到home的.... 查看详情

git列出所有可用的命令(代码片段)

是否有命令可以显示GIT中所有可用命令的列表?有githelp,但它显示:usage:git[--version][--exec-path[=<path>]][--html-path][-p|--paginate|--no-pager][--no-replace-objects][--bare][--git-dir=<path>][--work-tree=<path>][-cname=value][--help]<command>[<... 查看详情

linux命令(140)——tree命令(代码片段)

...录1.简介2.格式3.选项4.示例参考文献1.简介tree以树状格式列出目录的内容。在没有参数的情况下,树列出当前目录中的文件。当给定目录参数时,依次列出在给定目录中找到的所有文件和目录。完成列出找到的所有文件/... 查看详情

rhel8-dnf命令测试

...命令检查并升级可用软件包:$dnfupdate删除缓存:$dnfcleanall列出可用的软件源:$dnfrepolist搜索软件:$dnfsearch$package安装软件:$dnfinstall$package升级软件包:$dnfupdate$package删除软件包:$dnfremove$package查看更多命令:$dnfhelp$mandnf1.查看DNF包... 查看详情

nvm常用命令切换node

...理员权限打开cmd输入命令,否则报错 常用命令nvmls:列出所有已安装的node版本nvmls-remote:列出所有远程服务器的版本(官方nodeversionlist)nvmlist:列出所有已安装的node版本nvmlistavailable:显示所有可下载的版本nvminstallstable:... 查看详情

linux常用磁盘管理命令详解(代码片段)

...令语法:du[参数][文件或目录名称]参数说明:参数说明-a列出所有的文件与目录容量。-h以G、M、K为单位,返回容量。-s列出总量。-S列出不包括子目录下的总量。-k以KBytes为单位,返回容量。-m以MBytes为单位,返回容量。使用示例... 查看详情

查看内核中字符设备和块设备信息用啥命令

参考技术Alsblk(列出块设备)命令用于列出所有可用块设备的信息,但是,它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等。如何安装lsblklsblk命令包含在util-linux-ng包中...:$sudoyuminstallutil-linux-ng该命令有几个选项:默... 查看详情

linux命令自动补全工具bash-completion,自动补全git、docker、kubenetes等命令

...技术A在Linux命令行中,当输入字符后,按Tab键,Shell就会列出以这些字符开头的所有可用命令,如果只有一个命令匹配到,按一次Tab键就自动将这个命令补全。如果输入pass,此时按Tab键,因为以pass开头的命令只有passwd这个命令... 查看详情

97条linux常用命令总结

1.ls[选项][目录名|列出相关目录下的所有目录和文件 -a??列出包括.a开头的隐藏文件的所有文件-A?通-a,但不列出"."和".."-l??列出文件的详细信息-c??根据ctime排序显示-t?根据文件修改时间排序---color[=WHEN]用色彩辨别文件类型WHEN可... 查看详情

linux中的lsof命令使用大全

...个文件和目录,供不同的进程使用。您可以使用lsof命令列出这些打开的文件和目录。在本教程中,我们将通过示例学习如何在Linux中使用lsof命令。目录先决条件lsof命令句法如何使用LinuxLsof命令Lsof选项LinuxLsof命令示例列出所有打... 查看详情

linux系统中查看所有文件的命令是啥?

...,英文全拼:listfiles,用于显示指定工作目录下的内容,列出目前工作目录所含的文件及子目录。  语法  ls[-alrtAFR][name...]  参数  -a:显示所有文件及目录,.开头的隐藏文件也会列出  -l:除文件名称外,亦将文件... 查看详情

linux查看系统日志的一些常用命令

...记录文件。  -n<显示列数>或-<显示列数>设置列出名单的显示列数。  -R不显示登入系统的主机名称或IP地址。  -x显示系统关机,重新开机,以及执行等级的改变等信息  以下看所有的重启、关机记录  last|gre... 查看详情

linux系统常用命令详解

...不能合并如:短选项-l-h可以合并为-lh长选项不能合并1.ls:列出文件信息,默认为当前目录下常用选项:-a:列出所有的文件,包括所有以.开头的隐藏文件-d:列出目录本身,并不包含目录中的文件-h:和-l一起使用,文件大小人类易读... 查看详情

linux里面psaux命令作用是啥?

...例,其中一个是aux选项。  ps命令的默认行为是仅列出当前用户进程。所有其他用户拥有的进程将不会显示。 a选项也会打印所有其他用户进程。 《Linux就该这么学》关于显示流程信息的默认行为不会打印流程的所... 查看详情