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

  • 相关阅读:
    net core 使用 rabbitmq
    asp.net core WebApi 返回 HttpResponseMessage
    asp.net core 2.1 WebApi 快速入门
    JQuery EasyUI combobox动态添加option
    php截取字符去掉最后一个字符
    JQuery EasyUI Combobox的onChange事件
    对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
    Access2007 操作或事件已被禁用模式阻止解决办法
    Easyui 中 Tabsr的常用方法
    Win 7 IE11不能下载文件,右键另存为也不行
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7163069.html
Copyright © 2011-2022 走看看