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.
The manual pages
- Solnix: tail(1) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: tail(1) coreutils-full-9.11
- FreeBSD: tail(1) 15.1-RELEASE
- OpenBSD: tail(1) 8.0
- NetBSD: tail(1) 11.0
- Standard: POSIX.1-2024 (IEEE Std 1003.1-2024),
tail
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 with | Topic | What differs |
|---|---|---|
| all four | -n in /usr/bin/tail | The /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 meaning | On 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 Linux | Linux 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/-n | On 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 four | multiple files and headers | Solnix 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 name | Solnix -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 |
| OpenBSD | no -F on OpenBSD | OpenBSD 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, NetBSD | how rotation is detected | NetBSD -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 FIFOs | Solnix -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, FreeBSD | size suffixes and Linux extras | Linux 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 four | piped input limit | Solnix 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/taillists only CSI Enabled. - FreeBSD: Expected to be a superset of the IEEE Std 1003.2-1992 (“POSIX.2”) specification;
-F,-band-rare 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,-rand-Fare extensions. - Linux: The Linux page in the bundle has no STANDARDS section.
Writing portable scripts
- Use only
-f, and-nN or-cN (via/usr/xpg4/bin/tailon Solnix). Avoid-r,-b,-F,-qand-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.