zoukankan      html  css  js  c++  java
  • Linux运行级别研究(转)

    Linux系统中的运行级别

    7种运行级别

    运行级别(Runlevel)指的是Unix或者Linux等类Unix操作系统的运行模式,不同的运行模式下系统的功能也有所有不同。Linux 系统下通常分为7种运行级别,分别是从06。各级别介绍如下:

    • 0 - 停机模式。在这种模式下,系统处于停机状态,系统默认运行级别不能设为0,否则将不能正常启动,这个运行级别主要用于关闭任务,在/etc/rc0.d目录下的各个连接命令都是此级别的命令,在关闭系统时,这些命令将被逐个执行。它们会杀掉所有进程、关闭虚拟内存和交换文件、卸载文件系统和交换分区。
    • 1 - 单用户模式。在这种运行模下,系统处于单用户工作状态,登录用户具有root权限,文件系统被加载但是网络却没有被加载,因此也无法远程登陆。这个运行级别,只允一个用户从本地计算机上登录,/etc/rc1.d目录下的所有文件与此运行级别相关连,这个运行级别一般用于系统管理与维护。
    • 2 - 多用户模式。用户可以通过网络进行登录,但没有NFS(Network File System),即网络文件系统。/etc/rc2.d目录下所有文件与此级别相连。
    • 3 - 完全多用户模式。用户可以通过网络进行登录,且有NFS,用户登陆后会进入控制台命令行模式。这也是缺省的运行模式,在这种运行级别下所有网络服务程序会一起运行。/etc/rc2.d录下的文件与此级别相连
    • 4 - 自定义模式。这是一种系统未使用的保留模式,/etc/rc4.d目录与此级别相连。这一级别是用户自定义的运行级别,用户可以根自己的需要进行一些自定义设置。如果想要运行这一级别的话,必须在rc3.d目录下放入连接文件,就像其他rc*.d目录下的文件,并指明是启动还是终止进程。
    • 5 - 图形化模式。在 Linux 下运行X Window就是使用这一运行级别,用户登录后将进入图形化的GUI界面。在这一级别下除了DNS的named与级别3不同,其余的都相同。
    • 6 - 重启模式。系统正常关闭并重启,默认运行级别不能设为5,否则系统将不能正常启动。/etc/rc6.d目录与此级别相连。在这一运行级别下,不会关闭电源,/etc/rc6.d目录下的连接与rc0.d目录下的连接基本相同;不同之处在于,虽然它们都执行halt(关闭)命令,但是给halt传递的参数不同,所级别6会重新启动系统而0会关闭系统。

    注意:以上适用于CentOS等发行版,而对于Ubuntudebian系的Linux来说,2~5都是多用户图形模式,几个运行模式没有区别。 

    不同运行级别的实现原理

    如上所述,Linux系统的每一个运行级别,都对应一个目录。

    /etc/init.d目录下有许多脚本程序,我们将这些程序称之为服务(Service)。

    /etc目录下,还有rc0.d~rc6.d共7个目录。在这些目录下都是一些软链接文件,这些链接文件都指向了init.d目录下的service脚本文件。而这些软连接的命名规则为:K+nn+服务名S+nn+服务名,其中nn为两位数字。

    系统启动时,会根据当前运行级别进入对应的rc*.d目录,然后按照文件名顺序检索目录下的链接文件,并会做以下处理:

    • 对于以K开头的文件,系统将终止对应的服务
    • 对于以S开头的文件,系统将启动对应的服务

    注意:/etc/init.d存在于Ubuntu等发行版中,而CentOS等发行版中位于/etc/rc.d/init.d目录下,但通过/etc/init.d软连接进行关联。同样的,rc*.d等目录,在Ubuntu等系统中位于/etc/目录下,而在CentOS等系统中位于/etc/rc.d目录下,但在/etc下都有对应的软连接。

    Linux运行级别的修改

    运行级别相关命令

    查看系统当前运行级别:runlevel

    runlevel
    N 3

    切换系统运行级别:init N。如,切换到3多用户命令模式:

    init 3 

    常用的init命令还有:init 0结束所有进程后关闭计算机、init 6重启系统

    修改系统默认运行级别(以下实例没测试过)

    Linux会根据运行级别的不同执行不同程序,虽然UbuntuCenosOS等不同发行版中都有运行级别的概念,但运行机不同,因此修改默认启动级别的方式也有所有不同。

    CentOS默认运行级别的修改(没测试)

    CentOS等Linux系统中使用一种叫System V的机制来启动运行级别,在该机制下,通过/etc/inittab配置系统启动进程。因此,也可以通过该文件来配置默认的启动级别:

    sudo vi /etc/inittab

    找到如下行:

    id:5:initdefault:

    并修改为:

    id:3:initdefault:

    注意:以上方法适用于CentOS 7之前的系统,在CentOS 7/etc/inittab文件已不再使用:

    cat /etc/inittab 
    # inittab is no longer used when using systemd.
    #
    # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
    #
    # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
    #
    # systemd uses 'targets' instead of runlevels. By default, there are two main targets:
    #
    # multi-user.target: analogous to runlevel 3
    # graphical.target: analogous to runlevel 5
    #
    # To view current default target, run:
    # systemctl get-default
    #
    # To set a default target, run:
    # systemctl set-default TARGET.target
    #

    根据该文件提示,查看当前启动模式:

    systemctl get-default
    graphical.target

    修改默认启动级别:

    systemctl set-default multi-user.target

    输入密码完成修改。重启后,系统默认将以级别3启动。

    Ubuntu默认运行级别的修改

    笔者使用的Ubuntu系统版本为16.04Ubuntu系统同样可以识别/etc/inittab文件,但由于系统的2~5运行级别没有任何变化,所以修改/etc/inittab文件不能生效。Ubuntu默认运行级别可以通过以下方式修改:

    编辑/etc/default/grub文件:

    sudo vi /etc/default/grub

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"的一行注释掉:

    # GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

    GRUB_CMDLINE_LINUX=""的一行修改为:

    GRUB_CMDLINE_LINUX="text"

    去掉#GRUB_TERMINAL=console一行的注释,即修改为:

    GRUB_TERMINAL=console

    终端运行

    sudo update-grub

    重启系统:

    sudo reboot

    如果修改没有问题,系统默认会以命令行模式启动。

    在命令行模式下,可以通过如下命令切换回桌面模式:

    sudo systemctl start lightdm  
    上面的意思其实就是修改开机进入命令行界面,但是在最新版本的Ubuntu中已经将runlevel改成了target去执行,可以尝试以下方法,同样能满足开机进去到命令行界面,详细的说明参考:https://askubuntu.com/questions/788323/change-runlevel-on-16-04
    sudo systemctl enable multi-user.target
    sudo systemctl set-default multi-user.target

    runlevel与target的对照表:

    0,runlevel0,target,poweroff.target关闭系统。
    1,runlevel1,target,rescue.target进入救援模式。
    2,runlevel2,target,multi-user.target进入非图形界面的多用户方式。
    3,runlevel3,target,multi-user.target进入非图形界面的多用户方式。
    4,runlevel4,target,multi-user.target进入非图形界面的多用户方式。
    5,runlevel5,target,graphical.target进入图形界面的多用户方式。
    6,runlevel6,target,reboot.target重启系统。
    关于Ubuntu系统级别的变更:

    1、Ubuntu 6.10及以前版本使用Sysvinit。

    2、Ubuntu 14.10及以前版本使用Upstart但是还留着Sysvinit并存。

    https://wiki.ubuntu.com/Upstart

    https://help.ubuntu.com/community/UpstartHowto

    3、Ubuntu 15.04开始预设使用Systemd,但是可以在开机选项选择使用Systemd或Upstart,但是不可同時使用Sysvinit或Upstart并存。

    https://wiki.ubuntu.com/SystemdForUpstartUsers

     

    参考:

    https://itbilu.com/linux/management/4JEzjDV8G.html(以上内容转自此篇博客)

    http://www.dbaxiaoyu.com/archives/1747

    http://blog.csdn.net/soonfly/article/details/72876001

    http://bxuan.blog.51cto.com/blog/376592/704946

    https://www.ibm.com/developerworks/cn/linux/l-lpic1-101-3/index.html

    https://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-101-3/index.html

    https://zh.wikipedia.org/wiki/%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB

    http://forum.ubuntu.org.cn/viewtopic.php?p=1833476(运行级别理解)

    http://www.jb51.net/LINUXjishu/350268.html(runlevel与target区别)

    http://blog.csdn.net/guanggegg/article/details/50389358(各系统运行级别的修改)

    http://blog.csdn.net/notsaltedfish/article/details/52234718(Ubuntu 16.04修改默认启动级别)

    http://forum.ubuntu.org.cn/viewtopic.php?t=474412

    https://askubuntu.com/questions/788323/change-runlevel-on-16-04

  • 相关阅读:
    vue token使用 参考
    token 的作用与使用
    jq 绑定实时监听 input输入框
    认识java
    java基础语法
    java虚拟机笔记 运行时内存区域划分
    spring全家桶
    利用python脚本统计和删除redis key
    MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别
    编写shell脚本的一些规范
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7163069.html
Copyright © 2011-2022 走看看