linux的組成:
linux是單內核的系統,而windows是多個微內核的組成的操作系統
linux內核的作用:進程管理,內存管理,設備管理,網絡管理,硬件驅動,安全機制
啓動流程:
1,POST加電自檢
作用:對電腦的各種硬件進行檢測,看是否正常
ROM(主要):加載BIOS保存電腦的輸出程序,但是它是保存在內存之中
RAM:保存電腦的各種參數設置,不然BIOS設置存不住,比如時間。並且指定對應的啓
動項,如從光盤還是硬盤啓動
bootloader:引導加載器,負責引導程序。解壓,展開內核,並且把控制權交給內核。如
用GRUB啓動,在6,7版本上不一樣
2,MBR引導
1,前446個字節放的是bootloader,中間64個字節存放磁盤的分區表,最後兩個字節是55AA
3,grub
1,加載grub文件夾中的內容
4,kernel進行初始化
1,以只讀的方式掛載根
2,運行系統的第一個程序/sbin/init
3,探測所有的硬件設備
4,加載各種硬件的驅動程序
在centos7中硬件的驅動程序是按照需求加載的,如果開機啓動時沒有檢測到硬件,那麼就
不會加載相對應的驅動程序,用來節省啓動時間,讓啓動的更加迅速
vmlinuz放着最核心的驅動文件,這個文件在光盤中存在,是紅帽公司出廠的時候打包到光
盤中。如果丟失可以進行復制。在編譯內核或內核文件丟失時候可以用到此文件,後綴要
加上內核的版本號(name -r)
注:硬件的驅動程序存放在/lib/modules/kernel` uname -r `/中,如果需要則加載,不需要不
加載
輔助的文件系統存放在greb下的initramfs.img文件中
注:在6,7上放的虛擬的文件系統,在跟早的系統上放的是虛擬的光盤,然而光盤佔用的磁盤
空間非常的大,從而導致啓動的時長更加長
用modeinfo 可以看到驅動模塊的詳細信息,以及驅動模塊的存放目錄
綜上所述:在系統中特定的文件系統的根放在grub下的initramfs中,可以看到文件系統的驅
動不是放在boot目錄中,而是放在其他目錄中。那麼在系統啓動時,並不會加載文件系統驅
動所在的目錄。但是如果不加載文件系統驅動,則無法掛載根目錄,導致系統無法啓動。
因此在centos中,會在grub下這個文件中會做一個這個僞根目錄,以便於啓動的時候運行
注:查看initramfs.img文件,不過要改文件名,改成GZ後綴的文件名,改成之後在進行解
壓縮。就可以看到操作系統的根的驅動。只有在啓動過程中有這個驅動,那麼纔可以加載
文件系統的根
常見問題:
1,沒有initramfs.img文件
解決:
切換根目錄
用mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)來進行修復
2,在centos7上沒有boot目錄的內容
解決:
拷貝光盤裏的vmlinuz文件,加上版本號
重啓系統即可
內核的特點:
在官網下載內核,下載之後解壓後的init目錄下存放着內核的源碼,可以查看,並修改源碼,
並且修改啓動的第一個進程
在centos6和7上對應的init文件不屬於一個包,可以用rpm來查看,因爲在這兩個系統上並不
是由一個應用程序啓動的
早期centos的加載是等待執行,可以理解成當一個進程啓動完成之後,纔會啓動另一個進
程。這樣很多缺點,如系統啓動時間過長,或者某一個應用程序無法啓動,從而導致整個系
統都無法啓動。所以在centos後期的版本中進程之間是並行執行啓動,這樣可以大大的節省
啓動時間,也可以在啓動時排除一些進程不必要的干擾
默認啓動模式:在centos6上可以改動/etc/inittab中改開機啓動的模式,在centos7也有此
文件,但是centos7上無法再此文件中定義啓動的模式,需要通過調用系統命令來修改系
統的默認啓動模式,且在centos7系統中定義的只有兩種啓動模式,分別是圖形和命令行
centos6:
查看:runlevel
修改:在配置文件中修改id:3:initdefault:
注:
0,關機模式
1,單用戶模式(系統進行維護,破解root口令)
3,多用戶模式
5,圖形界面
6,重啓
如在配置文件中誤修改成重啓模式,可在開機界面進入單用戶模式修改
centos7:
查看:systemctl get-default
修改:
systemctl set-default graphical.target
systemctl set-default multi-user.target
系統的啓動流程:
系統啓動的第一個程序:/sbin/init
init讀取其初始化文件:
centos6:/etc/inittab
centos7:systemctl set-default name.target(只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切換)
/etc/rc.d/rc.sysinit: 系統初始化腳本,其中定義了啓動的模式
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,並以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作
rc N --> 意味着讀取/etc/rc.d/rcN.d/(進行系統初始化)
作用:在其中有很多的K開頭的文件和S開頭的文件,其中K代表是關閉,S代表是啓動,其
中的數字代表啓動的順序
注:
1,在切換模式的時候/etc/rc.d/rcN.d/裏面的服務也會重新啓動一遍
2,自己編寫的腳本在啓動時儘量往後放,因爲自己編寫的腳本需要依賴很多其他程序才
能夠運行,當然關閉的時候要首先關閉自己編寫的腳本
調整服務的啓動次序:
chkconfig可以查看到當前的各個服務的啓動級別,也可以進行設置
例:chkconfig --level 345 atd off 改這個級別下的自啓動,如果不帶任何選項,那麼則代
表的是2-5模式之中關閉
源碼包安裝的服務在書寫啓動腳本的格式(儘量用case語句):
必須加上的行:
chkconfig 2345(-) (S)96 (K)06 (設置啓動的等級,啓動和關閉的順序)
description: test service (在centos6上加不加都可以,在5版本上必須得加上這一行,才
能啓動對應的服務)
美化啓動腳本,引用相應的functions文件中的action函數:
source /etc/init.d/function
action "xxx is stop"
將啓動腳本通過chkconfig命令加入到啓動項裏,如果刪除可以用這個命令刪除,不然會有
相應的緩存文件
chkconfig add :添加服務
chkconfig del :刪除服務
注:在linux運行的過程中可能一些服務由於種種原因導致無法啓動,那麼切換開機啓動模式,然後在對相關進行改動即可
如果不想用chkconfig加入到自啓動中,可以加入到rc.local中,注意這個腳本中的服務是最
後啓動的服務
xinetd(超級守護進程)管理的服務:
作用:
centos6系統中一些服務的代理服務,在centos7中交由systemd代理。在centos6中的某
些服務會依賴於這個服務的啓動而啓動,從而來減少系統的壓力比如已經淘汰的Telnet
服務,就是依賴於xinted服務的啓動而啓動
對象:
一些訪問量不多的服務,當有人訪問這個服務時纔會啓動對應的服務,可以節約一些啓
動的資源
啓動:
要修改要啓動服務對應的配置文件,把disabled這一項改成no
在生產中要註釋掉的快捷鍵,避免誤操作:ctrl alt delete 三鍵連按是重啓
centos6:
註釋/etc/init/control-alt-delete.conf的start on control-alt-delete這一行
centos7:
刪除/usr/lib/systemd/system/ctrl-alt-del.target
grub:
配置文件:
default=#: 設定默認啓動的哪一個內核;落單項(title)編號從0開始,
timeout=#:指定菜單項等待選項選擇的時長
splashimage=(hd#,#)/PATH/XPM_FILE:菜單背景圖片文件路徑(可以自定義啓動圖片,
但是圖片的像素是640*480,後綴是xpm.gz)
title TITLE:定義菜單項“標題”
hiddenmenu:隱藏菜單(如果沒有,那麼不按e就可以看到啓動項)
password [--md5] STRING: 可以爲啓動項增加密碼
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件
注: initrd必須在kernel下面,因爲要先加載文件系統
grub分區啓動的常見問題:
1,缺少前446個字節的bookloader(一階段,進入救援模式)
解決:
進入救援模式下
1:
grub-install --root-directory=DIR(掛載的目錄) /dev/DISK(對應的分區)——————掛載對應的磁盤
2(boot下的備份文件必須要存在):
#] grub
grub>root (hd0,0)—————掛載根分區
grub>setup (hd0)—————生成對應的MBR分區表
2,沒有grub配置文件(二階段錯誤,出現grub提示符)
解決:
手動寫grub.conf配置文件
3,沒有grub目錄和前446個字節
解決:
1,切換根目錄
2,grub-install /dev/sda
3,寫grub.conf文件
default=0
timeout=3
title my linux
kernel /vmlinuz ro root=/dev/sda1 selinux=0
initrd /initramfs.img
注:root (hd0,0)可寫可不寫,默認根分區是第一個分區
4,重啓系統
4,boot分區全部刪除
解決:
1,進入救援模式,開啓一個shell,切換根目錄
2,掛載光盤,拷貝內核文件(vmlinuz),mkinitrd /boot initramfs.img `uname -r`(可以直接裝內核,不過要強制安裝內核)
3,grub-install /dev/sda(重做MBR分區)
4,寫grub.conf文件
5,重啓系統
5,刪除boot分區,刪除fstab文件(基於邏輯卷安裝的系統)
解決:
centos6:
1,用fdisk命令先找到根分區的屬於哪個分區,然後用blkid命令查看當前分區有沒有邏
輯卷,並找到對應的掛載目錄
2,用lvdisplay可以看到邏輯卷是否處於啓用狀態,如果沒有啓用,可以用vgchange -ay可以啓用邏輯卷
3,啓用之後編輯/etc/fstab(要在對應的根目錄下)
4,重啓系統
5,切換根目錄
6,生成grub-install /dev/sda(重做MBR分區)
7,寫grub.conf文件
centos7:
1,進入BIOS界面,設置光盤啓動,進入救援模式
2,掛載光盤,並強制安裝內核
3,安裝完成之後,製作grub配置文件grub2-install /dev/sda(重做MBR分區)
4,用 grub2-mkconfig -o /boot/grub2/grub.cfg 生成grub.cfg文件
5,重啓電腦
grub加密(6,7上的加密方式不一樣)
6上加密:
在grub.conf的配置文件中加入password這一行,後面跟上對應的密碼
明文:
直接輸入密碼
密文:
grub-md5-crypt生成密碼串
加入配置文件password --md5 密碼串(輸入a進入單用戶模式改密碼)
7上加密:
明文:
在/etc/grub.d/00_header中加入如下幾行
cat << EOF
set superusers='admin'
password admin qwe123
E0F
密文:
用grub2-mkpasswd-pbkdf2生成密文
把密文寫入到配置文件之中
g重新生成配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg
製作小型的linux系統:
必須要有的分區:boot分區,根分區
拿到獨立的磁盤,進行分區,分區之後創建文件系統
把創建分系統掛載到系統的目錄上,並用相應的命令用grub-install生成boot下必須要的文
件(生成完成後需要檢查一下boot下的文件是否存在)
書寫grub.conf配置文件在centos6上要手動輸入,在centos7上可以用grub2-mkconfig生成對
應的文件
把根目錄掛載對應的目錄下,並創建常用文件夾,並且複製一些常用命令對應的動態鏈接庫
文件,並複製網卡的驅動模塊(modeinfo查看驅動的位置,ethtool -i 查看網卡驅動insmod可
以加載網卡模塊)
切換根目錄,檢查是否成功,成功後即可移植此磁盤到別的電腦中
創建一臺新的虛擬機把對應的磁盤加入到虛擬機之中,然後開啓虛擬機,並加載網卡驅動
注:
使新制作的系統有網絡功能:
查看網卡的驅動模塊:ethtool -i ech0
查看網卡驅動模塊的所在位置,並拷貝到新的磁盤中:modinfo e1000
啓動新的虛擬機,添加網卡驅動模塊:insmod e1000
添加成功後用ifconfig添加網址即可通訊
proc文件夾:
作用:內存中加載的文件吧·
配置文件:/etc/sysctl 配置文件的格式中.代表目錄中的/(如路由轉發等,以及禁止ping的
功能,在centos6上是寫好的文件,在centos7上是空白,需要手動添加)
寫完配置文件後,可以用sysctl -p選項可以讓配置立即生效,可以用sysctl -a查看當前內存中
生效的配置文件(如果該文件中沒有內容,那麼需要手動添加)
清除緩存(man proc):
echo 3 > /proc/sys/vm/drop_caches
內核編譯(通常在/boot目錄下):
編譯方法:和大部分軟件的源代碼編譯的方式差不多,但是內核中有很多的功能,要在生產
中判斷有些功能是否啓用(內核裁剪),從而加快系統的運行效率
編譯過程:
準備好安裝編譯環境,以及10G以上內存空間,查看主機的CPU架構,下載好對應的內核
源碼包(www.kernel.org)
.config:準備文本配置文件
make menuconfig:配置內核選項(看哪些功能需要,哪些功能不需要)
make && make install (生成的內核在/lib/modules/生成對應的文件,名字就是內核的版本)
查看當前生效的內核模塊:
lsmod顯示由核心已經裝載的內核模塊(其實是查看/proc/modules文件)
modinfo可以顯示所有模塊的信息,即使是沒有裝載的模塊都會顯示出來
modprobe可以加載相應的模塊(模塊的配置文件在/etc/modprobe.d/中)
注:insmod也可以加載和卸載模塊,不過此命令會有依賴性,所有不常用類似於rpm裝軟件包。
modprobe在加載和卸載內核模塊的時候,不會檢查驅動的依賴性,類似於裝軟件的yum
Busybox:
作用:可以用來定製小型的Linux操作系統,比如手機系統,到各種智能的終端設備,它佔用
的空間十分小,只需要一個小型的內核和Busybox就可以運行
原理:每個命令都有相應的動態鏈接庫文件,但是這些庫文件中有些庫文件是相同的,所以
可以利用這個軟件對一些啓動的動態鏈接庫進行優化,排除掉冗餘的庫文件,從而來簡化系
統的各項功能
編譯:
裝一些依賴的軟件包
裝完之後下載busybox,解壓後進入其中
make menuconfig 選一些特定的功能
make && make install 如果出錯,執行make clean後,重新執行上面命令
mkdir /mnt/sysroot/
cp -a _install/* /mnt/sysroot/
檢查:切換根目錄,看命令是否執行,如果製作小型的linux系統,那麼則需要對應的boot分區,以及相應的文件
注:busybox僅支持sh,ash,不支持bash。如果想切換根目錄致_install下,需要切換shell,或者把bash命令,以及相關的庫文件拷貝到該目錄下,即可切換
systemd:
管理啓動的軟件:可以並行啓動一些程序(取出一些程序的依耐性,在Ubantu上也有使用)
systemd啓動機制:
基於socket的激活機制:socket與服務程序分離(有些程序是基於套接字文件啓動的程序,
比如mysql,這個服務啓動的時候會打開相應的3306端口,在本地打開MySQL是按照套接
字文件進行啓動,而遠程打開則是通過3306端口進行訪問)
基於d-bus的激活機制
基於device的激活機制
基於path的激活機制
優點:可以同時啓動多個應用服務,啓動成功沒有任何提示,啓動不成功會報錯
缺點:不止任何的擴展,但是在6上面可以支持定義的一些啓動項