who(1) on Solnix vs Linux and the BSDs

On Solnix, who is the illumos who at /usr/bin/who, and it reads /var/adm/utmpx by default. It accepts far more flags than FreeBSD or OpenBSD (-a, -b, -d, -l, -p, -r, -t) and has -n, which no counterpart documents. -T is the flag most likely to surprise you, because its output differs between /usr/bin/who and /usr/xpg4/bin/who.

What Solnix runs

A default Solnix system runs the illumos /usr/bin/who. /usr/xpg4/bin/who is also shipped. The page documents these differences: /usr/bin/who -T also writes idle, pid and comment, while the xpg4 -T writes only the state field. -s appears in the xpg4 synopsis only as the separate form 'who -s [-bdHlmpqrtu]'.

Differences

Compared withTopicWhat differs
all fourdefault database fileSolnix who reads /var/adm/utmpx. Linux and OpenBSD read /var/run/utmp, FreeBSD reads /var/run/utx.active, and NetBSD reads /var/run/utmpx. Solnix suggests /var/adm/wtmpx as the history file. Linux and OpenBSD suggest /var/log/wtmp, FreeBSD /var/log/utx.log, and NetBSD /var/log/wtmpx or /var/log/wtmp.
Source: Solnix who(1) DESCRIPTION; Linux who(1) FILE text; FreeBSD who(1) DESCRIPTION; OpenBSD who(1) file; NetBSD who(1) file
all four-T outputSolnix /usr/bin/who -T acts like -s but also writes state, idle, pid and comment. The xpg4 version writes only state. Linux and FreeBSD add a message-status character. OpenBSD and NetBSD print a character after the user name.
Source: Solnix who(1) -T under /usr/bin/who and /usr/xpg4/bin/who; Linux who(1) -T; FreeBSD who(1) -T; OpenBSD who(1) -T; NetBSD who(1) -T
Linux-w and long optionsSolnix who has no -w and no long options. Linux accepts -w, --mesg, --message and --writable as synonyms for -T, plus --all, --boot, --count, --heading and others, as well as --lookup. A Linux script using these fails on Solnix.
Source: Linux who(1) -T, -w, --mesg, --message, --writable, --lookup; Solnix who(1) SYNOPSIS
FreeBSD, OpenBSDmissing flagsFreeBSD who has no -d, -l, -p, -r or -t, and OpenBSD has no -a or -b either. Solnix has all of these. OpenBSD says -abdlprst are not supported by its who.
Source: FreeBSD who(1) SYNOPSIS; OpenBSD who(1) SYNOPSIS, STANDARDS; Solnix who(1) SYNOPSIS
all four-n users per lineSolnix who -q -n x sets the number of users shown per line, with x at least 1. -n works only with -q. None of the counterpart pages documents -n.
Source: Solnix who(1) -n, SYNOPSIS; Linux, FreeBSD, OpenBSD, NetBSD who(1) SYNOPSIS
Linux, FreeBSD, NetBSD-a contentsSolnix -a turns on -b, -d, -l, -p, -r, -t, -T and -u. Linux -a is the same set. FreeBSD -a equals -bTu. NetBSD -a equals -bdlprTtuv. OpenBSD has no -a.
Source: Solnix who(1) -a; Linux who(1) -a; FreeBSD who(1) -a; NetBSD who(1) -a; OpenBSD who(1) SYNOPSIS
NetBSD-v and -r detailNetBSD has -v, which adds termination signals, exit status, session id and entry type. Solnix has no -v. Solnix -r only indicates the current run-level, whereas NetBSD -r documents its run-level letters (d, s, r, t, m, T, c).
Source: NetBSD who(1) -v, -r; Solnix who(1) -r, SYNOPSIS
Linux, OpenBSDam i operandSolnix 'am i' and 'am I' are equivalent to -m only in the C locale, and the words must be separate arguments. Linux presumes -m for any two arguments ('mom likes' works). OpenBSD says 'am i' returns the invoker's real user name.
Source: Solnix who(1) OPERANDS; Linux who(1) ARG1 ARG2; OpenBSD who(1) am i
Linux, OpenBSD, NetBSDenvironment variablesSolnix lists LANG, LC_ALL, LC_CTYPE, LC_MESSAGES, LC_TIME and NLSPATH. FreeBSD lists COLUMNS, LANG, LC_ALL and LC_TIME. The Linux, OpenBSD and NetBSD pages in the bundle document no environment variables.
Source: Solnix who(1) ENVIRONMENT VARIABLES; FreeBSD who(1) ENVIRONMENT; Linux, OpenBSD, NetBSD who(1)
all foursingle-user stateOn Solnix, after shutdown to single-user state, plain who returns only a prompt, because utmpx is updated at login. who am i still reports correctly. No counterpart page mentions this.
Source: Solnix who(1) NOTES; Linux, FreeBSD, OpenBSD, NetBSD who(1)
all fourinit-related fieldsSolnix -d adds an exit field for dead processes, and -l shows lines waiting for login with the name LOGIN. The comment field comes from /etc/inittab. The Solnix page documents this for init-based systems.
Source: Solnix who(1) -d, -l, -p, DESCRIPTION; Linux who(1) -d, -l, -p

Standards

  • POSIX: who is a POSIX.1-2024 utility.
  • Solnix: ATTRIBUTES for /usr/xpg4/bin/who: Interface Stability is Standard.
  • FreeBSD: The who utility conforms to IEEE Std 1003.1-2001 (“POSIX.1”).
  • OpenBSD: Compliant with IEEE Std 1003.1-2008 (“POSIX.1”). Flags [-abdHlpqrst] are an X/Open System Interfaces option, and of these [-abdlprst] are not supported.
  • NetBSD: Expected to conform to IEEE Std 1003.2-1992 (“POSIX.2”).

Writing portable scripts

  • Portable scripts should use only -H, -m, -q, -T, -u and 'am i'. Every system in the bundle documents these, except that Solnix -T output and OpenBSD 'am i' behaviour differ.
  • Do not rely on -a, -n or -w. They mean different things or are missing across Solnix, FreeBSD, OpenBSD, NetBSD and Linux.
  • Do not hard-code the utmp path. Run plain who, or pass a file only after checking which of the paths above exists.

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.