基础命令学习目录首页
html
init是Linux系统操做中不可缺乏的程序之一。init进程,它是一个由内核启动的用户级进程,而后由它来启动后面的任务,包括多用户环境,网络等。mysql
内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来讲)是/sbin/init。若是内核找不到init,它就会试着运行/bin/sh,若是运行失败,系统的启动也会失败。linux
根据实际看一下,咱们来到/boot下,sql
能够看见,Grub就在这里,vmlinuz-2.6.32-358.el6.i686这个文件很重要,说通俗一点的话应该是咱们的内核,在启动后加载全部驱动(这个有另外的章节再讲,这里不详述)。另外initramfs-2.6.32-358.el6.i686.img是启动init进程的一个镜像文件,包含一个最小的linux系统。服务器
Linux内核在初始化以后会执行init进程,而init进程会挂载咱们的根文件系统,但因为init程序也是在根文件系统上的,因此这就有了悖论。Linux采用两步走的方法来解决这个问题。Linux2.6版之前的方法是:除了内核vmlinuz以外还有一个独立的initrd.img映像文件,其实它就是一个文件系统映像,linux内核在初始化后会mount initrd.img做为一个临时的根文件系统,而init进程就是在initrd.img里的,而后init进程会挂载真正的根文件系统,而后umount initrd.img。但Linux2.6内核的实现方式却不太同样,虽然完成的功能是同样的。Linux2.6采用initramfs。initramfs:init ram filesystem,它是一个cpio格式的内存文件系统,其实这部分也有不少内容能够讲,咱们之后再谈。网络
一般的步骤是先启动内核,而后内核挂载initrd.img,并执行里面的脚原本进一步挂载各类各样的模块,而后发现真正的root分区,挂载并执行/sbin/init。ssh
若是没有这个文件,计算机的启动时第一个进程都启动不起来。有他存在1号进程才能够开启。至关因而一个指挥官,他要指挥哪些程序在启动时应当存在,哪些程序不该当存在。/etc/inittab文件是init在启动时读取的文件,也就是指挥官的决策书,这个决策书规定了当前战争的局势,好比和平局势、冷战局势、战争局势。以及该局势下的核心策略。init就是这样,经过inittab这个文件控制了计算机的启动级别,及该级别下启动的进程。svn
[root@hao boot]# cat /etc/inittab # Default runlevel. The runlevels used 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) # id:5:initdefault:
从这里能够看出,我这里linux的default启动级别是runevel 5(注意,此处不要擅自改成6,若是默认的runlevel是6,那么就会比较麻烦,为何会这么说,看完下面每一个级别具体对应的进程就会明白)。那么具体每一个级别都是什么呢?其实每一个级别都有若干个进程,只不过每一个级别开的进程不一样。post
0:几乎全部进程都关闭,停机状态学习
1:单用户模式,root帐户进行操做
2:多用户,不能使用net file system,通常不多用
3:彻底多用户,一部分启动,一部分不启动,命令行界面
4:未使用、未定义的保留模式
5:图形化,3级别中启动的进程都启动,而且会启动一部分图形界面进程。
6:中止全部进程,卸载文件系统,从新启动
这些级别中一、二、4不多用,相对而言0、三、五、6用的会较多。3级别和5级别除了桌面相关的进程外没有什么区别。为了减小资源占用,推荐都用3级别。
那么这些级别是如何定义的呢,在/etc/rc.d/目录内,有以下目录。
[root@Hao rc.d]# ll total 60 drwxr-xr-x. 2 root root 4096 Mar 11 13:44 init.d -rwxr-xr-x. 1 root root 2617 Feb 22 2013 rc drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc0.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc1.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc2.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc3.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc4.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc5.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc6.d -rwxr-xr-x. 1 root root 220 Feb 22 2013 rc.local -rwxr-xr-x. 1 root root 19472 Feb 22 2013 rc.sysinit
在诸如rc3.d和rc5.d目录下有runlevel 3 和runlevel 5中容许和不容许启动的进程,
再进去目录看一下。
[root@Hao rc.d]# ls rc3.d/ K01smartd K69rpcsvcgssd S10network S26acpid K02oddjobd K73winbind S11auditd S26haldaemon K05wdaemon K75ntpdate S11portreserve S26udev-post K10psacct K75quota_nld S12rsyslog S28autofs K10saslauthd K76ypbind S13cpuspeed S50bluetooth K15htcacheclean K80kdump S13irqbalance S58ntpd K15httpd K84wpa_supplicant S13rpcbind S80postfix K15svnserve K87restorecond S15mdmonitor S82abrt-ccpp K25sshd K88sssd S22messagebus S82abrtd K30spice-vdagentd K89rdisc S23NetworkManager S90crond K36mysqld K95firstboot S24nfslock S95atd K50dnsmasq K99rngd S24rpcgssd S99certmonger K50netconsole S01sysstat S24rpcidmapd S99local K50snmpd S02lvm2-monitor S25blk-availability K50snmptrapd S08ip6tables S25cups K60nfs S08iptables S25netfs
root@Hao rc.d]# ls rc5.d/ K01smartd K75ntpdate S11portreserve S26udev-post K02oddjobd K75quota_nld S12rsyslog S28autofs K05wdaemon K76ypbind S13cpuspeed S50bluetooth K10psacct K80kdump S13irqbalance S55sshd K10saslauthd K84wpa_supplicant S13rpcbind S58ntpd K15htcacheclean K87restorecond S15mdmonitor S70spice-vdagentd K15httpd K88sssd S22messagebus S80postfix K15svnserve K89rdisc S23NetworkManager S82abrt-ccpp K36mysqld K95firstboot S24nfslock S82abrtd K50dnsmasq K99rngd S24rpcgssd S90crond K50netconsole S01sysstat S24rpcidmapd S95atd K50snmpd S02lvm2-monitor S25blk-availability S99certmonger K50snmptrapd S08ip6tables S25cups S99local K60nfs S08iptables S25netfs K69rpcsvcgssd S10network S26acpid K73winbind S11auditd S26haldaemon
这些都是连接文件lrwxrwxrwx,连接的路径都是/etc/init.d中的脚本文件。
[root@Hao rc.d]# ll rc3.d/ | grep ab lrwxrwxrwx. 1 root root 19 Feb 10 19:46 S08ip6tables -> ../init.d/ip6tables lrwxrwxrwx. 1 root root 18 Feb 10 19:44 S08iptables -> ../init.d/iptables lrwxrwxrwx. 1 root root 26 Feb 10 19:51 S25blk-availability -> ../init.d/blk-availability lrwxrwxrwx. 1 root root 19 Feb 10 19:46 S82abrt-ccpp -> ../init.d/abrt-ccpp lrwxrwxrwx. 1 root root 15 Feb 10 19:46 S82abrtd -> ../init.d/abrtd
K开头的文件意味着是要关闭进程的文件,S开头的进程则是开启的进程,以后的数字表示启动的顺序,好比S23NetworkManager和S80postfix都要依赖S10network,若是这个顺序错了或者电脑了,那么和网络有关的程序都会启动错误,这个也在管理服务器的过程当中也须要按期去看一下。
对比rc3.d/目录与rc5.d/
[root@Hao rc.d]# diff rc3.d/ rc5.d/ Only in rc3.d/: K30spice-vdagentd Only in rc5.d/: S70spice-vdagentd
发现spice-vdagentd服务在runlevel 3中是KILL的,在runleve5是START的,spice-vdagentd服务是Redhat桌面虚拟组件之一,因此在runlevel3中不必开,在runleve5中是要开启的,不然Linux将没法提供桌面服务,除此以外,两个运行级别没区别。
还记得那个以前提到的决策书吗?核心策略对应的会启动的内容都是在这里,好比和平局势(之于runlevel 1)下启用基本的民防系统(之于S01sysstat)就能够了,冷战时期(之于runlevel 3)除了民防之外,还开启了自卫系统(之于S08iptables)、消息传递(S10network)、警报机制(之于S22messagebus)、派遣间谍(之于sshd)、调动步兵部队(之于httpd)等等,若是是战争时期(之于runlevel 5)除了上面种种以外还要启动更多的战争活动,调度更强大的部队。
经过chkconfig –level 3 sshd off在运行级别中的开启或者关闭服务。
经过chkconfig –list sshd来查看sshd在全部runlevel中的状态。
[root@Hao rc.d]# chkconfig --list sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@Hao rc.d]# chkconfig --level 3 sshd off [root@Hao rc.d]# chkconfig --list sshd sshd 0:off 1:off 2:on 3:off 4:on 5:on 6:off
init 6是重启,init 0是关机。
# who –r 查看当前级别
run-level 5 2012-09-02 06:23
经过查看 /etc/rc.d/rc6.d能够看到,runlevel 6中只有两个服务是开启的,分别是 S00killall和S01reboot,若是默认的运行级别设为6,那么重启以后,机器会不停重启。
若是真的意(shou)外(jian)把默认的runlevel运行级别设置成了6,那么须要以下操做更改默认运行级别。在GRUB界面按e
而后选中第二行,再按e进入
在出现的命令行后加 [\空格]1 (单用户),按Enter键确认操做并后退到Linux配置页面
再按b重启Linux进入单用户模式就能够修改了,咱们这里改成3好了。而后重启就能够了。
Linux启动这个很不经意的过程里面包含了太多的内容,本文只是介绍了很小的一部分,推荐你们去深刻了解,顺便推荐几篇还不错的文章。
rc.d rc.local rc.sysinit 等Linux系统脚本启动顺序详解 做者:jsxubar (朱秀龙)
Linux2.6 内核的 Initrd 机制解析 做者: dazhi.li(李 大治)
原文连接:https://www.cnblogs.com/LinuxBlogs/p/4389415.html