zoukankan      html  css  js  c++  java
  • Linux 引导流程解析

    Ø  简介

    本文主要介绍 Linux 引导流程相关内容,包括如下内容:

    1.   Linux 系统引导流程

    2.   Linux 运行级别

    3.   Linux 启动服务管理

    4.   GRUB 配置与应用

    5.   启动故障分析与解决

     

    1.   Linux 系统引导流程

    1)   常用固件设置

    安全设置

    可引导介质列表

    可引导介质搜索顺序

    电源管理

    启动细节显示

    ......

     

    2)   固件设置实例

    hwclock 命令的使用

    功能描述

    硬件/固件时钟的相关操作

    语法

    hwclock [功能] [选项...]

    -s, --hctosys        从硬件时钟设置系统时间

    -w, --systohc        从当前系统时间设置硬件时钟

    执行权限

    所有用户

    命令所在路径

    /usr/bin/which

    示例:

    [root@localhost ~]# date        #查看软件时间

    2020 02 22日 星期六 17:22:59 CST

    [root@localhost ~]# hwclock     #查看固件时间

    20200222日 星期六 172304  -0.334217

    [root@localhost ~]# hwclock –hctosys   #同步硬件时钟到软件时钟

    [root@localhost ~]# hwclock –systoh    #同步软件时钟到硬件时钟

     

    [root@localhost ~]# date 022118122020.56    #设置软件时间

    2020 02 21日 星期五 18:12:56 CST

    [root@localhost ~]# hwclock --set="9/22/96 16:45:05"    #高版本的不支持

    hwclock:选项“--set”不接受任何参数

     

    3)   init 进程的工作

    init 进程启动后会读取 inittab 文件,执行缺省运行级别,从而继续引导过程。在 UNIX 系统中,init 是第一个可以存在的进程,它的 PID 恒为1(永远为1),但是它也必须向一个更高级的功能负责:PID0的内核调度器(Kernel scheduler),从而获得 CPU 时间。

    在进程管理中有一个基本概念,父进程终止所有子进程必须终止。父子进程有以下两种情况:

    n  父进程终止了,子进程没有终止,子进程就变成了孤儿进程;孤儿进程在 Linux 中是不准存在的,系统发现后会将它的父进程指向 init 进程。

    n  子进程死了,父进程不知道,还尝试与子进程保持联系;这时子进程就会变为僵尸进程,这种进程也是不允许存在的。

     

    2.   Linux 运行级别

    1)   查看 inittab 配置文件

    vi /etc/inittab        #该文件在 CentOS 7 中与 CentOS 5 中不一样的

    6个运行级别:

    0 – halt               #关机

    1 – Single user mode   #单用户模式,类似于 Windows 中的安全模式,只能 root 用户登录,是没有图形界面的;

    2 – Multiuser         #字符界面的多用户模式,所有服务都会启动,但没有图形界面,其他都与运行级别3一致,但是没有NFS(networking)这个服务

    3 – Full multiuser     #完整的多用户模式

    4 – unused            #没有使用的,用户可以自定义(可以指定需要启动服务)

    5 – X11               #系统缺省的运行级别,与运行级别3的区别是,有运行界面的

    6 – reboot            #重启

     

    2)   inittab 文件剖析

    1.   查看当前的运行级别

    [root@localhost ~]# runlevel        #N表示之前未切换运行级别,1表示当前的运行级别

    N 5

      #5表示切换前的运行级别

     

    2.   切换运行级别

    [root@localhost ~]# init 1          #切换运行级别为1

    或者

    [root@localhost ~]# telinit 1

    注:init telinit 一样,都是软链接,分别指向 /bin/systemctl /lib/systemd/systemd 文件

     

    3.   inittab 中,所有条目采取以下格式:id:run-levels:action:process

    id: 标识符(标记条目的唯一性),一般为两位字母或数字;

    run-levels: 指定运行级别,可以指定多个(如:123),为空表示所有运行级别都执行;

    action: 指定运行状态,action 常用取值:

    l  initdefault: 指定系统缺省启动的运行级别;

    l  sysinit: 系统启动指定 process 中指定的命令;

    l  wait: 执行 process 中指定的命令,并等其结束在运行其他命令;

    l  once: 执行 process 中指定的命令,不等待其结束;

    l  ctrlaltdel: 按下 Ctrl + Alt + Del 时执行 process 指定的命令;

    l  powerfail: 当出现电源错误时执行 process 指定的命令,不等待其结束;

    l  powerokwait: 当电源恢复时执行 process 指定的命令;

    l  respawn: 一旦 process 指定的命令中止,便重新运行该命令。

     

    process: 指定要运行的脚本/命令

     

    id:5:initdefault:   #比较特殊,并没有 process,指定了系统的默认运行级别;

    si::sysinit:/etc/rc.d/rc.sysinit    #每个运行级别启动,都会执行该脚本。由这个脚本完成服务程序启动,如设置系统环境变量、系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。注意:如果希望任何运行级别都执行的脚本、命令,就可以加入到该文件的末尾。

     

    l0:0:wait:/etc/rc.d/rc 0

    l6:0:wait:/etc/rc.d/rc 6

    判断默认运行级别,调用/etc/rc.d/rc脚本,执行相应运行级别目录中的服务程序,完成相应运行级别的初始化设置。

     

    /etc/rc.d/rc[0123456].d

    分别存放对应于运行级别的服务程序脚本的符号链接,链接到 init.d 目录中的相应脚本。

    例如:S12syslog

    S – start,表示要启动的服务,注意必须为大写S,小写s将不会被识别;

    K – kill,表示要停止的服务;

    12 – 数字,启动顺序(数字越小越优先启动,数字相同按照创建顺序启动)

    syslog – 脚本名称

    提示:一个系统基本的管理原则,授予用户最小的权限,同时开启最少的服务(开启的服务越多被攻击的可能越大,而且越占用资源)。

     

    ca::ctrlaltdel:/sbin/shutdown -t3 -r now    #Ctrl + Alt + Delete 键执行相关(关机)命令

     

    1:2345:respawn:/sbin/mingetty tty1 ~ tty6   #表示按 Ctrl + Alt + (F1-F6),切换命令终端,另外自己还可以增加终端。

     

    3.   Linux 启动服务管理

    1)   /etc/rc.d/init.d

    该目录下包含各个运行级别的服务程序脚本

    [root@localhost ~]# /etc/rc.d/init.d/network    #查看服务程序脚本可以跟的命令

    Usage: /etc/rc.d/init.d/network {start|stop|status|restart|force-reload}

    [root@localhost ~]# /etc/rc.d/init.d/network start      #启动服务

    [root@localhost ~]# /etc/rc.d/init.d/network stop       #停止服务

    [root@localhost ~]# /etc/rc.d/init.d/network restart    #重启服务

    [root@localhost ~]# /etc/rc.d/init.d/network status     #查看进程

    [root@localhost ~]# /etc/rc.d/init.d/network force-reload   #重新读取服务配置文件

     

    2)   设置自启动程序

    1.   ln -s(如以下示例:设置新添加的服务)

    1)   创建 msg.script 脚本

    [root@localhost init.d]# vi /etc/rc.d/init.d/msg.script

    1 date >> /root/msg.today

    2 who >> /root/msg.today

    3 free >> /root/msg.today

    2)   赋予所有者可执行权限

    [root@localhost init.d]# chmod u+x /etc/rc.d/init.d/msg.script

    3)   创建软链接到对应运行级别的目录中

    [root@localhost init.d]# ln -s /etc/rc.d/init.d/msg.script /etc/rc.d/rc5.d/S100msg.script

     

    2.   chkconfig(设置现有的服务)

    除了手动方式在每个运行级别中改变文件名的方式:

    S12syslog   改为    s12syslog       #启动改为不启动

    K85mdmpd    改为    S85mdmpd        #不启动改为启动

    还可以使用 chkconfig 命令:

    [root@localhost ~]# chkconfig --list        #列出系统安装的服务

    [root@localhost ~]# chkconfig --list network    #查看某一个服务

    [root@localhost ~]# chkconfig --levels 2345 network off #设置某个服务在某些运行级别中启动或停止

     

    3.   ntsysv(菜单点选的方式)

    [root@localhost ~]# ntsysv  #设置当前运行级别启动的服务

    [root@localhost ~]# ntsysv --level 3    #设置运行级别3启动的服务

    *表示启动的,空白表示不启动的;使用上下键选择项;使用空格选中或取消选中;使用<Tab>键切换菜单。

     

    3)   相关命令及日志

    1.   运行 dmesg 检查引导期间的错误

    [root@localhost ~]# dmesg | grep eth0       #检索eth0的错误信息

     

    2.   检查系统日志,查找可能被 dmesg 忽略的应用程序错误

    linx 中,所有的日志文件都存放在:/var/log 目录下

    boot.log        #为启动日志文件(启动出现错误时记录)

    messages        #记录程序或服务的日志信息

    [root@localhost ~]# grep syslog /var/log/messages   #查看 syslog 服务的相关日志信息

     

    4)   Linux 引导步骤流程

     

    4.   GRUB 配置与应用

    1)   GRUB 的配置文件路径

    默认为:/boot/grub/grub.conf

    软连接:/etc/grub.conf

     

    /boot 目录下存放了系统启动相应的文件,比如:

    内核文件:vmlinuz-3.10.0-957.el7.x86_64

     

    2)   GRUB 配置选项

     

    3)   单用户模式应用

    案例:root 密码忘记

    进入当用户模式重新设置 root 密码,方法:开机进入 GRUB 界面,按 e 进入编辑行模式,选中 kernel 行,再次按 e 键,在新的界面的最后一行输入 l s,即可进入单用户模式。

     

    如果考虑不安全,可以给 GRUB 加密码。

     

    注:具体步骤可参考《李明老师讲Linux

     

    4)   光盘修复(终极修复方法)

  • 相关阅读:
    Codeforces Round #299 (Div. 2) B. Tavas and SaDDas 水题
    Codeforces Round #299 (Div. 2) A. Tavas and Nafas 水题
    Codeforces Round #262 (Div. 2) E. Roland and Rose 暴力
    2015 UESTC 数据结构专题N题 秋实大哥搞算数 表达式求值/栈
    hdu 3340 Rain in ACStar 线段树区间等差数列更新
    hust 1385 islands 并查集+搜索
    2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
    2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈
    2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交
    2015 UESTC 数据结构专题D题 秋实大哥与战争 SET的妙用
  • 原文地址:https://www.cnblogs.com/abeam/p/15415598.html
Copyright © 2011-2022 走看看