Command-line productivity tips : Getting help in the terminal

rrampage profile image Raunak Ramakrishnan ・4 min read

The command-line is often a daunting place for beginners. With nothing but a blinking cursor and an unfriendly dark screen staring back at you, despair sets in.

Here are a few things to do if you are stuck:

1. How to find programs for specific tasks

Many times, you want to do a particular task but you do not remember the name of the program which does that. Many shell utilities are not easy to remember at first with their cryptic 2 letter names.

Worry not, there is a command called apropos to help you out!

For example, you want to show a file with line numbers. You know that there is a program but have forgotten its name. You can just type apropos -a line number to get a list of programs. We use -a flag so that apropos will only return those programs which have the words line AND number in their description.

On my computer, it gives the following output:

apropos -a line number
# Output:
addr2line (1)        - convert addresses into file names and line numbers.
nl (1)               - number lines of files
x86_64-linux-gnu-addr2line (1) - convert addresses into file names and line numbers.

There are 3 programs which have something to do with numbering lines. Let's find out what each of these programs does.

2. Find out what a program does

Let's have a look at our first candidate addr2line. Typing --help after the command is one way of finding out what a program does. It is a convention for command-line programs to print a small help message when you call them with --help. Some programs also allow do the same on calling with -h.

addr2line --help
# Output:
Usage: addr2line [option(s)] [addr(s)]
 Convert addresses into line number/file name pairs.
 If no addresses are specified on the command line, they will be read from stdin

Ok. This does program does something with addresses, not what we are looking for. Moving on to the next in our list: nl

nl --help
# Output:
Usage: nl [OPTION]... [FILE]...
Write each FILE to standard output, with line numbers added.

Looks like we found our program. Let's try it out. This is our file foo.txt

cat foo.txt
# Output:

nl foo.txt
# Output:
     1  one
     2  two
     3  three

     4  four
     5  five

It works ok but why is it not numbering blank lines?

3. Getting detailed information about a program

The --help messages are very concise. If we want to know in detail what a program does, we need to consult the manual or man pages. These pages are very detailed documentation of what a program does, all its possible options and arguments. Type man nl and have a look at the information...

Woah! The terminal screen is filled with information!. You can navigate up and down using the arrow keys and press q to quit.

We can see the following in the output:


-b, --body-numbering=STYLE
              use STYLE for numbering body lines
STYLE is one of:

       a      number all lines

       t      number only nonempty lines

       n      number no lines

So, nl -b a foo.txt will number all lines in foo.txt which is what we want.

nl -b a foo.txt
# Output:
     1  one
     2  two
     3  three
     5  four
     6  five

That seems to solve our problem.

There is also info command which gives even more detailed usage information. You can try it out using info nl.

4. Getting examples for using a program

But what if we just quickly want to get our command to work without having to read a huge wall of text?

Turns out, there is a nifty utility you can install called tldr. If you use node or python you can install using npm install -g tldr or pip install tldr respectively. The tldr page has a list of other installation options. After installing it, just try out tldr nl in your terminal

tldr nl
# Output:

  A utility for numbering lines, either from a file, or from standard input.

  - Number non-blank lines in a file:
    nl file


  - Number all lines including blank lines:
    nl -b a file

There! We can see the example with easy to understand description.

tldr is community-driven! People contribute examples for various commands. If your favorite command does not have an entry, you can submit a pull request.


To recap, we can:

  • Find out possible programs which do particular tasks using apropos
  • Get help information for $program using $program --help or man $program
  • Get examples using tldr $program

PS: What if we are not able to find programs for our tasks

In Section 1, we assume that we will be able to find programs for our task. But many times, we may not have it installed. In such cases, we can search our distribution's package manager e.g apt-get for Ubuntu or yum or dnf for CentOS / Fedora.

In Ubuntu, we can search all available packages in the repositories using apt-cache search $KEYWORD.

Posted on Nov 11 '18 by:

rrampage profile

Raunak Ramakrishnan


Passionate about databases, distributed systems and functional programming.


markdown guide