一、linux 組成介紹
1.linux 組成:
? Linux: kernel+rootfs(根文件系統)
kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
rootfs: 程序和glibc
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用: procedure,無返回值
函數調用: function
程序:二進制執行文件
2.內核設計流派:
單內核(monolithic kernel): Linux
把所有功能集成于同一個程序
微內核(micro kernel): Windows, Solaris
每種功能使用一個單獨子系統實現
3. Linux內核特點:
支持模塊化: .ko(內核對象)
如:文件系統,硬件驅動,網絡協議等
支持內核模塊的動態裝載和卸載
? 組成部分:
核心文件: /boot/vmlinuz-VERSION-release (出廠時,直接從光盤中拷貝而得)
ramdisk:輔助的偽根系統
(包含各類驅動,以供啟動時加載真正的根文件系統)
/boot/initramfs-######.img (系統安裝之時才會生成)
=============================================================================================================
centos 6.8-initramfs-2.6.32-642.el6.x86_64.img 簡析:
(initramfs-2.6.32-642.el6.x86_64.img 以gzip格式壓縮,解壓時候,需要在尾部添加.gz后綴)
解壓后:
使用cpio 解壓: ( cpio -id < initramfs-2.6.32-642.el6.x86_64.img.cpio)
initramfs 作為臨時偽根文件系統,有類似于根的各類所需文件、驅動,可供啟動時候加載真正的根文件系統
==============================================================================================================
CentOS 5: /boot/initrd-VERSION-release.img
修復:
救援模式下,
chroot /mnt/sysimage
cd /boot
mkinitrd initrd-`uname -r`.img `uname -r` (centos5 )
(第二個uname -r ,是作為initrd 的參數)
exit
CentOS 6,7: /boot/initramfs-VERSION-release.img
修復: (centos 6 )
救援模式下,
chroot /mnt/sysimage
cd /boot
mkinitrd initramfs-`uname -r`.img `uname -r` (centos6)
exit
( centos 7 需要進入grub 修復:)
模塊文件: /lib/modules/VERSION-release
命令補充: lsmod 查看加載的模塊;
moinfo 查看指定模塊信息
modprobe 加載模塊;
rmmod / modprobe -r 卸載模塊
===============================================================================================================
二、linux 系統啟動流程詳解:
1. Centos 6 啟動流程
2. centos6 啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設備。
2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,(加載initramfs.img)并嘗
試驅動所有的硬件設備。
4.核型執行init程序并獲取運行信息。
5.Init執行/etc/rc.d/rc.sysinit文件。
6.啟動核心的外掛模塊(/etc/modprobe.conf)。
7.Init執行運行的各個批處理文件(scripts).
8.Init執行/etc/rc.d/rc.local. (出現登陸界面)
9.執行/bin/login程序,等待用戶登錄。
10.登錄之后開始以Shell控制主機。
3. 啟動流程詳解:
? 系統整體初始化流程:
POST –> BootSequence (BIOS) –>
Bootloader(MBR) –>(進入/boot) kernel(ramdisk) –> rootfs(只讀) —
> init( systemd)
? POST: Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部
分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、 串并行接
口、鍵盤、 CD-ROM光驅等硬件情況的檢測。
ROM: BIOS, Basic Input and Output System,保存著有關計
算機系統最重要的基本輸入輸出程序,系統信息設置、 開機加電自檢程序和
系統啟動自舉程序等。
RAM: CMOS互補金屬氧化物半導體,保存各項參數的設定
按次序查找引導設備,第一個有引導程序的設備為本次啟動設備
? bootloader: 引導加載器,引導程序 (MBR第一個扇區)
windows: ntloader,僅是啟動OS
Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內
核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把
系統控制權移交給內核
LILO: LInux LOader(早期)
GRUB: GRand Unified Bootloader
GRUB 0.X: GRUB Legacy, GRUB2
? MBR:
446: bootloader, 64: 分區表, 2: 55AA
(446字節內可尋找到bootloader所在盤區)
? GRUB:(grub 目錄下,存放著各階段的備份文件)
primary boot loader :
1st stage–》 加載bootloader
1.5 stage–> 進入/boot目錄,加載vmlinux,initramfs
secondary boot loader :
2nd stage, 讀取分區根文件系統
? kernel:
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(可能借助于ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序: /sbin/init
4.init程序的類型:
? SysV: init, CentOS 5之前
配置文件: /etc/inittab
? Upstart: init,CentOS 6
配置文件: /etc/inittab, /etc/init/*.conf
? Systemd: systemd, CentOS 7
配置文件: /usr/lib/systemd/system
/etc/systemd/system
? ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
ramdisk –> ramfs 提高速度
CentOS 5: initrd, 工具程序: mkinitrd
CentOS 6: initramfs, 工具程序: mkinitrd, dracut(實際調用文件)
5. 運行級別
? 運行級別配置路徑: /sbin/init (CentOS 5 )
(/etc/inittab 下可以定義默認啟動界面A)
? 運行級別:為系統運行或維護等目的而設定; 0-6: 7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
? 默認級別: 3, 5
? 切換級別: init #
? 查看級別: runlevel ; who -r
6.init 初始化過程詳解
1) init 初始化流程:
init讀取其初始化文件: /etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X
2) CentOS5的inittab文件詳解:
? 配置文件路徑: /etc/inittab
———————————————————————————-
Centos 5.4 —–/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
———————————————————————————
centos 6—–/etc/inittab:
# Default runlevel. The runlevels used 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:
——————————————————————————————
? 每一行定義一種action以及與之對應的process
id:runlevel:action:process
id:它是每個登記項的標識符,用于唯一標識每個登記項,不能重復
runlevels:系統的運行級別,表示process的action要在哪個級別下運行,該段中可以定義多個運行級別,
各級別之間直接寫不用分隔符;如果為空,表示在所有的運行級別運行。Linux的運行級別有:
0:表示關機
1:表示單用戶模式,在這個模式中,用戶登錄不需要密碼,默認網卡驅動是不被
加載,一些服務不能用。
2:表示多用戶模式,NFS服務不開啟
3,表示命令行模式
4,這個模式保留未用
5,表示圖形用戶模式
6,表示重啟系統
action:表示對應登記項的process在一定條件下所要執行的動作。
具體動作有:
respawn:當process終止后馬上啟動一個新的
wait:當進入指定的runlevels后process才會啟動一次,并且到離開這個
runlevels終止
initdefault:設定默認的運行級別,即我們開機之后默認進入的運行級別,
不能是0,6
sysinit:系統初始化,只有系統開機或重新啟動的時候,
這個process才會被執行一次
powerwait:當init接收到電源失敗信號的時候執行相應的process,
并且如果init有進程在運行,會等待這個進程完成之后,再執行相應的process
powerfail:當init接收到電源失敗信號的時候執行相應的process,并且如果
init有進程在運行,不會等待這個進程完成,它會直接執行相應的process
powerokwait:電源已經故障,但是在等待執行對應操作的時候突然來電了就執行對應
的process
powerfailnow:當電源故障并且init被通知UPS電源已經快耗盡執行相對應的process
ctrlaltdel:當用戶按下ctrl+alt+del這個組合鍵的時候執行對應的process
boot:只有在引導過程中,才執行該進程,但不等待該進程的結束;當該進程死亡時,
也不重新啟動該進程
bootwait:只有在引導過程中,才執行該進程,并等待進程的結束;當該進程死亡時,
也不重新啟動該進程
off:如果process正在運行,那么就發出一個警告信號,等待20秒后,
再通過殺死信號強行終止該process。如果process并不存在那么就忽略該登記項
once:啟動相應的進程,但不等待該進程結束便繼續處理/etc/inittab文件中的下一個
登記項;當該進程死亡時,init也不重新啟動該進程
process:表示啟動哪個程序或腳本或執行哪個命令等
—————————————————————————————–
centos 5.4 –/etc/inittab內容示例:
id:3:initdefault: # 定義默認運行級別
si::sysinit:/etc/rc.d/rc.sysinit # 系統初始化腳本
l0:0:wait:/etc/rc.d/rc 0 # 對應不同運行級別的啟動腳本
l1:1:wait:/etc/rc.d/rc 1…
l6:6:wait:/etc/rc.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t3 -r now #定義快捷鍵操作
# 按下快捷鍵3秒后重啟系統
——————————————————————————————
3) CentOS6 /etc/inittab和相關文件
(CentOS6中,已經不再定義其他內容,進有默認開機啟動流程,轉用下列腳本來完成
原有執行操作)
? /etc/inittab
設置系統默認的運行級別
id:3:initdefaut:
? /etc/init/control-alt-delete.conf # 定義快捷鍵操作
? /etc/init/tty.conf #tty 終端配置腳本
? /etc/init/start-ttys.conf #登錄腳本
? /etc/init/rc.conf #運行級別配置腳本
? /etc/init/prefdm.conf #定義級別5中的圖形界面啟動的腳本
4) /etc/rc.d/rc.sysinit
? /etc/rc.d/rc.sysinit: 在所有運行級別下,init 依賴/rc.sysinit 進行系統初始化
作用:
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作
5)rc 腳本
? 說明: rc N –> 意味著讀取/etc/rc.d/rcN.d/下腳本
(服務若在指定模式下為開啟,在對應級別的rc#.d 中,為S開頭,反之為K開頭)
(K/S后以字符順序排列)
(目錄下全部文件均為軟鏈接,源為init.d下的對應腳本)
K*: K##*: ##運行次序;數字越小,越先運行;數字
越小的服務,通常為依賴到別的服務
S*: S##*: ##運行次序;數字越小,越先運行;數字
越小的服務,通常為被依賴到的服務
s|k 開頭腳本內容示例:
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
=================================================================================================================================
三、chkconfig命令
? chkconfig命令
(設置開啟 | 關閉狀態后,會在對應級別中生成 s| k 開頭的服務文件)
? 查看服務在所有級別的啟動或關閉設定情形:
chkconfig [–list] [name]
? 添加:(可添加自編服務腳本)
1.SysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d)
(無需在結尾添加.sh)
2.服務腳本內容示例:
#!/bin/bash
# chkconfig: LLLL nn mm
#LLLL 表示初始在哪個級別下啟動, -表示都不啟動
nn : 啟動順序號(建議自編服務號為較大數字)
mm : 關閉時的順序號
3.chmod +x …..
4.chkconfig –add service_name
5.service ## start 即可測試添加服務腳本
? 刪除:
chkconfig –del name
? 修改指定的鏈接類型
chkconfig [–level levels] service_name <on|off|reset>
–level LLLL: 指定要設置的級別;省略時表示2345
eg:
chkconfig –level 5 atd on | off
? ntsysv命令 :(交互式服務調整,一次只能進入一個模式,默認為當前模式)
–level=# 可進入指定模式下調整
=====================================================================================================================================
四、xinetd管理服務與自定義服務
(xinetd: 超級守護進程 , 7已經取消,僅在5、6中還存在)
配置文件: /etc/xinetd.conf
瞬態( Transient)服務(非獨立服務,不可獨立工作)被xinetd進程所管理:
啟動|關閉: 由xinetd 檢查chkconfig中對應服務配置,管理其自啟動狀態
工作(監聽): 依賴于xinetd運行,對應服務的請求,首先被xinetd代理監聽,
xinetd收到請求才喚醒對應服務
chkconfig –list 中 xinetd 管理的瞬態服務項目:
修改服務自啟動:/etc/xinetd.d/<service>:
修改disable 即可
或者使用chkconfig 開啟也可以。
與libwrap.so文件鏈接
用chkconfig控制的服務:
chkconfig tftp on
? service 命令:手動管理服務
service 服務 start|stop|restart
service –status-all
==========================================================================================================================================
五、/etc/rc.d/rc.local腳本
? 注意:正常級別下,最后啟動一個服務S99local沒有鏈接至
/etc/rc.d/init.d一個服務腳本,而是指向了
/etc/rc.d/rc.local腳本
? 不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且
又想開機時自動運行的命令,可直接放置于
/etc/rc.d/rc.local文件中
? /etc/rc.d/rc.local在指定運行級別腳本后運行
? 可以根據情況,進行自定義修改
centos 5—tty 終端配置(/etc/inittab中的內容)
? 1:2345:respawn:/usr/sbin/mingetty tty1
? 2:2345:respawn:/usr/sbin/mingetty tty2
? …
? 6:2345:respawn:/usr/sbin/mingetty tty6
mingetty會自動調用login程序
? x:5:respawn:/etc/X11/prefdm -nodaemon
六、破解root口令
啟動菜單–》 按“a”–> 輸入: 1|S |s |single –>進入單用戶模式(root) ,此模式下,直接以root身份登錄,
且無需輸入密碼,使用passwd命令即可修改密碼
原創文章,作者:ldt195175108,如若轉載,請注明出處:http://www.www58058.com/45442
文章內容很充實了,需要在邏輯上進行一個層次化的梳理,否者整個給人的感覺太凌亂了。