Linux 的开机流程分析
1. 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置;
2. 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序);
3. 依据 boot loader 的设定加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序;
4. 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 信息;
5. init 执行 /etc/rc.d/rc.sysinit 档案来准备软件执行的作业环境 (如网络、时区等);
6. init 执行 run-level 的各个服务之启动 (script 方试);
7. init 执行 /etc/rc.d/rc.local 档案;
8. init 执行终端仿真程序 mingetty 来启动login 程序,最后就等待用户登入啦
即:BIOS自检与硬件检测--》bootloader加载kernel 自检与硬件检测--》kernel呼叫init --》init呼叫 rc.sysinit 系统初始化--》init呼叫各服务初始化--》init呼叫rc.local 本地用户设置初始化--》进入登录程序
BIOS (Basic Input Output System)
BIOS 是透过硬件的 INT13 中断功能来读取 MBR 的;
Boot Loader 程序安装在哪里呢?就在开机装置的第一个扇区 (sector) 内,也就是我们一直谈到的MBR (Master Boot Record, 主要启动记录区)。
/sbin/init  /etc/inittab与runlevel
第一支程序 init 及配置文件
/sbin/init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语系处理、文件系统格式及其他服务的启动等。 而所有的动作都会透过init 的配置文件,亦即是 /etc/inittab 来规划,而 inittab 内还有一个很重要的设定项目,那就是默认的runlevel (开机执行等级) ;
run level 分为 7 个等级:
 0 - halt (系统直接关机)
 1 - single user mode (单人维护模式,用在系统出问题时的维护)
 2 - Multi-user, without NFS (类似底下的 runlevel 3,但无 NFS服务)
 3 - Full multi-user mode (完整的有网络功能的纯文本模式)
 4 - unused (系统保留功能)
 5 - X11 (与runlevel 3 类似,但加载使用 X Window)
 6 - reboot (重新启动)
/etc/inittab 的内容与语法
档案的语法是利用冒号 (:) 将设定分隔成为四个字段,每个字段的意义与说明如下:
[设定项目]:[run level]:[init 的动作行为]:[指令项目]
1. 设定项目:最多四个字符,代表 init 的主要工作项目,只是一个简单的代表说明。
2. run level:该项目在哪些 run level 底下进行的意思。如果是 35 则代表 runlevel 3 与 5 都会执行。
3. init 的动作项目:主要可以进行的动作项目意义有:
4. 指令项目:亦即应该可以进行的指令,通常是一些 script 。
/etc/rc.d/rc.local
用户自定义开机启动程序
make  confing 流程
动态与静态函数库
静态(Static)特色:
扩展名:                 (扩展名为 .a)这类的凼式库通常扩展名为 libxxx.a 的类型
编译行为:       这类凼式库在编译的时候会直接整合到执行程序当中,所以利用静态凼式库编译成的档案会比较大一些;
独立执行的状态:    这类凼式库最大的优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取凼式库的内容 。
升级难易度:      虽然执行档可以独立执行,但因为凼式库是直接整合到执行档中, 因此若凼式库升级时,整个执行档必须要重新编译才能将新版的凼式库整合到程序当中。                               也就是说,在升级方面,只要凼式库升级了,所有将此凼式库纳入的程序都需要重新编译!
动态 (Dynamic)特色:
扩展名:                    (扩展名为 .so)这类凼式库通常扩展名为 libxxx.so 的类型;
编译行为:                动态凼式库与静态凼式库的编译行为差异挺大的。 与静态凼式库被整个捉到程序中不同的,动态凼式库在编译的时候,在程序里面只有一个『 指向                                        (Pointer)』的位置而已。也就是说,动态凼式库的内容并没有被整合到执行档当中,而是当执行档要使用到凼式库的机制时, 程序才会去读取凼式库来使                                 用,由于执行文件当中仅具有指向动态凼式库所在的指针而已, 并不包含凼式库的内容,所以档案大小比较小点;
独立执行的状态:    这类型的凼式库所编译出来的程序不能被独立执行, 因为当我们使用到凼式库的机制时,程序才会去读取凼式库,所以凼式库档案『 必须要存在』才行,                                 而且,凼式库的『 所在目录也不能改变』,因为我们的可执行文件里面仅有『指针』即当要取用该动态凼式库时, 程序会主动去某个路径下读取。所以动                                 态凼式库可不能随意移动或删除,会影响很多相依的程序
升级难易度:      虽然这类型的执行档无法独立运作,然而由于是具有指向的功能, 所以,当凼式库升级后,执行档根本不需要进行重新编译的行为,因为执行档会直接指                                 向新的凼式库档案 (前提是凼式库新旧版本的档名相同喔!)。
RPM 
安装
[root@www ~]# rpm -ivh package_name
选项与参数:
-i :install 的意思
-v :察看更细部的安装信息画面
-h :以安装信息列显示安装进度
范例一:安装 rp-pppoe-3.5-32.1.i386.rpm
[root@www ~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
Preparing... ####################################### [100%]
1:rp-pppoe ####################################### [100%]

范例二、直接由网络上面的某个档案安装,以网址来安装:
[root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm

RPM 升级与更新 (upgrade/freshen)
-Uvh     后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统自动更新至新版;
-Fvh     如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装;亦即只有已安装至你 Linux 系统内的软件会被『升级』!
RPM 查询 (query)
root@www ~]# rpm -qa <==已安装软件
[root@www ~]# rpm -q[licdR] 已安装的软件名称 <==已安装软件
[root@www ~]# rpm -qf 存在亍系统上面的某个文件名 <==已安装软件
[root@www ~]# rpm -qp[licdR] 未安装的某个文件名 <==查阅 RPM 档案
选项与参数:
查询已安装软件的信息:
-q :仅查询,后面接的软件名称是否有安装;
-qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称;
-qi :列出该软件的详绅信息 (information),包括开发商、版本等说明等;
-ql :列出该软件所有的档案与目录所在完整文件名 (list);
-qc :列出该软件的所有配置文件 (找出在 /etc/ 底下的檔名而已)
-qd :列出该软件的所有说明文件 (找出不 man 有关的档案而已)
-qR :列出与该软件有关的相依软件所有的档案 (Required 的意思)
利用 yum 进行查询、安装、升级与移除功能
[root@www ~]# yum [option] [查询工作项目] [相关参数]
选项与参数:
-y   :    当 yum 要等待用户输入时,这个选项可以自动提供 yes 的响应;
--installroot=/some/path :将该软件安装在 /some/path 而不使用默认路径
[查询工作项目] [相关参数]:这方面的参数有:
search :  搜寻某个软件名称或者是描述 (description) 的重要关键字;
info :      同上,不过有点类似 rpm -qai 的执行结果;
provides:从档案去搜寻软件!类似 rpm -qf 的功能!
[root@www ~]# yum [option] [查询工作项目] [相关参数]
选项与参数:
install   :后面接要安装的软件!
update : 后面接要升级的软件,若要整个系统都升级,就直接 update 即可-q
remove  : 移除后面接的软件;  
备份策略
1.系统基本设定信息
 /etc/   整个目录
 /home 整个目录
 /var/spool/mail
 /boot
 /root
 如果你自行安装过其他的套件,那么 /usr/local/ 或 /opt 也最好备份一下!
2.网络服务数据信息
 软件本身的配置文件案,例如:/etc/ 整个目录,/usr/local/ 整个目录
 软件服务提供的数据,以 WWW 及 MySQL 为例:WWW 资料:/var/www 整个目录或 /srv/www 整个目录,及系统的用户家目录MySQL : /var/lib/mysql 整个目录
 其他在 Linux 主机上面提供的服务之数据库档案!
由于硬件或者费用的限制,鸟哥推荐需要备份目录:
 /boot
 /etc
 /home
 /root
 /usr/local(或者是 /opt 及 /srv 等)
 /var(注:这个目录当中有些暂存目录则可以不备份!)
备份用储存媒体的选择
1.硬件备份,如硬盘,光盘等
2. 异地备援系统,将数据定期备份到异地机器当中
 
备份的种类、频率与工具:
积累备份和差异备份
完整备份之累积备份 (Incremental backup)
如果你的主机是负责相当重要的服务,那么当系统损毁时,希望在最短的时间复原系统,仅仅备份关键数据时不行的,因为只有关键数据,还得重新安装新的disturbtion,还的考虑新旧版本之间的差异问题,还得进行数据的移植与系统服务的重建;所以需要完整备份;
积累备份:
累积备份操作意图  
仅仅与前一次累计结果相比较,备份与前一次累计的不同之处;
累积备份使用的备份软件
dd, cpio, dump/restore
# 1. 用 dd 来将 /dev/sda 备份到完全一模一样的 /dev/sdb 硬盘上:
[root@www ~]# dd if=/dev/sda of=/dev/sdb
# 由于 dd 是读取扇区,所以 /dev/sdb 这颗磁盘可以不必格式化!非常的方便!
# 只是你会等非常非常久!因为 dd 的速度比较慢!
# 2. 使用 cpio 来备份不还原整个系统,假设储存媒体为 SATA 磁带机:
[root@www ~]# find / -print | cpio -covB > /dev/st0 <==备份到磁带机
[root@www ~]# cpio -iduv < /dev/st0 <==还原
假设 /home 为一个独立的文件系统,而 /backupdata 也是一个独立的用来备份的文件系统,那如何使用 dump 将/home 完整的备份到 /backupdata 上呢?可以像底下这样进行看看:
# 1. 完整备份
[root@www ~]# dump -0u -f /backupdata/home.dump /home
# 2. 第一次进行累积备份
[root@www ~]# dump -1u -f /backupdata/home.dump.1 /home
差异备份:
差异备份与累积备份有点类似,也是需要进行第一次的完整备份后才能够进行。只是差异备份指的是:每次的备份都是与原始的完整备份比较的结果。 所以系统运作的越久,离完整备份时间越长, 那么该次的差异备份数据可能就会越大!差异备份的示意图如下所示:
差异备份常用的工具与累积备份差不多!因为都需要完整备份嘛!如果使用 dump 来备份的话,那么每次备份的等级(level) 就都会是 level 1 的意思啦!当然啦,你也可以透过 tar的 -N 选项来备份喔!如下所示:
[root@www ~]
# tar -N '2009-06-01' -jpcv -f /backupdata/home.tar.bz2
/home
# 只有在比 2009-06-01 还要新的档案,在 /home 底下的档案才会被打包进home.bz2 中!
# 有点奇怪的是,目录还是会被记录下来,只是目录内的旧档案就不会备份。
此外,你也可以透过 rsync 来进行镜像备份喔! 这个 rsync 可以对两个目录进行镜像 (mirror) ,算是一个非常快速的备份工具!简单的指令方法为:
[root@www ~]# rsync -av 来源目录 目标目录
# 1. 将 /home/ 镜像到 /backupdata/home/ 去
[root@www ~]# rsync -av /home /backupdata/
# 此时会在 /backupdata 底下产生 home 这个目录来!
[root@www ~]# rsync -av /home /backupdata/
# 再次进行会快很多!如果数据没有更动,几乎不会进行任何动作!
总结
  • Linux启动流程

    • BIOS自检与硬件检测-->bootloader加载kernel 自检与硬件检测-->kernel呼叫init -->init呼叫 rc.sysinit 系统初始化-->init呼叫各服务初始化-->init呼叫rc.local 本地用户设置初始化-->进入登录程序
    • 系统初始化,服务初始化,用户设置初始化;
    • 第一支程序init及配置文件
      • /sbin/init,准备环境,各种初始化
      • /etc/inittab配置文件及语法,默认开启runlevel(7个等级)
        • [设定项目]:[run level]:[init 的动作行为]:[指令项目]
    • /etc/rc.d/rc.local
      • 用户自定义开机启动程序
  • make config 流程
    • make依据makefile的设定,呼叫原始码,函数库,编译器来编译。
    • 动态库与静态库
      • libxxx.so动态库,libxxx.a静态库
      • 静态库,整合到程序当中,不需要再向外部请求函数库,升级困难,需要把库重新编译到程序中。
      • 动态库,程序在编译的时候只指向动态库的位置,没有被编译到程序中,程序需要执行的时候到指定位置去执行。易于升级
  • RPM
    • 安装

      • rpm -ivh package_name
      • 可以网址来安装
    • 查询
      • rpm -qa 已安装软件
  • yum
    • yum [option] [查询工作项目] [相关参数] 选项与参数:

      • install   :后面接要安装的软件
      • update : 后面接要升级的软件,若要整个系统都升级,就直接 update 即可
      • remove  : 移除后面接的软件;
      • search,info;
  • 备份策略
    • 累计备份
    • 完整备份
    • 差异备份
      • 与累计备份有些类似,只是差异备份每次只能与完全备份比较并备份。累计备份,可以针对上一次累计结果来备份。
  • 备份工具
    • dd

      • 读取扇区,磁盘不必格式化。但速度较慢
      • dd if=/dev/sda of=/dev/sdb
    • dump/restore
      • 完整备份

        • dump -0u -f /backup/home.dump /home
      • 第一次进行累计备份
        • dump -1u -f /backup/home.dup.1 /home
        • 针对0 进行一次累计备份
    • tar
      • 根据时间点来备份

        • tar -N '2009-06-01' -jpcv -f /backupdata/home.tar.bz2 /home
        • 只有比2009-06-01还要新的档案,才备份
    • rsync
      • 镜像备份,速度快
      • rsync -av  来源目标  目标目录
        • rsync -av  /home /backup

转载于:https://www.cnblogs.com/Aiapple/p/4910618.html

linux基础学习7相关推荐

  1. 鸟哥的linux 实训教程,鸟哥的Linux基础学习实训教程

    1.理想的Linux上机实践课程 每周一次.每次三小时的学与练 本书所有例题讲解,均经过鸟哥在大专院校实施多年来的测试,对于学生的理解具有相当满意的效果. 2. 提供一致性教学环境 让学习者不再有陌生 ...

  2. 最全的linux基础学习视频

    最全的linux基础学习视频,千锋教育的Linux视频课程免费下载地址: http://pan.baidu.com/s/1c13ddvE,更多精彩的视频在不断的更新中,OpenStack覆盖了网络.虚 ...

  3. Linux基础学习之Day7-2-LVM管理

    Linux基础学习之从入门到精通Day7-2 LVM管理 在线扩容 online 数据迁移 online 创建LVM LVM叫逻辑卷管理 VG扩展/缩小 LV扩容 文件系统扩容 在线扩容及在生产中 3 ...

  4. 鸟哥私房菜linux基础学习笔记 1

    linux基础学习笔记 计算机:辅劣人脑的好工具 1.计算机硬件癿五大单元 输入单元:包括键盘.鼠标.卡片阅读机.手写板.触控屏幕等等一堆: 主机部分:这个就是系统单元,被主机机壳保护住了,里面有 C ...

  5. Linux基础学习(十七)--- wiki,jira 搭建、公司面试常见问题

    Linux基础学习(十七) wiki,jira 搭建.公司面试常见问题 mysql中 utf8 支持中文字符 du -sh * 查看当前目录所有文件大小 wiki 企业多人协作系统–>企业级文档 ...

  6. linux基础学习——linux的文件权限和目录配置

    linux基础学习--linux的文件权限和目录配置 1.用户和用户组和其他人概念: 三个概念的前提宗旨:linux是一个多人多任务的系统环境.如果不对文件作出一个权限限制的话.任何人都能操作这份文件 ...

  7. Linux基础学习之Day12-网络管理基础

    Linux基础学习之从入门到精通Day12 网络管理基础 使用NetworkManager管理网络 网络管理器(NetworkManager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保 ...

  8. Linux基础学习之Day7-6-Mount 挂载详解

    Linux基础学习之从入门到精通Day7-6 Mount 挂载详解 常用挂载选项详解 挂载设备文件.卷标.UUID ISO文件创建及挂载 挂载选项 -t 文件系统类型 -o 选项1,选项2- 示例: ...

  9. Linux绝对权限和相对权限法,Linux基础学习笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 学习计划里有一些关于Linux的知识,所以今后一段时间用来学习Linux的基础知识和服务器架设知识,平时一直在用,但是一 ...

  10. Linux基础学习(Ubuntu)

    Linux非常基础的知识学习和总结 内容参考: 1.man page: 2.鸟哥的Linux私房菜-基础学习篇. 本文章PDF版(我懒得在这上面排版了.都是为了学习,请支持原创): 链接: 百度云盘 ...

最新文章

  1. Microsoft office 2007 word PPT 转pdf的插件(转)
  2. sybase 数据导入mysql_Windows环境下Sybase12.5 数据库创建与导入数据库.docx
  3. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
  4. 在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
  5. 设计模式札记——单例模式(Singleton Pattern)
  6. 2021软考网络工程师2004-2020年真题含答案解析(最新)
  7. 一级计算机办公软件,计算机一级与高级办公软件
  8. CSS实现字体镂空效果、阴影效果、字体阴影效果
  9. dnSpy反编译C#编译以后dll文件并调试
  10. ArcGIS导入excel文件
  11. Android中控件设置英文文本内容时区分大小写
  12. 全球及中国冷冻减脂行业需求趋势及投资策略分析报告2022-2028年
  13. 公司企业邮箱怎么注册申请,教你选择适合的企业邮箱
  14. SpringBoot 接口数据加解密
  15. python八进制表示_八进制python
  16. adb命令获取sys_adb shell dumpsys 命令
  17. IOS端向下滑动骤停
  18. 总结 nginx access.log 太大如何清理
  19. Spring Cloud自定义Hystrix请求命令 1
  20. Cognos 配置启动错误

热门文章

  1. ScheduleThreadPoolExecutor的工作原理与使用示例
  2. dos2unix批量转换的脚本
  3. Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式.. .. .....
  4. MyEclipse 导出 javadoc 乱码解决
  5. UVA10881蚂蚁
  6. hdu4982 暴搜+剪枝(k个数和是n,k-1个数的和是平方数)
  7. 01-Vue博客后台管理页面框架搭建
  8. 【Linux 内核】进程管理 task_struct 结构体 ⑤ ( files 字段 | nsproxy 字段 | 信号处理相关字段 | 信号量和共享内存相关字段 )
  9. 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
  10. 【Android 插件化】基于插件化引擎的“恶意应用“与“良性应用“区别 | 恶意插件化应用特征