Linux主引导记录:了解引导过程,保证系统安全运行 (linux 主引导记录)

Linux主引导记录是指Linux操作系统在启动时从硬盘读取的引导程序,它由MBR(主引导记录)、BootLoader(引导程序)和内核文件组成。其中MBR是硬盘的之一个扇区,负责加载BootLoader,而BootLoader则负责加载内核文件,使Linux操作系统得以启动。在Linux系统中,主引导记录和引导程序的角色非常重要,需要我们深入了解其实现过程和相关原理,以保证系统的安全运行。

一、MBR

MBR是硬盘的之一个扇区,它的作用是在Linux操作系统启动时,将操作系统的引导程序读取到内存中。MBR分为三个部分,分别是BootStrap、Partition Table和MBR验证区。

1. BootStrap:其作用是在主引导记录被加载到内存中后,将引导程序的执行入口转移到Partition Table所指向的分区。BootStrap的大小为446字节。

2. Partition Table:用于存储操作系统所在的分区地址信息,可以存储4个分区的地址。每个分区占16字节,其中前4个字节表示该分区的起始磁头号、起始扇区号和起始柱面号;后4个字节表示该分区的结束磁头号、结束扇区号和结束柱面号;而中间8个字节则用来存储分区的属性。

3. MBR验证区:其作用是验证主引导记录的正确性,通常是由硬盘制造厂商固化在硬盘中的一段程序,用于防止MBR被恶意程序篡改,保障硬盘的安全性。

二、BootLoader

BootLoader是引导程序,它的作用是在读取MBR存储的分区信息后,将操作系统的内核文件加载到内存中,并启动操作系统。常用的Linux BootLoader有GRUB和LILO。

1. GRUB(GRand Unified Bootloader):是目前Linux系统中最为流行的BootLoader,它支持多种文件系统格式,并且可以直接引导Windows系统等其他操作系统。GRUB代码被分解成多个阶段,具有更好的分段灵活性,可以通过命令行来展开补丁和修改MBR。

2. LILO(LInux LOader):是Linux系统中最早的BootLoader之一,它可以从硬盘和软盘启动操作系统。LILO代码较为简单,功能相比GRUB有所不足,但启动速度较为快速。

三、内核文件

内核文件是Linux操作系统的核心,它包含了Linux操作系统的全部功能模块。在启动Linux操作系统时,BootLoader首先加载内核文件,其大小一般在1MB左右,并将其解压缩后加载到内存中,然后启动Linux系统,最终实现整个启动过程。

在正式进入操作系统内核之前,BootLoader会加载一个小型的initrd文件系统,以让内核能够访问到必要的设备驱动程序,如网卡驱动、USB驱动等等。

Linux主引导记录、引导程序和内核文件是Linux系统启动过程中的关键部分,深入了解其实现原理和相关机制,具有重要意义。除了MBR验证区外,主要需要保护的是BootLoader和内核文件,这两者易于被攻击者利用,在操作上也需要更加谨慎。正确理解并实践优秀的安全策略,是确保Linux系统稳定运行和保证网络安全的关键。

相关问题拓展阅读:

求助:LINUX常用SHELL命令

分类: 电脑/网络 >> 操作系统/系统故障

问题描述:

欢迎大家的投稿!!!!!!!

解析:

LINUX常用命令

1 文件与目录操作命令

1.1文件内容查询命令

grep、fgrep、egrep

CODE:语法:grep

选项:

QUOTE:

-E 每个模式作为一个扩展的正则表达式对待

-F 每个模式作为一组固定字符串对待,而不作为正则表达式

-i 比较时不区分大小写

-l 显示首次匹配匹配串所在的文件名并用换行符将其分开。当在文件中多次出现匹配串时,不重复显示次文件名;

-x 只显示整行严格猛衫匹配的行

1.2文件查找命令 find、locate

语法:

CODE:find 起始目录 寻找条件 操作

以名称和文件属性查找

QUOTE:

-name‘字串‘ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、。

-lname‘字串‘ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、。

-gid n 查找属于ID号为n的用户组的所有文件。

-uid n 查找属于ID号为n的用户的所有文件。

-group‘字串‘ 查找属于用户组名为所给字串的所有的文件。

-user‘字串‘ 查找属于用户名为所给字串的所有的文件。

-path‘字串‘ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、。

-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711、644。

-type x 查找类型为 x的文件,

语法:locate 相关字

1.3文件的复制、删除和移动命令

文件复制命令

CODE:cp 源文件或目录 目标文件或目录

选项:

QUOTE:

– a 通常在拷贝目录时使用

-d 拷贝时保留连接

-f 删除已经存在的目标文件而不提示

-i 和f选项相反

-p 此时cp除复制源文件内容外,还将其修改的时间和访问权限也复制到新文件中

-r 若给出的源文件是一目录文件,此时cp将递归复制该目录下的所有的子目录和文件,此时目标文件必须为一个目录名;

-l 不作拷贝,只是链接文件

文件移动命令

CODE:mv 源文件或目录 目标文件或目录

QUOTE:

-i 交互式操作

-f 禁止交互式操作

文件删除命令

CODE:rm 文件…

QUOTE:

-f 忽略不存在的文件,从不给出提示

-r 指示rm将参数中列出的全部目录和子目录均递归地删除

-i 进行交互式删除

1.4文件链接命令

CODE:ln 目标 或 ln 目标 目录

QUOTE:

选项:

– s 建立符号链接

1.5目录的创建和删除命令

mkdir 创建一个目录

语法:

CODE:mkdir dirname

选项:

– m 对新建目录设置存取权限

-p 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多枝裂腔个目录。

rmdir 删除空目录

语法:

CODE:rmdir dirname

QUOTE:

选项:

– p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。

1.6改变工作目录,显示目录内容命令

1、改变工作目录:

CODE:cd

2、显示当前工作的目录的绝对路径:

CODE:pwd

3、显示源行目录内容:

CODE:ls

QUOTE:

选项:

– a 显示指定目录下所有子目录与文件,包括隐藏文件;

-c 按照文件的修改时间排序

-C 分成多列显示各项

-d 如果参数是目录,只显示其名称而不显示其下的个文件

-F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。

-l 以长格式来显示文件的详细信息

-L 若指定的名称为一个符号链接,则显示链接所指向的文件

-t 显示时按修改时间而不是名字排序

-u 显示时按文件上次存取的时间而不是名字排序

4、改变文件或目录的访问权限命令

CODE:chmod 文件名?

QUOTE:

Who选项:

– u表示用户,即文件和目录的所有者

-g表示同组用户

-o(other)表示其他用户

-a (all)表示所有用户

QUOTE:

操作符号:

+ 添加某个权限 – 取消某个权限

= 赋予给定权限并取消其他所有的权限(如果有的话)

QUOTE:

mode 选项:

– r 可读

-w 可写

-x 可执行

CODE:chgrp group filename? 改变目录或文件所属的组

CODE:chown 用户或组 文件

1.7备份与压缩命令

1、tar命令 为文件和目录创建档案

语法:

CODE:tar 文件或者目录

QUOTE:

u 主选项

c 创建新的档案文件。如果用户想备份一个目录或是一些文件,则选此项

r 把要存档的文件追加到档案文件的末尾

t 列出档案文件的内容,查看已经备份了哪些文件;

u 更新文件

x 从档案文件中释放文件;

u 辅助选项

b 该选项为磁带机设定的,其后跟一位数字,用来说明区块的大小,系统预设值为20

f 使用档案文件或设备,这个选项通常是必选的

k 保存已经存在的文件。例如把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖;

m 在还原文件时,把所有文件的修改时间设定为现在;

M 创建多卷的档案文件,以便在几个磁盘中存放;

v 详细报告tar处理的文件信息

w 每一步都要求确认

z 用gzip来压缩/解压缩文件

2、gzip命令 压缩/解压缩命令

语法:

CODE:gzip 压缩(解压缩)的文件名

QUOTE:

选项:

-c 将输出写到标准输出上,并保留原有文件

-d 将压缩文件解压

-l 显示每个压缩文件的详细信息

-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩

-t 测试、检查压缩文件是否完整

-v 对每一个压缩和解压的文件,显示文件名和压缩比

3、unzip 命令

用MS windows下的压缩软件winzip压缩的文件在linux系统下展开

语法:

CODE:unzip 压缩文件名.zip

QUOTE:

选项:

-x 文件列表 解压缩文件,但不包括指定的file文件

-v 查看压缩文件目录,但不解压

-t 测试文件有无损坏 ,但不解压

-d 目录 将压缩文件解到指定目录下

-z 只显示压缩文件的注解

-n 不覆盖已经存在的文件

-o 覆盖已经存在的文件且不要求用户确认

-j 不重建文档的目录结构,把所有文件解压到同一目录下

1.8在LINUX环境下运行DOS命令

linux系统提供了一组称为mtools的可移植工具,可以让用户轻松地从标准的DOS软盘上读写文件和目录。

QUOTE:

mcd 目录名 改变MSDOS目录

mcopy 源文件 目标文件 在MSDOS和UNIX之间复制文件;

mdel 目录名 删除MSDOS目录

mdir 目录名 显示MSDOS目录

mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统

rnlabel 驱动器号 产生MSDOS卷标

mmd 目录名 删除MSDOS目录

mren 源文件 目标文件 重新命名已存在的MSDOS文件

mtype 文件名 显示MSDOS文件的内容

2 设备管理命令

1)linux采用下面的形式定义一个IDE硬盘:

CODE:/dev/hd

2)SCSI硬盘使用同样的机制表示:

CODE:/dev/sd

3)对于一般的LINUX分区,可以用mkfs将其格式化并生成文件系统,命令如下:

CODE:mk2fs –c ; ;

4)装载文件系统:

CODE:mount –t ext2 partition mountpiont

其中,

QUOTE:

-t为指定装载文件系统的类型;

-o指定一些选项,如只读ro,可读可写rw等等;

partition定义分区名称;

mountpiont定义文件系统被装载的目录名称。

5)装载CD-ROM文件系统:

CODE:mount –t iso9660 –r /dev/cdrom /mnt/cdrom

6)装载软驱文件系统:

CODE:mount –t msdos –rw /dev/fd0 /dev/mnt/floppy

7)卸载文件系统

CODE:umount /mnt/cdrom

磁带设备的安装要注意以下几点:

QUOTE:

1、 首先要选择一个唯一的SCSI ID号,然后再将设备链接到适当的位置

2、 选择驱动程序。

3、 生成设备文件。SCSI磁带设备的主要设备号是9,次要设备号是0。设备文件名通常是/dev/nrst0(不支持回绕的磁带设备)或/dev/nst0(支持回绕的磁带设备)

用 ls /dev/*rst*

检查磁带设备文件是否存在,如果不存在,用

mknod –m 666 /dev/nrst0 c 9 9

mknod –m 666 /dev/rst0 c 9 0 生成

4、 可以对块长度、缓存、磁带密度等参数进行一些设置,例如

mt setblk 20 将块长度指定为20

mt setblk 0 指定块程度没有限制

5、 通过检查系统的启动信息可以确定系统是否识别了新的磁带设备。用dmesg命令,查看是否有以下类似的信息:

aha274x:target 4now synchronous at 4.4Mb/s

Vendor:TANDBERG Model:TDC 3800 Rev: =05:

Type: Sequential-Access ANSI SCSI revision: 02

Detected scsi tape st0 at scsi0, id4, lun0

Scsi : detected 1 SCSI tape 1 SCSI crom 1 SCSI disk total

3 软件包管理命令

3.1软件安装的步骤

在LINUX系统上安装软件的步骤有:

QUOTE:

1、 查找所要安装软件的源文件

2、 把源文件解开放到一个目录中,命令如下:

tar zxvf ;

3、 针对本操作系统配置源文件。可以是编辑make文件或其他文件,也可能是运行该软件自带的自动配置工具,如./configure

4、 make源文件,通常是运行make命令,即执行 make

5、 安装二进制文件和其他支撑文件,运行命令: make install

6、 最后,完成所有其他必须的配置

3.2软件包管理命令

QUOTE:

rpm –ivh ;

安装指定的软件包,并在安装过程中用#表示安装的进度

rpm –Uvh ;

更新一个已经存在的或还没安装好的软件包,并删除所有该软件包的旧版本。

rpm –e

卸载一个rpm软件包

rpm –qa

查看系统中已经安装的软件包

rpm –q ;

查看系统中某个软件包的版本号;

rpm –qlp ;

列出某个软件包中的所有文件

rpm –qf ;

找出一个文件属于哪个软件包

4 LINUX系统常用命令

4.1 与系统管理有关的命令

Wall (Write All)

QUOTE:

对全部已 登录的用户发送信息,用户可以先反要发送的信息写好存入一个文件中,然后输入:

# wall ;:指定作为初始化进程的文件。

initrd=;:指定作为初始内存磁盘的设备。

ro:指定根文件系统为只读。

rw:指定根文件系统为可读可写。

2 Init进程

在内核初始化自身和找到的硬件设备后,在后台启动进程init(/in/init),init进程号1运行。

在UNIX世界中有许多启动过程的版本,一些是基于系统V,一些是基于BSD。大多数Linux版本使用系统V的实现方法,在这里描述的就是这样。

init是由文件/etc/inittab内容和功能控制的,随启动模式是单用户或多用户而不同。

QUOTE:

单用户模式:init进程忽略/etc/inittab文件,在执行少数几个脚本程序后调用/dev/console shell。这样,用户就可以有了一个shell,而且可以执行一定限度的任务。

多用户模式:init进程把系统带入/etc/inittab文件指定的运行级别。Init通过标准的Linux方法进入一个指定的进行级别。

3.进行级别

Linux与其他UNIX操作系统一样,可以任何时刻处于任何一个运行级别。这些运行级别提供的功能不同,为主要是由于其运行的服务方程序(后台daemon)的不同造成的。Linux共有6种运行级别。

QUOTE:

0:关闭计算机或终止计算机运行,这个级别就是系统停止运行。

1:单用户启动级别,系统只有一个用户,就是root,该用户在控制台登录。

2:多用户运行级别,但无网络功能。在这个运行级别,网络功能没有启动,但是系统允许多个用户登录,可以通过虚拟控制台或串行线路。

3:多用户模式,有网络功能。在这个运行级别,所有标准网络服务均被启动。

4:目前没有实现。

5:X11运行级别,在这个运行级别,X服务器软件运行,提供图形界面的登录方式。

6:系统重新启动。

查询当前运行级别:runlevel;

4在启动过程中运行的脚本

在init进程运行时,它负责查看缺省的运行级别,并进入该运行级别。这是通过运行在/etc/rc.d/rcX.d目录下的脚本程序来实现的,其中X代表运行的级别,即一个运行级别对应一个目录。不同的字母开头的文件有不同的作用。其中:

以K开头的脚本程序是系统离开某个运行级别时执行的,作用是停止某种服务。当系统从某个支持级别变为其他级别时,首先要进行原运行级别所对应的所有K程序。

以S开头的脚本程序是系统进入某个运行级别时所执行的,作用是启动某种服务。当系统改变为某个运行级别时,就要运行新运行级别所对应的所有S程序。

5增加启动脚本程序

用户可能有一些特定的硬件设备要初始化,或需要在系统启动时初始化一些其他应用程序,用户可以增加自己的初始化脚本程序来完成这些工作。通常步骤是:

复制一个已经存在的脚本,这样可以得到一个通用的框架格式。

修改这个脚本,以完成自己的需求,要注意使程序可以处理启动和关闭的参数,尽管可能关闭处理什么也不需要干。

把这个肢本拷贝到/etc/rc.d/init.d目录下,命名为”serv”。

按下面的方法在相应的目录下建立运行控制链接:

CODE:ln –s ../init.d/serv/etc/rc.d/rc3.d/s99 serv

进行测试。

6 LILO和其他的启动模块

要启动Linux,启动模块是必须的。一般用于Linux的启动模块是LILO,LILO用自己的主引导区代替一般的主引导区。LILO可以通过修改/etc/lilo.conf文件内容来进行配置,对引导区内容的更新通过lilo命令来完成。

下面给也了一个装有DOS,TurboLinux3.4.0和RedHat 5.2系统的计算机的lilo.conf文件。在例子中的数字标号是用户加上去并要在文中详细解释的。

CODE:# more /etc/lilo.conf

boot=dev/had

map=/boot/map

instll/boot/boot.b

prompt

#表示启动盘是/dev/had,这是主IDE硬盘。

timeout=50

#表示等待用户输入的时间是50秒。

default=TL3.4

other=dev/hda1

#表示如果在上述的时间内没有输入,缺省的启动系统是TL3.4,即TurboLinux 3.4.0

label=dos

table=dev/had

#表示如果在LILO提示用户输入启动系统时,用户按了;键,各个系统将以label的内容显示出来,供用户选择。

image=/mnt/tl3.4/boot/vmlinuz

label=TL3.4

root=/dev/hda3

read-only

TurboLinux的启动文件,/mnt/tl3.4/boot/vmlinuz被确定,根文件系统在/dev/hda3,根文件系统是只读方式的。

CODE:image=/mnt/rh5.2/boot/vmlinuz-2.0.36-0.7

label=RH5.2

root=/dev/hda4

read-only

Linux如何启动流程?Linux启动流程详解

当用户打开电源后,BIOS开机自检,确定启动设备,安装启动设备,启动设备上面安装的GRUB开始引导Linux,Linux首先先进行内核引导,通过跟切换,执行init程序,init程序确定启动级别,根据启动级别进行系统初始化和运行的服务,然后返回init启动终端,用户通过验证成功登陆Shell,这就是一个从开机到登陆的启动过程。

一、硬件引导启动

当用户打开电源后POST开始自检,检测硬件设备是否确实或者存在故障(是否影响氏没清正常开机),如果不影响正常开机,就把任务交给BIOS。BIOS通过搜索,安装启动确定启动设备,启动项为硬盘,BIOS去读取硬盘的前512字节到内存,找到BootLoader,确定GRUB

二、GRUB引导启动内核

这一部分概况起来就是:GRUB程序加载执行并开始引导kernel程序

Boot Loader就是在操作系统内核运行之前运行的一小段程序。通过GRUB引导可以确定内核程序,因为引导扇区只有446字节,GRUB只是一个小的程序安装在里面,真正使用的在MBR后面的扇区存放,我们想使用Bootloader GRUB功能必须读取后面的文件,Bootloader GRUB功能程序的运行和加载配置选项分为三个阶段

Stage1阶段:

Stage1阶段其实就是执行系统安装时预先写入到MBR的Bootloader中的程序。

Stage1阶段的任务仅是将硬盘0柱面0磁道2扇区的内容读入内存并执行,它是Stage1.5阶段或Stage2阶段的入口,引导进入Stage1.5阶段或Stage2阶段。 在此Stage1阶段,还没有识别文件系统的能力。

Stage1.5阶段:

stage1.5阶段是stage1阶段和stage2阶段的中间桥梁。stage1.5阶段具有识别启动分区文件系统的能力,此后GRUB程序便有能力去访问/boot分区下/grub目录下的 stage2文件,并将stage2载入内存执行。

Stage2阶段

Stage2阶段歼前执行时,首先会解析GRUB程序的配置文件grub.conf,并依配置文件决定是否显示系统启动菜单。然后加载内核镜像到内存中,通过initrd程序建立RAMDisk内存虚拟根文件系统。此时控制权将转交给内核程序。

三、内核引导启动

这一部分主要是通过在内存中建立虚拟根文件系统实现相关设备的驱动并建立和切换到真正的根文件系统。

解压内核镜像加载到内存,以及initrd程序建立RAMDisk内存虚拟根文件系统后,内核开始驱动基本硬件,并调用虚拟根文件系统中的init程序加载驱动模块初始化系统中各种设备的相关配置工作,其中包括CPU、I/O、存储设备等。当所需的驱动程序加载完后,会根据grub.conf配置文件中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上,同时调用系统进程的/in/init程序,进入系统初始化阶段。

四、系统初始化

这一步是通过/in/init,init程序准备软件运行坏境,启动系统服务

通过/etc/inittab文件确定运行级别,然后去执行系统初始化脚本/etc/rc.sysinit,为用户初始化用户空间环境,在完成初始化后,根据运行级别,系统开始对应级别的目录启动服务,关闭那些不要的服务(里面S99local -> ../rc.local)用户自动服务启动脚本

运行级别:为系统运行或维护等目的而设定;0-6:7个级别

0:关机

1:单用户模式(root自动登录), single, 维护模式

2: 多察明用户模式,启动网络功能,但不会启动NFS;维护模式

3:多用户模式,正常模式;文本界面

4:预留级别;可同3级别

5:多用户模式,正常模式;图形界面

6:重启

默认级别:3, 5

切换级别:init #

查看级别:runlevel ; who -r

五、启动终端,用户登录

这一步是用户登录shell过程

如果没有改变级别,默认情况执行/in/mingetty打开6个纯文本终端,让用户输入用户名和密码。输入完成后,再调用login程序,核对密码。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。更多Linux介绍请查看《Linux就该这么学》。

在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多;一般就是通电、BIOS、主引导记录、操作系统这四步。所以我们一般认为加载内核是linux启动流程的之一步。

之一步、加载内核

操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

我们查看一下,/boot 目录下面大概是这样一些文件:

$ ls /boot      config-3.2.0-3-amd64   config-3.2.0-4-amd64   grub   initrd.img-3.2.0-3-amd64   initrd.img-3.2.0-4-amd64   System.map-3.2.0-3-amd64   System.map-3.2.0-4-amd64   vmlinuz-3.2.0-3-amd64   vmlinuz-3.2.0-4-amd64

第二步、启动初始化进程

内核文件加载以后,就开始运行之一个程序 /in/init,它的作用是初始化系统环境。

由于init是之一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。

第三步、确定运行级别

许多程序需要开机启动。它们在Windows叫做孙闷”服务”(service),在Linux就叫做”守护进程”(daemon)。

init进程的一大任务,就是去运行这些开机启动的程序。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同的场合,分配不同的开机启动程序,这就叫做”运行级别”(runlevel)。也就是说,启动时根据”运行级别”,确定要运行哪些程序。

Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。运行级别2-5,各个发行版不太一样,对于Debian来说,都是同样的多用户模式(也就是正常模式)。

init进程首先读取文件 /etc/inittab,它是运行级别的设置文件。如果你打开它,可以看到之一行是这样的:

id:2:initdefault:

initdefault的值是2,表明系统启动时的运行级别为2。如果需要指定其他级别,可以手动修改这个值。

那么,运行级别2有些什么程序呢,系统怎么知道每个级别应该加载哪些程序呢?回答是每个运行级别在/etc目录下面,都有一个对应的子目录,指定要加载的程序。

/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d

上枝仿面目录名中的”rc”,表示run command(运行程序),最后的d表示directory(目录)。下面让我们看看 /etc/rc2.d 目录中到底指定了哪些程序。

$ ls /etc/rc2.d      README   S01motd   S13rpcbind   S14nfs-common   S16binfmt-support   S16rsyslog   S16sudo   S17apache2   S18acpid   …

可以看到,除了之一个文件README以外,其他文件名都是”字母S+两位数字+程序名”的形式。字母S表示Start,也就是启动的意思(启动脚本的运行参数为start),如果这个位置是字母K,就代表Kill(关闭),即如果从其他运行级别切换过来,需要关闭的程序(启动脚本的运行参数为stop)。后面的两位数字表示处理顺序,数字越小越早处理,所以之一个启动的程序是motd,然后是rpcbing、nfs……数字相同时,则按照程序名的字母顺序启动,所以rsyslog会先于sudo启动。

这个目录里的所有文件(除了README),就是启动时要加载的程序。如果想增加或删除某些程序,不建议手动修改 /etc/rcN.d 目录,更好是用专门命令进行管理。

第四步、加载开机启动程序

前面提到,七种预猛凯纤设的”运行级别”各自有一个目录,存放需要开机启动的程序。不难想到,如果多个”运行级别”需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?

Linux的解决办法,就是七个 /etc/rcN.d 目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正的启动脚本都统一放在这个目录中。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。

下面就是链接文件真正的指向。

$ ls -l /etc/rc2.d      README   S01motd -> ../init.d/motd   S13rpcbind -> ../init.d/rpcbind   S14nfs-common -> ../init.d/nfs-common   S16binfmt-support -> ../init.d/binfmt-support   S16rsyslog -> ../init.d/rsyslog   S16sudo -> ../init.d/sudo   S17apache2 -> ../init.d/apache2   S18acpid -> ../init.d/acpid   …

这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。比如,我要重启Apache服务器,就运行下面的命令:

$ sudo /etc/init.d/apache2 restart

/etc/init.d 这个目录名最后一个字母d,是directory的意思,表示这是一个目录,用来与程序 /etc/init 区分。

第五步、用户登录

开机启动程序加载完毕以后,就要让用户登录了。

一般来说,用户的登录方式有三种:

(1)命令行登录

(2)ssh登录

(3)图形界面登录

这三种情况,都有自己的方式对用户进行认证。

(1)命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码(linux还会再多运行一个身份核对程序/etc/pam.d/login)。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。

(2)ssh登录:这时系统调用sshd程序(linux还会再运行/etc/pam.d/ssh ),取代getty和login,然后启动shell。

(3)图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),然后用户输入用户名和密码。如果密码正确,就读取/etc/gdm3/Xsession,启动用户的会话。

第六步、进入 login shell

所谓shell,简单说就是命令行界面,让用户可以直接与操作系统对话。用户登录时打开的shell,就叫做login shell。

linux默认的shell是Bash,它会读入一系列的配置文件。上一步的三种情况,在这一步的处理,也存在差异。

(1)命令行登录:首先读入 /etc/profile,这是对所有用户都有效的配置;然后依次寻找下面三个文件,这是针对当前用户的配置。

~/.bash_profile   ~/.bash_login   ~/.profile

需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。比如,要是 ~/.bash_profile 存在,就不会再读入后面两个文件了。

(2)ssh登录:与之一种情况完全相同。

(3)图形界面登录:只加载 /etc/profile 和 ~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。

第七步,打开 non-login shell

老实说,上一步完成以后,Linux的启动过程就算结束了,用户已经可以看到命令行提示符或者图形界面了。但是,为了内容的完整,必须再介绍一下这一步。

用户进入操作系统以后,常常会再手动开启一个shell。这个shell就叫做 non-login shell,意思是它不同于登录时出现的那个shell,不读取/etc/profile和.profile等配置文件。

non-login shell的重要性,不仅在于它是用户最常接触的那个shell,还在于它会读入用户自己的bash配置文件 ~/.bashrc。大多数时候,我们对于bash的定制,都是写在这个文件里面的。

你也许会问,要是不进入 non-login shell,岂不是.bashrc就不会运行了,因此bash 也就不能完成定制了?事实上,Debian已经考虑到这个问题了,请打开文件 ~/.profile,可以看到下面的代码:

if ; then     if ; then. “$HOME/.bashrc”     fi   fi

上面代码先判断变量 $BASH_VERSION 是否有值,然后判断主目录下是否存在 .bashrc 文件,如果存在就运行该文件。第三行开头的那个点,是source命令的简写形式,表示运行某个文件,写成”source ~/.bashrc”也是可以的。

因此,只要运行~/.profile文件,~/.bashrc文件就会连带运行。但是上一节的之一种情况提到过,如果存在~/.bash_profile文件,那么有可能不会运行~/.profile文件。解决这个问题很简单,把下面代码写入.bash_profile就行了。

if ; then     . ~/.profile   fi

这样一来,不管是哪种情况,.bashrc都会执行,用户的设置可以放心地都写入这个文件了。

Bash的设置之所以如此繁琐,是由于历史原因造成的。早期的时候,计算机运行速度很慢,载入配置文件需要很长时间,Bash的作者只好把配置文件分成了几个部分,阶段性载入。系统的通用设置放在 /etc/profile,用户个人的、需要被所有子进程继承的设置放在.profile,不需要被继承的设置放在.bashrc。

顺便提一下,除了Linux以外, Mac OS X 使用的shell也是Bash。但是,它只加载.bash_profile,然后在.bash_profile里面调用.bashrc,而且不管是ssh登录还是在图形界面里启动shell窗口都是如此。

linux怎样查看硬盘使用情况

一、df -lh 命令

df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

# df -l

文件系统 容量已用可用 已用% 挂载点

/dev/sda 76% /

tmpfs% /dev/shm

/dev/sda 56% /media/disk

/dev/sda 76% /media/_

/dev/山宽sda 57% /media/disk-1

可以看到系统挂在sda3上,另外还挂了sda6/sda1/sda5三个系统。

二、fdisk -l 命令

fdisk 是一款强大的磁盘操作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;通过-l 参数,绝桐能获得机器中所有的硬盘的分区情况;

# fdisk -l

Disk /dev/sda: 40.0 GB,bytes

255 heads, 63 sectors/track, 4863 cylinders

Units = cylinders of* 512 =bytes

Disk identifier: 0x62a9f8d0

Device Boot StartEnd Blocks Id System

/dev/sda1 *Linux

/dev/sda 82 Linux swap / Solaris

/dev/sda+ 83 Linux

/dev/sda 5 Extended

/dev/sda+ 83 Linux

/dev/sda+ 83 Linux

sda1 是MBR(主引导记录)所在的分区;sda2是交换分区;sda4是扩展分区,包括了sda5,sda6两个逻辑分区。系统划分分区的时候只能划分4个主分区(扩展分区也算主分区),我在上面分了3个主分区+1个Extended分区,5.6是逻辑分区。所以才会有sda1.2.3.4.5.6。如果你只划分了1个主分区并唯坦+1个扩展分区,那么逻辑分区就从sda5开始了,sda1.2.5.6…

三、cfdisk -Ps命令 (注意P是大写)

cfdisk 也是一款不错的分区工具;在有些发行版中,此工具已经从util-linux包中剔除;cfdisk 简单易用是他的特点;

查看磁盘分区的用法 cfdisk -Ps 磁盘设备名 只有一个硬盘也可以用 cfdisk -Ps

例1:# cfdisk -Ps

具体要看你用什么发行版本,如果是只有命令行的直接输入命令就可以。有界面的话要打开终端命令行程序,再输入命令才可以。

一般可以用df命令获仔乱取硬盘的使用情况,常用命令:df -hi。

通过man可以获取df命令的详细情况。df命令经常用的参数为:

  a:显示全部的档案系统和各分割区的磁盘使用情形

  i:显示i -nodes的使用量

  k:大小用k来表示 (默认值)

  t:显示某一个档案系统的所有分割区磁盘使用量

  x:显示不晌盯是某一个档案系统的所有分割区磁盘使用量

linux 主引导记录的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 主引导记录,Linux主引导记录:了解引导过程,保证系统安全运行,求助:LINUX常用SHELL命令,Linux如何启动流程?Linux启动流程详解,linux怎样查看硬盘使用情况的信息别忘了在本站进行查找喔。


数据运维技术 » Linux主引导记录:了解引导过程,保证系统安全运行 (linux 主引导记录)