1、硬件啓動流程 linux
(1)、打開電源 (2)、BIOS: 1. POST 初始化硬件設備,檢查系統外圍主要設備(CPU,內存,硬盤,顯卡i-o設備,鍵盤鼠標) 2.肯定啓動設備 -根據BIOS設置的啓動順序,檢測驅動器(硬盤,光盤,U盤,網絡) --若是硬盤是啓動項,讀取硬盤第一個扇區(MBR,512字節)到內存 ---控制區轉給MBR中的Boot loader (3)、MBR 1.執行MBR中Bootloader 2.MBR由主引導程序,硬盤分區表DPT和有效硬盤標書(55aa,標識是MBR分區) 3.MBR的BOOt loader含有grub的stage1階段 POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串並行接口、鍵盤等硬件狀況的檢測(主板自帶的程序功能) ROM:BIOS,Basic Input and Output System,保存着有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啓動自舉程序等 RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定 按次序查找引導設備,第一個有引導程序的設備爲本次啓動設備 bootloader: 引導加載器,引導程序(MBR引導) windows: ntloader,僅是啓動OS Linux:功能豐富,提供菜單,容許用戶選擇要啓動系統或不一樣的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核 LILO:LInux LOader | 早期的版本啓動程序 GRUB: GRand Unified Bootloader |centos6 0.97 centos7 2.02 GRUB 0.X: GRUB Legacy, GRUB2
2、GRUB啓動引導階段 shell
(1)stage1 包含在MBR的前446字節,但內容不足夠起到完整的識別(分區文件系統加載程序等) (2)stage1_5 在MBR分區後面,能識別啓動分區文件系統是1和2直接的橋樑 (3)stage2 解析/boot/grub裏的grub.conf,顯示操做系統啓動菜單,加載內核文件到內存,經過/boot/initrd開頭文件創建虛擬DAM disk虛擬文件系統轉交給內核
3、內核引導階段 c#
探測可識別到的全部硬件設備 加載硬件驅動程序(藉助於ramdisk加載驅動) 以只讀方式掛載根文件系統(grub.conf grub.cfg裏的root=) 運行用戶空間的第一個應用程序:/sbin/init 用init裏面的進程文件初始化,第二次從新掛載
4、系統初始化階段 windows
(1)、 讀取/etc/inittab 獲取用戶級別 (2)、讀取/etc/rc.sysinit初始化系統 測試與載入內存設備/proc及usb設備、/sys 掛載/etc/fstab定義的文件系統 加載核心的相關設置,按/etc/sysctl.conf文件設定的內核參數的值(/proc/sys/) 將啓動相關信息加載到/var/log/dmesg文件中 (3)、加載系統服務 /etc/rc/rc#.d 根據運行級別啓動對應/etc/rc/rc#.d目錄下的服務,K開機關閉S開機開啓centos6 chkconfig centos7 systemctl /etc/local 加載用戶自定義服務 通常能夠將本身編譯的服務放在裏面
5、啓動終端
默認執行/sbin/mingetty打開的6個文本終端
驗證登錄
1./etc/nologin(可能沒有)有則在內的普通用戶不可登錄,(usermod -s /sbin/nologin,可能能使用系統資源,/bin/false 則全部服務都不能夠用)
2./etc/usertty對文件作出附近訪問限制,不存在該文件沒有限制
3./etc/securetty 登記的終端才容許使用,沒有文件任何終端均可以登錄
4./etc/passwd & /etc/shadow 存放用戶信息、密碼、使用何種shell centos
登錄成功 輸出 /var/log/lastlog 輸出最近一次登錄的信息 /var/spool/mail/用戶名 郵件存放的地方 /etc/profile、.bash_profile、.bash_login、.profile 安裝圖形界面默認是5級別的圖形桌面
Linux內核特色: 支持模塊化:.ko(內核對象)如:文件系統,硬件驅動,網絡協議等 支持內核模塊的動態裝載和卸載 內核組成部分: 核心文件:/boot/vmlinuz-VERSION-release{核心驅動文件} vmlinux-2.6.32-754.e16.x86_64 ramdisk:輔助的僞根系統 CentOS 5 /boot/initrd-VERSION-release.img |虛擬磁盤 CentOS 6,7 /boot/initramfs-VERSION-release.img(一些必要的輔助文件模塊驅動放在這裏-打包文件-虛擬文件系統) initramfs-2.6.32-754.el6.x86_64.img 模塊文件:/lib/modules/VERSION-release(模塊化的驅動文件) /lib/modules/2.6.32-754.el6.x86_64/kernel/fs 配置文件 /etc/ld.so.conf.d/kernel-2.6.32-754.el6.x86_64.conf locate ext3.ko 搜索模塊 一、先識別系統核心文件放在/boot (不進入/就完成不了後續的行爲)二、識別放驅動的文件(/lib/modules) 三、識別加載文件系統的驅動 四、在加載有文件系統的/ 五、加載init進程 此時ramdisk的initramfs-2.6.32-754.el6.x86_64.img文件就存放了加載文件系統的驅動 文件是裝系統臨時生成的
(我這是想看看這個文件有點啥:)
mv initramfs-2.6.32-754.el6.x86_64.img in.img.gz
gunzip initramfs-2.6.32-754.el6.x86_64.img.gz
file initramfs-2.6.32-754.el6.x86_64.img
cpio -id < initramfs-2.6.32-754.el6.x86_64.img(小型的/環境)
centos initrd(硬盤) centos6 initramfs(文件系統) 提升速度 bash
CentOS 6,7 initramfs.img
工具程序:mkinitrd, dracut
ramdisk文件的製做
(1) mkinitrd命令:爲當前正在使用的內核從新制做ramdisk文件(腳本調用dracut)
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令:爲當前正在使用的內核從新制做ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r) 網絡
實驗:破壞此文件 掛光盤救援模式 光盤的isolinux目錄下有vmlinuz(不會放圖,不想放圖,順便也刪除了)
mkinitrd /boot/initranfs-uname -r
.img uname -r
生成boot下的ramfs文件(可能須要加上force)
mount /dev/sr0 /mnt
cp /mnt/isolinux/vmlinuz /boot/vmlinuz-uname -r
和
rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.e16.x86_64.rpm --root=/mnt/sysimage/(boot的父目錄) --force ide
內核初始化經過init進程 /etc/inittab 截取了比較重要的部分
17 # Default runlevel. The runlevels used are:
18 # 0 - halt (Do NOT set initdefault to this) 關機
19 # 1 - Single user mode
單用戶模式(root自動登陸), single, 維護模式 進入單用戶模式能夠破解root口令
20 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
多用戶模式,啓動網絡功能,但不會啓動NFS;維護模式
21 # 3 - Full multiuser mode 文本界面
22 # 4 - unused 預留級別;可同3級別
23 # 5 - X11 圖形界面
24 # 6 - reboot (Do NOT set initdefault to this)
26 id:5:initdefault:
id:runlevel:action:process
id:是唯一標識該項的字符序列
runlevels: 定義了操做所使用的運行級別
action: 指定了要執行的特定操做
wait: 切換至此級別運行一次
respawn:此process終止,就從新啓動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式
process:定義了要執行的進程
實驗id:6:...設置成6無限重啓,在重啓的等待界面輸入任意鍵進入一個啓動界面選項
根據提示按鍵(在啓動前更改內核參數)輸入 a 能夠輸入0-6啓動爲何模式
進入單用戶更改用戶口令passwd 模塊化
/etc/rc.d/rc.sysinit: 系統初始化腳本規定了N多的參數,多看看,
si::sysinit:/etc/rc.d/rc.sysinit---centos5裏面有這個的初始化腳本的設置 工具
以前的0-6在/etc/rc.d/rc#.d 有一一對應的文件,選擇什麼則進入什麼
每一個文件裏面都分只有兩個開頭的文件 K和S,K表式運行此模式時關閉此服務,S相反開啓
K: K##:##運行次序;數字越小,越先運行;數字越小的服務,一般爲依賴到別的服務
S: S##:##運行次序;數字越小,越先運行;數字越小的服務,一般爲被依賴到的服務
ntsysv命令更改當前運行模式的服務下一次開機的開啓和關閉(圖形操做)
ntsysv --level=5更改5模式的服務的開機狀態
既然這裏有服務確定要學的,這麼好的格式,這麼重要的東西,我就不寫了
chkconfig --add testsrv /var/lock/subssy 觀察目錄,服務在這裏建立對應服務文件
chkconfig命令查看服務在全部級別的啓動或關閉設定情形
chkconfig [--list] [name] chkconfig --list
添加:SysV的服務腳本放置於/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name 對應的建立name的rc.d裏面的服務文件
#!/bin/bash
#LLLL 表示初始在哪一個級別下啓動,-表示都不啓動
*# chkconfig: LLLL nn nn
chkconfig --del name 刪除
修改指定的連接類型
chkconfig [--level levels] name <on|off|reset>
--level LLLL: 指定要設置的級別;省略時表示2345
chkconfig --level 345 atd on/off 定義下次開啓仍是關閉
chkconfig atd on 默認更改2-5
yum install atd;sercvice atd start;chkconfig atd on;配置服務開啓
實驗,某個服務出錯
ctrl + alt + delete 重啓,任意鍵進入 進入單用戶模式 將出錯的服務關閉
chkconfig testsrv on (/etc/inittab這個文件centos5是比較完整的,最好了解下這個好)
寫到這裏想起來 6的/etc/inittab裏面註釋的說明很重要,說了不少信息
xinetd管理的服務(服務那麼多,這個就很實在了)
service 命令:手動管理服務
service 服務 start|stop|restart
service --status-all 列出全部服務的狀態
瞬態(Transient)服務(非獨立服務)被xinetd進程所管理(超級守護進程)
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>(裏面是代理的服務)
與libwrap.so文件連接
用chkconfig控制的服務:
示例:chkconfig tftp on
telnet非獨立服務被xinetd監控 安裝yum install telnet
lsof -i :23 centos7 systemctl 代替了xinetd
xinetd默認裝好的程序裏面的是off狀態,手動開啓
修改/etc/xinted.d/telnet 裏的disable=no 能夠被激活狀態
service xinetd start ss -ntlp
telnet 192.168.60.149 ss -nt
chkconfig telnet of
注意:正常級別下,最後啓動一個服務S99local沒有連接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中
東西過多,好好學吧
grub: GRand Unified Bootloader
grub 0.97: grub legacy(老的版本)
grub 2.x: grub2
grub legacy:
stage1: mbr (/boot/grup/stage1這裏有備份)
stage1_5: mbr以後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統
stage2:磁盤分區(/boot/grub/)
grub安裝支持交互式命令方式
(1) grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤上,並複製GRUB相關文件到 DIR/boot目錄下
grub-install --root-directory=DIR /dev/DISK 修復MBR512
grup-install /dev/sda (grup.conf裏的圖片沒法修復) 這裏/boot/grub/grub.conf文件很重要 其餘文件上面的命令均可以恢復,這個問價要手寫 這是裏面內容,6結束 1 # grub.conf generated by anaconda 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda2 8 # initrd /initrd-[generic-]version.img 9 #boot=/dev/sda 10 default=0 11 timeout=5 12 splashimage=(hd0,0)/grub/splash.xpm.gz 13 hiddenmenu 14 title CentOS 6 (2.6.32-754.el6.x86_64) 15 root (hd0,0) 16 kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=f279775c-e233-4f26-b7ab-118dfe992d 2c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=a uto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 17 initrd /initramfs-2.6.32-754.el6.x86_64.img 裏面能夠加 passwd 選項對單用戶模式起到保護做用 grub加密生成grub口令 grub-md5-crypt 裏面有salt(鹽)輸入相同口令出來的結果不同 grub-crypt