在Ubuntu16.04下,使⽤sysv-rc-conf管理服务启动项 1. 读取 MBR 信息,启动 Boot Manager。Linux 通常使⽤功能强⼤、配置灵活的GRUB作为Boot Manager。
2. 加载系统内核,启动init进程。init进程是Linux的根进程,所有的系统进程都是它的⼦进程。
3. init进程读取/etc/inittab⽂件中的信息,并进⼊预设的运⾏级别,按顺序运⾏该运⾏级别对应⽂件夹下的脚本。脚本通常以 start参数 启动,并指向系统中的⼀个程序。通常情况下,/etc/rcS.d/⽬录下的启动脚本⾸先被执⾏,然后是/etc/rcN.d/⽬录。例如您设定的运⾏级别为3,那么它对应的启动⽬录为/etc/rc3.d/。
4. 根据/etc/rcS.d/⽂件夹中对应的脚本启动Xwindow服务器xorg。Xwindow为Linux下的图形⽤户界⾯系统。
5. 启动登录管理器,等待⽤户登录Ubuntu系统。默认使⽤GDM作为登录管理器,您在登录管理器界⾯中输⼊⽤户名和密码后,便可以
登录系统。(您可以在/etc/rc3.d/⽂件夹中到⼀个名为S13gdm 的链接)
Ubuntu运⾏级别
在任何时候,Linux系统都跑在⼀个指定的运⾏级别上,并且在不同运⾏级别的程序和服务,所要完成的⼯作也不同。Linux系统可以在这些运⾏级别之间进⾏切换,以完成不同的⼯作。
运⾏级别(Runlevel)是指Unix或者Linux等操作系统不同的运⾏模式,通常分为7等,从0到6。但如果必要的话也可以更多,例如,⼤多数linux操作系统,共有如下6个典型的运⾏级别:
0,停机
1,单⽤户,⽆⽹络连接,不能启动守护进程,不允许⾮root⽤户登录(Does not configure network interfaces, start daemons, or allow non-root logins)
2,多⽤户,⽆⽹络连接,不能启动守护进程(Does not configure network interfaces or start daemons)
3,多⽤户,启动⽹络连接(Starts the system normally.)
4,⽤户⾃定义
5,多⽤户,带图形化界⾯
6,重启
查看当前系统的运⾏级别
# runlevel
切换运⾏级别
# init [0123456Ss]
即在init命令后跟⼀个参数,此参数是要切换到的运⾏级的运⾏级代号,例如,⽤init 0命令关机,⽤init 6命令重新启动。
/etc/rc*⽬录
对于这些运⾏级别我们不必太过纠结到底是什么意思,只需要知道在Debian/Ubuntu(Ubuntu是Debian的分⽀)Linux默认都是运⾏在Runlevel2级别。
在Debian Linux中,/etc/rc*路径下对应不同的运⾏级别⽬录。当系统启动时,通过其中的脚本⽂件来
启动相应的服务。
/etc/rc0.d Run level 0
/etc/rc1.d Run level 1
/etc/rc2.d Run level 2
/etc/rc3.d Run level 3雄蛾酒
/etc/rc4.d Run level 4
/etc/rc5.d Run level 5
/etc/rc6.d Run level 6
下⾯,我们去/etc/⽬录下寻这些⽬录,在终端中输⼊ls /etc/rc*。对于输出,以K开头的⽂件,系统在相关运⾏级别将终⽌对应的服务;对于以S开头的⽂件,系统在相关运⾏级别将启动对应的服务。
电子加速器辐照/etc/rc.local
/etc/rc0.d:
K01watchdog K02lightdm K02n2n K02urandom K05rsyslog K10cryptdisks
K02atd K02lvm2-lvmetad K02open-iscsi K02uuidd K06hwclock.sh K11cryptdisks-early
K02avahi-daemon K02lvm2-lvmpolld K02open-vm-tools K03cgroupfs-mount K06umountnfs.sh K12umountroot K02bluetooth K02lxcfs K02plymouth K03iscsid K07rpcbind K13mdadm-waitidle
K02docker K02lxd K02resolvconf K03openibd K08networking K14halt
K02irqbalance K02mdadm K02unattended-upgrades K04sendsigs K09umountfs README
/etc/rc1.d:
椰油酸K01watchdog K02docker K02lvm2-lvmpolld K02open-iscsi K03cgroupfs-mount K07rpcbind S02single
K02atd K02irqbalance K02lxcfs K02open-vm-tools K03iscsid README
K02avahi-daemon K02lightdm K02lxd K02ufw K03openibd S01killprocs
K02bluetooth K02lvm2-lvmetad K02mdadm K02uuidd K05rsyslog S01n2n
/etc/rc2.d:
README S01openibd S02acpid S02mdadm S03lightdm S04watchdog
S01apport S01open-vm-tools S02atd S02rsync S03lxcfs
S01lvm2-lvmetad S01rsyslog S02cgroupfs-mount S02ssh S04grub-common
S01lvm2-lvmpolld S01unattended-upgrades S02cron S03avahi-daemon S04ondemand
S01lxd S01uuidd S02dbus S03bluetooth S04plymouth
S01n2n S01wd_keepalive S02irqbalance S03docker S04rc.local
/etc/rc3.d:
README S01openibd S02acpid S02mdadm S03lightdm S04watchdog
S01apport S01open-vm-tools S02atd S02rsync S03lxcfs
S01lvm2-lvmetad S01rsyslog S02cgroupfs-mount S02ssh S04grub-common
S01lvm2-lvmpolld S01unattended-upgrades S02cron S03avahi-daemon S04ondemand
S01lxd S01uuidd S02dbus S03bluetooth S04plymouth
S01n2n S01wd_keepalive S02irqbalance S03docker S04rc.local
/etc/rc4.d:
README S01openibd S02acpid S02mdadm S03lightdm S04watchdog
S01apport S01open-vm-tools S02atd S02rsync S03lxcfs
S01lvm2-lvmetad S01rsyslog S02cgroupfs-mount S02ssh S04grub-common
S01lvm2-lvmpolld S01unattended-upgrades S02cron S03avahi-daemon S04ondemand
S01lxd S01uuidd S02dbus S03bluetooth S04plymouth
S01n2n S01wd_keepalive S02irqbalance S03docker S04rc.local
/etc/rc5.d:
README S01openibd S02acpid S02mdadm S03lightdm S04watchdog
S01apport S01open-vm-tools S02atd S02rsync S03lxcfs
S01lvm2-lvmetad S01rsyslog S02cgroupfs-mount S02ssh S04grub-common
S01lvm2-lvmpolld S01unattended-upgrades S02cron S03avahi-daemon S04ondemand
S01lxd S01uuidd S02dbus S03bluetooth S04plymouth
S01n2n S01wd_keepalive S02irqbalance S03docker S04rc.local
/etc/rc6.d:
K01watchdog K02lightdm K02n2n K02urandom K05rsyslog K10cryptdisks
K02atd K02lvm2-lvmetad K02open-iscsi K02uuidd K06hwclock.sh K11cryptdisks-early
K02avahi-daemon K02lvm2-lvmpolld K02open-vm-tools K03cgroupfs-mount K06umountnfs.sh K12umountroot K02bluetooth K02lxcfs K02plymouth K03iscsid K07rpcbind K13mdadm-waitidle
K02docker K02lxd K02resolvconf K03openibd K08networking K14reboot
K02irqbalance K02mdadm K02unattended-upgrades K04sendsigs K09umountfs README
/etc/rcS.d:
README S02resolvconf S05procps S09urandom S13rpcbind
S01console-setup S02screen-cleanup S06hwclock.sh S10cryptdisks S14mountnfs.sh
S02apparmor S02ufw S07checkroot.sh S11checkfs.sh S14open-iscsi
S02hostname.sh S02x11-common S08cryptdisks-early S12mountall.sh S15mountnfs-bootclean.sh S02mountkernfs.sh S03udev S09checkroot-bootclean.sh S12networking S16bootmisc.sh
S02plymouth-log S04keyboard-setup S09kmod S13iscsid
S02pppd-dns S05mountdevsubfs.sh S09lvm2 S13mountall-bootclean.sh
现在对于Debian/Ubuntu Linux的启动过程⼤家应该有所了解,总结⼀下:在/etc/rc0.d6运⾏级别时要启动的相
rc6.d⽬录下,分别存放的是在0
关服务⽂件,由于Ubuntu默认是在runlevel2启动,那么我们只需要修改rc2.d中的⽂件,从⽽禁⽌某些服务启动,例如n2n。
回顾刚才/etc/rc2.d⽬录下的⽂件,我们可以发现与n2n有关的⽂件是S01n2n。我们查看n2n的⽂件属性,系统将开机⾃启动以S开头⽂件对应的服务。
# file S01n2n
S01n2n: symbolic link to ../init.d/n2n
查n2n在其他运⾏级别下的状态
# 查看当前系统的运⾏级别
# runlevel
N 5
# find / -name S01n2n
/etc/rc1.d/S01n2n
/etc/rc2.d/S01n2n
/etc/rc3.d/S01n2n
双向推车/etc/rc4.d/S01n2n
/etc/rc5.d/S01n2n
我们会发现n2n在运⾏级别1,2,3,4,5之下都是开机启动的,所以我们要做的是把S91n2n修改成以K******,但是我们并不知道应该修改成多少,这⾥需要借助⼀个管理⼯具进⾏管理,即sysv-rc-conf。
sysv-rc-conf
sysv-rc-conf是⼀个强⼤的服务管理程序,众的意见是sysv-rc-conf⽐chkconfig、rcconf好⽤。在Ubuntu下,⽤apt-get安装sysv-rc-conf
# sudo apt-get install sysv-rc-conf
运⾏sysv-rc-conf,查看在各个系统运⾏级别的服务启动项是否开启
# sudo sysv-rc-conf
第⼀⾏service后⾯是运⾏级别,有1,2,3,4,5,0,6,S,与之前介绍的运⾏级别基本符合,最后S项这⾥不做介绍。图中打X的即表⽰运⾏在对应Runlevel时服务是否开机启动,这⾥我们可以看到n2n在Runlevel1,2(系统默认运⾏级别),3,4,5(当前系统运⾏级别)均为开机启动,对应之前/etc/rc1.d ~ /etc/rc5.d⽬录下均为S01n2n⽂件,再次验证了之前的内容。
为了禁⽤n2n服务开机⾃启,将光标移动到n2n那⾏的第2列,按空格进⾏将启动项反选,按q退出之后配置即完成。现在我们再来看⼀
下/etc/rc2.d/⽬录下的内容
ls /etc/rc*
微拟球藻在对应运⾏级别的⽂件夹下,已经出现了K…n2n⽂件,⽽之前的S01n2n⽂件不在了。到这⾥配置成功,重启系统之后,查看n2n服务运⾏状态
service n2n status
注:同理,如果想要某个服务在某个运⾏级别下开机⾃启,就选中对应的X。
常见的系统服务信息
acpi-support,⾼级电源管理⽀持
acpid acpi,守护程序。这两个⽤于电源管理,⾮常重要
alsa,声⾳⼦系统
alsa-utils,anacroncron的⼦系统,将系统关闭期间的计划任务,在下⼀次系统运⾏时执⾏
apmd,acpi的扩展
atd,类似于cron的任务调度系统。建议关闭
binfmt-support,核⼼⽀持其他⼆进制的⽂件格式,建议开启电视升降机