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

时间:2009-06-04 00:29:44

标签: linux command-line terminal

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

好像你输入'a'并按下了标签,但是对于字母表中的每个字母。 或者运行'别名'但也返回命令。

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

ListAllCommands | grep searchstr

21 个答案:

答案 0 :(得分:560)

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

  • compgen -c将列出您可以运行的所有命令。
  • compgen -a将列出您可以运行的所有别名。
  • compgen -b将列出您可以运行的所有内置插件。
  • compgen -k会列出您可以运行的所有关键字。
  • compgen -A function将列出您可以运行的所有功能。
  • compgen -A function -abck将一次性列出以上所有内容。

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

直接回答你的问题:

compgen -ac | grep searchstr

应该做你想要的。

答案 1 :(得分:38)

添加到.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
}

答案 2 :(得分:25)

type -a mycommand

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

答案 3 :(得分:6)

使用“which searchstr”。如果它是别名

,则返回二进制路径或别名设置

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

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

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

答案 4 :(得分:6)

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

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

按文件夹列出:

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

按名称列出所有命令

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

答案 5 :(得分:5)

试试这个脚本:

#!/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

答案 6 :(得分:3)

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

使用:man -k "your keyword"

随时与| grep "another word"

结合使用

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

答案 7 :(得分:3)

对于Mac用户(查找没有-executable而 xargs 没有-d):

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

答案 8 :(得分:2)

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

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"寻呼机。 (你也可以用$ PAGER替换" less"并使用默认的寻呼机。)

答案 9 :(得分:2)

列出所有命令的快捷方法。 打开终端并按两次“tab”按钮。 这显示了终端

中的所有命令

答案 10 :(得分:2)

这是一个解决方案,它为您提供了所有可执行文件别名的列表。它也可以移植到没有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

答案 11 :(得分:2)

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

答案 12 :(得分:1)

这取决于我的意思,这取决于你使用的是什么shell。这是我看到的限制因素:

  1. 必须在与shell相同的进程中运行,以捕获会影响您可以找到的命令的别名和函数以及变量,请考虑PATH或EDITOR,尽管EDITOR可能超出范围。您可以使用可能影响事物的未导出变量。
  2. 它是特定于shell的,或者你进入内核,/ proc / pid / enviorn和朋友没有足够的信息
  3. 我使用ZSH所以这是一个zsh答案,它做了以下三件事:

    1. 转储路径
    2. 转储别名
    3. 转储env
    4. 中的函数
    5. 对他们进行排序
    6. 这里是:

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

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

答案 13 :(得分:1)

您可以随时使用以下内容:

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才会执行命令。

答案 14 :(得分:0)

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

function command-search
{
   oldIFS=${IFS}
   IFS=":"

   for p in ${PATH}
   do
      ls $p | grep $1
   done

   export IFS=${oldIFS}
}

使用示例:

$ command-search gnome
gnome-audio-profiles-properties*
gnome-eject@
gnome-keyring*
gnome-keyring-daemon*
gnome-mount*
gnome-open*
gnome-sound-recorder*
gnome-text-editor@
gnome-umount@
gnome-volume-control*
polkit-gnome-authorization*
vim.gnome*
$

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

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

答案 15 :(得分:0)

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

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

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

答案 16 :(得分:-1)

也许我是误会但是如果你按下Escape直到你获得Display All X的可能性呢?

答案 17 :(得分:-1)

基本命令:

$ touch: - 创建空文件的用户

Syn: - 触摸文件名

Ex:触摸rama

$ ls文件和目录列表

$ ls -l长列表

文件类型,权限,链接文件,用户(或)所有者名称,组名称,文件大小,时间戳,文件或目录名称。

- 常规(或)普通文件

d目录

l链接文件

ls -a:显示所有(包括隐藏文件)

隐藏文件和目录以。 (点)

找到更多命令@ http://k2schools.com/linux-commands/

答案 18 :(得分:-2)

compgen -c > list.txt && wc list.txt

答案 19 :(得分:-3)

为什么不输入:

seachstr

在终端。

shell会说像

之类的东西
seacrhstr: command not found 

修改

好的,我接受了downvote,因为答案很愚蠢,我只是想知道:这个答案出了什么问题!提问者说:

  

并查看命令是否可用。

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

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

答案 20 :(得分:-5)

在debian中:ls / bin / | grep“whatImSearchingFor”