Forget about runlevels.
When run levels were introduced in AT&T Unix System 3 (Yes,
/etc/inittab arrived in System 3 not System 5.) there were mutterings in the BSD world, and the BSDs never adopted this system. All of these years later, most parts of the System 5 world have now done away with run levels.
In IBM AIX, the number of run levels used in practice shrunk to 1 back in version 3.1, with the advent of the System Resource Controller. IBM thought that people could forget about runlevels in 1990. Run levels
9 were "reserved" from that point onwards.
The systemd people declared runlevels to be "obsolete" in their doco, some two decades later. Like the SRC before it, and like other systems such as Solaris' SMF or Laurent Bercot's
s6-rc or Gerrit Pape's
runit-init or my nosh system management toolset; systemd does not require them, or the concept that they embody. There are instead better mechanisms, of various kinds, in these systems.
runit has the concept of switching amongst several scan directories.
s6-rc has the concept of switching the "live state". The nosh
system-control has the concept of target service bundles that
conflict/ with other service bundles. The Solaris SMF has "milestones" such as
milestone/name-services. And so on.)
init has an
inittab configuration file, but that is different to the more common one, and contains no notion of run levels.
init does not look for things in those directories and scripts based upon run-level numbers. Only two init systems ever did, and even in one of them there was the option of an
rc that used a data file instead of symbolic links under
- No, even on the AT&T Unix System 3 system (and its successor and clones) it was not
init that looked at those scripts. It was
- On systemd operating systems, the
/etc/init.d/ scripts are processed by a backwards compatibility mechanism that turns them into native service units. This largely ignores the provided run-level information, in both the scripts themselves and in the
/etc/rc.d/ subdirectories, and just hardwires some targets in its code.
- No, run levels were not digits.
S is a run level and not a digit, as are
h, and AIX's
c. (I am not going to go into details here of what these were, because this is stuff that you can forget about.)
The one system bucking the trend is TrueOS. Based upon FreeBSD, which still itself uses Mewburn
rc and FreeBSD
init, neither of which have a run level mechanism, it adopted OpenRC to replace Mewburn
rc. Ironically, it is thereby adding System 5 run levels to a BSD at the time when the System 5 side of the universe has finally consigned run levels to the dustbin of history. ☺