爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      14-Linux启动流程和内核管理

      首页 知识中心 其他 文章详情页

      14-Linux启动流程和内核管理

      2023-05-16 09:39:15 阅读次数:505

      Linux,启动

      • CentOS 6 的启动管理
      1. POST加电自检
      2. MBR引导
      3. GRUB
      4. 加载内核
      1. 启动init进程
      2. 读取/etc/initab文件;/etc/init/*.conf文件
      1. 使用/etc.d/rc.d/rc.sysinit初始化脚本
      2. 执行/etc/rc.d/rc脚本
      1. 会加载/etc/rc#.d/下的所有脚本,#为默认级别
      1. 执行/etc/rc.d/rc.local脚本
      2. 执行/bin/login程序,进入登陆状态
      1. 加载BIOS的硬件信息,获取第一个启动设备
      2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
      3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
      4. 核心执行init程序,并获取默认的运行信息
      5. init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
      6. 启动核心的挂载模块
      7. init执行运行的各个批处理文件(scripts)
      8. init执行/etc/rc.d/rc.local
      9. 执行/bin/login程序,等待用户登录
      10. 登录之后开始以Shell控制主机
      • 硬件启动POST
      • ROM中存放BIOS程序,用于对计算机基本的输入输出、系统信息设置、开机加电自检、系统启动自举...断电情况下也不会丢失数据;在BIOS中一个主要的功能是POST,负责对硬件进行检测。
      • 启动加载器-Bootloader
      • 独立与BIOS,引导操作系统启动,运行在BIOS之后
      • Linux中主要使用grub
      • 两种引导模式
      • BIOS模式:Bootloader第一阶段的程序(代码)存储在硬盘0磁道0扇区的前446个字节的空间内,由第一阶段的程序来引导第二阶段的bootloader程序,像ntloader,LILO,GRUB等都是采用这种分段执行的方式。
      • UEFI模式:直接由EFI系统分区中的 .efi 引导程序来引导操作系统。
      • grub
      grub 配置文件
      [root@c6 ~]# ll /etc/grub.conf
      lrwxrwxrwx. 1 root root 22 Aug 29 05:50 /etc/grub.conf -> ../boot/grub/grub.conf

      [root@c6 ~]# cat /boot/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/vg_c6-lv_root
      # initrd /initrd-[generic-]version.img
      #boot=/dev/sda
      default=0
      timeout=5
      splashimage=(hd0,0)/grub/splash.xpm.gz
      hiddenmenu
      title CentOS (2.6.32-71.el6.x86_64)
      root (hd0,0)
      kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
      rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
      LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us
      crashkernel=auto rhgb quiet
      initrd /initramfs-2.6.32-71.el6.x86_64.img

      新增启动配置,将默认启动设为第二项,并注释 hiddenmenu
      [root@c6 ~]# vim /boot/grub/grub.conf
      default=1
      timeout=5
      splashimage=(hd0,0)/grub/splash.xpm.gz
      #hiddenmenu
      title CentOS (2.6.32-71.el6.x86_64)
      root (hd0,0)
      kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
      rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
      LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us
      crashkernel=auto rhgb quiet
      initrd /initramfs-2.6.32-71.el6.x86_64.img
      title CentOS-NewName
      root (hd0,0)
      kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
      rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
      LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us
      crashkernel=auto rhgb quiet
      initrd /initramfs-2.6.32-71.el6.x86_64.img
      reboot系统,默认显示系统选择界面,并定位在第二个title 上
      • init进程
      • /sbin/init 程序是内核启动之后的第一个进程,也是进程树中的树根,所以其进程ID始终为1 。
      • /sbin/init 程序的功能之一就是要挂载整个根文件系统, /sbin/init 这个程序的可执行文件,它自己也是在根文件系统里面(矛盾)
      • initrd机制
      • 是在内核启动的早期提供用一个户态环境,用于完成在内核启动阶段不易完成的工作通过此系统先形成一个精简版的linux系统,里面包含常用的文件系统的驱动,以及常用的工具和命令,然后再挂载真正的根文件系统,再定位到/sbin/init 程序,从而完在真正的启动。
      [root@c6 ~]# cat /etc/grub.conf | grep initramfs
      initrd /initramfs-2.6.32-71.el6.x86_64.img
      [root@c6 ~]# ll /boot/initramfs-2.6.32-71.el6.x86_64.img -h
      -rw-r--r--. 1 root root 14M Aug 29 05:50 /boot/initramfs-2.6.32-
      71.el6.x86_64.img
      [root@c6 ~]# file /boot/initramfs-2.6.32-71.el6.x86_64.img
      /boot/initramfs-2.6.32-71.el6.x86_64.img: gzip compressed data, from Unix, last
      modified: Mon Aug 29 05:50:36 2022, max compression
      [root@c6 ~]# cp /boot/initramfs-2.6.32-71.el6.x86_64.img /opt/
      [root@c6 ~]# cd /opt/
      [root@c6 opt]# mv initramfs-2.6.32-71.el6.x86_64.img initramfs-2.6.32-
      71.el6.x86_64.img.gz
      [root@c6 opt]# ls
      initramfs-2.6.32-71.el6.x86_64.img.gz
      [root@c6 opt]# gzip -d initramfs-2.6.32-71.el6.x86_64.img.gz
      [root@c6 opt]# ls
      initramfs-2.6.32-71.el6.x86_64.img
      [root@c6 opt]# file initramfs-2.6.32-71.el6.x86_64.img
      initramfs-2.6.32-71.el6.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
      [root@c6 opt]# cpio -id < initramfs-2.6.32-71.el6.x86_64.img
      75084 blocks
      [root@c6 opt]# ls
      bin emergency initqueue-finished lib64
      pre-udev sysroot
      cmdline etc initqueue-settled mount
      proc tmp
      dev init initramfs-2.6.32-71.el6.x86_64.img pre-pivot
      sbin usr
      dracut-004-32.el6 initqueue lib pre-trigger
      sys var
      #此系统中有根系统的文件系统驱动
      [root@c6 opt]# df / -T
      Filesystem Type 1K-blocks Used Available Use% Mounted on
      /dev/mapper/vg_c6-lv_root
      ext4 51606140 3013552 45971148 7% /
      [root@c6 opt]# find -name ext4
      ./lib/modules/2.6.32-71.el6.x86_64/kernel/fs/ext4
      Magedu-
      • grub 安全
      • 破解centos6 中的 root口令
      • 1. 编辑grub菜单(选定要编辑的title,而后使用a 或 e 命令)
      • 2. 在选定的kernel后附加参数 1(s|S|single),此参数是用来进入单用户模式
      • 3. 在kernel所在行,敲 b 键,以此配置启动,即可无密码以root身份进入系统
      • 设置grub密码,防止破解系统root密码
      • 使用工具
      • grub-md5-crypt
      • grub-crypt
      #查看grub工具
      [root@c6 ~]# grub
      grub grubby grub-install grub-md5-crypt grub-terminfo
      #使用md5工具生成密文
      [root@c6 ~]# grub-md5-crypt
      Password:
      Retype password:
      $1$B0do8$z5jKhXah4sInKxPGQRQWE0
      [root@c6 ~]#
      [root@c6 ~]# vim /etc/grub.conf
      default=0
      timeout=5
      password --md5 $1$B0do8$z5jKhXah4sInKxPGQRQWE0
      title Centos6
      root (hd0,0)
      kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
      initrd /initramfs-2.6.32-71.el6.x86_64.img
      想再次编辑grub,就需要密码认证

      生成grub启动背景图片
      [root@c6 ~]# convert -resize 640x480 -colors 14 winner.png splash.xpm
      [root@c6 ~]# more splash.xpm
      #生成splash.xpm.gz
      [root@c6 ~]# gzip splash.xpm
      [root@c6 ~]# mv splash.xpm.gz /boot/grub
      • 加载 kernel
      • 初始化过程
      • 1. 探测可识别到的所有硬件设备
      • 2. 加载硬件驱动程序(借助于ramdisk加载驱动)
      • 3. 以只读方式挂载根文件系统
      • 4. 运行用户空间的第一个应用程序:/sbin/init
      • 核心文件
      ramdisk:辅助的伪根系统,加载相应的硬件驱动,ramdisk --> ramfs 提高速度
      CentOS 5 /boot/initrd-VERSION-release.img
      CentOS 6 以后版本 /boot/initramfs-VERSION-release.img
      • 模块文件-/lib/modules/VERSION-release
      误删除内核文件/boot/vmlinuz-2.6.32-754.el6.x86_64无法启动,故障恢复
      [root@centos6 ~]#rm -f /boot/vmlinuz-2.6.32-754.el6.x86_64
      [root@centos6 ~]#reboot
      #进入rescue模式
      #chroot /mnt/sysimage
      #mount /dev/sr0 /mnt/
      #cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
      #sync
      #exit
      #reboot
      • ramdisk文件的制作:
      mkinitrd命令
      mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

      dracut命令
      dracut /boot/initramfs-$(uname -r).img $(uname -r)

      误删除/boot/initramfs-2.6.32-754.el6.x86_64.img无法启动,故障恢复
      [root@centos6 ~]#rm -f /boot/vmlinuz-2.6.32-754.el6.x86_64
      [root@centos6 ~]#reboot
      #进入rescue模式
      #chroot /mnt/sysimage
      #mount /dev/sr0 /mnt/
      #cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
      #sync
      #exit
      #reboot
      • init初始化
      • /sbin/init 程序是内核启动之后的第一个进程,也是进程树中的树根,所以其进程ID始终为1 。
      CentOS6中的init
      [root@c6 ~]# which init
      /sbin/init
      [root@c6 ~]# rpm -qf /sbin/init
      upstart-0.6.5-6.1.el6.x86_64
      • 切换运行级别
      查看现在使用的默认级别
      [root@c6 ~]# cat /etc/inittab

      查看当前级别
      [root@c6 ~]# runlevel
      N 5
      [root@c6 ~]# who -r
      run-level 5 2022-08-31 03:52

      定义运行级别
      [root@c6 ~]# vim /etc/inittab

      切换级别
      init N
      • 初始化脚本sysinit
      [root@c6 ~]# wc -l /etc/rc.d/rc.sysinit
      668 /etc/rc.d/rc.sysinit
      • 系统初始化脚本功能
      • 1. 设置主机名
      • 2. 设置欢迎信息
      • 3. 激活udev和selinux
      • 4. 挂载/etc/fstab文件中定义的文件系统
      • 5. 检测根文件系统,并以读写方式重新挂载根文件系统
      • 6. 设置系统时钟
      • 7. 激活swap设备
      • 8. 根据/etc/sysctl.conf文件设置内核参数
      • 9. 激活lvm及software raid设备
      • 10. 加载额外设备的驱动程序
      • 11. 清理操作
      • /etc/rc.d/rc 控制服务脚本的开机自动运行
      [root@c6 ~]# cat /etc/rc.d/rc
      # First, run the KILL scripts.
      # K(kill) 开头表示关闭服务,K后面的数字表示运行顺序,数字越小,越先运行,表示越先被停止,这类服
      # 务通常是要依赖其它服务
      for i in /etc/rc$runlevel.d/K* ; do
      ......
      ......
      done
      # Now run the START scripts.
      # S(start) 开头表示开启服务,S后面的数字表示运行顺序,数字越小,越先运行,表示越先被启动,这类
      # 服务通常是要被其它服务依赖
      for i in /etc/rc$runlevel.d/S* ; do
      ......
      ......
      done
      • chkconfig 命令管理服务
      自定义服务脚本
      #创建服务脚本
      [root@c6 ~]# vim /etc/init.d/testsrv
      #!/bin/bash
      # chkconfig: - 96 3
      # description: This is test service script
      . /etc/init.d/functions
      start(){
      [ -e /var/lock/subsys/testsrv ] && exit || touch /var/lock/subsys/testsrv
      echo $PATH
      action "Starting testsrv"
      sleep 3000 &
      }
      stop(){
      [ -e /var/lock/subsys/testsrv ] && rm /var/lock/subsys/testsrv || exit
      action "Stopping testsrv"
      }
      status(){
      [ -e /var/lock/subsys/testsrv ] && echo "testsrv is running..." || echo
      "testsrv is stopped"
      }
      case $1 in
      start)
      start
      ;;
      stop)
      stop
      ;;
      restart)
      stop
      start
      ;;
      status)
      status
      ;;
      *)
      echo $"Usage $0 {start|stop|status|restart}"
      exit 2
      esac

      #加可执行权限
      [root@c6 ~]# chmod a+x /etc/init.d/testsrv
      #添加服务
      [root@c6 ~]# chkconfig --add testsrv
      #查看
      [root@c6 ~]# chkconfig --list testsrv
      testsrv 0:off 1:off 2:off 3:off 4:off 5:off 6:off
      #开机启动
      [root@c6 ~]# chkconfig testsrv on
      [root@c6 ~]# chkconfig --list testsrv
      testsrv 0:off 1:off 2:on 3:on 4:on 5:on 6:off
      #启动
      [root@c6 ~]# service testsrv start
      /sbin:/usr/sbin:/bin:/usr/bin
      Starting testsrv [ OK ]
      #停止
      [root@c6 ~]# service testsrv stop
      Stopping testsrv [ OK ]
      #删除服务
      [root@c6 ~]# chkconfig --del testsrv
      • service 命令手动管理服务
      [root@c6 ~]# service crond stop
      Stopping crond: [ OK ]
      [root@c6 ~]# service crond start
      Starting crond: [ OK ]
      [root@c6 ~]# service crond startt
      Usage: /etc/init.d/crond {start|stop|status|restart|condrestart|tryrestart|
      reload|force-reload}
      [root@c6 ~]# service crond status
      crond (pid 1756) is running...
      • 非独立服务
      • 一般用 xinetd 服务来管理非独立服务,默认没有安装xinetd,但当安装非独立服务时,就会安装xinetd服务
      [root@c6 ~]# rpm -qi xinetd
      package xinetd is not installed

      #安装非独立服务telnet-server
      [root@c6 ~]# yum install -y telnet-server
      [root@c6 ~]# rpm -ql telnet-server
      /etc/xinetd.d/telnet
      /usr/sbin/in.telnetd
      /usr/share/man/man5/issue.net.5.gz
      /usr/share/man/man8/in.telnetd.8.gz
      /usr/share/man/man8/telnetd.8.gz
      [root@c6 ~]# rpm -q xinetd
      xinetd-2.3.14-29.el6.x86_64

      启动服务
      [root@c6 ~]# service xinetd start
      Starting xinetd: [ OK ]
      [root@c6 ~]# chkconfig telnet on

      telnet服务的23端口,现在被 xinetd 接管
      [root@c6 ~]# ss -tnlp | grep 23
      0 64 :::23 :::*
      users:(("xinetd",3759,5))

      进程中也没有telnet 服务
      [root@c6 ~]# ps aux | grep xinetd
      root 3759 0.0 0.0 21972 1004 ? Ss 18:13 0:00 xinetd -
      stayalive -pidfile /var/run/xinetd.pid
      root 3880 0.0 0.0 103152 820 pts/0 S+ 18:30 0:00 grep xinetd
      [root@c6 ~]# ps aux | grep telnet
      root 3883 0.0 0.0 103152 820 pts/0 S+ 18:30 0:00 grep telnet

      通过telnet 客户端连接,则会激活本机的telnet服务
      [root@rocky86 ~]# telnet 10.0.0.155
      Trying 10.0.0.155...
      Connected to 10.0.0.155.
      #centos6上的 telnet 开启了
      [root@c6 ~]# ps aux | grep telnet
      root 3979 0.0 0.0 12436 972 ? Ss 18:50 0:00 in.telnetd:
      bogon
      root 3982 0.0 0.0 103152 820 pts/0 S+ 18:50 0:00 grep telnet
      • 开机启动文件 rc.local
      • 正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本
      • 不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中
      • /etc/rc.d/rc.local在指定运行级别脚本后运行
      • 注意:默认Ubuntu 无 /etc/rc.local 文件,需要手动创建并添加可执行权限,首行必须有shebang机制
      #创建测试脚本
      [root@c6 ~]# vim rc-local-test.sh
      #!/bin/bash
      sleep 3000
      #加执行权限
      [root@c6 ~]# chmod a+x rc-local-test.sh
      #加入开机启动
      [root@c6 ~]# vim /etc/rc.d/rc.local
      #!/bin/sh
      #
      # This script will be executed *after* all the other init scripts.
      # You can put your own initialization stuff in here if you don't
      # want to do the full Sys V style init stuff.
      touch /var/lock/subsys/local
      /root/rc-local-test.sh

      重启,测试看是否启动
      [root@c6 ~]# uptime
      19:18:33 up 1 min, 1 user, load average: 0.15, 0.04, 0.01
      [root@c6 ~]# ps aux | grep rc-local
      root 1843 0.0 0.0 108112 1244 ? S 19:17 0:00 /bin/bash
      /root/rc-local-test.sh
      root 1890 0.0 0.0 103152 820 pts/1 S+ 19:21 0:00 grep rc-local
      [root@c6 ~]# pstree -p | grep rc-local
      |-rc(982)---S99local(1841)---rc-local-test.s(1843)---sleep(1844)
      • CentOS 6 启动过程总结
      POST #加电自检
      boot loader #引导启动内核
      vmlinux(initrd /initramfs-2.6.32-71.el6.x86_64.img) #临时系统
      rootfs #根文件系统
      /sbin/init #执行init程序
      /etc/inittab #设置默认运行级别
      /etc/rc.d/rc.sysinit #运行系统初始脚本完成系统初始
      化
      /etc/rcN.d/KNN #当前级别下需要停止的服务
      /etc/rcN.d/SNN #当前级别下需要启动的服务
      /etc/rc.d/rc.local #没加服务的自定义开机启动项
      设置登录终端

      • systemd和启动流程
      • Systemd:从 CentOS 7 版本之后开始用 systemd 实现init进程,系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
      • Systemd 新特性
      • 系统引导时实现服务并行启动
      • 按需启动守护进程
      • 自动化的服务依赖关系管理
      • 同时采用socket式与D-Bus总线式激活服务
      • socket与服务程序分离
      • 向后兼容sysv init脚本
      • 使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,systemctl无法与之通信和控制
      • 系统状态快照
      • systemd 中的unit
      • 查看类型

      14-Linux启动流程和内核管理

      • 常见Unit类型说明

      unit类型

      后缀

      作用

      service

      .service

      定义系统服务

      socket

      .socket

      定义进程间通信用的socket文件,可以延迟启动,按需启动

      target

      .target

      不同服务的集合,用于模拟运行级别

      device

      .device

      用于定义内核识别的设备

      mount

      .mount

      定义文件系统挂载点

      automount

      .automount

      文件系统的自动挂载点

      swap

      .swap

      用于标识swap设备

      timer

      .timer

      用于安排激活另一个单元的计时器

      path

      .path

      用于定义文件系统中的文件或目录,常用于当文件系统变化时,延迟激活服务,如spool 目录

      slice

      .slice

      通过 Linux 控制组节点 (cgroups) 限制资源

      scope

      .scope

      systemd 总线接口的信息,常用于管理外部系统进程

      • unit的配置文件
      /usr/lib/systemd/system/ #每个服务最主要的脚本文件目录,
      类似于之前的/etc/init.d/
      /run/systemd/system/ #系统执行过程中所产生的服务脚本,
      比上面目录优先运行
      /etc/systemd/system/ #管理员建立的执行脚本,
      类似于/etc/rcN.d/Sxx的功能,比上面目录优先运
      • service 系统服务管理
      • systemctl COMMAND name.service (格式)
      • 常用命令

      启动服务

      systemctl start name1.service

      [name2.service] ...

      停止服务

      systemctl stop name.service

      重启服务

      systemctl restart name.service

      查看状态

      systemctl status name.service

      禁止服务启动

      systemctl mask name.service

      恢复可启动

      systemctl unmask name.service

      当前是否可启动状态

      systemctl cat name.service

      查看所有已经激活的服务

      systemctl list-units --type service|-t service

      查看所有服务

      systemctl list units type service| t service

      --all|-a

      设定服务开机启动

      systemctl enable name.service

      设定服务开机禁止启动

      systemctl disable name.service

      查看所有服务开机启动状态

      systemctl list-unit-files --type service --all|-a

      查看服务在不同运行级别下的启用禁用

      ls  /etc/systemd/system/*.wants/name.service

      查看服务是否开机自启动

      systemctl is-enabled name.service

      列出失败的服务

      systemctl --failed --type=service

      开机启动并立即启动

      systemctl enable --now name.service

      开机禁用并立即禁用

      systemctl disable --now name.service

      查看服务的依赖

      systemctl list-dependencies name.service

      杀进程

      systemctl kill unitname

      • 注意:对于新安装的服务,在安装完成后,ubuntu系统中会默认启动,centos系统中则是停止状态,需要手动启动
      • service unit 文件格式

      14-Linux启动流程和内核管理

      • 运行级别
      #查看默认启动级别
      [root@rocky86 ~]# systemctl get-default
      graphical.targe

      runlevel 和target 之间的对应关系

      运行级别

      target

      真实文件

      0

      runlevel1.target

      poweroff.target

      1

      runlevel2.target

      rescue.target

      2

      runlevel3.target

      multi-user.target

      3

      runlevel4.target

      multi-user.target

      4

      runlevel5.target

      multi-user.target

      5

      runlevel6.target

      graphical.target

      6

      runlevel7.target

      reboot.target

      常用模式快捷切换

      #切换至救援模式
      systemctl rescue
      #切换至紧急模式
      systemctl emergency
      #关机
      systemctl halt
      systemctl poweroff
      #重启
      systemctl reboot
      #挂起
      systemctl suspend
      #休眠
      systemctl hibernate
      #休眠并挂起
      systemctl hybrid-sleep
      • CentOS 7之后版本引导顺序
      1. UEFi或BIOS初始化,运行POST开机自检
      2. 选择启动设备
      3. 引导装载程序, centos7是grub2,加载装载程序的配置文件: /etc/grub.d/,
      /etc/default/grub ,/boot/grub2/grub.cfg
      4. 加载initramfs驱动模块(可以实现根文件系统的挂载)
      5. 加载虚拟根中的内核
      6. 虚拟根的内核初始化,Centos7使用systemd代替init,第一个进程
      7. 执行initrd.target 所有单元,包括挂载 /etc/fstab
      8. 从initramfs根文件系统切换到磁盘根目录
      9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
      10. systemd执行sysinit.target初始化系统及basic.target准备操作系统
      11. systemd启动multi-user.target 下的本机与服务器服务
      12. systemd执行multi-user.target 下的/etc/rc.d/rc.local
      13. Systemd执行multi-user.target下的getty.target及登录服务
      14. systemd执行graphical需要的服务

      查看 initramfs- uname -r .img的内容

      [root@rocky86 ~]# cd /opt/
      [root@rocky86 opt]# /usr/lib/dracut/skipcpio /boot/initramfs-$(uname -r).img |
      zcat |cpio -idmv
      [root@rocky86 opt]# ls
      bin dev etc init lib lib64 proc root run sbin shutdown sys sysroot
      tmp usr var

      通过systemd-analyze 工具可以了解启动的详细过程

      systemd-analyze plot > boot.html
      sz boot.html

      打开文件如下图

      14-Linux启动流程和内核管理

      • 破解
      2.7 破解 root 密码
      破解CentOS8,7的root密码
      方法一
      启动时任意键暂停启动
      按e键进入编辑模式
      将光标移动linux 开始的行,添加内核参数 rd.break
      按ctrl+x启动
      mount –o remount,rw /sysroot
      chroot /sysroot
      passwd root
      #如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
      touch /.autorelabel
      exit
      reboot

      此方式也适用于ubuntu18.04
      • grub2 安全
      #添加grub2密码,会生在一个配置文件
      [root@rocky86 ~]# ll /boot/grub2/user.cfg
      ls: cannot access '/boot/grub2/user.cfg': No such file or directory
      [root@rocky86 ~]# grub2-setpassword
      Enter password:
      Confirm password:
      [root@rocky86 ~]# ll /boot/grub2/user.cfg
      -rw------- 1 root root 298 Sep 3 14:56 /boot/grub2/user.cfg
      #清空grub2密码
      [root@rocky86 ~]# cat /dev/null > /boot/grub2/user.cfg
      #或者直接删除文件
      [root@rocky86 ~]# rm -f /boot/grub2/user.cfg
      • grub2 修复
      grub2-install /dev/sda #BIOS环境
      grub2-install #UEFI环境

      #删除/boot/下所有内容
      [root@rocky86 ~]# rm -rf /boot/*
      [root@rocky86 ~]# ls /boot/
      #重启,从光盘启动,进救援模式
      #切根
      chroot /mnt/sysimage #centos7
      chroot /mnt/sysroot #centos8
      #安装grub2
      grub2-install /dev/sda #BIOS环境
      grub2-install #UEFI环境
      #挂载光盘
      mount /dev/sr0 /mnt
      #安装内核
      rpm –ivh /mnt/Packages/kernel-3.10.0-1062.el7.x86_64.rpm --force
      #centos7
      rpm -ivh /mnt/BaseOS/Packages/k/kernel-core-4.18.0-372.9.1.el8.x86_64.rpm --
      force #centos8
      #生成配置文件
      grub2-mkconfig -o /boot/grub2/grub.cfg
      #重启
      exit
      reboot
      • 内核参数管理
      • sysctl 命令用来配置linux 系统内核参数,这些参数以文件的形式显示在 /proc/sys/ 目录中,配置项就是目录名加文件名,值就是该文件中的内容注意:不是所有内核参数都是可以被修改的
      常用内核参数
      net.ipv4.ip_forward #是否开启ipv4地址转发
      net.ipv4.icmp_echo_ignore_all #是否禁用ping功能
      net.ipv4.ip_nonlocal_bind #允许应用程序可以监听本地不存在的IP
      vm.drop_caches #缓存回收机制 3 回收所有 2 释放数据区和信息节点
      3 释放页面缓存
      fs.file-max = 1020000 #内核可以支持的全局打开文件的最大数
      vm.overcommit_memory = 0 #超分 0表示进程申请内存时会判断,不够则返回错
      误,1表示内核允许分配所有的物理内存,而不管当前的内存状态如何,2表示内核允许分配超过所有物理内存
      和交换空间总和的内存
      vm.swappiness = 10 #使用swap空间时物量内存还有多少可用,10 表示物
      理存只有10%时才使用swap
      #禁用IPv6
      net.ipv6.conf.all.disable_ipv6 = 1
      net.ipv6.conf.default.disable_ipv6 = 1
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/mooreyxia/5779795,作者:mooreyxia,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Vue课程44-事件绑定-绑定事件并传参

      下一篇:java5-全局变量和局部变量

      相关文章

      2025-05-14 10:33:25

      超级好用的C++实用库之网络

      在网络相关的项目中,我们经常需要去获取和设置设备的IP地址、子网掩码、网关地址、MAC地址等信息。这些信息一般与操作系统相关,在Windows系统和Linux系统上调用的接口是不一样的。

      2025-05-14 10:33:25
      Linux , 参数 , 地址 , 接口 , 网卡 , 返回值
      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。

      2025-05-14 10:03:13
      Linux , void , Windows , 函数 , 操作系统 , 线程
      2025-05-13 09:51:17

      无法启动ogg配置好的抓取以及投递进程

      无法启动ogg配置好的抓取以及投递进程

      2025-05-13 09:51:17
      ogg , 启动 , 抓取 , 进程
      2025-05-13 09:51:17

      使用Kernel 2.6版本的Linux系统运行dbca创建数据库实例时报错ORA-27125

      使用Kernel 2.6版本的Linux系统运行dbca创建数据库实例时报错ORA-27125

      2025-05-13 09:51:17
      dbca , Linux , ORA
      2025-05-12 10:19:12

      SpringBoot学习(6)(Bean对象扫描)(@ComponentScan)

      SpringBoot学习(6)(Bean对象扫描)(@ComponentScan)

      2025-05-12 10:19:12
      Bean , springboot , 启动 , 扫描 , 注解
      2025-05-12 10:19:12

      springboot学习(2)

      springboot学习(2)

      2025-05-12 10:19:12
      Java , main , springboot , web , 启动 , 方法 , 浏览器
      2025-05-12 08:43:47

      C#Windows服务:一些方法(启动、停止等)

      C#Windows服务:一些方法(启动、停止等)

      2025-05-12 08:43:47
      Windows , 停止 , 启动 , 方法 , 服务
      2025-05-12 08:40:18

      Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell变量】

      Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell变量】

      2025-05-12 08:40:18
      Linux , 变量
      2025-05-09 08:51:09

      Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell基本运算符】

      Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell基本运算符】

      2025-05-09 08:51:09
      Linux , Shell , 语法 , 运算符
      2025-05-09 08:51:09

      Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】

      Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】

      2025-05-09 08:51:09
      Linux , Shell , var
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5224612

      查看更多

      最新文章

      【Linux 从基础到进阶】Linux中的用户认证与授权

      2025-05-07 09:09:26

      【Linux】什么是Linux?

      2025-05-07 09:08:54

      【Linux 从基础到进阶】使用 Crontab 进行任务调度

      2025-05-06 09:19:21

      【Linux】密码策略、连接空闲超时时间设置

      2025-04-23 08:18:21

      在 Linux 上监听 Redis:从基础到进阶的实现与扩展

      2025-03-26 09:31:12

      一起学docker系列之五docker的常用命令--操作容器的命令

      2025-03-26 08:57:33

      查看更多

      热门文章

      Linux环境MySql忘记密码

      2023-02-20 10:34:59

      Linux命令之find的用法

      2022-11-16 11:57:57

      Linux搭建ES

      2024-09-25 10:14:21

      Linux rpm 命令参数使用详解[介绍和应用]

      2023-04-06 06:35:33

      Linux进程管理方法介绍

      2024-06-27 09:20:52

      Kali Linux安装AWVS漏扫工具

      2024-09-24 06:31:17

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Linux通配符的使用技巧与文件操作实战

      Linux文件I/O操作(1)

      Linux如何查看JDK的安装路径

      Linux格式化报错mkfs.ext4: undefined symbol: ext2fs_numeric_progress_ops

      在 Linux 上监听 Redis:从基础到进阶的实现与扩展

      Ventoy v1.0.97-U盘引导制作启动盘工具

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号