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):
| Key | Action |
|---|---|
Space | Scroll down / move to next node when at bottom |
Backspace / Del | Scroll up |
n | Go to the next node at the same level |
p | Go to the previous node at the same level |
u | Go up one level to the parent node |
Tab | Jump to the next hyperlink/menu item on the page |
Enter | Follow the hyperlink/menu item under the cursor |
m | Prompt for a menu item name to jump to directly |
l | Go back (like a browser’s “back” button) |
/pattern | Search forward for text |
s | Search across the entire document, not just the current node |
g | Go to a specific node by name (prompts for it) |
d | Return to the top-level directory of all info documents |
q | Quit |
? | 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
| Option | Description |
|---|---|
-f file | Specify an info file directly by path rather than by name |
-n node | Jump to a specific named node on startup |
-o file | Output the selected node(s) to a file instead of displaying interactively |
--usage | Show a short usage summary |
-w, --where | Print the physical file location of a document instead of displaying it |
--version | Show info’s own version |
-d dir | Add 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:
- Top node — the root of a document, usually a table of contents / overview with a menu listing top-level sections
- Menu — a list of links to child nodes, displayed as
* Item Name:: Description - Cross-references — inline links to related nodes elsewhere in the document (or even in a different document entirely)
- Index — many large Texinfo manuals (bash, gcc, emacs) include a searchable index you can jump into directly
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:
| Aspect | man | info |
|---|---|---|
| Structure | Flat, single document per page | Hierarchical tree of linked nodes |
| Best coverage | Nearly universal — virtually every installed program has one | Best for GNU software specifically; many non-GNU tools have no info page at all |
| Depth | Often a condensed reference | Often the full, canonical documentation for GNU tools |
| Navigation | Linear scrolling via less, with search | Hypertext-style jumping via menus and cross-references |
| Learning curve | Low | Moderate — 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
- Texinfo source files (
.texior.texinfo) are the canonical source, written by the software’s maintainers using Texinfo markup — a macro language somewhat similar to LaTeX in spirit. - These are compiled into
.infofiles (often further compressed as.info.gz) using themakeinfotool, part of the Texinfo package. The compiled.infofiles are what actually gets installed on your system and whatinforeads. - Installed
.infofiles live under directories like/usr/share/info/, and each is registered in a top-level directory file (/usr/share/info/dir) so that plaininfowith no arguments can show a master menu of everything installed. - When a package is installed or removed,
install-infoupdates that directory file automatically — this is why you sometimes seeinstall-infomentioned in package manager output during installs. - Texinfo source can also be compiled to other output formats entirely — HTML, PDF, plain text — using the same
makeinfo/texi2pdftoolchain, 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
- For GNU core utilities specifically (
ls,cp,mv,sort,cut,sed,awkvariants,tar,find,grep), always check the info manual if the man page leaves something unclear — it’s usually the deeper source, not a duplicate. - Learn
s(search whole document) early; it’s the single most useful keybinding for finding your way in a large manual without knowing the exact node name in advance. - Use
info -wwhen you need to know the actual file path, e.g., for including a specific manual in an offline documentation bundle. - Don’t expect
infopages for non-GNU or third-party software — coverage is inconsistent outside the GNU project ecosystem, and many modern tools skip Texinfo entirely in favor of man pages or just--helpoutput plus a website.
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
- GNU Texinfo manual — https://www.gnu.org/software/texinfo/manual/texinfo/
- GNU coreutils manual (the info manual referenced throughout this piece) — https://www.gnu.org/software/coreutils/manual/
man info— the man page for the info reader itself
