tail(1) on Solnix vs Linux and the BSDs

On Solnix, tail is the illumos tail at /usr/bin/tail. Its synopsis has no -n, and -b, -c and -l are unit letters appended to the count, not options that take a value. -n and -c number are documented only for /usr/xpg4/bin/tail, so Linux or BSD scripts using tail -n N may need that path.

What Solnix runs

A default Solnix system runs the illumos /usr/bin/tail. /usr/xpg4/bin/tail is also shipped; it documents -c number and -n number, and its Interface Stability is Standard. /usr/ucb/tail is shipped too, but the bundle does not describe it. The /usr/bin/tail ATTRIBUTES table lists only CSI Enabled.

Differences

Compared withTopicWhat differs
all four-n in /usr/bin/tailThe /usr/bin/tail synopsis has no -n. The page documents -n number only under /usr/xpg4/bin/tail. Linux and all three BSDs list -n number in their synopsis or options. Use /usr/xpg4/bin/tail on Solnix for the -n form.
Source: Solnix tail(1) SYNOPSIS, OPTIONS (/usr/xpg4/bin/tail); Linux tail(1) -n; FreeBSD/OpenBSD/NetBSD tail(1) -n
FreeBSD, OpenBSD, NetBSD-b and -c meaningOn Solnix /usr/bin/tail, -b, -c and -l are unit letters ('Units of blocks/bytes/lines'), used as in +5c or -lbcr. On the BSDs, -b number and -c number take the count as an argument. The Solnix page does not give the block size; the BSDs say 512 bytes.
Source: Solnix tail(1) SYNOPSIS, OPTIONS -b -c -l; FreeBSD/OpenBSD/NetBSD tail(1) -b, -c
Linux-b and -r on LinuxLinux tail has no -b and no -r; its option list has neither. Solnix tail has both: -b for blocks and -r to print in reverse order. A Solnix script using tail -r fails on Linux.
Source: Linux tail(1) option list; Solnix tail(1) OPTIONS -b, -r
FreeBSD, OpenBSD, NetBSD-r with -b/-c/-nOn the BSDs, -r changes what -b, -c and -n mean: with -r they give how many bytes, lines or blocks to show. The Solnix page documents no such interaction. It says the default for -r is the whole file in reverse, and that -f is ignored if both -r and -f are given.
Source: FreeBSD/OpenBSD/NetBSD tail(1) -r; Solnix tail(1) OPTIONS (intro, -r)
all fourmultiple files and headersSolnix tail takes a single [file] operand; the page documents no multi-file headers. Linux and the BSDs accept several files and print '==> name <==' headers. Linux, FreeBSD and NetBSD add -q and -v; Linux and FreeBSD also have long forms. OpenBSD has neither.
Source: Solnix tail(1) SYNOPSIS, OPERANDS; Linux tail(1) -q, -v; FreeBSD tail(1) -q, -v; NetBSD tail(1) -q, -v; OpenBSD tail(1) DESCRIPTION
Linux-F and following by nameSolnix -F follows the named file and rereads it from the start if it is recreated after a move. On Linux, -F is --follow=name --retry, and plain -f follows the file descriptor, so a renamed file keeps being tracked. The Solnix page says only that -f watches the file.
Source: Solnix tail(1) OPTIONS -f, -F; Linux tail(1) -F, -f, --follow
OpenBSDno -F on OpenBSDOpenBSD tail has no -F. Its -f reopens the file when the inode number changes and resets to the start on truncation. Solnix, FreeBSD and NetBSD have -F for rotated logs.
Source: OpenBSD tail(1) SYNOPSIS, -f; Solnix tail(1) -F; FreeBSD tail(1) -F; NetBSD tail(1) -F
FreeBSD, NetBSDhow rotation is detectedNetBSD -F checks every five seconds whether the file was shortened or moved (inode or device change). FreeBSD -F reopens when the name has a new inode. The Solnix page gives no detection method or interval. NetBSD BUGS: truncation can be missed if the file regrows between checks.
Source: NetBSD tail(1) -F, BUGS; FreeBSD tail(1) -F; Solnix tail(1) -F
FreeBSD, OpenBSD, NetBSD-f with pipes and FIFOsSolnix -f is documented as not looping when the input is a pipe. FreeBSD ignores -f for a pipe but not a FIFO. OpenBSD and NetBSD ignore it with no file arguments and stdin a pipe or FIFO.
Source: Solnix tail(1) -f; FreeBSD tail(1) -f; OpenBSD tail(1) -f; NetBSD tail(1) -f
Linux, FreeBSDsize suffixes and Linux extrasLinux NUM accepts suffixes (b, kB, K, MB, M, ...) and has -s, --pid, --retry and -z. FreeBSD accepts expand_number(3) suffixes. The Solnix page documents no count suffixes beyond l, b, c and none of those Linux options.
Source: Linux tail(1) NUM, -s, --pid, --retry, -z; FreeBSD tail(1) DESCRIPTION; Solnix tail(1) OPTIONS
all fourpiped input limitSolnix NOTES: piped tails relative to the end of the file go through a buffer and are limited in length, and character special files can misbehave. The Linux and BSD pages in the bundle give no such limit.
Source: Solnix tail(1) NOTES

Standards

  • POSIX: tail is a POSIX.1-2024 utility.
  • Solnix: /usr/xpg4/bin/tail: Interface Stability Standard. The page refers to standards(7); /usr/bin/tail lists only CSI Enabled.
  • FreeBSD: Expected to be a superset of the IEEE Std 1003.2-1992 (“POSIX.2”) specification; -F, -b and -r are extensions to that standard.
  • OpenBSD: Compliant with the IEEE Std 1003.1-2008 (“POSIX.1”) specification; the flags [-br] are extensions.
  • NetBSD: Expected to be a superset of the IEEE Std 1003.2-1992 (“POSIX.2”) specification; -b, -r and -F are extensions.
  • Linux: The Linux page in the bundle has no STANDARDS section.

Writing portable scripts

  • Use only -f, and -n N or -c N (via /usr/xpg4/bin/tail on Solnix). Avoid -r, -b, -F, -q and -v, which are missing or mean different things on some systems.
  • Run tail once per file instead of passing several files. The Solnix synopsis takes one file, and header handling differs between systems.

Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.