所有由rc腳本關閉或啓動的鏈接文件的原文件都存在於/etc/rc.d/init.d,系統爲了方便使用,爲此目錄創建了鏈接/etc/init.d
所有/etc/inid.d(/etc/rc.d/init.d)目錄中的腳本執行方式:
# /etc/init.d/srv_script {start|stop|restart|status}
# service srv_script {start|stop|restart|status}
chkconfig命令:
chkconfig - updates and queries runlevel information for system services
查看系統服務相關運行級別下的運行狀態;
chkconfig [--list] [name]
管理系統服務在/etc/rc.d/rc#.d/目錄下的服務腳本的鏈接:
chkconfig --add name
chkconfig --del name
爲了能夠讓chkconfig命令管理系統服務的腳本的鏈接,每個腳本中都必須有這樣的格式;
# chkconfig:2345 90 60
2345:在哪個運行級別下,此服務是自動啓動狀態;也就是說,在對應的運行級別的rc#.d目錄中,是以S開頭的文件;如果該位置爲“-”,則表示所有運行級別都是爲K開頭的;
90:如果在某個運行級別下爲開啓狀態,該數字爲S後面的優先級數字
60:如果在某個運行級別下爲停止狀態,該數字爲K後面的優先級數字
# description:對於此係統服務的摘要性描述信息;
單獨設置指定運行級別下系統服務的摘要性描述信息:
chkconfig [--level levels] name <on|off|reset>
/etc/rc.d/rc.local腳本:
是init程序在引導用戶空間進程啓動的過程中,所執行的最後一個腳本;因爲,不便於或不需要寫在系統服務相關的腳本中的內容但又期望可以開機即運行的功能,可以直接寫在此腳本中;
rc.local腳本:
是init程序在引導用戶空間進程啓動的過程中,所執行的最後一個腳本;因爲,不便於或不需要寫在系統服務相關的腳本中的內容但又期望可以開機即運行的功能,可以直接寫在腳本中;
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
6
mingetty會調用login程序,打開虛擬終點;除了mingetty之外,諸如getty之類的程序也可以生成虛擬終端控制檯;
如果默認的運行級別時5,則我們需要/etc/x11/prefdm腳本打開圖形界面終點:
X6R11 - X Version 6 Release 11
小結:(用戶空間的啓動流程),/sbin/init
/sbin/init --> /etc/inittab -->設置默認運行級別 --> /etc/rc.d/rc.sysinit腳本,完成系統初始化 --> 關閉那些對應運行級別下需要停止的服務,啓動那些對應運行級別下需要開啓的服務 --> Ctrl+Alt+del熱鍵功能 --> UPS電源的失效與恢復之後的操作 --> 生成終端[啓動圖形界面]
centos 6:
init程序:upstart,其應用程序依然是/sbin/init,其配置文件;
/etc/inittab:僅僅只是用於定義默認運行級別;
/etc/init/*.conf:
rcS.conf:執行系統初始化腳本的任務;
rc.conf:執行根據運行級別關閉或開啓系統服務的任務;
start-ttys.conf:執行打開終端相關的任務;
prefdm.conf:執行大小圖清潔棉的任務;
upstart機制:基於事件驅動的程序管理模型;driven-envet
centos 6 系統啓動流程:
post --> bootsequence(BIOS)--> BootLoader --> kernel [-->ramfs] -->rootfs(ro)--> /sbin/init -->設置默認級別 --> 系統初始化 --> 可以並行執行Ctrl+Alt+del熱鍵功能定義,系統服務器的開啓和關閉,電源管理,dubs管理等 --> 登錄提示符
centos 7:
inIT程序:systemd,與經典的init程序完全不同;其配置文件;
/etc/systemd/system/*
/usr/lib/systemd/system/*:systemdd 的unit文件;
/etc/inittab:徹底被廢棄;
systemd完全兼容sysV風格的inIT程序及其腳本;因爲service類的命令在centos7中依然可用;但是,建議使用centos7標配的systemctl命令來控制和管理系統服務;
systemctl命令:
systemctl - Control the systemd system and service manager
systemctl [OPTIONS...] COMMAND [NAME...]
使用systemctl管理服務的一般方式:
systemctl {start|stop|restart|status} name[.service]
設置centos 7的默認運行級別:
~]# systemctl get-default {multi-user.target | graphical.targer}
查看centos 7的默認運行級別:
~]# systemctl get-default
總結:
post --> bootsequence --> BootLoader --> kernel --> rootfs --> init
grub:legacy:
1st stage:stage1,MBR的前446bytes;
1.5 stage:MBR之後的若干個扇區中;讓stage1中的BootLoader程序能夠識別stage所在的分區的文件系統;
2nd stage:stage2,磁盤的啓動分區,
注意:stage2及內核核心文件必須放置在同一個基本磁盤分區上;
stage2提供的功能:
1.加載操作系統內核核心文件;
2.提供一個菜單和交互式接口;
3.允許用戶編輯菜單內容;
4.命令行接口操作模式;
5.身份認證機制,以保證菜單編輯和內核啓動的安全;
grub的命令行界面:
grub>
grub的命令行界面中的常用命令:
help:獲取所有的grub命令的名稱列表和簡要使用方法;
help grub_cmd: 顯示特定命令的詳細幫助信息;
root (hd#,#):將指定磁盤的制定分區作爲grub程序的根設備;
hd#:磁盤編號,#一般是從0開始的數字;如hd0表示第一塊磁盤;
#:分區編號,#一般是從0開始的數字,如0表示第一個分區;
(hd0,0):當前計算機上的第一塊磁盤的第一個分區;
find (hd#,#):從指定的分區中搜索文件,並顯示出文件所在位置;
kernel /path/to/kernel_core_file:設定本次啓動時用到的內核文件的絕對路徑;額外還可以在kernel命令中,爲內核啓動添加更多的內核參數;
ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}
initrd /path/to/initramfs-version-release.img
grub的配置文件:
/boot/grub/grub.conf <-- /etc/grub.conf
default=0
設定默認啓動菜單項;整個菜單中的所有的title是從0開始編號的;
timeout=5
用戶未做出選擇時,grub會自動引導默認菜單對應的內核的超時時間;
splashimage=(hd0,0)/grub/splash.xpm.gz
grub的北京圖片對應的路徑;
hiddenmenu
隱藏菜單
password --md5 CRYPTED_PASSWORD
爲了保護菜單設置的密碼,通常用於防止隨意進入單用戶模式;
title CentOS 6 (2.6.32-573.el6.x86_64)
定義菜單項中的各個“標題”,可以定義多個title項;至少有一項;
root (hd0,0)
指定grub的根設備,通常是用來安裝grub的那個分區;
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=4e82764c-11aa-4e68-9f3a-1a821f5db868 nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
該菜單對應的要啓動的內核及傳遞給內核的各個參數;
initrd /initramfs-2.6.32-573.el6.x86_64.img
內核所對應的ramdisk(ramfs)文件
password --md5 CRYPTED_PASSWORD
保護操作系統內核的啓動;
自制小Linux:
1.在某個正常運行的centos裏添加一塊硬盤;
2.對硬盤分區,創建相應的文件系統,並掛載(/mnt/root,/mnt/sysroot);
3.安裝grub程序,
# grub-install --root-directory=/mnt(boot的父目錄)/dev/sdb
4.爲小Linux的根分區創建目錄層級結構;mkdir -pv /mnt/sysroot/{bin,boot,dev,etc,lib,lib64,proc,sys,mnt,media,tmp,var,usr,sbin}
5.複製內核文件及ramdisk文件到目標系統的啓動分區;
# cp /boot/vmlinuz-version-release /mnt/boot
# cp /boot/initramfs-version-release.img /mnt/boot
6.給grub提供配置文件:
default=0
timeout=10
title mylinux (1.0.0)
root (hd0,0)
kernel /vmlinuz-version-release ro root=/dev/sda3 selinux=0 init=/bin/bash
initrd /initramfs-version-release.img
7.將/bin/bash及其共享庫文件,複製到/mnt/sysroot下對應的目錄中;除此之外,還可以複製其他的各應用程序及相應的共享庫文件;
8.多執行幾次sync命令,使得內存中緩存或緩衝的數據被保存到磁盤上;
9.新建虛擬機,將小硬盤作爲新虛擬機的硬盤使用;將宿主系統掛機之後,再啓動小Linux即可;
小實驗:
破壞grub,在重啓之前可以使用下列方法恢復;
1.# grub-install --root-directory=/ /dev/sda
2.# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
#
破壞grub或者grub。conf配置文件,重啓之後無法正確引導內核;可以使用光盤或U盤等其他的引導設備將系統引導起來,並進入rescue模式,其他操作方法如上。
post --> bootsequence(BIOS) --> BootLoader(grub,mbr-stage1) --> stage1.5 --> stage2 --> kernel --> init
chkconfig:檢查、設置系統的各種服務。這是Red Hat公司遵循GPL規則所開發的程序,它可查詢操作系統在每一個執行等級中會執行哪些系統服務,其中包括各類常駐服務。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。
選項:
--add:增加所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啓動的敘述文件內增加相關數據;
--del:刪除所指定的系統服務,不再由chkconfig指令管理,並同時在系統啓動的敘述文件內刪除相關數據;
--level<等級代號>:指定讀系統服務要在哪一個執行等級中開啓或關畢。
等級代號列表:
等級0表示:表示關機
等級1表示:單用戶模式
等級2表示:無網絡連接的多用戶命令行模式
等級3表示:有網絡連接的多用戶命令行模式
等級4表示:不可用
等級5表示:帶圖形界面的多用戶模式
等級6表示:重新啓動
例子:
chkconfig --list(列出所有的系統服務。)
chkconfig --add httpd(增加httpd服務。)
chkconfig --del httpd(刪除httpd服務。)
chkconfig --level httpd 2345 on(設置httpd在運行級別爲2、3、4、5的情況下都是on(開啓)的狀態。)
chkconfig --list(列出系統所有的服務啓動情況。)
chkconfig --list mysqld(列出mysqld服務設置情況。)
chkconfig --level 35 mysqld on(設定mysqld在等級3和5爲開機運行服務,--level 35表示操作只在等級3和5執行,on表示啓動,off表示關閉。)
chkconfig mysqld on(設定mysqld在各等級爲on,“各等級”包括2、3、4、5等級。)
grub:多重引導程序grub的命令行shell工具。
選項:
--batch:打開批處理模式;
--boot-drive=<驅動器>:指定stage2的引導驅動器;
--config-file<配置文件>:指定stage2的配置文件;
--device-map=<文件>:指定設備的映射文件;
--help:顯示幫助信息;
--install-partition=<分區>:指定stage2安裝分區;
--no-config-file:不使用配置文件;
--no-pager:不使用內部分頁器;
--preset-menu:使用預設菜單;
--probe-second-floppy:檢測第二個軟盤驅動器;
--read-only:只讀模式。
例子:
root (hd0,1)(假設 /dev/hda2 是你的 /boot 所在的分區 */)
kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3(假設 /dev/hda3 是你的 / 所在的分區 */)
initrd /boot/initrd.img-2.6.15-26-386
boot