`
mmdev
  • 浏览: 12894343 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Linux学习笔记<基本操作2>

 
阅读更多
linux引导流程解析

   这一部分属于理论知识,感兴趣的和我一起了解一下。
  linux的引导流程,也就是linux的启动过程,启动顺序是是怎样的,linux为我们启动了哪些服务。

系统引导流程:  

  1. BIOS自检
  2. 启动GRUB/LILO
  3. 加载内核
  4. 执行init进程
  5. 通过/etc/inittab文件进行初始化
BIOS自检
计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On SelfTest),然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。 在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。BIOS 的第一个步骤是加电自检(POST)。POST 的工作是对硬件进行检测。BIOS 的第二个步骤是进行本地设备的枚举和初始化。给定 BIOS 功能的不同用法之后,BIOS 由两部分组成:POST 代码和运行时服务。当 POST 完成之后,它被从内存中清理了出来,但是 BIOS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务。
要引导一个操作系统,BIOS 运行时会按照 CMOS 的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。通常,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR 是一个 512 字节大小的扇区,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。
提取 MBR 的信息
要查看 MBR 的内容,请使用下面的命令:
# dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin
这个 dd 命令需要以 root 用户的身份运行,它从 /dev/hda(第一个 IDE 盘) 上读取前 512 个字节的内容,并将其写入 mbr.bin 文件中。od 命令会以十六进制和 ASCII 码格式打印这个二进制文件的内容。
启动GRUB/LILO
GRUB和LILO都是引导加载程序。最简单地讲,引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录(master boot record,MBR))。在单一的 MBR 中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。所以需要更灵活的引导加载程序。
GRUB 与 LILO 的比较
如本文开始处所述,所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO 和 GRUB 之间有很多不同之处:
 * LILO 没有交互式命令界面,而 GRUB 拥有。
 * LILO 不支持网络引导,而 GRUB 支持。
 * LILO 将关于可以引导的操作系统位置的信息物理上存储在 MBR 中。如果修改了 LILO 配置文件,必须将 LILO 第一阶段引导加载程序重写到 MBR。相对于 GRUB,这是一个更为危险的选择,因为错误配置的 MBR 可能会让系统无法引导。使用 GRUB,如果配置文件配置错误,则只是默认转到 GRUB 命令行界面。
   安全提示:
  关于安全性,任何可以接触到引导磁盘/CD 的人,只需要使用没有设置安全性的 grub.conf 或 lilo.conf,就可以绕过本文中提及的所有安全措施。特别是使用 GRUB 时,因为能够引导到单用户模式,所以是一个严重的安全漏洞。解决此问题的一个简单方法是在机器的 BIOS 中禁止通过 CD 和软盘进行引导,并确保为 BIOS 设置了一个口令,使得其他人不能修改这些设置。
加载内核
当内核映像被加载到内存之后,内核阶段就开始了。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。
GRUB 中的手工引导
在 GRUB 命令行中,我们可以使用 initrd 映像引导一个特定的内核,方法如下:
[root@localhost hzh]# vi /etc/grub.conf 查看grub.conf的配置文件
grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]
grub> initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]
grub> boot
Uncompressing Linux... Ok, booting the kernel.
如果您不知道要引导的内核的名称,只需使用斜线(/)然后按下 Tab 键即可。GRUB 会显示内核和 initrd 映像列表。
执行init进程
init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于Unix的系统(比如Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之而垮掉了。
init进程有两个作用。第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。快速执行一下ps -af 命令,可以列出许多父进程ID(Parent Process ID,PPID)为1的进程来。
init的第二个角色是在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。
通过/etc/inittab文件进行初始化
init的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体, 装载模块,设置网络,等等。
对于RedhatLinux来说,执行的顺序为:
复制代码
/etc/rc.d/rc.sysinit            # 由init执行的第一个脚本 
/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括: 
设置初始的$PATH变量。
配置网络。
为虚拟内存启动交换。
设置系统的主机名。
检查root文件系统,以进行必要的修复。
检查root文件系统的配额。
为root文件系统打开用户和组的配额。
以读/写的方式重新装载root文件系统。
清除被装载的文件系统表/etc/mtab。
把root文件系统输入到mtab。
使系统为装入模块做准备。
查找模块的相关文件。
检查文件系统,以进行必要的修复。
加载所有其他文件系统。
清除几个/etc文件:/etc/mtab、/etc/fastboot和/etc/nologin。
删除UUCP的lock文件。
删除过时的子系统文件。
删除过时的pid文件。
设置系统时钟。
打开交换。
初始化串行端口。
装入模块。
/etc/rc.d/rcX.d/[KS]
复制代码
首先终止“K”开头的服务,然后启动“S”开头的服务。
对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头。许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序,在字母S或者 K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行。存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程。当 /etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数。
执行/etc/ec.d/rc.local
Redhat Linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。
执行 /bin/login 程式
login 程序会提示使用者需输入账号及密码, 接着编码并确认密码的正确性, 若二者相合, 则为使用者进行初始化环境, 并将控制权交给 shell,即等待用户登录。多次为止Linux启动过程全部结束。
修改本机的软硬件时间
关于,修改系统的软硬件时间,对新手来说不是特别重要,软件(指的系统时间)时间很好修改,硬件(指CMOS时间)时间就不知道怎么修改了。不感兴趣的可以无视。
   
[root@localhost hzh]# date 查看本机的软件时钟
[root@localhost hzh]#hwclock 查看本机的硬件时钟
[root@localhost hzh]#hwclock --help
--set set the rtc to the time given with --date
--hctosys set the system time from the hardware clock
--systohc set the hardware clock to the current system time

  假如有一个时间是错的,我们可以通过上面的命令进行修改。
[root@localhost hzh]#hwclock --hctosys设置系统时间与硬件时间对应。
[root@localhost hzh]#hwclock --systohc设置硬件时间与系统时间对应。

  假如两个时间都是错误的,我们可以自己设置时间
[root@localhost hzh]#hwclock --set --data="月/日/年 时:分:秒"
分享到:
评论

相关推荐

    Linux学习笔记Linux学习资料Linux教程

    【linux学习笔记-2】父子进程共享文件描述符.doc 【linux学习笔记-3】文件操作(stat,chmod,umask).doc 【linux学习笔记-4】进程扇和进程链.doc 【linux学习笔记-5】编写自己的ls命令.doc 【linux学习笔记-6】文件IO...

    非常宝贵的LINUX学习笔记

    【linux学习笔记-2】父子进程共享文件描述符 【linux学习笔记-3】文件操作(stat,chmod,umask) 【linux学习笔记-4】进程扇和进程链 【linux学习笔记-5】编写自己的ls命令 【linux学习笔记-6】文件IO操作--读写、...

    linux学习笔记1

    嵌入式 linux学习笔记1------linux环境操作及c语言基本概念

    Linux学习笔记.pdf

    学习linux时整理的笔记,内容可以参考。基本命令的解读,文件系统,linux的vim操作等讲解。linux的网络配置、软件安装、磁盘分区等讲解

    我的linux学习笔记

    我的linux学习笔记,只是一些基本的操作指令,和少数的高级指令,相信能为那些刚接触linux的朋友提供一些帮助!

    Linux系统设计-linux 编程环境学习笔记,含 linux 基本命令,linux 操作系统,linux 下 C++ 编程等

    Linux系统在科学计算、数据分析和机器学习等领域也有广泛应用。许多知名的科学计算软件都在Linux上开发和运行,Linux系统在各个领域都有广泛的应用,其强大的功能和灵活性使得它成为许多产品和服务的基础架构。

    linux学习笔记

    linux基本学习笔记 ,包括最常用的命令已经操作

    linux 编程环境学习笔记,含 linux 基本命令,linux 操作系统,linux 下 C++ 编程等.zip

    操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信...

    Linux最佳入门-个人学习笔记-知识点总结.rar

    这是个人10年前的Linux Ubuntu学习笔记,之后查笔记时,都会补充新知识,也有纠错,涵盖了10个PDF文件,由有道笔记导出,非常适合初学者。这些PDF文件包含了丰富的知识和实用技巧,能够帮助您更好地掌握Linux Ubuntu...

    Linux系统管理学习笔记

    Linux系统学习笔记,包含基本配置命令,操作方式,目录和文件管理,程序安装及管理等等等等

    linux系统学习笔记

    linux 基本命令的操作实例,rpm包的安装,tar包压缩和解压,软件的安装和卸载,vsftp的使用

    linux c语言 笔记

    linux c的笔记资料,和大家一起分享 ...基本类型、转义符、printf、scanf、操作符 字符处理函数 运算符优先表 文件结构体struct file 宏定义 Linux常用C函数open和read以及write的使用说明 还有一些常用命令

    Linux教程+ shell学习笔记 + Shell脚本常用命令+shell脚本100例资源合集

    本文整理了一份Linux shell学习笔记及基本命令合集,包含了LINUX常用操作命令和命令行编辑快捷键、shell基本命令,Linux相关使用配置教程等,需要的朋友可下载试试! shell是一个用C语言编写的程序,它是用户使用...

    linux 基本操作大全

    linux 操作 学习笔记 需要什么操作帮做,直接查查,不用在在网上乱搜索一通了!

    Linux学习笔记

    Linux初学者必备,拥有Linux基本操作,大量截图让读者更加清晰明了。

    linux零基础学习.pdf

    习成长起到的作用是相当大的,总之,写学习笔记是正确的学习方法,学习笔记的记录应该尽量仔细 ,而且一定要清楚,字体美观,不能过几天之后就看不明白了,要给自己制造帮助成长的信息,同时 也给自己留下有保存价值...

    Linux讲义笔记.rar

    非常推荐的一个文件,用于学习Linux系统,属于技术手册类,归纳总结了常用的Linux命令,能使Linux小白快速上手Linux,掌握Linux的基本操作。B站黑马程序员课程讲义。

Global site tag (gtag.js) - Google Analytics