搜档网
当前位置:搜档网 › linux启动引导过程(greb)

linux启动引导过程(greb)

linux启动引导过程(greb)
linux启动引导过程(greb)

linux grub 引导启动过程详解

2008-01-08 17:18

这几天看了很多文档,算是对linux的启动过程有了比较细致的了解.

网上有很多文章谈到这方面的内容,但总觉得没有一篇完全的解析linux启动的细节,下面是我小弟在学习的过程中总结出来的一些东东.这个是完整的linux

启动过程,

不涉及内核,但是我觉得比较详细哦.

(由于本人比较懒,这一段是从网上抄的)

机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘

设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查

软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设

备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,

寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader. linux里面的boot loader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB( GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。那么启动的时候

grub是如何被载入的呢

grub有几个重要的文件,stage1,stage2,有的时候需要stage1.5.这些文件一般都

在/boot/grub文件夹下面.grub被载入通常包括以下几个步骤:

1. 装载基本的引导装载程序(stage1),stage1很小,网上说是512字节,但是在我的系统上

用 du -b /boot/grub/stage1 显示的是1024个字节,不知道是不是grub版本不同的

缘故还是我理解有误.stage1通常位于主引导扇区里面,对于硬盘就是MBR 了,stage1的

主要功能就是装载第二引导程序(stage2).这主要是归结于在主引导扇区中没有足够的

空间用于其他东西了,我用的是grub 0.93,stage2文件的大小是 107520 bit.

2. 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出更高级的功能,

以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或

是输入命令。由于stage2很大,所以它一般位于文件系统之中(通常是boot 所在的根

分区).

上面还提到了stage1.5这个文件,它的作用是什么呢你到/boot/grub目录下看看,

fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统

有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这

时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的

stage1.5.但是对于grub 0.93好像stage1.5并不是很重要,因为我试过了,在没有stage1.5

的情况下, 我把stage1安装在软盘的引导扇区内,然后把stage2放在格式化成ext2或者

fat格式的软盘内,启动的时候照常引导,并不需要e2fs_stage_1.5或者

fat_stage_1.5.

下面是我的试验:

#mkfs.ext2 /dev/fd0

#mount -t ext2 /dev/fd0 /mnt/floppy

#cd /mnt/floppy

#mkdir boot

#cd boot

#mkdir grub (以上三步可用mkdir -p boot/grub命令完成)

#cd grub

#cp /boot/grub/{stage1,stage2,grub.conf} ./

#cd; umount /mnt/floppy

以上几步把软盘格式化成ext2格式,然后把stage1,stage2,grub.conf这几个启动的

时候必须的文件拷贝到软盘的指定目录下.下面安装grub到软盘上.

#grub (进入grub环境)

grub> install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2

p (fd0)/boot/grub/grub.conf

以上这条命令也可以用下面的两句代替

grub>root (fd0) #grub的根目录所在的分区

grub>setup (fd0) #这一步就相当于上面的install命令

我在这里解释一下

install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2 p

(fd0)/boot/grub/grub.conf 这条命令.

install

告诉GRUB将(fd0)/boot/grub/grub/stage1

安装到软驱的引导扇区(fd0).

(fd0)/boot/grub/stage2

告诉grub stage2这个文件所在的位置.

p 参数后面跟着(fd0)/boot/grub/grub.conf 告诉grub的配置文件所在的位置.

好了,让BIOS从软驱启动,试一下,没有e2fs_stage_1.5文件照样能够进入系统. 其实这就是一个小小的启动盘啊.(了解了grub的运行原理,就简单多了^_^)

3. 现在我们已经到grub的开机选单这一步了,接下来grub所需要做的就是装载在一个特

定分区上的操作系统,如linux内核。一旦GRUB从它的命令行或者配置文件中,接到开始

操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统.

由于篇幅有限,避免冗长,grub的命令我就不多说了,网上很有多的资料,一个典型

完整的引导linux的命令如下:

title 51base

root(hd0,0)

kernel /bzImage ro root=/dev/ram0

initrd /initrd.img

这里有必要注意一下几个问题:

(1)grub的磁盘以及分区的命名方式和linux有所区别,第一个磁盘是从0开始,第一

个分区也是从0开始.譬如第一个硬盘的第5分区在linux下面是/dev/hda5 ,而在grub里面

是(hd0,4).再如/dev/fd0在grub里面是(fd0,0).(最后一句如有错误望提醒) (2)不管是IDE硬盘hda,hdb还是SCSI硬盘sda,sdb在grub里面都是以hd 方式命名.

譬如虚拟机里面的/dev/sda2在grub里面是(hd0,1),再如/dev/hdb7在grub里面以(hd1,6)

命名.

(3)要搞清楚上面两个root的关系,root (hd0,0)中的root是grub命令,它用来指定

boot所在的分区作为grub的根目录.而root=/dev/ram0是kernel的参数,它告诉操作系统

内核加载完毕之后,真实的文件系统所在的设备.要注意grub的根目录和文件系统的根

目录的区别.

再回到上面的几行命令.

kernel命令用来指定内核所在的位置,"/"代表(hd0,0),也就是grub的根目录

initrd命令用来指定初始化ram的img文件所在位置.

grub载入内核bzImage并展开到指定位置(应该是0x100000这个地方),同时载入

initrd.img到内存(不知道是什么地方).

ps:

grub的任务至此就结束了,下面grub将机器的控制权转交给操作系统(linux). 操作系统接到控制权之后,开始start_kernel,接着内核将initrd.img展开到

/dev/ram0

为临时根文件系统,执行里面的linuxrc文件.

P.这里有必要说一下initrd的作用特别是它里面的核心文件linuxrc的作用. initrd是inital ram disk的宿写.

当存在initrd的时候,机器启动的过程大概是以下几个步骤(当initrd这一行用noinitrd 命令代替后,就不存在initrd了)

1)boot loader(grub)加载内核和initrd.img

2)内核将压缩的initrd.img解压成正常的ram disk并且释放initrd所占的内存空间

3)initrd作为根目录以读写方式被挂载

4)initrd里面的文件linuxrc被执行

5)linuxrc挂载新的文件系统

6)linuxrc使用pivot_root系统调用指定新的根目录并将现有的根目录place 到指定

位置.

7)在新的文件系统下正式init

8)initrd被卸载.

为了便于理解,我将red hat linnux9 里面的initrd-2.4.20-8.img拿出来分析一下.

这其实是一个压缩了的文件,是以gz结尾的.

[root@localhost

root]#cp /boot/initrd-2.4.20-8.img /mnt/initrd-2.4.20-8.gz

[root@localhost root]#gunzip /mnt/initrd-2.4.20-8.gz

[root@localhost root]#mount -o loop /mnt/initrd-2.4.20-8 /mnt/ram //********************************* added by me

*********************************//

有可能出现错误:you must specify the filesystem type.这时输入命令:[root@localhost root]#file /mnt/initrd-2.4.20-8

initrd-2.4.20-8:ASCii cpio archive

靠!这也能挂载吗?直接使用下列命令:

[root@localhost root]#cp initrd-2.4.20-8 /mnt/ram/

[root@localhost root]#cd /mnt/ram

[root@localhost root]#cpio -ivdm < initrd-2.4.20-8

//********************************* end of added

*********************************//

[root@localhost ram]#ls

bin dev etc lib linuxrc loopfs proc sbin sysroot

[root@localhost ram]#ls bin

insmod modprobe nash

[root@localhost ram]#ls lib

Buslogic.o ext3.o jbd.o scsi_mod.o sd_mod.o

[root@localhost ram]ls dev

console null ram systty tty1 tty2 tty3 tty4

sbin目录是指向bin目录的一个连接,其他目录是空的.

[root@localhost ram]cat linuxrc

#!/bin/nash

1.echo "Loading scsi_mod.o module"

2.insmod /lib/scsi_mod.o

3.echo "Loading sd_mod.o module"

4.insmod /lib/sd_mod.o

5.echo "Loading BusLogic.o module"

6.insmod /lib/BusLogic.o

7.echo "Loading jbd.o module"

8.insmod /lib/jbd.o

9.echo "Loading ext3.o module"

10.insmod /lib/ext3.o

11.echo Mounting /proc filesystem

12.mount -t proc /proc /proc

13.echo Creating block devices

14.mkdevices /dev

15.echo Creating root device

16.mkrootdev /dev/root

17.echo 0x0100 > /proc/sys/kernel/real-root-dev

18.echo Mounting root filesystem

19.mount -o defaults --ro -t ext3 /dev/root /sysroot

20.pivot_root /sysroot /sysroot/initrd

21.umount /initrd/proc

上面的编号是我为了下面好说明加上去的.

首先我们必须注意的是这里使用的shell是nash而不是bash,nash是专门为linuxrc可执行

脚本设计的,因此你有必要看一看nash的man文档.

1-10行是加载一些必要的模快.11-12行加载proc内核文件系统,13-14行利用nash内建的

命令mkdevices创建块设备,mkdevices是根据/proc/partitions文件创建里面列出的所有

块设备.15-16行利用nash内建的命令mkrootdev,mkrootdev使它后面的参数/dev/root成

为一个块节点从而使得根分区设备被挂载,其中根分区设备由grub.conf里面的kernel命

令后面所带的参数root=决定,如果root=参数没有被指

定,/proc/sys/kernel/real-root-

dev文件将提供根分区设备号.17行将数字256写入到后面的文件里面去.18-19行挂载根文

件系统到/sysroot目录下,/dev/root里面的内容就是root=参数所指定的设备里面的内容

20行调用pivot_root改变根目录所在地并place旧的根目录到指定的位置.21行卸载旧的

根目录里面的proc内核文件系统.

从这里面我们总结一下linuxrc的作用: (参考

/usr/src/linux-2.4/Documenta

tion/initrd.txt文档)

2)/linuxrc文件决定在挂载真正的文件系统之前所需完成的事情(譬如加载必

要的网

络驱动或者加载ext3文件系统).

3)/linuxrc加载必要的模块.

4)/linuxrc挂载根文件系统

5)/linuxrc调用pivot_root来改变根目录

关于initrd的用途可以查考上面提到的文档,想知道linux系统是如何安装的吗那里

面由答案.

既然linuxrc的主要目的是加载模快用的,那如果我们的内核没有动态的模块而所需

的功能都是静态编译进内核的,那么是不是可以不用linuxrc文件呢

答案是可以不用,在普通的linux操作系统里面可以加入noinitrd选项以告知boot

loader 不使用initrd.如果我们做网关,因为ram是我们的文件系统的载体,所以initrd

一行当然不能去掉,但是我们可以不用linuxrc文件,sysroot文件夹和initrd 文件夹.

不信的话,试试看吧.

好了,initrd(linuxrc)已经介绍完了.

linuxrc执行完毕之后,系统就会以真正的根目录正式init.

系统在/bin/或者/sbin目录下找到init程式,然后根据它的配置文件

/etc/fstab进行

初始化,最后调用mingetty程式启动login完成引导.

ps:init这一部分网上有很多的详细资料所以我在这里并没有展开来说. 终于写完了,希望对你有所帮助.如有错误,还望指正.

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

linux启动过程

Linux系统启动过程分析 by 王斌斌 binbinwang118@https://www.sodocs.net/doc/572320848.html, Linux系统启动过程分析 操作系统的启动过程,实际上是控制权移交的过程。Linux 系统启动包含四个主要的阶段:BIOS initialization, boot loader, kernel initialization, and init startup.见下图: 阶段一、BIOS initialization,主要功能如下: 1.Peripherals detected 2.Boot device selected 3.First sector of boot device read and executed 系统上电开机后,主板BIOS(Basic Input / Output System)运行POST(Power on self test)代码,检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)。硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。 执行POST代码对系统外围关键设备检测通过后,系统启动自举程序,根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的硬盘、光驱、网络服务器等)。选择合适的启动器,比如通常情况下的硬盘设备,BIOS会读取硬盘设备的第一个扇区(MBR,512字节),并执行其中的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行,BIOS的任务就完成了。此后将系统启动的控制权移交到MBR部分的代码。 注:在我们的现行系统中,大多关键设备都是连在主板上的。因此主板BIOS提供了一个操作系统(软件)和系统外围关键设备(硬件)最底级别的接口,在这个阶段,检测系统外围关键设备是否准备好,以供操作系 “” 统使用。 阶段二、Boot Loader 关于Boot Loader,简单的说就是启动操作系统的程序,如grub,lilo,也可以将boot loader本身看成一个小系统。 The BIOS invokes the boot loader in one of two ways: 1.It pass control to an initial program loader (IPL) installed within a driver's Master Boot Record (MBR) 2.It passes control to another boot loader, which passes control to an IPL installed within a partition's boot sector. In either case, the IPL must exist within a very small space, no larger than 446 bytes. Therefore, the IPL for GRUB is merely a first stage, whose sole task is to locate and load a second stage boot loader, which does most of the work to boot the system. There are two possible ways to configure boot loaders: Primary boot loader: Install the first stage of your Linux boot loader into the MBR. The boot loader must be configure to pass control to any other desired operating systems. Secondary boot loader: Install the first stage of your Linux boot loader into the boot sector of some partition. Another boot loader must be installed into the MBR, and configured to pass control to your Linux boot loader. 假设Boot Loader 为grub (grub-0.97),其引导系统的过程如下: grub 分为stage1 (stage1_5) stage2两个阶段。stage1 可以看成是initial program loaderI(IPL),而stage2则实现了grub 的主要功能,包括对特定文件系统的支持(如ext2,ext3,reiserfs等),grub自己的shell,以及内部程序(如:kernrl,initrd,root )等。

linux启动顺序讲解

一、简单介绍RHEL开机时的先后顺序 BIOS —> MBR —> Kernel —> init 1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备); 2、检测完后会进入MBR也就是boot loader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导); 3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中; 4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序; init这个程序会根据Run level来执行以下这些程序: ·/etc/rc.d/rc.sysinit; ·/etc/rc.d/rc 和etc/rc.d/rc?.d/ ·/etc/rc.d/rc.local ·如果有适当的图形界面管理程序 二、BIOS初始化时主要的三个任务 BIOS(B asic I nput/O utput S ystem) 1、电脑周边设备的检测,加电自检POST (Power on self test); 2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动; 3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区; 三、介绍Boot Loader中的主要工作 1、Boot Loader可以安装在两个地方: ·安装在硬盘的MBR中; ·当有时候MBR中被其他开机管理程序占用就可以将Boot Loader 安装在硬盘中的其中一个分区的引导扇区上,; 2、Boot Loader的程序码分为两个阶段: (1)Boot Loader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里, (2)Boot Loader第一阶段的程序码是从boot 分区来载入的,就是说Boot Loader 第二阶段程序码存放在/boot 这个分区中; 3、下面来看三个Boot Loader 的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux 当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;

Linux引导过程的九个步骤

Linux引导过程的九个步骤 【1】硬件和固件以及读入MBR BIOS 或其它固件系统读取硬盘或者其它引导设备(例如,光盘、软盘、网络引导等等)上的 主引导记录。 计算器在接通电源之后,首先由BIOS 进行自检,即进行所谓的POST(Power On Self Test), 然依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。例如,通常BIOS中设置 的引导顺序为第一个IDE硬盘的C分区在最前面,那就是说,计算机开机启动时会把C盘的第0柱面,第0头的第1个扇区读入内存,然跳到那里开始执行。这个扇区有一个大家很熟悉的名字,它就 是: MBR(Main Boot Record)。换句话说,MBR里面存放的是一小段程序以及分区表的数据。 在使用WIN9X和DOS 时,这里面存放的代码就会把分区表里标记为Active 的分区的第一个 扇区(一般存放着操作系统的引导代码)读入内存并跳转到那里开始执行. 【2】引导装载程序运行 x86 系统上的Linux 系统通常使用LILO 或者GRUB。某些老式系统可能使用loadlin 通过 一个中间DOS 分区进行引导。在Power PC® 系统上,这可能是BootX或者yaboot。一般来说,引导装载程序是一种简单的程序,它知道到哪里寻找Linux 内核,可能在几个版本之间 进行选择,甚至可以选择同一计算机上的其它操作系统。 在用LILO 来引导LINUX 时,有两种选择: (a) BIOS->LILO(直接安装在MBR中)->KERNEL 把LILO直接安装在MBR,这时就由BIOS直接把LILO代码调入内存,然跳转执行LILO即可. (b) BIOS->MBR->LILO(安装在活动分区的第一个扇区)->KERNEL 把LILO安装在LINUX分区,必须把LINUX分区设为Active. 这时BIOS调入的是WIN9X/DOS 下的MBR代码,然由这段代码来调入LILO的代码(位于活动分区的第一个扇区). 在过去,对于能够设置可引导分区的最高柱面,最大硬盘大小, 在大硬盘上主分区的位置等等 有许多限制。因为在读入及执行MBR 时,操作系统还没有起来, 所以只能用BIOS 提供的 INT13 来进行磁盘操作,而INT13 只能读写硬盘1024 柱面之前的数据,由此可知任何操作 系统的引导代码都必须在1024 柱面之前。对于LINUX的引导装载程序来说,不管你是使用 方式(a)还是方式(b)来启动,都要保证KERNEL放在1024柱面之前。但因为LINUX不使用INT13 来进行硬盘操作, 所以在KERNEL启动以后, 就有读写1024 柱面以后数据的能力了。 不过, 现在几乎所有硬件系统的BIOS 都得到了改进, 能够处理实际上无限大的硬盘, 因此 现代的引导装载程序(至少是Linux的引导装载程序),对于分区大小或位置已经没什么限制了.

怎样执行在Linux上运行应用程序

如何执行在Linux上运行的应用程序 关键字:Linux 先决条件 要充分理解本文,必须具备Windows 环境下桌面应用程序的工作经验,我认为读者对如何使用Linux 桌面有一个基本的了解。使用一个运行的Linux 计算来机探讨本文的概念和示例是很有帮助的。 概述 有时候第一次在Linux 上运行一个应用程序需要一点额外工作。有些应用程序,比如服务器服务,可能无法安装为服务,因此您需要从命令行启动这些应用程序。对于启动这些应用程序的用户帐户而言,需要在应用程序文件中设置执行许可标志(x)。 运行用户空间应用程序 Linux 在内核空间或用户空间运行进程。用户空间是操作系统的区域,应用程序通常在此运行。简单地说,每个用户帐户有其自己的用户空间,应用程序在这个领域内运行。 默认情况下,只有root 用户有权访问内核空间。root 用户是Linux 中的超级用户,相当于Windows 中的管理员帐户。在root 用户帐户下运行应用程序可能会引起安全风险,是不可取的。 很多服务器服务需要root 权限启动服务。然而,服务启动后,root 帐户通常会将其移至服务帐户。严格地说,Linux 中的服务帐户才是标准的用户帐户。主要区别是服务帐户仅用于运行一个服务,而不是为任何实际登录的用户准备的。 设置权限 您可以使用chmod 命令在一个文件中设置执行权限。在Linux 中,umask 设置通常用来防止下载的文件被执行,也有充分的理由相信,因为它有助于维护Linux 计算机的安全性。 大多数Linux 发行版具有一个值为022 的umask 设置,这意味着,默认情况下一个新文件权限设置为644.权限的数字表示形式采用读(4)、写(2)、执行(1) 的格式。因此,默认权限为644 的应用程序下载意味着文件所有者有读写权限,而组用户和其他用户只有读权限。 例如,为每个人赋予一个文件的执行权限,使用chmod a+x 命令。a 表示所有人,加号(+) 表示添加,而x 表示执行。同样地,如果应用程序是一个服务器服务,您应该确保只有授权帐户才有权执行此服务。 如果一个应用程序能够在标准用户帐户权限下运行,但只有特定组中的用户才需要使用它,您可以将该组所有者权限设置为可执行,然后将这些用户添加到该组中。 更具体地说,您可以在一个可执行文件中设置访问控制列表(ACL) 权限,赋予特定用户或组权限来运行该应用程序。使用setfacl 实用工具设置ACL 权限。 对于这些需要以root 用户启动进程的应用程序,比如服务器服务,您有几个选择。总结了允许用户执行需要root 权限的服务器服务的各种选项。 选项描述 作为root 用户不推荐用于服务器服务。当用户已经知道root 密码而且应用程序泄露不是首要关注问题时,可用于应用程序。 SetUID 由于安全问题,不推荐使用。SetUID 允许标准用户以另一个用户方式,比如root 用户,执行一个文件。 sudo 很常用,并且被认为是一个很好的实践。sudo 授予一个用户或组成员权限以执行可能额外需要root 权限的文件。该用户不需要知道root 密码。 带有文件权限的标准用户帐户在一个文件上为用户所有者、组所有者或其他人(所有人)

Linux2 进程的启动方式

Linux2 进程的启动方式 程序或者命令的执行实际上是通过进程实现的。通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。启动进程的方式有两种,分别为前台启动方式和后台启动方式。 1.以前台方式启动进程 在终端窗口的命令行上输入一个Linux命令并按Enter键,就是以前台方式启动了一个进程。例如,在终端窗口上执行“find /-name myfile.txt”命令,就以前台方式启动了一个进程,在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起,然后使用ps命令查看该进程的有关信息,如图5-1所示。 图5-1 以前台方式启动进程 2.以后台方式启动进程 要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。启动后,系统会显示如下所示的信息: 这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。 然后,出现了shell提示符,这表示已返回到前台。这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。 如果执行jobs命令可以查看当前控制台中的后台进程,如图5-2所示,可以看到当前在后台有两个进程,其中一个处于运行(Running)状态,另一个,即被挂起的进程处于停止(Stopped)状态。等过一段时间后再使用ps命令进行查看,会发现PID为3516的进程已经结束了,而PID为3385的进程还存在。

linux grub 引导启动过程详解

linux grub 引导启动过程详解 2008-01-08 17:18 这几天看了很多文档,算是对linux的启动过程有了比较细致的了解. 网上有很多文章谈到这方面的内容,但总觉得没有一篇完全的解析linux启动的 细节,下面是我小弟在学习的过程中总结出来的一些东东.这个是完整的linux启动过程, 不涉及内核,但是我觉得比较详细哦. (由于本人比较懒,这一段是从网上抄的) 机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘 设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查 软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设 备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区, 寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader. linux里面的boot loader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB( GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。那么启动的时候grub是如何被载入的呢 grub有几个重要的文件,stage1,stage2,有的时候需要stage1.5.这些文件一般都 在/boot/grub文件夹下面.grub被载入通常包括以下几个步骤: 1. 装载基本的引导装载程序(stage1),stage1很小,网上说是512字节,但是在我的系统上用du -b /boot/grub/stage1 显示的是1024个字节,不知道是不是grub版本不同的缘故还是我理解有误.stage1通常位于主引导扇区里面,对于硬盘就是MBR了,stage1的主要功能就是装载第二引导程序(stage2).这主要是归结于在主引导扇区中没有足够的空间用于其他东西了,我用的是grub 0.93,stage2文件的大小是107520 bit. 2. 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出更高级的功能, 以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。由于stage2很大,所以它一般位于文件系统之中(通常是boot所在的根 分区). 上面还提到了stage1.5这个文件,它的作用是什么呢你到/boot/grub目录下看看, fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统 有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这 时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的stage1.5.但是对于grub 0.93好像stage1.5并不是很重要,因为我试过了,在没有stage1.5 的情况下, 我把stage1安装在软盘的引导扇区内,然后把stage2放在格式化成ext2或者fat格式的软盘内,启动的时候照常引导,并不需要e2fs_stage_1.5或者fat_stage_1.5. 下面是我的试验: #mkfs.ext2 /dev/fd0 #mount -t ext2 /dev/fd0 /mnt/floppy #cd /mnt/floppy #mkdir boot #cd boot #mkdir grub (以上三步可用mkdir -p boot/grub命令完成) #cd grub #cp /boot/grub/{stage1,stage2,grub.conf} ./ #cd; umount /mnt/floppy

linux系统及编程基础课后答案

第1章习题答案 1. 什么是Linux? 答:Linux是一款优秀的操作系统,支持多用户、多进程、多线程,实时性好,功能强大且稳定。同时,它又具有良好的兼容性和可移植性,被广泛应用于各种计算机平台上。作为Internet的产物,Linux操作系统由全世界的许多计算机爱好者共同合作开发,是一个自由的操作系统。 2. Linux的主要特点是什么? 答:Linux具有UNIX的所有特性并且具有自己独特的魅力,主要表现在以下几个方面: 开放性 多用户 多任务 出色的稳定性能 良好的用户界面:Linux向用户提供了两种界面:用户界面和系统调用界面。 设备独立性:设备独立性是指操作系统把所有外部设备统一当作文件来看,只要安装它们的驱动程序,任何用户都可以像使用文件那样操作并使用这些设备,而不必知道它们的具体存在形式。 丰富的网络功能:完善的内置网络是Linux的一大特点,Linux在通信和网络 功能方面优于其他操作系统。其他操作系统不包含如此紧密的内核结合在一起的联接网络的能力,也没有内置这些联网特性的灵活性。而Linux为用户提供了完善的、强大的网络功能。

可靠的安全性 良好的可移植性:可移植性是指将操作系统从一个平台转移到另一个平台,使它仍然能按其自身的方式运行的能力。 3. Linux的主要组成包括什么? 答:Linux主要组成为: Linux内核(Kernel):内核(Kernel)是系统的心脏,是运行程序和管理硬件设备的内核程序,决定着系统的性能和稳定性,实现操作系统的基本功能。 Linux的Shell:Shell是系统的用户界面,提供用户与内核进行交互操作的一种接口。Shell是一个命令解释器,它解释由用户输入的命令并且把他们送到内核执行。Shell编程语言具有普通编程语言的很多特点,用这种编程语言编写shell程序与其他应用程序具有同样的效果。 Linux 文件系统:文件系统是文件存放在磁盘等存储设备上的组织方法。通常是按照目录层次的方式进行组织,用户能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限、文件的共享程度。 Linux 实用程序(utilities)和应用程序(Applications):标准的Linux系统都有一套成为应用程序的程序集,包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。 4. Linux与Windows的主要区别是什么? 答:主要区别: (1)Linux的应用目标是网络 Linux的设计定位于网络操作系统。虽然现在已经实现Linux操作系统的图形界面,但仍然没有舍弃文本命令行。由于纯文本可以非常好地跨越网络进行工作,所以Linux

Linux启动过程详解

深入浅出:Linux的启动流程刨析 Linux的启动过程,是一个Linuxer必须要熟练掌握的。通过系统的启动过程,可以更深入的理解Linux,假如Linux系统出问题的话,可以通过启动过程来分析原因,解决问题。而且,在掌握了Linux的启动流程后,还可以借助宿主机来打造自己的Linux。 下面是我画的一张简单的Linux启动流程图 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1、/sbin/init 2、/etc/inittab 3、/etc/rc.d/rc.sysinit 4、/etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4.. 5、/etc/fstab 1、关于/sbin/init与/etc/inittab 关于/sbin/init ,它是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件,我们可以通过/etc/inittab来一睹它的功能,里面的内容是一种固定的文本格式,id:runlevels:action:process 我们来通过它的内容来学习它之前,先了解写运行级别的分类(0-6): 0:关机half

1:单用户模式singel user 2:多用户模式multi user ,不提供nfs服务without nfs 3:完全多用户字符模式full multiuser text mod 4:系统预留officially undefined 5:图形登录界面graphical login 6:重启reboot id:3:initdefault: //这里定义linux的启动时的运行级别,可以看到我的主机的启动级别是3 # System initialization. si::sysinit:/etc/rc.d/rc.sysinit //紧接着,运行系统第一个脚本/etc/rc.d/rc/sysinit //它的action:sysyinit指的是定义系统初始化过程 l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 //然后就是加载服务了,他们被定义在/etc/rc.d/rcN.d l3:3:wait:/etc/rc.d/rc 3 //action:waite 这个进程在在对应级别启动一次,知道它结束为止,我的系统启动级别为3,所有执行rc 3对应的服务 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ca::ctrlaltdel:/sbin/shutdown -t3 -r now //这里定义了一个组合快捷键,熟悉吧,没错就是重启,你可以把它注释掉不用 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"//这里定义了ups电源,powerfail 指的是如果突然断电,它对应的process命令是,提示用户系统电源失效,将要关机,提醒用户把数据都存储好 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"//这里的action,powerokwaite,指的是系统恢复供电,关机取消...

 1:2345:respawn:/sbin/mingetty tty1 //开启终端,在系统准备工作做好后,就会启动出6个终端,tty1~6 mingetyy就是终端的执行命令 2:2345:respawn:/sbin/mingetty tty2 //可以看到他们对应的级别是2345,你也可以注释

USB引导安装linux系统

图解制作U盘引导安装系统的方法 此方法可以安装linux,windows等多种操作系统(这里我们以GhostXPSP3.iso和ESX-4.1.0-update01-348481.iso镜像为例),制作简单,绝对实用,注意在使用时候一定要先备份好自己U盘的资料,因制作前先要格式化自己的u盘为“Fat32”格式,格式化后可以进行USB引导的制作了 一、利用bootice工具制作对U盘写入主引导记录 方法: 1.打开bootice程序 2.选择目标磁盘(这里我们选择要做引导的U盘,)点击“主引导记录M”如下图: 3.如下图选择黄色标记那个选项,选择好后点击“安装/配置”

4.接下来直接点击“写入磁盘”,如下图 5.系统会提示你“Grub4dos引导程序配置修改成功”,点击“确定”,整个引导制作过程完成,如下图: 二、拷贝和编辑一些主要文件 1.拷贝grub.exe,grldr,文件到U盘根目录下(必须放在根目录下)如下图

2.在u盘根目录下新建menu.lst文件(这个是启动菜单,你可以放好几种系统镜像,安装时候,再去菜单选择要安装的系统,这里因是用GhostXPSP3.iso和ESX-4.1.0-update01-348481.iso镜像为例故只做这两个的菜单),menu.lst文件里写入如下内容如下: timeout 10 default /default title GhostXPSP3 为菜单选择的标题(名字可以随便取) map (hd0,0)/winpe/GhostXPSP3.iso (hd32) 镜像存放的位置 map --hook chainloader (hd32) title ESX4.1 map (hd0,0)/ESX4.1/ESX-4.1.0-update01-348481.iso (hd32) map --hook chainloader (hd32) 3.去U盘根目录下建立两个文件夹“winpe”,“ESX4.1”这两个分别是镜像的位置如下图: 4.将“GhostXPSP3.iso”和“ESX-4.1.0-update01-348481.iso”两个镜像跟别考入“winpe”,“ESX4.1”两个文件夹下,到此整个制作过程结束 三、安装方法 1.把要安装系统的电脑启动项更改为从USB启动

Linux启动全过程-由bootloader到fs

Linux启动过程 许多人对Linux的启动过程感到很神秘,因为所有的启动信息都在屏幕上一闪而过。其实Linux的启动过程并不象启动信息所显示的那样复杂,它主要分成两个阶段: 1.启动内核。在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。 2.执行程序init。装入内核并初始化设备后,运行init程序。init程序处理所有程序的启动, 包括重要系统精灵程序和其它指定在启动时装入的软件。 下面以Red Hat为例简单介绍一下Linux的启动过程。 一、启动内核 首先介绍启动内核部分。电脑启动时,BIOS装载MBR,然后从当前活动分区启动,LILO获得引导过程的控制权后,会显示LILO提示符。此时如果用户不进行任何操作,LILO将在等待制定时间后自动引导默认的操作系统,而如果在此期间按下TAB键,则可以看到一个可引导的操作系统列表,选择相应的操作系统名称就能进入相应的操作系统。当用户选择启动LINUX操作系统时,LILO就会根据事先设置好的信息从ROOT文件系统所在的分区读取LINUX映象,然后装入内核映象并将控制权交给LINUX内核。LINUX内核获得控制权后,以如下步骤继续引导系统: 1. LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。内核映象前面的一些代码完成解压缩。 2. 如果系统中安装有可支持特殊文本模式的、且LINUX可识别的SVGA卡,LINUX会提示用户选择适当的文本显示模式。但如果在内核的编译过程中预先设置了文本模式,则不会提示选择显示模式。该显示模式可通过LILO或RDEV工具程序设置。 3. 内核接下来检测其他的硬件设备,例如硬盘、软盘和网卡等,并对相应的设备驱动程序进行配置。这时,显示器上出现内核运行输出的一些硬件信息。 4. 接下来,内核装载ROOT文件系统。ROOT文件系统的位置可在编译内核时指定,也可通过LILO 或RDEV指定。文件系统的类型可自动检测。如果由于某些原因装载失败,则内核启动失败,最终会终止系统。 二、执行init程序 其次介绍init程序,利用init程序可以方便地定制启动其间装入哪些程序。init的任务是启动新进程和退出时重新启动其它进程。例如,在大多数Linux系统中,启动时最初装入六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台,因而总是提供六个虚拟登陆控控制台进程。控制init程序操作的规则存放在文件/etc/inittab中。Red Hat Linux缺省的inittab文件如下:# #inittab This file describes how the INIT process should set up the system in a certain #run-level. # # #Default runlevel.The runlevels used by RHS are: #0-halt(Do NOT set initdefault to this) #1-Single user mode #2-Multiuser,without NFS(the same as 3,if you do not have networking) #3-Full multiuser mode #4-unused #5-X11 #6-reboot(Do NOT set initdefault to this)

windows与linux系统引导分区系统修复

【转】 [命令]windows与linux系统引导分区系统修复 2011-09-08 16:26 转载自分享 最终编辑孤独散步者的梦 环境说明: windows与linux系统并存情况下: 一、修复Linux的GRUO引导菜单: 在windows重装,卸载之后, linux引导分区修复,因为windows清除MBR中的多重开机管理程序,重新安装GRUB即可: 用Linux启动盘,或安装盘或livecd,引导进入救援模式: 插入linux系统盘是第一张,然后在出现界面时按F4或F5键,进入linux rescue模式,或直接输入“linux rescue”,再提示设定语系(选择English),键盘类型(选择US),选择是否启用网卡(选择NO),选择如何挂载Linux分区(一般选择Rdad-Only),然后进入sh#命令行! (1)、方法一:然后进入sh#命令行! 输入:“chroot /mnt/sysimage”(切换目录); 输入:“grub-install /dev/hda”(重装GRUB,/dev/hda指linux系统安装在第一硬盘) (2)、方法二:进入#sh>后: sh#grub (输入grub回车) grub>root (hd0,1) (注:这里hd0指第一硬盘,1指第一分区,不清楚按TAB键。)grub>setup (hd0) (注:指安装GRUO在第一硬盘上) 二、修复Windows引导菜单: 在linux系统删除之后,修复系统主引导扇区,出windows引导菜单方法: (1)、用启动盘进入DOS,执行: A:\> fdisk /mbr (2)、用windows2000以上的安装光盘,引导进入“系统故障修复台”: C:\windows\>fixmbr (3)、使用SPFDisk程序修复mbr: 到https://www.sodocs.net/doc/572320848.html,下载SPFDisk软件,做成启动盘!引导系统! A:\>spf2k3rc (执行exe程序) A:\>spfdisk /mbr GRUB使用指南kes,2007-06-15 09:29:13 GRUB使用指南 GRUB是一个多重开机管理工具,它可用来激活Linux、BSD、OS/2、BeOS与 Windows95/98/NT等众多操作系统,GRUB是一个独立于操作系统之外的开机程序,并不像LILO是依靠Linux才能进行设定与维护,也提供了类似Bash的命令列模式,让使用者更方便地设定GRUB。

ARMLinux启动过程分析(1).

ARM Linux启动过程分析(1) 摘要:嵌入式 Linux 的可移植性使得我们可以在各种电子产品上看到它的身影。对于不同体系结构的处理器来说Linux的启动过程也有所不同。本文以S3C2410 ARM处理器为例,详细分析了系统上电后 bootloader的执行 流程及 ARM Linux的启动过程。关键词:ARM Linux bootloader 启动过程Abstract:We can see embedded Linux in kinds of electronic products b ecause of its portability. Linux’s start-up procedure for different processors is also different. This paper provides the analysis ofbootloader execution process and Linux kernel start-up procedure - taking the S3C2410 ARM processor as example. Keywords: ARM Linux bootloader start-up procedure 1. 引言 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了巨大的发展。虽然 Linux 在桌面 PC 机上的普及程度远不及微软的Windows 操作系统,但它的发展速度之快、用户数量的日益增多,也是微软所不能轻视的。而近些年来 Linux 在嵌入式领域的迅猛发展,更是给 Linux 注入了新的活力。一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(bootloader), Linux 内核,文件系统,应用程序。其中bootloader是系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系统做为根文件系统(Root Filesystem)。根文件系统是 Linux 系统的核心组成部分,它可以做为Linux 系统中文件和数据的存储区域,通常它还包括系统配置文件和运行应用软件所需要的库。应用程序可以说是嵌入式系统的“灵魂”,它所实现的功能通常就是设计该嵌入式系统所要达到的目标。如果没有应用程序的支持,任何硬件上设计精良的嵌入式系统都没有实用意义。从以上分析我们可以看出 bootloader 和 Linux 内核在嵌入式系统中的关系和作用。Bootloader在运行过程中虽然具有初始化系统和执行用户输入的命令等作用,但它最根本的功能就是为了启动 Linux 内核。在嵌入式系统开发的过程中,很大一部分精力都是花在bootloader 和 Linux 内核的开发或移植上。如果能清楚的了解 bootloader 执行流程和 Linux的启动过程,将有助于明确开发过程中所需的工作,从而加速嵌入式系统的开发过程。而这正是本文的所要研究的内容。 2. Bootloader 2.1 Bootloader的概念和作用Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于 PC 机上的 BIOS。在完成对系统的初始化任务之后,它会将非易失性存储器(通常是 Flash或 DOC 等)中的Linux 内核拷贝到 RAM 中去,然后跳转到内核的第一条指令处继续执行,从而启动 Linux 内核。由此可见,bootloader 和 Linux 内核有着密不可分的联系,要想清楚的了解 Linux 内核的启动过程,我们必须先得认识 bootloader的执行过程,这样才能对嵌 入式系统的整个启过程有清晰的掌握。 2.2 Bootloader的执行过程不同的处 理器上电或复位后执行的第一条指令地址并不相同,对于 ARM 处理器来说,该地址为 0x00000000。对于一般的嵌入式系统,通常把 Flash 等非易失性存储器映射到这个地址处,而 bootloader就位于该存储器的最前端,所以系统上 电或复位后执行的第一段程序便是 bootloader。而因为存储 bootloader的存储器不同,bootloader的执行过程也并不相同,下面将具体分析。嵌入式系

linux开机启动脚本的顺序

linux开机启动脚本的顺序 如果服务器重启之后需要手工开启许多服务、工作及以后的维护相对比较繁琐、特地总结了下linux下开机自动启动脚本所涉及的知识和方法、如下: 1、相关基础知识点 1)redhat的启动方式和执行次序是: 加载内核 执行init程序 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 /etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中) /sbin/mingetty # 等待用户登录 在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括: 调入keymap以及系统字体 启动swapping 设置主机名 设置NIS域名 检查(fsck)并mount文件系统 打开quota 装载声卡模块 设置系统时钟 等等。 /etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的 ,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx 从小到大来执行。(其中xx是数字、表示的是启动顺序)例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用 /etc/rc.d/rc3.d/下的脚本。 值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中 的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。 init在等待/etc/rc.d/rc执行完毕之后(因为在/etc/inittab中/etc/rc.d/rc的 action是wait),将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。 至此,LINUX的启动结束。 2)init运行级别及指令 一、什么是INIT: init是Linux系统操作中不可缺少的程序之一。

相关主题