Linux开机启动程序详解
Linux—添加开机启动(服务脚本)
Linux—添加开机启动(服务脚本)系统启动时需要加载的配置⽂件/etc/profile、/root/.bash_profile/etc/bashrc、/root/.bashrc/etc/profile.d/*.sh、/etc/profile.d/lang.sh/etc/sysconfig/i18n、/etc/rc.local(/etc/rc.d/rc.local)⼀、修改开机启动⽂件:/etc/rc.local(或者/etc/rc.d/rc.local)# 1.编辑rc.local⽂件[root@localhost ~]# vi /etc/rc.local# 2.修改rc.local⽂件,在 exit 0前⾯加⼊以下命令。
保存并退出。
/etc/init.d/mysqld start # mysql开机启动/etc/init.d/nginx start # nginx开机启动supervisord -c /etc/supervisor/supervisord.conf # supervisord开机启动/bin/bash /server/scripts/test.sh >/dev/null2>/dev/null# 3.最后修改rc.local⽂件的执⾏权限[root@localhost ~]# chmod +x /etc/rc.local[root@localhost ~]# chmod755 /etc/rc.local⼆、⾃⼰写⼀个shell脚本将写好的脚本(.sh⽂件)放到⽬录 /etc/profile.d/ 下,系统启动后就会⾃动执⾏该⽬录下的所有shell脚本。
三、通过chkconfig命令设置# 1.将(脚本)启动⽂件移动到 /etc/init.d/或者/etc/rc.d/init.d/⽬录下。
(前者是后者的软连接)mv /www/wwwroot/test.sh /etc/rc.d/init.d# 2.启动⽂件前⾯务必添加如下三⾏代码,否侧会提⽰chkconfig不⽀持。
Linux终端中的系统启动和关机命令
Linux终端中的系统启动和关机命令Linux作为一个开源的操作系统,具有强大的灵活性和自定义性。
在Linux终端中,我们可以使用一些命令来控制系统的启动和关机。
本文将详细介绍一些常用的系统启动和关机命令,并探讨它们的功能和使用方法。
一、系统启动命令1. rebootreboot命令用于重新启动系统。
在终端中输入reboot后,系统将会立即重启。
这个命令非常有用,尤其是在需要迅速重启系统的情况下,如在安装软件或更新内核后。
2. shutdownshutdown命令用于正常关机系统。
默认情况下,输入shutdown命令后系统将在一分钟后执行关机操作。
如果需要设置关机时间,可以使用“shutdown -h now”命令来立即关机,或者使用“shutdown -h +分钟数”命令来设置延迟关机的时间。
除了关机命令,shutdown还可以用于重启系统。
例如,使用“shutdown -r now”命令将会立即重启系统。
3. initinit命令是Linux系统的初始化命令,用于切换系统的运行级别。
运行级别是电脑中一种特定的工作状态,对应着一组特定的功能服务。
Linux系统共有七个运行级别,分别是0-6。
其中,0表示关机,6表示重启。
要切换运行级别,可以使用“init 数字”命令进行操作。
例如,“init 3”将将系统切换到文本模式,而“init 5”则进入图形模式。
二、系统关机命令1. halthalt命令用于立即关机系统。
它会发送一个信号给内核,告诉系统立即关闭。
输入“halt”命令后,系统将会停止所有进程并关机。
2. poweroffpoweroff命令用于正常关机系统。
它会先发送一个信号给所有运行的进程,告诉它们系统即将关机。
这个命令会在关机前允许进程的保存和关闭操作,确保数据的完整性。
3. init在上一节中我们已经介绍了init命令的用途。
当我们使用“init 0”或“init 6”命令时,系统将会执行关机或重启操作。
嵌入式linux系统的启动流程
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
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下使用systemd设置开机启动项
Linux下使⽤systemd设置开机启动项Linux 下使⽤ systemd 设置开机启动项下⾯的教程将介绍如何将命令或程序配置为开机启动时⾃动运⾏的服务。
完成配置之后,就可以通过 Linux 命令⾏来「启动/停⽌/禁⽤」这个服务了。
创建服务在树莓派上创建⼀个 .service ⽂件。
例如:myscript.service[Unit]Description=My serviceAfter=network.target[Service]ExecStart=/usr/bin/python3 -u main.pyWorkingDirectory=/home/pi/myscriptStandardOutput=inheritStandardError=inheritRestart=alwaysUser=pi[Install]WantedBy=multi-user.target在上⾯的范例中,服务会去以 Python 3 来运⾏ /home/pi/myscript ⽬录下⾯的 main.py 脚本。
⽤这种⽅法,你不仅可以配置 Python 脚本,只需要将 ExecStart 这⾏改为需要启动的任何程序或脚本即可。
将这个⽂件⽤ root ⽤户保存到 /etc/systemd/system ⽬录:sudo cp myscript.service /etc/systemd/system/myscript.service然后就可以⽤下⾯的命令尝试启动服务了:sudo systemctl start myscript.service停⽌服务:sudo systemctl stop myscript.service设置开机时⾃动运⾏:sudo systemctl enable myscript.servicesystemctl命令还可以⽤来重启或禁⽤它。
⽂章标题: -转载⾃。
linux开机自启动命令
linux开机自启动命令用户想要在linux开机的时候自启动相关的程序。
那我们要怎么设置呢?下面由店铺为大家整理了linux下开机自启动命令的相关知识,希望对大家有所帮助!linux下开机自启动命令1.开机启动时自动运行程序Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。
init根据配置文件继续引导过程,启动其它进程。
通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。
例如:编辑/etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。
扩展:其他情况下linux自启动程序命令2.登录时自动运行程序用户登录时,bash首先自动执行系统管理员建立的全局登录script :/etc/profile。
然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的一个。
因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。
3.退出登录时自动运行程序退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。
例如,在/.bash_logout中加入命令"tar -cvzf c.source.tgz *.c",则在每次退出登录时自动执行 "tar" 命令备份 *.c 文件。
4.定期自动运行程序linux有一个称为crond的守护程序,主要功能是周期性地检查/var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。
用户可以通过crontab 命令来建立、修改、删除这些命令文件。
Linux系统后台启动过程
Linux 系统启动过程linux启动时我们会看到许多启动信息。
Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:内核的引导。
运行 init。
系统初始化。
建立终端 。
用户登录系统。
init程序的类型:SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
内核引导当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
运行initinit 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
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是每一个运行级别都要首先运行的重要脚本。
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之systemd启动过程
走进Linux之systemd启动过程Linux系统的启动方式有点复杂,而且总是有需要优化的地方。
传统的Linux 系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点。
在这里我们将着重讨论systemd的特性和争议,但是为了更好地理解它,也会看一下通过传统的以SysV init为基础的系统的Linux启动过程是什么样的。
友情提醒一下,systemd仍然处在测试阶段,而未来发布的Linux操作系统也正准备用systemd启动管理程序替代当前的启动过程(LCTT 译注:截止到本文发表,主流的Linux发行版已经有很多采用了systemd)。
理解Linux启动过程在我们打开Linux电脑的电源后第一个启动的进程就是init。
分配给init进程的PID是1。
它是系统其他所有进程的父进程。
当一台Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制。
主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,80%的Linux系统在用GRUB引导程序),这个时候GRUB或LILO会加载内核模块。
内核会马上查找/sbin下的“init”程序并执行它。
从这里开始init成为了Linux系统的父进程。
init 读取的第一个文件是/etc/inittab,通过它init会确定我们Linux操作系统的运行级别。
它会从文件/etc/fstab里查找分区表信息然后做相应的挂载。
然后init会启动/etc/init.d里指定的默认启动级别的所有服务/脚本。
Linux使用systemctl设置程序开机自启动
Linux使⽤systemctl设置程序开机⾃启动1 说明设置开机⾃启动,需要⽤到systemctl⼯具。
systemctl是⼀个systemd⼯具,主要负责控制systemd系统和服务管理器。
systemd是⼀个系统管理守护进程、⼯具和库的集合,⽤于取代System V初始进程。
Systemd的功能是⽤于集中管理和配置类UNIX系统。
在Linux⽣态系统中,Systemd被部署到了⼤多数的标准Linux发⾏版中,只有为数不多的⼏个发⾏版尚未部署。
2 准备os:redhat7.0systemctl –version : systemd 208weblogic version:123 将程序设置成系统服务3.1 编写系统服务⽂件# vi /etc/systemd/system/myapp.service# note 如果/etc/systemd/system/myapp.service有过修改,需要进⾏更新,执⾏下⾯这个命令# systemctl daemon-reload# note 查看服务是否被正确识别# systemctl list-unit-files|grep myapp[Unit]# note 服务描述,写有意义的内容,便于识别Description=myapp service[Service]Type=simple# note 设置应⽤的⼯作⽬录WorkingDirectory=/myapp_pathExecStart=/myapp_path/startMyApp.shExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.target3.2 查看系统服务⽂件是否被识别systemctl list-unit-files|grep myapp--------------------------myapp.service disabled4 编写程序启动脚本# vi /myapp_path/startMyApp.sh----------------------------------------------------# note !/bin/sh# note上⾯这⾏很重要,会报203错误# note 最好先cd到程序⽬录cd /myapp_path#使⽤java的绝对路径。
LINUX系统的启动、运行和关闭PPT教学课件
init
建立用户接口
rc.sysinit rc
login
Shell
2020/12/12
用户执行Linux命令
+ 1.加载BIOS
(1)开机进BIOS首先会加电自检 BIOS即(Basic input output
System),它是写入到主板上的一个软件 程序。
在GRUB中的文件名为hdo,代号为(hdo,4); 在LINUX中的文件名为/dev/hda5,代号为(hd1,5)
Shell
用户执行Linux命令
2020/12/12
6
第1节 系统启动、运行和关闭
• 4.执行init进程
加电 加载BIOS
预引导(LILO/GRUB)
当内核加载完毕进行完硬件检测与驱动程序加载 后,主机硬件已经准备就绪,此时内核会主动调
(3)以查找顺序作为硬盘的代号,而不是依照 硬盘的物理排序 (4)第一个查找到的硬盘代号为0,第二个为1, 以此类推。
4
第1节 系统启动、运行和关闭
• 2.预引导(LILO/GRUB)与加载内核映像
加电 加载BIOS
预引导(LILO/GRUB)
由前述我们可知,第一块硬盘的MBR安装处的 硬盘代号就是(hdo),而第一块硬盘的第一个分 区的代号就是(hd0,0),第一块硬盘的第一个逻 辑分区代号为“(hdo,4)”.
BIOS是开机的时候计算机会主动去执 行的一个软件程序。
(2)然后计算机依据BIOS内的设置引导 顺序从硬盘(一般为硬盘,有时也为软 件或者光盘)中读入“主引导记录” (Master Boot Record)即MBR,然后将 其加载到物理内存中。
Linux系统引导过程及排除启动故障
Linux系统引导过程及排除启动故障⼀、Linux操作系统引导过程⼆、系统初始化进程1、init进程2、Systemd3、Systemd单元类型三、排除启动类故障【1】、修复MBR扇区故障(含实验过程)【2】、修复GRUB引导故障●⽅法⼆:进⼊急救模式,恢复GRUB引导程序(与MBR 引导扇区类似)●⽅法三:引导界⾯进⼊急救模式,重建GRUB菜单配置⽂件⽅案三实验四、遗忘root⽤户的密码实验过程⼀、Linux操作系统引导过程1.开机⾃检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进⾏初步检测,检测成功后根据预设的启动顺序移交系统控制权,⼤多时候会移交给本机硬盘。
总结:检测出第⼀个能够引导系统的设备,⽐如硬盘或者光驱2.MBR 引导当从本机硬盘中启动系统时,⾸先根据硬盘第⼀个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导⽂件的分区;或者直接根据MBR 记录中的引导信息调⽤启动菜单(如 GRUB)。
总结:运⾏放在MBR扇区⾥的启动GRUB引导程序3.GRUB 菜单对于Linux操作系统来说,GRUB(统⼀启动加载器)是使⽤最为⼴泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显⽰启动菜单给⽤户选择,并根据所选项(或采⽤默认值)加载Linux内核⽂件,然后将系统控制权转交给内核。
CentOS 7 采⽤的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置⽂件/boot/grub2/grub.cfg,来获取内核和镜像⽂件系统的设置和路径位置4.加载 Linux 内核Linux内核是⼀个预先编译好的特殊⼆进制⽂件,介于各种硬件资源与系统程序之间,负责资源分配与调度。
内核接过系统控制权以后,将完全掌控整个Linux操作系统的运⾏过程。
CentOS 7系统中,默认的内核⽂件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
linux启动顺序讲解
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这个多重开机管理程序所负责的。
计算机及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学习_菜鸟教程_1
Linux学习_菜鸟教程_1Linux系统启动过程:内核的引导、运⾏init、系统初始化、建⽴终端、⽤户登录系统内核引导:计算机开机,然后BIOS开机⾃检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,⾸先读⼊/boot下的内核⽂件。
运⾏init : init进程是系统所有进程的起点。
相当于windows中的服务。
init进程的⼀⼤任务,就是要运⾏开机启动程序。
并且是根据不同的场合需要来启动不同的程序。
这叫做“运⾏级别”。
Linux有7个运⾏级别。
系统初始化:主要完成激活交换分区、检查磁盘、加载硬件模块、以及其他⼀些需要优先执⾏的任务。
建⽴终端:运⾏init时会调⽤系统初始化的语句,语句执⾏完毕后,就返回init.init接下来会打开6个终端,以便⽤户登录。
⽤户登录系统:(1)命令⾏登录(2)SSH登录(3)图形界⾯登录图形模式与⽂字模式的切换⽅式:Linux预设提供了六个命令窗⼝终端机来让我们登录。
分别是tty1~6;⽤ctrl+Alt+F1~F6来切换。
在vmware虚拟机中,⽤Alt+Space+F1~F6来进⾏切换。
若在图形界⾯下,⽤Alt+Shift+Ctrl+F1~F6切换⾄命令窗⼝。
Linux关机正确的关机流程sync >shutdown>reboot>halt关机指令:shutdown ,man shutdown查看帮助⽂档如果需要切换到root⽤户,⽤sudo su.sync 将数据同步到硬盘中shutdown -h 10 'This sever will shutdown after 10 minutes'//告诉⼤家,计算机10min后关闭,并显⽰在登录⽤户的当前屏幕中shutdown -h now ⽴马关机=halt+poweroff=init 0shutdown -h 20:25 系统会在今天20:25关机shutdown -h +10 ⼗分钟后关机shutdown -r now ⽴马重启=reboot =init 6halt 关闭系统 ,等同于shutdown -h now 和poweroff最后总结⼀下:不管是重启还是关闭系统,⾸先要运⾏sync命令,把内存中的数据写到磁盘中。
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启动流程是指从开机到进入用户界面的整个过程。
在这个过程中,系统依次完成了硬件初始化、内核启动、启动脚本执行等一系列操作。
1. BIOS或UEFI初始化:开机后,计算机首先会进入到BIOS或UEFI程序中,进行硬件的自检和初始化。
2. 加载引导程序:BIOS或UEFI会查找系统中的引导设备,比如硬盘、光盘、USB等,找到后会将引导程序加载进内存中。
3. 加载内核文件:引导程序会读取内核文件,并将其加载到系统内存中。
4. 内核启动:内核在加载完成后,开始执行初始化操作,包括设备驱动程序的加载、文件系统的挂载等。
5. 运行init进程:内核启动后,会运行init进程,init进程是Linux系统的第一个用户空间进程,主要负责系统初始化和进程管理,同时也是其他终端应用程序的父进程。
6. 执行启动脚本:init进程会读取启动脚本,并依次执行其中的命令,完成系统的初始化和配置。
7. 进入用户界面:启动脚本完成后,系统会进入到用户界面,等待用户的登陆。
总之,Linux系统启动过程是一个非常复杂的过程,从硬件的自检到系统进入用户界面,需要经过多个环节和步骤。
但是,在这个过程中,每个环节都发挥了至关重要的作用,为系统的正常运行打下了
基础。
简要分析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启动流程
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)。
Linux开机启动程序详解
由于操作系统正在变得越来越复杂,所以开机引导和关机下电的过程也越来越智能化。
从简单的DOS系统转移到Windows NT系统,人们已经亲身感受到了这些变化——这已不仅仅是核心操作系统的启动引导和关闭了,还包括必须要同时启动或者关闭相当数量的服务项目。
类似于Windows NT,Linux系统启动过程需要打开的服务项目也是数量极大的。
这里,我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤。
加载内核
LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核。
请记住此时的计算机内存中还不存在任何操作系统,PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存。
因此,内核就必须完整地加载到可用RAM的第一个兆字节之内。
为了实现这个目的,内核是被压缩了的。
这个文件的头部包含着必要的代码,先设置CPU进入安全模式(以此解除内存限制),再对内核的剩余部分进行解压缩。
执行内核
内核在内存中解压缩之后,就可以开始运行了。
此时的内核只知道它本身内建的各种功能,也就是说被编译为模块的内核部分还不能使用。
最基本的是,内核必须有足够的代码设置自己的虚拟内存子系统和根文件系统(通常就是ext2文件系统)。
一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。
内核挂装了根文件系统之后,将启动并运行一个叫做init的程序。
注意:在这里我们故意略去了Linux内核启动的许多细节,这些细节只有内核开发人员才感兴趣。
如果你好奇的话,可以访问http://:8080地址处的“Kernel Hackers Guide”。
init进程
init进程是非内核进程中第一个被启动运行的,因此它的进程编号PID的值总是1。
init读它的配置文件/etc/inittab,决定需要启动的运行级别(Runlevel)。
从根本上说,运行级别规定了整个系统的行为,每个级别(分别由0到6的整数表示)满足特定的目的。
如果定义了initdefault级别,这个值就直接被选中,否则需要由用户输入一个代表运行级别的数值。
输入代表运行级别的数字之后,init根据/etc/inittab文件中的定义执行一个命令脚本程序。
缺省的运行级别取决于安装阶段对登录程序的选择:是使用基于文本的,还是使用基于X-Window的登录程序。
rc命令脚本程序
我们已经知道,当运行级别发生改变时,将由/etc/inittab文件定义需要运行哪一个命令脚本程序。
这些命令脚本程序负责启动或者停止该运行级别特定的各种服务。
由于需要管理的服务数量很多,因此需要使用rc命令脚本程序。
其中,最主要的一个是/etc/rc.d/rc,它负责为每一个运行级别按照正确的顺序调用相应的命令脚本程序。
我们可以想象,这样一个命令脚本程序很容易变得难以控制!为了防止这类事件的发生,需要使用精心设计的方案。
对每一个运行级别来说,在/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之前执行(S50inet配置网络设置,S55named启动DNS服务器)。
存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程。
当/etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。
它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。
对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递Start参数。
编写自己的rc命令脚本
在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。
有两种方法可以用来实现修改的目的:
●如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。
这个命令脚本程序是在引导过程的最后一步被执行的。
●如果所做的修改比较细致,或者还要求关闭进程使之明确地停止运行,则需要在/etc/rc.d/init.d子目录中添加一个命令脚本程序。
这个命令脚本程序必须可以接受Start和Stop 参数并完成相应的操作。
第一种方法,编辑/etc/rc.d/rc.local脚本,当然是两种方法中比较简单的。
如果想在这个命令脚本程序中添加内容,只需要使用喜欢的编辑器程序打开它,再把打算执行的命令附加到文
件的末尾就可以了。
这对一两行的修改来说的确很便利。
如果确实需要使用一个命令脚本程序,这时必须选择第二个方法。
编写一个rc命令脚本程序的过程并不像想象中那么困难。
我们下面就给出一个例子,看看它是怎样实现的(顺便说一句,你可以把我们的例子当作范本,按照自己的需要进行修改和添加)。
假设你打算每隔60分钟调用一个特殊的程序来弹出一条消息,提醒自己需要从键盘前面离开休息一会儿,命令脚本程序将包括下面几个部分:
●关于这个命令脚本程序功能的说明(这样就不会在一年之后忘记它);
●在试图运行它之前验证这个命令脚本程序确实存在;
●接受start和stop参数并执行要求的动作。
参数给定后,我们就可以编写命令的脚本程序。
这个程序很简单,大家可以自己编写一下,我在这里就不给出了。
编写好新的命令脚本程序之后,再从相关的运行级别子目录中加上必要的符号链接,来控制这个命令脚本程序的启动或者停止。
在我的印象中,只想让它在运行级别3或者运行级别5中启动,原因是我认为只有这两个运行级别才是日常工作的地方。
最后,希望这个命令脚本程序在进入运行级别6(重启动)的时候被关闭。
激活或者禁止服务项目
有的时候会发现,在引导的时候并不需要某个特定的服务被启动。
如果你正在考虑使用Linux 替换Windows NT的文件和打印服务器,就更是如此。
我们已经知道,在特定的运行级别子目录中给符号链接改个名称,就可以让该服务不被启动,如把其名称的第一个字母由S改为K。
一旦熟练掌握了命令行和符号链接,就会发现这是激活或者禁止服务的最快办法。
在学习这个改名方法的时候,可能会觉得图形化的操作界面ksysv比较容易掌握。
虽然它原来是设计使用在KDE环境里的,但在Red Hat Linux 7.2下缺省安装的GNOME环境里也运行得很好。
如果想启动它,只需简单地打开一个xterm窗口,并输入ksysv命令就可以了。
屏幕上会出现一个窗口,其中列出了能够修改的全部参数,需要时还包括在线帮助。
警告:如果是在一个现实中的系统上学习本文的知识,要多多运用常识。
当试着对启动脚本程序进行修改的时候,要记住所做的修改可能会造成你的系统不能正常工作,而且无法采用重启动的方法恢复。
不要在正常运转的系统上实验新的设置,对你准备修改的文件要全部进行备份。
最重要的是,在手边要准备一张引导盘以防不测。