BUSYBOX(1)

๐Ÿ’– BUSYBOX(1) ๐Ÿ’–

okay bestie, you asked about the busybox manual page, and it's literally from the BUSYBOX(1) section of the manual, so buckle up because this thing is iconic and also LONG. ๐Ÿ’…


โœจ NAME โœจ

BusyBox โ€” The Swiss Army Knife of Embedded Linux ๐ŸŒˆ

๐Ÿ“œ SYNTAX ๐Ÿ“œ

busybox <applet> [arguments...]  # or

<applet> [arguments...]          # if symlinked

๐ŸŒธ DESCRIPTION ๐ŸŒธ

okay so picture this: BusyBox takes tiny versions of like a MILLION common UNIX utilities and shoves them all into one single small executable. it's giving "one binary to rule them all" ๐Ÿ‘‘. it provides minimalist replacements for most of the utilities you'd usually find in GNU coreutils, util-linux, etc.

ngl the utilities in BusyBox generally have fewer options than their full-featured GNU cousins โ€” but lowkey that's the point? the options that ARE included still give you the expected functionality and behave very much like their GNU counterparts. no cap. ๐Ÿซถ

BusyBox was written with size-optimization and limited resources in mind. it's also extremely modular, so you can easily include or exclude commands (or features) at compile time. this makes it easy to customize your embedded systems. to create a working system, you literally just add /dev, /etc, and a Linux kernel. that's it. BusyBox provides a fairly complete POSIX environment for any small or embedded system. slay. โœจ

BusyBox is extremely configurable too. this allows you to include ONLY the components you need, thereby reducing binary size. run make config or make menuconfig to select the functionality that you wish to enable. then run make to compile BusyBox using your configuration. ๐Ÿ› ๏ธ

after the compile has finished, you should use make install to install BusyBox. this will install the bin/busybox binary, in the target directory specified by CONFIG_PREFIX. CONFIG_PREFIX can be set when configuring BusyBox, or you can specify an alternative location at install time (i.e., with a command line like make CONFIG_PREFIX=/tmp/foo install). and if you enabled any applet installation scheme (either as symlinks or hardlinks), those will also be installed in the location pointed to by CONFIG_PREFIX. so organized ๐Ÿ’–

๐Ÿฆ‹ USAGE ๐Ÿฆ‹

BusyBox is a multi-call binary. and what is that, you ask? it's an executable program that performs the same job as more than one utility program. so there's just a single BusyBox binary, but that single binary acts like a large number of utilities. main character energy, honestly ๐Ÿ‘‘. it's also how BusyBox stays smaller โ€” all the built-in utility programs (we call them applets) can share code for many common operations. efficient queen ๐Ÿ’…

you can also invoke BusyBox by issuing a command as an argument on the command line. for example, entering

/bin/busybox ls

will also cause BusyBox to behave as ls. periodt.

of course, adding /bin/busybox into every command would be painful. so most people will invoke BusyBox using links to the BusyBox binary. for example, entering

ln -s /bin/busybox ls
./ls

will cause BusyBox to behave as ls (if the ls command has been compiled into BusyBox). generally speaking, you should never need to make all these links yourself, as the BusyBox build system will do this for you when you run the make install command. we love a system that does the chores for us ๐Ÿ™ˆ

if you invoke BusyBox with no arguments, it will provide you with a list of the applets that have been compiled into your BusyBox binary. handy!!

๐ŸŽ€ COMMON OPTIONS ๐ŸŽ€

most BusyBox applets support the --help argument to provide a terse runtime description of their behavior. and if the CONFIG_FEATURE_VERBOSE_USAGE option has been enabled, more detailed usage information will also be available. so if --help felt a little too mysterious, that's why โ€” go poke the config ๐Ÿซถ

๐Ÿ‘‘ COMMANDS ๐Ÿ‘‘

currently available applets include:

[, [[, acpid, adjtimex, ar, arch, arp, arping, ascii, ash, awk, base64,
basename, bc, blkdiscard, blkid, blockdev, brctl, bunzip2, bzcat, bzip2,
cal, cat, chattr, chgrp, chmod, chown, chpasswd, chroot, chvt, clear,
cmp, cp, cpio, crc32, crond, crontab, cttyhack, cut, date, dc, dd,
deallocvt, depmod, devmem, df, diff, dirname, dmesg, dnsdomainname,
dos2unix, dpkg, dpkg-deb, du, dumpkmap, dumpleases, echo, ed, egrep,
env, expand, expr, factor, fallocate, false, fatattr, fdisk, fgrep,
find, findfs, fold, free, freeramdisk, fsfreeze, fstrim, ftpget, ftpput,
getfattr, getopt, getty, grep, groups, gunzip, gzip, halt, head,
hexdump, hostid, hostname, httpd, hwclock, i2cdetect, i2cdump, i2cget,
i2cset, i2ctransfer, id, ifconfig, ifdown, ifup, init, insmod, install,
ionice, ip, ipcalc, kill, killall, klogd, last, less, link, linux32,
linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname,
logread, losetup, ls, lsattr, lsblk, lsmod, lsscsi, lzcat, lzma, lzop,
md5sum, mdev, microcom, mim, mkdir, mkdosfs, mke2fs, mkfifo, mknod,
mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mt, mv,
nameif, nbd-client, nc, netstat, nl, nohup, nologin, nproc, nsenter,
nslookup, nuke, od, openvt, partprobe, passwd, paste, patch, pidof,
ping, ping6, pivot_root, poweroff, printf, ps, pwd, rdate, readlink,
realpath, reboot, renice, reset, resize, resume, rev, rm, rmdir, rmmod,
route, rpm, rpm2cpio, run-init, run-parts, sed, seq, setkeycodes,
setpriv, setsid, sh, sha1sum, sha256sum, sha384sum, sha3sum, sha512sum,
shred, shuf, sleep, sort, ssl_client, ssl_server, start-stop-daemon,
stat, strings, stty, su, sulogin, svc, svok, swapoff, swapon,
switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tc, tee,
telnet, test, tftp, time, timeout, top, touch, tr, traceroute,
traceroute6, true, truncate, ts, tty, tunctl, ubirename, udhcpc,
udhcpc6, udhcpd, uevent, umount, uname, uncompress, unexpand, uniq,
unix2dos, unlink, unlzma, unshare, unxz, unzip, uptime, usleep,
uudecode, uuencode, uuidgen, vconfig, vi, vmstat, w, watch, watchdog,
wc, wget, which, who, whoami, xargs, xxd, xz, xzcat, yes, zcat

that's a LOT of applets, bestie. a whole arsenal ๐Ÿ“


๐Ÿ’€ COMMAND DESCRIPTIONS ๐Ÿ’€

okay NOW we get to the good part โ€” the individual applets, one by one. let's go ๐Ÿ’…

acpid

acpid [-df] [-c CONFDIR] [-l LOGFILE] [-a ACTIONFILE] [-M MAPFILE] [-e
PROC_EVENT_FILE] [-p PIDFILE]

Listen to ACPI events and spawn specific helpers on event arrival ๐Ÿ””

  • -d โ€” log to stderr, not log file (implies -f)
  • -f โ€” run in foreground
  • -c DIR โ€” config directory [/etc/acpi]
  • -e FILE โ€” /proc event file [/proc/acpi/event]
  • -l FILE โ€” log file [/var/log/acpid.log]
  • -p FILE โ€” pid file [/var/run/acpid.pid]
  • -a FILE โ€” action file [/etc/acpid.conf]
  • -M FILE โ€” map file [/etc/acpi.map]

accept and ignore compatibility options -g -m -s -S -v. they exist, they're fine, we simply vibe past them ๐Ÿ’…

adjtimex

adjtimex [-q] [-o OFS] [-f FREQ] [-p TCONST] [-t TICK]

read or set kernel time variables. see adjtimex(2) โฐ

  • -q โ€” quiet
  • -o OFF โ€” time offset, in microseconds
  • -f FREQ โ€” frequency adjust, integer kernel units (65536 is 1ppm)
  • -t TICK โ€” microseconds per tick, usually 10000 (positive -t or -f values make the clock run faster)
  • -p TCONST

ar

ar x|p|t [-ov] ARCHIVE [FILE]...

extract or list FILEs from an ar archive ๐Ÿ“ฆ

  • x โ€” extract
  • p โ€” extract to stdout
  • t โ€” list
  • -o โ€” restore mtime
  • -v โ€” verbose

arch

arch

print system architecture ๐Ÿ—๏ธ (one word, zero drama)

arp

arp [-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME]
    [-v] [-i IF] -d HOSTNAME [pub]
    [-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]
    [-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub
    [-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub

manipulate the ARP cache ๐Ÿ•ธ๏ธ

  • -a โ€” display (all) hosts
  • -d โ€” delete ARP entry
  • -s โ€” set new entry
  • -v โ€” verbose
  • -n โ€” don't resolve names
  • -i IF โ€” network interface
  • -D โ€” read HWADDR from IFACE
  • -A,-p AF โ€” protocol family
  • -H HWTYPE โ€” hardware address type

arping

arping [-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP

send ARP requests/replies ๐Ÿ“ก

  • -f โ€” quit on first ARP reply
  • -q โ€” quiet
  • -b โ€” keep broadcasting, don't go unicast
  • -D โ€” exit with 1 if DST_IP replies
  • -U โ€” unsolicited ARP mode, update your neighbors
  • -A โ€” ARP answer mode, update your neighbors
  • -c N โ€” stop after sending N ARP requests
  • -w TIMEOUT โ€” seconds to wait for ARP reply
  • -I IFACE โ€” interface to use (default eth0)
  • -s SRC_IP โ€” sender IP address
  • DST_IP โ€” target IP address

ash

ash [-il] [-|+Cabefmnuvx] [-|+o OPT]... [-c 'SCRIPT' [ARG0 ARGS] | FILE
ARGS | -s ARGS]

the Unix shell interpreter ๐Ÿš (yes, it does the thing with the - and + prefixes, go read it again, it's all there)

awk

awk [OPTIONS] [AWK_PROGRAM] [FILE]...
  • -v VAR=VAL โ€” set variable
  • -F SEP โ€” use SEP as field separator
  • -f/-E FILE โ€” read program from FILE
  • -e AWK_PROGRAM

base64

base64 [-d] [-w COL] [FILE]

base64 encode or decode FILE to standard output ๐Ÿ”ค

  • -d โ€” decode data
  • -w COL โ€” wrap lines at COL (default 76, 0 disables)

basename

basename FILE [SUFFIX] | -a FILE... | -s SUFFIX FILE...

strip directory path and SUFFIX from FILE โœ‚๏ธ

  • -a โ€” all arguments are FILEs
  • -s SUFFIX โ€” remove SUFFIX (implies -a)

bc

bc [-sqlw] [FILE]...

arbitrary precision calculator ๐Ÿงฎ

  • -q โ€” quiet
  • -l โ€” load standard library
  • -s โ€” be POSIX compatible
  • -w โ€” warn if extensions are used

$BC_LINE_LENGTH changes output width ๐Ÿ“

blkdiscard

blkdiscard [-o OFS] [-l LEN] [-s] DEVICE

discard sectors on DEVICE ๐Ÿ—‘๏ธ

  • -o OFS โ€” byte offset into device
  • -l LEN โ€” number of bytes to discard
  • -s โ€” perform a secure discard

blkid

blkid [BLOCKDEV]...

print UUIDs of all filesystems ๐Ÿ”‘

blockdev

blockdev OPTION BLOCKDEV
  • --setro โ€” set ro
  • --setrw โ€” set rw
  • --getro โ€” get ro
  • --getss โ€” get sector size
  • --getbsz โ€” get block size
  • --setbsz BYTES โ€” set block size
  • --getsz โ€” get device size in 512-byte sectors
  • --getsize64 โ€” get device size in bytes
  • --getra โ€” get readahead in 512-byte sectors
  • --setra SECTORS โ€” set readahead
  • --flushbufs โ€” flush buffers
  • --rereadpt โ€” reread partition table

brctl

brctl COMMAND [BRIDGE [ARGS]]

manage ethernet bridges ๐ŸŒ‰ commands:

  • addbr BRIDGE โ€” create BRIDGE
  • delbr BRIDGE โ€” delete BRIDGE
  • addif BRIDGE IFACE โ€” add IFACE to BRIDGE
  • delif BRIDGE IFACE โ€” delete IFACE from BRIDGE

bunzip2

bunzip2 [-cfk] [FILE]...

decompress FILEs (or stdin) ๐ŸŽˆ

  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

bzcat

bzcat [FILE]...

decompress to stdout ๐Ÿ“ค

bzip2

bzip2 [-cfkdt123456789] [FILE]...

compress FILEs (or stdin) with the bzip2 algorithm ๐Ÿ—œ๏ธ


and that's the page so far, bestie โ€” there are literally more applets waiting in the next chunk, so don't go anywhere ๐Ÿ’–

  • -1..9 โ€” compression level bestie, pick your fighter (1 = lazy girl speed, 9 = try-hard ๐Ÿ’…)
  • -d โ€” decompress, put it back the way it was
  • -c โ€” write to stdout, don't touch the actual files
  • -f โ€” force it, no questions, no regrets
  • -k โ€” keep the input files around (don't delete them, we're not monsters)
  • -t โ€” test the integrity, it's giving vibe check but for archives ๐Ÿ”

โœจ cal โœจ

cal [-jmy] [[MONTH] YEAR]

Display a calendar ๐Ÿ—“๏ธ so you can literally see the days

  • -j โ€” use julian dates
  • -m โ€” week starts on Monday (correct behavior honestly)
  • -y โ€” display the entire year

โœจ cat โœจ

cat [-nbvteA] [FILE]...

Print FILEs to stdout ๐Ÿˆ the classic, the icon, the moment

  • -n โ€” number output lines
  • -b โ€” number nonempty lines
  • -v โ€” show nonprinting characters as ^x or M-x
  • -t โ€” ...and tabs as ^I
  • -e โ€” ...and end lines with $
  • -A โ€” same as -vte

โœจ chattr โœจ

chattr [-R] [-v VERSION] [-p PROJID] [-+=AacDdijsStTu] FILE...

Change ext2 file attributes ๐Ÿ”ง

  • -R โ€” recurse
  • -v NUM โ€” set version/generation number
  • -p NUM โ€” set project number

Modifiers:

  • -, +, = โ€” remove/add/set attributes

Attributes:

  • A โ€” no atime
  • a โ€” append only
  • C โ€” no copy-on-write
  • c โ€” compressed
  • D โ€” synchronous dir updates
  • d โ€” don't backup with dump
  • E โ€” encrypted
  • e โ€” file uses extents
  • F โ€” case-insensitive dir
  • I โ€” indexed dir
  • i โ€” immutable
  • j โ€” write data to journal first
  • N โ€” file is stored in inode
  • P โ€” hierarchical project ID dir
  • S โ€” synchronous file updates
  • s โ€” zero storage when deleted
  • T โ€” top of dir hierarchy
  • t โ€” don't tail-merge with other files
  • u โ€” allow undelete
  • V โ€” verity

โœจ chgrp โœจ

chgrp [-RhLHPcvf]... GROUP FILE...

Change the group membership of FILEs to GROUP ๐Ÿ‘ฏ

  • -h โ€” affect symlinks instead of symlink targets
  • -L โ€” traverse all symlinks to directories
  • -H โ€” traverse symlinks on command line only
  • -P โ€” don't traverse symlinks (default)
  • -R โ€” recurse
  • -c โ€” list changed files
  • -v โ€” verbose
  • -f โ€” hide errors

โœจ chmod โœจ

chmod [-Rcvf] MODE[,MODE]... FILE...

MODE is an octal number (bit pattern sstrwxrwxrwx) or [ugoa]{+|-|=}[rwxXst] ๐Ÿ” yes bestie you're setting permissions, main character energy

  • -R โ€” recurse
  • -c โ€” list changed files
  • -v โ€” verbose
  • -f โ€” hide errors

โœจ chown โœจ

chown [-RhLHPcvf]... USER[:[GRP]] FILE...

Change the owner and/or group of FILEs to USER and/or GRP ๐Ÿ‘‘

  • -h โ€” affect symlinks instead of symlink targets
  • -L โ€” traverse all symlinks to directories
  • -H โ€” traverse symlinks on command line only
  • -P โ€” don't traverse symlinks (default)
  • -R โ€” recurse
  • -c โ€” list changed files
  • -v โ€” verbose
  • -f โ€” hide errors

โœจ chpasswd โœจ

chpasswd [-me] [-c ALG] [-R DIR]

Read user:password from stdin and update /etc/passwd ๐Ÿ”‘

  • -e โ€” supplied passwords are in encrypted form
  • -m โ€” encrypt using md5, not des
  • -c ALG โ€” des, md5, sha256/512, yescrypt (default )
  • -R DIR โ€” directory to chroot into

โœจ chroot โœจ

chroot NEWROOT [PROG ARGS]

Run PROG with the root directory set to NEWROOT ๐ŸŒ€


โœจ chvt โœจ

chvt N

Change the foreground virtual terminal to /dev/ttyN ๐Ÿ“บ


โœจ clear โœจ

clear

Clear the screen โœจ squeaky clean, no thoughts, just blank


โœจ cmp โœจ

cmp [-l|s] [-n NUM] FILE1 [FILE2 [SKIP1 [SKIP2]]]

Compare FILE1 with FILE2 (or stdin) ๐Ÿ‘€

  • -l โ€” show decimal offset and octal byte value for differing bytes, and don't stop on the first mismatch
  • -s โ€” quiet
  • -n NUM โ€” compare at most NUM bytes

โœจ cp โœจ

cp [-arPLHpfinlsTu] SOURCE DEST
or:
cp [-arPLHpfinlsu] SOURCE... { -t DIRECTORY | DIRECTORY }

Copy SOURCEs to DEST ๐Ÿ“ iconic, essential, the way that

  • -a โ€” same as -dpR
  • -R, -r โ€” recurse
  • -d, -P โ€” preserve symlinks (default if -R)
  • -L โ€” follow all symlinks
  • -H โ€” follow symlinks on command line
  • -p โ€” preserve file attributes if possible
  • -f โ€” overwrite
  • -i โ€” prompt before overwrite
  • -n โ€” don't overwrite
  • -l, -s โ€” create (sym)links
  • -T โ€” refuse to copy if DEST is a directory
  • -t DIR โ€” copy all SOURCEs into DIR
  • -u โ€” copy only newer files

โœจ cpio โœจ

cpio [-dmvu] [-F FILE] [-R USER[:GRP]] [-H newc] [-tio] [EXTR_FILE]...

Extract (-i) or list (-t) files from a cpio archive on stdin, or take a file list from stdin and create an archive (-o) ๐Ÿ“ฆ

Main operation mode:

  • -t โ€” list
  • -i โ€” extract EXTR_FILEs (or all)
  • -o โ€” create (requires -H newc)

Options:

  • -H newc โ€” archive format
  • -d โ€” make leading directories
  • -m โ€” restore mtime
  • -v โ€” verbose
  • -u โ€” overwrite
  • -F FILE โ€” input (-t, -i, -p) or output (-o) file
  • -R USER[:GRP] โ€” set owner of created files
  • -L โ€” dereference symlinks
  • -0 โ€” NUL terminated input
  • --ignore-devno
  • --renumber-inodes

โœจ crc32 โœจ

crc32 FILE...

Calculate CRC32 checksum of FILEs ๐Ÿ”ข


โœจ crond โœจ

crond [-fbS] [-l N] [-L LOGFILE] [-c DIR]
  • -f โ€” foreground
  • -b โ€” background (default)
  • -S โ€” log to syslog (default)
  • -l N โ€” set log level. Most verbose 0, default 8
  • -L FILE โ€” log to FILE
  • -c DIR โ€” cron dir. Default: /var/spool/cron/crontabs

โœจ crontab โœจ

crontab [-c DIR] [-u USER] [-ler]|[FILE]
  • -c โ€” crontab directory
  • -u โ€” user
  • -l โ€” list crontab
  • -e โ€” edit crontab
  • -r โ€” delete crontab
  • FILE โ€” replace crontab by FILE (-: stdin)

โœจ cttyhack โœจ

cttyhack [PROG ARGS]

Give PROG a controlling tty if possible ๐Ÿ–ฅ๏ธ

Example for /etc/inittab (for busybox init):

::respawn:/bin/cttyhack /bin/sh

Giving controlling tty to shell running with PID 1:

$ exec cttyhack sh

Starting interactive shell from boot shell script:

setsid cttyhack sh

โœจ cut โœจ

cut {-b|c LIST | -f|F LIST [-d SEP] [-s]} [-D] [-O SEP] [FILE]...

Print selected fields from FILEs to stdout โœ‚๏ธ

  • -b LIST โ€” output only bytes from LIST
  • -c LIST โ€” output only characters from LIST
  • -d SEP โ€” input field delimiter (default -f TAB, -F run of whitespace)
  • -f LIST โ€” print only these fields (-d is single char)
  • -F LIST โ€” print only these fields (-d is regex)
  • -s โ€” drop lines with no delimiter (else print them in full)
  • -D โ€” don't sort ranges; a line without delimiters has one field
  • --output-delimiter SEP โ€” output field delimiter
  • -n โ€” ignored

โœจ date โœจ

date [OPTIONS] [+FMT] [[-s] TIME]

Display time (using +FMT), or set time โฐ

  • -u โ€” work in UTC (don't convert to local time)
  • [-s] TIME โ€” set time to TIME
  • -d TIME โ€” display TIME, not 'now'
  • -D FMT โ€” FMT (strptime format) for -s/-d TIME conversion
  • -r FILE โ€” display last modification time of FILE
  • -R โ€” output RFC-2822 date
  • -I[SPEC] โ€” output ISO-8601 date
    • SPEC=date (default), hours, minutes, seconds or ns

Recognized TIME formats:

@seconds_since_1970
hh:mm[:ss]
[YYYY.]MM.DD-hh:mm[:ss]
YYYY-MM-DD hh:mm[:ss]
[[[[[YY]YY]MM]DD]hh]mm[.ss]

The 'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead.


โœจ dc โœจ

dc [-x] [-eSCRIPT]... [-fFILE]... [FILE]...

Tiny RPN calculator ๐Ÿงฎ

Arithmetic: +, -, *, /, %, ^

  • ~ โ€” divide with remainder
  • | โ€” modular exponentiation
  • v โ€” square root
  • p โ€” print top of the stack without popping
  • f โ€” print entire stack
  • k โ€” pop the value and set precision
  • i โ€” pop the value and set input radix
  • o โ€” pop the value and set output radix

Examples: dc -e'2 2 + p' -> 4, dc -e'8 8 * 2 2 + / p' -> 16


โœจ dd โœจ

dd [if=FILE] [of=FILE] [ibs=N obs=N/bs=N] [count=N] [skip=N] [seek=N]
     [conv=notrunc|noerror|sync|fsync]
     [iflag=skip_bytes|count_bytes|fullblock|direct]
     [oflag=seek_bytes|append|direct]

Copy a file with converting and formatting ๐Ÿ’พ

  • if=FILE โ€” read from FILE instead of stdin
  • of=FILE โ€” write to FILE instead of stdout
  • bs=N โ€” read and write N bytes at a time
  • ibs=N โ€” read N bytes at a time
  • obs=N โ€” write N bytes at a time
  • count=N โ€” copy only N input blocks
  • skip=N โ€” skip N input blocks
  • seek=N โ€” skip N output blocks
  • conv=notrunc โ€” don't truncate output file
  • conv=noerror โ€” continue after read errors
  • conv=sync โ€” pad blocks with zeros
  • conv=fsync โ€” physically write data out before finishing
  • conv=swab โ€” swap every pair of bytes
  • iflag=skip_bytes โ€” skip=N is in bytes
  • iflag=count_bytes โ€” count=N is in bytes
  • oflag=seek_bytes โ€” seek=N is in bytes
  • iflag=direct โ€” O_DIRECT input
  • oflag=direct โ€” O_DIRECT output
  • iflag=fullblock โ€” read full blocks
  • oflag=append โ€” open output in append mode
  • status=noxfer โ€” suppress rate output
  • status=none โ€” suppress all output

N may be suffixed by c (1), w (2), b (512), kB (1000), k (1024), MB, M, GB, G


โœจ deallocvt โœจ

deallocvt [N]

Deallocate unused virtual terminal /dev/ttyN ๐Ÿงน


โœจ depmod โœจ

depmod [-n] [-b BASE] [VERSION] [MODFILES]...

Generate modules.dep, alias, and symbols files ๐Ÿงฉ

  • -b BASE โ€” use BASE/lib/modules/VERSION
  • -n โ€” dry run: print files to stdout

โœจ devmem โœจ

devmem ADDRESS [WIDTH [VALUE]]

Read/write from physical address ๐Ÿง ๐Ÿ”Œ

  • ADDRESS โ€” address to act upon
  • WIDTH โ€” width (8/16/...)
  • VALUE โ€” data to be written

โœจ df โœจ

df [-PkmhTai] [-B SIZE] [-t TYPE] [FILESYSTEM]...

Print filesystem usage statistics ๐Ÿ“Š

  • -P โ€” POSIX output format
  • -k โ€” 1024-byte blocks (default)
  • -m โ€” 1M-byte blocks
  • -h โ€” human readable (e.g. 1K 243M 2G)
  • -T โ€” print filesystem type
  • -t TYPE โ€” print only mounts of this type
  • -a โ€” show all filesystems
  • -i โ€” inodes
  • -B SIZE โ€” blocksize

โœจ diff โœจ

diff [-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2

Compare files line by line and output the differences between them. This implementation supports unified diffs only ๐Ÿซ  no cap.

  • -a โ€” treat every file like it's plain text, no binary panic allowed ๐Ÿ’…
  • -b โ€” ignore changes in the amount of whitespace (so hi vs hi is not the drama)
  • -B โ€” ignore changes whose lines are all blank
  • -d โ€” try hard to find a smaller set of changes
  • -i โ€” ignore case differences, Hello and hello are the same girlie
  • -L โ€” use LABEL instead of the filename in the unified header
  • -N โ€” treat absent files as empty
  • -q โ€” output only whether files differ, no essays
  • -r โ€” recurse ๐ŸŒ€
  • -S โ€” start with FILE when comparing directories
  • -T โ€” make tabs line up by prefixing a tab when necessary
  • -s โ€” report when two files are the same
  • -t โ€” expand tabs to spaces in output
  • -U โ€” output LINES lines of context
  • -w โ€” ignore all whitespace, zero thoughts, blank mind โœจ

dirname ๐ŸŽ€

dirname FILENAME

Strip the non-directory suffix off FILENAME, aka "give me just the folder part bestie" ๐Ÿซถ


dmesg ๐Ÿ“œ

dmesg [-cr] [-n LEVEL] [-s SIZE]

Print or control the kernel ring buffer โ€” the receipts of what your kernel has been up to ๐Ÿ‘‘

  • -c โ€” clear the ring buffer after printing it
  • -n LEVEL โ€” set console logging level
  • -s SIZE โ€” buffer size
  • -r โ€” print the raw message buffer

dos2unix ๐ŸชŸโžก๏ธ๐Ÿง

dos2unix [-ud] [FILE]

Convert FILE in-place from DOS format to Unix format. If you don't hand it a file, it uses stdin/stdout, no biggie.

  • -u โ€” dos2unix
  • -d โ€” unix2dos

dpkg ๐Ÿ“ฆ

dpkg [-ilCPru] [-F OPT] PACKAGE

Install, remove and manage Debian packages. The whole package-management main character energy ๐Ÿ’œ

  • -i,--install โ€” install the package
  • -l,--list โ€” list of installed packages
  • --configure โ€” configure an unpackaged package
  • -P,--purge โ€” purge all files of a package
  • -r,--remove โ€” remove all but the configuration files for a package
  • --unpack โ€” unpack a package, but don't configure it
  • --force-depends โ€” ignore dependency problems (living dangerously, ngl)
  • --force-confnew โ€” overwrite existing config files when installing
  • --force-confold โ€” keep old config files when installing

dpkg-deb ๐Ÿ—œ๏ธ

dpkg-deb [-cefxX] FILE [DIR]

Perform actions on Debian packages (.deb files) โ€” the little toolbox that pokes inside them ๐Ÿ”

  • -c โ€” list files
  • -f โ€” print control fields
  • -e โ€” extract control files to DIR (default: ./DEBIAN)
  • -x โ€” extract files to DIR (no default)
  • -X โ€” verbose extract

du ๐Ÿ’พ

du [-aHLdclsxhmk] [FILE]...

Summarize disk space used for *FILE*s (or directories). The "why is my disk full" detective ๐Ÿ”Ž๐Ÿ˜ญ

  • -a โ€” show file sizes too
  • -b โ€” apparent size (including holes)
  • -L โ€” follow all symlinks
  • -H โ€” follow symlinks on command line
  • -d N โ€” limit output to directories (and files with -a) of depth < N
  • -c โ€” show grand total
  • -l โ€” count sizes many times if hard linked
  • -s โ€” display only a total for each argument
  • -x โ€” skip directories on different filesystems
  • -h โ€” sizes in human readable format (e.g., 1K 243M 2G)
  • -m โ€” sizes in megabytes
  • -k โ€” sizes in kilobytes (default)

dumpkmap โŒจ๏ธ

dumpkmap > keymap

Print a binary keyboard translation table to stdout. Redirect it somewhere and it's yours ๐Ÿ’…


dumpleases ๐Ÿ“‹

dumpleases [-r|-a] [-d] [-f LEASEFILE]

Display DHCP leases granted by udhcpd โ€” the guest list of who got an IP ๐ŸŽŸ๏ธ

  • -f FILE โ€” lease file
  • -r โ€” show remaining time
  • -a โ€” show expiration time
  • -d โ€” show time in seconds

echo ๐Ÿ—ฃ๏ธ

echo [-neE] [ARG]...

Print *ARG*s to stdout. The people's princess of commands ๐Ÿ‘‘

  • -n โ€” no trailing newline
  • -e โ€” interpret backslash escapes (\t=tab etc)
  • -E โ€” don't interpret backslash escapes (default)

ed โœ๏ธ

ed [-p PROMPT] [-s] [FILE]
That's literally all the page hands you here bestie โ€” just the synopsis, no description, no option list. We're keeping it exactly as it is ๐Ÿ“

env ๐ŸŒ

env [-i0] [-u NAME]... [-] [NAME=VALUE]... [PROG ARGS]

Print the current environment, or run PROG after setting up the environment for it ๐ŸŒˆ

  • -, -i โ€” start with an empty environment
  • -0 โ€” NUL terminated output
  • -u NAME โ€” remove variable from environment

expand โžก๏ธ๐Ÿ“

expand [-i] [-t N] [FILE]...

Convert tabs to spaces, writing to stdout. Glow-up for your whitespace โœจ

  • -i โ€” don't convert tabs after non blanks
  • -t โ€” tabstops every N chars

expr ๐Ÿงฎ

expr EXPRESSION

Print the value of EXPRESSION. Math o'clock, no calculator app required ๐Ÿ”ฅ

EXPRESSION may be:

ARG1 | ARG2     ARG1 if it is neither null nor 0, otherwise ARG2
ARG1 & ARG2     ARG1 if neither argument is null or 0, otherwise 0
ARG1 < ARG2     1 if ARG1 is less than ARG2, else 0. Similarly:
ARG1 <= ARG2
ARG1 = ARG2
ARG1 != ARG2
ARG1 >= ARG2
ARG1 > ARG2
ARG1 + ARG2     Sum of ARG1 and ARG2. Similarly:
ARG1 - ARG2
ARG1 * ARG2
ARG1 / ARG2
ARG1 % ARG2
STRING : REGEXP         Anchored pattern match of REGEXP in STRING
match STRING REGEXP     Same as STRING : REGEXP
substr STRING POS LEN   Substring of STRING, POS counts from 1
index STRING CHARS      Index in STRING where any CHARS is found, or 0
length STRING           Length of STRING
quote TOKEN             Interpret TOKEN as a string, even if
                        it is a keyword like 'match' or an
                        operator like '/'
(EXPRESSION)            Value of EXPRESSION
Heads up bestie ๐Ÿ“ข โ€” many operators need to be escaped or quoted for shells. Comparisons are arithmetic if both *ARG*s are numbers, else lexicographical. Pattern matches return the string matched between \( and \), or null; if \( and \) are not used, they return the number of characters matched, or 0.

factor ๐Ÿ”ข

factor [NUMBER]...

Print prime factors. Cracking numbers open like a lil safe ๐Ÿฆ‹


fallocate ๐Ÿ“

fallocate [-o OFS] -l LEN FILE

Preallocate space for FILE โ€” reserving the vibes ahead of time ๐Ÿ’…

  • -o OFS โ€” offset of range
  • -l LEN โ€” length of range

fatattr ๐Ÿงท

fatattr [-+rhsvda] FILE...

Change file attributes on a FAT filesystem ๐ŸŽ€

  • - โ€” clear attributes
  • + โ€” set attributes
  • r โ€” read only
  • h โ€” hidden
  • s โ€” system
  • v โ€” volume label
  • d โ€” directory
  • a โ€” archive

fdisk ๐Ÿ’ฝ

fdisk [-ul] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SSZ] [-t
PARTTYPE] DISK

Change the partition table. Very powerful, very "handle with care" โš ๏ธ

  • -u โ€” start and End are in sectors (instead of cylinders)
  • -l โ€” show partition table for each DISK, then exit
  • -b 2048 โ€” (for certain MO disks) use 2048-byte sectors
  • -T PARTTYPE โ€” force 'dos' partition if 'gpt' also present
  • -C CYLINDERS โ€” set number of cylinders/heads/sectors
  • -H HEADS โ€” typically 255
  • -S SECTORS โ€” typically 63

find ๐Ÿ”

find [-HL] [PATH]... [OPTIONS] [ACTIONS]

Search for files and perform actions on them. The first failed action stops processing of the current file. Defaults: PATH is the current directory, and the action is -print โœจ

  • -L,-follow โ€” follow symlinks
  • -H โ€” ...on command line only
  • -xdev โ€” don't descend directories on other filesystems
  • -maxdepth N โ€” descend at most N levels. -maxdepth 0 applies actions to command line arguments only
  • -mindepth N โ€” don't act on first N levels
  • -depth โ€” act on directory after traversing it

Actions:

  • ( ACTIONS ) โ€” group actions for -o / -a
  • ! ACT โ€” invert ACT's success/failure
  • ACT1 [-a] ACT2 โ€” if ACT1 fails, stop, else do ACT2
  • ACT1 -o ACT2 โ€” if ACT1 succeeds, stop, else do ACT2. Note: -a has higher priority than -o
  • -name PATTERN โ€” match file name (w/o directory name) to PATTERN
  • -iname PATTERN โ€” case insensitive -name
  • -path PATTERN โ€” match path to PATTERN
  • -ipath PATTERN โ€” case insensitive -path
  • -regex PATTERN โ€” match path to regex PATTERN
  • -type X โ€” file type is X (one of: f,d,l,b,c,s,p)
  • -executable โ€” file is executable
  • -perm MASK โ€” at least one mask bit (+MASK), all bits (-MASK), or exactly MASK bits are set in file's mode
  • -mtime DAYS โ€” mtime is greater than (+N), less than (-N), or exactly N days in the past
  • -atime DAYS โ€” atime +N/-N/N days in the past
  • -ctime DAYS โ€” ctime +N/-N/N days in the past
  • -mmin MINS โ€” mtime is greater than (+N), less than (-N), or exactly N minutes in the past
  • -amin MINS โ€” atime +N/-N/N minutes in the past
  • -cmin MINS โ€” ctime +N/-N/N minutes in the past
  • -newer FILE โ€” mtime is more recent than FILE's
  • -inum N โ€” file has inode number N
  • -samefile FILE โ€” file is same as FILE
  • -user NAME/ID โ€” file is owned by given user
  • -group NAME/ID โ€” file is owned by given group
  • -size N[bck] โ€” file size is N (c:bytes, k:kbytes, b:512 bytes (def.)). +/-N: file size is bigger/smaller than N
  • -links N โ€” number of links is greater than (+N), less than (-N), or exactly N
  • -empty โ€” match empty file/directory
  • -prune โ€” if current file is directory, don't descend into it

If none of the following actions is specified, -print is assumed ๐Ÿ’–

  • -print โ€” print file name
  • -print0 โ€” print file name, NUL terminated
  • -exec CMD ARG ; โ€” run CMD with all instances of {} replaced by file name. Fails if CMD exits with nonzero
  • -exec CMD ARG + โ€” run CMD with {} replaced by list of file names
  • -ok CMD ARG ; โ€” prompt and run CMD with {} replaced
  • -quit โ€” exit

findfs ๐Ÿงญ

findfs LABEL=label | UUID=uuid

Find the filesystem device based on label or UUID โ€” matching the name tag to the actual filesystem ๐Ÿท๏ธ


fold ๐Ÿ“„

fold [-bs] [-w WIDTH] [FILE]...

Wrap input lines in *FILE*s (or stdin), writing to stdout. Word-wrapping, but make it terminal ๐ŸŽ€

  • -b โ€” count bytes rather than columns
  • -s โ€” break at spaces
  • -w โ€” use WIDTH columns instead of 80

free ๐Ÿง 

free [-bkmgh]

Display free and used memory ๐Ÿ’œ


freeramdisk ๐ŸŒ€

freeramdisk DEVICE

Free all memory used by the specified ramdisk


fsfreeze ๐ŸงŠ

fsfreeze --[un]freeze MOUNTPOINT

Flush and halt writes to MOUNTPOINT โ€” pause the whole filesystem, respectfully โ„๏ธ


fstrim ๐Ÿงน

fstrim [OPTIONS] MOUNTPOINT
  • -o OFFSET โ€” offset in bytes to discard from
  • -l LEN โ€” bytes to discard
  • -m MIN โ€” minimum extent length
  • -v โ€” print number of discarded bytes

ftpget ๐Ÿ“ฅ

ftpget [OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE

Download a file via FTP ๐ŸŒˆ

  • -c โ€” continue previous transfer
  • -v โ€” verbose
  • -u USER โ€” username
  • -p PASS โ€” password
  • -P PORT

ftpput ๐Ÿ“ค

ftpput [OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE

Upload a file to a FTP server

  • -v โ€” Verbose, babe ๐Ÿ”Š
  • -u USER โ€” the Username ๐Ÿ‘ค
  • -p PASS โ€” the Password ๐Ÿ”
  • -P PORT โ€” the PORT ๐Ÿšช

โœจ getfattr โœจ

getfattr [-h] {-d|-n ATTR} FILE...

Get extended attributes โ€” all that extra metadata your files are hiding from you ๐Ÿ‘€

  • -h โ€” do not follow symlinks
  • -d โ€” dump all the attributes, not a single one left behind ๐Ÿ’…
  • -n ATTR โ€” get the attribute called ATTR

โœจ getopt โœจ

getopt [OPTIONS] [--] OPTSTRING PARAMS
  • -a โ€” allow long options that start with a single -
  • -l LOPT[,...] โ€” the long options to recognize
  • -n PROGNAME โ€” the name under which errors are reported
  • -o OPTSTRING โ€” the short options to recognize
  • -q โ€” no error messages on unrecognized options
  • -Q โ€” no normal output
  • -s SHELL โ€” set shell quoting conventions
  • -T โ€” version test (exits with 4)
  • -u โ€” don't quote output

Example, bestie, here it is in all its chaotic glory:

O=`getopt -l bb: -- ab:c:: "$@"` || exit 1 eval set -- "$O" while true;
do      case "$1" in      -a)  echo A; shift;;      -b|--bb) echo
"B:'$2'"; shift 2;;      -c)  case "$2" in           "")  echo C; shift
2;;           *)   echo "C:'$2'"; shift 2;;           esac;;
     --)  shift; break;;      *)   echo Error; exit 1;;      esac done

โœจ getty โœจ

getty [OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]

Opens TTY, asks you for a login name, then calls /bin/login ๐Ÿšช๐Ÿ’ซ

  • -h โ€” enable hardware RTS/CTS flow control
  • -L โ€” set CLOCAL (ignore the Carrier Detect state)
  • -m โ€” get the baud rate from the modem's CONNECT status message
  • -n โ€” don't prompt for a login name
  • -w โ€” wait for CR or LF before sending /etc/issue
  • -i โ€” don't display /etc/issue
  • -f ISSUE_FILE โ€” display ISSUE_FILE instead of /etc/issue
  • -l LOGIN โ€” invoke LOGIN instead of /bin/login
  • -t SEC โ€” terminate after SEC if no login name is read
  • -I INITSTR โ€” send INITSTR before anything else
  • -H HOST โ€” log HOST into the utmp file as the hostname
BAUD_RATE of 0 leaves it unchanged, so hands off ๐Ÿซถ

โœจ grep โœจ

grep [-HhnlLoqvsrRiwFEz] [-m N] [-A|B|C N] { PATTERN | -e PATTERN... |
-f FILE... } [FILE]...

Search for PATTERN in FILEs (or stdin, we love a pipe) ๐Ÿ”๐Ÿ’–

  • -H โ€” add the filename: prefix
  • -h โ€” do not add the filename: prefix
  • -n โ€” add the line_no: prefix
  • -l โ€” show only the names of files that match
  • -L โ€” show only the names of files that don't match
  • -c โ€” show only the count of matching lines
  • -o โ€” show only the matching part of the line
  • -q โ€” Quiet. Return 0 if PATTERN is found, 1 otherwise
  • -v โ€” select non-matching lines
  • -s โ€” suppress open and read errors
  • -r โ€” recurse
  • -R โ€” recurse and dereference symlinks
  • -i โ€” ignore case
  • -w โ€” match whole words only
  • -x โ€” match whole lines only
  • -F โ€” PATTERN is a literal (not a regexp)
  • -E โ€” PATTERN is an extended regexp
  • -z โ€” NUL terminated input
  • -m N โ€” match up to N times per file
  • -A N โ€” print N lines of trailing context
  • -B N โ€” print N lines of leading context
  • -C N โ€” same as -A N -B N
  • -e PTRN โ€” pattern to match
  • -f FILE โ€” read pattern from file

โœจ groups โœจ

groups [USER]

Print the groups USER is in ๐Ÿ‘ฏโ™€๏ธ

โœจ gunzip โœจ

gunzip [-cfkt] [FILE]...

Decompress FILEs (or stdin) ๐ŸŽˆ

  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

โœจ gzip โœจ

gzip [-cfkdt] [FILE]...

Compress FILEs (or stdin) ๐Ÿ—œ๏ธ

  • -d โ€” decompress
  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

โœจ halt โœจ

halt [-d DELAY] [-nfw]

Halt the system. Big main character shutdown energy ๐Ÿ‘‘

  • -d SEC โ€” delay interval
  • -n โ€” do not sync
  • -f โ€” force (don't go through init)
  • -w โ€” only write a wtmp record
head [OPTIONS] [FILE]...

Prints the first 10 lines of FILEs (or stdin). With more than one FILE, it puts a filename header in front of each one, so you know whose lines are whose ๐Ÿท๏ธ

  • -n N[bkm] โ€” print first N lines
  • -n -N[bkm] โ€” print all except the N last lines
  • -c [-]N[bkm] โ€” print first N bytes (b:*512 k:*1024 m:*1024^2)
  • -q โ€” never print headers
  • -v โ€” always print headers

โœจ hexdump โœจ

hexdump [-bcdoxCv] [-e FMT] [-f FMT_FILE] [-n LEN] [-s OFS] [FILE]...

Display FILEs (or stdin) in a format you choose ๐Ÿ”ข

  • -b โ€” 1-byte octal display
  • -c โ€” 1-byte character display
  • -d โ€” 2-byte decimal display
  • -o โ€” 2-byte octal display
  • -x โ€” 2-byte hex display
  • -C โ€” hex+ASCII, 16 bytes per line
  • -v โ€” show all (no dup folding)
  • -e FORMAT_STR โ€” example: '16/1 "%02x|""\n"'
  • -f FORMAT_FILE
  • -n LENGTH โ€” show only the first LENGTH bytes
  • -s OFFSET โ€” skip OFFSET bytes

โœจ hostid โœจ

hostid

Print out a unique 32-bit identifier for the machine ๐Ÿ†”โœจ

โœจ hostname โœจ

hostname [-sidf] [HOSTNAME | -F FILE]

Show or set the hostname or the DNS domain name ๐Ÿ 

  • -s โ€” short
  • -i โ€” addresses for the hostname
  • -d โ€” DNS domain name
  • -f โ€” fully qualified domain name
  • -F FILE โ€” use FILE's content as the hostname

โœจ httpd โœจ

httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-M MAXCONN] [-K KILLSEC]
[-u USER[:GRP]] [-r REALM] [-h HOME]

httpd -d/-e/-m STRING

Listen for incoming HTTP requests ๐ŸŒ๐Ÿ’Œ

  • -i โ€” inetd mode
  • -f โ€” run in foreground
  • -v[v] โ€” verbose
  • -p [IP:]PORT โ€” bind to IP:PORT (default *:80)
  • -M NUM โ€” pause if NUM connections are open (default 256)
  • -K NUM โ€” kill CGIs after NUM seconds
  • -u USER[:GRP] โ€” set uid/gid after binding to port
  • -r REALM โ€” Authentication Realm for Basic Authentication
  • -h HOME โ€” home directory (default .)
  • -c FILE โ€” configuration file (default {/etc,HOME}/httpd.conf)
  • -m STRING โ€” MD5 crypt STRING
  • -e STRING โ€” HTML encode STRING
  • -d STRING โ€” URL decode STRING

โœจ hwclock โœจ

hwclock [-ul] [-f DEV] [-s|-w|--systz|--param-get PARAM|--param-set
PARAM=VAL]

Show or set the hardware clock (RTC) โฐ

  • -f DEV โ€” use this device (e.g. /dev/rtc2)
  • -u โ€” assume the RTC is kept in UTC
  • -l โ€” assume the RTC is kept in local time (if neither is given, read from /etc/adjtime)
  • -s โ€” set system time from RTC
  • -w โ€” set RTC from system time
  • --systz โ€” set in-kernel timezone, correct system time if the RTC is kept in local time
  • --param-get PARAM โ€” get RTC parameter
  • --param-set PARAM=VAL โ€” set RTC parameter

โœจ i2cdetect โœจ

i2cdetect -l | -F I2CBUS | [-ya] [-q|-r] I2CBUS [FIRST LAST]

Detect I2C chips ๐Ÿ”Œ๐Ÿ•ต๏ธโ™€๏ธ

  • -l โ€” list installed buses
  • -F BUS# โ€” list functionalities on this bus
  • -y โ€” disable interactive mode
  • -a โ€” force scanning of non-regular addresses
  • -q โ€” use smbus quick write commands for probing (default)
  • -r โ€” use smbus read byte commands for probing

FIRST and LAST limit the probing range ๐ŸŽฏ

โœจ i2cdump โœจ

i2cdump [-fy] [-r FIRST-LAST] BUS ADDR [MODE]

Examine I2C registers ๐Ÿ”ฌ

  • I2CBUS โ€” I2C bus number
  • ADDRESS โ€” 0x03-0x77

MODE is:

  • b โ€” Byte (default)
  • w โ€” Word
  • W โ€” Word on even register addresses
  • i โ€” I2C block
  • s โ€” SMBus block
  • c โ€” Consecutive byte

Append p for SMBus PEC โœจ

  • -f โ€” force access
  • -y โ€” disable interactive mode
  • -r โ€” limit the number of registers being accessed

โœจ i2cget โœจ

i2cget [-fy] BUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]

Read from I2C/SMBus chip registers ๐Ÿ“–

  • I2CBUS โ€” I2C bus number
  • ADDRESS โ€” 0x03-0x77

MODE is:

  • b โ€” read byte data (default)
  • w โ€” read word data
  • c โ€” write byte/read byte

Append p for SMBus PEC โœจ

  • -f โ€” force access
  • -y โ€” disable interactive mode

โœจ i2cset โœจ

i2cset [-fy] [-m MASK] BUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]

Set I2C registers โœ๏ธ

  • I2CBUS โ€” I2C bus number
  • ADDRESS โ€” 0x03-0x77

MODE is:

  • c โ€” byte, no value
  • b โ€” byte data (default)
  • w โ€” word data
  • i โ€” I2C block data
  • s โ€” SMBus block data

Append p for SMBus PEC โœจ

  • -f โ€” force access
  • -y โ€” disable interactive mode
  • -r โ€” read back and compare the result
  • -m MASK โ€” mask specifying which bits to write

โœจ i2ctransfer โœจ

i2ctransfer [-fay] I2CBUS { rLENGTH[@ADDR] | wLENGTH[@ADDR] DATA...}...

Read/write I2C data in one single transfer, efficiency icon ๐Ÿ’…

  • -f โ€” force access to busy addresses
  • -a โ€” force access to non-regular addresses
  • -y โ€” disable interactive mode

โœจ id โœจ

id [-ugGnr] [USER]

Print info about USER, or about the current user if you don't name one ๐Ÿชช

  • -u โ€” user ID
  • -g โ€” group ID
  • -G โ€” supplementary group IDs
  • -n โ€” print names instead of numbers
  • -r โ€” print real ID instead of effective ID

โœจ ifconfig โœจ

ifconfig [-a] [IFACE] [ADDRESS]

Configure a network interface ๐Ÿ› ๏ธ๐ŸŒ

[add ADDRESS[/PREFIXLEN]]
[del ADDRESS[/PREFIXLEN]]
[[-]broadcast [ADDRESS]] [[-]pointopoint [ADDRESS]]
[netmask ADDRESS] [dstaddr ADDRESS]
[outfill NN] [keepalive NN]
[hw ether|infiniband ADDRESS] [metric NN] [mtu NN]
[[-]trailers] [[-]arp] [[-]allmulti]
[multicast] [[-]promisc] [txqueuelen NN] [[-]dynamic]
[mem_start NN] [io_addr NN] [irq NN]
[up|down] ...

โœจ ifdown โœจ

ifdown [-nmvf] [-i FILE] -a | IFACE...
  • -a โ€” deconfigure all interfaces
  • -i FILE โ€” use FILE instead of /etc/network/interfaces
  • -n โ€” dry run (note: doesn't disable mappings)
  • -m โ€” don't run any mappings
  • -v โ€” print out what would happen before doing it
  • -f โ€” force

โœจ ifup โœจ

ifup [-nmvf] [-i FILE] -a | IFACE...
  • -a โ€” sets up (or brings down) every single interface at once. all of them. the whole roster. ๐Ÿ’–
  • -i FILE โ€” use FILE instead of the usual /etc/network/interfaces. gotta have options bestie โœจ
  • -n โ€” dry run! nothing actually happens. (heads up tho: this doesn't disable mappings, so likeโ€ฆ be aware ๐Ÿซ )
  • -m โ€” don't run any mappings. nope, not one.
  • -v โ€” prints out what would happen before it happens. little preview moment ๐Ÿ‘‘
  • -f โ€” force it. ๐Ÿ’…

๐ŸŒธ init ๐ŸŒธ

init

Ok so init is the literal first process started during boot. It never exits. Like ever. She's the main character and she's here to stay ๐Ÿ‘‘

What she does: (re)spawns children according to /etc/inittab. god tier parenting fr fr.

Signals, and what they make her do:

  • HUP: reload /etc/inittab
  • TSTP: stop respawning until CONT
  • QUIT: re-exec another init
  • USR1/TERM/USR2/INT: run the halt/reboot/poweroff/Ctrl-Alt-Del script ๐Ÿฆ‹

๐ŸŽ€ insmod ๐ŸŽ€

insmod FILE [SYMBOL=VALUE]...

Loads a kernel module. that's it, that's the whole vibe ๐Ÿงš


๐Ÿ’œ install ๐Ÿ’œ

install [-cdDsp] [-o USER] [-g GRP] [-m MODE] [-t DIR] [SOURCE]... DEST

Copies files and sets their attributes, all in one glow-up โœจ

  • -c โ€” just copy (this is the default, no thoughts head empty)
  • -d โ€” create directories
  • -D โ€” create the leading target directories too
  • -s โ€” strip the symbol table
  • -p โ€” preserve date
  • -o USER โ€” set ownership
  • -g GRP โ€” set group ownership
  • -m MODE โ€” set permissions
  • -t DIR โ€” install to DIR

๐ŸŒˆ ionice ๐ŸŒˆ

ionice [-c 1-3] [-n 0-7] [-t] { -p PID | PROG ARGS }

Changes I/O priority and class. aka telling your disk reads to take a chill pill ๐Ÿ“

  • -c N โ€” class. 1:realtime 2:best-effort 3:idle
  • -n N โ€” priority
  • -t โ€” ignore errors

โญ ip โญ

ip [OPTIONS] address|route|link|tunnel|neigh|rule [ARGS]
OPTIONS := -f[amily] inet|inet6|link | -o[neline]
ip addr add|del IFADDR dev IFACE | show|flush [dev IFACE] [to PREFIX]
ip route list|flush|add|del|change|append|replace|test ROUTE
ip link set IFACE [up|down] [arp on|off] [multicast on|off]
     [promisc on|off] [mtu NUM] [name NAME] [qlen NUM] [address MAC]
     [master IFACE | nomaster] [netns PID] [type TYPE ARGS]
ip tunnel add|change|del|show [NAME]
     [mode ipip|gre|sit] [remote ADDR] [local ADDR] [ttl TTL]
ip neigh show|flush [to PREFIX] [dev DEV] [nud STATE]
ip rule [list] | add|del SELECTOR ACTION

the networking Swiss army knife. lowkey does everything ๐Ÿ’…


๐Ÿฆ‹ ipcalc ๐Ÿฆ‹

ipcalc [-bnmphs] ADDRESS[/PREFIX] [NETMASK]

Calculates and displays network settings straight from an IP address. math but make it cute ๐ŸŽ€

  • -b โ€” broadcast address
  • -n โ€” network address
  • -m โ€” default netmask for the IP
  • -p โ€” prefix for IP/NETMASK
  • -h โ€” resolved host name
  • -s โ€” no error messages ๐Ÿ™ˆ

๐Ÿ’€ kill ๐Ÿ’€

kill [-l] [-SIG] PID...

Sends a signal (default: TERM) to the given PIDs. the classic "please stop" โœ‹

  • -l โ€” list all signal names and numbers

๐Ÿ”ฅ killall ๐Ÿ”ฅ

killall [-lq] [-SIG] PROCESS_NAME...

Sends a signal (default: TERM) to the given processes โ€” by name, bestie, not by number ๐Ÿ˜ค

  • -l โ€” list all signal names and numbers
  • -q โ€” don't complain if no processes got killed. sometimes nothing happens and that's fine ๐Ÿ’…

๐ŸŒธ klogd ๐ŸŒธ

klogd [-c N] [-n]

Logs kernel messages to syslog. the kernel's diary, essentially ๐Ÿ““

  • -c N โ€” print to console the messages more urgent than prio N (1-8)
  • -n โ€” run in foreground

๐Ÿซถ last ๐Ÿซถ

last

Shows a listing of the last users that logged into the system. receipts of who was here ๐Ÿ‘€


โœจ less โœจ

less [-EFIMmNSRh~] [FILE]...

Views FILE (or stdin) one screenful at a time. the scrolling icon we all deserve ๐Ÿ‘‘

  • -E โ€” quit once the end of a file is reached
  • -F โ€” quit if the entire file fits on the first screen
  • -I โ€” ignore case in all searches
  • -M, -m โ€” display a status line with line numbers and percentage through the file
  • -N โ€” prefix a line number to each line
  • -S โ€” truncate long lines
  • -R โ€” remove color escape codes in input
  • -~ โ€” suppress the ~s displayed past EOF

link FILE LINK

Creates a hard LINK to FILE. permanent commitment fr ๐Ÿ’–


๐Ÿ’œ ln ๐Ÿ’œ

ln [-sfnbtv] [-S SUF] TARGET... LINK|DIR

Creates a link LINK or DIR/TARGET to the specified TARGET(s)

  • -s โ€” make symlinks instead of hardlinks
  • -f โ€” remove existing destinations
  • -n โ€” don't dereference symlinks โ€” treat like a normal file
  • -b โ€” make a backup of the target (if it exists) before the link operation
  • -S SUF โ€” use SUF as the suffix instead of ~ when making backup files
  • -T โ€” treat LINK as a file, not a DIR
  • -v โ€” verbose

๐ŸŒˆ loadfont ๐ŸŒˆ

loadfont < font

Loads a console font from stdin. slay your terminal's whole look ๐Ÿฆ‹


โญ loadkmap โญ

loadkmap < keymap

Loads a binary keyboard translation table from stdin โŒจ๏ธ


๐Ÿ“ logger ๐Ÿ“

logger [-s] [-t TAG] [-p PRIO] [MESSAGE]

Writes MESSAGE (or stdin) to syslog

  • -s โ€” log to stderr as well as the system log
  • -t TAG โ€” log using the specified tag (defaults to your user name)
  • -p PRIO โ€” priority (a number, or a FACILITY.LEVEL pair)

๐Ÿ‘‘ login ๐Ÿ‘‘

login [-p] [-h HOST] [[-f] USER]

Begins a new session on the system. the glow-up from "who?" to "user" โœจ

  • -f โ€” don't authenticate (the user is already authenticated)
  • -h HOST โ€” the host the user came from (for network logins)
  • -p โ€” preserve environment

$LOGIN_TIMEOUT โ€” seconds (default 60, 0 disables it)


๐ŸŒธ logname ๐ŸŒธ

logname

Prints the name of the current user. who am I? yes ๐Ÿ’…


๐Ÿงš logread ๐Ÿงš

logread [-fF]

Shows the messages in syslogd's circular buffer

  • -f โ€” output data as the log grows
  • -F โ€” same as -f, but dump the buffer first

๐Ÿ’– losetup ๐Ÿ’–

losetup [-rP] [-o OFS] {-f|LOOPDEV} FILE: associate loop devices
losetup -c LOOPDEV: reread file size
losetup -d LOOPDEV: disassociate
losetup -a: show status
losetup -f: show next free loop device
  • -o OFS โ€” start OFS bytes into FILE
  • -P โ€” scan for partitions
  • -r โ€” read-only
  • -f โ€” show/use the next free loop device

โœจ ls โœจ

ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

Lists directory contents. the moment. the icon. the blueprint ๐Ÿ‘‘

  • -1 โ€” one column output
  • -a โ€” include names starting with .
  • -A โ€” like -a, but exclude . and ..
  • -x โ€” list by lines
  • -d โ€” list directory names, not contents
  • -L โ€” follow symlinks
  • -H โ€” follow symlinks on the command line
  • -R โ€” recurse
  • -p โ€” append / to directory names
  • -F โ€” append indicator (one of */=@|) to names
  • -l โ€” long format
  • -i โ€” list inode numbers
  • -n โ€” list numeric UIDs and GIDs instead of names
  • -s โ€” list allocated blocks
  • -lc โ€” list ctime
  • -lu โ€” list atime
  • --full-time โ€” list full date/time
  • -h โ€” human readable sizes (1K 243M 2G)
  • --group-directories-first โ€” directories first, obviously ๐ŸŽ€
  • -S โ€” sort by size
  • -X โ€” sort by extension
  • -v โ€” sort by version
  • -t โ€” sort by mtime
  • -tc โ€” sort by ctime
  • -tu โ€” sort by atime
  • -r โ€” reverse sort order
  • -w N โ€” format N columns wide
  • --color[={always,never,auto}] โ€” the colorsss ๐ŸŒˆ

๐Ÿ’œ lsattr ๐Ÿ’œ

lsattr [-Radlpv] [FILE]...

Lists ext2 file attributes

  • -R โ€” recurse
  • -a โ€” include names starting with .
  • -d โ€” list directory names, not contents
  • -l โ€” list long flag names
  • -p โ€” list project ID
  • -v โ€” list version/generation number

๐Ÿฆ‹ lsblk ๐Ÿฆ‹

lsblk [BLOCKDEV]...

Lists block devices. the whole storage family tree ๐ŸŒณ


โญ lsmod โญ

lsmod

Lists loaded kernel modules


๐ŸŒธ lzcat ๐ŸŒธ

lzcat [FILE]...

Decompresses to stdout


๐ŸŽ€ lzma ๐ŸŽ€

lzma -d [-cfk] [FILE]...

Decompresses *FILE*s (or stdin)

  • -d โ€” decompress
  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

๐Ÿ”ฅ lzop ๐Ÿ”ฅ

lzop [-cfUvd123456789CF] [FILE]...
  • -1..9 โ€” compression level
  • -d โ€” decompress
  • -c โ€” write to stdout
  • -f โ€” force
  • -U โ€” delete input files
  • -v โ€” verbose
  • -F โ€” don't store or verify checksum
  • -C โ€” also write checksum of compressed block

๐Ÿ’– md5sum ๐Ÿ’–

md5sum [-c[sw]] [FILE]...

Prints or checks MD5 checksums

  • -c โ€” check sums against the list in *FILE*s
  • -s โ€” don't output anything, the status code shows success
  • -w โ€” warn about improperly formatted checksum lines

๐Ÿงš mdev ๐Ÿงš

mdev [-vS] { [-s] | [-df] }
  • -v โ€” verbose
  • -S โ€” log to syslog too
  • -s โ€” scan /sys and populate /dev
  • -d โ€” daemon, listen on netlink
  • -f โ€” run in foreground

Bare mdev is a kernel hotplug helper. To activate it:

echo /sbin/mdev >/proc/sys/kernel/hotplug

It uses /etc/mdev.conf with lines like

[-][ENV=regex;]...DEVNAME UID:GID PERM [>|=PATH]|[!] [@|$|*PROG]

where DEVNAME is a device name regex, @major,minor[-minor2], or an environment variable regex. A common use of the latter is to load modules for hotplugged devices:

$MODALIAS=.* 0:0 660 @modprobe "$MODALIAS"

If the /dev/mdev.seq file exists, mdev will wait for its value to match the $SEQNUM variable. This prevents plug/unplug races. To activate this feature, create an empty /dev/mdev.seq at boot.

If the /dev/mdev.log file exists, the debug log will be appended to it.


๐ŸŒˆ microcom ๐ŸŒˆ

microcom [-d DELAY_MS] [-t TIMEOUT_MS ] [-s SPEED] [-X] TTY

Copies bytes from stdin to TTY and from TTY to stdout

  • -d DELAY โ€” wait up to DELAY ms for TTY output before sending every next byte to it
  • -t TIMEOUT โ€” exit if both stdin and TTY are silent for TIMEOUT ms
  • -s SPEED โ€” set the serial line to SPEED
  • -X โ€” disable the special meaning of NUL and Ctrl+X from stdin

๐Ÿ“ mim ๐Ÿ“

mim [-f FILE] [SHELL_OPTIONS] [TARGET] ...

Runs a script from a Makefile-like specification file

  • -f FILE โ€” spec file (default Mimfile)

๐Ÿ‘‘ mkdir ๐Ÿ‘‘

mkdir [-m MODE] [-p] DIRECTORY...

Creates DIRECTORY

  • -m MODE โ€” mode
  • -p โ€” no error if it exists; make parent directories as needed

๐ŸŽ€ mkdosfs ๐ŸŽ€

mkdosfs [-v] [-n LABEL] BLOCKDEV [KBYTES]

Makes a FAT32 filesystem

  • -v โ€” verbose
  • -n LBL โ€” volume label

๐Ÿ’œ mke2fs ๐Ÿ’œ

mke2fs [-Fn] [-b BLK_SIZE] [-i INODE_RATIO] [-I INODE_SIZE] [-m RESERVED_PERCENT] [-L LABEL] BLOCKDEV [KBYTES]
  • -b BLK_SIZE โ€” block size, in bytes
  • -F โ€” force
  • -i RATIO โ€” max number of files is filesystem_size / RATIO
  • -I BYTES โ€” inode size (min 128)
  • -L LBL โ€” volume label
  • -m PERCENT โ€” percent of blocks to reserve for admin
  • -n โ€” dry run

๐Ÿฆ‹ mkfifo ๐Ÿฆ‹

mkfifo [-m MODE] NAME

Creates a named pipe

  • -m MODE โ€” mode (default a=rw)

โญ mknod โญ

mknod [-m MODE] NAME TYPE [MAJOR MINOR]

Creates a special file (block, character, or pipe)

  • -m MODE โ€” creation mode (default a=rw)

TYPE:

  • b โ€” block device
  • c or u โ€” character device
  • p โ€” named pipe (MAJOR MINOR must be omitted)

๐Ÿซถ mkpasswd ๐Ÿซถ

mkpasswd [-P FD] [-m TYPE] [-S SALT] [PASSWORD] [SALT]

Prints a crypt(3) hashed PASSWORD

  • -P N โ€” read the password from fd N
  • -m TYPE โ€” des,md5,sha256/512,yescrypt (default )
  • -S SALT โ€” ๐Ÿ’…

๐ŸŽ€ mkswap

mkswap [-L LBL] BLOCKDEV [KBYTES]

Get BLOCKDEV all dressed up to be used as a swap partition โœจ like, it's being given its whole swap-era glow-up.

  • -L LBL โ€” slap a LBL label on it, cute little name tag ๐Ÿ’–

๐ŸŽ€ mktemp

mktemp [-dt] [-p DIR] [TEMPLATE]

Okay so this one makes a temporary file with a name based on TEMPLATE and then prints that name back at you. And listen โ€” TEMPLATE must end with XXXXXX (like, for real, e.g. [/dir/]nameXXXXXX). If you're feeling lazy and don't give it a TEMPLATE, it just assumes -t tmp.XXXXXX.

  • -d โ€” make a directory instead of a file
  • -q โ€” fail silently if something goes wrong (no dramatic exit)
  • -t โ€” prepend the base directory name to TEMPLATE
  • -p DIR โ€” use DIR as the base directory (and yes, this implies -t)
  • -u โ€” don't actually create anything, just print a name

The base directory goes like: -p DIR, otherwise $TMPDIR, otherwise /tmp. That's the hierarchy bestie ๐Ÿ’…


๐ŸŽ€ modinfo

modinfo [-adlpn0] [-F keyword] MODULE
  • -a โ€” shortcut for -F author
  • -d โ€” shortcut for -F description
  • -l โ€” shortcut for -F license
  • -p โ€” shortcut for -F parm
  • -F keyword โ€” the keyword to look for
  • -0 โ€” NUL terminated output

๐ŸŽ€ modprobe

modprobe [-alrqvsDb] MODULE [SYMBOL=VALUE]...
  • -a โ€” load multiple MODULEs
  • -l โ€” list (and here MODULE is a pattern, not a literal)
  • -r โ€” remove MODULE (stacks) or do an autoclean
  • -q โ€” quiet, shhh
  • -v โ€” verbose, tell me everything
  • -s โ€” log to syslog
  • -D โ€” show dependencies
  • -b โ€” apply blacklist to module names too

๐ŸŽ€ more

more [FILE]...

View FILE (or stdin) one screenful at a time ๐Ÿฆ‹ classic, iconic, no notes.


๐ŸŽ€ mount

mount [OPTIONS] [-o OPT] DEVICE NODE

Mount a filesystem. Heads up: filesystem autodetection requires /proc ๐Ÿ’€ so don't come crying if you skipped that.

  • -a โ€” mount all filesystems in fstab
  • -f โ€” dry run (pretend, but make it fashion)
  • -i โ€” don't run the mount helper
  • -r โ€” read-only mount
  • -t FSTYPE[,...] โ€” filesystem type(s)
  • -T FILE โ€” read FILE instead of /etc/fstab
  • -O OPT โ€” mount only filesystems with option OPT (-a only)

And then the -o OPT universe opens up โœจ:

  • loop โ€” ignored (loop devices are autodetected, so, like, pointless but okay)
  • [a]sync โ€” writes are [a]synchronous
  • [no]atime โ€” disable/enable updates to inode access times
  • [no]diratime โ€” disable/enable atime updates to directories
  • [no]relatime โ€” disable/enable atime updates relative to modification time
  • [no]dev โ€” (dis)allow use of special device files
  • [no]exec โ€” (dis)allow use of executable files
  • [no]suid โ€” (dis)allow set-user-id-root programs
  • [r]shared โ€” convert [recursively] to a shared subtree
  • [r]slave โ€” convert [recursively] to a slave subtree
  • [r]private โ€” convert [recursively] to a private subtree
  • [un]bindable โ€” make mount point [un]able to be bind mounted
  • [r]bind โ€” bind a file or directory [recursively] to another location
  • move โ€” relocate an existing mount point
  • remount โ€” remount a mounted filesystem, changing flags
  • ro โ€” same as -r

There are also filesystem-specific -o flags, so like, check your fave filesystem's own lore ๐Ÿซถ


๐ŸŽ€ mt

mt [-f DEVICE] OPCODE VALUE

Control magnetic tape drive operation ๐ŸŽž๏ธ yes we still do tapes, it's vintage-core.

Opcodes, the full roster: bsf bsfm bsr bss datacompression drvbuffer eof eom erase fsf fsfm fsr fss load lock mkpart nop offline ras1 ras2 ras3 reset retension rewind rewoffline seek setblk setdensity setpart tell unload unlock weof wset


๐ŸŽ€ mv

mv [-finT] SOURCE DEST
or: mv [-fin] SOURCE... { -t DIRECTORY | DIRECTORY }

Rename SOURCE to DEST, or move SOURCEs to DIRECTORY. The classic glow-up + relocation package ๐Ÿ’…

  • -f โ€” don't prompt before overwriting (bold, no hesitation)
  • -i โ€” interactive, prompt before overwrite (so polite)
  • -n โ€” don't overwrite an existing file
  • -T โ€” refuse to move if DEST is a directory
  • -t DIR โ€” move all SOURCEs into DIR

๐ŸŽ€ nameif

nameif [-s] [-c FILE] [IFNAME HWADDR]...

Rename a network interface while it's in the down state ๐Ÿ‘‘ The device with address HWADDR gets renamed to IFNAME.

  • -c FILE โ€” configuration file (default: /etc/mactab)
  • -s โ€” log to syslog

๐ŸŽ€ nbd-client

nbd-client { [-b BLKSIZE] [-N NAME] [-t SEC] [-p] HOST [PORT] | -d } BLOCKDEV

Connect to HOST and provide a network block device on BLOCKDEV ๐ŸŒ like, block devices but networked, iykyk.


๐ŸŽ€ nc

nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]

Open a pipe to IP:PORT or FILE.

  • -l โ€” listen mode, for inbound connects (and psst, use -ll with -e for a persistent server ๐Ÿ’–)
  • -p PORT โ€” local port
  • -w SEC โ€” connect timeout
  • -i SEC โ€” delay interval for lines sent
  • -f FILE โ€” use file (ala /dev/ttyS0) instead of network
  • -e PROG โ€” run PROG after connect

๐ŸŽ€ netstat

netstat [-ral] [-tuwx] [-en]

Display networking information, the og vibe check on your sockets ๐Ÿ”

  • -r โ€” routing table
  • -a โ€” all sockets
  • -l โ€” listening sockets, otherwise: connected sockets
  • -t โ€” TCP sockets
  • -u โ€” UDP sockets
  • -w โ€” raw sockets
  • -x โ€” Unix sockets, otherwise: all socket types
  • -e โ€” other/more information
  • -n โ€” don't resolve names

๐ŸŽ€ nl

nl [OPTIONS] [FILE]...

Write FILEs to standard output with line numbers added ๐Ÿ”ข

  • -b STYLE โ€” which lines to number: a: all, t: nonempty, n: none
  • -i N โ€” line number increment
  • -s STRING โ€” use STRING as line number separator
  • -v N โ€” start from N
  • -w N โ€” width of line numbers

๐ŸŽ€ nohup

nohup PROG ARGS

Run PROG immune to hangups, with output going to a non-tty ๐Ÿ’ช like, your process simply cannot be hangup-ed, periodt.


๐ŸŽ€ nologin

nologin

Politely refuse a login ๐Ÿ™…โ€โ™€๏ธ it's giving velvet rope energy, but make it courteous.


๐ŸŽ€ nproc

nproc [--all] [--ignore=N]

Print number of available CPUs ๐Ÿง 

  • --all โ€” number of installed CPUs
  • --ignore=N โ€” exclude N CPUs

๐ŸŽ€ nsenter

nsenter [OPTIONS] [PROG ARGS]
  • -t PID โ€” target process to get namespaces from
  • -m[FILE] โ€” enter mount namespace
  • -u[FILE] โ€” enter UTS namespace (hostname etc)
  • -i[FILE] โ€” enter System V IPC namespace
  • -n[FILE] โ€” enter network namespace
  • -p[FILE] โ€” enter pid namespace
  • -U[FILE] โ€” enter user namespace
  • -S UID โ€” set uid in entered namespace
  • -G GID โ€” set gid in entered namespace
  • --preserve-credentials โ€” don't touch uids or gids
  • -r[DIR] โ€” set root directory
  • -w[DIR] โ€” set working directory
  • -F โ€” don't fork before exec'ing PROG

๐ŸŽ€ nslookup

nslookup [-type=QUERY_TYPE] [-debug] HOST [DNS_SERVER]

Query DNS about HOST ๐ŸŒ

QUERY_TYPE: soa,ns,a,aaaa,cname,mx,txt,ptr,srv,any


๐ŸŽ€ nuke

nuke DIR...

Remove DIRs ๐Ÿ’€ dramatic name, exactly what it says.


๐ŸŽ€ od

od [-abcdfhilovxs] [-t TYPE] [-A RADIX] [-N SIZE] [-j SKIP] [-S MINSTR] [-w WIDTH] [FILE]...

Print FILEs (or stdin) unambiguously, as octal bytes by default ๐Ÿ”ข


๐ŸŽ€ openvt

openvt [-c N] [-sw] [PROG ARGS]

Start PROG on a new virtual terminal ๐Ÿ–ฅ๏ธ

  • -c N โ€” use specified VT
  • -s โ€” switch to the VT
  • -w โ€” wait for PROG to exit

๐ŸŽ€ partprobe

partprobe DEVICE...

Ask kernel to rescan partition table ๐Ÿ”„ like, kernel bestie, pls take another look.


๐ŸŽ€ passwd

passwd [-a ALG] [-dlu] [USER]

Change USER's password (default: current user) ๐Ÿ”

  • -a ALG โ€” des,md5,sha256/512,yescrypt (default )
  • -d โ€” set password to ''
  • -l โ€” lock (disable) account
  • -u โ€” unlock (enable) account

๐ŸŽ€ paste

paste [-d LIST] [-s] [FILE]...

Paste lines from each input file, separated with tab โœจ

  • -d LIST โ€” use delimiters from LIST, not tab
  • -s โ€” serial: one file at a time

๐ŸŽ€ patch

patch [-RNE] [-p N] [-i DIFF] [ORIGFILE [PATCHFILE]]
  • -p N โ€” strip N leading components from file names
  • -i DIFF โ€” read DIFF instead of stdin
  • -R โ€” reverse patch
  • -N โ€” ignore already applied patches
  • -E โ€” remove output files if they become empty
  • --dry-run โ€” don't actually change files

๐ŸŽ€ pidof

pidof [NAME]...

List PIDs of all processes with names that match NAMEs ๐ŸŽฏ


๐ŸŽ€ ping

ping [OPTIONS] HOST

Send ICMP ECHO_REQUESTs to HOST ๐Ÿ“

  • -4,-6 โ€” force IP or IPv6 name resolution
  • -c CNT โ€” send only CNT pings
  • -s SIZE โ€” send SIZE data bytes in packets (default 56)
  • -i SECS โ€” interval
  • -A โ€” ping as soon as reply is received
  • -t TTL โ€” set TTL
  • -I IFACE/IP โ€” source interface or IP address
  • -W SEC โ€” seconds to wait for the first response (default 10) (after all -c CNT packets are sent)
  • -w SEC โ€” seconds until ping exits (default: infinite) (can exit earlier with -c CNT)
  • -q โ€” quiet, only display output at start/finish
  • -p HEXBYTE โ€” payload pattern

๐ŸŽ€ ping6

ping6 [OPTIONS] HOST

Send ICMP ECHO_REQUESTs to HOST ๐Ÿ“

  • -c CNT โ€” send only CNT pings
  • -s SIZE โ€” send SIZE data bytes in packets (default 56)
  • -i SECS โ€” interval
  • -A โ€” ping as soon as reply is received
  • -I IFACE/IP โ€” source interface or IP address
  • -W SEC โ€” seconds to wait for the first response (default 10) (after all -c CNT packets are sent)
  • -w SEC โ€” seconds until ping exits (default: infinite) (can exit earlier with -c CNT)
  • -q โ€” quiet, only display output at start/finish
  • -p HEXBYTE โ€” payload pattern

๐ŸŽ€ pivot_root

pivot_root NEW_ROOT PUT_OLD

Move the current root file system to PUT_OLD and make NEW_ROOT the new root file system ๐Ÿ”„ glow-up but for your entire filesystem hierarchy.


๐ŸŽ€ poweroff

poweroff [-d DELAY] [-nf]

Halt and shut off power ๐Ÿ”Œ

  • -d SEC โ€” delay interval
  • -n โ€” do not sync
  • -f โ€” force (don't go through init)

๐ŸŽ€ printf

printf FORMAT [ARG]...

Format and print ARG(s) according to FORMAT (a-la C printf) ๐Ÿ’…


๐ŸŽ€ ps

ps [-o COL1,COL2=HEADER] [-T]

Show list of processes ๐Ÿ‘€

  • -o COL1,COL2=HEADER โ€” select columns for display
  • -T โ€” show threads

๐ŸŽ€ pwd

pwd

Print the full filename of the current working directory ๐Ÿ“


๐ŸŽ€ rdate

rdate [-s/-p] HOST

Set and print time from HOST using RFC 868 โฐ

  • -s โ€” only set system time
  • -p โ€” only print time

readlink [-fnv] FILE

Display the value of a symlink ๐Ÿ”—

  • -n โ€” don't add newline
  • -f โ€” canonicalize by following all symlinks
  • -v โ€” verbose

๐ŸŽ€ realpath

realpath FILE...

Print absolute pathnames of FILEs ๐Ÿ“‚


๐ŸŽ€ reboot

reboot [-d DELAY] [-nf]

Reboot the system ๐Ÿ”

  • -d SEC โ€” delay interval
  • -n โ€” do not sync
  • -f โ€” force (don't go through init)

๐ŸŽ€ renice

renice [-n] PRIORITY [[-p|g|u] ID...]...

...and if you wanna tweak a process that's already running, here's how you do it ๐Ÿ’…

  • -n โ€” add PRIORITY to the current nice value. Heads up: if you don't pass -n, the nice value gets set straight to PRIORITY. No adding, just vibes being replaced.
  • -p โ€” treat the args as process ids (this is the default, lowkey the main character)
  • -g โ€” treat the args as process group ids
  • -u โ€” treat the args as process user names

reset

reset

Bestie, this one clears the slate: it resets the terminal (ESC codes) and termios (signals, buffering, echo). Your terminal said "I'm normal again", periodt. ๐Ÿซถ

resize

resize

Resize the screen. That's the whole thing. It's giving exactly what it says on the tin. โœจ

resume

resume BLOCKDEV [OFFSET]

Restore system state from the suspend-to-disk data sitting in BLOCKDEV. Napping process, wake up ๐Ÿฆ‹

rev

rev [FILE]...

Reverse the lines of FILE. Your file goes backwards, no cap. ๐Ÿ”„

rm

rm [-irf] FILE...

Remove (unlink) your FILEs. It's the classic.

  • -i โ€” always prompt before removing (safety bestie ๐Ÿฅบ)
  • -f โ€” never prompt (feral mode ๐Ÿ’€)
  • -R,-r โ€” recurse. This deletes things recursively so pls be careful, this one has ruined lives fr fr

rmdir

rmdir [-p] DIRECTORY...

Remove DIRECTORY โ€” but only if it's empty. It will not help you commit crimes.

  • -p โ€” include parents (yeet the whole chain upward if they're all empty)
  • --ignore-fail-on-non-empty โ€” does exactly what it says, doesn't throw a fit when the dir has stuff in it ๐Ÿ’…

rmmod

rmmod [-wfa] [MODULE]...

Unload kernel modules. Bye bestie, you served ๐Ÿซก

  • -w โ€” wait until the module is no longer used
  • -f โ€” force unload (dramatic, use wisely)
  • -a โ€” remove all unused modules (recursively)

route

route [-ne] [-A inet[6]] [{add|del} [-net|-host] TARGET [netmask MASK]
     [gw GATEWAY] [metric N] [mss BYTES] [window BYTES] [reject]
[IFACE]]

Show or edit the kernel routing tables. This is the map of how your packets get places ๐Ÿ—บ๏ธโœจ

  • -n โ€” don't resolve names (just give me the numbers, I'm in a hurry)
  • -e โ€” display other/more info
  • -A inet[6] โ€” select the address family

rpm

rpm -i PACKAGE.rpm; rpm -qp[ildc] PACKAGE.rpm

Manipulate RPM packages. The commands are:

  • -i โ€” install the package
  • -qp โ€” query the package
  • -qpi โ€” show information
  • -qpl โ€” list contents
  • -qpd โ€” list documents
  • -qpc โ€” list config files

rpm2cpio

rpm2cpio PACKAGE.rpm

Outputs a cpio archive of the rpm file. Simple as that, one job, ate ๐Ÿ’…

run-init

run-init [-d CAP,CAP...] [-n] [-c CONSOLE_DEV] NEW_ROOT NEW_INIT [ARGS]

Free the initramfs and switch to another root fs. So what happens is: chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /, execute NEW_INIT. Major main character energy โ€” and also: PID must be 1, and NEW_ROOT must be a mountpoint. No exceptions bestie.

  • -c DEV โ€” reopen stdio to DEV after the switch
  • -d CAPS โ€” drop capabilities
  • -n โ€” dry run

run-parts

run-parts [-a ARG]... [-u UMASK] [--reverse] [--test] [--exit-on-error]
DIRECTORY

Run a whole bunch of scripts in DIRECTORY. Group project, but make it functional ๐ŸŽ€

  • -a ARG โ€” pass ARG as an argument to the scripts
  • -u UMASK โ€” set UMASK before running the scripts
  • --reverse โ€” reverse execution order
  • --test โ€” dry run
  • --exit-on-error โ€” bail out if a script exits with non-zero

sed

sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]...  or: sed
[-i[SFX]] [-nrE] CMD [FILE]...

The stream editor. Iconic. Legendary. Absolute queen of text munging ๐Ÿ‘‘

  • -e CMD โ€” add CMD to the sed commands to be executed
  • -f FILE โ€” add FILE contents to the sed commands to be executed
  • -i[SFX] โ€” edit files in-place (otherwise it writes to stdout). Optionally backs files up, appending SFX
  • -n โ€” suppress automatic printing of the pattern space
  • -r,-E โ€” use extended regex syntax

If there's no -e or -f, then the first non-option argument is the sed command string. The remaining arguments are input files (or stdin if there aren't any).

seq

seq [-w] [-s SEP] [FIRST [INC]] LAST

Print numbers from FIRST to LAST, in steps of INC. Both FIRST and INC default to 1.

  • -w โ€” pad with leading zeros
  • -s SEP โ€” string separator

setkeycodes

setkeycodes { SCANCODE KEYCODE }...

Modify the kernel's scancode-to-keycode map, which is how you let unusual keyboards generate usable keycodes. Inclusive of weird hardware ๐Ÿ’–

SCANCODE is either xx or e0xx (hexadecimal), and KEYCODE is decimal.

setpriv

setpriv [OPTIONS] PROG ARGS

Run PROG with different privilege settings.

  • -d,--dump โ€” show current capabilities
  • --nnp,--no-new-privs โ€” ignore setuid/setgid bits and file capabilities
  • --inh-caps CAP,CAP โ€” set inheritable capabilities
  • --ambient-caps CAP,CAP โ€” set ambient capabilities

setsid

setsid [-c] PROG ARGS

Run PROG in a new session. PROG will have no controlling terminal and won't be affected by keyboard signals (^C etc). Untouchable. Unbothered. In its own lane ๐Ÿงš

  • -c โ€” set controlling terminal to stdin

sh

sh [-il] [-|+Cabefmnuvx] [-|+o OPT]... [-c 'SCRIPT' [ARG0 ARGS] | FILE
ARGS | -s ARGS]

The Unix shell interpreter. Yeah that's it, that's the whole description, it needs no hype, it is the hype ๐Ÿ˜ญ

sha1sum

sha1sum [-c[sw]] [FILE]...

Print or check SHA1 checksums.

  • -c โ€” check sums against the list in FILEs
  • -s โ€” don't output anything, the status code shows success
  • -w โ€” warn about improperly formatted checksum lines

sha256sum

sha256sum [-c[sw]] [FILE]...

Print or check SHA256 checksums.

  • -c โ€” check sums against the list in FILEs
  • -s โ€” don't output anything, the status code shows success
  • -w โ€” warn about improperly formatted checksum lines

sha384sum

sha384sum [-c[sw]] [FILE]...

Print or check SHA384 checksums.

  • -c โ€” check sums against the list in FILEs
  • -s โ€” don't output anything, the status code shows success
  • -w โ€” warn about improperly formatted checksum lines

sha3sum

sha3sum [-c[sw]] [-a BITS] [FILE]...

Print or check SHA3 checksums.

  • -c โ€” check sums against the list in FILEs
  • -s โ€” don't output anything, the status code shows success
  • -w โ€” warn about improperly formatted checksum lines
  • -a BITS โ€” 224 (which is the default), 256, 384, 512

sha512sum

sha512sum [-c[sw]] [FILE]...

Print or check SHA512 checksums.

  • -c โ€” check sums against the list in FILEs
  • -s โ€” don't output anything, the status code shows success
  • -w โ€” warn about improperly formatted checksum lines

shred

shred [-fuz] [-n N] [-s SIZE] FILE...

Overwrite/delete your FILEs. This is the "I want it GONE gone" one ๐Ÿซฃ๐Ÿ”ฅ

  • -f โ€” chmod to ensure writability
  • -s SIZE โ€” size to write
  • -n N โ€” overwrite N times (default 3)
  • -z โ€” final overwrite with zeros
  • -u โ€” remove the file

shuf

shuf [-n NUM] [-o FILE] [-z] [FILE | -e [ARG...] | -i L-H]

Randomly permute lines. Chaos, but on purpose ๐ŸŒˆ

  • -n NUM โ€” output at most NUM lines
  • -o FILE โ€” write to FILE, not standard output
  • -z โ€” NUL terminated output
  • -e โ€” treat the ARGs as lines
  • -i L-H โ€” treat the numbers L-H as lines

sleep

sleep [N]...

Pause for a time equal to the total of the args you gave, where each arg can have an optional suffix of s for seconds, m for minutes, h for hours, or d for days. Bestie needs her beauty rest ๐Ÿ˜ด๐Ÿ’ค

sort

sort [-nrughMcszbdfiokt] [-o FILE] [-k
START[.OFS][OPTS][,END[.OFS][OPTS]] [-t CHAR] [FILE]...

Sort lines of text. The organizing queen, she puts your whole life in order โœจ

  • -o FILE โ€” output to FILE
  • -c โ€” check whether the input is sorted
  • -b โ€” ignore leading blanks
  • -f โ€” ignore case
  • -i โ€” ignore unprintable characters
  • -d โ€” dictionary order (blank or alphanumeric only)
  • -n โ€” sort numbers
  • -g โ€” general numerical sort
  • -h โ€” sort human readable numbers (2K 1G)
  • -M โ€” sort month
  • -V โ€” sort version
  • -t CHAR โ€” field separator
  • -k N[,M] โ€” sort by the Nth field
  • -r โ€” reverse sort order
  • -s โ€” stable (don't sort ties alphabetically)
  • -u โ€” suppress duplicate lines
  • -z โ€” NUL terminated input and output

ssl_client

ssl_client [-n SNI] { -s FD [-r FD] | HOST | -e PROG ARGS }

That's the synopsis, that's the whole entry. No extra notes in the source, so no extra notes from me ๐Ÿ’…

ssl_server

ssl_server -f PRIVKEY_CERT.pem PROG ARGS

An inetd-style TLS server.

  • -f PEMFILE โ€” HAProxy-style CRT file

start-stop-daemon

start-stop-daemon -S|-K [OPTIONS] [-- ARGS]

Search for matching processes, and then -S starts a process unless a matching process is found, or -K stops all matching processes. She's doing both jobs and not complaining about it ๐Ÿ‘‘

Process matching:

  • -u USERNAME|UID โ€” match only this user's processes
  • -n NAME โ€” match processes with NAME in the comm field in /proc/PID/stat
  • -x EXECUTABLE โ€” match processes with this command in /proc/PID/cmdline
  • -p FILE โ€” match a process with the PID from FILE
  • All specified conditions must match

-S only:

  • -x EXECUTABLE โ€” program to run
  • -a NAME โ€” zeroth argument
  • -b โ€” background
  • -O FILE โ€” append stdout and stderr to FILE
  • -N N โ€” change nice level
  • -c USER[:[GRP]] โ€” change user/group
  • -d DIR โ€” change to DIR
  • -m โ€” write PID to the pidfile specified by -p

-K only:

  • -s SIG โ€” signal to send
  • -t โ€” match only, exit with 0 if found

Other:

  • -o โ€” exit with status 0 if nothing is done
  • -v โ€” verbose
  • -q โ€” quiet

stat

stat [-ltf] [-c FMT] FILE...

Display file status (the default) or filesystem status.

  • -c FMT โ€” use the specified format
  • -f โ€” display filesystem status
  • -L โ€” follow links
  • -t โ€” terse display

FMT sequences for files:

  • %a โ€” access rights in octal
  • %A โ€” access rights in human readable form
  • %b โ€” number of blocks allocated (see %B)
  • %B โ€” size in bytes of each block reported by %b
  • %d โ€” device number in decimal
  • %D โ€” device number in hex
  • %f โ€” raw mode in hex
  • %F โ€” file type
  • %g โ€” group ID
  • %G โ€” group name
  • %h โ€” number of hard links
  • %i โ€” inode number
  • %n โ€” file name
  • %N โ€” file name, with -> TARGET if symlink
  • %o โ€” I/O block size
  • %s โ€” total size in bytes
  • %t โ€” major device type in hex
  • %T โ€” minor device type in hex
  • %u โ€” user ID
  • %U โ€” user name
  • %x โ€” time of last access
  • %X โ€” time of last access as seconds since Epoch
  • %y โ€” time of last modification
  • %Y โ€” time of last modification as seconds since Epoch
  • %z โ€” time of last change
  • %Z โ€” time of last change as seconds since Epoch

FMT sequences for file systems:

  • %a โ€” free blocks available to non-superuser
  • %b โ€” total data blocks
  • %c โ€” total file nodes
  • %d โ€” free file nodes
  • %f โ€” free blocks
  • %i โ€” File System ID in hex
  • %l โ€” maximum length of filenames
  • %n โ€” file name
  • %s โ€” block size (for faster transfer)
  • %S โ€” fundamental block size (for block counts)
  • %t โ€” type in hex
  • %T โ€” type in human readable form

strings

strings [-fo] [-t o|d|x] [-n LEN] [FILE]...

Display printable strings in a binary file. Digging the little readable bits out of the chaos ๐Ÿ”โœจ

  • -f โ€” precede strings with filenames
  • -o โ€” precede strings with octal offsets
  • -t o|d|x โ€” precede strings with offsets in base 8/10/16
  • -n LEN โ€” at least LEN characters form a string (default 4)

stty

stty [-a|g] [-F DEVICE] [SETTING]...

With no arguments, it prints the baud rate, the line discipline, and the deviations from stty sane.

  • -F DEVICE โ€” open DEVICE instead of stdin ๐Ÿซถ
  • -a โ€” print every current setting in human-readable form, so you can actually read it bestie
  • -g โ€” print it in stty-readable form instead (for feeding right back in)
  • [SETTING] โ€” the actual settings you wanna mess with; see the manpage, there's a whole list and we are not about to pretend otherwise ๐Ÿ’…

su

su [-lmp] [-s SH] [-] [USER [FILE ARGS | -c 'CMD' [ARG0 ARGS]]]

Run a shell under USER โ€” and yeah, by default that's root ๐Ÿ‘‘

  • -, -l โ€” clear the environment, jump to the home dir, and run the shell as a login shell
  • -p, -m โ€” do not set new $HOME, $SHELL, $USER, $LOGNAME
  • -c CMD โ€” command to hand off to sh -c
  • -s SH โ€” the shell to use instead of the user's default one

sulogin

sulogin [-t N] [TTY]

Single user login ๐Ÿ” (yes, the dramatic rescue mode one)

  • -p โ€” start a login shell
  • -t SEC โ€” timeout

svc

svc [-udopchaitkx] SERVICE_DIR...

Control the services being watched by the runsv supervisor ๐ŸŒธ

  • -u โ€” if the service isn't running, start it; if it stops, restart it
  • -d โ€” if the service is running, send it TERM+CONT signals, and do not restart it
  • -o โ€” once: if the service isn't running, start it and do not restart it
  • -pchaitk โ€” send STOP, CONT, HUP, ALRM, INT, TERM, or KILL signal to the service
  • -x โ€” exit: runsv will exit as soon as the service is down

svok

svok SERVICE_DIR

Check whether the runsv supervisor is running ๐Ÿ’– Exit code is 0 if it is, 100 if it isn't, and 111 (with an error message, so you will know) if SERVICE_DIR doesn't exist.


swapoff

swapoff [-a] [DEVICE]

Stop swapping on DEVICE ๐Ÿ›‘

  • -a โ€” stop swapping on all swap devices

swapon

swapon [-a] [-e] [-d[POL]] [DEVICE]

Start swapping on DEVICE โœจ

  • -a โ€” start swapping on all swap devices
  • -d[POL] โ€” discard blocks at swapon (POL=once), as freed (POL=pages), or both (when POL is omitted)
  • -e โ€” silently skip devices that don't exist (no drama, no error ๐Ÿซถ)

switch_root

switch_root [-c CONSOLE_DEV] NEW_ROOT NEW_INIT [ARGS]

Free the initramfs and switch to another root fs ๐ŸŒˆ Here's the whole ritual:

chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /, execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint. No exceptions, this is not a vibe-flexible situation.

  • -c DEV โ€” reopen stdio to DEV after the switch

sync

sync [-df] [FILE]...

Write all buffered blocks (in FILEs) to disk ๐Ÿ’พ

  • -d โ€” avoid syncing metadata
  • -f โ€” sync filesystems underlying FILEs

sysctl

sysctl [-enq] { -a | -p [FILE]... | [-w] [KEY[=VALUE]]... }

Show/set kernel parameters ๐Ÿ‘‘

  • -e โ€” don't warn about unknown keys
  • -n โ€” don't show key names
  • -q โ€” quiet
  • -a โ€” show all values
  • -p โ€” set values from FILEs (default /etc/sysctl.conf)
  • -w โ€” set values

syslogd

syslogd [OPTIONS]

The system logging utility ๐Ÿ“

  • -n โ€” run in foreground
  • -R HOST[:PORT] โ€” log to HOST:PORT (default PORT:514)
  • -L โ€” log locally and via network (default is network only if -R is given)
  • -C[size_kb] โ€” log to a shared mem buffer (use logread to read it)
  • -O FILE โ€” log to FILE (default: /var/log/messages, or stdout if it's -)
  • -s SIZE โ€” max size (KB) before rotation (default 200KB, 0=off)
  • -b N โ€” N rotated logs to keep (default 1, max 99, 0=purge)
  • -l N โ€” log only messages more urgent than prio N (1-8)
  • -S โ€” smaller output
  • -t โ€” strip client-generated timestamps
  • -D โ€” drop duplicates
  • -f FILE โ€” use FILE as config (default: /etc/syslog.conf)

tac

tac [FILE]...

Concatenate FILEs and print them in reverse ๐Ÿ™ƒ (it's cat backwards, in every sense)


tail

tail [OPTIONS] [FILE]...

Print the last 10 lines of FILEs (or stdin) to. With more than one FILE, put a filename header before each one ๐Ÿ’…

  • -c [+]N[bkm] โ€” print last N bytes
  • -n N[bkm] โ€” print last N lines
  • -n +N[bkm] โ€” start on the Nth line and print the rest (where b:512, k:1024, m:1024^2)
  • -q โ€” never print headers
  • -v โ€” always print headers
  • -f โ€” print data as the file grows ๐Ÿ‘€
  • -F โ€” same as -f, but keeps retrying
  • -s SECONDS โ€” wait SECONDS between reads with -f

tar

tar c|x|t [-ZzJjahmvokO] [-f TARFILE] [-C DIR] [FILE]...

Create, extract, or list files from a tar file ๐ŸŽ€

  • c โ€” create
  • x โ€” extract
  • t โ€” list
  • -f FILE โ€” name of TARFILE (- for stdin/out)
  • -C DIR โ€” change to DIR before the operation
  • -v โ€” verbose
  • -O โ€” extract to stdout
  • -m โ€” don't restore mtime
  • -o โ€” don't restore user:group
  • -k โ€” don't replace existing files
  • -Z โ€” (de)compress using compress
  • -z โ€” (de)compress using gzip
  • -J โ€” (de)compress using xz
  • -j โ€” (de)compress using bzip2
  • --lzma โ€” (de)compress using lzma
  • -a โ€” (de)compress based on extension
  • -h โ€” follow symlinks
  • --overwrite โ€” replace existing files
  • --strip-components NUM โ€” NUM of leading components to strip
  • --no-recursion โ€” don't descend in directories
  • --numeric-owner โ€” use numeric user:group
  • --no-same-permissions โ€” don't restore access permissions
  • --to-command COMMAND โ€” pipe files to COMMAND

taskset

taskset [-ap] [HEXMASK | -c LIST] { PID | PROG ARGS }

Set or get CPU affinity ๐Ÿงš

  • -p โ€” operate on PID
  • -a โ€” operate on all threads
  • -c โ€” affinity is a list, not a mask

tc

tc OBJECT CMD [dev STRING]

Where OBJECT: qdisc|class|filter and CMD: add|del|change|replace|show ๐Ÿ‘‘

qdisc [handle QHANDLE] [root|ingress|parent CLASSID]
      [[QDISC_KIND] [help|OPTIONS]]
QDISC_KIND := [p|b]fifo|tbf|prio|red|etc.
qdisc show [dev STRING] [ingress]
class [classid CLASSID] [root|parent CLASSID]
      [[QDISC_KIND] [help|OPTIONS] ]
class show [ dev STRING ] [root|parent CLASSID]
filter [pref PRIO] [protocol PROTO]
       [root|classid CLASSID] [handle FILTERID]
      [[FILTER_TYPE] [help|OPTIONS]]
filter show [dev STRING] [root|parent CLASSID]

Traffic control, bestie โ€” this is the whole networking main-character arc ๐ŸŒˆ


tee

tee [-ai] [FILE]...

Copy stdin to each FILE, and also to stdout ๐Ÿซถ (splitting the stream like a true icon)

  • -a โ€” append to the given FILEs, don't overwrite
  • -i โ€” ignore interrupt signals (SIGINT)

telnet

telnet [-a] [-l USER] HOST [PORT]

Connect to a telnet server ๐Ÿ’ป

  • -a โ€” automatic login with the $USER envvar
  • -l USER โ€” automatic login as USER

tftp

tftp [OPTIONS] HOST [PORT]

Transfer a file from/to a tftp server โœจ

  • -l FILE โ€” local FILE
  • -r FILE โ€” remote FILE
  • -g โ€” get file
  • -p โ€” put file
  • -b SIZE โ€” transfer blocks in bytes

time

time [-vpa] [-o FILE] PROG ARGS

Run PROG and display resource usage when it exits โฑ๏ธ

  • -v โ€” verbose
  • -p โ€” POSIX output format
  • -f FMT โ€” custom format
  • -o FILE โ€” write result to FILE
  • -a โ€” append (else overwrite)

timeout

timeout [-s SIG] [-k KILL_SECS] SECS PROG ARGS

Run PROG. Send SIG to it if it's not gone in SECS seconds. Default SIG: TERM. If it still exists in KILL_SECS seconds, send KILL. ๐Ÿ’€ (polite first, then not polite at all)


top

top [-bH] [-n COUNT] [-d SECONDS]

Show a view of process activity in real time ๐Ÿ‘€ Read the status of all processes from /proc each SECONDS and show a screenful of them.

Keys:

  • N/M/P/T: sort by pid/mem/cpu/time
  • R: reverse sort
  • H: toggle threads
  • Q,^C: exit

Options:

  • -b โ€” batch mode
  • -n N โ€” exit after N iterations
  • -d SEC โ€” delay between updates
  • -H โ€” show threads

touch

touch [-cham] [-d DATE] [-t DATE] [-r FILE] FILE...

Update mtime of FILEs ๐ŸŽ€

  • -c โ€” don't create files
  • -h โ€” don't follow links
  • -a โ€” change only atime
  • -m โ€” change only mtime
  • -d DT โ€” date/time to use
  • -t DT โ€” date/time to use
  • -r FILE โ€” use FILE's date/time

tr

tr [-cds] STRING1 [STRING2]

Translate, squeeze, or delete characters from stdin, writing to stdout ๐Ÿ’…

  • -c โ€” take the complement of STRING1
  • -d โ€” delete input characters coded STRING1
  • -s โ€” squeeze multiple output characters of STRING2 into one character

traceroute

traceroute [-46Flnrv] [-f 1ST_TTL] [-m MAXTTL] [-q PROBES] [-p PORT]
     [-t TOS] [-w WAIT_SEC] [-s SRC_IP] [-i IFACE]
     [-z PAUSE_MSEC] HOST [BYTES]

Trace the route to HOST ๐ŸŒ

  • -4,-6 โ€” force IP or IPv6 name resolution
  • -F โ€” set the don't fragment bit
  • -l โ€” display TTL value of the returned packet
  • -n โ€” print numeric addresses
  • -r โ€” bypass routing tables, send directly to HOST
  • -v โ€” verbose
  • -f N โ€” first number of hops (default 1)
  • -m N โ€” max number of hops
  • -q N โ€” number of probes per hop (default 3)
  • -p N โ€” base UDP port number used in probes (default 33434)
  • -s IP โ€” source address
  • -i IFACE โ€” source interface
  • -t N โ€” type-of-service in probe packets (default 0)
  • -w SEC โ€” wait for a response (default 3)
  • -z MSEC โ€” wait before each send

traceroute6

traceroute6 [-nrv] [-f 1ST_TTL] [-m MAXTTL] [-q PROBES] [-p PORT]
     [-t TOS] [-w WAIT_SEC] [-s SRC_IP] [-i IFACE]
     [-z PAUSE_MSEC] HOST [BYTES]

Trace the route to HOST ๐ŸŒโœจ

  • -n โ€” print numeric addresses
  • -r โ€” bypass routing tables, send directly to HOST
  • -v โ€” verbose
  • -f N โ€” first number of hops (default 1)
  • -m N โ€” max number of hops
  • -q N โ€” number of probes per hop (default 3)
  • -p N โ€” base UDP port number used in probes (default 33434)
  • -s IP โ€” source address
  • -i IFACE โ€” source interface
  • -t N โ€” type-of-service in probe packets (default 0)
  • -w SEC โ€” wait for a response (default 3)
  • -z MSEC โ€” wait before each send

truncate

truncate [-c] -s SIZE FILE...

Truncate FILEs to SIZE โœ‚๏ธ

  • -c โ€” do not create files
  • -s SIZE โ€” (the size, bestie, that's the whole point)

ts

ts [-is] [STRFTIME]

Pipe stdin to stdout, add a timestamp to each line โฐ

  • -s โ€” time since start
  • -i โ€” time since previous line

tty

tty [-s]

Print the file name of stdin's terminal ๐Ÿซถ

  • -s โ€” print nothing, only return the exit status

tunctl

tunctl [-f DEVICE] [-t NAME | -d NAME]

Create or delete TUN/TAP interfaces ๐Ÿฆ‹

  • -f DEV โ€” TUN device (default /dev/net/tun)
  • -t NAME โ€” create iface (default: tapN)
  • -d NAME โ€” delete iface

ubirename

ubirename UBI_DEVICE OLD_VOLNAME NEW_VOLNAME [OLD2 NEW2]...

Rename UBI volumes on UBI_DEVICE ๐Ÿ’œ

udhcpc

udhcpc [-fbqRB] [-a[MSEC]] [-t N] [-T SEC] [-A SEC|-n]      [-i IFACE]
[-s PROG] [-p PIDFILE]      [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x
OPT:VAL]... [-O OPT]...

okay bestie, this is the DHCP client โ€” the little guy that walks up to your router and is like "hi, may i please have an IP ๐Ÿฅบ" and the router is like "sure babe" ๐Ÿ’…. Here's literally every knob:

  • -i IFACE โ€” which interface to use (default is eth0)
  • -s PROG โ€” run PROG at DHCP events (default is /etc/udhcpc/default.script)
  • -p FILE โ€” create a pidfile
  • -B โ€” request broadcast replies
  • -t N โ€” send up to N discover packets (default 3)
  • -T SEC โ€” pause between packets (default 3)
  • -A SEC โ€” wait this long if a lease isn't obtained (default 20)
  • -b โ€” go to the background if a lease isn't obtained
  • -n โ€” exit if a lease isn't obtained
  • -q โ€” exit once you've obtained a lease
  • -R โ€” release the IP on exit
  • -f โ€” run in the foreground
  • -S โ€” log to syslog too
  • -a[MSEC] โ€” validate the offered address with an ARP ping
  • -r IP โ€” request this IP address specifically
  • -o โ€” don't request any options (unless -O is given)
  • -O OPT โ€” request option OPT from the server (cumulative, so stack 'em up)
  • -x OPT:VAL โ€” include option OPT in sent packets (cumulative too)
    • examples of string, numeric, and hex byte opts:
    • -x hostname:bbox โ€” option 12
    • -x lease:3600 โ€” option 51 (lease time)
    • -x 0x3d:0100BEEFC0FFEE โ€” option 61 (client id)
    • -x 14:'"dumpfile"' โ€” option 14 (shell-quoted)
  • -F NAME โ€” ask the server to update the DNS mapping for NAME
  • -V VENDOR โ€” vendor identifier (default is 'udhcp VERSION')
  • -C โ€” don't send the MAC as the client identifier

Signals:

  • USR1 โ€” renew lease
  • USR2 โ€” release lease

udhcpc6

udhcpc6 [-fbqR] [-t N] [-T SEC] [-A SEC|-n] [-i IFACE] [-s PROG]
     [-p PIDFILE] [-mldo] [-r IPv6] [-x OPT:VAL]... [-O OPT]...

same energy, but v6 flavored ๐Ÿฆ‹:

  • -i IFACE โ€” interface to use (default eth0)
  • -p FILE โ€” create pidfile
  • -s PROG โ€” run PROG at DHCP events (default /etc/udhcpc/default6.script)
  • -t N โ€” send up to N discover packets
  • -T SEC โ€” pause between packets (default 3)
  • -A SEC โ€” wait if lease is not obtained (default 20)
  • -b โ€” background if lease is not obtained
  • -n โ€” exit if lease is not obtained
  • -q โ€” exit after obtaining lease
  • -R โ€” release IP on exit
  • -f โ€” run in foreground
  • -S โ€” log to syslog too
  • -m โ€” send multicast renew requests rather than unicast ones
  • -l โ€” send an 'information request' instead of 'solicit' (this is the one for servers that do not assign IPv6 addresses, iykyk)
  • -r IPv6 โ€” request this address ('no' to not request any IP)
  • -d โ€” request prefix
  • -o โ€” don't request any options (unless -O is given)
  • -O OPT โ€” request option OPT from server (cumulative)
  • -x OPT:VAL โ€” include option OPT in sent packets (cumulative)
    • examples of string, numeric, and hex byte opts:
    • -x hostname:bbox โ€” option 12
    • -x lease:3600 โ€” option 51 (lease time)
    • -x 0x3d:0100BEEFC0FFEE โ€” option 61 (client id)
    • -x 14:'"dumpfile"' โ€” option 14 (shell-quoted)

Signals:

  • USR1 โ€” renew lease
  • USR2 โ€” release lease

udhcpd

udhcpd [-fS] [-I ADDR] [-a MSEC] [CONFFILE]

DHCP server โ€” yes bb, the other side of the conversation. Now you are the one handing out IPs and everyone wants your attention ๐Ÿ‘‘

  • -f โ€” run in foreground
  • -S โ€” log to syslog too
  • -I ADDR โ€” local address
  • -a MSEC โ€” timeout for ARP ping (default 2000)

Signals:

  • USR1 โ€” update lease file

uevent

uevent [PROG ARGS]

okay so uevent runs PROG for every netlink notification. PROG's environment contains data passed from the kernel. The classic glow-up usage (a daemon for dynamic device node creation):

# uevent mdev & mdev -s

umount

umount [-rlfda] [-t FSTYPE] FILESYSTEM|DIRECTORY

Unmount filesystems โ€” telling your disk "bye bestie, we're done here" ๐ŸŽ€

  • -a โ€” unmount all filesystems
  • -r โ€” remount devices read-only if mount is busy
  • -l โ€” lazy umount (detach filesystem)
  • -f โ€” force umount (i.e., unreachable NFS server)
  • -d โ€” free loop device if it has been used
  • -t FSTYPE[,...] โ€” unmount only these filesystem type(s)

uname

uname [-amnrspvio]

Print system information โ€” the OG "who even are you" ๐Ÿซถ

  • -a โ€” print all
  • -m โ€” machine (hardware) type
  • -n โ€” hostname
  • -r โ€” kernel release
  • -s โ€” kernel name (default)
  • -p โ€” processor type
  • -v โ€” kernel version
  • -i โ€” hardware platform
  • -o โ€” OS name

uncompress

uncompress [-cf] [FILE]...

Decompress FILEs (or stdin) โ€” squish reversal โœจ

  • -c โ€” write to stdout
  • -f โ€” overwrite

unexpand

unexpand [-fa][-t N] [FILE]...

Convert spaces to tabs, writing to stdout โ€” doing the exact opposite of what expand does, and living its truth ๐Ÿคก

  • -a โ€” convert all blanks
  • -f โ€” convert only leading blanks
  • -t N โ€” tabstops every N chars

uniq

uniq [-cduiz] [-f,s,w N] [FILE [OUTFILE]]

Discard duplicate lines โ€” the "you're all saying the same thing, one of you speak" of Unix ๐Ÿ’€

  • -c โ€” prefix lines by the number of occurrences
  • -d โ€” only print duplicate lines
  • -u โ€” only print unique lines
  • -i โ€” ignore case
  • -z โ€” NUL terminated output
  • -f N โ€” skip first N fields
  • -s N โ€” skip first N chars (after any skipped fields)
  • -w N โ€” compare N characters in line

unix2dos

unix2dos [-ud] [FILE]

Convert FILE in-place from Unix to DOS format. When no file is given, use stdin/stdout. (line endings are a โœจvibeโœจ)

  • -u โ€” dos2unix
  • -d โ€” unix2dos

unlink FILE

Delete FILE by calling unlink() โ€” no thoughts, no recycling bin, just gone ๐Ÿ’…


unlzma

unlzma [-cfk] [FILE]...

Decompress FILEs (or stdin) โ€” the LZMA un-squeeze ๐Ÿฆ‹

  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

unshare

unshare [OPTIONS] [PROG ARGS]

main character energy: this is literally not like other processes โ€” it gets its very own namespaces ๐ŸŒˆ

  • -m, --mount[=FILE] โ€” unshare mount namespace
  • -u, --uts[=FILE] โ€” unshare UTS namespace (hostname etc.)
  • -i, --ipc[=FILE] โ€” unshare System V IPC namespace
  • -n, --net[=FILE] โ€” unshare network namespace
  • -p, --pid[=FILE] โ€” unshare PID namespace
  • -U, --user[=FILE] โ€” unshare user namespace
  • -f โ€” fork before execing PROG
  • -r โ€” map current user to root (implies -U)
  • --mount-proc[=DIR] โ€” mount /proc filesystem first (implies -m)
  • --propagation slave|shared|private|unchanged โ€” modify mount propagation in the mount namespace
  • --setgroups allow|deny โ€” control the setgroups syscall in user namespaces

unxz

unxz [-cfk] [FILE]...

Decompress FILEs (or stdin) โ€” xz but backwards, iconic โญ

  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

unzip

unzip [-lnojpqK] FILE[.zip] [FILE]... [-x FILE]... [-d DIR]

Extract FILEs from ZIP archive โ€” the birthday-present unwrap ๐ŸŽโœจ

  • -l โ€” list contents (with -q for short form)
  • -n โ€” never overwrite files (default: ask)
  • -o โ€” overwrite
  • -j โ€” do not restore paths
  • -p โ€” write to stdout
  • -t โ€” test
  • -q โ€” quiet
  • -K โ€” do not clear SUID bit
  • -x FILE โ€” exclude FILEs
  • -d DIR โ€” extract into DIR

uptime

uptime

Display the time since the last boot โ€” how long has this machine been awake and thriving ๐ŸŒธ


usleep

usleep N

Pause for N microseconds โ€” tiny little nap, micro edition ๐Ÿ˜ด


uudecode

uudecode [-o OUTFILE] [INFILE]

Uudecode a file. Finds OUTFILE in uuencoded source unless -o is given.


uuencode

uuencode [-m] [FILE] STORED_FILENAME

Uuencode FILE (or stdin) to stdout โ€” converting binary into something a mail server won't have a meltdown over ๐Ÿซถ

  • -m โ€” use base64 encoding per RFC1521

uuidgen

uuidgen

Generate a random UUID โ€” a fresh identity, no baggage, every single time ๐Ÿ’…โœจ


vconfig

vconfig COMMAND [OPTIONS]

Create and remove virtual ethernet devices โ€” network stacking, but make it fashion ๐ŸŽ€

  • add IFACE VLAN_ID
  • rem VLAN_NAME
  • set_flag IFACE 0|1 VLAN_QOS
  • set_egress_map VLAN_NAME SKB_PRIO VLAN_QOS
  • set_ingress_map VLAN_NAME SKB_PRIO VLAN_QOS
  • set_name_type NAME_TYPE

vi

vi [-c CMD] [-R] [-H] [FILE]...

Edit FILE โ€” the editor your grandpa fought wars in and honestly still slays ๐Ÿ‘‘

  • -c CMD โ€” initial command to run ($EXINIT and ~/.exrc also available)
  • -R โ€” read-only
  • -H โ€” list available features

vmstat

vmstat [-n] [INTERVAL [COUNT]]

Show virtual memory statistics โ€” numbers go brrr and honestly they're kind of hot ๐Ÿ“Š๐Ÿ”ฅ

  • -n โ€” show header once

w

w

Show who is logged on โ€” the group chat roster of your machine ๐Ÿ’ฌ


watch

watch [-n SEC] [-tx] PROG ARGS

Run PROG periodically โ€” refreshing like your feed, forever, because you can't look away ๐Ÿ“

  • -n SEC โ€” period (default 2)
  • -t โ€” don't print header
  • -x โ€” exec(PROG,ARGS) instead of sh -c 'PROG ARGS'

watchdog

watchdog [-t N[ms]] [-T N[ms]] [-F] DEV

Periodically write to watchdog device DEV โ€” the "if i stop responding, reboot me" safety net, no cap ๐Ÿถ

  • -T N โ€” reboot after N seconds if not reset (default 60)
  • -t N โ€” reset every N seconds (default 30)
  • -F โ€” run in foreground
Use 500ms to specify period in milliseconds โ€” heads up on the units bestie, they bite ๐Ÿ˜ญ

wc

wc [-cmlwL] [FILE]...

Count lines, words, and bytes for FILEs (or stdin) โ€” the original counting bestie ๐Ÿ”ข

  • -c โ€” count bytes
  • -m โ€” count characters
  • -l โ€” count newlines
  • -w โ€” count words
  • -L โ€” print longest line length

wget

wget [-cqS] [--spider] [-O FILE] [-o LOGFILE] [--header STR]
     [--post-data STR | --post-file FILE] [-Y on/off]
     [--no-check-certificate] [-P DIR] [-U AGENT] [-T SEC] URL...

Retrieve files via HTTP or FTP โ€” the internet fetch quest, gorgeous ๐ŸŒˆ

  • --spider โ€” only check URL existence: $? is 0 if exists
  • --header STR โ€” add STR (of form 'header: value') to headers
  • --post-data STR โ€” send STR using POST method
  • --post-file FILE โ€” send FILE using POST method
  • --no-check-certificate โ€” don't validate the server's certificate
  • -c โ€” continue retrieval of aborted transfer
  • -q โ€” quiet
  • -P DIR โ€” save to DIR (default .)
  • -S โ€” show server response
  • -T SEC โ€” network read timeout is SEC seconds
  • -O FILE โ€” save to FILE ('-' for stdout)
  • -o LOGFILE โ€” log messages to FILE
  • -U STR โ€” use STR for User-Agent header
  • -Y on/off โ€” use proxy

which

which [-a] COMMAND...

Locate COMMAND โ€” the "where is she" of the shell ๐Ÿ•ต๏ธโ€โ™€๏ธ

  • -a โ€” show all matches

who

who [-aH]

Show who is logged on โ€” same vibe as w, different fit ๐Ÿ‘ฏ

  • -a โ€” show all
  • -H โ€” print column headers

whoami

whoami

the identity crisis command ๐Ÿชžโœจ โ€” that's the whole thing, that's the whole synopsis, and honestly? iconic.

and for whoami โ€” it just prints the user name tied to your current effective user id ๐Ÿ’… periodt.

xargs ๐Ÿ’…

xargs [OPTIONS] [PROG ARGS]

runs PROG on every item coming from stdin, like a little assembly line for your commands ๐Ÿญโœจ

  • -0 โ€” NUL terminated input
  • -a FILE โ€” read from FILE instead of stdin
  • -o โ€” reopen stdin as /dev/tty
  • -r โ€” don't run command if input is empty
  • -t โ€” print the command on stderr before execution
  • -p โ€” ask user whether to run each command
  • -E STR, -e[STR] โ€” STR stops input processing
  • -I STR โ€” replace STR within PROG ARGS with input line
  • -n N โ€” pass no more than N args to PROG
  • -s N โ€” pass command line of no more than N bytes
  • -P N โ€” run up to N PROGs in parallel
  • -x โ€” exit if size is exceeded

xxd ๐ŸŽ€

xxd [-ri] [-ps] [-g N] [-c N] [-l LEN] [-s OFS] [-o OFS] [FILE]

hex dumps FILE (or stdin) so you can see all the bytes in their hexadecimal glory โœจ

  • -g N โ€” bytes per group (default 2)
  • -c N โ€” bytes per line (default: 16, -ps: 30, -i: 12)
  • -ps โ€” show only hex bytes (no offset/spaces)
  • -i โ€” C include file style
  • -l LENGTH โ€” show only first LENGTH bytes
  • -s OFFSET โ€” skip OFFSET bytes
  • -o OFFSET โ€” add OFFSET to displayed offset
  • -r โ€” reverse (with -p, assumes no offsets in input)

xz ๐Ÿฆ‹

xz -d [-cfk] [FILE]...

decompresses FILEs (or stdin) because compression is so last season ๐Ÿ’…

  • -d โ€” decompress
  • -c โ€” write to stdout
  • -f โ€” force
  • -k โ€” keep input files
  • -t โ€” test integrity

xzcat ๐ŸŒธ

xzcat [FILE]...

decompresses to stdout, like xz -dc but cuter ๐ŸŽ€

yes ๐Ÿ”

yes [STRING]

repeatedly prints a line with STRING, or just y if you don't give it one. infinite vibes โœจ

zcat ๐Ÿ’–

zcat [FILE]...

decompresses to stdout, classic move ๐Ÿ’…


๐Ÿงš LIBC NSS ๐Ÿงš

GNU Libc (glibc) uses the Name Service Switch (NSS) to configure how the C library behaves for your local environment, and to configure how it reads system data โ€” like passwords and group information. This is implemented using an /etc/nsswitch.conf configuration file, and using one or more of the /lib/libnss_* libraries. BusyBox tries to avoid using any libc calls that make use of NSS. But some applets โ€” like login and su โ€” will use libc functions that require NSS. ๐Ÿ’…

If you enable CONFIG_USE_BB_PWD_GRP, BusyBox will use internal functions to directly access the /etc/passwd, /etc/group, and /etc/shadow files without using NSS. This may allow you to run your system without needing to install any of the NSS configuration files and libraries. ๐ŸŽ€

When used with glibc, the BusyBox 'networking' applets will similarly require that you install at least some of the glibc NSS stuff โ€” in particular, /etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*. ๐ŸŒ

Shameless Plug: As an alternative, you could use a C library such as uClibc. In addition to making your system significantly smaller, uClibc does not require the use of any NSS support files or libraries. ๐Ÿ‘‘


๐Ÿ‘‘ MAINTAINER ๐Ÿ‘‘

  • Denis Vlasenko <vda.linux@googlemail.com> โ€” the maintainer, holding it down ๐Ÿ’–

โœจ AUTHORS โœจ

okay so the following people have contributed code to BusyBox whether they know it or not. If you wrote code that's in BusyBox, you should probably be listed here so you can get your bit of eternal glory. If you should be listed here, or the description of what you did needs more detail, or is straight-up wrong, please send in an update. ๐Ÿ’Œ

  • Emanuele Aina <emanuele.aina@tiscali.it> โ€” did run-parts ๐Ÿ’–
  • Erik Andersen <andersen@codepoet.org> โ€” brought tons of new stuff, did a major rewrite of most of the core apps, added tons of new apps (as noted in the header files), and put in lots of tedious effort writing these boring docs that nobody is actually going to read. ๐Ÿ˜ญ
  • Laurence Anderson <l.d.anderson@warwick.ac.uk> โ€” gave us rpm2cpio, unzip, get_header_cpio, the read_gz interface, and rpm ๐ŸŽ
  • Jeff Angielski <jeff@theptrgroup.com> โ€” did ftpput and ftpget ๐ŸŒ
  • Edward Betts <edward@debian.org> โ€” gave us expr, hostid, logname, and whoami ๐Ÿ‘‘
  • John Beppu <beppu@codepoet.org> โ€” did du, nslookup, and sort ๐Ÿ“Š
  • Brian Candler <B.Candler@pobox.com> โ€” made tiny-ls(ls) ๐Ÿฃ
  • Randolph Chung <tausq@debian.org> โ€” did fbset, ping, and hostname ๐Ÿ“
  • Dave Cinege <dcinege@psychosis.com> โ€” brought more(v2), makedevs, dutmp, modularization, the auto links file, various fixes, and Linux Router Project maintenance ๐Ÿ› ๏ธ
  • Jordan Crouse <jordan@cosmicpenguin.net> โ€” did ipcalc ๐Ÿงฎ
  • Magnus Damm <damm@opensource.se> โ€” added tftp client insmod powerpc support ๐Ÿ’ช
  • Larry Doolittle <ldoolitt@recycle.lbl.gov> โ€” did pristine source directory compilation, lots of patches and fixes. ๐Ÿฉน
  • Glenn Engel <glenne@engel.org> โ€” did httpd ๐ŸŒ
  • Gennady Feldman <gfeldman@gena01.com> โ€” brought Sysklogd (single threaded syslogd, IPC Circular buffer support, logread), and various fixes. ๐Ÿ“
  • Karl M. Hegbloom <karlheg@debian.org> โ€” did cp_mv.c, the test suite, various fixes to utility.c, &c. ๐Ÿงช
  • Daniel Jacobowitz <dan@debian.org> โ€” did mktemp.c ๐Ÿ“„
  • Matt Kraai <kraai@alumni.cmu.edu> โ€” did documentation, bugfixes, and the test suite ๐Ÿ“š
  • Stephan Linz <linz@li-pro.net> โ€” did ipcalc and Red Hat equivalence ๐ŸŽฉ
  • John Lombardo <john@deltanet.com> โ€” did tr ๐Ÿ”„
  • Glenn McGrath <bug1@iinet.net.au> โ€” did common unarchiving code and unarchiving applets, ifupdown, ftpgetput, nameif, sed, patch, fold, install, uudecode. Also various bugfixes, review and apply numerous patches. ๐Ÿ“ฆ
  • Manuel Novoa III <mjn3@codepoet.org> โ€” did cat, head, mkfifo, mknod, rmdir, sleep, tee, tty, uniq, usleep, wc, yes, mesg, vconfig, make_directory, parse_mode, dirname, mode_string, get_last_path_component, simplify_path, and a number of trivial libbb routines. Also bug fixes, partial rewrites, and size optimizations in ash, basename, cal, cmp, cp, df, du, echo, env, ln, logname, md5sum, mkdir, mv, realpath, rm, sort, tail, touch, uname, watch, arith, human_readable, interface, dutmp, ifconfig, route. ๐Ÿคฏ
  • Vladimir Oleynik <dzo@simtreas.ru> โ€” did cmdedit; xargs (current), httpd (current); ports: ash, crond, fdisk, inetd, stty, traceroute, top; locale, various fixes, and was an irreconcilable critic of everything not perfect. ๐Ÿ˜ค
  • Bruce Perens <bruce@pixar.com> โ€” original author of BusyBox in 1995, 1996. Some of his code can still be found hiding here and there... ๐Ÿ•ต๏ธ
  • Tim Riker <Tim@Rikers.org> โ€” did bug fixes, member of fan club ๐ŸŽ‰
  • Kent Robotti <robotti@metconnect.com> โ€” did reset, tons and tons of bug reports and patches. ๐Ÿ›
  • Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com> โ€” did wget - contributed by permission of Covad Communications. ๐Ÿ“ก
  • Pavel Roskin <proski@gnu.org> โ€” did lots of bugs fixes and patches. ๐Ÿ”ง
  • Gyepi Sam <gyepi@praxis-sw.com> โ€” added remote logging feature for syslogd ๐Ÿ“ก
  • Linus Torvalds <torvalds@transmeta.com> โ€” did mkswap, fsck.minix, mkfs.minix ๐Ÿง
  • Mark Whitley <markw@codepoet.org> โ€” did grep, sed, cut, xargs (previous), the style-guide, new-applet-HOWTO, bug fixes, etc. ๐Ÿ“
  • Charles P. Wright <cpwright@villagenet.com> โ€” did gzip, mini-netcat(nc) ๐Ÿ—œ๏ธ
  • Enrique Zanardi <ezanardi@ull.es> โ€” did tarcat (since removed), loadkmap, various fixes, Debian maintenance. ๐Ÿง
  • Tito Ragusa <farmatito@tiscali.it> โ€” did devfsd and size optimizations in strings, openvt, and deallocvt. ๐Ÿ“‰
  • Paul Fox <pgf@foxharp.boston.ma.us> โ€” did vi editing mode for ash, various other patches/fixes. โœ๏ธ
  • Roberto A. Foglietta <me@roberto.foglietta.name> โ€” ported dnsd ๐ŸŒ
  • Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> โ€” did misc stuff ๐ŸŽฒ
  • Mike Frysinger <vapier@gentoo.org> โ€” did initial e2fsprogs, printenv, setarch, sum, misc. ๐Ÿ› ๏ธ
  • Jie Zhang <jie.zhang@analog.com> โ€” fixed two bugs in msh and hush (exitcode of killed processes) ๐Ÿ›

and that's the whole page, bestie! this was BusyBox version 1.38.0, dated 2026-09-24, and it's the BUSYBOX(1) man page. now go slay some unix! ๐Ÿ’–โœจ

๐Ÿ“ฆ where this page comes from