linux系统脚本的常见启动顺序
linux elf执行流程
linux elf执行流程Linux ELF 执行流程ELF(Executable and Linkable Format)是Linux系统中可执行文件的一种格式。
在Linux下,当我们执行一个可执行文件时,操作系统会按照一定的流程解析和执行该文件。
本文将介绍Linux ELF 的执行流程。
1. ELF文件格式ELF文件由多个段(section)组成,每个段都有特定的作用。
常见的段包括.text段(包含程序的指令)、.data段(包含程序的全局变量和静态变量)、.bss段(包含未初始化的全局变量和静态变量)等。
2. 加载可执行文件当用户在终端输入可执行文件名并按下回车键时,操作系统会通过解析文件头判断该文件是否为有效的ELF文件。
如果是有效的ELF 文件,操作系统会为该进程分配一块内存空间,并将ELF文件中的各个段加载到相应的内存地址上。
3. 解析程序入口操作系统会根据ELF文件中的程序入口地址(Entry Point)来确定程序的入口点。
程序入口地址通常位于.text段的起始位置。
操作系统将程序计数器(PC)设置为程序入口地址,从而开始执行程序。
4. 执行程序指令程序从程序入口地址开始执行,按照顺序执行.text段中的指令。
每条指令都会被解码和执行,直到程序结束或者遇到跳转指令。
5. 解析跳转指令在程序执行过程中,可能会遇到跳转指令(如条件跳转、无条件跳转、函数调用等)。
当遇到跳转指令时,操作系统会根据指令中的目标地址重新设置程序计数器,从而改变程序的执行流程。
6. 处理函数调用当程序执行到函数调用指令时,操作系统会将函数的返回地址和参数等信息保存到栈中,并跳转到函数的入口地址执行。
函数执行完毕后,操作系统会从栈中恢复返回地址,继续执行函数调用指令后面的指令。
7. 处理系统调用程序中可能会包含系统调用指令,用于请求操作系统提供各种服务。
当遇到系统调用指令时,操作系统会切换到内核态,执行相应的系统调用处理程序,并返回结果给用户程序。
嵌入式linux系统的启动流程
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
Linux 进程的启动方式
Linux 进程的启动方式程序或者命令的执行实际上是通过进程实现的。
通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。
系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。
启动进程的方式有两种,分别为前台启动方式和后台启动方式。
1.以前台方式启动进程在终端窗口的命令行上输入一个Linux命令并按Enter键,以前台方式启动了一个进程。
例如,在终端窗口上执行“find /-name myfile.txt”命令,就可以以前台的方式启动一个进程。
而在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起。
然后,可以使用ps命令查看该进程的有关信息,如图41所示。
图41 前台方式启动进程2.以后台方式启动进程在前台运行的进程是正在进行交互操作的进程,它可以从标准输入设备接收输入,并将输出结果送到标准输出设备,在同一时刻只能有一个进程在前台运行。
而在后台运行的进程一般不需要进行交互操作,不接收终端的输入。
通常情况下,可以让一些运行时间较长而且不接受终端输入的程序以后台方式运行,让操作系统调度它。
要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。
例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。
启动后,系统会显示如下所示的信息:[2] 3516这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。
然后,出现了shell提示符,这表示已返回到前台。
这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。
arm版本linux系统的启动流程
arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
linux main函数执行流程
linux main函数执行流程
在Linux系统中,C程序的主函数(main函数)执行流程遵循
以下步骤:
1. 程序启动,当你在终端中输入可执行文件的名称并按下回车
键时,操作系统会创建一个新的进程来运行该程序。
2. 加载程序,操作系统会将可执行文件从磁盘加载到内存中,
并为程序分配必要的资源,比如堆栈空间、全局变量等。
3. 运行 main 函数,一旦程序被加载到内存中,操作系统会找
到程序中的 main 函数,并开始执行它。
main函数是C程序的入口点,程序会从这里开始执行。
4. 执行 main 函数中的代码,main函数中的代码会按照顺序
被执行,它可能包括变量声明、函数调用、逻辑判断、循环等操作。
5. 返回值,当 main 函数执行完毕时,它会返回一个整型值作
为程序的退出状态码。
通常情况下,返回 0 表示程序顺利执行,而
其他值则表示程序出现了错误。
6. 程序结束,一旦 main 函数执行完毕并返回了退出状态码,
操作系统会关闭程序所占用的资源,并终止该进程的执行。
总的来说,Linux系统中的 main 函数执行流程遵循程序加载、main 函数执行、返回值传递和程序结束这几个基本步骤。
通过这些
步骤,程序能够在Linux系统上正确地执行并完成它的任务。
Linux系统服务启动顺序Shell脚本
Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。
为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。
本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。
一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。
在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。
例如,数据库服务可能需要在网络服务启动之后才能正常工作。
通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。
二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。
下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。
可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。
这样可以避免启动时的冲突和错误。
例如,假设我们有三个服务需要启动:A、B和C。
服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。
因此,启动的顺序应为A、B、C。
2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。
在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。
然后,按照定义的服务启动顺序,逐个启动每个服务。
下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。
在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。
Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作
Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作在Linux系统中,服务是指在后台运行并提供各种功能的应用程序。
对于系统管理员来说,管理服务是非常重要和常见的任务。
为了更高效地管理Linux系统服务,可以使用Shell脚本实现对服务的启动、停止和重启操作。
本文将介绍如何使用Shell脚本来管理Linux系统服务。
一、编写Shell脚本首先,我们需要创建一个Shell脚本文件,例如名为“service_manage.sh”。
使用任何一个文本编辑器,打开一个新的文件,并输入以下内容:```shell#!/bin/bashfunction start_service {sudo systemctl start $1}function stop_service {sudo systemctl stop $1}function restart_service {sudo systemctl restart $1}echo "欢迎使用Linux系统服务管理脚本" echo "请输入您想要执行的操作:"echo "1. 启动服务"echo "2. 停止服务"echo "3. 重启服务"read choicecase $choice in1)echo "请输入要启动的服务名:"read service_namestart_service $service_name;;2)echo "请输入要停止的服务名:"read service_namestop_service $service_name;;echo "请输入要重启的服务名:"read service_namerestart_service $service_name;;*)echo "无效的选择";;esac```上述脚本定义了三个函数:`start_service`、`stop_service`和`restart_service`,分别用于启动、停止和重启服务。
linux up
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
start_kenrel()定义在init/main.c中,它就类似于一般可执行程序中的main()函数,系统在此之前所做的仅仅是一些能让内核程序最低限度执行的初始化操作,真正的内核初始化过程是从这里才开始。函数start_kerenl()将会调用一系列的初始化函数,用来完成内核本身的各方面设置,目的是最终建立起基本完整的Linux核心环境。
Hale Waihona Puke Linux的引导扇区内容是采用汇编语言编写的程序,其源代码在arch/i386/boot中(不同体系的CPU有其各自的boot目录),有4个程序文件:
◎bootsect.S,引导扇区的主程序,汇编后的代码不超过512字节,即一个扇区的 大 小
◎setup.S, 引导辅助程序
◎edd.S,辅助程序的一部分,用于支持BIOS增强磁盘设备服务
◎video.S,辅助程序的另一部分,用于引导时的屏幕显示
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader,这里以Grub为例来讲解吧。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核
(4)执行parse_early_param()和parsees_args()解析系统启动参数。
Linux里startup.sh和shutdown.sh
最后执行 ./startup.sh 即可完成启动!
1、启动 startup.sh
# ---------------------------------------------------# Start script for the Socekt Server # ---------------------------------------------------#!/bin/sh ps -ef |grep socketServer.jar |grep -v grep if [ $? -eq 0 ];then
PID_1024=$(echo `netstat -apn |grep 1024 | awk '{print $NF}'|awk -F '/' '{print $1}'`) kill $PID_1024 echo 'Socket server has shutdown!' else echo 'Not found socket PID!' fi
echo 'Socket server iat -apn |grep 1024 if [ $? -eq 0 ];then
PID_1024 = $(echo `netstat -apn |grep 1024 | awk '{print $NF}'|awk -F '/' '{print $1}'`) kill $PID_1024 fi echo "startup socket server:" nohup java -jar socketServer.jar & fi
Linux启动脚本
Linux启动流程详解从用户打开电源到用户可以登录的这短短的一段时间内,Red Hat Enterprise Linux到底都作了哪些事情,只有知道了这些事情,用户在以后的使用过程中,如果出现了一些问题,我们可以借助这些过程来为我们排除一些故障。
Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作主要是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等主要是为了检查这些设备在开机的时候是否能通过检测,如果能通过检测,说明电脑可以正常的工作。
------------------------------载入启动程序BIOS自检完成后,BIOS会根据用户设置的启动顺序来由那个设备来启动电脑的操作系统,这个设备一般是硬盘。
也就是进入到硬盘的MBR区域,这个区域中的有512个字节的大小,其中前446个字节中保存的程序是选择启动分区,也就是电脑由那个硬盘分区来载入开机的程序。
那么在这个446个字节的空间中保存的就是启动程序,然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub程序。
grub程序的这个配置文件是保存在:/boot/grun/grub.conf这个文件中,如果修改完这个文件后,设置会立刻生效。
现在来看看这个文件的内容以及语法: 使用cat /boot/grub/grub.conf,就会出现这个文件的内容,最前面是注释。
可以将这个文件逻辑上分为两个部分,第一个部分是基本设定,第二个部分是区分开多个操作系统的设定。
第一个部分中的defaule=0,是指第一组操作系统开机。
如果有两组操作系统的开机设定,而defaule=1,那么预设使用第二组操作系统开机。
所谓 第一组和第二组程序就是指的是title开始的部分,这里是区分操作系统的部分。
Linux系统服务自动启动脚本
Linux系统服务自动启动脚本Linux系统是一种广泛应用的操作系统,在服务器和个人电脑上都得到了广泛的应用。
为了保证系统服务的及时启动,我们需要使用自动启动脚本来管理各种服务。
本文将介绍Linux系统服务自动启动脚本的使用方法和注意事项。
一、什么是Linux系统服务自动启动脚本?Linux系统服务自动启动脚本是一种用于管理系统服务的脚本文件。
它可以在系统启动时自动运行,并根据预设的配置文件,启动、停止或重启指定的服务。
通过自动启动脚本,我们可以实现系统服务的自动管理,提高系统的稳定性和可靠性。
二、自动启动脚本的编写1. 脚本文件的位置一般情况下,自动启动脚本文件存放在/etc/init.d/目录下。
这是Linux系统中默认的脚本存放位置。
你也可以根据自己的需要将脚本文件存放在其他位置,但要确保系统能够找到并正确执行脚本。
2. 脚本内容的编写自动启动脚本的编写需要注意以下几点:- 根据系统要求,脚本文件必须以#!/bin/bash开头,以告诉系统使用bash作为解释器执行脚本。
- 在脚本的最开始,应该加上适当的注释,说明脚本的用途和功能。
- 脚本中应该包含启动、停止和重启服务的代码。
可以使用特定的命令如systemctl、service等来实现。
- 脚本应该提供start、stop和restart等选项,以便用户在执行脚本时可以选择不同的操作。
- 在脚本的结尾处,应该添加exit命令来结束脚本的执行。
三、自动启动脚本的使用方法使用自动启动脚本可以提高系统服务管理的效率,下面是使用自动启动脚本的基本步骤:1. 编写脚本文件按照前面所述的规范编写自动启动脚本文件,并保存在适当的位置。
2. 设置脚本文件的执行权限使用chmod命令给脚本文件添加执行权限,例如:```chmod +x /etc/init.d/myscript```3. 添加脚本到自启动列表使用chkconfig命令将脚本添加到系统的自启动列表中,例如:```chkconfig --add myscript```4. 启动服务使用service命令启动服务,例如:```service myscript start```至此,你的自动启动脚本已经完成了配置和启动。
linux systemd service 的执行流程
linux systemd service 的执行流程systemd是Linux系统中的一个初始化系统和服务管理器,它负责启动系统的各个组件和服务。
systemd通过使用单一进程和配置文件来替代传统的SysV init脚本,提供了更为先进和灵活的管理方式。
下面是systemd服务的执行流程,详细描述了服务的启动、运行和停止的过程。
1.系统引导:当计算机启动时,系统会加载内核并触发init进程,init进程会负责初始化系统。
在现代Linux系统中,init进程通常是systemd。
systemd的启动是由initramfs(初始内存文件系统)引导的,initramfs负责加载关键的驱动程序和文件系统,然后启动systemd。
2.systemd进程启动:一旦initramfs引导完成,systemd进程将被启动。
systemd会读取其配置文件,主要是/etc/systemd/system.conf和/etc/systemd/user.conf,以确定系统和用户级别的默认配置。
3.Target的激活:systemd使用”target”的概念,一个target是一组相关的服务的集合。
例如,graphical.target表示启动图形用户界面,multi-user.target表示启动多用户模式。
systemd会根据默认目标(通常是multi-user.target)启动相应的服务。
4.服务单元的激活:每个服务在systemd中都由一个单元文件(unit file)定义,这些文件通常存储在/etc/systemd/system/目录中。
systemd会读取目标关联的服务单元,并按需激活这些服务。
服务单元包括服务的配置信息、依赖关系、执行路径等。
5.依赖关系解析:systemd会解析服务单元之间的依赖关系,并按照正确的顺序启动这些服务。
依赖关系可以指定服务之间的启动顺序,确保在需要的时候正确地启动和停止服务。
计算机及Linux操作系统开机启动过程详解
计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。
执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。
执⾏该跳转(⼆跳)。
阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。
执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。
执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。
具体过程见下⽂“操作系统启动过程”部分。
整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。
BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。
启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。
往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。
若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。
可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。
因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。
Linux操作系统启动流程图文详解
Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。
上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。
加载完BIOS信息,计算机将根据顺序进⾏启动。
2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。
被复制到物理内存的内容是Boot Loader,然后进⾏引导。
3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。
4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。
5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
简要分析linux系统的启动过程
简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。
2)读取MBR,进⾏MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。
7)启动内核模块,执⾏不同级别的脚本程序。
8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。
linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。
[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。
linux-start
/etc/rc.d/rc.sysinit
主要做在各个运行模式中相同的初始化工作,包括: ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢
调入keymap以及系统字体 启动swapping 设置主机名 设置NIS域名 检查(fsck)并mount文件系统 打开quota 装载声卡模块 设置系统时钟 等等。
●
/etc/rc.d/rc
可以设置)来执行相应目录下的脚本。凡是以Kxx开头的 , 都以stop为参数来调用;凡是以Sxx开头的,都以start为参 数来调用。调用的顺序按xx 假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调 用
➢ /etc/rc.d/rc3.d/下的脚本。 ➢ linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为
# 0 - 停机(千万不能把initdefault 设置为0 ) # 1 - 单用户模式
# # # # # #
s 2 3 4 5 6
-
init s = init 1 多用户,没有 NFS 完全多用户模式(标准的运行级) 没有用到 X11 多用户图形模式(xwindow) 重新启动(千万不要把initdefault设置为6 )
Linux开机流程
1
linux开机顺序总览
启动方式和执行 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 ➢ /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模 式 ➢ /etc/rc.d/rc.local #相应级别服务启动之后、 在执 行该文件(其实也可以把需要执行的命令写到该文件 中) /sbin/mingetty # 等待用户登录
chkconfig(续)
linux启动顺序
一、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑一打开电源时电脑就会进入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开机菜单这里选择哪个系统就会载入相应的核心;四、介绍GRUB和grub.conf 这个配置文件的内容其实从MBR载入Boot Loader开始,载入Kernel,载入init这些程序之间都是由GRUB这个多重开机管理程序所负责的。
LinuxBoot,Kernel和Service介绍
LinuxBoot,Kernel和Service介绍Linux 启动过程是初始化系统的过程。
它包括从第⼀次打开计算机电源到⽤户界⾯完全可操作时发⽣的所有事情。
充分了解引导过程中的步骤可能有助于您解决问题,以及根据您的需要调整计算机的性能。
另⼀⽅⾯,启动过程可能相当技术性,您可以在不了解所有细节的情况下开始使⽤ Linux。
第⼀个步骤:BIOS启动基于 x86 的 Linux 系统涉及许多步骤。
当计算机开机时,基本输⼊/输出系统 (BIOS) 会初始化硬件,包括屏幕和键盘,并测试主内存。
此过程也称为 POST(开机⾃检)。
BIOS 软件存储在主板上的 ROM 芯⽚上。
此后,引导过程的其余部分由操作系统 (OS) 控制。
Master Boot Record (MBR) and Boot Loader⼀旦 POST 完成,系统控制就会从 BIOS 传递到引导加载程序。
引导加载程序通常存储在系统中的硬盘之⼀上,或者在引导扇区(对于传统BIOS/MBR 系统)或 EFI 分区(对于更新的(统⼀)可扩展固件接⼝或 EFI/UEFI 系统)。
到此阶段为⽌,机器不会访问任何⼤容量存储介质。
此后,有关⽇期、时间和最重要外围设备的信息从 CMOS 值中加载(在使⽤电池供电的内存存储技术后,即使系统断电也能跟踪⽇期和时间) .有许多⽤于 Linux 的引导加载程序;最常见的是 GRUB(⽤于 GRand Unified Boot loader)、ISOLINUX(⽤于从可移动媒体启动)和DAS U-Boot(⽤于在嵌⼊式设备/设备上启动)。
⼤多数 Linux 引导加载程序可以提供⼀个⽤户界⾯,⽤于选择引导 Linux 的替代选项,甚⾄可能安装的其他操作系统。
在引导 Linux 时,引导加载程序负责将内核映像和初始 RAM 磁盘或⽂件系统(其中包含启动系统所需的⼀些关键⽂件和设备驱动程序)加载到内存中。
Boot Loader in Action引导加载程序有两个不同的阶段:对于使⽤ BIOS/MBR ⽅法的系统,引导加载程序位于硬盘的第⼀个扇区,也称为主引导记录 (MBR)。
CentOS系列--linux启动顺序
系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。
内核被加载到内存中之后,就开始执行了。
一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。
内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。
系统首先启动init进程,该进程先会执行/etc/rc.d/rc.sysinit,然后去读/etc/inittab文件决定运行模式,根据默认运行模式读取/etc/rc.d/rc $RUNLEVEL文件夹下的执行程序连接,这些文件以K或S开头,它们都是指向init.d/的一些软连接。
Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。
init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。
它决定了系统启动之后运行于什么级别。
运行级别决定了系统启动的绝大部分行为和目的。
这个级别从0到6 ,具有不同的功能。
不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)rc.d的内容如下:init.d/ :各种服务器和程序的二进制文件存放目录。
rc $RUNLEVEL.d/: 各个启动级别的执行程序连接目录。
里头的东西都是指向init.d/的一些软连接。
具体的后边叙述。
还有三个脚本:rc.sysinit, rc, rc.local如图: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装载声卡模块设置系统时钟等等。
linux启动流程
centos6启动流程•硬件启动阶段o Power on打开电源o BIOS▪POST: power on self test开机自检•初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等▪确定启动设备•启动设备:硬盘、网络、U盘、光盘•如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节•控制权交给bootloadero MBR▪MBR512字节• 1.446字节bootloadero启动加载器bootloader▪windows: ntloader仅仅启动os▪GRUB: GRand Unified Bootloader,CentOS 6 GRUB 0.97: GRUBLegacy, CentOS 7 以后使用GRUB 2.02• 2.64字节分区信息o16字节x4 partitions• 3.55aa标志位表示分区是否有效•grub启动阶段o stage1▪ 1.446字节bootloader•这是二进制的0101,写在MBR扇区的前446字节。
o单纯为了找到1.5阶段生成的bootloader上o stage1.5▪第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统来读取config文件加载内核。
MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfsext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader▪ 1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由于相关变量定义不同, 所以以下启动顺序仅供参考
在Redhat Redflag centos fc linux系统里面脚本的启动
先后:
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端
rc.sysinit
rc.d(里面的脚本)
rc.local
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
在Suse Linux (sles server or Desktop 10)
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端 /etc/init.d/boot 里面包括:
. /etc/rc.status
./etc/sysconfig/boot
./etc/init.d/boot.d下面的脚本
./etc/init.d/boot.local
rc X.d(里面的脚本)
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/root/.bashrc
/root/.profile
先后:
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端
rc.sysinit
rc.d(里面的脚本)
rc.local
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
在Suse Linux (sles server or Desktop 10)
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端 /etc/init.d/boot 里面包括:
. /etc/rc.status
./etc/sysconfig/boot
./etc/init.d/boot.d下面的脚本
./etc/init.d/boot.local
rc X.d(里面的脚本)
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/root/.bashrc
/root/.profile
先后:
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端
rc.sysinit
rc.d(里面的脚本)
rc.local
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
在Suse Linux (sles server or Desktop 10)
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端 /etc/init.d/boot 里面包括:
. /etc/rc.status
./etc/sysconfig/boot
./etc/init.d/boot.d下面的脚本
./etc/init.d/boot.local
rc X.d(里面的脚本)
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/root/.bashrc
/root/.profile。