首页 > 系统相关 >第十四天:Linux启动流程

第十四天:Linux启动流程

时间:2024-01-27 21:22:56浏览次数:31  
标签:systemd name service -- 流程 第十四天 systemctl Linux unit

一、CentOS 6 之前版本的启动流程

1.1 硬件启动POST POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内 存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测 主板的ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出 程序,系统信息设置、开机加电自检程序和系统启动自举程序等 主板的RAM:CMOS互补金属氧化物半导体,保存各项参数的设定,按次序查找引导设备,第一个有引 导程序的设备为本次启动设备 1.2 启动加载器 bootloader 1.2.1 grub 功能和组成 bootloader: 引导加载器,引导程序 Windows: ntloader,仅是启动OS Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装 载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核 Linux的bootloader LILO:LInux LOader,早期的bootloader,功能单一 GRUB: GRand Unified Bootloader, CentOS 5,6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使 用GRUB 2.02 GRUB 启动阶段 primary boot loader : 1st stage:MBR的前446个字节 1.5 stage:MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统 secondary boot loader :2nd stage,分区文件/boot/grub/ 1.2.2 CentOS 6 grub 安装 安装 grub的两种方法: (1) grub-install 安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到 DIR/boot目 录下grub-install --root-directory=DIR /dev/DISK (2) grub命令 #grub grub> root (hd#,#) grub> setup (hd#) 1.2.3 grub legacy 管理 配置文件:/boot/grub/grub.conf <-- /etc/grub.conf stage2及内核等通常放置于一个基本磁盘分区 grub legacy 功用: (1) 提供启动菜单、并提供交互式接口 a:内核参数 e:编辑模式,用于编辑菜单 c:命令模式,交互式接口 (2) 加载用户选择的内核或操作系统 允许传递参数给内核 可隐藏启动菜单 (3) 为菜单提供了保护机制 为编辑启动菜单进行认证 为启用内核或操作系统进行认证   1.3 加载 kernel   kernel 自身初始化过程 1. 探测可识别到的所有硬件设备 2. 加载硬件驱动程序(借助于ramdisk加载驱动) 3. 以只读方式挂载根文件系统 4. 运行用户空间的第一个应用程序:/sbin/init Linux内核特点: 支持模块化:.ko(内核对象),如:文件系统,硬件驱动,网络协议等 支持内核模块的动态装载和卸载 内核组成部分: 核心文件:/boot/vmlinuz-VERSION-release 模块文件:/lib/modules/VERSION-release   1.4 init初始化 POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init (systemd) init程序的类型: SysV: init, CentOS 5之前 配置文件:/etc/inittab Upstart: init,CentOS 6 配置文件:/etc/inittab, /etc/init/*.conf Systemd:systemd, CentOS 7 配置文件:/usr/lib/systemd/system /etc/systemd/system

 init  切换级别

runlevel  查看级别 who -r   查看级别 /etc/inittab    定义运行级别   初始化脚本 sysinit    /etc/rc.d/rc.sysinit

 

 

 

二、systemd和启动流程   CentOS 7 以后版本启动流程 2.1 systemd 特性 Systemd:从 CentOS 7 版本之后开始用 systemd 实现init进程,系统启动和服务器守护进程管理器, 负责在系统启动或运行时,激活系统资源,服务器进程和其它进程 (1)Systemd 新特性   系统引导时实现服务并行启动   按需启动守护进程   自动化的服务依赖关系管理   同时采用socket式与D-Bus总线式激活服务   socket与服务程序分离   向后兼容sysv init脚本   使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,   systemctl无法与之通信和控制   系统状态快照  (2)systemd 核心概念:unit unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听 socket、保存的系统快照以及其它与init相关的信息      service unit: 文件扩展名为.service, 用于定义系统服务 Socket unit: .socket, 定义进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现 按需启动 Target unit: 文件扩展名为.target,用于模拟实现运行级别 Device unit: .device, 用于定义内核识别的设备 Mount unit: .mount, 定义文件系统挂载点 Snapshot unit: .snapshot, 管理系统快照 Swap unit: .swap, 用于标识swap设备 Automount unit: .automount,文件系统的自动挂载点 Path unit: .path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激 活服务,如:spool 目录 

 

2.2 systemctl管理系统服务service unit  命令:systemctl COMMAND name.service #启动:相当于service name start           systemctl start name1.service [name2.service] ... #停止:相当于service name stop      systemctl stop name.service #重启:相当于service name restart    systemctl restart name.service #查看状态:相当于service name status    systemctl status name.service #禁止自动和手动启动:          systemctl mask name.service #取消禁止              systemctl unmask name.service #查看某服务当前激活与否的状态:  systemctl is-active name.service #查看service文件内容        systemctl cat sshd #查看所有已经激活的服务:      systemctl list-units --type|-t service #查看所有服务:            systemctl list-units --type service --all|-a #设定某服务开机自启,相当于chkconfig name on    systemctl enable name.service #设定某服务开机禁止启动:相当于chkconfig name off    systemctl disable name.service #查看所有服务的开机自启状态,相当于chkconfig --list    systemctl list-unit-files --type service #用来列出该服务在哪些运行级别下启用和禁用:chkconfig –list name    ls /etc/systemd/system/*.wants/name.service #查看服务是否开机自启:        systemctl is-enabled name.service #列出失败的服务          systemctl --failed --type=service  #开机并立即启动或停止      systemctl enable --now postfix    systemctl disable  --now postfix #查看服务的依赖关系:      systemctl list-dependencies name.service #杀掉进程:          systemctl kill unitname

 #显示所有单元状态        systemctl 或 systemctl list-units

#只显示服务单元的状态      systemctl --type=service #显示sshd服务单元        systemctl –l status sshd.service #验证sshd服务当前是否活动      systemctl is-active sshd #启动,停止和重启sshd服务      systemctl start sshd.service                   systemctl stop sshd.service                   systemctl restart sshd.service #重新加载配置            systemctl reload sshd.service #列出活动状态的所有服务单元      systemctl list-units --type=service #列出所有服务单元        systemctl list-units --type=service --all #查看服务单元的启用和禁用状态    systemctl list-unit-files  --type=service #列出依赖的单元        systemctl list-dependencies sshd 验证sshd服务是否开机启动    systemctl is-enabled sshd 禁用network,使之不能自动启动,但手动可以  systemctl disable network #启用network      systemctl enable network #禁用network,使之不能手动或自动启动    systemctl mask network #启用network      systemctl unmask network   2.3 service unit文件格式 /etc/systemd/system:系统管理员和用户使用 /usr/lib/systemd/system:发行版打包者使用 

 

Service段的常用选项: Type:定义影响ExecStart及相关参数的功能的unit进程启动类型 simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中 forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服 务。原生父程序在启动结束后就会终止 oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中 dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因 此通常也要同时设定BusNname= 才行 notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消 息 idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这 类的daemon通常是开机到最后才执行即可的服务 EnvironmentFile:环境配置文件 ExecStart:指明启动unit要运行命令或脚本的绝对路径 ExecStartPre: ExecStart前运行 ExecStartPost: ExecStart后运行 ExecStop:指明停止unit要运行的命令或脚本 Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务 RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指 定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。 PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目 录 Install段的常用选项: Alias:别名,可使用systemctl command Alias.service RequiredBy:被哪些units所依赖,强依赖 WantedBy:被哪些units所依赖,弱依赖 Also:安装本服务的时候还要安装别的相关服务     2.4 运行级别  target units:相当于CentOS 6之前的runlevel ,unit配置文件:.target  

 

查看依赖性: systemctl list-dependencies graphical.target 级别切换:相当于 init N systemctl isolate name.target  进入默认target  systemctl default  获取默认运行级别: 相当于查看 /etc/inittab systemctl get-default  修改默认级别:相当于修改 /etc/inittab  systemctl set-default name.target 切换至紧急救援模式: systemctl rescue 切换至emergency模式 systemctl emergency    2.5 设置内核参数  systemd.unit=multi-user.target systemd.unit=emergency.target systemd.unit=rescue.target    2.6 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需要的服务     2.7 破解 root 密码 方法一

 方法二

 

2.8 实现 GRUB2 安全 #添加grub密码 [root@centos8 ~]#grub2-setpassword Enter password: Confirm password: [root@centos8 ~]#ls -l /boot/grub2/   清空密码 [root@centos8 ~]#cat /dev/null > /boot/grub2/user.cfg #或者 [root@centos8 ~]#rm -f /boot/grub2/user.cfg    2.9 修复 GRUB2

 

  2.10 故障排错实战案例   

 

 grub2-install /dev/sda  #BIOS环境

grub2-install #UEFI环境 2安装Kernel #CentOS 7 mount /dev/sr0 /mnt rpm –ivh /mnt/Packages/kernel-3.10.0-1062.el7.x86_64.rpm --force #CentOS 8 mount /dev/sr0 /mnt rpm -ivh /mnt/BaseOS/Packages/kernel-core-4.18.0-147.el8.x86_64.rpm --force 3修复grub配置文件 #生成grub.cfg文件 grub2-mkconfig –o /boot/grub2/grub.cfg 4 退出重启 sync sync exit exit   3 /proc 目录和内核参数管理 /proc目录:内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出 帮助:man proc 内核参数: 只读:只用于输出信息 可写:可接受用户指定“新值”来实现对内核某功能或特性的配置 /proc/sys 设置

 

 

 

 

标签:systemd,name,service,--,流程,第十四天,systemctl,Linux,unit
From: https://www.cnblogs.com/dujy/p/17990797

相关文章

  • 最近在学Linux系统记录一下
    Linux系统维基百科介绍CentOS(CommunityEnterpriseOperatingSystem)是Linux发行版之一,它是来自于RedHatEnterpriseLinux(RHEL)依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的RedHatEnterpriseLinux使......
  • Burp Suite Professional 2024.1.1 (macOS, Linux, Windows) - Web 应用安全、测试和
    BurpSuiteProfessional2024.1.1(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgB......
  • thinkphp8开发简要流程
    安装,根据PHP的版本安装适合的版本composercreate-projecttopthink/thinktp开启多应用模式composerrequiretopthink/think-multi-app创建应用phpthinkbuildadminnginx配置伪静态,把下面的内容保存为nginx.htaccess文件放到应用入口public文件的同级目录下location......
  • Linux之openssl实现私有CA
    一、简介Centos7.9通过openssl工具构建一个私有的CA,用于颁发证书。验证私有CA为httpd应用签署证书二、构建私有CA1、编辑CA的配置文件[root@HLWHOSTtls]#pwd/etc/pki/tls[root@HLWHOSTtls]#cat/etc/pki/tls/openssl.cnf...########################################......
  • 在 Python 的 `glob` 模块中,文件名的大小写敏感性取决于你的操作系统。在 Unix 和 Lin
    在Python的`glob`模块中,文件名的大小写敏感性取决于你的操作系统。在Unix和Linux系统中,`glob`是区分大小写的。然而,在Windows和MacOS中,`glob`是不区分大小写的。例如,如果你在Unix或Linux系统中运行以下代码:```pythonimportglobfiles=glob.glob('*.xlsx')......
  • Linux基础命令笔记(黑马)
    Linux基础命令Linux常用快捷键ctrl+c:强制停止程序运行ctrl+d:退出用户登录或某些特定程序的专属页面(不能用于vim)!历史命令前缀:执行历史中最后使用带有该命令前缀的命令例:!p相当于python、!t相当于tailctrl+r:可输入历史命令关键字搜索到想要到命令,按回车直接执行,按左......
  • Linux命令:userdel 删除用户账户
    userdel命令使用1.删除用户账户$sudouserdeluser12.删除用户账户,并删除用户『主目录』和『邮件』【-r/--remove】$sudouserdel-ruser19$sudouserdel--removeuser203.强制删除用户账户【-f/--force】$sudouserdel-fuser1$sudouserdel--force......
  • [MySQL]流程控制语句
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17991087出自【进步*于辰的博客】参考笔记三,P32.5。目录1、选择语句1.1if1.2case1.2.1形式一1.2.2形式二2、循环语句2.1while2.2repeat2.3loop最后用于测试的数据......
  • 企业计算机服务器中了mallox勒索病毒怎么办,mallox勒索病毒解密流程
    随着网络技术的不断发展,网络安全威胁无处不在,这给企业的正常生产生活带来了极大影响,因此,做好企业的运维工作至关重要。近日,云天数据恢复中心接到北京某连锁品牌酒店的求助,企业的计算机服务器中了mallox勒索病毒导致企业系统内的重要数据被加密,无法正常使用,严重影响了企业正常运行,经......
  • 计算机服务器中了halo勒索病毒怎么办,halo勒索病毒解密处理流程
    计算机技术的发展与应用为企业的生产生活提供了坚实基础,但同时也为网络安全威胁制造了有利条件。近期,网络上的勒索病毒非常嚣张,给企业的计算机服务器带来严重威胁。近日,云天数据恢复中心接到山东某制造公司的求助,企业的计算机服务器被halo勒索病毒攻击,导致系统所有数据被加密无法使......