These docs are under active development and cover the v0.20 Kobicha security model.
On this page
reference 1 min read

readlink

readlink prints where a symbolic link points.

readlink [options] file...

A symbolic link is a file whose contents are another path. readlink reads that path and prints it:

$ readlink /home/jack/work
/data/projects/jack

By default readlink resolves exactly one level: it prints the link's immediate target, whether or not that target is itself a link, and whether or not it exists. If the named file is not a symbolic link, readlink prints nothing and reports failure.

Canonicalizing a whole path

The canonicalize options change readlink from "read this one link" into "resolve this entire path to its real, absolute form" — following every symbolic link in every component, collapsing . and ... The three differ only in how strict they are about components existing:

Option Resolves Existence requirement
-f, --canonicalize Every link in the path. Every component except the last must exist.
-e, --canonicalize-existing Every link in the path. Every component must exist.
-m, --canonicalize-missing Every link in the path. No component need exist.

With any of these, readlink succeeds on an ordinary (non-link) file too — it simply returns the canonical path. realpath is the dedicated command for this canonicalizing job and has more options for it; the canonicalize flags here exist so readlink can do it without a second tool.

Output and error control

Option Effect
-n, --no-newline Do not print the trailing newline. Ignored, with a warning, when more than one file is given.
-z, --zero End each output line with a NUL character instead of a newline.
-q, --quiet / -s, --silent Suppress most error messages. This is the default.
-v, --verbose Report error messages that the quiet default would suppress.

Exit status

Code Meaning
0 Every named file was resolved and printed.
1 A file was not a symbolic link, or a path could not be resolved under the chosen strictness.