第十二周
一炮姨、簡(jiǎn)述linux操作系統(tǒng)啟動(dòng)流程
centos7啟動(dòng)流程:
1.POST:通電自檢
2.BIOS:BOIS自檢灿椅,加載硬盤(pán)
3.讀取MBR殊者,進(jìn)行MBR引導(dǎo)
4.bootloader:grub引導(dǎo)菜單
5.加載內(nèi)核和inintamfs模塊
6.內(nèi)核開(kāi)始初始化,使用systemd來(lái)代替centos6以前的init程序
7.執(zhí)行initrd.target
包括掛載/etc/fstab文件中的系統(tǒng),此時(shí)掛載后蕊退,就可以切換到根目錄了
8.從initramfs根文件系統(tǒng)切換到磁盤(pán)根目錄centos7表面是有“運(yùn)行級(jí)別”這個(gè)概念郊楣,實(shí)際上是為了兼容以前的系統(tǒng)憔恳,每個(gè)所謂的“運(yùn)行級(jí)別”都有對(duì)應(yīng)的軟連接指向,默認(rèn)的啟動(dòng)級(jí)別時(shí)/etc/systemd/system/default.target,根據(jù)它的指向可以找到系統(tǒng)要進(jìn)入哪個(gè)模式
模式:
??????? 0 ==> runlevel0.target, poweroff.target
??????? 1 ==> runlevel1.target, rescue.target
?????? ?2 ==> runlevel2.target, multi-user.target
??????? 3 ==> runlevel3.target, multi-user.target
??????? 4 ==> runlevel4.target, multi-user.target
????? ?5 ==> runlevel5.target, graphical.target
?????? 6 ==> runlevel6.target, reboot.target
9.systemd執(zhí)行sysinit.target
10.systemd啟動(dòng)multi-user.target下的本機(jī)與服務(wù)器服務(wù)
11.systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
12.Systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù) getty.target是啟動(dòng)終端的systemd對(duì)象净蚤。如果到此步驟钥组,系統(tǒng)沒(méi)有被指定啟動(dòng)圖形桌面,到此就可以結(jié)束了今瀑,如果要啟動(dòng)圖形界面程梦,需要在此基礎(chǔ)上啟動(dòng)桌面程序
13.systemd執(zhí)行g(shù)raphical需要的服務(wù)
二、制作一個(gè)只運(yùn)行shell的linux系統(tǒng)
1.分區(qū)并創(chuàng)建文件系統(tǒng)
#分兩個(gè)必要的分區(qū),/dev/sdb1對(duì)應(yīng)/boot /dev/sdb2對(duì)應(yīng)根 /
[root@wupr~]$echo -e 'n\np\n1\n\n+1G\nw\n' | fdisk /dev/sdb
?[root@wupr~]$echo -e 'n\np\n2\n\n\n\nw\n' | fdisk /dev/sdb
[root@wupr~]$mkfs.ext4 /dev/sdb1
[root@wupr~]$mkfs.ext4 /dev/sdb2
2.掛載boot
#子目錄必須為boot
[root@wupr~]$mkdir /mnt/boot
?[root@wupr~]$mount /dev/sdb1 /mnt/boot
3.安裝grub
[root@wupr~]$grub-install --root-directory=/mnt/ /dev/sdb
4.準(zhǔn)備內(nèi)核和initramfs文件
[root@wupr~]$cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /mnt/boot/vmlinuz
[root@wupr~]$cp /boot/initramfs-2.6.32-754.el6.x86_64.img /mnt/boot/initramfs.img
5.創(chuàng)建grub.conf
[root@wupr~]$ cat /mnt/boot/grub/grub.conf
?default=0
?timeout=6
title tiger linux
root (hd0,0)
?kernel /vmlinuz root=/dev/sda2 selinux=0
?init=/bin/bash initrd /initramfs.img
?6.準(zhǔn)備根下面相關(guān)程序和庫(kù)
#準(zhǔn)備根目錄下目錄
[root@wupr~]$mkdir /mnt/sysroot
[root@wupr~]$mount /dev/sdb2 /mnt/sysroot
[root@wupr~]$mkdir –pv /mnt/sysroot{boot,dev,sys,proc,etc,lib,lib64,bin,sbin,tmp,var,usr,opt,home,root,mnt,media
#復(fù)制相關(guān)程序及相關(guān)庫(kù)文件
?[root@wupr~]$ which bash
?/bin/bash
[root@wupr~]$ cp -a /bin/bash /mnt/sysroot/bin/
[root@wupr~]$ ldd /bin/bash |sed -nr 's#.*(\/.*/.*) .*#\1#p'
?/lib64/libtinfo.so.5
?/lib64/libdl.so.2
?/lib64/libc.so.6
?/lib64/ld-linux-x86-64.so.2
[root@wupr~]$ cp -ar `ldd /bin/bash |sed -nr 's#.*(\/.*/.*) .*#\1#p'` /mnt/sysroot/lib64/
#準(zhǔn)備網(wǎng)卡驅(qū)動(dòng)
[root@wupr~]$ethtool -i eth0
[root@wupr~]$modinfo -n e1000
?/lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
[root@wupr~]$cp /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/
[root@wupr~]$chroot /mnt/sysroot
三橘荠、總結(jié)systemctl管理命令及system unit文件格式
ystemctl命令:
?管理系統(tǒng)服務(wù)service unit
?格式: systemctl COMMAND name.service
?常用COMMAND:
start:啟動(dòng)服務(wù)
?restart:重啟
stop:停止
status:查看狀態(tài)
enable:設(shè)置開(kāi)啟啟動(dòng)
disable:開(kāi)機(jī)不啟動(dòng)
mask:禁止自動(dòng)和手動(dòng)啟動(dòng)服務(wù)屿附,將服務(wù)mask后start命令就不起作用
?unmask:取消mask
?is-active:查看服務(wù)是否激活狀態(tài)
?is-enabled:查看服務(wù)是否開(kāi)機(jī)啟動(dòng)
?list-units:查看所有了units
?list-dependencies:查看服務(wù)依賴(lài)關(guān)系
?system unit文件格式
?service unit file文件通常由三部分組成:
??[Unit]:定義與Unit類(lèi)型無(wú)關(guān)的通用選項(xiàng);用于提供unit的描述信息哥童、unit行為及依賴(lài)關(guān)系等
??[Service]:與特定類(lèi)型相關(guān)的專(zhuān)用選項(xiàng)挺份;此處為Service類(lèi)型
??[Install]:定義由“systemctl enable”以及"systemctl disable“命令在實(shí)現(xiàn)服務(wù)啟用或禁用時(shí)用到的一些選項(xiàng)
?Unit段的常用選項(xiàng):
??Description:描述信息
??After:定義unit的啟動(dòng)次序,表示當(dāng)前unit應(yīng)該晚于哪些unit啟動(dòng)如蚜,其功能與Before相反
??Requires:依賴(lài)到的其它units压恒,強(qiáng)依賴(lài),被依賴(lài)的units無(wú)法激活時(shí)错邦,當(dāng)前unit也無(wú)法激活
?Wants:依賴(lài)到的其它units探赫,弱依賴(lài)
?Conflicts:定義units間的沖突關(guān)系
?Service段的常用選項(xiàng):
??Type:定義影響ExecStart及相關(guān)參數(shù)的功能的unit進(jìn)程啟動(dòng)類(lèi)型
?1.simple:默認(rèn)值,這個(gè)daemon主要由ExecStart接的指令串來(lái)啟動(dòng)撬呢,啟動(dòng)后常駐于內(nèi)存中???? 2.forking:由ExecStart啟動(dòng)的程序透過(guò)spawns延伸出其他子程序來(lái)作為此daemon的主要服務(wù)伦吠。原生父程序在啟動(dòng)結(jié)束后就會(huì)終止
?3.oneshot:與simple類(lèi)似,不過(guò)這個(gè)程序在工作完畢后就結(jié)束了魂拦,不會(huì)常駐在內(nèi)存中
?4.dbus:與simple類(lèi)似毛仪,但這個(gè)daemon必須要在取得一個(gè)D-Bus的名稱(chēng)后,才會(huì)繼續(xù)運(yùn)作.因此通常也要同時(shí)設(shè)定BusNname= 才行
?5.notify:在啟動(dòng)完成后會(huì)發(fā)送一個(gè)通知消息芯勘。還需要配合 NotifyAccess 來(lái)讓 Systemd 接收消息 6.idle:與simple類(lèi)似箱靴,要執(zhí)行這個(gè)daemon必須要所有的工作都順利執(zhí)行完畢后才會(huì)執(zhí)行。這類(lèi)的daemon通常是開(kāi)機(jī)到最后才執(zhí)行即可的服務(wù)
??EnvironmentFile:環(huán)境配置文件
??ExecStart:指明啟動(dòng)unit要運(yùn)行命令或腳本的絕對(duì)路徑
??ExecStartPre: ExecStart前運(yùn)行
??ExecStartPost: ExecStart后運(yùn)行
??ExecStop:指明停止unit要運(yùn)行的命令或腳本
??Restart:當(dāng)設(shè)定Restart=1 時(shí)荷愕,則當(dāng)次daemon服務(wù)意外終止后衡怀,會(huì)再次自動(dòng)啟動(dòng)此服務(wù)
?PrivateTmp:設(shè)定為yes時(shí),會(huì)在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目錄 Install段的常用選項(xiàng):
??Alias:別名安疗,可使用systemctl command Alias.service
??RequiredBy:被哪些units所依賴(lài)抛杨,強(qiáng)依賴(lài)
??WantedBy:被哪些units所依賴(lài),弱依賴(lài)
??Also:安裝本服務(wù)的時(shí)候還要安裝別的相關(guān)服務(wù)
注意:對(duì)于新創(chuàng)建的unit文件荐类,或者修改了的unit文件怖现,要通知systemd重載此配置文件,而后可以選擇重啟:systemctl daemon-reload
四、破解centos7 密碼
1.啟動(dòng)時(shí)任意鍵暫停啟動(dòng)
2.按e鍵進(jìn)入編輯模式
3.將光標(biāo)移動(dòng)linux 開(kāi)始的行玉罐,改為rw init=/sysroot/bin/sh
4.按ctrl-x啟動(dòng)
5.切根屈嗤,并修改root密碼潘拨,
chroot /sysroot
passwd root
#如果SELinux是啟用的,才需要執(zhí)行下面操作,如查沒(méi)有啟動(dòng),不需要執(zhí)行
?touch /.autorelabel
?exit
?reboot