info Command in Linux: Complete Guide to GNU Info Documentation System and Parameters

info command in Linux and it perimeters

I ignored info for years. I assumed it was just a worse man with a more annoying interface, and honestly the interface is a bit more work to learn. But then I actually sat down and read the coreutils info manual while debugging a sort field-separator issue, and I realized the man page had been giving me the abbreviated version the whole time — the info manual had the full explanation, cross-referenced to every related command. Since then I keep info in my toolkit specifically for GNU utilities, where it’s often the more complete and more accurate source.

What info Is

info is the reader for the GNU Texinfo documentation system. Where man pages are typically flat, single-file documents, Texinfo documents are structured as a hierarchical tree of “nodes” — think of it like a small hypertext wiki living entirely in your terminal, with menus, cross-references, and the ability to jump between related topics without leaving the reader.

This matters because GNU projects (coreutils, bash, gcc, gdb, emacs, make, tar, and many more) were historically documented primarily in Texinfo, with the man page treated as an abbreviated companion. For those tools specifically, info is often the more authoritative and detailed source.

Basic Syntax

info [options] [menu-item...]

Called with no arguments, info opens the top-level directory of all installed info documents:

$ info

Called with a topic name, it jumps straight to that document:

$ info ls

A Real Example: info coreutils

Coreutils is the best demonstration of why info exists as a separate system. Its info manual is organized as one giant hierarchical document covering every coreutils tool, and you can jump directly to a specific command’s node:

$ info coreutils 'ls invocation'

I ran this myself and got:

File: coreutils.info,  Node: ls invocation,  Next: dir invocation,  Up: Directory listing

10.1 'ls': List directory contents
==================================

The 'ls' program lists information about files (of any type, including
directories).  Options and file arguments can be intermixed arbitrarily,
as usual.  Later options override earlier options that are incompatible.

   For non-option command-line arguments that are directories, by
default 'ls' lists the contents of directories, not recursively, and
omitting files with names beginning with '.'.

Notice the top line: Node: ls invocation, Next: dir invocation, Up: Directory listing. That’s the hypertext structure showing itself — this single node is part of a bigger tree, with an explicit “next” node and a parent (“up”) node, all navigable interactively.

Navigation Inside info

This is the part that has a real learning curve, but it’s worth it. The classic Texinfo keybindings (which also work in Emacs’ info mode, since that’s where they originated):

KeyAction
SpaceScroll down / move to next node when at bottom
Backspace / DelScroll up
nGo to the next node at the same level
pGo to the previous node at the same level
uGo up one level to the parent node
TabJump to the next hyperlink/menu item on the page
EnterFollow the hyperlink/menu item under the cursor
mPrompt for a menu item name to jump to directly
lGo back (like a browser’s “back” button)
/patternSearch forward for text
sSearch across the entire document, not just the current node
gGo to a specific node by name (prompts for it)
dReturn to the top-level directory of all info documents
qQuit
?Show the full keybinding help

The n/p/u trio is the core mental model: info documents are a tree, n and p move sideways among siblings, u moves up to the parent, and Enter/Tab follow explicit links regardless of tree position.

Command-Line Options

OptionDescription
-f fileSpecify an info file directly by path rather than by name
-n nodeJump to a specific named node on startup
-o fileOutput the selected node(s) to a file instead of displaying interactively
--usageShow a short usage summary
-w, --wherePrint the physical file location of a document instead of displaying it
--versionShow info’s own version
-d dirAdd a directory to the info search path for this invocation

Checking Where a Document Lives on Disk

$ info -w coreutils

This is useful the same way man -w is — confirming exactly which file is being read, particularly if you have multiple versions of a tool installed (a distro package plus something compiled from source).

Dumping a Node to a File for Scripting

$ info -o output.txt coreutils 'ls invocation'

I’ve used this to extract a specific chunk of documentation into a text file for including in internal runbooks, rather than screenshotting a terminal.

The Structure of Texinfo Documents

Understanding the hierarchy makes navigation click:

You can see a document’s top-level menu by opening it and looking for lines starting with *:

* Menu:

* Introduction::               Caveats, overview, and authors
* Common options::             Common options
* Output of entire files::     cat tac nl od base32 base64 basenc
* Formatting file contents::   fmt pr fold
...

Each of those is a jump target — position your cursor on one and press Enter, or press m and type the name.

info vs. man vs. –help

I laid this out in the man article too, but it’s worth repeating here from info’s perspective specifically, because the differences matter for choosing the right tool:

Aspectmaninfo
StructureFlat, single document per pageHierarchical tree of linked nodes
Best coverageNearly universal — virtually every installed program has oneBest for GNU software specifically; many non-GNU tools have no info page at all
DepthOften a condensed referenceOften the full, canonical documentation for GNU tools
NavigationLinear scrolling via less, with searchHypertext-style jumping via menus and cross-references
Learning curveLowModerate — keybindings aren’t obvious at first

My practical rule: for a quick flag lookup on any random tool, man. For deep, thorough documentation on a core GNU utility — especially bash, gcc, gdb, make, tar, or coreutils — check info first, because that’s genuinely where the GNU project put its most complete documentation.

How info Works Internally

  1. Texinfo source files (.texi or .texinfo) are the canonical source, written by the software’s maintainers using Texinfo markup — a macro language somewhat similar to LaTeX in spirit.
  2. These are compiled into .info files (often further compressed as .info.gz) using the makeinfo tool, part of the Texinfo package. The compiled .info files are what actually gets installed on your system and what info reads.
  3. Installed .info files live under directories like /usr/share/info/, and each is registered in a top-level directory file (/usr/share/info/dir) so that plain info with no arguments can show a master menu of everything installed.
  4. When a package is installed or removed, install-info updates that directory file automatically — this is why you sometimes see install-info mentioned in package manager output during installs.
  5. Texinfo source can also be compiled to other output formats entirely — HTML, PDF, plain text — using the same makeinfo/texi2pdf toolchain, which is why GNU project documentation is often available in matching info, HTML, and PDF forms that all originate from the same source file.

Practical Use Cases

Reading the full, canonical reference for a coreutils command:

$ info coreutils 'sort invocation'

This gave me a far more complete explanation of sort‘s -k field specification syntax than the man page’s condensed version, including edge cases around field separators I hadn’t considered.

Learning bash scripting features properly. The bash info manual is enormous and covers parameter expansion, arithmetic evaluation, and job control in far more depth than man bash alone:

$ info bash

Searching an entire manual for a keyword, useful when you know a feature exists somewhere in a large manual but not which node it lives under:

$ info bash
# then inside info, press: s
# type: associative array

Pressing lowercase s searches across all nodes in the document, not just the current one — a critical distinction from / which only searches within the current node.

Extracting reference text for documentation or automation, using -o to dump a node to a plain text file for inclusion elsewhere.

Troubleshooting

“No such file or directory” / info opens but the topic isn’t found: The Texinfo document for that tool may simply not be installed — not every package ships one. Check what’s actually available with:

$ info
# browse the top-level directory of everything installed

info command not found at all: Install the info/texinfo package for your distro (Debian/Ubuntu: sudo apt install info; RHEL/Fedora: sudo dnf install texinfo).

Keybindings feel unresponsive or wrong: If you’re used to less/vi-style navigation, info’s Emacs-derived bindings (n/p/u instead of arrow-key expectations) take deliberate practice. Arrow keys and Page Up/Down generally still work for basic scrolling even if you don’t touch the Emacs-style keys at all.

Formatting looks broken in some terminals: Older or minimal terminal emulators sometimes render info’s cross-reference markers oddly. This is almost always cosmetic and doesn’t affect the actual text content.

Best Practices

Compatibility Across Distributions

The info reader and the underlying Texinfo format are GNU project components, packaged consistently across virtually all Linux distributions — Debian/Ubuntu (info/texinfo packages), Fedora/RHEL (texinfo package), Arch (texinfo), openSUSE. Behavior is essentially identical everywhere since it’s the same upstream GNU Texinfo project in each case; what varies is which packages actually ship .info files by default — minimal server and container images frequently strip documentation of all kinds (man and info alike) to save space, so on such systems you may need to explicitly install documentation packages.

Summary

info is the reader for GNU’s Texinfo documentation system — a hierarchical, hyperlinked alternative to the flat man page format, and often the more complete and authoritative source for GNU core utilities specifically. The navigation model (nodes, menus, cross-references, with n/p/u for tree movement and s for whole-document search) has a steeper learning curve than man‘s simple pager-based approach, but it pays off for genuinely deep reference reading, especially on tools like bash, gcc, gdb, and coreutils where the info manual is meaningfully more thorough than the corresponding man page.

References

Exit mobile version