导航:首页 > 操作系统 > linux启动过程分析

linux启动过程分析

发布时间:2022-12-30 08:23:17

A. 嵌入式linux的bootloader的启动流程是怎样的

嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序。

当系统首次引导时,或系统被重置时,处理器会执行一个位于Flash/ROM中的已知位置处的代码,Bootloader就是这第一段代码。它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系统作为根文件系统(Root Filesystem),然后加载必要的内核模块,启动应用程序。这就是嵌入式Linux系统启动过程 Linux 引导的整个过程。

Bootloader 的启动方式:

  1. 网络启动方式。这种方式的开发板不需要较大的存储介质,跟无盘工作站有点类似,但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。

  2. 硬盘启动方式
    传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并使用磁盘作为存储介质。Linux传统上是LILO (Linux Loader) 引导,后来又出现了GUN的软件 (Grand Unified Bootloader) 。 这两种Bootloader广泛应用在X86的Linux系统上。

  3. Flash启动方式。大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。它们之间的不同在于: NOR Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。而NAND Flash并不支持XIP,所以要想执行 NAND Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。NOR Flash 使用最为普遍。Bootloader一般放在Flash的底端或者顶端,这需要根据处理器的复位向量来进行设置。可以配置成MTD设备来访问Flash分区。

B. 下面关于RED HAT LINUX 9操作系统的启动过程。正确的顺序为

2-5-3-1-4-6

C. 如何修复Linux引导

多种方式安装Linux系统
1. 制作安装启动盘
方法一、在DOS/Windows下制做
G:\dosutils> rawrite
Enter dis image source file name:bootdisk.img
Enter target diskette drive:a
Please insert a formatted diskette into drive A:and press –ENTER--:[Enter]
注:光盘\images\有以下几个IMG文件
l bootdisk.img 安装引导盘映像文件
l drvnet.img 网卡驱动盘
l drvblock.img 块设备驱动盘
l pcmciadd.img PCMCIA设备驱动盘
方法二、在Linux下制做启动盘
#dd if=boot.img of=/dev/fd0 bs=1440
2. 光盘安装Linux系统
(1)使用1#光盘启动计算机
(2)直接按回车键/linux text选择安装界面
(3)开始安装向导
3. 硬盘安装Linux系统
(1)将安装光盘的ISO文件复制到硬盘的某个分区中
(2)利用1#光盘/安装启动盘启动计算机
(3)输入linux askmethod选择安装介质
(4)开始安装向导
4. FTP/HTTP安装Linux系统
(1)准备安装文件,制作HTTP/FTP服务器
(2)利用1#光盘/安装启动盘启动计算机
(3)输入linux askmethod选择安装介质
(4)开始安装向导
二.启动linux系统
1.Linux启动过程分析
(1)BIOS自检
l 硬件检测及初始化
l 引导启动设备
(2)引导启动设备
l 软盘(0磁道第一个扇区)
l 光盘(最外围存储轨道)
l 硬盘(MBR)
l USB存储设备
(3)调用Linux引导程序至内存中
l Linux的引导程序可以使用GRUB/LILO等引导软件
l GRUB/LILO可以安装在MBR/引导分区的引导扇区中
(4)运行Linux内核
l 内核放在/boot目录中,Linux系统可以同时支持多版本内核
l 解压缩内核
l 检测硬件
l 加载root文件系统
(5)执行init进程
l 启动新进程或关闭进程
l 选择启动模式
l 建立虚拟终端
(6)用户登录
l 输入用户名及口令
l 加载用户配置文件
l 加载shell程序
2.引导盘的创建
方法一:安装过程中创建
方法二:mkbootdisk
#mkbootdisk --device /dev/fd0 2.4.20-8
方法三:使用dd命令
# dd if=/boot/vmlinuz of=/dev/fd0
3.GRUB
(1)安装GRUB
l 安装软件包
#rpm –ivh grub-0.934.i386.rpm
l 使用安装命令安装GRUB到MBR
#grub
grub>root (hdx,y)
grub>setup (hdx[,y])
(2)GRUB的配置
#vi /boot/grub/grub.conf
grub.conf中常用的配置命令有:
default=菜单项序号/saved
设置启动菜单的默认启动项
hiddenmenu
隐藏菜单界面
splashimage =图像文件全路径名
指定某文件作为启动菜单的背景图像
timeout=延迟秒数
设置启动菜单的启延时
title 菜单项名称
开始一个菜单项的配置,设置菜单项的名称
root (hdx,y)
设置GRUB的根设备为linux内核所在的分区
kernel 内核文件名称
指定内核文件的名称及加载内核所需的参数
initrd initrd文件名
指定镜像文件的位置
map (hdx[,y]) (hdx[,y])
建立虚拟磁盘
rootnoverify (hdx,y)
指定windows启动引导器的位置
makeactive
标识指定分区为活动分区
chainloader +n/文件名称
调用指定windows启动文件
password 口令/--md5 口令密文
设置GRUB启动菜单和菜单项口令
lock
利用password设置的全局口令锁定菜单项
savedefault
保存当前启动菜单项为默认启动
文件实例:
# grub-md5-crypt(产生口令的MD5密文)
# vi /etc/grub.conf
default=0
timeout=50
splashimage=(hd0,0)/grub/splash.xpm.gz
password --md5 #!dfdasdf34123!#@$!#@
title RedHat Linux 9.0
root (hd0,2)
kernel /Vmlinuz-2.4.20-8 ro root=/LABEL=/
initrd /initrd-2.4.20-8.img
password linux
tile windows 2000
rootnoverify (hd0,0)
chainloader +1
lock
(3)GRUB的FAQ
l 编辑模式的使用
用于临时修改菜单的选项,在菜单界面中按E键进入

l 命令行模式的使用
利用命令行命令设置GRUB,在菜单界面中按C键进入

grub命令行中常用的命令有:
grub>root (hdx,y) //设置根设备所对应的分区
grub>kernel 内核文件 //设置内核文件的名称
grub>initrd 镜像文件名 //设置镜像文件名
grub>boot //启动指定操作系统
grub>rootnoveify (hdx,y) //设置根设备所对应的分区,但不检查加载点
grub>chainloader 文件名 //加载指定的文件
grub>help //获取帮助
grub>reboot //重启系统
grub>md5-crypt //生成口令的MD5密文
grub>setup (hdx[,y]) //安装GURB到MBR/指定分区的引导扇区中
grub>hide 分区 //隐藏分区
grub>cat 文件名 //显示文件内容
grub>find 文件名 //查找文件
l 如果MBR中的GRUB引导程序被其它程序覆盖,应该如该恢复
放入第一张安装启动盘,开始启动计算机:boot:linux rescue(启动linux的修复模式,加载硬盘上的LINUX系统到/mnt/sysimage)
#grub
grub>root (hdx,y)
grub>root (hdx)
l 恢复GRUB的配置文件
由于grub.conf设置的问题,可以采用以下方法进行恢复:
放入第一张安装启动盘,开始启动计算机:boot:linux rescue(启动linux的修复模式)
#vi /mnt/sysimage/boot/grub/grub.conf
l 如何利用GRUB进入单用户模式,找回丢失的root用户口令
在GRUB菜单界面中按e编辑linux菜单项,给内核添加参数single
l 如何卸载GRUB
#rpm -e grub
C:\>fisk/mbr
l 如何制作GRUB启动盘
#grub-install /dev/fd0
3.init 进程
(1)init进程的作用
init进程是系统启动第一个进程,它负责加载其它进程、管理系统的其它进程。
(2)init的配置-----inittab文件
/etc/inittab文件用于设置init进程在执行时加载哪些程序,inittab文件由若干个记录构成,每条记录格式如下:
ID:RUNLEVEL:ACTION:COMMAND
以下为默认inittab文件内容:
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/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;power shutting down”
pr:12345:powerokwait:/sbin/shutdown –c “power restored;shutdown cancelled”
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon
说明:
(3) 修改/etc/inittab文件,可以设置默认启动模式、各运行级别所加载的程序、CTRLALTDEL的动作、开设虚拟用户终端
(4)/etc/rc.d 的目录内容
1)/etc/rc.d/init.d目录
l 保存所有运行等级需要的所有脚本
l 启动、停止、重启某些服务
2)/etc/rc.d/rc
l 系统改变运行等级,通过此脚本检查/etc/rc.d/rcX.d目录和文件可存在,以及是否正在运行等,以及运行/etc/rc.d/rcX.d中所有S开头的脚本
3)/etc/rc.d/rcX.d目录
l 存放每一运行等级默认启动项,该目录中的文件链接到:/etc/rc.d/init.d
l 文件名格式为K{Two-digit number} {script name}/S{Two-digit number} {script name},K:以stop参数运行,S:以start参数运行;Two:数字代表执行顺序
4)/etc/rc.d/rc.local
l 该脚本在2,3,5运行等级结束时执行
5)/etc/rc.d/rc.sysinit
l 系统初始脚本,用于设置系统的时钟、加载键盘、加载系统字体、加载其他文件系统、激活交换分区、生成日志文件
三.linux系统修复模式
1. 系统修复模式的简介
使用安装光盘启动修复模式,用于检测和加载硬盘上已安装的linux系统到/mnt/sysimage目录中。该模式主要用于修复损坏的系统,当系统出现故障时可使用修复模式.
2.启动修复模式
使用1#安装启动系统
在boot:提示符下输入linux rescue启动修复模式,按照启动向导启动系统
linux修复模式的应用
修复系统
找加丢失的用户口令
修复系统配置

D. linux系统如何引导步骤

Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:

E. linux最原始进程是什么

linux的启动过程:
开机加电自检→MBR引导→GRUB菜单→内核(kernel)→init进程→配置/etc/inittab
/etc/inittab的配置包括2部分
→ 一个是执行脚本/etc/rc.d/rc.sysinit
→ 另一个是脚本/etc/rc.d/rc
配置完成后启动mingetty进程

你问的最原始进程应该是init进程。

F. linux内核模块如何开始和结束

GRLB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管Linux的启动过程了。

内核完成再次系统自检之后,开始采用动态的方式加载每个硬件的模块,这个动态模块大家可以想象成硬件的驱动(默认 Linux 硬件的驱动是不需要手工安装的,如果是重要的功能,则会直接编译到内核当中;如果是非重要的功能,比如硬件驱动会编译为模块,则在需要时由内核调用。不过,如果没有被内核硬件,要想驱动,就需要手工安装个硬件的硬块了。具体的安装方法会在后续章节中介绍)。

那么,Linux 的内核到底放在了哪里呢?当然是 /boot 的启动目录中了,我们来看看这个目录下的内容吧。

[root@localhost ~]#ls /boot/
config-2.6.32-279.el6.i686
#内核的配置文件,内核编译时选择的功能与模块
efi
#可扩展固件接口,为英特尔为全新PC固件的体系结构、接口和服务提出的建议标准
grub
#启动引导程GTUB的数据目录
initramfe-2.6.32-279.el6.i686.img
#虚拟文件系统(CentOS 6.x 中用initramfs替代了initrd,但功能是一样的)
lost+found
故boot分区的备份目录
symvers-2_6.32-279.el6.i686.gz
#模块符号信息
System.map-2.6.32-279.el6.i686
#内核功能和内存地址的对应列表
vmlinuz-2.6.32-279.el6.i686
#用于启动的Linux内核。这个文件是一个压缩的内核镜像


我们已经知道,Linux 会把不重要的功能编译成内核模块,在需要时再调用,从而保证了内核不会过大。在多数 Linux 中,都会把硬件的驱动程序编译为模块, 这些模块保存在 /lib/moles/ 目录中。常见的 USB、SATA 和 SCSI 等硬盘设备的驱动,还有一些特殊的文件系统(如 LVM、RAID 等)的驱动,都是以模块的方式来保存的。

如果 Linux 安装在 IDE 硬盘之上,并且采用的是默认的 ext3/4 文件系统,那么内核启动后加载根分区和模块的加载都没有什么问题,系统会顺利启动。但是如果 Linux 安装在 SCSI 硬盘之上,或者采用的是 LVM 文件系统,那么内核(内核加载入内存是启动引导程序 GRUB 调用的,并不存在硬盘驱动不识别的问题)在加载根目录之前是需要加载 SCSI 硬盘或 LVM 文件系统的驱动的。

SCSI 硬盘和 LVM 文件系统的驱动都放在硬盘的 /lib/moles/ 目录中,既然内核没有办法识别 SCSI 硬盘或 LVM 文件系统,那怎么可能读取 /lib/moles/ 目录中的驱动呢?Linux 给出的解决办法是使用 initramfs 这个虚拟文件系统来处理这个问题。

initramfe虚拟文件系统

CentOS 6.x 中使用 initramfs 虚拟文件系统取代了 CentOS 5.x 中的 initrd RAM Disk。它们的作用类似,可以通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需的内核模块,比如 USB、SATA. SCSI 硬盘的驱动和 LVM、RAID 文件系统的驱动。

也就是说,通过 initramfs 虚拟文件系统在内存中模拟出一个根目录,然后在这个模拟根目录中加载 SCSI 等硬件的驱动,就可以加载真正的根目录了,之后才能调用 Linux 的第一个进程 /sbin/init。

Initramfs 虚拟文件系统主要有以下优点:

关机或者某些进程停止,对应的内核模块就会结束。更多知识请网络《Linux就该这么学》

G. Linux之三Linux的启动过程/关机

man ls

man pages手册页

显示说明

数字说明

Ctrl+Alt+F1/F2......F6

Ctrl+Alt+F7,回到图形化界面

who,看看那几个tty连接着

Linux系统有7个运行级别(runlevel):常用的是3和5

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

运行级别2:多用户状态(没有NFS),没有网络服务

运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

运行级别4:系统未使用,保留

运行级别5:X11表示控制台,进入图形界面

运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别

接通电源BIOS自检,按照BIOS中设置的启动设备(通常是硬盘)来启动,操作系统接管硬件以后,

首先读入 /boot 目录下的内核文件。

init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

init 程序首先是需要读取配置文件 /etc/inittab

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

init进程的一大任务,就是去运行这些开机启动的程序。

但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。

Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。

也就是说,启动时根据"运行级别",确定要运行哪些程序。

============================================================

Linux系统有7个运行级别(runlevel):

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

运行级别2:多用户状态(没有NFS)

运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

运行级别4:系统未使用,保留

运行级别5:X11控制台,登陆后进入图形GUI模式

运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit它调用执行了/etc/rc.d/rc.sysinit,

而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:

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

(1)命令行登录

(2)ssh登录

(3)图形界面登录

在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机 。

正确的关机流程为:sync > shutdown > reboot > halt

sync 将数据由内存同步到硬盘中

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中

Shutdown –h now 立马关机

Shutdown –r now 系统立马重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

最后总结一下,不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。

重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。

1 重启Linux,见到下图,在3秒钟之内按下回车

2 三秒之内要按一下回车,出现如下界面

3 按下e键就可以进入下图

4 移动到下一行,再次按e键

5 移动到下一行,进行修改

修改完成后回车键,然后按b键进行重新启动进入系统

6 移动到下一行,进行修改

最终修改完密码,reboot一下即可。

H. linux开机自启动,如何跳过开机动画

某个程序方便后续的管理;那么我们如何在开机时候,运行此账户安装的程序呢?例如:以linux下指定mycount用户在linux开机时执行/home/sun/startXX.sh为例:

以root登录linux

执行vi /etc/rc.d/rc.local

在文档末尾添加一行语句:su – mycount -c “/home/sun/startXX.sh”

保存rc.local即可。

这个地方一定要注意 su – 这个是环境的变量也会做相应的转换;如果环境变量没有改变的话,我们用su 就可以了。

二、

在Linux中以普通用户开机自动运行脚本程序

测试环境:CentOS6.5

管理员:root

普通用户:test1

实现目标:在Linux启动时,以普通用户test1自动运行位于根目录下的脚本程序test.py,该程序会在每次执行时自动向本地日志文件追加一条记录,源码如下:

from datetime import datetime

now=datetime.now()

f=open(‘test.log’,’a’)

f.write(‘%s ‘%now)

f.close()

Linux在启动时,会自动执行/etc/rc.d目录下的初始化程序,因此我们可以把启动任务放到该目录下,有两种办法:

方案一:

1、因为其中的rc.local是在完成所有初始化之后执行,因此我们可以把启动脚本写到里面

2、用root账号登陆Linux,vi /etc/rc.d/rc.local编辑文件,在最后加入两行需要执行的脚本程序:

cd /home/test1 –该步不可少,否则会提示没有权限打开’test.log’文件

su test1 -c “python /home/test1/test.py” –把要执行的命令作为一个参数传递级su

方案二:

1、init.d目录下都为可执行程序,他们其实是服务脚本,按照一定格式编写,Linux 在启动时会自动执行,类似Windows下的服务

2、用root帐号登录,vi /etc/rc.d/init.d/mystart,追加如下内容:

复制代码

#!/bin/bash

#chkconfig:2345 80 05 –指定在哪几个级别执行,0一般指关机,

6指的是重启,其他为正常启动。80为启动的优先级,05为关闭的优先机

#description:mystart service

RETVAL=0

start(){ –启动服务的入口函数

echo -n “mystart serive …”

cd /home/test1

su test1 -c “python /home/test1/test.py”

}

stop(){ –关闭服务的入口函数

echo “mystart service is stoped…”

}

case $1 in –使用case,可以进行交互式操作

start)

start

;;

stop)

stop

;;

esac

exit $RETVAL

复制代码

3、运行chmod +r /etc/rc.d/init.d/mystart,使之可直接执行

4、运行chkconfig –add mystart,把该服务添加到配置当中

5、运行chkconfig –list mystart,可以查看该服务进程的状态

总结:

两种方案的的核心都是切换用户到test1,然后执行命令启动Python程序,做成服务的好处是可以定义多个交互命令,比如:start,stop,restart,reset…,在服务运行的过程中还可以做相应操作。最开始的时候,我按照一般的思路写了如下脚本,却怎么也执行不了:

su test1 –切换到test1用户

cd /home/test1 –切换到根目录

python test.py –执行python程序

exit –退出test1帐号

看起来好象一切都没错,但是发现只运行了第一行的命令,后面的都没有运行,直到退出test1用户后才发现好象执行完毕。分析原因,是因为Linux启动的时候是在root帐号下,执行su test1等于打开了一个新的shell脚本,因此下面的代码都在等着新的Shell脚本结束才能运行,就象在主程序里调用了一个子程序,而子程序是个死循环,一下出来来结果下面的要等死了。知道了发生的原因,那么解决的办法就相对简单了,就是在执行上述脚本程序时,不要离开本身的Shell。我们可以把执行命令做为su的一个参数传递进去,因为没有涉及到打开新的Shell,因此可以正常执行你期望的脚本程序,顺利实现开机自动启动指定的脚本程序。

执行方案中重要的一个命令是:

[root@localhost ~]# whoami

root

[root@localhost ~]# su – keysystem -c “whoami”

keysystem

[root@localhost ~]#

以keysystem用户执行whoami的命令:

[root@localhost ~]# su – keysystem -c “whoami”

文章知识点与官方知识档案匹配
CS入门技能树Linux入门初识Linux
23840 人正在系统学习中
打开CSDN,阅读体验更佳

Linux中没有rc.local文件的完美解决方法
主要介绍了Linux中没有rc.local文件的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
最新发布 linux 开机自启用非root启动
就会用djq用户执行mkdir -p /home/djq/222命令。linux 开机自启用非root启动。
继续访问
linux开机自动执行命令或自动启动程序(rc.local)
linux开机的最后会执行/etc/rc.local,因此可以在此脚本里面添加shell命令自动执行或者自动启动某个进程。 比如 自动输出信息: #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In
继续访问

跳过网络启动 linux,Linux启动时如何跳过fsck
在Linux里,如果一个文件系统被mount过一定次数后,或者距离上次fsck超过一定天数,当系统重起时就会自动fsck。根据文件系统的大小,fsck可能需要几分钟甚至几个小时。隔一段时间作一次fsck是很有必要的,但是如果你不想花费时间fsck,你也可以用如下几种方法跳过fsck:1. 修改/etc/fstab在/etc/fstab里, 最后一列是系统启动时fsck的顺序。 文件系统 / 应该设...
继续访问
linux 查看root 进程,Linux查看非root运行的进程
Linux查看非root运行的进程youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -U root -u root -NPID TTY TIME CMD663 ? 00:00:00 dbus-daemon713 ? 00:00:00 rsyslogd730 ? 00:00:00 avahi-da...
继续访问
linux上使用非root账户启动运行java程序
事情是这样的、、、、、、、 公司的app后台程序是java的,在linux上运行时要求必须使用非root账户,例如使用app用户启动java程序。这次运维有事请假了,所以这个小任务就交给我了,多大的事情啊,这还不是分分钟搞定的啊。 好了一步步的开始。 第一步:创建mobile账户和组 groupadd app useradd -d /usr/app -g app app 第二步:搭建...
继续访问
linux用其他账号停进程,Linux系统上对其他用户隐藏进程的简单方法
我使用的是多用户系统,大部分的用户通过ssh客户端访问他们的资源。我如何(怎么样)避免泄露进程信息给他们?如何(怎么样)在Debian/Ubuntu/RHEL/CentOS linux服务器器上阻止/避免他们看到不属于他们的进程?对linux上的其他用户隐藏进程的方法解决方法/方案:如果你使用的linux kernel(内核)是3.2以上的版本(或者使用的RHEL/CentOS是6.5以上的版本)...
继续访问
转:linux开机自动运行
实现目标:在Linux启动时,自动运行位于普通用户test1根目录下的脚本程序test.py,该程序会在每次执行时自动向本地日志文件追加一条记录,源码如下: from datetime import datetime now=datetime.now() f=open('test.log','a') f.write('%s '%now...
继续访问
跳过开机向导
跳过开机向导
继续访问
linux系统rc.local错误,Linux开机启动文件rc.local无法执行的解决方法
众所周知,rc.local是Linux系统中的一个重要的开机启动文件,每次开机都要执行这个文件。但最近很多用户表示系统无法执行这个问题件,从而导致了一系列的问题出现,这是怎么回事呢?如何解决这个问题呢?下面,跟随小编一起来看看Linux开机启动文件rc.local无法执行的解决方法。Linux系统在Linux系统中,有一个重要的开机自动启动脚本文件:/etc/rc.local---》/etc/rc...
继续访问
rc.local出错影响ubuntu正常启动,跳过执行rc.local
通过进入单用户模式,跳过rc.local
继续访问
Linux开机启动,设置rc.local失效解决方案
在/etc/rc.local文件夹下,添加要执行的命令,如/sbin/ifconfig docker0 mtu 1454 注意这里要使用绝对路径/sbin/ifconfig 如果开机发现执行失败,则需要在上一行添加sleep 10 由于ifconfig服务不一定在rc.local之前启动,所以让系统等待十秒hours在执行sleep 10 /sbin/ifconfig docker0 mtu 14
继续访问
Linux系统跳过密码登录
一、引导系统 RHEL7的标准引导系统是GRUB2,RHEL6默认使用GRUB1,这里主要讲GRUB2。 在Linux系统开机选择内核时,按下e进入内核引导参数的编辑菜单,找到以linux16开头的一行,在行末添加更多的命令。例如,在行末尾添加system.unit=emergency.target,然后按Ctrl+X,则系统将会以紧急目标模式启动。 如果在系统引导到GUI环境中出现问题,可以在内核命令行末尾加入system.unit=multi-user.target,若引导成功,则会登录到命令行模
继续访问
rc.local使用非root用户
su -aaa-c "/data/tomcat/bin/startup.sh"
继续访问
Linux设置非root用户启动程序
Linux设置非root用户启动程序
继续访问
开机自启动非root用户的服务
设置非root用户的服务开机自启动 比如:chkconfig mysql on 是无效的 可以这样设置: 在root用户下 vi /etc/rc.local 或者 vi /etc/rc.d/rc.local 在最后一行加上 su - mysqladmin -c "/usr/local/mysql/startMysql.sh" 其中mysqladmin是管理mysql的用户, "/usr/loc...
继续访问
linux非root用户打开80,Linux非root用户如何使用80端口启动程序
默认情况下Linux的1024以下端口是只有root用户才有权限占用,我们的tomcat,apache,nginx等等程序如果想要用普通用户来占用80端口的话就会抛出java.net.BindException: Permission denied:80的异常。bind时perror提示错误信息:permission denied解决办法有两种:1.使用非80端口启动程序,然后再用iptables...
继续访问
Linux在任意目录下执行指定的脚本
前言 我有个脚本,我只能在脚本所在的文件夹下面运行,这样的话很不方便,如果我去了别的目录下面的话,我就无法运行这个脚本了… 解决 在profile中设置PATH, 假如我想给 xcall 脚本设置能让在任意的目录下去运行, 此时xcall在/root/soft/script 目录下. 编辑环境变量 [root@zjj101 etc]# cd /etc [root@zjj101 etc]# vim profile # 上面省略........ export HIVE_HOME=/root/soft/hive
继续访问
Linux系统启动过程分析
经过对Linux系统有了一定了解和熟悉后,想对其更深层次的东西做进一步探究。这当中就包括系统的启动流程、文件系统的组成结构、基于动态库和静态库的程序在执行时的异同、协议栈的架构和原理、驱动程序的机制等等。 本人在综合了现有网上大家智慧的基础上,结合对2.6.32的内核代码的研读,基于CentOS 6.0系统对Linux的启动流程做了些分析。由于才疏学浅,知...
继续访问
linux跳过开机启动项

I. LINUX、UNIX系统启动不成功,要如何解决

A 内核引导
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是linux内核做了一些列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。交给了下一个主角init。
B 运行init
init
进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件
/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。具体内容如下:(你可以在你的linux上执行命令 cat
/etc/inittab 这样获得)

复制代码
代码如下:
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# 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 havenetworking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
###表示当前缺省运行级别为5(initdefault);
id:5:initdefault:
###启动时自动执行/etc/rc.d/rc.sysinit脚本(sysinit)
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
###当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回(wait)
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
###在启动过程中允许按CTRL-ALT-DELETE重启系统
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schele a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
###在2、3、4、5级别上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,
###如果进程退出则再次运行mingetty程序(respawn)
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
###在5级别上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行(respawn)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

以上面的inittab文件为例,来说明一下inittab的格式。其中以#开始的行是注释行,除了注释行之外,每一行都有以下格式:
代码如下:
id:runlevel:action:process

对上面各项的详细解释如下:
1. id
id是指入口标识符,它是一个字符串,对于getty或mingetty等其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
2. Runlevel
runlevel是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留:其中0作为shutdown动作,1作为重启至单用户模式,6为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,都使用了2、3、4、5几个级别,在CentOS系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7-9级别也是可以使用的,传统的Unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹配成功才会执行。
3. action
action是描述其后的process的运行方式的。action可取的值包括:initdefault、sysinit、boot、bootwait等:initdefault是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入runlevel。sysinit、boot、bootwait等action将在系统启动时无条件运行,而忽略其中的runlevel。其余的action(不含initdefault)都与某个runlevel相关。各个action的定义在inittab的man手册中有详细的描述。

J. Linux( bootloader)启动操作系统过程

Linux Booting Process:
(1) BIOS
功能:执行计算机系统完整性检测;通电自检;搜索/加载/执行 boot loader程序。
一旦 boot loader 程序被探测到,并且加载到内存,BIOS会把控制权交给它。
(2) MBR
MBR位于引导盘(Bootable Disk)的第一个扇区(512B)。
通常是在 /dev/sda 或者 /dev/hda 。

注意:引导盘(bootable disk)和引导分区(bootable partition)的区别。

(3) GRUB
GRUB = Grand Unified Bootloader

如果在系统中安装有多个内核镜像,你可以选择某一个被执行。
GRUB展示了一个启动画面,等待几秒,如果你不输入任何字符,它将会按照grub配置文件的规定加载默认的内核镜像。

Grub配置文件在: /boot/grub/grub.conf
它包含了内核和initrd.img

(4) Kernal
(注意Kernal和kernel不一样)

Kernal按照grub.conf文件的规定,挂载根文件系统。
一旦kernal启动,它第一件事情就是执行:sbin/init 进程。

initrd是被kernel用做临时根文件系统,直到Kernal挂载了根文件系统。

(5) INIT(Initilization)

根据 /etc/inittab 文件决定Linux运行层级,运行级别决定了哪个初始化程序(Initial Programs)被加载到启动项。

(6) Run Level

根据你的运行级别的设定,操作系统会执行下来对应的文件夹下的程序:

Linux的7个运行级别(Run levels):

标准的Linux运行级别为3或者5,如果是3的话,系统就在多用户状态;如果是5的话,则是运行着XWindow系统。不同的运行级别有着不同的用处,也应该根据自己的不同清晰来设置。例如,如果丢失了root口令,那么可以让机器启动进入单用户模式来设置。

如果是使用S(Start)开头的程序,那么是用在启动的时候,
如果是使用K(Kill)开头的程序,那么是用在关机的时候。

阅读全文

与linux启动过程分析相关的资料

热点内容
有服务器地址怎么安装软件 浏览:657
安卓如何完全清除数据 浏览:690
安卓安卓证书怎么信任 浏览:53
服务器被攻击如何解决 浏览:221
学霸变成程序员 浏览:881
c语言编译错误fatalerror 浏览:441
ipv4内部服务器地址怎么分配 浏览:463
java线程安全的方法 浏览:950
重复命令画梯形 浏览:164
在疫情就是命令 浏览:328
自己搭建一个什么服务器好玩 浏览:253
java基础马士兵 浏览:823
完美世界手游如何查看服务器 浏览:859
光遇安卓与ios什么时候互通 浏览:598
js如何运行时编译 浏览:916
引力app在哪里下载 浏览:609
编写app如何得到钱 浏览:800
吉利汽车软件放哪个文件夹安装 浏览:223
多文件编译c 浏览:542
头顶加密后为什么反而更稀疏 浏览:794