马哥教育第十三天系统启动流程、grub、模块、bash函数

  1. kernel的功能:进程管理、文件系统、硬件驱动、内存管理、安全功能:SELinux、网络子系统,标准库:glibc

    进程是运行在cpu上但用户进程受控于内核,用户进程需要完成特权指令时将触发软中断由用户模式转为内核模式,由内核代为执行特权指令并把结果返回给用户进程。

    Linux为单内核体系结构但是它支持模块化,模块还可以动态装载或卸载,Linux内核:核心 + 外围模块

    核心:/boot/vmlinux-VERSION-release

    模块:/lib/modules/VERSION-release,内核模块一般都以.ko结尾: kernel object

    ramdisk: /boot/initramfs-VERSION-release.img:在内核启动过程中装载根文件系统时有用

    linux支持多版本内核共存,在以上目录中会体系多版本号

    linux系统启动流程:POST:加电自检,cpu寻址空间由ROM+RAM共同组成:ROM(bios)今后会被EFI所代替。

    引导次序:按次序找引导设备,第一个有引导程序的设备为启动设备

    MBR:Master Boot Record寻找启动设备第一个扇区(sector):512bytes组成(446: bootloader、64: partation table、2: 5A)

    运行bootloader: Centos5/6linux为传统GRUB(GRand Unified Bootloader),提供可启动内核,并自身可识别内核所在分区的文件系统,当内核启动后bootloader把控制权交给内核自己退场

    内核和ramdisk一同被GRUB装载在内存中,ramdisk提供硬盘驱动模块,内核是在内存中结合cpu运行

    kernel内核启动后:自身初始化、识别硬件、装载驱动程序、以只读方式装载根文件系统、/sbin/init,当内核把init进程启动后整个启动过程结束

    CentOS 5: SysV, init文件在:/etc/inittab --> /etc/rc.d/rc.sysinit

    entOS 6 Upstart,init文件功能被分为多个文件 /etc/init/*.conf --> /etc/rc.d/rc.sysinit

    CentOS 7 Systemd:系统启动文件/usr/lib/systemd/system/

    启动步骤一、CentOS 5: kernel 会根据配置文件 /etc/inittab启动系统第一个进程 /sbin/init

    设定系统默认运行级别:共有7个级别0-6:

    0:关机、1:单用户模式 single user mode、2: multi user mode,非完全多用户模式不支持NFS功能、3:完全多用户模式,文本接口、4:未使用,预留级别、5:完全多用户械,图形接口、6: 重启。切换级别:init #

    启动步骤二、通过/etc/rc.d/rc.sysinit脚本,进一步初始化系统

    启动步骤三、启动指定运行级别的默认启动服务,停止指定运行级别下默认关闭服务;在/etc/rc.d/下有各个运行级别对应目录,每个目录都记录着程序在该级别运行状态、S##: 启动的服务、K##:停止的服务、##:01-99,数字越小,越优先启动或关闭;

    脚本如果期望能够被chkconfig命令使用,要在脚本中添加如下行:

    # chkconfig: - 85 15

    -:当此脚本由chkconfig控制时时,默认哪些级别就是开启的,也可以指定级别如:# chkconfig: 345 85 15,当chkconfig控制该程序时只对345级别生效。85为开启优先级。15为关闭优先级。添加程序如下:

    复制脚本到/etc/init.d/下,用 chkconfig --add 添加脚本启动项并在各启动级别目录下创建链接文件,chkconfig --del删除自启动项,chkconfig SRV_SCRIPT {on|off}设定启动或关闭项,默认2345,也可以针对某一个级别设定相关服务例如:chkconfig --level

    /etc/rc.d/rc.local (/etc/rc.local):该脚本为系统启动完成最后运行一个脚本。

    启动步骤四:定义一些组合键的功能,通常是Ctrl+Alt+Delete

    启动步骤五:初始化字符终端

    启动步骤六:如果有需要,启动图形终端

  2. CentOS 6: /etc/inittab,由/etc/init/*.conf 下配置文件定义init的初始化动作,由upstart调用,程序为/sbin/init

    /etc/rc.d/rc.sysinit: 系统初始化脚本包括如下操作(设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数、显示文本欢迎信息、激活SELinux和udev、挂载/etc/fstab文件中定义的其它文件系统、激活swap、检测根文件系统,并以读写方式重新挂载、设置系统时钟、根据/etc/sysctl.conf设置内核参数、激活LVM和RAID设备、加载额外设备的驱动程序、清理操作)

    初始化流程:POST --> (BIOS)boot sequence --> MBR(bootloader) --> kernel + ramdisk(5和6不同的文件名称,initrd、initramfs) --> mount rootfs (ro) --> /sbin/init (CentOS 5: /etc/inittab, CentOS6 /etc/init/*.conf)

    设定默认运行级别 --> 使用/etc/rc.d/rc.sysinit初始化系统 --> 分别启动并关闭指定服务 -->Ctrl+Alt+Delete组合键 --> 启动字符终端 --> 启动图形终端

    GRUB: GRand Unified Bootloader,grub程序由两段组成:stage1: MBR (0柱面 0磁道 1扇区)只为读取随后文件系统指定扇区。stage1_5: MBR随后的扇区装载文件系统类型。stage2: 读取grub.conf配置文件,并实现引导功能的扩展

    GRUB功能:

    1、提供菜单,并提供交互式接口(e: 进入编辑模式 在内核后添加single,后按b就可以进入单用户模式、c:进入命令行接口模式)

    2、选择要启动的内核或系统(允许传递引导参数给内核,选择界面可隐藏)

    3、为编辑功能提供保护机制(选择运行指定的内核得先输入密码、使用e命令得先输入密码)

    grub命令行接口:

    root:指定哪个分区为要启动的系统或内核文件所在的分区,所有硬盘都识别为hd,不同的硬盘基于数字标识:如hd0, hd1等,同一个硬盘上的不同分区,也使用数字标识,如root (hd0,0)

    find (DEVICE)/path/to/file,用于查找内核在那个分区上。

    kernel: 指定要运行的内核文件,例如:kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda3,只读模式挂载根文件系统事先需要知道根文件系统位置,必须指定ramdisk文件

    initrd:为要运行的内核指定其可用的ramdisk文件例如:initrd /initramfs-2.6.32-358.el6.x86_64.img

    boot: 启动此前配置好的内核或系统。

    grub.conf文件在/boot/grub目录下。配置文件内容说明:

    default=: 选择第几个title配置的内核或系统,各title从0开始编号

    timeout=#: 菜单显示的超时时长;

    splashimage=/path/to/some_image_file:指定菜单的背景图片;此图片只能为14bits色,xpm格式,gzip压缩;

    hiddenmenu: 隐藏菜单

    title :显示于菜单中的标题

    root (hd0,0):指定装载盘符

    kernel /vmlinuz-2.6.32-504.12.2.el6.x86_64 ro root=/dev/sda2 selinux=0 init=/bin/bas:指定内核文件和挂载方式,

    initrd /initramfs-2.6.32-504.12.2.el6.x86_64.img:指定ramdisk文件

    grub保护机制:

    生成密码:grub-md5-crypt

    保护编辑功能如(进入单用户模式和命令行模式),则需要title之外的添加:password --md5 密码串

    保护使用某内核,则需要内核对应的title之下添加,password --md5 密码串

    安装grub的方式:使用grub-install命令,

    安装方式一,当前所在硬盘上安装例如:grub-install /dev/sda

    安装方式二,在第二块盘上添加grub常用选项:--root-directory=path,该路径必须是内核和initrd文件所在boot的父目录,例如:在/mnt/boot,该指定目录为/mnt,挂载方式:grub-install --root-directory=/mnt /dev/sdb

  3. 总结启动次序:POST --> 引导次序(BIOS)--> BootLoader(MBR) --> kernel + ramdisk (临时根) --> 根切换 (rootfs) --> /sbin/init (配置文件)

    配置文件:设置默认运行级别 --> 指定系统初始化脚本进行系统初始化 --> 启动服务(关闭服务)(/etc/rc.d/rc#.d, /etc/rc.d/init.d/) --> /etc/rc.d/rc.local -> 设置CtrlAltDel组合的功用 --> 启动终端(mingetty),并在终端附加登录程序(login) --> 如果级别为5, 则要启动 X server

    nsswitch: 检查用户帐号否存在如果存在,将其解析为UID;nsswitch是库文件,而非服务:在/usr/lib64/libnss*、/lib64/libnss*

    pam: pluggable authentication module, 做用户认证,库 (API):/lib64/security/*

    GRUB: GRand Unified Bootloader,(stage1、stage1_5、stage2)

    Linux内核:单内核,模块化,内核的组成部分:/boot/vmlinuz-VERSION、/lib/modules/VERSION/下*.ko(kernel object)

    内核模块管理:lsmod: 显示内核已装载模块

    动态装卸载模块:卸载:modprobe -r MOD_NAME或rmmod MOD_NAME、装载:modprobe MOD_NAME 或 insmod /path/to/module_file,用insmod 必须写明模块的完整路径。

    查看模块详细信息:modinfo MOD_NAME。字段说明:depends显示依赖模块

    检查并生成模块间依赖关系的命令:depmod

  4. bash编程函数:可调用:函数名出现的地方,会被自动替换为函数体;

    函数的返回值:函数的执行结果返回值:代码输出echo, print,命令执行后返回的结果

    执行状态返回值:函数体中最后一次执行的命令状态结果,自定函数执行状态的返回值:return

    函数可以接受参数:在函数体中调用函数参数:位置参数($1, $2,$#, $*, [email protected])

时间: 2024-12-30 04:30:42

马哥教育第十三天系统启动流程、grub、模块、bash函数的相关文章

马哥教育第二十三MySQL基础应用入门

1.MySQL基础应用入门                安装mariadb-10.0.19:                      vim /usr/local/mariadb-10.0.19-linux-x86_64/INSTALL-BINARY                                               cd /usr/local                      ln -sv mariadb-10.0.19-linux-x86_64 mysql

马哥教育M28-第5-7天的学习总结

马哥M28-第五天. linux安全的上下文: 进程的发起者       命令       对象 root           ping        127.0.0.1 root           touch       testfile1 primary group :主要组.私有组 supplementary  group : 辅助组.附加组.公有组 /etc/passwd:(里面记录的用户的密码映射到了/etc/shadow) pwconv :将passwd当中的密码映射到了/etc/

《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》

GIAC.GOPS大会完美落幕 除了你.我.他,还有马哥教育陪你走过 马哥教育协办过多次全球大会,此次GIAC.GOPS全球互联网大会完美落幕,作为协办方我们也是很荣幸!马哥教育的创始人马哥带着马帮学员,让他们有更多的机会与大咖们交流分享,建立更广的人脉圈子. 本次大会可谓是大咖云集的一场盛会!各种技术总监.CTO. 通过本次大会就可以感受到马哥教育的教学精神.马哥教育不仅可以让你学到专业的技能,还有更多的机会与大咖们分享交流.我们不仅要学的好,丰富的人脉资源是我们职场上必要部分!相信在参加本次

马哥教育面授班-标准I/O和管道-课后小作业-2016年7月28

马哥教育面授班-7月28号作业 1 .将/etc/issue 文件中的内容转换为大写后保存至/tmp/issue.out 文件中 [[email protected] ~]# tr 'a-z' 'A-Z' </etc/issue | >> /tmp/issue.out [[email protected] ~]# cat /tmp/issue.out  CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \T \N \D \S MAGE EDUCATIO

马哥Linux培训马哥教育到底怎么样?马哥教育好不好?我来讲讲我的曲折经历!

2016年是我很迷茫的一年,不知道该学什么,不知道该去哪里,当时也有去培训的打算,也不确定培训什么,php?前端?or运维,同学有做PHP的,也有Java的也有前端的,也有做运维的,他们的建议我也听了不少,但是自己还是犹豫不决,怕花了钱到时找不到工作,后来感觉运维相对开发要容易一些,听同学说PHP今年也降温不少,学的人太多,没前两年好找了,当然,学得特好再另说.后来就去马哥考察了,当时去的时候是早上8点左右,看到有马哥的学员在校门口买早餐,包子,茶叶蛋什么的,我也没听课进去看看教室和学员聊了几句

【挨踢人物传】马永亮:感悟学习三境界 引领马哥教育的崛起(第19期)

[编者有话]        本期的嘉宾马永亮,一次误以为是"擅长"的选择,开始结缘计算机,然而当真正接触后才发现犹如"井底之蛙",此前的擅长根本不值一提,从天堂到地狱的落差,没有挫败他的信心和追求,反而激起了他更加强烈的求知欲望,在IT的道路上不断的成长感悟-- [本期人物档案] 个人信息: 51CTO账号:马哥教育 姓名:马永亮 性别:男 所在地:河南郑州 教育信息:研究生 关键词:马哥教育创办人 Linux系统运维专家 51CTO专家博主 51CTO学院签约讲师

马哥教育千万级PV实战大揭秘

又到了激动人心的架构实战项目实践时间,马哥教育面授班的学员都很期待这一刻的到来,因为经过此次洗礼,能让自己成长更多! 上周二,马哥教育张Sir带领18期面授班的学员们做千万PV级别的电商架构实战项目!新增的多台R710企业级服务器设备,轻松搭建大数据.云计算等高端实验环境,让实战,更加真实!相信经过这场实战的洗礼,小伙伴们架构技能会有更大提升! [张Sir生动讲解] [R710企业级服务器] [项目需求] 前期筹划阶段 马哥教育第18期面授班学员分成8个小组.每组的小组长先进行项目架构,然后按照

2016马哥教育重磅来袭--Python实战网络班

如何确保自己职场快人一步?如何成就非凡之路?前景开阔.上手容易.名师阵容.丰富一线案例的马哥2016全新python开发课程,你值得拥有! 在众多朋友的期待与欢呼中,马哥教育重磅推出了Python实战网络班. 到底马哥2016全新Python实战班都有什么特别之处呢?下面就来一睹为快吧!         如果有那么一丝丝的心动,请不要压抑自己的感情!速速联系马哥教育课程顾问们吧!(QQ:1661815153.2813150558.1660809109~)

一年一度,马哥教育年终福利全面来袭

一年一度,马哥教育年终福利全面来袭,等你来抢!扫描图片中二维码查看 满6000减200+腰枕 满8000减400+机械键盘 满10000减500+商用书包 推荐朋友送 (机械键盘.商用书包.专题课程)任选其一