How to Create a Linux Man Page

The command man on Linux is embedded in the muscle memory of every Linux developer and user. It is used by literally everyone; from amateur and novice developers to Linux professionals and experts.


It is used for reading the command line manual page for a Linux command, configuration file, or any other feature. Manual pages are usually installed along with installation of a software in Linux. There is a defined syntax for manual pages, which is parsed by the command.

Let us create a man page for the following bash script I have written:

#!/bin/bash if [ "$1" == "h" ]; then echo "Hello" fi if [ "$1" = "b" ]; then echo "Bye" fi

This script does only two things : It prints “Hello” if option ‘h’ is specified as argument, and it prints “Bye” if option ‘b’ is specified as argument.


Let us create a man page for this program. Use vim or any editor of your choice to create a text file.

vim test.1

The extension ‘.1’ is signifying that this man page is for an executable command. It is not a compulsion but rather a widely followed convention while writing man pages. The manual page for man (man man !) lists the categories:

1 Executable programs or shell commands 2 System calls (functions provided by the kernel) 3 Library calls (functions within program libraries) 4 Special files (usually found in /dev) 5 File formats and conventions eg /etc/passwd 6 Games 7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 8 System administration commands (usually only for root) 9 Kernel routines [Non standard]

A man page is created using the very old roff markup language. It has commands (read markers) for various titles and sections.

  • .TH – This should be first command in the man file. It is used to specify title heading of the man page.
  • .SH – Section Heading.
  • .B – It is used to display the text next to it in bold.
  • .TP – It is used to display information about an argument (flag) to the command.
  • .BR – It is used to display text in bold and in the normal Roman font.

Following is the man page for my program created using only the above (simple) roff commands.

.TH 1 .SH NAME \- Print Hello or Bye .SH SYNOPSIS .B [ h ] [ b ] .SH DESCRIPTION .B This is a sample script which does only 2 things. It either prints "Hello" if argument is 'h' or it prints "Bye" if argument is 'b' .SH OPTIONS .TP .BR h Print Hello .TP .BR b Print Bye

Save the file by first pressing the ESC key, and then type :wq to save the file and exit the vim console.


Test the man page we just created using the command below:

man ./test.1

For more info on man usage, run man man-pages command in your terminal.

💡 Tip
This is the basic syntax for writing man pages. To make things easier, you could use tools like txt2man convert a file in some markup language format to roff format.