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

335

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

就像您键入'a'并按Tab键一样,但适用于字母表中的每个字母。 或者运行“alias”,但也返回命令。

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

ListAllCommands | grep searchstr

1
按两次 TAB 键以列出环境中可用的所有命令。 - ntshetty
请参考关于 compgen此回答 - Matthias Braun
20个回答

3
尝试按下ALT-?(同时按下alt和问号键)。给它一两秒钟的时间来构建列表。这应该在bash中起作用。

5
尝试在空白行开头按四次Esc键。 - ephemient
1
这非常有用,而且我之前不知道,谢谢 :-) - Chris Huang-Leaver

2

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


2
你要如何将它导入到 grep 中呢? - Toby Speight

1

您可以始终执行以下操作:

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

无论如何,shell 只会执行在 path 环境变量中列出的命令。


1

这要看情况,我的意思是这取决于你使用的shell。以下是我看到的限制:

  1. 必须在与你的shell相同的进程中运行,以捕获会影响你可以找到的命令的别名、函数和变量,例如PATH或EDITOR,尽管EDITOR可能超出了范围。你可能有未导出的变量会影响事情。
  2. 它是特定于shell的,否则你就要进入内核,/proc/pid/enviorn等等没有足够的信息。

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

  1. 转储路径
  2. 转储别名名称
  3. 转储在环境中的函数
  4. 排序

这是它:

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

如果您使用zsh,这应该可以解决问题。

0
问题在于Tab键自动补全正在搜索您的路径,但并非所有命令都在您的路径中。
要使用bash查找路径中的命令,您可以执行以下操作:
for x in echo $PATH | cut -d":" -f1; do ls $x; done

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用于分割字符串的变量。

当然,可能有更好的方法来实现这个功能。


-1
也许我理解错了,但如果你按下Escape键直到显示所有的X可能性呢?

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

1
请考虑添加简短的描述以说明此代码的作用或如何工作。至少要指定一个参考链接(通常是相关的手册页)以便跟进和了解所提出的解决方案。 - TheCodeArtist
使用文件并不总是一个好的选择。如果你确实需要使用,那么至少要将它设置为临时文件(如果安全不是问题的话)。compgen -c > /tmp/list.txt && /tmp/wc list.txt - Gary

-3

为什么不直接输入:

seachstr

在终端中。
Shell会说一些类似的话。
seacrhstr: command not found 

编辑:

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

并查看命令是否可用。

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

可能他/她的意思是“不执行该命令”或“将其包含在脚本中”,但我无法读懂他的想法(不是我不能通常做到,而是他戴着一个mind reading deflector


6
我想知道是否存在 formathdd 命令。哦,等等,我只需要运行它并查看结果。谢谢 :) - Jeffrey Jose
6
最好使用“which”来做那件事情。 - danio
鉴于这是 [so] 而不是 [su],编程式的答案会更加合适。 - Toby Speight

-6
在Debian中:ls /bin/ | grep "我要搜索的内容"

1
可执行文件存在于$PATH中的所有目录中,而不仅仅是/bin目录。 - PhrkOnLsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接