Linux Changing Run Levels

A question from my email bag:

How do changing run levels affect us or our users?

If you are moving to higher run levels, you may make additional services available to users, while moving to a lower run level will causes to services (daemons) to become unavailable. On the production server run level 3 is the normally used and rarely changed. However, some administrative tasks require the administrator to move system to run level 1 i.e single user mode.

Linux Find Out Current Run Level Command

Type the following command:
$ who -r
Sample outputs:

         run-level 2  2011-10-12 05:38   

Linux Change Run Level Command

Use the init command to change rune levels:
# init 1

Runlevel And Its Usage

The Init is the parent of all processes with PID # 1. Its primary purpose is to create processes from a script stored in the file /etc/inittab file. This file usually has entries which cause init to spawn gettys on each line that users can log in. A runlevel is nothing but a software configuration of the Linux system which allows only a selected group of processes to exist. The processes spawned by init for each of these runlevels are defined in the /etc/inittab file. Init can be in one of eight runlevels as follows:

  • Runlevel 0 is halt
  • Runlevel 1 is single-user
  • Runlevels 2-5 are multi-user (some distro uses RUN level 5 to start X [KDE/Gnome])
  • Runlevel 6 is for rebooting system

For example, typing the init 3 command will move system to run level 3:

# init 3

On most Linux server system default run level is 3 and on most Linux Desktop system default run level is 5. The default run level is defined by the initdefault line at the top of /etc/inittab file under CentOS / Fedora / Redhat / RHEL / Debian Linux. To change the default run level, edit /etc/inittab file, and edit entry initdefault:

# vi /etc/inittab

Set initdefault to 5, so that you can boot to X next time when Linux comes up:


Save and close the file. Reboot the system to see changes:
# reboot

More About getty

getty is the program which opens a tty port, prompts for a login name and password (via /bin/login command). Your console displays a login/password prompt at run levels 1 through 6. You can use ALT+F1…ALT+F6 keys to switch console (use CTRL+ALT+F1..F6 under X windows).

SSH logins are handled by OenSSH (sshd) server which starts at run level 2/3. KDE/Genome Desktop login are handled by GDM/XDM/KDM display manager which starts at run level 5 (however Debian Linux and some other distro can start them from run level 2 via special rc.d script located in /etc/init.d/gdm)

Related articles:

Updated for accuracy!

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 19 comments so far... add one
CategoryList of Unix and Linux commands
Disk space analyzersdf ncdu pydf
File Managementcat tree
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
19 comments… add one
  • matt Oct 17, 2005 @ 14:38

    you have some good content! i’m reading this blog since last 4+ months; althoug it is not updated daily like other blog/sites still it makes a good read as it is based upon Linux/UNIX sys admins hard core experince
    considering only 1 or 2 perople contributes to this blog it is a good read and you have Good number of hits as well. Just wanna say good job man & keep it up

  • Anonymous Oct 17, 2005 @ 14:44

    my questions is very simple how do i find out current runlevel as well as last runlevel? since you take linux sys admin class you must have some info 😀


    • Namdev Oct 27, 2012 @ 12:02

      0 – halt (shutdown pc)
      1 – Single user mode
      2 – Multiuser
      3 – Full multiuser mode
      4 – unused
      5 – X11 (Graphical)
      6 – reboot


      # cat /etc/inittab

      # vi /etc/inittab

      To check Current Run Level
      # who -r or
      # runlevel

      To change Run Level
      # init 1

      On most Linux server system default run level is 3 and on most Linux Desktop system default run level is 5.

      • narendra Apr 30, 2013 @ 5:57

        if it is set as 0, then how to change as system get reboot again and again
        kindly advice

        • vivek Nov 4, 2015 @ 16:58

          I guess you can use any live distro to boot into your system and then access the drive and then change the default runlevel from the file it is contained.

  • cyberciti Oct 17, 2005 @ 18:31

    > how do i find out current runlevel as well as last runlevel?
    Use who -r command
    $ who -r
    run-level 2 Oct 17 18:21 last=S

    • Ronald Kaiser Apr 9, 2012 @ 14:24

      In order to get the last runlevel as well as the current, you can use /sbin/runlevel too.
      $ /sbin/runlevel
      S 2

  • cyberciti Oct 17, 2005 @ 18:34

    Thanks matt 🙂 We don’t update our blog everyday, as and when event occurs in our life it is get documented here.

    I appreciate your post.

  • srikar Mar 5, 2013 @ 9:55

     How to Change the run levels of the linux at run time with out restarting the system

  • Tony S. May 20, 2013 @ 11:52

    Thanks, this really helped me out. It turns out Ubuntu does have both commands, albeit a bit useless due to it lacking a proper single-user bootmode that’s accessible, this still helped. Thanks very much.

  • Rajesh May 20, 2013 @ 14:04

    I went and changed the default run level as 6 in the config files. now system starts with default mode as 6 and then restarts again.

  • Guignol Jun 13, 2013 @ 18:21

    For the folks fool enough to edit their /etc/inittab config file to 0 or 6, your only way to break the loop is to boot the system from a livecd, then navigate to the config file through the live filesystem (probably /mnt/sd*/etc/inittab or /media/*) and edit it. But seriously, what were you expecting to happen?

  • air805ronin Jan 8, 2014 @ 23:01

    Guignol is actually kind of wrong there. A better option, to me, would to use Grub to boot into a specific runlevel, and then edit the inittab file to fix your mistake.

    Just google “grub change runlevel” and you should get some useful results.

  • ashwin Sep 15, 2015 @ 6:08

    i have set default as 6, then how to change as system get reboot again and again
    kindly advice

    • Addams Scrub Oct 20, 2016 @ 11:29

      Try to avoid 0 and 6 .. Put 5 for example.

      As someone said before in the documentation:
      0 – halt (shutdown pc)
      1 – Single user mode
      2 – Multiuser
      3 – Full multiuser mode
      4 – unused
      5 – X11 (Graphical)
      6 – reboot

      If you are on 6, the system will reboot on and on.
      If you want to use Linux desktop and graphics try setting runlevel to 5
      If you have a Linux server, try 3
      You can change your runlevel by typing ‘init 5’ from bash cli.
      init 5
      init 3

  • ashwin Sep 15, 2015 @ 6:09

    i have set default as 6,
    system stops and says noting to do
    pls help hoe to over come this issue

  • satish Feb 16, 2016 @ 9:59

    Under Red Hat Enterprise Linux, it is possible to change the default runlevel at boot time.

    To change the runlevel of a single boot session, use the following instructions:

    When the GRUB menu bypass screen appears at boot time, press any key to enter the GRUB menu (within the first three seconds).

    Press the a key to append to the kernel command.

    Add at the end of the boot options line to boot to the desired runlevel. For example, the following entry would initiate a boot process into runlevel 3:

  • sruthi Mar 13, 2017 @ 5:29

    Why do we need to reboot to change the run level ?

    • Robin Apr 3, 2017 @ 2:00

      I guess it’s for when you configured the wrong target (runlevel) as default.

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum