Linux command to list all available commands and aliases

LinuxCommand LineTerminal

Linux Problem Overview

Is there a Linux command that will list all available commands and aliases for this terminal session?

As if you typed 'a' and pressed tab, but for every letter of the alphabet. Or running 'alias' but also returning commands.

Why? I'd like to run the following and see if a command is available:

ListAllCommands | grep searchstr

Linux Solutions

Solution 1 - Linux

You can use the bash(1) built-in compgen

  • compgen -c will list all the commands you could run.
  • 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.

Check the man page for other completions you can generate.

To directly answer your question:

compgen -ac | grep searchstr

should do what you want.

Solution 2 - Linux

Add to .bashrc

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

If you also want aliases, then:

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

Solution 3 - Linux

There is the

type -a mycommand

command which lists all aliases and commands in $PATH where mycommand is used. Can be used to check if the command exists in several variants. Other than that... There's probably some script around that parses $PATH and all aliases, but don't know about any such script.

Solution 4 - Linux

The others command didn't work for me on embedded systems, because they require bash or a more complete version of xargs (busybox was limited).

The following commands should work on any Unix-like system.

List by folder :

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

List all commands by name

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

Solution 5 - Linux

Use "which searchstr". Returns either the path of the binary or the alias setup if it's an alias

Edit: If you're looking for a list of aliases, you can use:

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

Add that in to whichever PATH searching answer you like. Assumes you're using bash..

Solution 6 - Linux

Try this script:

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

Solution 7 - Linux

For Mac users (find doesn't have -executable and xargs doesn't have -d):

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

Solution 8 - Linux

Alternatively, you can get a convenient list of commands coupled with quick descriptions (as long as the command has a man page, which most do):

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.)

Then you just grep it like you want.

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

The results don't appear to be sorted, so if you're looking for a long list, you can throw a | sort | into the middle, and then pipe that to a pager like less/more/most. ala:

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

Which returns a sorted list of all commands that have "zip" in their name or their short description, and pumps that the "less" pager. (You could also replace "less" with $PAGER and use the default pager.)

Solution 9 - Linux

Try to press ALT-? (alt and question mark at the same time). Give it a second or two to build the list. It should work in bash.

Solution 10 - Linux

Here's a solution that gives you a list of all executables and aliases. It's also portable to systems without xargs -d (e.g. Mac OS X), and properly handles paths with spaces in them.

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

Usage: [grep-options] pattern, e.g. to find all commands that begin with ls, case-insensitive, do:

myscript -i ^ls

Solution 11 - Linux

It's useful to list the commands based on the keywords associated with the command.

Use: man -k "your keyword"

feel free to combine with: | grep "another word"

for example, to find a text editor: man -k editor | grep text

Solution 12 - Linux

You can always to the following:

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

The shell will execute command only if they are listed in the path env var anyway.

Solution 13 - Linux

it depends, by that I mean it depends on what shell you are using. here are the constraints I see:

  1. must run in the same process as your shell, to catch aliases and functions and variables that would effect the commands you can find, think PATH or EDITOR although EDITOR might be out of scope. You can have unexported variables that can effect things.
  2. it is shell specific or your going off into the kernel, /proc/pid/enviorn and friends do not have enough information

I use ZSH so here is a zsh answer, it does the following 3 things:

  1. dumps path
  2. dumps alias names
  3. dumps functions that are in the env
  4. sorts them

here it is:

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

If you use zsh this should do it.

Solution 14 - Linux

shortcut method to list out all commands. Open terminal and press two times "tab" button. Thats show all commands in terminal

Solution 15 - Linux

The problem is that the tab-completion is searching your path, but all commands are not in your path.

To find the commands in your path using bash you could do something like :

for x in echo $PATH | cut -d":" -f1; do ls $x; done

Solution 16 - Linux

Here's a function you can put in your bashrc file:

function command-search

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

export IFS=${oldIFS} }

Example usage:

$ command-search gnome

FYI: IFS is a variable that bash uses to split strings.

Certainly there could be some better ways to do this.

Solution 17 - Linux

maybe i'm misunderstanding but what if you press Escape until you got the Display All X possibilities ?

Solution 18 - Linux

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

Solution 19 - Linux

Why don't you just type:


In the terminal.

The shell will say somehing like

seacrhstr: command not found 


Ok, I take the downvote, because the answer is stupid, I just want to know: What's wrong with this answer!!! The asker said:

>and see if a command is available.

Typing the command will tell you if it is available!.

Probably he/she meant "with out executing the command" or "to include it in a script" but I cannot read his mind ( is not that I can't regularly it is just that he's wearing a mind reading deflector )

Solution 20 - Linux

in debian: ls /bin/ | grep "whatImSearchingFor"


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionackView Question on Stackoverflow
Solution 1 - LinuxcamhView Answer on Stackoverflow
Solution 2 - LinuxAnts AasmaView Answer on Stackoverflow
Solution 3 - Linuxsunny256View Answer on Stackoverflow
Solution 4 - LinuxOlivier LasneView Answer on Stackoverflow
Solution 5 - LinuxAaronView Answer on Stackoverflow
Solution 6 - Linuxvictor hugoView Answer on Stackoverflow
Solution 7 - LinuxvaultView Answer on Stackoverflow
Solution 8 - LinuxKatastic VoyageView Answer on Stackoverflow
Solution 9 - LinuxIgor KrivokonView Answer on Stackoverflow
Solution 10 - LinuxAdam RosenfieldView Answer on Stackoverflow
Solution 11 - LinuxFinchView Answer on Stackoverflow
Solution 12 - LinuxOscarRyzView Answer on Stackoverflow
Solution 13 - Linuxms4720View Answer on Stackoverflow
Solution 14 - LinuxdennyView Answer on Stackoverflow
Solution 15 - LinuxnikudesuView Answer on Stackoverflow
Solution 16 - LinuxCraig WrightView Answer on Stackoverflow
Solution 17 - LinuxLB40View Answer on Stackoverflow
Solution 18 - Linuxsome1View Answer on Stackoverflow
Solution 19 - LinuxOscarRyzView Answer on Stackoverflow
Solution 20 - LinuxGabriel SosaView Answer on Stackoverflow