Command Cheat Sheet¶
This is a fast lookup of the commands that matter on Amiga Unix (Amix) 2.1: system administration, package management, building/installing a kernel and drivers, networking, clock handling, and getting data on and off the box. Each entry is a one-liner with a short note and a confidence tag. Where a command is nuanced enough to need its own page, this sheet links to the deep dive.
Read this first: Amix is AT&T System V Release 4 (SVR4) on the 68030 ✅, so most SVR4 admin conventions apply. But a few SVR4-isms bite hard:
- the
/bin/shis pre-POSIX ✅ — no$(...)command substitution, nogrep -q(use backticks andgrep … >/dev/null); the default interactive shell is ksh ✅. grepis classic SVR4: no\|alternation and nogrep -w✅. A multi-patterngrep 'a\|b'matches nothing and exits 1 — so it reads as "the symbol is absent," which is exactly the wrong conclusion when you are, say, checking whether a de-instrumented kernel still carries a diagnostic. Use one simple pattern pergrep, oregrep. (Root-caused on a real A4000 + Z3660 wherenm /stand/unix | grep 'a\|b'returned empty for two symbols that both exist.) The mirror case bites too:grep -v 'a\|b'passes every line, so a filter written that way leaves its input unchanged ✅ (the pattern is one literal that no line contains). Useegrep -v 'a|b'.
Commands below assume you are root unless noted.
For terminology (major/minor numbers, STREAMS, cdevsw, RDB, etc.) see the
glossary. For every device node and its major/minor, see the
device list. For what each version supports, see versions.
System administration¶
| Command | What it does | Tag |
|---|---|---|
sysadm |
SVR4 menu-driven admin front-end (standard SVR4 tool) | ✅ |
amixadm |
Amix's admin menu — add a user, date and time zone, screen, keymap, nodename and domain, passwords for all system accounts, hosts file, colour X, xdm, Netnews | ✅ |
init <level> |
Switch run level (SVR4 init + /etc/inittab) |
✅ |
who -r |
Show the current run level | ✅ |
shutdown -i6 -g0 -y |
Reboot now (-i6 = run level 6); use -i0 to halt, -iS for single-user |
✅ |
telinit S |
Drop to single-user (maintenance) mode | ✅ |
| Alt+F1 .. Alt+F8 | Switch between the 8 virtual consoles | ✅ |
Run levels (SVR4 standard) ✅. Amix uses init, /etc/inittab, and SVR4 run levels.
shutdown -i6 reboots; -i0 powers down to the bootstrap; S/s is single-user. The
canonical "I changed the kernel, now reboot into it" step throughout these docs is:
⚠ Run it from a console root shell. Requested over telnet while nobody is logged in on the
console, a reboot stalls at INIT: New run level: 6 and never runs rc6 — stock init,
reproduced on the stock kernel; only a power cycle recovers ✅. See quirks §58.
Finishing an install ✅. After the distribution is laid down and the kernel is built, the first
boot runs Commodore's system.setup (from /etc/sysinit, until it clears its own execute bit): node
name and domain, the date and time (the date step accepts only a year ≤ 1999 — set the real
date afterwards; see Time and the clock), a password for all system
accounts and for guest, a user account, the monitor, X11 and xdm, and Netnews. amixadm offers the
same steps as a menu afterwards. Read from the stock /etc/sysinit, system.setup and amixadm;
see accounts and remote logins.
Note on the default password 🟡. Community reports a post-install login password of
wasp. Treat as community lore, not a guarantee.
See first login and tour for what to do right after the install reboots.
Packages (SVR4 pkg*)¶
Amix ships the standard SVR4 packaging toolchain ✅. A package is a datastream or directory
of files plus a pkginfo/pkgmap; you build with pkgmk/pkgtrans and install with pkgadd.
For the on-disk internals — the /var/sadm database, the contents(4) record format, and a
stock-image defect that breaks pkgrm/pkginfo -l out of the box — see
package management.
Installed on the running system ✅: /usr/bin has pkginfo pkgmk pkgproto pkgparam pkgtrans;
/usr/sbin has pkgadd pkgrm pkgchk installf (pkgadd/pkgrm/installf are root-only, r-x------).
Not installed: pkgask, removef, and amixpkg — the last lives only on the root.adf install
media (see below). Man pages exist for pkgadd, pkgask, pkgchk and pkgrm (section 1m, formatted only), but not for pkginfo, pkgmk, pkgtrans, pkgproto or contents(4) ✅ (corrected 2026-10-30).
| Command | What it does | Tag |
|---|---|---|
pkginfo |
List installed packages | ✅ |
pkgadd -d <device|file> [pkg] |
Install a package from a device or datastream file | ✅ |
pkgrm <pkg> |
Remove an installed package | ✅ |
pkgproto <paths> > Prototype |
Generate a prototype file from a file tree | ✅ |
pkgmk -o -d <dir> |
Build a package (directory format) from a Prototype |
✅ |
pkgtrans <src> <dest.pkg> <pkg> |
Convert a directory package to a single datastream file | ✅ |
amixpkg -i -m -d <dev> -r /mnt -y standard |
Amix install-time package wrapper — on the root.adf install media only, not the installed system |
🟡 |
Gotchas.
- pkgproto omits symbolic links from the prototype 🟡 — add them back by hand or your
package will be missing files.
- amixpkg isn't on the installed system ✅ — it is the root.adf install-media wrapper that
drives the distribution install (amixpkg -i -m -d … -r /mnt -y standard) ✅, not a general-purpose
installed command. Its "widely reported broken" reputation 🟡 is at least partly explained by the
next item. For your own packages use the raw pkgadd/pkgmk/pkgtrans tools, which are installed.
- On the stock 2.1c image, pkgrm and pkginfo -l fail out of the box ✅ — a single malformed
contents record (a file whose name contains a space) aborts every full parse of the package
database with bad read of contents file … problem=unknown ftype. Deleting that one line fixes both.
Full diagnosis and fix on the package-management page.
Pre-built packages 🟡. Michael Parson's AmixBP is 40+ re-bundled .pkg files hosted on
amigaunix.com/downloads. An alternative
distribution form seen in the wild is a zoo-compressed cpio archive 🟡.
HTTP package-repo layout gotcha ✅. When serving packages over HTTP for a network client, the
payloads sit one directory below the catalog: a catalog filename field of stock/foo.pkg is
relative to a pkgs/ segment, so the real URL is <repo>/pkgs/stock/foo.pkg, not
<repo>/stock/foo.pkg. The client itself builds the correct URL; a manual probe that drops the pkgs/ segment gets a 404,
so verify against the client's own catalog, not a guessed path. Full format spec — tree, catalog grammar, integrity model, client behaviour:
the package repository format.
Kernel and driver builds¶
Stock Amix is a monolithic SVR4 kernel with no loadable modules ✅ (one third-party
exception) — drivers are statically linked
in, so adding or changing a driver means relinking the kernel and rebooting. The kernel
source/objects live in /usr/sys ✅; the switch tables live in master.d/kernel.c ✅.
| Command | What it does | Tag |
|---|---|---|
cd /usr/sys |
Kernel build root (object libraries + makefiles) | ✅ |
make |
Relink the kernel from the configured cdevsw[]/bdevsw[] tables |
✅ |
make install |
Build/stage the new kernel image (relocunix) |
✅ |
cp relocunix /stand |
Copy the new kernel to /stand before writing the boot partition |
✅ |
make bootpart KERNEL=relocunix |
Write the kernel to the 2 MB boot partition | ✅ |
mknod /dev/<name> c <major> <minor> |
Create a character device node | ✅ |
mknod /dev/<name> b <major> <minor> |
Create a block device node | ✅ |
The full driver install loop (Ditto paper procedure + va2000 repo refinements ✅):
# 1. drop driver .o (and source) into a subdir under /usr/sys, add it to that Makefile
# 2. edit master.d/kernel.c: add cdevsw[]/bdevsw[] slot, int2_tbl[]/init_tbl[] entries, extern decls
cd /usr/sys
make # produces the new kernel
make install # stage as relocunix
cp relocunix /stand
make bootpart KERNEL=relocunix # write the boot partition
mknod /dev/mydev c 68 0 # create the node (char major 68, minor 0 — example)
shutdown -i6 -g0 -y # reboot into the new kernel
Kernel-image name 🟡. The 1990 Ditto paper calls the built kernel rdbunix; modern 2.1
systems and the community repos call it relocunix — treat this as a historical rename and
verify per version (brief §13.3). The modern repos relink with make force (full kernel) or
make bootpart KERNEL=… (boot partition) ✅.
Before relinking, clean stale objects ✅ (from the va2000 driver notes) or the link picks up old code:
Always keep the old /unix as a fallback ✅ — if the new kernel panics, you can boot the
previous one.
Deep dives: the kernel build process, the driver model, writing a char driver, and writing a STREAMS driver.
Networking¶
Amix networking is SVR4 STREAMS TCP/IP ✅. The A2065 Ethernet interface is aen0 ✅.
There is no DHCP — static IP only ✅, and DNS resolution is off by default ✅ (the system
resolves names from /etc/hosts until you switch it on).
| Command | What it does | Tag |
|---|---|---|
ifconfig aen0 |
Show the A2065 Ethernet interface state | ✅ |
ifconfig aen0 <ip> netmask <mask> up |
Bring the interface up with a static address | ✅ |
slink addaen /dev/hya0 hya0 |
Link the Hydra STREAMS NIC into IP (Amix SVR4.0 has no ifconfig plumb), then ifconfig hya0 … |
✅ |
route add default <gw> 1 |
Add a default route — the trailing 1 (metric/hops) is required |
✅ |
netstat -rn |
Show the routing table — fails with read error on routehash when /stand/unix is not the booted kernel (quirk 93) |
✅ |
Default route — don't drop the metric ✅:
The trailing 1 is the hop count/metric and is mandatory on this SVR4 route.
Enabling DNS ✅ (off by default — the system uses /etc/hosts). The steps are:
# 1. point libsocket at the DNS-capable resolver shared library
ln -f /usr/lib/libsockdns.so /usr/lib/libsocket.so
# 2. edit /etc/netconfig so name lookups use DNS
# 3. start the name server / resolver: in.named
# 4. create /etc/resolv.conf with your nameserver(s)
After this, hostname lookups go through DNS instead of /etc/hosts.
Other networking facts.
- NFS server and client both work ✅.
- SLIP is buggy — you must reboot between sessions 🟡.
- No PPP 🟡.
- The Hydra NIC is a STREAMS/DLPI driver registered at cdevsw slot 47 (hya) ✅; see the
Hydra case study.
Deep dive: networking. For the interface device nodes, see the device list.
Mounting filesystems¶
Amix uses the SVR4 mount(1M)/umount(1M) front-ends. mount -F <fstype> <special> <dir> execs the
per-fstype helper /usr/lib/fs/<fstype>/mount — without that helper binary the fstype cannot be
mounted at all ✅. Two gotchas worth knowing:
| Fact | Detail | Tag |
|---|---|---|
/etc/mnttab is userland-maintained |
The kernel never writes it; the per-fstype mount helper appends the line (a single O_APPEND write), the way /proc//dev/fd do |
✅ |
umount(1M) matches by the special field |
It locates the mount by the entry's special (first) field — so a device-less filesystem must record its mount point there (like /proc /proc proc …), or umount silently fails while still deleting the mnttab line |
✅ |
Repeated mount stacks silently |
A second mount of the same media on the same dir returns 0 and stacks; the fs must reject it. Duplicate fstype lines in /etc/mnttab are the tell — see quirks #19 |
✅ |
The kernel-side half of this contract (writing an in-kernel filesystem) is on the driver model.
Time and the clock¶
| Command | What it does | Tag |
|---|---|---|
setclk |
Read/write the hardware (battery-backed) clock | ✅ |
date |
Show/set the system time (set via amixadm at install) |
✅ |
Y2K warning ✅ (corrected 2026-09-29). The kernel has no year cap; the bug is in the tooling:
- setclk, run by /etc/sysinit at every boot, writes the year %02d (126 for 2026), so date
rejects it (date: bad conversion) and the system clock is never set from the battery clock ✅;
- amixadm accepts only a year ≤ 1999, and the 2-digit date form reads yy as 19yy ✅.
To set a post-1999 date by hand use the 4-digit form date MMDDhhmmCCYY. The lasting fix is the
community-patched setclk (the AmigaUnix wiki's y2k-dst page — not on the patch disk, whose cpio
carries no setclk) plus /etc/clkzone naming the zone the battery clock holds ✅. Details:
quirks §7.
See the quirks page for the clock-drift and Y2K details, and the patch disk anatomy for how the patch is applied.
Media: tape, raw devices, and identifying the system¶
The distribution is streamed from QIC tape at SCSI ID 4 ✅ — the tape device is hard-coded.
The raw, no-rewind tape node is /dev/rmt/4hn ✅ (the n = no rewind on close; 4h = unit 4,
high density). The hard disk is ID 6 by convention — the installer prompts for the disk target; the chosen ID is baked into the device names once installed 🟡.
| Command | What it does | Tag |
|---|---|---|
uname -svrm |
Print system name, OS version, release, and machine (m68k) |
✅ |
uname -a |
Full identification line | ✅ |
dd if=/dev/rmt/4hn bs=256k \| cpio -imdcu |
Read the distribution from tape and extract it | ✅ |
dd if=/dev/rmt/4hn bs=256k \| zcat \| cpio -imdcu |
Same, for a compress(1)-compressed tape stream | ✅ |
cpio -icdmuv |
Extract an ASCII (-c) cpio archive, making dirs, preserving mtime |
✅ |
The install-tape pipeline ✅ (from the root.adf scripts) reads the no-rewind raw tape and
pipes it through cpio:
dd if=/dev/rmt/4hn bs=256k | cpio -imdcu
# compressed variant:
dd if=/dev/rmt/4hn bs=256k | zcat | cpio -imdcu
cpio flags used here: -i extract, -m retain modification times, -d create directories as
needed, -c ASCII header format, -u overwrite unconditionally.
Identifying the running system ✅. The patch disk's own header script greps uname -v for the
pattern ^2\.1.* 08004..$ before it will apply ✅, so uname is the canonical way to check what
you're on:
Diffs and patches ✅. Stock /usr/bin/diff has no unified format: diff -u a b answers
diff: invalid option -u; it has -c (context) only ✅. The stock public package's
/usr/public/bin/patch (Larry Wall's patch, patch level 12u4) does apply unified diffs and
reproduced a 2000-line target byte for byte from a four-hunk unified diff ✅. To make unified diffs
on the box, install an add-on GNU diffutils.
Non-standard tape drives 🟡/✅. The kernel only supports specific tapes (A3070 QIC-150 and
similar). viper_kludge (Frank "Crash" Edwards), shipped on root.adf ✅, patches kernel memory
so an Archive Viper 2150S works — but its README warns it is incompatible with
A3070/Caliper/Wangtek/Sankyo drives ✅. Tape-free installs (write a cpio image to the swap
partition from Linux/AmigaDOS, then extract with cpio) are documented on comp.unix.amiga 🟡.
For the SCSI ID rules and other hard-coded limits, see the hardware page and the quirks checklist. For the install in full, see the install walkthrough.
Man pages: how stock man finds a page ✅¶
Measured on the stock 2.1c install (emulated 68030), 2026-10-30.
- One binary, four names:
/usr/bin/man(13968 bytes, ELF) is hard-linked as/bin/man,/usr/bin/catmanand/usr/bin/whatis. Usage:man [section] name ...,man -k keyword,man -f file. There is no-M(man: illegal option -- M). - Two trees. Sources live in
$MANPATH, default/usr/share/man(/usr/manis a symlink to it). Formatted pages live in$CATPATH, default/usr/catman. The SVR4 base pages ship formatted only, as compressed cat pages in/usr/catman/<section>/<name>.Z(sections1,1b,1c,1f,1m,2,2z,3,3b–3x,4,4b,4z,5,7,7b,8, beside formatted copies of the Amiga sections). The Amiga-specific sections (1A,1X,1l,3A,3X,5A,5l,6,7A,8l) ship as compressednroffsource in/usr/share/man/<section>/<name>.Z. Directories are named by section alone, with nomanprefix. - Formatting happens on first view:
zcat | tbl | eqn | /usr/ucb/nroff -man -T37 | colinto the cat tree (Reformatting page 1A/a2024...).nroff,tbl,eqnandneqnare in/usr/ucb(no/usr/bin/eqn);compress,uncompressandzcatare one binary in/usr/bin.catmanwith no arguments reformats every source page into/usr/catman.PAGERdefaults to/usr/bin/more. MANPATHis one directory, not a colon list:MANPATH=/a:/usr/manmakesmanopen/a:/usr/man/whatis(egrep: can't open).- Lookup goes through
<MANPATH>/whatis, withegrep -i "(^name[^a-zA-Z0-9]| name[^a-zA-Z0-9]).*-". A page on disk with nowhatisline isNo manual entry. Awhatisline readsname(sect)<spaces>names - description, e.g.grep(1) grep - search a file for a pattern. The stock index is/usr/share/man/whatis(136040 bytes), withbase_whatisbeside it. - Page files: under
<tree>/<section>/, a page can be<name>.Z, a plain<name>or<name>.1, and a.so /absolute/pathalias works. A BSD-styleman1/<name>.1tree is not found. - Packaging hazard: with
MANPATHset andCATPATHnot,manwrites the formatted page into the stock/usr/catman/<section>/<name>. A page that shares a stock page's name (say, a GNUgrep(1)) then shadows the stock page for every later plainman grep. SettingCATPATHto a private tree avoids that, but then the stock pages are unreachable (No manual entry for ls) until both variables are unset. A package that ships man pages should therefore add its ownwhatislines and keep its pages out of the stock names, or accept the shadowing.
See also¶
- Device list — every
/devnode with its major/minor number. - Versions — which release supports what; the
2.1c/ "2.2" caveats. - How Amix boots — Superkickstart → bootstrap → kernel.
- Kernel build and the driver model.
- Install walkthrough and first login and tour.
- amigaunix.com — end-user, install-media, and historical material (we cross-link rather than duplicate it).
Sources¶
- The stock
man(1)mechanics (first-party record, 2026-10-30) ✅ — the amix-packages project's four probe runs on the emulated stock 2.1c 68030:ls -lof the binaries and trees,stringsof/usr/bin/man(the default paths, theegreplookup, the format pipeline),whatisexcerpts, planted pages in each layout, theMANPATHcolon test,-M, and theCATPATHshadowing run. - The 2026-09-29 Y2K correction ✅ —
date 092912002026accepted on a stock 2.1c box; the stocksetclkboot run ending indate: bad conversion; the patch disk's 103-member cpio carrying nosetclk(quirks §7). - The stock-
initshutdown stall over telnet — first-party, eight discriminating runs, 2026-09-29 (amix-gayle-ide/README.md) ✅. sources/research-brief.md§3 (boot/kernel build,make bootpart KERNEL=relocunix), §4 (run levels, virtual consoles,pkg*/amixpkg, monolithic kernel), §5 (device-driver model,mknod, major/minor,/usr/sys,kernel.c), §7 (toolchain & packaging,pkgprotosymlink gotcha, AmixBP), §9 (install flow, tapedd … | cpiopipeline,amixadmfinish,viper_kludge), §11 (networking:aen0,route add default … 1, DNS-enable steps, NFS/SLIP/PPP; userland shells and pre-POSIX/bin/sh), §12 (quirks: SCSI IDs, Y2K/setclk, DNS off by default), §13 (rdbunix/relocunixrename caveat), §20 (stock pkg-system internals — the installed toolset and its three absencespkgask/removef/amixpkg, and thecontents-DB space-in-pathname defect).amix_21_root.adfanalysis viatools/inspect-adf.sh—/dev/rmt/4hn,amixpkg -i -m -d -r /mnt -y standard,viper.README,BPART=/dev/dsk/c${SCSI}d0s${BOOTPART}(SCSI ID hard-coding).amix_21_patch.adfanalysis viatools/inspect-adf.sh—uname -vmatch^2\.1.* 08004..$, patch-apply mechanism (nosetclkamong its 103 cpio members, checked 2026-09-29).- Ditto, Writing Amix Device Drivers, 1990 European Amiga Developer's Conference — driver install
procedure (
/usr/sys→make→mknod→ reboot),cdevsw/bdevsw,rdbunix. asokero/va2000-amixrepo —rm -f amiga/config/unix.o master.d/exp unix,cp relocunix /stand,make bootpart KERNEL=relocunix,mknod /dev/va2000 c 68 0, pre-POSIX/bin/shnote.isoriano1968/hydra-amixrepo —slink addaen /dev/hya0 hya0, nativemake/make force,mknod /dev/hya0 c 47 0, STREAMScdevswslot 47.- SVR4
grephas no\|alternation and nogrep -w(a multi-pattern grep silently matches nothing and exits 1), root-caused on a real A4000 + Z3660 (first-party record, 2026-07-12) ✅. grep -v 'a\|b'passing every line (first-party record, 2026-10-31) ✅ — the amixuserland/baseDHCP-client soak on the emulated 2.1c bench image (stock userland):grep -vwith a three-way\|pattern over a 239-line log printed all 239 lines, the lines it was meant to drop among them.- The amix-cdfs project @
31e8c3b(6f727b1+d3beca7,platform/amix/mount.c) — the/usr/lib/fs/<fstype>/mounthelper requirement,/etc/mnttabbeing userland-maintained (O_APPEND), andumount(1M)matching by the special field (so a device-less fs records its mount point there), measured on a real A4000 + Z3660 + stock-kernel precedent (/proc,/dev/fd), 2026-07-13 ✅. See the driver model. - amigaunix.com — networking, patch-disk, y2k-dst, tape-creation, downloads pages (community-reported items above).
- The amix-packagemanager repo tooling (
tools/repo/publish.sh,gen-catalog.py) — the HTTP package-repopkgs/-segment URL layout, verified live 2026-07-22 ✅. - The diff/patch rows: measured on an emulated stock 2.1c 68030 during the amix-packages diffutils 2.8.1 port, 2026-10-29 (first-party record) ✅.