第9章:启动和内核管理

 

 

 

复制代码
linux的内核文件;伪根系统(RAM DISK虚拟文件系统)
======================================================================
linux的内核文件:vmlinuz-2.6.32-696.el6.x86_64  
linux是单内核系统:所有核心功能都在一个文件中(进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能)
内核设计流派的另一分支:微内核,每种功能使用一个单独子系统实现,代表:windows、solaris


linux内核支持模块化:.ko(内核对象);支持内核模块的动态安装和卸载
linux内核组成部分:
    1.核心文件:
        a./boot/vmlinuz-VERSION-release(不能生成,安装系统时从系统盘复制过来)
        b.辅助的伪根系统:centos5(/boot/initrd-VERSION-release.img)、centos6/7(/boot/initramfs-VERSION-release.img)(可以用mkinitrd命令自动生成)
    2.模块文件:/lib/moudules/VERSION-release

-----------------------------------------------------------------------------------------------------------------------------
伪根系统(RAM DISK虚拟文件系统)
initramfs-2.6.32-696.el6.x86_64.img是一个压缩文件
1.改名
    mv initramfs-2.6.32-696.el6.x86_64.img initramfs-2.6.32-696.el6.x86_64.img.gz
2.解压缩
    gzip -d initramfs-2.6.32-696.el6.x86_64.img.gz
3.查看文件,提示为(ASCII cpio archive)
    file initramfs-2.6.32-696.el6.x86_64.img
3.预览cpio内的文件(发现内容很全,基本上一个系统的内容都有,包含了所有系统的目录,以及lib/firmware/、lib/kbd/、lib/udev/、lib/modules/、usr/share/、usr/lib64/等目录下均有大量的系统文件;initramfs是一个伪根系统!)
    cpio -tv < initramfs-2.6.32-696.el6.x86_64.img  |less
linux的内核文件;伪根系统(RAM DISK虚拟文件系统)
复制代码

 

 centos6

复制代码
centos6启动流程;grub.conf文件;centos6启动流程个人总结
=================================================================================
centos6启动流程
1.硬件启动:
    1.POST   主板程序:检查并获取硬件信息
    2.执行硬盘MBR中的bootloader
2.grub启动引导阶段:
    1.读取硬盘MBR,前446字节为grub stage1阶段
    2.grub stage1.5阶段:识别并启动分区文件系统;加载/boot/grub下的stage2文件
    3.grub stage2阶段:根据/boot/grub/grub.conf的配置确认了系统内核文件的路径(/boot/vmlinuz-VERSION-release)、确定根'/'的路径,通过指定的/boot/initramfs-VERSION-release.img文件启动伪根系统(RAM DISK虚拟文件系统)
3.内核引导阶段:
    1.运行伪根系统
    2.伪根系统加载各类驱动模块,初始化系统中的各设备,包括CPU,I/O,存储设备
    3.加载并切换到整整的根文件系统(/grub/grub.conf中指定的root)
    4.协助内核启动第一个进程/sbin/init
4.系统初始化阶段:
    1.根据/etc/inittab获取用户级别
    2.执行脚本/etc/rc.sysinit,进行初始化(获取网络与主机类型、打印欢迎信息、是否启动SELinux、设置系统时间、将启动相关信息加载到/var/log/dmesg文件中),重要内容示例:
        (1)设置主机名;
        (2)设置欢迎信息;
        (3)激活udev和selinux;
        (4)挂载/etc/fstab文件中定义的所有文件系统;
        (5)检测根文件系统,并以读写方式重新挂载根文件系统;(重新挂载是指根文件检测完之后)
        (6)设置系统时钟;
        (7)根据/etc/sysctl.conf文件来设置内核参数;
        (8)激活lvm即软raid设备;
        (9)激活swap设备;
        (10)加载额外设备的驱动程序;(内核加载驱动只加载根文件系统的)
        (11)清理操作;
    3.加载系统服务:
        (1)携带运行级别作为参数执行/etc/rc.d/rc脚本,加载系统服务(运行级别为5,即/etc/rc.d/rc 5);即到/etc/rc.d/rcX.d/目录下进行服务的关闭与开启(K*脚本关闭服务,S*脚本开启服务)
        (2)init执行/etc/rc.d/rc.local 加载用户自定义服务
5.启动终端

centos6启动流程参考文档:Linux启动流程和grub详解 https://blog.51cto.com/zhang789/1851675


------------------------------------------------------------------------
[root@yefeng boot]# cat grub/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-696.el6.x86_64.img

------------------------------------------------------------------------
个人总结:(系统启动时,页面显示对应的linux系统启动阶段)
1.开机就是系统硬件自检阶段,BIOS(快速按一下esc键,可以选择启动设备,例如选择从光驱启动)
2.读秒阶段(页面提示:点击任意按键就会显示内核选择页面),显示读秒,意味着已成功进入grub一阶段
3.选择内核页面默认是隐藏的,可以看到这个页面意味这开始grub二阶段
4.进入grub二阶段,根据grub/grub.conf配置,加载运行initramfs伪根系统,加载内核文件、确定系统根路径
    a.若黑屏则意味着initramfs文件的损坏;
    b.若提示文件未找到,则很可能是内核文件找不到。
5.接下来就是init进程加载各种文件和开启服务了
centos6启动流程;grub.conf文件;centos6启动流程个人总结
复制代码

 

复制代码
centos6的7个运行级别,init命令、runlevel命令;启动init进程后的初始化过程;初始化原理
===============================================================================================
centos6的7个运行级别
    0:关机
    1:单用户模式(自动登陆root),single,维护模式
    2:多用户模式,启动网络功能,但不会启动NFS;维护模式
    3:多用户模式,正常模式,文本界面
    4:预留
    5:多用户模式,正常模式,图形界面
    6:重启

手动切换运行级别:init #
查看当前运行级别:runlevel;who -r

[root@yefeng ~]# cat /etc/inittab 
id:5:initdefault:      #系统启动时,默认运行模式为5,即图形界面模式

-------------------------------------------------------------------------------------------------
启动init进程后,会读取初始化脚本/etc/inittab以及一些其他初始化脚本
    课程这里以centos5为例(centos6与centos6相似)
    1.确认了开始时的默认模式
    2.启动第一个脚本/etc/rc.d/rc.sysinit,进行初始化
    3.然后执行/etc/rc.d/rc脚本,并携带响应的参数(运行级别)
        在运行/etc/rc.d/rc脚本时,会到/etc/rc.d/rcX.d/目录下进行服务的关闭与开启(K*脚本关闭服务,S*脚本开启服务)
        这些K*、S*脚本其实都是软链接,链接到真正的脚本文件(/etc/init.d/目录下)
        chkconfig命令本质上就是修改软链接的名称,达到开机时启动与不启动服务的目的
    同时手动开关服务就是通过使用这些脚本添加start、stop参数

---------------------------------------------------------------------
初始化原理
在centos 6中,在运行/etc/rc.d/rc脚本时,会到/etc/rc.d/rcX.d/目录下进行服务的关闭与开启(K*脚本关闭服务,S*脚本开启服务),这些K*、S*脚本其实都是软链接,链接到真正的脚本文件(/etc/init.d/目录下)
这些脚本文件对应着每个响应的服务,通过脚本+参数的方式可以进行服务的开关、状态查询,例如:
/etc/init.d/atd status
/etc/init.d/atd stop
/etc/init.d/atd start
centos6的7个运行级别,init命令、runlevel命令;启动init进程后的初始化过程;初始化原理
复制代码

 

复制代码
chkconfig命令;centos6创建自定义服务(chkconfig控制该服务在开机时自动运行);自定义服务方法2;service命令;Xinetd、瞬态(transient)服务、ntsysv命令
=============================================================================================================================================
chkconfig命令(centos6命令),提供了一个维护/etc/rc[0~6] d 文件夹的命令行工具,它减轻了系统直接管理这些文件夹中的符号连接的负担。chkconfig主要包括5个原始功能:为系统管理增加新的服务、为系统管理移除服务、列出单签服务的启动信息、改变服务的启动信息和检查特殊服务的启动状态。

查看
chkconfig       #默认查看系统所有服务在所有运行级别下的开关情况
chkconfig --list ypbind

修改
chkconfig ypbind on         #设置ypbind服务开机自动开启(未指定运行级别,默认设置2345)
chkconfig --level 23 ypbind on      #指定运行级别2、3
chkconfig ypbind off        #关闭

增加
chkconfig --add server_name
删除
chkconfig --del server_name

------------------------------
centos6创建自定义服务(允许chkconfig控制该服务在开机时自动运行)
1.在/etc/init.d/目录下创建自定义脚本,并给予执行权限
2.编写脚本内容
    [root@yefeng init.d]# cat test_shell    
    #!/bin/bash
    #chkconfig: 345 96 3    
        //345表示在运行级别345下,服务自动启动,-则表示所有运行级别;
        //96,当服务为开机启动时,对应的脚本软链接名称为S96servername
        //3,当服务为开机不启动时,对应的脚本软链接名称为K03servername
    #description:xxxxxx
    source /etc/init.d/functions
    case $1 in
    start)
        [ -f /var/lock/subsys/test_shell ] && action "test_shell is started"
            //centos6的部分应用是通过判断/var/lock/subsys/目录下是否存在相应的文件(该文件无内容)来判断服务是否正在运行
        touch /var/lock/subsys/test_shell
        action "test_shell is starting"
        ;;
    stop)
        rm -f /var/lock/subsys/test_shell
        action "test_shell is stopped"
        ;;
    status)
        [ -f /var/lock/subsys/test_shell ] && action "test_shell is running" || action "test_shell is stopped"
        ;;
    *)
        echo "Usage: service test_shell start|stop|status"
    esac
3.将脚本添加到服务中
    chkconfig --add test_shell
    chkconfig --del test_shell
4.测试脚本
    service test_shell status
    service test_shell stop
    service test_shell start
    /etc/init.d/test_shell status
    /etc/init.d/test_shell start
    /etc/init.d/test_shell stop
6.设备重启,观察系统服务加载过程
    在centos6的loading界面按esc键,显示服务的加载过程
7.故障排查:脚本编写错误,导致服务加载异常,系统卡在加载过程
    按ctrl+alt+delete进行重启,然后进入单用户模式
----------------------------------------------------------------
自定义服务的开机自动运行方法2:
    写入到/etc/rc.d/rc.local,因为该脚本总是会被开机启动的!
    [root@yefeng ~]# ll /etc/rc*.d/S99local  
    lrwxrwxrwx. 1 root root 11 Jan 28 01:13 /etc/rc2.d/S99local -> ../rc.local
    lrwxrwxrwx. 1 root root 11 Jan 28 01:13 /etc/rc3.d/S99local -> ../rc.local
    lrwxrwxrwx. 1 root root 11 Jan 28 01:13 /etc/rc4.d/S99local -> ../rc.local
    lrwxrwxrwx. 1 root root 11 Jan 28 01:13 /etc/rc5.d/S99local -> ../rc.local


    这种方法在centos7中也是可行的,不过需要先为/etc/rc.d/rc.local脚本添加执行权限


=======================================================================================
service命令用于手动管理服务
service 服务 start|stop|restart
service --status-all

=======================================================================================
Xinetd(centos6服务,其功能在centos7中被systemd替代):即extended internet daemon,是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。
瞬态(transient)服务,非独立服务,被xinetd进程所管理。
    例如telnet服务端(telnet-server),设置成开机启动,将会一直占用内存,消耗资源,浪费;设置成开机不启动,则需要临时手动开启服务,体验不好。通过被xinetd进程托管,xinetd进程将会监听23端口,在有telnet请求时,开启telnet服务

安装瞬态服务时,会自动安装xinetd,例如安装telnet-server就会自动安装xinetd
chkconfig                   #查看全部服务,发现telnet被xinetd管理
chkconfig --list telnet     #查看telnet是否开机启动


======================================================================================
ntsysv命令:字符界面交互式地配置服务的开启与关闭
chkconfig命令;centos6创建自定义服务(chkconfig控制该服务在开机时自动运行);自定义服务方法2;service命令;Xinetd、瞬态(transient)服务、ntsysv命令
复制代码

 

复制代码
实验:破环grub一阶段的相关文件信息;grub命令;实验:/boot/grub/grub.conf文件被删除
================================================================================
实验:破环grub一阶段的相关文件信息
MBR分区是磁盘的前512字节,而其中的前446字节就是grub的1阶段的信息

hexdump -C -n 512 /dev/sda                      #查看磁盘前512字节的信息
dd if=/dev/sda of=/data/mbr bs=1 count=512      #导出mbr的前512字节
sz /data/mbr                                    #传输文件到windows本地
dd if=/dev/zero of=/dev/sda bs=1 count=446      #破环前446字节
hexdump -C -n 512 /dev/sda -v                   #确认已被破坏
reboot

故障现象:重启后,磁盘无MBR信息,无法开启grub一阶段
故障修复:
    1.进入救援模式
    2.根据刚才备份的mbr信息/data/mbr,重写mbr分区即可
        dd if=/mnt/sysimage/data/mbr of=/dev/sda bs=1 count=446
故障修复方法2:
    1.进入救援模式
    2.修复
        chroot /mnt/sysimage/               #切根
        grub-install /dev/sda               #修复命令,该命令能修复grub一阶段、1.5阶段
        sync                                #确保同步


grub-install命令:安装grub stage1和stage1.5到/dev/DISK磁盘上,并复制grub相关文件到DIR/boot目录下
    grub-install /dev/sda           #在救援模式下执行该操作需要先切根
    grub-install --root-directory=DIR /dev/DISK  #不切根则使用--root-directory指定根路径

grub命令        #grub命令就是使用/boot/grub目录下grub1阶段1.5阶段文件进行修复的
    grub        #进入交互
    grub> root (hd0,0)
    grub> setup (hd0)   




/boot/grub/grub.conf文件中添加一行'password xxxx',则进入单用户模式需要密码

================================================================================
实验:/boot/grub/grub.conf文件被删除
    /boot/grub目录下的grub.conf、splash.xpm.gz这两个文件一直都是启动的必要文件
    若系统是原生安装的,没有被grub命令修复过,那么其他的文件不是必须的
    但是若被grub命令修复过,那么其他文件也是必须的,否则启动会有故障现象
故障现象:无法进入到grub二阶段,系统重启后系统卡在grub二阶段之前,处于交互式界面
故障修复:
    在交互环境下输入
    kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda1
    initrd /initramfs-2.6.32-696.el6.x86_64.img
    boot
实验:破环grub一阶段的相关文件信息;grub命令;实验:/boot/grub/grub.conf文件被删除
复制代码

 

复制代码
实验1:centos6 initramfs文件损坏;实验2:centos6 内核文件vmlinuz损坏;实验3:centos6 破解root密码、系统开机的默认运行模式为0或6
=============================================================================
实验1:centos6 initramfs文件损坏
initramfs文件是grub二阶段需要读取的文件,是需要运行的一个伪根系统;因此缺乏该文件即无法成功运行gurb二阶段。
故障现象:系统进入gurb二阶段后,无法加载任何内容,屏幕除了一个光标,就是黑屏状态。
    即过了选择内核页面之后,就进入到黑屏状态。(选择内核页面默认是隐藏的,系统提示点击任意按键就会显示选择内核页面)
修复过程:
    1.进入救援模式
        开机时快速按一下esc键,进入BIOS,然后选择从光驱启动
    2.执行命令,进行修复
        chroot /mnt/sysimage                                    #切根
        mkinitrd /boot/initramfs-`uname -r`.img `uname -r`      #重新生成initramfs文件
        sync                                                    #将内存数据手动同步到硬盘,确保硬盘保存了initramfs文件
        exit
        exit
        reboot

-----------------------------------------------------------------------
实验2:centos6 内核文件vmlinuz损坏
内核文件vmlinuz不是安装生成的,而是从系统盘中复制过来的,所以修复逻辑也很简单,进入救援模式,从光盘中复制一份即可
故障现象:进入grub二阶段之后,提示找不到文件
修复过程:
    1.进入救援模式
        开机时快速按一下esc键,进入BIOS,然后选择从光驱启动
    2.执行命令,进行修复
        遇到问题了,看不到光盘,如何挂载
        df                      #查看当前磁盘的挂载情况
        mount /dev/sr0 /data    #将光驱挂载到一个新建的空目录下
        cp /data/isolinux/vmlinuz /mntsysimage/boot/vmlinuz-`uname -r`     #复制内核文件
        sync                                                    #将内存数据手动同步到硬盘,确保硬盘保存了initramfs文件
        exit
        exit

        reboot

-----------------------------------------------------------------------
实验3:centos6 破解root密码、系统开机的默认运行模式为0或6
原理很简单,都是进入单用户模式,然后修改响应的文件即可
破解过程:
1.在系统进入grub二阶段之前的读秒阶段,点击任意按键进入到内核选择页面
2.点击按键“a”,修改内核启动参数,增加“1”(设置本次启动进入到单用户模式)
3.passwd修改root密码即可
4.默认运行模式错误则修改/etc/inittab文件即可
实验1:centos6 initramfs文件损坏;实验2:centos6 内核文件vmlinuz损坏;实验3:centos6 破解root密码、系统开机的默认运行模式为0或6
复制代码

 

复制代码
实验:修复伪根系统文件 /boot/initramfs-version-release.img;实验:/boot/目录下所有文件被删除;实验:rm -rf /etc/fstab /boot/*;同时破环/etc/fstab文件和/boot目录下的所有文件;实验:/sbin/init文件被破坏
========================================================================================
在CentOS 6系统中修复伪根系统文件 /boot/initramfs-version-release.img
RAM DISK伪根系统,也叫虚拟文件系统,它解决了 当内核程序还没有加载到磁盘的时候就要去读取系统上的内核文件问题。
源文档 <https://blog.csdn.net/weixin_41979048/article/details/80263934> 

--------------------------------------------------------------------------
实验:/boot/目录下所有文件被删除
视频时间:马哥教育30期20180511第19天-3启动排错和自制Linux-10分钟
/boot/目录下的重要文件有以下3个:
    vmlinuz-2.6.32-696.el6.x86_64   这个是内核文件
    initramfs-2.6.32-696.el6.x86_64.img     RAM DISK伪根系统
    /boot/grub/目录下的grub.conf文件以及grub1阶段、1.5阶段的辅助文件
故障现象:因为进入grub二阶段需要先读取/boot/grub/grub.conf,故/boot/目录下所有文件被删除现象同/boot/grub/grub.conf文件被删除
故障修复:
    1.开机BIOS界面点击esc按键,选择从光盘启动,进入到救援模式
    2.手动挂载光驱
        df
        mkdir /mnt/cdrom
        mount /dev/sr0 /mnt/cdrom
    3.修复
        ls /mnt/sysimage/boot    #在救援模式下,根据提示发现根挂载路径为/mnt/sysimage,这里先确认/mnt/sysimage/boot有哪些文件
        rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --root=/mnt/sysimage --force
        ls /mnt/sysimage/boot       #vmlinuz文件、initramfs文件已生成
        ---------------------------------------
        此时/boot/grub目录还未修复
        chroot /mnt/sysimage        #切根
        grub-install /dev/sda   #该步骤执行较慢,修复/boot/grub目录下除grub.conf文件外的所有文件
        vi /boot/grub/grub.conf
            default=0
            timeout=10
            title linux-centos6.9
            kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/mapper/VolGroup-lv_root quiet rhgb
            initrd /initramfs-2.6.32-696.el6.x86_64.img
        exit
        exit    #然后选择重启

--------------------------------------------------------------------------
实验:rm -rf /etc/fstab /boot/*;同时破环/etc/fstab文件和/boot目录下的所有文件
视频时间:马哥教育30期20180511第19天-3启动排错和自制Linux-29分钟25秒
故障现象:因为进入grub二阶段需要先读取/boot/grub/grub.conf,故/boot/目录下所有文件被删除现象同/boot/grub/grub.conf文件被删除
    同时因为/etc/fstab文件被删除,磁盘无法被自动挂载
故障修复:
    1.开机BIOS界面点击esc按键,选择从光盘启动,进入到救援模式
    2.挂载分区(查看所有物理分区和逻辑卷,逐个挂载查看,直到挂载到根)
        fdisk -l    #这是分区命令,-l查看分区信息
        mkdir /mnt/rootfs   
        mount /dev/sda1 /mnt/rootfs
        lvdisplay  #查看逻辑卷信息,确认逻辑卷状态是否active
        vgchange -ay /dev/VolGroup       #激活逻辑卷
        mount /dev/VolGroup/lv_root /mnt/rootfs
    3.修复/etc/fstab
        vi /mnt/rootfs/etc/fstab
            ……
    4.修复/boot目录下的所有文件
        详见-实验:/boot/目录下所有文件被删除

--------------------------------------------------------------------------
实验:/sbin/init文件被破坏
故障修复:
    1.进入到救援模式
    2.修复
    修复思路1:使用scp命令通过网络下载文件(注意不要下载软链接)
    修复思路2:通过安装包
        rpm -qf /sbin/init       #查看到安装包upstart-xxxxxx
        rpm2cpio /misc/cd/Packages/upstart-xxxx.rpm | cpio -tv|less
        rpm2cpio /misc/cd/Packages/upstart-xxxx.rpm | cpio -idv ./sbin/init   #解压出/sbin/init文件
实验:修复伪根系统文件 /boot/initramfs-version-release.img;实验:/boot/目录下所有文件被删除;实验:rm -rf /etc/fstab /boot/*;同时破环/etc/fstab文件和/boot目录下的所有文件;实验:/sbin/init文件被破坏
复制代码

 

 

 

 

centos7

 

复制代码
/proc目录;/proc/sys(系统生效参数,例如net.ipv4.ip_forward);sysctl命令;/sys目录
----------------------------------------------------------------
centos7
/proc目录:内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
    参数:只读---输出信息;可写---可接受用户指定“新值”来实现对内核某功能或特性的配置
/proc/sys目录下保存了所有的生效参数
    修改参数方法1:sysctl命令
        sysctl -w net.ipv4.ip_forward=0
        sysctl -a |grep ip_forward
    修改参数方法2:直接修改文件,两种方法等价
        echo "1" > /proc/sys/net/ipv4/ip_forward

/etc/sysctl.conf文件就是用于设置/proc/sys/目录下的参数,修改该文件才是永久生效

----------------------------------------------------------------
sysctl命令(默认配置文件/etc/sysctl.conf)
    sysctl -w net.ipv4.ip_forward=0     #设置参数,一般用来测试,因为这只是临时生效
    sysctl -p                   #读取配置文件/etc/sysctl.conf,并设置参数
    sysctl -a                   #查看所有生效的参数

    常用的几个参数:
    net.ipv4.ip_forward     #是否支持转发
    net.ipv4.ip_local_port_range    #设备作为客户端所使用的端口范围
    net.ipv4.icmp_echo_ignore_all   #设置为1,则不对icmp请求包做出响应

-------------------------------------------------
/sys目录
    sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备和相关属性信息,也有内核对硬件特性的设定信息;有些参数可以修改,用于调整硬件的工作特性
    udev通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序
    专用工具:udevadmin,hotplug
    udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下
/proc目录;/proc/sys(系统生效参数,例如net.ipv4.ip_forward);sysctl命令;/sys目录
复制代码

 在centos6中,真正的服务脚本存放在/etc/init.d/目录下

系统启动时,则是根据服务脚本的软链接的名称进行服务的关闭和开启,软链接的存放路径为/etc/rcN.d/

在centos7中,真正的服务脚本存放在/usr/lib/systemd/system目录下
/etc/systemd/system/目录则类似centos6的/etc/rcN.d/,存放服务脚本的软链接(当然不止是软链接)
/run/systemd/system/则是系统执行过程中所产生的脚本,基本不用关注

复制代码
centos7 内核编译;修改or删除内核文件
===============================================================================
centos7 内核编译
内核组成部分:
    kernel内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE
    kernel object内核对象,一般放置于/lib/modules/VERSION-RELEASE/
    “ ”表示功能不启用,“*”表示功能启用,(只有最基础的功能才会打包进内核)
    “M”表示功能不编译进内核,作为独立模块,例如/usr/lib/modules/3.10.0-1160.el7.x86_64/kernel/fs/xfs/xfs.ko.xz

0.确保编译工具已安装
    yum grouplist
    yum groupinstall "Development Tools"
1.登陆网站https://www.kernel.org/下载内核源码文件
    linux-xxxxx.tar.xz
    tar xf linux-4.19.179.tar.xz 
2.准备文本配置文件.config
    复制配置文件config-3.10.0-1160.el7.x86_64并命名为.config
    cp /boot/config-3.10.0-1160.el7.x86_64 .config
    config-3.10.0-1160.el7.x86_64文件有6000+行内容,即有6000+项特性
    内核源码编译的过程和程序源码的编译安装差不多,但是内核编译的参数太多,所以使用参考配置的方式更方便
3.配置内核选项make menuconfig
    make menuconfig
    yum install ncurses-devel#根据make menuconfig报错提示,安装相应的库
    make menuconfig   #在交互式界面进行编辑
    -------当然还有其他方式来配置内核选项
        a)make config:基于命令行以便利的方式去配置内核中可配置的每个选项
        b)make menuconfig:基于curses的文本窗口界面
        c)make gconfig:基于GTK(GNOME)环境窗口界面
        d)make xconfig:基于QT(KDE)环境的窗口界面
        1)make defconfig:基于内核为目标平台提高的“默认”配置进行配置
        2)make allyesconfig:所有选项均为yes
        3)make allnoconfig:所有选项均为no
4.make [-j #]
    make -j 4     #使用4颗cpu同时工作,加速make
    yum install openssl-devel   #若缺少工具就安装相应的工具 
    若编译有错误,则根据提示安装相应的工具;或者根据实际需要取消该功能的编译
5.安装模块
    make moudules_install
6.安装内核相关文件
    make install #生成vmlinuz内核文件和initramfs文件,同时修改了grub的配置文件
        安装bzImage为/boot/vmlinuz-VERSION-RELEASE
        生成initramfs文件
        编辑grub的配置文件/boot/grub2/grub.cfg

编译安装内核示例2:
    tar xf linux-4.19.179.tar.xz -C /usr/src
    cd /usr/src
    ln -sv linux-4.19.179 linux
    cd /usr/src/linux
    cp /boot/config-$(uname -r) ./.config
    make help
    make menuconfig
    make -j 4 
    make moudules_install
    make install
    reboot



若对已经执行过编译的操作的内核源码树重新编译,则需要事先做好清理操作:
    make clean:清理大多数编译生成的文件,但会保留config文件等
    make mrproper:清理所有编译生成的文件、config及某些备份文件
    make distclean:mproper、patches以及编辑器备份文件

---------------------------------------------------------------------------------
删除内核
1.修改配置
    修改/boot/grub2/grub.cfg的相关配置
2.删除文件
    删除/lib/moudules/目录下不需要的内核库文件
    删除/usr/src/linux/目录下不需要的内核源码
    删除/boot目录下启动的内核和内核映像文件
centos7 内核编译;修改or删除内核文件
复制代码

 

复制代码
Systemd 概述;systemctl命令;centos6运行级别与centos7运行级别对比;其它常用命令(关机、重启、挂起、快照、快照并挂起)
Systemd 入门教程:命令篇: http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
systemd 和 systemctl 使用深入理解: https://www.linuxidc.com/Linux/2018-08/153545.htm
==========================================================================================================
Systemd 概述
Linux 的启动一直采用init进程,有两个缺点:
    一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
    二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。
Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。


Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
    systemctl是 Systemd 的主命令,用于管理系统。
    systemd-analyze命令用于查看启动耗时。
    hostnamectl命令用于查看当前主机的信息。
    localectl命令用于查看本地化设置。
    timedatectl命令用于查看当前时区设置。
    loginctl命令用于查看当前登录的用户。

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。
    Service unit:系统服务
    Target unit:多个 Unit 构成的一个组
    Device Unit:硬件设备
    Mount Unit:文件系统的挂载点
    Automount Unit:自动挂载点
    Path Unit:文件或路径
    Scope Unit:不是由 Systemd 启动的外部进程
    Slice Unit:进程组
    Snapshot Unit:Systemd 快照,可以切回某个快照
    Socket Unit:进程间通信的 socket
    Swap Unit:swap 文件
    Timer Unit:定时器

systemctl list-units命令可以查看当前系统的所有 Unit 。
systemctl status命令用于查看系统状态和单个 Unit 的状态。

------------------------------------------------------------------------------
centos6的chkconfig用于设置服务的开机是否启动;service用于设置服务的直接开关
systemctl service 结合了上面2个命令的功能

在centos6中,必须要打开服务,才能打开socket
在centos7中,服务和socket分离了,socket可以独立启动;当需要服务时,再按需开启服务

systemctl命令,对比与CentOS 6的区别:
    启动:service NAME start ==> systemctl start NAME.service
    停止:service NAME stop ==> systemctl stop NAME.service
    重启:service NAME restart ==> systemctl restart NAME.service
    状态:service NAME status ==> systemctl status NAME.service
    条件式重启:service NAME condrestart ==> systemctl try-restart NAME.service
    重载或重启服务:systemctl reload-or-restart NAME.service
    重载或条件式重启服务:systemctl reload-try-restart NAME.service

    查看某服务当前激活与否的状态:systemctl is-active NAME.service
    查看所有已激活的服务:systemctl list-units --type service
    查看所有服务(已激活及未激活): chkconfig --list ==> systemctl list-units -t service --all
    查看某服务是否能开机自启:chkconfig --list NAME ==> systemctl is-enable NAME.service

    禁止某服务设定为开机自启:systemctl mask NAME.service
    取消此禁止:systemctl umask NAME.service

    查看服务的依赖关系:systemctl list-dependencies NAME.service

示例:
    $ sudo systemctl start apache.service           # 立即启动一个服务
    $ sudo systemctl stop apache.service            # 立即停止一个服务
    $ sudo systemctl restart apache.service         # 重启一个服务
    $ sudo systemctl kill apache.service            # 杀死一个服务的所有子进程
    $ sudo systemctl reload apache.service          # 重新加载一个服务的配置文件
    $ sudo systemctl daemon-reload                  # 重载所有修改过的配置文件
    $ systemctl show httpd.service                  # 显示某个 Unit 的所有底层参数
    $ systemctl show -p CPUShares httpd.service     # 显示某个 Unit 的指定属性的值
    $ sudo systemctl set-property httpd.service CPUShares=500       # 设置某个 Unit 的指定属性
    $ systemctl enable nginx.service                # 在开机时启用一个服务
    $ systemctl disable nginx.service               # 在开机时禁用一个服务

service atd status;仔细观察执行的输出。
虽然还支持老的方式,但实际上就重定向到新的方式了,即还是systemctl status atd.service


-------------------------------------------------------------------------------
centos6运行级别与centos7运行级别对比
在systemd命令中所对应的运行级别以及在CentOS 6上对应的的运行切换等命令:
运行级别:
    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

切换切换:init N ==> systemctl isolate NAME.target

查看级别:runlevel ==> systemctl list-utits --type target
查看所有级别:systemctl list-units -t target -a

获取默认运行级别:systemctl get-default
修改默认运行级别:systemctl get-default NAME.target

切换至紧急救援模式:systemctl rescre
切换至emergency模式:systemctl emergency

-------------------------------------------------------------
其它常用命令(关机、重启、挂起、快照、快照并挂起):
    关机:systemctl halt, systemctl poweroff
    重启:systemctl reboot
    挂起:systemctl suspend
    快照:systemctl hibernate
    快照并挂起:systemctl hybrid-sleep
Systemd 概述;systemctl命令;centos6运行级别与centos7运行级别对比;其它常用命令(关机、重启、挂起、快照、快照并挂起)
复制代码

 

 

 

 

 

 

 

 

 

centos6启动流程参考文档:Linux启动流程和grub详解 https://blog.51cto.com/zhang789/1851675

 

Systemd 入门教程:命令篇: http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
systemd 和 systemctl 使用深入理解: https://www.linuxidc.com/Linux/2018-08/153545.htm

posted @   雲淡風輕333  阅读(42)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示