亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Linux基礎(chǔ)教程之Linux系統(tǒng)高階知識(shí)詳探

Linux系統(tǒng)啟動(dòng)流程、內(nèi)核及模塊管理

Linux系統(tǒng)的組成部分組成:內(nèi)核+根文件系統(tǒng)(kernel+rootfs)
內(nèi)核(kernel): 進(jìn)程管理(創(chuàng)建、調(diào)度、銷(xiāo)毀等)、內(nèi)存管理、網(wǎng)絡(luò)管理(網(wǎng)絡(luò)協(xié)議棧)、驅(qū)動(dòng)程序、文件系統(tǒng)、安全功能
IPC:Inter Process Communication機(jī)制
本地進(jìn)程間通信機(jī)制:消息隊(duì)列、semerphor、shm(共享內(nèi)存)
跨主機(jī)進(jìn)程間通信機(jī)制:socket等
運(yùn)行中的系統(tǒng)環(huán)境可分為兩層:內(nèi)核空間、用戶(hù)空間
內(nèi)核空間(模式):內(nèi)核代碼(特權(quán)級(jí)操作–>系統(tǒng)調(diào)用)
用戶(hù)空間(模式):應(yīng)用程序(進(jìn)程或線程)

rootfs:程序和glibc
庫(kù):函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述)
過(guò)程調(diào)用: procedure,無(wú)返回值
函數(shù)調(diào)用: function
程序:二進(jìn)制執(zhí)行文件

內(nèi)核設(shè)計(jì)流派:
單內(nèi)核(monolithic kernel):把所有功能集成于同一個(gè)程序
例如:Linux
微內(nèi)核(micro kernel):每種功能使用一個(gè)單獨(dú)子系統(tǒng)實(shí)現(xiàn)
例如:Windows, Solaris

Linux內(nèi)核特點(diǎn):
1、支持模塊化: .ko(kernel object 內(nèi)核對(duì)象)如:文件系統(tǒng),硬件驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議等
2、支持內(nèi)核模塊的動(dòng)態(tài)裝載和卸載

內(nèi)核組成部分:
核心文件: /boot/vmlinuz-VERSION-release(本地版本號(hào))
ramdisk(基于內(nèi)存的磁盤(pán)設(shè)備(將內(nèi)存當(dāng)磁盤(pán)用)):輔助的偽根系統(tǒng)
CentOS 5: /boot/initrd-VERSION-release.img
基于ramdisk磁盤(pán)
CentOS6,7: /boot/initramfs-VERSION-release.img
基于ramddisk文件系統(tǒng)
img:磁盤(pán)鏡像文件
模塊文件:/lib/modules/VERSION-release
例如:/lib/modules/3.10.0-327.el7.x86_64/

centos6啟動(dòng)流程
1.加載BIOS的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備。
2.讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
3.加載核心操作系統(tǒng)的核心信息,核心開(kāi)始解壓縮,并嘗試驅(qū)
動(dòng)所有的硬件設(shè)備。
4.核型執(zhí)行init程序并獲取運(yùn)行信息。
5.Init執(zhí)行/etc/rc.d/rc.sysinit文件。
6.啟動(dòng)核心的外掛模塊(/etc/modprobe.conf)。
7.Init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts).
8.Init執(zhí)行/etc/rc.d/rc.local.
9.執(zhí)行/bin/login程序,等待用戶(hù)登錄。
10.登錄之后開(kāi)始以Shell控制主機(jī)。

CentOS系統(tǒng)啟動(dòng)流程:
POST: Power-On-Self-Test,加電自檢,是BIOS功能的一個(gè)主要部分。負(fù)責(zé)完成對(duì)CPU、主板、內(nèi)存、硬盤(pán)子系統(tǒng)、顯示子系統(tǒng)、 串并行接口、鍵盤(pán)、 CD-ROM光驅(qū)等硬件情況的檢測(cè)。
ROM: BIOS, Basic Input and Output System,保存著有關(guān)計(jì)算機(jī)系統(tǒng)最重要的基本輸入輸出程序,系統(tǒng)信息設(shè)置、 開(kāi)機(jī)加電自檢程序和系統(tǒng)啟動(dòng)自舉程序等。
RAM: CMOS互補(bǔ)金屬氧化物半導(dǎo)體,保存各項(xiàng)參數(shù)的設(shè)定
Boot Sequence:按次序查找引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動(dòng)設(shè)備
bootloader: 引導(dǎo)加載器,引導(dǎo)程序
windows: ntloader,僅是啟動(dòng)OS
Linux:功能豐富,提供菜單,允許用戶(hù)選擇要啟動(dòng)系統(tǒng)或不同的內(nèi)核版本;把用戶(hù)選定的內(nèi)核裝載到內(nèi)存中的特定空間中,解壓、展開(kāi),并把系統(tǒng)控制權(quán)移交給內(nèi)核
LILO: LInux LOader
GRUB: GRand Unified Bootloader
GRUB 0.X: GRUB Legacy
GRUB 1.X:GRUB2

功能:提供一個(gè)菜單,允許用戶(hù)選擇要啟動(dòng)的系統(tǒng)或不同的內(nèi)核版本;把用戶(hù)選定的內(nèi)核裝載到RAM中的特定空間中,解壓、展開(kāi),而后把系統(tǒng)控制權(quán)移交給內(nèi)核;

MBR:Master Boot Record (512bytes)
446bytes: bootloader(引導(dǎo)加載程序)
64bytes:fat 分區(qū)表(文件系統(tǒng)分配表)
2bytes: 55AA(魔數(shù))非55AA為無(wú)效
GRUB:
primary boot loader : 1st stage, 1.5 stage
secondary boot loader : 2nd stage,分區(qū)文件

kernel:自身初始化
1、探測(cè)可識(shí)別到的所有硬件設(shè)備
2、加載硬件驅(qū)動(dòng)程序(可能借助于ramdisk加載驅(qū)動(dòng))
3、以只讀方式掛載根文件系統(tǒng)
4、運(yùn)行用戶(hù)空間的第一個(gè)應(yīng)用程序:/sbin/init

init程序的類(lèi)型:
CentOS 5之前:SysV init,
配置文件: /etc/inittab
CentOS 6:Upstart init
配置文件: /etc/inittab(基本沒(méi)用了),
/etc/init/*.conf–>決定系統(tǒng)運(yùn)行級(jí)別
CentOS 7:Systemd systemd
配置文件: /usr/lib/systemd/system/
/etc/systemd/system/

ramdisk:
Linux內(nèi)核中的特性之一:使用緩沖和緩存來(lái)加速對(duì)磁盤(pán)上的文件訪問(wèn)
ramdisk –> ramfs 提高速度
CentOS 5: initrd, 工具程序: mkinitrd
CentOS 6: initramfs, 工具程序: mkinitrd, dracut
系統(tǒng)初始化流程(內(nèi)核級(jí)別):
POST –> BootSequence (BIOS) –>Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只讀) –> init(systemd)

/sbin/init CentOS6之前
運(yùn)行級(jí)別:為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定; 0-6: 7個(gè)級(jí)別
0:關(guān)機(jī)(shutdown)
1:?jiǎn)斡脩?hù)模式(無(wú)須認(rèn)證,root自動(dòng)登錄),(single user), 維護(hù)模式
2: 多用戶(hù)模式(multi user),啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS(網(wǎng)絡(luò)文件系統(tǒng));維護(hù)模式
3:多用戶(hù)模式(multi user),正常完全功能模式;文本界面
4:預(yù)留級(jí)別;目前無(wú)特別使用目的,但可同3級(jí)別
5:多用戶(hù)模式(multi user),正常完全功能模式;圖形界面
6:重啟
默認(rèn)級(jí)別: 3, 5
切換級(jí)別: init #
查看級(jí)別: runlevel ; who -r



runlevel
第一位:前一個(gè)級(jí)別
第二位:后一個(gè)級(jí)別

init初始化

init讀取其初始化文件/etc/inittab決定init程序系統(tǒng)初始化過(guò)程中做什么?
初始運(yùn)行級(jí)別(RUN LEVEL)
系統(tǒng)初始化腳本
對(duì)應(yīng)運(yùn)行級(jí)別的腳本目錄
捕獲某個(gè)關(guān)鍵字順序
定義UPS電源終端/恢復(fù)腳本
在虛擬控制臺(tái)生成getty
在運(yùn)行級(jí)別5初始化X

CentOS 5的inittab文件
配置文件: /etc/inittab
每一行定義一種action以及與之對(duì)應(yīng)的process

[root@station1?~]#?vim?/etc/inittab?
#
#?inittab???This?file?describes?how?the?INIT?process?should?set?up
#???the?system?in?a?certain?run-level.
#
#?Author:???Miquel?van?Smoorenburg,?<miquels@drinkel.nl.mugnet.org>
#???Modified?for?RHS?Linux?by?Marc?Ewing?and?Donnie?Barnes
#

#?Default?runlevel.?The?runlevels?used?by?RHS?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:

#?System?initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc?0
l1:1:wait:/etc/rc.d/rc?1
l2:2:wait:/etc/rc.d/rc?2
l3:3:wait:/etc/rc.d/rc?3
l4:4:wait:/etc/rc.d/rc?4
l5:5:wait:/etc/rc.d/rc?5
l6:6:wait:/etc/rc.d/rc?6

#?Trap?CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown?-t3?-r?now

#?When?our?UPS?tells?us?power?has?failed,?assume?we?have?a?few?minutes
#?of?power?left.??Schedule?a?shutdown?for?2?minutes?from?now.
#?This?does,?of?course,?assume?you?have?powerd?installed?and?your
#?UPS?connected?and?working?correctly.??
pf::powerfail:/sbin/shutdown?-f?-h?+2?"Power?Failure;?System?Shutting?Down"

#?If?power?was?restored?before?the?shutdown?kicked?in,?cancel?it.
pr:12345:powerokwait:/sbin/shutdown?-c?"Power?Restored;?Shutdown?Cancelled"


#?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

#?Run?xdm?in?runlevel?5
x:5:respawn:/etc/X11/prefdm?-nodaemon

格式:
id:runlevel :action :process
字段含義:
id:一個(gè)任務(wù)的標(biāo)識(shí)符
runlevel:在那些級(jí)別啟動(dòng)此任務(wù);#,###,也可以為空,表示所有級(jí)別;
action:在什么條件下啟動(dòng)此任務(wù);
process:任務(wù);
action類(lèi)型:
wait: 等待切換至此任務(wù)所在的級(jí)別時(shí)運(yùn)行一次
respawn:此process終止時(shí),就自動(dòng)重新啟動(dòng)之
initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別;此時(shí)process省略(0,6不可以)
sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;

例如:
設(shè)置系統(tǒng)默認(rèn)運(yùn)行級(jí)別
id:3 : initdefault:
設(shè)置系統(tǒng)初始化
si:: sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l6:6:wait:/etc/rc.d/rc 6
/etc/rc.d/rc腳本:接受一個(gè)運(yùn)行級(jí)別數(shù)字為參數(shù)
說(shuō)明: rc N –> 意味著讀取/etc/rc.d/rcN.d/
K:要停止的服務(wù);
K##
:##運(yùn)行次序優(yōu)先級(jí);數(shù)字越小,越先關(guān)閉對(duì)應(yīng)服務(wù),關(guān)閉服務(wù)通常為依賴(lài)到別的服務(wù)的服務(wù)先關(guān)閉,后關(guān)閉被依賴(lài)的服務(wù)

S:要啟動(dòng)的服務(wù);
S##
: ##運(yùn)行次優(yōu)先級(jí)序;數(shù)字越小,越先運(yùn)行對(duì)應(yīng)服務(wù),運(yùn)行服務(wù)通常為被依賴(lài)到的服務(wù)先運(yùn)行,依賴(lài)到別的服務(wù)的服務(wù)后運(yùn)行

腳本框架:
for srv in /etc/rc.d/rcN.d/K; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S
; do

$srv start
done

示例:手動(dòng)編寫(xiě)服務(wù)腳本框架

[root@CentOS6?~]#?vim?/etc/init.d/testsrv
#/bin/bash
#testsrv??service?testing?script
#
#chkconfig:?2345?50?60
#description:testing?service
#
prog=$(basename?$0)
if?[?$#?-lt?1?];then
echo?"Usage:$prog?{start|stop|status|restart}"
exit?1
fi
if?[?"$1"?==?"start"?];then
??echo?"start?$prog?finished."
elif?[?"$1"?==?"stop"?];then
??echo?"Stop?$prog?finished."
elif?[?"$1"?==?"restart"?];then
??echo?"Restart?$prog?finished."
elif?[?"$1"?==?"status"?];then
??if?pidof?$prog?&>?/dev/null;then
?echo?"$prog?is?running."
??else
?echo?"$prog?is?stopped."
??fi
else
?echo?"Usage:$prog?{start|stop|status|restart}"
?exit?2
fi

其中
#chkconfig: 2345 50 60
存在此行chkconfig命令才能管理此服務(wù)腳本,并且第一組數(shù)字:2345為對(duì)應(yīng)運(yùn)行級(jí)別下運(yùn)行此腳本服務(wù);第二組數(shù)字50為開(kāi)啟運(yùn)行服務(wù)腳本的優(yōu)先級(jí);第三組數(shù)字60為關(guān)閉停止服務(wù)腳本的優(yōu)先級(jí);
#description:testing service
注釋解釋必須存在

注意:以上兩行必須存在;

chkconfig命令

chkconfig命令管控/etc/init.d/每個(gè)服務(wù)腳本在各個(gè)級(jí)別下的啟動(dòng)或關(guān)閉狀態(tài)
查看服務(wù)在所有級(jí)別的啟動(dòng)或關(guān)閉設(shè)定情形:
chkconfig [–list] [name]
示例:

[root@CentOS6?~]#?chkconfig?--list?httpd
httpd??????0:off????1:off????2:off????3:off????4:off????5:off????6:off

添加:
SysV的服務(wù)腳本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig –add name
能被添加的服務(wù)的腳本定義格式之一
#!/bin/bash
# chkconfig: LLLL NN NN
注意:LLLL 表示初始在哪個(gè)級(jí)別下啟動(dòng), -表示都不啟動(dòng) 前NN表示啟動(dòng)優(yōu)先級(jí);后NN表示關(guān)閉優(yōu)先級(jí)
#description:

刪除:
chkconfig –del name

修改指定的鏈接類(lèi)型
chkconfig [–level LEVELS] name
–level LEVELS: 指定要設(shè)置的級(jí)別;省略時(shí)表示2345

注意:正常級(jí)別下,最后啟動(dòng)的一個(gè)服務(wù)s99local沒(méi)有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local (/etc/rc.local)腳本;因此,不便或不需寫(xiě)為服務(wù)腳本的程序期望能開(kāi)機(jī)自動(dòng)運(yùn)行時(shí),直接放置于此腳本文件中即可。

xinetd管理的服務(wù)
service 命令:手動(dòng)管理服務(wù)
service 服務(wù) start|stop|restart|status

顯示所服務(wù)的狀態(tài)
service –status-all
瞬態(tài)( Transient)服務(wù)被xinetd進(jìn)程所管理
進(jìn)入的請(qǐng)求首先被xinetd代理
配置文件: /etc/xinetd.conf、 /etc/xinetd.d/
控制/etc/init.d目錄下的腳本文件
與libwrap.so文件鏈接
用chkconfig控制的服務(wù):
例如:chkconfig tftp on

1:2345:respawn:/sbin/mingetty tty1

6:2345:respawn:/sbin/mingetty tty6
這里是定義了6個(gè)虛擬終端

  1. mingetty會(huì)調(diào)用login程序;
  2. 打開(kāi)虛擬終端的程序除了mingetty之外,還有諸如getty等;

ntsysv命令

ntsysv命令提供了一個(gè)基于文本界面的菜單操作方式,集中管理系統(tǒng)不同的運(yùn)行等級(jí)下的系統(tǒng)服務(wù)啟動(dòng)狀態(tài)。在RedHat各個(gè)發(fā)行版,CentOS各個(gè)版本,都自帶這個(gè)工具。它具有互動(dòng)式操作界面,您可以輕易地利用方向鍵和空格鍵等,開(kāi)啟,關(guān)閉操作系統(tǒng)在每個(gè)執(zhí)行等級(jí)中,所要執(zhí)行的系統(tǒng)服務(wù)
語(yǔ)法:
ntsysv [–back][–level <等級(jí)代號(hào)>]
參數(shù):
–back  在互動(dòng)式界面里,顯示Back鈕,而非Cancel鈕。
–level <等級(jí)代號(hào)>  在指定的執(zhí)行等級(jí)中,決定要開(kāi)啟或關(guān)閉哪些系統(tǒng)服務(wù)。

實(shí)例
輸入ntsysv命令后,出現(xiàn)一個(gè)交互式的管理菜單,如下:

使用空格鍵選擇或者取消選項(xiàng)!

系統(tǒng)初始化腳本:/etc/rc.d/rc.sysinit
(1) 設(shè)置主機(jī)名;
(2) 設(shè)置歡迎信息;
(3) 激活udev和seLinux;
(4) 掛載/etc/fstab文件中定義的所有文件系統(tǒng);
(5) 檢測(cè)根文件系統(tǒng),并以讀寫(xiě)方式重新掛載根文件系統(tǒng);
(6) 設(shè)置系統(tǒng)時(shí)鐘;
(7) 激活swap設(shè)備
(8) 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
(9) 激活lvm及software raid設(shè)備
(10) 加載額外設(shè)備的驅(qū)動(dòng)程序
(11) 清理操作

總結(jié)(用戶(hù)空間的啟動(dòng)流程):/sbin/init(/etc/inittab)
設(shè)置默認(rèn)運(yùn)行級(jí)別–>運(yùn)行系統(tǒng)初始化腳本,完成系統(tǒng)初始化–>關(guān)閉對(duì)應(yīng)級(jí)別下需要停止的服務(wù),啟動(dòng)對(duì)應(yīng)級(jí)別下需要開(kāi)啟的服務(wù)–>設(shè)置登陸終端[–>啟動(dòng)圖形終端]

CentOS 6 /etc/inittab和相關(guān)文件
init程序?yàn)閡pstart風(fēng)格,但依然為/sbin/init
其配置文件:/etc/init/.conf,/etc/inittab(僅用于定義默認(rèn)運(yùn)行級(jí)別)
注意:
.conf為upstart風(fēng)格的配置文件;

其中/etc/inittab僅包含一下內(nèi)容
設(shè)置系統(tǒng)默認(rèn)的運(yùn)行級(jí)別
id:3:initdefault:

之后執(zhí)行以下配置文件
/etc/init/rcS.conf
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf

總結(jié):
CentOS6啟動(dòng)流程
POST–>Boot Sequence(BIOS)–>Boot Loader(MBR)–>Kernel(ramdisk)–>rootfs–>switchroot–>/sbin/init–>(/etc/inittab,/etc/init/*.conf)–>設(shè)置默認(rèn)運(yùn)行級(jí)別–>運(yùn)行系統(tǒng)初始化腳本,完成系統(tǒng)初始化–>關(guān)閉對(duì)應(yīng)級(jí)別下需要停止的服務(wù),啟動(dòng)對(duì)應(yīng)級(jí)別下需要開(kāi)啟的服務(wù)–>設(shè)置登陸終端[–>啟動(dòng)圖形終端]

CentOS7
init程序:systemd,配置文件:/usr/lib/systemd/system/,/etc/systemd/system/
注意:systemd沒(méi)有級(jí)別概念
完全兼容SysV腳本機(jī)制;因此,service命令依然可用;不過(guò),建議使用systemctl命令來(lái)控制服務(wù);
#systemctl {start|stop|restart|status} name[.service]

grub legacy

grub: GRand Unified Bootloader
grub 0.97: grub legacy
grub 2.x: grub2

stage1: mbr
stage1_5: mbr之后的扇區(qū),讓stage1中的bootloader能識(shí)別stage2所在的分區(qū)上的文件系統(tǒng)
stage2:磁盤(pán)分區(qū)(/boot/grub/)

配置文件: /boot/grub/grub.conf <– /etc/grub.conf
stage2及內(nèi)核等通常放置于一個(gè)基本磁盤(pán)分區(qū)
功用:
(1) 提供啟動(dòng)菜單、并提供交互式接口
a:內(nèi)核參數(shù)
e: 編輯模式,用于編輯菜單
c: 命令模式,交互式接口


(2)
加載用戶(hù)選擇的內(nèi)核或操作系統(tǒng)
允許傳遞參數(shù)給內(nèi)核
可隱藏啟動(dòng)菜單
(3)
為菜單提供了保護(hù)機(jī)制
為編輯啟動(dòng)菜單進(jìn)行認(rèn)證
為啟用內(nèi)核或操作系統(tǒng)進(jìn)行認(rèn)證

識(shí)別硬盤(pán)設(shè)備:
(hd#,#)
hd#: 磁盤(pán)編號(hào),用數(shù)字表示;從0開(kāi)始編號(hào)
#: 分區(qū)編號(hào),用數(shù)字表示; 從0開(kāi)始編號(hào)
(hd0,0) 第一塊硬盤(pán),第一個(gè)分區(qū)

grub的命令行接口
help: 獲取幫助列表
help KEYWORD: 詳細(xì)幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 設(shè)定本次啟動(dòng)時(shí)用到的內(nèi)核文件;額外還可添加許多內(nèi)核支持使用的cmdline參數(shù)
例如:init=/PATH/TO/init,seLinux=0
initrd /PATH/TO/INITRAMFS_FILE:設(shè)定為選定的內(nèi)核提供額外文件的ramdisk
注意:initrd的版本號(hào)必須和內(nèi)核完全匹配
boot:引導(dǎo)啟動(dòng)選定的內(nèi)核

手動(dòng)在grub命令行接口啟動(dòng)系統(tǒng):
c: 命令模式,交互式接口
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot

例如: max_loop=100 seLinux=0 init=/path/to/init
initrd /PATH/TO/INITRAMFS_FILE: 設(shè)定為選定的內(nèi)核提供額外文件的ramdisk
boot: 引導(dǎo)啟動(dòng)選定的內(nèi)核
cat /proc/cmdline 內(nèi)核參數(shù)
內(nèi)核參數(shù)文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

grub legacy配置文件
配置文件: /boot/grub/grub.conf
default=#: 設(shè)定默認(rèn)啟動(dòng)的菜單項(xiàng);落單項(xiàng)(title)編號(hào)從0開(kāi)始
timeout=#:指定菜單項(xiàng)等待選項(xiàng)選擇的時(shí)長(zhǎng)
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:菜單背景圖片文件路徑
hiddenmenu:隱藏菜單
password [–md5] STRING: 啟動(dòng)菜單編輯認(rèn)證
title TITLE:定義菜單項(xiàng)“標(biāo)題” , 可出現(xiàn)多次
root (hd#,#): grub查找stage2及kernel文件所在設(shè)備分區(qū);為grub“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:?jiǎn)?dòng)的內(nèi)核
initrd /PATH/TO/INITRAMFS_FILE: 內(nèi)核匹配的ramfs文件
password [–md5] STRING: 啟動(dòng)選定的內(nèi)核或操作系統(tǒng)時(shí)進(jìn)行認(rèn)證

grub加密
grub-md5-crypt命令
破解root口令:
啟動(dòng)系統(tǒng)時(shí),設(shè)置其運(yùn)行級(jí)別1
進(jìn)入單用戶(hù)模式:
(1) 編輯grub菜單(選定要編輯的title,而后使用e命令);
(2) 在選定的kernel后附加1, s, S或single都可以;
(3) 在kernel所在行,鍵入“ b”命令

grub安裝
安裝grub:
(1) grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤(pán)上,并復(fù)制GRUB相關(guān)文件到 ROOT/boot目錄下
grub-install –root-directory=ROOT /dev/DISK
例如:
當(dāng)/dev/sdb1掛載到/mnt/boot的情況下安裝grub
grub-install –root-directory=/mnt /dev/sdb

(2) grub(注意:hd#,#必須存在grub目錄及其文件)
grub > root (hd#,#)
grub > setup (hd#)

自制Linux系統(tǒng)
分區(qū)并創(chuàng)建文件系統(tǒng)
fdisk /dev/sdb
分兩個(gè)必要的分區(qū)
/dev/sdb1對(duì)應(yīng)/boot /dev/sdb2對(duì)應(yīng)根 /
mkfs.ext4 /dev/sdb1
掛載boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
安裝grub
grub-install –root-directory=/mnt /dev/sdb

恢復(fù)內(nèi)核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img
/mnt/boot
建立grub.conf:
vim /mnt/boot/grub.conf
title wangLinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64
root=/dev/sda2 seLinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.el6.x86_64.img
chroot /mnt/sysroot

創(chuàng)建一級(jí)目錄
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc
,opt,home,root,boot,dev,mnt,media}
復(fù)制bash和相關(guān)庫(kù)文件
復(fù)制相關(guān)命令及相關(guān)庫(kù)文件
如: ls,cat, vim,reboot,hostname等

救援環(huán)境
在根文件系統(tǒng)無(wú)法使用時(shí)需要,如/bin/mount刪除
對(duì)系統(tǒng)沒(méi)有特殊要求
從光盤(pán)引導(dǎo)( boot.iso或者安裝光盤(pán)#1)
從USB盤(pán)(由boot.iso制作)引導(dǎo)
文件系統(tǒng)重組
Anaconda將會(huì)詢(xún)問(wèn)是否應(yīng)該掛載文件系統(tǒng)
/mnt/sysimage/*
/mnt/stage2
$PATH包括硬盤(pán)的目錄
文件系統(tǒng)節(jié)點(diǎn)
提供系統(tǒng)特定的設(shè)備文件
mknod了解major/minor #’s

系統(tǒng)配置文件丟失修復(fù)
系統(tǒng)在引導(dǎo)期間,很重要的一個(gè)過(guò)程就是init進(jìn)程讀取其配
置文件/etc/inittab,啟動(dòng)系統(tǒng)基本服務(wù)程序及默認(rèn)運(yùn)行
級(jí)別的服務(wù)程序完成系統(tǒng)引導(dǎo),如果/etc/inittab誤刪除
或修改錯(cuò)誤, Linux將無(wú)法正常啟動(dòng)。此時(shí),只有通過(guò)救援
模式才可以解決此類(lèi)問(wèn)題。
? 有備份文件的回復(fù)方法
? 沒(méi)有備份文件的恢復(fù)辦法

有備份文件的恢復(fù)辦法:
進(jìn)入救援模式,執(zhí)行chroot命令后,如果有此文件的備份(
強(qiáng)烈建議系統(tǒng)中的重要數(shù)據(jù)目錄,如/etc、 /boot等要進(jìn)行
備份),直接將備份文件拷貝回去,退出重啟即可。如果是
配置文件修改錯(cuò)誤,如比較典型的/boot/grub/grub.conf
及/etc/passwd的文件修改錯(cuò)誤,也可以直接修正恢復(fù)。假
設(shè)有備份文件/etc/inittab.bak,則在救援模式下執(zhí)行:
sh-3.1# chroot /mnt/sysimage
sh-3.1# cp /etc/inittab.bak /etc/inittab

沒(méi)有備份文件的恢復(fù)辦法
如果一些配置文件丟失或軟件誤刪除,且無(wú)備份,可以通過(guò)重新
安裝軟件包來(lái)恢復(fù),首先查找到/etc/inittab屬于哪一個(gè)RPM包
# chroot /mnt/sysimage
# rpm -qf /etc/inittab
initscripts-9.03.49-1.el6.centos.x86_64
退出chroot模式:
# exit
掛載存放RPM包的安裝光盤(pán)(在救援模式下,光盤(pán)通常掛載在
/mnt/source目錄下):
# mount /dev/sr0 /mnt/source
CentOS6系統(tǒng)的RPM包存放在光盤(pán)Package目錄下,要修復(fù)的
硬盤(pán)系統(tǒng)的根目錄在/mnt/sysimage下,需要使用–root選項(xiàng)
指定其位置。覆蓋安裝/etc/inittab文件所在的RPM包:
# rpm -ivh –replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm
其中的rpm命令選項(xiàng)“ –replacepkgs”表示覆蓋安裝,執(zhí)行完成
后,即已經(jīng)恢復(fù)了此文件
如果想只提取RPM包中的/etc/inittab文件進(jìn)行恢復(fù),可以在進(jìn)
入救援模式后,執(zhí)行命令:
# rpm2cpio /mnt/source/Packages/initscripts-9.03.49-
1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab
# cp etc/inittab /mnt/sysimage/etc
注意此命令執(zhí)行時(shí)不能將文件直接恢復(fù)至/etc目錄,只能提取到
當(dāng)前目錄下,且恢復(fù)的文件名稱(chēng)所在路徑要寫(xiě)完整的路徑。提取
文件成功后,將其復(fù)制到根分區(qū)所在的/mnt/sysimage目錄下相
應(yīng)位置即可

內(nèi)核編譯

單內(nèi)核體系設(shè)計(jì)、但充分借鑒了微內(nèi)核設(shè)計(jì)體系的優(yōu)點(diǎn),為內(nèi)核引入模塊化機(jī)制。
內(nèi)核組成部分:
1)、kernel: 內(nèi)核核心,一般為bzImage,通常在/boot目錄下,名稱(chēng)為vmlinuz-VERSION-RELEASE;
2)、kernel object: 內(nèi)核對(duì)象,即內(nèi)核模塊,一般放置于/lib/modules/VERSION-RELEASE/
注意:內(nèi)核模塊與內(nèi)核核心版本一定要嚴(yán)格匹配;
編譯內(nèi)核模塊時(shí)按一下方式定義

注意:有些功能要不編譯進(jìn)內(nèi)核,要不不編譯
3)、輔助性文件,并非必須,這取決于內(nèi)核是否能直接驅(qū)動(dòng)roofs所在的設(shè)備;
ramdisk:是一個(gè)簡(jiǎn)裝版的根文件系統(tǒng)系統(tǒng);
initrd
initramfs
目標(biāo)設(shè)備驅(qū)動(dòng),例如SCSI設(shè)備的驅(qū)動(dòng);
邏輯設(shè)備驅(qū)動(dòng),例如LVM設(shè)備的驅(qū)動(dòng);
文件系統(tǒng),例如xfs文件系統(tǒng)

內(nèi)核版本
運(yùn)行中的內(nèi)核:
uname命令:
uname – print system information
uname [OPTION]…
-n: 顯示主機(jī)名稱(chēng);
-r: 顯示VERSION-RELEASE;
-a: 顯示所有信息
-v:顯示編譯版本

[root@station1?~]#?uname?-n
station1.example.com
[root@station1?~]#?hostname
station1.example.com
[root@station1?~]#?uname?-r
2.6.18-164.el5
[root@station1?~]#?uname?-v
#1?SMP?Tue?Aug?18?15:51:54?EDT?2009
[root@station1?~]#?uname?-a
Linux?station1.example.com?2.6.18-164.el5?#1?SMP?Tue?Aug?18?15:51:54?EDT?2009?i686?i686?i386?GNU/Linux

內(nèi)核模塊命令
lsmod命令:
顯示由核心已經(jīng)裝載的內(nèi)核模塊
顯示的內(nèi)容來(lái)自于: /proc/modules文件
modinfo命令:
顯示模塊的詳細(xì)描述信息
modinfo [ -k kernel ] [ modulename|filename… ]
-n: 只顯示模塊文件路徑
-p: 顯示模塊參數(shù)
-a: author
-d: description
-l: license
-k: 顯示指定的內(nèi)核版本模塊
-F: 只顯示指定字段(filename、depengds)的信息

[root@station1?~]#?modinfo?ext4
filename:???/lib/modules/2.6.18-164.el5/kernel/fs/ext4/ext4.ko
license:GPL
description:Fourth?Extended?Filesystem
author:?Remy?Card,?Stephen?Tweedie,?Andrew?Morton,?Andreas?Dilger,?Theodore?Ts'o?and?others
alias:??ext4dev
srcversion:?5F3DBC78955B31FC1E07EB1
depends:jbd2,crc16
vermagic:???2.6.18-164.el5?SMP?mod_unload?686?REGPARM?4KSTACKS?gcc-4.1
module_sig:????883f3504a8b7a0d18758d6145e112de9009c98197d6c75e9511e0f4cdd64f9c1cefe6d41e6209f5e596869bc565ba9a6edbb27a294e906936c4a
[root@station1?~]#?modinfo?-F?alias?ext4
ext4dev
[root@station1?~]#?modinfo?-n?ext4
/lib/modules/2.6.18-164.el5/kernel/fs/ext4/ext4.ko

lsmod |grep xfs ; modinfo xfs

內(nèi)核模塊管理
modprobe命令:
語(yǔ)法:
modprobe [ -C config-file ] [ modulename ] [ module
parame-ters… ]
配置文件: /etc/modprobe.conf,/etc/modprobe.d/*.conf
內(nèi)核模塊動(dòng)態(tài)裝載或卸載
modprobe [ -r ] modulename…
注意:對(duì)正在使用的模塊不要輕易卸載
此命令自動(dòng)解決依賴(lài)關(guān)系

depmod命令:
內(nèi)核模塊依賴(lài)關(guān)系文件及系統(tǒng)信息映射文件的生成工具
裝載或卸載內(nèi)核模塊:

insmod命令
指定模塊文件(絕對(duì)路徑),不自動(dòng)解決依賴(lài)模塊
insmod [ filename ] [ module options… ]
insmod?

1
modinfo –n exportfs

lnsmod?

1
modinfo –n xfs

rmmod命令
rmmod [ modulename ]
rmmod xfs
rmmod exportfs

ramdisk管理
ramdisk文件的制作:
(1) mkinitrd命令
為當(dāng)前正在使用的內(nèi)核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
–with=:除了默認(rèn)的模塊之外需啊喲裝載至initramfs
–preload=:initramfs所提供的模塊需要預(yù)先裝載的模塊;
(2) dracut命令
為當(dāng)前正在使用的內(nèi)核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)

內(nèi)核信息輸出的偽文件系統(tǒng):/proc、/sys
/proc目錄
內(nèi)核把自己內(nèi)部狀態(tài)信息及統(tǒng)計(jì)信息,以及可配置參數(shù)通過(guò)proc偽文件系統(tǒng)加以輸出;同時(shí),還提供一個(gè)配置接口,proc/sys;
參數(shù):
只讀:輸出信息;例如/proc/#/
可寫(xiě):可接受用戶(hù)指定“新值”來(lái)實(shí)現(xiàn)對(duì)內(nèi)核某功能或特性的配置:/proc/sys/(僅管理員有寫(xiě)權(quán)限)
查看:
cat /proc/sys/PATH/TO/SOME_KERNEL_FLIE
修改設(shè)定/proc/sys目錄下的
(1) sysctl命令用于查看或設(shè)定此目錄中諸多參數(shù)
*sysctl -w PATH.TO.SOME_KERNEL_FLIE=VALUE

例如:
sysctl -w kernel.hostname=mail.magedu.com
示例:

[root@localhost?~]#?sysctl?net.ipv4.ip_forward
net.ipv4.ip_forward?=?0
[root@localhost?~]#?sysctl?-w?net.ipv4.ip_forward=1
net.ipv4.ip_forward?=?1
[root@localhost?~]#?sysctl?net.ipv4.ip_forward
net.ipv4.ip_forward?=?1

(2) echo命令通過(guò)重定向方式也可以修改大多數(shù)參數(shù)的值
echo “VALUE” > /proc/sys/PATH/TO/SOME_KERNEL_FLIE
例如:
echo “websrv” > /proc/sys/kernel/hostname

注意:上述兩種方式的設(shè)定僅當(dāng)前運(yùn)行內(nèi)核有效;
配置文件:/etc/sysctl.conf,/etc/sysctl.d/*.conf
并使用
sysctl -p [/path/to/conf_file]
重新加載內(nèi)核參數(shù)設(shè)置即可永久有效

sysctl命令
sysctl命令被用于在內(nèi)核運(yùn)行時(shí)動(dòng)態(tài)地修改內(nèi)核的運(yùn)行參數(shù),可用的內(nèi)核參數(shù)在目錄/proc/sys中。它包含一些TCP/ip堆棧和虛擬內(nèi)存系統(tǒng)的高級(jí)選項(xiàng), 這可以讓有經(jīng)驗(yàn)的管理員提高引人注目的系統(tǒng)性能。用sysctl可以讀取設(shè)置超過(guò)五百個(gè)系統(tǒng)變量。
語(yǔ)法
sysctl [options] [variable[=value]] […]
sysctl -p [file or regexp] […]
選項(xiàng)
-n:打印值時(shí)不打印關(guān)鍵字;
-e:忽略未知關(guān)鍵字錯(cuò)誤;
-N:僅打印名稱(chēng);
-w:當(dāng)改變sysctl設(shè)置時(shí)使用此項(xiàng);
-p:從配置文件“/etc/sysctl.conf”加載內(nèi)核參數(shù)設(shè)置;
-a:打印當(dāng)前所有可用的內(nèi)核參數(shù)變量和值;
-A:以表格方式打印當(dāng)前所有可用的內(nèi)核參數(shù)變量和值。
參數(shù)
變量=值:設(shè)置內(nèi)核參數(shù)對(duì)應(yīng)的變量值
注意:可以使用sysctl修改系統(tǒng)變量,也可以通過(guò)編輯sysctl.conf文件來(lái)修改系統(tǒng)變量。sysctl.conf看起來(lái)很像rc.conf。它用variable=value的形式來(lái)設(shè)定值。指定的值在系統(tǒng)進(jìn)入多用戶(hù)模式之后被設(shè)定。并不是所有的變量都可以在這個(gè)模式下設(shè)定。 sysctl變量的設(shè)置通常是字符串、數(shù)字或者布爾型。(布爾型用 1 來(lái)表示’yes’,用 0 來(lái)表示’no’)。
默認(rèn)配置文件: /etc/sysctl.conf
(1) 設(shè)置某參數(shù)
sysctl -w parameter=VALUE
(2) 通過(guò)讀取配置文件設(shè)置參數(shù)
sysctl -p [/path/to/conf_file]
內(nèi)核中的路由轉(zhuǎn)發(fā):
/proc/sys/net/ipv4/ip_forward
常用的幾個(gè)參數(shù):
net.ipv4.ip_forward:核心轉(zhuǎn)發(fā)功能
net.ipv4.icmp_echo_ignore_all:忽略所有ping本機(jī)操作
vm.drop_caches:手動(dòng)回收內(nèi)存功能(值為:0、1、2)
kernel.hostname:當(dāng)前生效的主機(jī)名
示例:

[root@localhost?~]#?sysctl?-a
abi.vsyscall32?=?1
crypto.fips_enabled?=?0
debug.exception-trace?=?1
debug.kprobes-optimization?=?1
dev.cdrom.autoclose?=?1
dev.cdrom.autoeject?=?0
dev.cdrom.check_media?=?0
dev.cdrom.debug?=?0
...
[root@localhost?~]#?sysctl?net.ipv4.ip_forward
net.ipv4.ip_forward?=?1
[root@localhost?~]#?cat?/proc/sys/net/ipv4/ip_forward
1

注意:sysctl命令處理的是/proc/sys目錄下配置文件值,因此/proc/sys目錄下的 net/ipv4/ip_forward相當(dāng)于net.ipv4.ip_forward

/sys目錄
sysfs:為用戶(hù)使用的偽文件系統(tǒng),輸出內(nèi)核識(shí)別出的各硬件設(shè)備的相關(guān)屬性信息,也有內(nèi)核對(duì)硬件特性的設(shè)定信息;有些參數(shù)是可以修改的,用于調(diào)整硬件工作特性。
udev通過(guò)讀取/sys此路徑下的硬件設(shè)備信息(輸出的信息動(dòng)態(tài))為各硬件設(shè)備創(chuàng)建文件
udev是運(yùn)行在用戶(hù)空間的程序
專(zhuān)用工具: udevadmin, hotplug
udev為設(shè)備創(chuàng)建設(shè)備文件時(shí),會(huì)讀取其事先定義好的規(guī)則文件,一般在/etc/udev/rules.d/及/usr/lib/udev/rules.d/目錄下

編譯內(nèi)核

程序包的編譯安裝:
./configure:檢查編譯環(huán)境的依賴(lài)關(guān)系,并設(shè)定編譯參數(shù)
make:執(zhí)行編譯過(guò)程(調(diào)用工具不是編譯工具)
make install:安裝

編譯內(nèi)核前提:
(1) 準(zhǔn)備好開(kāi)發(fā)環(huán)境(開(kāi)發(fā)工具編譯器、開(kāi)發(fā)編譯庫(kù))頭文件:/usr/include
(2) 獲取目標(biāo)主機(jī)上硬件設(shè)備的相關(guān)信息
(3) 獲取目標(biāo)主機(jī)系統(tǒng)功能的相關(guān)信息,例如要啟用的文件系統(tǒng)
例如:需要啟用相應(yīng)的文件系統(tǒng)
(4) 獲取內(nèi)核源代碼包:www.kernel.org

開(kāi)發(fā)環(huán)境準(zhǔn)備
包組(CentOS 6):
Server Platform Development(服務(wù)器平臺(tái)開(kāi)發(fā))
Development Tools(開(kāi)發(fā)工具)
注意:還要有ncurses.x86_64包
yum groupinstall Server Platform Development
yum groupinstall Development Tools
yum -y install ncurses…
目標(biāo)主機(jī)硬件設(shè)備相關(guān)信息
CPU:
#cat /proc/cpuinfo
#lscpu
主要查看信息為vendor_id、model name
#x86info -a
PCI設(shè)備:
lspci
-v
-vv
lsusb
-v
-vv
lsblk 塊設(shè)備
了解全部硬件設(shè)備信息
hal-device

內(nèi)核編譯安裝系統(tǒng)
安裝開(kāi)發(fā)包組
下載源碼文件
.config:準(zhǔn)備文本配置文件
make menuconfig:配置內(nèi)核選項(xiàng)
make [-j #]
make modules_install:安裝模塊
make install :安裝內(nèi)核相關(guān)文件
安裝bzImage為/boot/vmlinuz-VERSION-RELEASE
生成initramfs文件
編輯grub的配置文件

編譯安裝內(nèi)核實(shí)例
1、解壓縮內(nèi)核源碼包到/usr/src目錄
tar xf Linux-4.4.21.tar.xz -C /usr/src
cd /usr/src(跳轉(zhuǎn)到/usr/src目錄下)
2、生成Linux-4.4.21的符號(hào)鏈接Linux
ln -sv Linux-Linux-4.4.21 Linux(注意:編譯內(nèi)核時(shí)和涉及到驅(qū)動(dòng)問(wèn)題,而驅(qū)動(dòng)查找文件時(shí)默認(rèn)查找/usr/src/Linux,所有做鏈接處理,即標(biāo)準(zhǔn)化又可以支持回滾)
cd /usr/src/Linux(運(yùn)行make命令需要此目錄為當(dāng)前目錄)
3、復(fù)制當(dāng)前內(nèi)核配置模板文件
cp /boot/config-$(uname -r) ./.config
注意:在紅帽發(fā)行版中存在/boot/config-

1
uanme -r

文件,而有些發(fā)行版存在/proc/config.gz文件,這些文件為當(dāng)前使用內(nèi)核配置文件的模板文件
make help(查看make幫助文檔主要是挑選相應(yīng)的命令工具)

為了保證編譯安裝過(guò)程中(比如遠(yuǎn)程連接中斷而導(dǎo)致編譯安裝失?。┓€(wěn)定,可以使用screen命令開(kāi)啟屏幕會(huì)話的方式運(yùn)行一下命令

screen命令
打開(kāi)screen:~]#screen
拆除screen:Ctrl+a,d
列出screen:~]#screen -ls
連接至screen:~]#screen -r SCREEN_ID
關(guān)閉screen(在screen內(nèi)部):~]#exit

4、配置編譯內(nèi)核自定義的選項(xiàng)
方法一:
make menuconfig(打開(kāi)文本菜點(diǎn)界面需要ncurses包以及ncurses-devel包支持,同時(shí)顯示空間有一定要求注意最大化顯示框體就好


注意:*號(hào)代表編譯進(jìn)內(nèi)核;M代表編輯成模塊;[]代表不編譯
也可以使用
方法二:(圖像化界面需要系統(tǒng)安裝圖形界面并且安裝桌面平臺(tái)開(kāi)發(fā)包租Desktop Platform Development)
GONE桌面配合GKT開(kāi)發(fā)環(huán)境使用make gconfig
KDE桌面配合QT開(kāi)發(fā)環(huán)境使用make xconfig

5、編譯(-j #表示啟動(dòng)多個(gè)線程編譯)默認(rèn)一個(gè)
make -j 2
6、安裝內(nèi)核模塊
make modules_install
7、安裝內(nèi)核核心(自動(dòng)生成grub選項(xiàng))
make install
8、重啟選擇新內(nèi)核
reboot

示例:

[root@CentOS6?~]#?tar?-xf?Linux-4.4.21.tar.xz?-C?/usr/src/
[root@CentOS6?~]#?cd?/usr/src/
[root@CentOS6?src]#?ls
debug??kernels??Linux-4.4.21
[root@CentOS6?src]#?ln?-sv?Linux-4.4.21?Linux
`Linux'?->?`Linux-4.4.21'
[root@CentOS6?src]#?ls
debug??kernels??Linux??Linux-4.4.21
[root@CentOS6?src]#?cd?/usr/src/Linux
[root@CentOS6?Linux]#?cp?/boot/config-2.6.32-642.el6.x86_64??./.config?
cp:?overwrite?`./.config'??Y
[root@CentOS6?Linux]#?make?menuconfig??
[root@CentOS6?Linux]#?make
...(等吧?。?
[root@CentOS6?Linux]#?make?modules_install
...(繼續(xù)等吧?。?
[root@CentOS6?Linux]#?make?install
...
[root@CentOS6?Linux]#?reboot


以上操作請(qǐng)注意工作目錄
詳細(xì)說(shuō)明
編譯內(nèi)核
(1) 配置內(nèi)核選項(xiàng)
支持“更新”模式進(jìn)行配置: make help
(a) make config:基于命令行以遍歷的方式去配置內(nèi)核中可配置的每個(gè)選項(xiàng)
(b) make menuconfig:基于curses的文本窗口界面
(c) make gconfig:基于GTK (GNOME)環(huán)境窗口界面
(d) make xconfig:基于QT(KDE)環(huán)境的窗口界面
支持“全新配置”模式進(jìn)行配置
(a) make defconfig:基于內(nèi)核為目標(biāo)平臺(tái)提供的“默認(rèn)”配置進(jìn)行配置
(b) make allyesconfig: 所有選項(xiàng)均回答為“yes“
(c) make allnoconfig: 所有選項(xiàng)均回答為”no“
(2) 編譯
全編譯:make [-j #]多少線程進(jìn)行編譯
編譯內(nèi)核的一部分功能:
(a) 只編譯某子目錄中的相關(guān)代碼:
# cd /usr/src/Linux
# make dir/
(b) 只編譯一個(gè)特定的模塊:
# cd /usr/src/Linux
# make dir/file.ko
例如:只為e1000編譯驅(qū)動(dòng):
#make drivers/net/ethernet/intel/e1000/e1000.ko
(c)如何交叉編譯內(nèi)核:
編譯的目標(biāo)平臺(tái)與當(dāng)前平臺(tái)不相同;
# make ARCH=arch_name
要獲取特定目標(biāo)平臺(tái)的使用幫助
# make ARCH=arch_name help
# make ARCH=arm help

(3)在已經(jīng)執(zhí)行過(guò)編譯操作的內(nèi)核源碼樹(shù)做重新編譯:
需要事先清理操作:
# make clean:清理大多數(shù)編譯生成的文件,但會(huì)保留config文件等
# make mrproper: 清理所有編譯生成的文件、config及某些備份文件;
# make distclean:相當(dāng)于mrproper,額外清理各種patches以及編輯器備份文件;

卸載內(nèi)核

首先我們需要查看一下當(dāng)前使用的是哪個(gè)內(nèi)核:
uname -r
該命令會(huì)告訴你當(dāng)前使用的內(nèi)核版本,在登錄時(shí)候,不能卸載當(dāng)前的內(nèi)核,以免造成無(wú)法啟動(dòng)的悲劇~~
接下來(lái),如果你是自己動(dòng)手編譯的內(nèi)核的話,請(qǐng)刪除以下文件和文件夾
一、卸載自己編譯的內(nèi)核:

  1. 刪除掉/lib/modules/目錄下過(guò)時(shí)的內(nèi)核庫(kù)文件
  2. 刪除掉/usr/src/kernels/目錄下過(guò)時(shí)的內(nèi)核源代碼
  3. 刪除掉/boot目錄下啟動(dòng)的核心檔案以及內(nèi)核映像
  4. 更改/boot/grub/menu.lst,刪除掉不用的啟動(dòng)列表
    KERNEL-VERSION代表你想卸載的內(nèi)核的版本號(hào)二、卸載發(fā)行版自帶的內(nèi)核。

1、查找內(nèi)核文件 :dpkg –get-selections|grep Linux 。帶有image的就是內(nèi)核文件。
如:Linux-image-3.16-amd64 install
2、卸載:sudo apt-get remove Linux-image-(接內(nèi)核版本)

最后必須更新grub :update-grub

練習(xí):
1、破解root口令,并為grub設(shè)置保護(hù)功能


生成加密密碼

[root@CentOS6?~]#?grub-md5-crypt
Password:?
Retype?password:?
$1$YS0sz$S214NTNpQKGanvodNDegK/

或者

[root@CentOS6?~]#?openssl?passwd?-1?-salt?"YS0sz"
Password:?
$1$YS0sz$S214NTNpQKGanvodNDegK/

注意:此命令可以自定義“鹽”
重啟后



注意:?jiǎn)?dòng)對(duì)應(yīng)內(nèi)核密碼可以選擇c(grub命令行模式)

繞開(kāi)菜單內(nèi)核啟動(dòng)項(xiàng),而自己設(shè)定一個(gè)啟動(dòng)
但是設(shè)置內(nèi)核參數(shù)的密碼繞不開(kāi),只能用救援模式刪掉上面加密行才可

2、編寫(xiě)centos5,6的服務(wù)腳本
#!/bin/bash
#chkconfig:35 88 22
#description:test service
chkconfig –add testsrv
chkconfig –list testsrv
chkconfig –del testsrv

[root@CentOS6?rc.d]#?vim?/etc/rc.d/init.d/testsrv

#!/bin/bash
#chkconfig:35?80?20
#description:test?service
case?$1?in
start)
??echo?testsrv?starting
;;
stop)
??echo?testsrv?stop
;;
status)
??echo?testsrv?status
;;
*)
??echo?"testsrv?start|stop|status"
;;
esac
[root@CentOS6?rc.d]#?cd?./init.d
[root@CentOS6?init.d]#?chkconfig?--add?testsrv
[root@CentOS6?init.d]#?chkconfig?--list?testsrv
testsrv????0:off????1:off????2:off????3:on????4:off????5:on????6:off
[root@CentOS6?init.d]#?ll?/etc/rc.d/rc*.d/*testsrv*
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc0.d/K20testsrv?->?../init.d/testsrv
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc1.d/K20testsrv?->?../init.d/testsrv
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc2.d/K20testsrv?->?../init.d/testsrv
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc3.d/S80testsrv?->?../init.d/testsrv
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc4.d/K20testsrv?->?../init.d/testsrv
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc5.d/S80testsrv?->?../init.d/testsrv
lrwxrwxrwx.?1?root?root?17?Sep?25?15:16?/etc/rc.d/rc6.d/K20testsrv?->?../init.d/testsrv

刪除服務(wù)

[root@CentOS6?init.d]#?chkconfig?--del?testsrv??
[root@CentOS6?init.d]#?ll?/etc/rc.d/rc*.d/*testsrv*
ls:?cannot?access?/etc/rc.d/rc*.d/*testsrv*:?No?such?file?or?directory

或者
[root@CentOS6 init.d]# ntsysv –level=3 #去掉testsrv前的*號(hào)

3、破壞本機(jī)grub stage1,而后在救援模式下修復(fù)之
模擬損壞:dd if=/dev/zero of=/dev/sda bs=1 count=446


重啟自動(dòng)修復(fù)
方法二:

4、破壞本機(jī)grub stage1_5,而后在救援模式下修復(fù)之
模擬損壞:dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1


方法二:

注意:方法二修復(fù)需要依賴(lài)/boot/grub目錄下的stage相關(guān)文件,如果這些文件有問(wèn)題則修復(fù)無(wú)效,所以建議用grub-install修復(fù),若損壞后沒(méi)重啟機(jī)器可以直接運(yùn)行相關(guān)命令修復(fù),而不用救援模式
如果grub目錄不存在的情況下,grub-install修復(fù),但是需要手動(dòng)編輯grub.conf(修復(fù)之后再輸入一次),完全重啟重新編輯grub.conf

5、破環(huán)本機(jī)initrm文件,而后在救援模式下修復(fù)之

  • 救援模式
  • chroot /mnt/sysimage
  • mkinitrd /boot/initramfs-
    1
    uname -r

    .img?

    1
    uname -r
  • exit;exit;reboot



6、修復(fù)內(nèi)核啟動(dòng)參數(shù)






然后按b啟動(dòng)

7、grub.conf文件丟失損壞
啟動(dòng)后在直接進(jìn)入grub命令行模式(grub stage1 stage1_5完好的情況下)

b鍵啟動(dòng)等待修復(fù)并自動(dòng)重啟
再輸入一遍上圖操作,進(jìn)入系統(tǒng)后重新建立如下grub.conf文件

5、刪除vmlinuz和initramfs文件后無(wú)法啟動(dòng),兩種方法恢復(fù)之
方法一(有光盤(pán)進(jìn)救援模式):



注意:新生成的vmlinuz、initramfs的文件名稱(chēng)要與grub.conf中的文件名一直?。?!本人在生成initramfs文件時(shí)少一個(gè)“-”即:initramfs-

1
uanme -r

而失誤打成initramfs

1
uanme -r

與grub文件中原initramfs行名稱(chēng)不符
重啟等待修復(fù)完成
方法二(無(wú)光盤(pán),利用網(wǎng)絡(luò)模式或者其它介質(zhì)如U盤(pán)的進(jìn)入救援模式也可):
網(wǎng)絡(luò)中要做好有網(wǎng)絡(luò)引導(dǎo)啟動(dòng)的服務(wù),ftp服務(wù)或http服務(wù)等(在之后的課程我們可以學(xué)到)此次為用光盤(pán)救援模式模擬



在本次試驗(yàn)中我的環(huán)境有dhcp服務(wù)所以無(wú)需手動(dòng)配置ip,而沒(méi)有則需要我們收到配置


完成后依然進(jìn)入一路默認(rèn)ok,進(jìn)shell

6、增加新硬盤(pán),在其上制作能單獨(dú)運(yùn)行kernel和bash的系統(tǒng)

7、(1)實(shí)驗(yàn):刪除/boot,恢復(fù)
rm -rf /boot
光盤(pán)啟動(dòng),進(jìn)入rescue模式
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm –root=/mnt/sysimage –replacepkgs|force
chroot /mnt/sysimage
grub-install /dev/sda
vim /boot/grub/grub.conf

8、分區(qū)情況下,刪除/boot 和/etc/fstab,恢復(fù)之

rm -rf /boot /etc/fstab
光盤(pán)啟動(dòng),進(jìn)入rescue模式

檢查/
blkid;fdisk -l
mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2

vi /mnt/sda2/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/sda2 / ext4 defaults 1 2
reboot
光盤(pán)啟動(dòng),進(jìn)入rescue模式,掛載/mnt/sysimage
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
chroot /mnt/sysimage
rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm –replacepkgs|force
grub-install /dev/sda

vim /boot/grub/grub.conf
default=0
timeout=3
title wangLinux
root (hd0,0)
kernel /vmlinuz…. root=/dev/sda2
initrd /initramfs

重啟系統(tǒng)等待修復(fù),進(jìn)入系統(tǒng)后重新編輯fstab

9、邏輯卷情況下,刪除/boot 和/etc/fstab,恢復(fù)之

rm -rf /boot /etc/fstab
光盤(pán)啟動(dòng),進(jìn)入rescue模式
檢查
lvscan
vgchange -ay
mount /dev/vg0/root /mnt/sysimage

vi /mnt/sysimage/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/vg0/root / ext4 defaults 1 2
/dev/vg0/usr /usr ext4 defaults 0 0
/dev/vg0/var /var ext4 defaults 0 0

reboot
光盤(pán)啟動(dòng),進(jìn)入rescue模式,掛載/mnt/sysimage
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
chroot /mnt/sysimage
rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm –replacepkgs|force
grub-install /dev/sda

vim /boot/grub/grub.conf
default=0
timeout=3
title CentOS6
root (hd0,0)
kernel /vmlinuz…. root=/dev/vg0/root
initrd /initramfs

10、自制Linux系統(tǒng):
添加硬盤(pán)(虛擬機(jī)需要掃描)
echo ‘- – -‘ > /sys/class/scsi_host/host2/scan

1)、分區(qū)并創(chuàng)建文件系統(tǒng)
fdisk/dev/sdb
分兩個(gè)必要的分區(qū)
/dev/sdb1對(duì)應(yīng)/boot /dev/sdb2對(duì)應(yīng)根/
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
2)、掛載boot
mkdir/mnt/boot
mount /dev/sdb1 /mnt/boot

3)、安裝grub
grub-install –root-directory=/mnt/ dev/sdb

4)、建立grub.conf:
vim /mnt/boot/grub/grub.conf
title wangLinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 seLinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.el6.x86_64.img

5)、恢復(fù)內(nèi)核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot

6)、創(chuàng)建一級(jí)目錄
mkdir/mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir–pv/mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

7)、vim /mnt/sysroot/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/sda2 / ext4 defaults 1 2

8)、復(fù)制bash和相關(guān)庫(kù)文件
9)、復(fù)制相關(guān)命令及相關(guān)庫(kù)文件
如:ls,cat,vim,reboot,hostname等

[root@CentOS6?sysroot]#?vim?/root/bin/copycmd.sh
#!/bin/bash
ch_root="/mnt/sysroot"
[?!?-d?$ch_root?]?&&?mkdir?$ch_root

bincopy()?{
if?which?$1?&>/dev/null;?then

local?cmd_path=`which?--skip-alias?$1`
local?bin_dir=`dirname?$cmd_path`
[?-d?${ch_root}${bin_dir}?]?||?mkdir?-p?${ch_root}${bin_dir}
[?-f?${ch_root}${cmd_path}?]?||?cp?$cmd_path?${ch_root}${bin_dir}
return?0
else
echo?"Command?not?found."
return?1
fi
}

libcopy()?{
local?lib_list=$(ldd?`which?--skip-alias?$1`?|?grep?-Eo?'/[^[:space:]]+')
for?loop?in?$lib_list;do
local?lib_dir=`dirname?$loop`
[?-d?${ch_root}${lib_dir}?]?||?mkdir?-p??${ch_root}${lib_dir}
[?-f?${ch_root}${loop}?]?||?cp?$loop?${ch_root}${lib_dir}
done
}


read?-p?"Please?input?a?command:?"?command

while?[?"$command"?!=?"quit"?];do
if?bincopy?$command?;then
libcopy?$command
fi
read?-p?"Please?input?a?command?or?quit:?"?command
done


關(guān)機(jī),新建一個(gè)虛擬機(jī)并把剛才的新添加的磁盤(pán)文件拷到其目錄下指定為自:我又失誤了,內(nèi)核參數(shù)不對(duì),需要手動(dòng)去掉/mnt/boot/;同時(shí)添加fstab當(dāng)中的一個(gè)default少些一個(gè)字母,修改后即可進(jìn)入系統(tǒng),但是此系統(tǒng)只是一個(gè)流程如果需要正常使用需要使用手工編譯安裝需要的軟件

11、在U盤(pán)上定制Linux,使其可啟動(dòng)系統(tǒng)和swap分區(qū)
與10類(lèi)似,只是一般需要FAT32格式U盤(pán)然后
新建虛擬機(jī)識(shí)別u盤(pán)直接重啟即可

12、編譯安裝kernel,啟用支持ntfs文件系統(tǒng)功能
[root@CentOS6 ~]# tar -xf Linux-4.4.21.tar.xz -C /usr/src/
[root@CentOS6 ~]# cd /usr/src/
[root@CentOS6 src]# ls
debug kernels Linux-4.4.21
[root@CentOS6 src]# ln -sv Linux-4.4.21 Linux

1
Linux' -&gt;

Linux-4.4.21′
[root@CentOS6 src]# ls
debug kernels Linux Linux-4.4.21
[root@CentOS6 src]# cd /usr/src/Linux
[root@CentOS6 Linux]# cp /boot/config-2.6.32-642.el6.x86_64 ./.config
cp: overwrite `./.config’? Y
[root@CentOS6 Linux]# make menuconfig
選擇ntfs功能
[root@CentOS6 Linux]# make

[root@CentOS6 Linux]# make modules_install

[root@CentOS6 Linux]# make install

[root@CentOS6 Linux]# reboot

若/sbin/init損壞則修復(fù)方法
臨時(shí)應(yīng)急啟動(dòng)
進(jìn)入啟動(dòng)菜單,a編輯內(nèi)核參數(shù)kernel par后添加init=/sbin/bash以bash進(jìn)程暫時(shí)代替init進(jìn)程作為第一個(gè)啟動(dòng)的進(jìn)程(可以進(jìn)行操作,否者操作不了)
注意:以上操作是會(huì)涉及一些服務(wù)的seLinux的變更所以需要
如:

[root@CentOS6?~]#?ll?-Z?/sbin/init
-rwxr-xr-x.?root?root?system_u:object_r:admin_home_t:s0?/sbin/init
[root@CentOS6?~]#?chcon?-t?init_exec_t?/sbin/init
[root@CentOS6?~]#?ll?-Z?/sbin/init
-rwxr-xr-x.?root?root?system_u:object_r:init_exec_t:s0?/sbin/init

有光盤(pán),則可以進(jìn)入救援模式
分別安裝對(duì)應(yīng)版本的init程序包
CentOS5:SysVinit-2.86-15.el5
CentOS6:upstart-0.6.5-16.el6.x86_64
CentOS7:systemd-219-19.el7.x86_64

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!