Linux开机启动程序解读
我们假定你们早已熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人笔记本而言一般是LILO)开始,介绍Linux开机引导的步骤。
加载内核
LILO启动以后,假如你选择了Linux作为打算引导的操作系统,第一个被加载的东西就是内核。请记住此时的计算机显存中还不存在任何操作系统,PC(由于它们天然的设计缺陷)也还没有办法存取机器上全部的显存。为此,内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的,内核是被压缩了的。这个文件的脑部包含着必要的代码,先设置CPU步入安全模式(借此解除显存限制),再对内核的剩余部份进行解压缩。
执行内核
内核在显存中解压缩以后,就可以开始运行了。此时的内核只晓得它本身内建的各类功能,也就是说被编译为模块的内核部份还不能使用。最基本的是,内核必须有足够的代码设置自己的虚拟显存子系统和根文件系统(一般就是ext2文件系统)。一旦内核启动运行,对硬件的测量都会决定须要对什么设备驱动程序进行初始化。从这儿开始,内核就才能挂装根文件系统(这个过程类似于Windows辨识并存取C盘的过程)。内核挂装了根文件系统以后,将启动并运行一个称作init的程序。
注意:在这儿我们故意略去了Linux内核启动的许多细节,这种细节只有内核开发人员才感兴趣。假如你好奇的话,可以访问http://:8080地址处的"KernelHackersGuide"。
init进程
init进程是非内核进程中第一个被启动运行的,因而它的进程编号PID的值总是1。init读它的配置文件/etc/inittab,决定须要启动的运行级别(Runlevel)。从根本上说linux 论坛,运行级别规定了整个系统的行为,每位级别(分别由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之前执行(S5050inet配置网路设置,55named启动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命令脚本程序的过程并不像想像中这么困难。我们下边就给出一个反例,瞧瞧它是如何实现的(顺便说一句,你可以把我们的事例当成范本kali linux,根据自己的须要进行更改和添加)。
假定你准备每隔60分钟调用一个特殊的程序来弹出一条消息,提醒自己须要从按键后面离开休息一会儿,命令脚本程序将包括下边几个部份:
●关于这个命令脚本程序功能的说明(这样就不会在一年以后忘掉它);
●在企图运行它之前验证这个命令脚本程序确实存在;
●接受start和stop参数并执行要求的动作。
参数给定后,我们就可以编撰命令的脚本程序。这个程序很简单,你们可以自己编撰一下,我在这儿就不给出了。
编撰好新的命令脚本程序以后,再从相关的运行级别子目录中加上必要的符号链接,来控制这个命令脚本程序的启动或则停止。在我的印象中,只想让它在运行级别3或则运行级别5中启动,缘由是我觉得只有这两个运行级别才是日常工作的地方。最后,希望这个命令脚本程序在步入运行级别6(重启动)的时侯被关掉。
激活或则严禁服务项目有的时侯会发觉linux程序开机启动,在引导的时侯并不须要某个特定的服务被启动。假如你正在考虑使用Linux替换WindowsNT的文件和复印服务器,就更是这么。我们早已晓得,在特定的运行级别子目录中给符号链接改个名称,就可以让该服务不被启动,如把其名称的第一个字母由S改为K。一旦熟练把握了命令行和符号链接,都会发觉这是激活或则严禁服务的最快办法。
在学习这个更名方式的时侯,可能会认为图形化的操作界面ksysv比较容易把握。其实它原先是设计使用在KDE环境里的,但在RedHatLinux7.2下缺省安装的GNOME环境里也运行得挺好。假如想启动它,只需简单地打开一个xterm窗口linux程序开机启动,并输入ksysv命令就可以了。屏幕上会出现一个窗口,其中列举了才能更改的全部参数,须要时还包括在线帮助。警告:假如是在一个现实中的系统上学习本文的知识,要多多运用常识。当试着对启动脚本程序进行更改的时侯,要记住所做的更改可能会导致你的系统不能正常工作,但是未能采用重启动的方式恢复。不要在正常运转的系统上实验新的设置,对你打算更改的文件要全部进行备份。最重要的是,在手边要打算一张引导盘以防不测。
Linux怎样实现开机启动程序解读_xitong2012的博客-CSDN博客
在Linux系统怎样让程序开机时手动启动
核心提示:系统的服务在开机时通常都可以手动启动,那在linux系统下假如想要程序在开机时手动启动怎样办?我们晓得在windows系统“开始”-->“所有程序”-->“启动”里面放个快捷方法就行,那Linux系统下呢?...系统的服务在开机时通常都可以手动启动,那在linux系统下假如想要程序在开机时手动启动怎样办?我们晓得在windows系统“开始”-->“所有程序”-->“启动”里面放个快捷方法就行,那Linux系统下呢?
这也是一个比较简单的问题,有不少的方式可以解决,这儿介绍三种方式。由于是简单介绍,所以具体细节不是很详尽,可以通过man瞧瞧相关指南。
一、/etc/rc.local
这是一个最简单的方式,编辑“/etc/rc.local”,把启动程序的shell命令输入进去即可(要输入命令的全路径),类似于windows下的“启动”。
使用命令vi/etc/rc.local
之后在文件最后一行添加要执行程序的全路径。
比如,每次开机时要执行一个haha.sh,这个脚本置于/opt下边,那就可以在“/etc/rc.local”中加一行“/opt/./haha.sh”,或则两行“cd/opt”和“./haha.sh”。
二、crontab(类似于windows的任务计划服务)
通过crontab可以设定程序的执行时间表,比如让程序在每晚的8点,或则每位礼拜一的10点执行一次。
crontab-l列举时间表;
crontab-e编辑时间表;
crontab-d删掉时间表;
“-l”没哪些可说的,就是一个查看而已;
“-e”是编辑,和vi没哪些差异(虽然就是用vi编辑一个特定文件);
“-d”基本不用,由于它把该用户所有的时间表都删掉了,通常都是用“-e”编辑把不要了的时间表逐行删掉;
那究竟该怎么编辑呢?
crontab文件的格式是:MHDmdCMD。
一个6个数组,其中最后一个CMD就是所要执行的程序,如haha.sh。
M:分钟(0-59)
H:小时(0-23)
D:日期(1-31)
m:月份(1-12)
d:一个礼拜中的某日(0-6,0代表周五)
这5个时间数组用空格隔开,其值可以是一个数字,也可以用冒号隔开的多个数字(或其他),倘若不需设置,则默认为“*”。
比如,每晚的8点5分执行haha.sh,就是“58***/opt/./haha.sh”。
似乎和“开机程序手动启动”扯远了,如今回归题外话。虽然前面介绍的crontab的功能早已具备了开机手动启动的能力,可以写一个检测脚本,每5分钟执行一次(*/5****./haha.sh),假如程序不在了就重新启动一次。
三、注册系统服务
操作系统自带的服务,如ssh,ftp等等,开机都是手动启动的,我们也可以通过这些方法让自己开发的程序提升“身价”。
例如我想把某个早已安装了的服务添加为系统服务,可以执行以下命令:
chkconfig--add服务名称(首先,添加为系统服务,注意add后面有两个横杠)
chkconfig-leve启动级别服务名on
(说明,3级别代表在命令行模式启动,5级别代表在图形界面启动,on表示开启)
chkconfig-leve启动级别服务名off
(说明,off表示关掉自启动)
比如:chkconfig-level3mysqlon(说明:让mysql服务在命令行模式,随系统启动)
也可以使用chkconfig--add服务名称来删掉系统服务
******************************************************************************************
假如要查看什么服务被添加为系统服务可以使用命令:
ntsysv或则chkconfig--list
假如要查看什么程序被添加为自启动,可以使用命令:
cat/etc/rc.local(查看这个文件中添加了什么程序路径)
*******************************************************************************************
下边举例谈谈,怎样把一个shell脚本添加为系统服务,并追随系统启动:
可以见到“/etc/rc.d/init.d”下有好多的文件,每位文件都是可以看见内容的,虽然都是一些shell脚本。
系统服务的启动就是通过“/etc/rc.d/init.d”中的脚本文件实现的。我们也可以写一个自己的脚本置于这儿。
脚本文件的内容也很简单,类似于这个样子(比如起个名子称作“hahad”):
./etc/init.d/functions
start(){
echo"Startingmyprocess"
cd/opt
./haha.sh
stop(){
killallhaha.sh
echo"Stoped"
写了脚本文件以后事情还没有完,继续完成以下几个步骤:
chmod+xhahad#降低执行权限
chkconfig--addhahad#把hahad添加到系统服务列表
chkconfighahadon#设定hahad的开关(on/off)
chkconfig--listhahad#就可以看见早已注册了hahad的服务
这时侯才完成了全部工作。