• Linux--CentOS6和CentOS7的区别


    系统启动流程和服务管理

    centos6
        bios加电自检--mbr引导系统--grub菜单--加载内核--init进程初始化
        
    centos7
        bios加电自检--mbr引导系统--grub2菜单--加载内核--systemd进程初始化

    一、系统启动 

    1、BIOS(Basic Input Output System 基本输入输出系统 )加电自检、硬件初始化、引导操作系统

    2、读取并且执行第一个开机设备中的MBR(Master Boot Record 主引导记录 )的
    bootloader(grub程序:Grand unified bootloader 大统一启动加载器 ) 

    3、依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序

    boot loader主要功能如下:
        提供选单:用户可以选择不同的开机项目
        载入核心文件:直接指向可开机的程序区域来开始操作系统
        转交其他loader:将开机管理功能转交给其他Loader负责

    内核在Linux中的存放位置为/boot分区下,主要有2个文件要被加载:
        vmlinuz-3.10.0-514.el7.x86_64 内核文件
        initramfs-3.10.0-514.el7.x86_64.img 虚拟文件系统

    可以使用:lsinitrd 命令查看虚拟文件系统。
    [root@localhost boot]# lsinitrd initramfs-3.10.0-957.el7.x86_64.img

    如果是sysvinit启动程序(linux6版本)
    4、内核启动init进程
    5、系统初始化
    6、init找到/etc/inittab文件,决定系统的运行级别(X)
    7、触发相应的运行级别的事件,运行/etc/rcX.d下的脚本
    8、执行/etc/rc.local文件,来到登录界面
    9、输入用户名密码,进入到系统中    

    如果是systemd启动程序(Linux7版本)
    GRUB2相较于GRUB一代的提升:更健壮、可移植、更强大。支持
    BIOS、uEFI和OpenFirmware,支持GPT和MBR分区表。支持非Linux
    系统,如苹果HFS文件系统和Windows的NTFS文件系统
    systemd 是 linux 系统中最新的初始化系统(init),它主要的设计目标
    是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和
    ubuntu 的 upstart 是竞争对手,但是时至今日 ubuntu 也采用了

    4、在硬件驱动加载成功后,内核会主动呼叫systemd程序,并以
    default.target流程开机  
    5、systemd执行sysinit.target初始化系统及basic.target准备操作系统
    6、systemd启动multi-user.target下的本机与服务器服务
    7、systemd执行multi-user.target下的/etc/rc.d/rc.local文件
    8、systemd执行multi-user.target下的getty.target及登录服务
    9、systemd执行graphical需要的服务

    二,Init和Systemd的区别

    init

    1、启动时间长,init是串行启动,只有前一个进程启动完,才会启动下一个进程

    2、启动脚本复杂,Init进程只是执行启动脚本,不管其他事情,脚本需要自己处
    理各种情况,这往往使得脚本变得很长

    3、由Linux内核加载运行,位于 /sbin/init ,是系统中第一个进程,PID永远为1

    对于支持 service 的程序,安装的时候,会自动的在 /etc/init.d 目录添加一
    个配置文件。当我们使用 service 控制程序时,比如执行开启httpd的服
    务:service httpd start 。那么我们的 service 就会开启 /etc/init.d/httpd
    配置文件里面指向的 /usr/sbin/httpd 可执行文件


    systemd

    1、按需启动服务,减少系统资源消耗。

    2、尽可能并行启动进程,减少系统启动等待时间

    3、由Linx内核加载运行,位于 /usr/lib/systemd/system,是系统中第一个进程,
    PID永远为1

    对于支持 systemd 的程序,安装的时候,会自动的在
    /usr/lib/systemd/system 目录添加一个配置文件。当我们使用 systemctl
    控制该程序时,比如执行开启httpd服务:systemctl start httpd.service 。
    那么我们的 systemctl 就会开启 httpd.service 配置里面指向的
    /usr/sbin/httpd 可执行文件

    如果我们想让该程序开机启动,我们可以执行命令 systemctl enable
    httpd,这个命令相当于在 /etc/systemd/system 目录添加一个软链接,指
    向 /usr/lib/systemd/system 目录下的 httpd.service 文件。这是因为开机
    时,Systemd只执行 /etc/systemd/system 目录里面的配置文件

    三,init配置文件和systemd文件的区别 

    Init 进程的配置文件
    /etc/init.d/     服务启动脚本配置文件存放目录
    /etc/inittab     默认运行级别配置文件
    /etc/init/rcS.conf     系统初始化配置文件
    /etc/init/rc.conf     各运行级别初始化的配置文件-
    /etc/init/rcS-sulogin.conf    单用户模式启动 /sbin/sushell 环境的配置文件
    /etc/init/control-alt-delete.conf        终端下的 ctrl+alt+del 热键操作的配置文件
    /etc/sysconfig/init     tty终端的配置文件
    /etc/init/start-ttys.conf     配置tty终端的开启数量、设备文件
    /etc/init/tty.conf 或 etc/init/serial.conf        控制tty终端的开启

    Systemd进程的配置文件

    /etc/systemd/system/default.target 取代/etc/inittab文件配置,通常符号链接到 /lib/systemd/system/graphical.target
    /run/systemd/system/ 系统执行过程中所产生的服务脚本所在目录
    /etc/systemd/system/ 里面存放着不同级别的开启自启服务 
    /usr/lib/systemd/system/ 和 /lib/systemd/system/ 和,两个文件完全一样,因为lib是/usr/lib的软链接 每个服务最主要的启动脚本设置,类似于之前的 /etc/init.d/

    四,运行级别和说明 

    运行级别  运行级别  Rhel7 命令
    0 关机状态   init  0   poweroff
    1 系统救援模式   init  1  systemctl  isolate  rescue.target
    2 字符界面的多用户模式(不可访问网络)  init  2systemctl  isolate  mutil-user.target
    3 字符界面的完整多用户模式 init  3systemctl  isolate  mutil-user.target
    4 未分配使用 init  4systemctl  isolate  mutil-user.target
    5 图形界面的多用户模式 init  5 (startx) systemctl  isolate  graphical.target
    6 重新启动主机 init  6reboot


    注:图形切字符  ctrl+alt+F2(F2-F6)   字符切回图形 alt + F1

    查看运行级别:
    runlevel : 显示切换前的运行级别 和当前运行级别 
    systemctl get-default : 显示当前运行级别   

    永久设置开机模式:
    vim /etc/inittab    #centos6
    systemctl set-default multi-user.target/runlevel3    开机默认为文本模式
    systemctl set-default graphical.target/runlevel5    开机默认为图形模式

    五,Systemd服务管理

            Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd和ubuntu的upstart是竞争对手,从15.04版本开始,Ubuntu也已经采systemd作为其标准的系统初始化系统.

            系统初始化需要做的事情非常多。需要启动后台服务,比如启动 SSHD 服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被systemd 抽象为一个配置单元,即 unit。可以认为一个服务是一个配置单元;一个挂载点是一个配置单元;一个交换分区的配置是一个配置单元;

    1. Service unit:系统服务,最常见的类型
    2. Target unit:多个 Unit 构成的一个组,执行环境类型
    3. Device Unit:硬件设备
    4. Mount Unit:文件系统的挂载点
    5. Automount Unit:自动挂载点
    6. Path Unit:侦测特定文件或目录类型的
    7. Scope Unit:不是由 Systemd 启动的外部进程
    8. Slice Unit:进程组
    9. Snapshot Unit:Systemd 快照,可以切回某个快照
    10. Socket Unit:进程间通信的 socket服务
    11. Swap Unit:swap 文件
    12. Timer Unit:循环执行的服务

    Rhel6 用 service 和 chkconfig 来管理服务,它是 SystemV 架构下的一个工具。

    Rhel7 是用 systemctl  来管理服务,它融合了之前的 service 和 chkconfig 的功能于一体。
    可以使用它永久性或只在当前会话中启用/禁用服务。systemctl 是 systemd 架构下的一个工具。

    动作   Rhel6 旧指令Rhel7新指令
    启动某服务 service  httpd   start systemctl  start   httpd
    停止某服务 service  httpd   stop systemctl  stop   httpd
    重启某服务service  httpd   restartsystemctl  restart  httpd
    检查服务状态  service  httpd  statussystemctl  status  httpd
    删除某服务chkconfig  --del  httpd
    使服务开机自启动chkconfig  --level   5  httpd   onsystemctl   enable  httpd
    使服务开机不自启动chkconfig  --level   5  httpd   off   systemctl   disable  httpd
    显示所有已启动的服务 chkconfig  --listsystemctl list-unit-files | grep enabled
    加入自定义服务 chkconfig  --add  testsystemctl   load  test
    查询服务是否开机自启 chkconfig --list | grep httpd systemctl  is-enabled   httpd
    查看启动失败的服务  systemctl  --failed

    systemd的一些常用命令:

    列出所有可用单元 :systemctl  list-unit-files
    列出所有运行的单元:systemctl list-unit-files | grep enabled 
    列出所有可用服务: systemctl list-unit-files  --type=service
    列出所有运行的服务:systemctl list-unit-files  --type=service | grep enabled 
    屏蔽httpd服务:systemctl  mask httpd
    取消屏蔽httpd:systemctl unmask httpd

            RHEL7的服务systemctl脚本存放在:/usr/lib/systemd/目录,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下。每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],每个部分内部是一些等号连接的键值对,注意,键值对的等号两侧不能有空格。

    1. vim /usr/lib/systemd/system/sshd.service 
    2. [Unit] 
    3. Description=OpenSSH server daemon 
    4. Documentation=man:sshd(8) man:sshd_config(5) 
    5. After=network.target sshd-keygen.service 
    6. Wants=sshd-keygen.service 
    7. [Service]
    8. Type=notify 
    9. EnvironmentFile=/etc/sysconfig/sshd 
    10. ExecStart=/usr/sbin/sshd -D $OPTIONS 
    11. ExecReload=/bin/kill -HUP $MAINPID 
    12. KillMode=process 
    13. Restart=on-failure 
    14. RestartSec=42s 
    15. [Install] 
    16. WantedBy=multi-user.target
    17. [Unit]
    18. [Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及
    19. 配置与其他 Unit 的关系。它的主要字段如下。
    20. Description:简短描述
    21. Documentation:文档地址
    22. Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit
    23. 会启动失败
    24. Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit
    25. 不会启动失败
    26. BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前
    27. Unit 停止运行
    28. Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后
    29. 启动
    30. After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前
    31. 启动
    32. Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
    33. Condition...:当前 Unit 运行必须满足的条件,否则不会运行
    34. Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败
    35. [Service]
    36. [Service]部分是服务的关键,是服务的一些具体运行参数的设置,只有
    37. Service 类型的 Unit 才有这个区块。它的主要字段如下。
    38. Type:定义启动时的进程行为。它有以下几种值。
    39. Type=simple:默认值,执行ExecStart指定的命令,启动主进程
    40. Type=forking:以 fork 方式从父进程创建子进程,创建后父进程
    41. 会立即退出
    42. Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继
    43. 续往下执行
    44. Type=dbus:当前服务通过D-Bus启动
    45. Type=notify:当前服务启动完毕,会通知Systemd,再继续往下
    46. 执行
    47. Type=idle:若有其他任务执行完毕,当前服务才会运行
    48. ExecStart:启动当前服务的命令
    49. ExecStartPre:启动当前服务之前执行的命令
    50. ExecStartPost:启动当前服务之后执行的命令
    51. ExecReload:重启当前服务时执行的命令
    52. ExecStop:停止当前服务时执行的命令
    53. ExecStopPost:停止当前服务之后执行的命令
    54. RestartSec:自动重启当前服务间隔的秒数
    55. Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括
    56. always(总是重启)、on-success、on-failure、on-abnormal、onabort、on-watchdog
    57. TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
    58. Environment:指定环境变量
    59. [install]
    60. [Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开
    61. 机启动。它的主要字段如下。
    62. WantedBy:它的值是一个或多个 Target,当前 Unit 激活时
    63. enable)符号链接会放入/etc/systemd/system目录下面以 Target
    64. 名 + .wants后缀构成的子目录中
    65. RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号
    66. 链接会放入/etc/systemd/system目录下面以 Target 名 + .required后
    67. 缀构成的子目录中
    68. Alias:当前 Unit 可用于启动的别名
    69. Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
    70. 注意: 如果服务没有Install段落,一般意味着应该通过其它服务自动调用它们
    71. Target
    72. 简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个
    73. Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,
    74. Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状
    75. 态。
    76. 传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。
    77. 不同的是,RunLevel 是互斥的,不可能多个RunLevel同时启动,但是多个
    78. Target可以同时启动。
    79. //查看当前系统的所有 Target 
    80. $ systemctl list-unit-files --type=target
    81. // 查看一个 Target 包含的所有 Unit 
    82. $ systemctl list-dependencies multi-user.target
    83. //查看启动时的默认 Target 
    84. $ systemctl get-default
    85. //设置启动时的默认 Target 
    86. $ sudo systemctl set-default multi-user.target
    87. //切换 Target 时,默认不关闭前一个 Target 启动的进程,
    88. $ systemctl isolate 命令改变这种行为,
    89. //关闭前一个 Target 里面所有不属于后一个 Target 的进程
    90. $ sudo systemctl isolate multi-user.target
  • 相关阅读:
    最廉价的5.1家庭影院系统解决方案
    Tomcat 8(一)Tomcat常用配置
    c primer plus学习笔记
    还在为XShell破解烦恼,试试tabby
    基于昇腾AI | Yolov7模型迁移到昇腾平台EA500I边缘计算盒子的实操指南
    新浪微博案例
    我的Vue之旅 10 Gin重写后端、实现页面详情页 Mysql + Golang + Gin
    树之二叉排序树(二叉搜索树)
    Endpoint Central端点安全管理
    【附源码】计算机毕业设计JAVA合租吧管理系统
  • 原文地址:https://blog.csdn.net/weixin_53678904/article/details/127403853