How to Change Runlevels (targets) in SystemD

Systemd is a modern init system for Linux: a system and service manager which is compatible with the popular SysV init system and LSB init scripts. It was intended to overcome the shortcomings of SysV init as explained in the following article.

  1. The Story Behind ‘init’ and ‘systemd’: Why ‘init’ Needed to be Replaced with ‘systemd’ in Linux

On Unix-like systems such as Linux, the current operating state of the operating system is known as a runlevel; it defines what system services are running. Under popular init systems like SysV init, runlevels are identified by numbers. However, in systemd runlevels are referred to as targets.

Suggested Read: Managing System Startup Process and Services (SysVinit, Systemd and Upstart)

In this article, we will explain how to change runlevels (targets) with systemd. Before we move any further, let’s briefly under the relationship between runlevels numbers and targets.

  • Run level 0 is matched by (and is a symbolic link to
  • Run level 1 is matched by (and is a symbolic link to
  • Run level 3 is emulated by (and is a symbolic link to
  • Run level 5 is emulated by (and is a symbolic link to
  • Run level 6 is emulated by (and is a symbolic link to
  • Emergency is matched by

How to View Current target (run level) in Systemd

When the system boots, by default systemd activates the unit. It’s main work is to activate services and other units by pulling them in via dependencies.

To view the default target, type the command below.

#systemctl get-default

To set the default target, run the command below.

# systemctl set-default  

How to Change the target (runlevel) in Systemd

While the system is running, you can switch the target (run level), meaning only services as well as units defined under that target will now run on the system.

To switch to runlevel 3, run the following command.

# systemctl isolate 

To change the system to runlevel 5, type the command below.

# systemctl isolate

For more information about systemd, read through these useful articles:

  1. How to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux
  2. How to Create and Run New Service Units in Systemd Using Shell Script
  3. Managing System Startup Process and Services (SysVinit, Systemd and Upstart)
  4. Manage Log Messages Under Systemd Using Journalctl [Comprehensive Guide]

In this guide, we showed how to change runlevels (targets) with systemd. Use the comment form below to send us any questions or thoughts concerning this article.

Best Affordable Linux and WordPress Services For Your Business
Outsource Your Linux and WordPress Project and Get it Promptly Completed Remotely and Delivered Online.

If You Appreciate What We Do Here On TecMint, You Should Consider:

  1. Stay Connected to: Twitter | Facebook | Google Plus
  2. Subscribe to our email updates: Sign Up Now
  3. Get your own self-hosted blog with a Free Domain at ($3.45/month).
  4. Become a Supporter - Make a contribution via PayPal
  5. Support us by purchasing our premium books in PDF format.
  6. Support us by taking our online Linux courses

We are thankful for your never ending support.

Aaron Kili

Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

10 Responses

  1. Tim Kissane says:

    Thanks for the clear, concise explanation. It is needed and appreciated. However, I’m looking for a way to find the current target, not necessarily the same thing as the default target.

    I’m writing a script using the runlevel man page as a guide. Some bright soul pointed out `who -r` gives the current run level (but not target). There should be an easier way (like or similar).

    Have I missed something? TIA.

  2. Sam MM says:

    Thanks for the great details. It is really helpful.

  3. Pedro Bezunartea López says:

    Just what I needed: changing the runlevel using SystemD without rebooting, thank you!

  4. linuxdood says:

    Nice article and helpful info since I did need to know this.

    Unfortunately I needed to look up something this simple as systemd is change for change sake and is unnecessarily over complicated.

    There was nothing wrong with # init 3

  5. Eric says:

    Thanks. This is well written. I had read another source that did not mention the graphical target so I ended up without a GUI for a while :)

  6. fred smith says:

    probably a typo: cannot be a link to both and

    • Aaron Kili says:


      Ooops, that’s correct. We will update the article soon; it is supposed to read:
      “Run level 0 is matched by (and is a symbolic link to”

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.