du(1) on Solnix vs Linux and the BSDs

On Solnix, du is the illumos du at /usr/bin/du. Its single-letter flags differ from Linux and the BSDs: -d means 'do not cross filesystems', not a depth limit, and there is no -c grand total. The default unit is 512-byte blocks, as on the BSDs, while Linux defaults to 1024 bytes.

What Solnix runs

/usr/bin/du is the illumos du. /usr/xpg4/bin/du has the same synopsis. It differs in that it acts as though -r is always given and reports an error if it cannot stat files or read directories, which affects the exit status. /usr/bin/du is silent about those conditions unless -r is given. /usr/ucb/du is also shipped, but the bundle does not describe it.

Differences

Compared withTopicWhat differs
all four-d meaningSolnix -d takes no argument and means 'do not cross filesystem boundaries'. On Linux, FreeBSD, OpenBSD and NetBSD, -d (--max-depth on Linux) limits the depth of entries shown. Solnix has no depth option, only -s and -a.
Source: Solnix du(1) SYNOPSIS and -d; Linux du(1) -d, --max-depth; FreeBSD du(1) -d depth; OpenBSD du(1) -d depth; NetBSD du(1) -d
all four-c grand totalSolnix du has no -c. Linux, FreeBSD, OpenBSD and NetBSD use -c to print a grand total after all arguments.
Source: Solnix du(1) SYNOPSIS and OPTIONS; Linux du(1) -c, --total; FreeBSD du(1) -c; OpenBSD du(1) -c; NetBSD du(1) -c
Linuxdefault block sizeSolnix du reports 512-byte units, rounded up, by default. Linux reports 1024-byte units unless POSIXLY_CORRECT is set, which gives 512. Output from the same command line differs by a factor of two.
Source: Solnix du(1) DESCRIPTION (default 512-byte units); Linux du(1) text after the option list (units default to 1024 bytes, or 512 if POSIXLY_CORRECT is set)
all fourBLOCKSIZE environmentThe Solnix ENVIRONMENT section lists only LANG, LC_ALL, LC_CTYPE, LC_MESSAGES and NLSPATH. FreeBSD, OpenBSD and NetBSD honour BLOCKSIZE. Linux honours DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE. The Solnix page does not say BLOCKSIZE has any effect.
Source: Solnix du(1) ENVIRONMENT; FreeBSD/OpenBSD/NetBSD du(1) ENVIRONMENT; Linux du(1) DU_BLOCK_SIZE, BLOCK_SIZE, BLOCKSIZE
all four-P and -l missingSolnix du has -H and -L but no -P. Linux, FreeBSD, OpenBSD and NetBSD have -P (no symlinks followed). Solnix has no -l either. Linux and FreeBSD -l counts hard-linked files each time they are found, while Solnix counts a multiply-linked file once.
Source: Solnix du(1) SYNOPSIS, NOTES; Linux du(1) -P, -l; FreeBSD du(1) -P, -l; OpenBSD du(1) -P; NetBSD du(1) -P
all four-b bytes and option conflictsSolnix -b reports bytes and implies -A. Combining -b with -h, -k or -m is an error on Solnix, while -h, -k and -m override each other. FreeBSD, OpenBSD and NetBSD have no -b. Linux -b is --apparent-size --block-size=1.
Source: Solnix du(1) -b and the paragraph after -x; Linux du(1) -b, --bytes; FreeBSD/OpenBSD/NetBSD du(1) SYNOPSIS
OpenBSD, NetBSDapparent size (-A)Solnix, Linux and FreeBSD have -A, which tallies apparent size rather than allocated blocks. The OpenBSD and NetBSD synopses have no -A.
Source: Solnix du(1) -A; Linux du(1) -A; FreeBSD du(1) -A; OpenBSD du(1) SYNOPSIS; NetBSD du(1) SYNOPSIS
all four-o flagSolnix -o leaves child directories out of a parent's total and does nothing with -s. Linux has -S (--separate-dirs) for a similar purpose. The FreeBSD, OpenBSD and NetBSD pages have no -o.
Source: Solnix du(1) -o; Linux du(1) -S, --separate-dirs; FreeBSD/OpenBSD/NetBSD du(1) SYNOPSIS
FreeBSD, OpenBSD, NetBSD-r and error reporting/usr/bin/du on Solnix says nothing about unreadable files unless -r is given. FreeBSD, OpenBSD and NetBSD already report them by default; FreeBSD and OpenBSD document -r as accepted but ignored. /usr/xpg4/bin/du on Solnix always reports.
Source: Solnix du(1) -r; FreeBSD du(1) -r, STANDARDS; OpenBSD du(1) -r, STANDARDS; NetBSD du(1) -r
FreeBSD, NetBSD-g and -m unitsSolnix has no -g for 1 GiB blocks. FreeBSD and NetBSD have -g. Solnix and NetBSD have -m for 1 MiB units, and Linux has -m. OpenBSD has neither -g nor -m.
Source: Solnix du(1) SYNOPSIS, -m; FreeBSD du(1) -g, -m; NetBSD du(1) -g, -m; OpenBSD du(1) SYNOPSIS; Linux du(1) -m
Linux, FreeBSD, NetBSDthreshold, exclude and inode optionsSolnix du has no size threshold, exclude or inode options. Linux and FreeBSD have -t threshold. FreeBSD has -I mask and Linux has --exclude and -X. Linux has --inodes and NetBSD has -i. Linux also has --files0-from, -0 and --time.
Source: Linux du(1) -t, --exclude, -X, --inodes, --files0-from, -0, --time; FreeBSD du(1) -t, -I; NetBSD du(1) -i; Solnix du(1) SYNOPSIS
Linux, FreeBSDhuman-readable variantsSolnix -h scales by 1024 and has no --si. Linux and FreeBSD have --si for powers of 1000. Linux and FreeBSD also have -B to set an arbitrary block size, which Solnix lacks.
Source: Solnix du(1) -h; Linux du(1) --si, -B; FreeBSD du(1) --si, -B

Standards

  • POSIX: du is a POSIX.1-2024 utility.
  • Solnix: INTERFACE STABILITY: the command line interface of du is Committed. The output of du is Committed.
  • FreeBSD: The du utility is compliant with the IEEE Std 1003.1-2008 (“POSIX.1”) specification. The flags [-ABIPcdghlmnt], [--libxo], [--si] and the BLOCKSIZE environment variable are extensions.
  • OpenBSD: The du utility is compliant with the IEEE Std 1003.1-2008 (“POSIX.1”) specification. The flags [-cdhP] and the BLOCKSIZE environment variable are extensions.

Writing portable scripts

  • Use only -a, -s, -k, -x and -H or -L in portable scripts. Do not use -d, -c, -b, -o, -P or -m, because they differ or are missing between systems.
  • Do not assume a default unit. Pass -k when you need 1024-byte blocks, since the default is 512 on Solnix and the BSDs and 1024 on Linux.

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.