getfacl(1) on Solnix vs Linux and the BSDs

On Solnix, getfacl is the illumos getfacl at /usr/bin/getfacl. It takes only -a and -d, and it fails on file systems that use NFSv4 ACLs. Linux and the BSDs have more options, and -h and -s differ or are missing.

What Solnix runs

A default Solnix system runs the illumos getfacl at /usr/bin/getfacl. No other variants are shipped. For NFSv4 ACLs the page points to ls(1) with -v or -V. OpenBSD has no counterpart page in the bundle, so it is not compared.

Differences

Compared withTopicWhat differs
FreeBSD, NetBSD-d meaning and default scopeSolnix with no options shows both the ACL and the default ACL. The FreeBSD and NetBSD pages describe -d as applying to the default ACL instead of the access ACL, and document no mode that shows both. They also say -d is an error if no default ACL can be associated with the file.
Source: Solnix getfacl(1) DESCRIPTION (no options), -d; FreeBSD getfacl(1) -d; NetBSD getfacl(1) -d
FreeBSD, NetBSD-a missingSolnix and Linux have -a to show only the ACL (not the default ACL). The FreeBSD and NetBSD synopses have no -a.
Source: Solnix getfacl(1) -a; Linux getfacl(1) -a, --access; FreeBSD getfacl(1) SYNOPSIS; NetBSD getfacl(1) SYNOPSIS
Linux, FreeBSD, NetBSDNFSv4 ACLsSolnix getfacl fails on a file system that supports NFSv4 ACLs, and the page says to use ls -v or -V instead. FreeBSD and NetBSD getfacl handle NFSv4 ACLs, with -i and -v for them and -d invalid for them. The Linux page does not mention NFSv4.
Source: Solnix getfacl(1) DESCRIPTION; FreeBSD getfacl(1) -d, -i, -v; NetBSD getfacl(1) -d, -i, -v
Linuxrecursion and link handlingSolnix getfacl has no -R, -L or -P, and no long options. Linux uses them to walk directories recursively and to control symbolic link following. A Linux script using getfacl -R fails on Solnix.
Source: Solnix getfacl(1) SYNOPSIS; Linux getfacl(1) -R, -L, -P
Linux, FreeBSD, NetBSD-h meaningSolnix getfacl has no -h. On FreeBSD and NetBSD, -h returns the ACL of a symbolic link itself instead of following it. On Linux, -h prints help.
Source: Solnix getfacl(1) SYNOPSIS; FreeBSD getfacl(1) -h; NetBSD getfacl(1) -h; Linux getfacl(1) -h, --help
Linux, FreeBSD, NetBSDsuppressing the headerSolnix documents no way to omit the file, owner and group header. Linux uses -c and FreeBSD and NetBSD use -q. FreeBSD and NetBSD recommend -q for filenames with unprintable characters.
Source: Solnix getfacl(1) OPTIONS; Linux getfacl(1) -c; FreeBSD getfacl(1) -q; NetBSD getfacl(1) -q
Linux, FreeBSD, NetBSDnumeric IDsSolnix getfacl has no -n. Linux, FreeBSD and NetBSD have -n for numeric user and group IDs. On FreeBSD and NetBSD it is ignored for POSIX.1e ACLs.
Source: Solnix getfacl(1) SYNOPSIS; Linux getfacl(1) -n; FreeBSD getfacl(1) -n; NetBSD getfacl(1) -n
Linux, FreeBSDskip trivial ACLsSolnix and NetBSD have no -s. Linux and FreeBSD use -s to skip files that have only the base owner, group and other entries.
Source: Linux getfacl(1) -s, --skip-base; FreeBSD getfacl(1) -s; Solnix getfacl(1) SYNOPSIS; NetBSD getfacl(1) SYNOPSIS
Linux, FreeBSD, NetBSDreading names from stdinLinux (with -) and FreeBSD and NetBSD (no file, or -) read pathnames from standard input. The Solnix synopsis requires file operands and the page documents no stdin mode.
Source: Linux getfacl(1) SYNOPSIS, -; FreeBSD getfacl(1) file operand; NetBSD getfacl(1) file operand; Solnix getfacl(1) SYNOPSIS, OPERANDS
Linuxoutput format options and POSIXLY_CORRECTLinux has -e, -E, -t and -p, and POSIXLY_CORRECT changes its defaults (only the ACL printed unless -d is given). The Solnix page documents none of these and names no environment variables.
Source: Linux getfacl(1) -e, -E, -t, -p, CONFORMANCE TO POSIX 1003.1e DRAFT STANDARD 17; Solnix getfacl(1) OPTIONS
FreeBSD, NetBSDexit statusFreeBSD and NetBSD document exit 0 on success and >0 on error. The Solnix page has no EXIT STATUS section.
Source: FreeBSD getfacl(1) EXIT STATUS; NetBSD getfacl(1) EXIT STATUS; Solnix getfacl(1)
Linux, FreeBSD, NetBSDsetfacl round tripThe Solnix page says getfacl output is in the format setfacl -f reads, so redirected output can copy one file's ACL to another. The Linux page also says the output can be used as setfacl input. The FreeBSD and NetBSD pages only refer to setfacl(1) for the ACL syntax.
Source: Solnix getfacl(1) NOTES; Linux getfacl(1) DESCRIPTION; FreeBSD getfacl(1) DESCRIPTION; NetBSD getfacl(1) DESCRIPTION

Standards

  • POSIX: getfacl is not a POSIX.1-2024 utility.
  • Solnix: Interface Stability: Evolving.
  • Linux: The page has a section 'CONFORMANCE TO POSIX 1003.1e DRAFT STANDARD 17', which describes the changes made when POSIXLY_CORRECT is set.
  • FreeBSD: The getfacl utility is expected to be IEEE Std 1003.2c compliant.
  • NetBSD: The getfacl utility is expected to be IEEE Std 1003.2c compliant.

Writing portable scripts

  • Use only getfacl with -a, -d and file operands in scripts that must run on Solnix. Do not rely on -h, -n, -R, -c, -q or -s.
  • Do not assume the default scope is the same everywhere. Pass -d explicitly when you want the default ACL, and check how the access ACL is selected on each system.

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.