• ARTICLES
SEARCH

How-To Geek

HTG Explains: What Runlevels Are on Linux and How to Use Them

image

When a Linux system boots, it enters its default runlevel and runs the startup scripts associated with that runlevel. You can also switch between runlevels – for example, there’s a runlevel designed for recovery and maintenance operations.

Traditionally, Linux used System V-style init scripts – while new init systems will eventually obsolete traditional runlevels, they haven’t yet. For example, Ubuntu’s Upstart system still uses traditional System V-style scripts.

What’s a Runlevel?

When a Linux system boots, it launches the init processes. init is responsible for launching the other processes on the system. For example, when you start your Linux computer, the kernel starts init, and init executes the startup scripts to initialize your hardware, bring up networking, start your graphical desktop.

However, there isn’t just one single set of startup scripts init executes. There are multiple run levels with their own startup scripts – for example, one runlevel may bring up networking and launch the graphical desktop, while another runlevel may leave networking disabled and skip the graphical desktop. This means you can drop from “graphical desktop mode” to “text console mode without networking” with a single command, without manually starting and stopping different services.

More specifically, init runs the scripts located in a specific directory that corresponds to the runlevel. For example, when you enter runlevel 3 on Ubuntu, init runs the scripts located in the /etc/rc3.d directory.

image

At least, this is how it works with a traditional System V init system – Linux distributions are beginning to replace the old System V init system. While Ubuntu’s Upstart currently maintains compatibility with SysV init scripts, this is likely to change in the future.

The Runlevels

Some runlevels are standard between Linux distributions, while some runlevels vary from distribution to distribution.

The following runlevels are standard:

  • 0 – Halt (Shuts down the system.)
  • 1 – Single User Mode (The system boots into superuser mode without starting daemons or networking. Ideal for booting into a recovery or diagnostics environment.)
  • 6 – Reboot

Runlevels 2-5 vary depending on distribution. For example, on Ubuntu and Debian, runlevels 2-5 are the same and provide a full multi-user mode with networking and graphical login. On Fedora and Red Hat, runlevel 2 provides multi-user mode without networking (console login only), runlevel 3 provides multi-user mode with networking (console login only), runlevel 4 is unused, and runlevel 5 provides multi-user mode with networking and graphical login.

Switching to a Different Runlevel

To switch to a different runlevel while the system is already running, use the following command:

sudo telinit #

Replace # with the number of the runlevel you want to switch to. Omit sudo and run the command as root if you’re running a distribution that doesn’t use sudo.

image

Booting Directly to a Specific Runlevel

You can select a runlevel to boot into from the boot loader – Grub, for example. At the start of the boot process, press a key to access Grub, select your boot entry, and press e to edit it.

sshot-1

You can add single to the end of the linux line to enter the single-user runlevel (runlevel 1). (Press Ctrl+x to boot after.) This is the same as the recovery mode option in Grub.

image

Traditionally, you could specify a number as a kernel parameter and you’d boot to that runlevel – for example, using 3 instead of single to boot to runlevel 3. However, this doesn’t appear to work on the latest versions of Ubuntu – Upstart doesn’t seem to allow it. Similarly, how you change the default runlevel will depend on your distribution.


While Ubuntu’s Upstart daemon still emulates the SystemV init system, much of this information will change in the future. For example, Upstart is event-based – it can stop and start services when events occur (for example, a service could start when a hardware device is connected to the system and stop when the device is removed.) Fedora also has its own successor to init, systemd.

Chris Hoffman is a technology writer and all-around computer geek. He's as at home using the Linux terminal as he is digging into the Windows registry. Connect with him on Google+.

  • Published 07/19/12

Comments (8)

  1. Peter

    Only just getting into Linux (mint) and finding the articles immensely useful. Excellent!

  2. TheFu

    Great job showing the reasons why things are different on Linux and its flexibility.

  3. Craig S

    A number of months ago, after the humorous posts were increasing in frequency and silliness until they drowned out how-to content, I complained here in the comments (and got a negative response, of course)

    I just want to say that useful and pointed tutorial content seems to be coming really consistently nowadays, making the RSS feed look like a very educational place. I don’t see a ton of cliche humor anymore (IE sux, har har). So good job, the site seems to be operating in the spirit of its promise

  4. MJ

    @Craig S: I remember your complains because they came shortly after mines, and I’m again 100% agree with you. I really appreciate all the how-to-s and the HTG Explains articles, and I’m thankful that the number of articles about Linux has increased a lot, I find all of them really interesting. Keep up the good work!

  5. M Henri Day

    This type of material is highly appreciated, Chris – keep up the good work !…

    Henri

  6. trigger

    I’ve been using Linux for a while and find your articles are helping me understand Linux better. Keep up the good work!

  7. Alex

    I am not a Linux expert but I really think that Linux should detect and initiate proper video and keyboard settings automatically, or at least minimum, compatible configurations. In most Linux I have used you have to input these settings yourself. Just a thought.

  8. kura

    wow very nice post – easy to undestand

Enter Your Email Here to Get Access for Free:

Go check your email!