Generate a list of available commands and what each does

Does a Linux command set with descriptions exist on the net?

I have a list of commands I obtained by using alt! with 1947 commands listed. I put these into a file, but I am having to write what each command does by using the whatis command and then copying the result next to the command into the text document.

Is there an easier way to generate this list?


If your purpose is to have a document listing the whatis output for every system command on your machine, do:

find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis > command-encyclopedia.txt
  • To also capture the entries for which there is no whatis output, append 2>&1 to that command
  • To put the undocumented entries in their own document, append 2> dark-commands.txt instead

Actually, to be a proper encyclopedia, you'll want to have it sorted as well!

find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis | sort > command-encyclopedia.txt

Better yet, make it interactively searchable (thx for the suggestion @Doogfar!):

find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis | sort | less

Now use / to search forward and ? to search backward, or Ctrl+F/B to page forward and backward in your encyclopedia.

Tip: if you want to save yourself the typing every time you need your command encyclopedia, put it in a shell function as described in this answer.


Listing all possible commands is not very useful, but it can be done pretty simply.

This method lists both commands that exist as executables, and shell builtins.

In a bash shell (which is what you get when you open a Terminal window), you can do it with bash completion. Type in which (including the space at the end), and press Tab twice.

Then you'll be prompted with something like:

Display all 3734 possibilities? (y or n)

Press y. You can scroll down through the list of commands by pressing Spacebar. Press q at any time to leave the list.

This way of viewing the list is inconvenient, because you can only move down in the list, not up. To create a file containing the list, run:

script ~/Desktop/command-list.txt

This will create the list in a file called command-list.txt located on your Desktop. You can change it accordingly. If you just run

script

then it will put it in a file called typescript in the current directory.

The script command records all the text in the Terminal. So after running script, type which (with the space, as before), type Tab twice, and press y when prompted.

Now, scroll down through the list by holding down the spacebar key. Once you get to the end of the list, you'll be back on the line where you're typing the which command. Type Ctrl+C to get a new line, then run exit. Now script is no longer recording.

To view the file, open it in a text editor--in Lubuntu, Leafpad; in regular Ubuntu, Gedit. (Those editors are installed by default, but of course you can install and use whatever text editor you like.)

As you view it, you'll see imperfections where you were prompted for More. But that shouldn't interfere with your ability to read through the file, to look up commands in it, nor to search through the file to find a particular command (or commands containing specific text).

If you want, you can filter out those lines. If the file is ~/Desktop/command-list.txt, you can run:

grep -ve --More-- ~/Desktop/command-list.txt > ~/Desktop/command-list2.txt

Then command-list2.txt on the desktop won't have those lines.

: will be the first command listed. The last command listed may vary from system to system (it depends on what software you have installed). On my system it is zsyncmake but you might not have that, or you might have a command that ranks after it alphabetically.

If you like, in the text editor you can manually remove text before the first command and after the last command. (It's just a few lines at the beginning and end; removing it by hand is much easier than if you had to remove all the --More-- lines by hand.)