CentOS系統啟動流程、selinux、Systemd剖析

交互式登錄配置文件讀取順序:

/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

非交互式登錄配置文件讀取順序:

~/.bashrc –> /etc/bashrc –> /etc/profile.d/*.sh

 

profile類:為交互式登錄的shell提供配置;功用:

1、定義環境變量

2、運行命令或腳本

bashrc類:為非交互式登錄的shell提供配置;功用:

1、定義命令別名

2、定義本地變量

 

 

CentOS系統啟動流程

Linux系統的組成部分:內核+根文件

內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能

運行中的系統環境可分為兩層:內核空間、用戶空間

用戶空間:應用程序(進程或線程)

內核空間:內核代碼(系統調用)

內核設計流派:

單內核設計:把所有功能集成于同一個程序;linux

微內核設計:每種功能使用一個單獨的子系統實現;windows,solaris

 

Linux內核特點:

支持模塊化;.ko

支持模塊的動態裝卸載;

 

組成部分:

核心文件:/boot/vmlinuz-VERSION-release

ramdisk:

CentOS5:/boot/initrd-VERSION-release.img

CentOS6-7:/boot/initramfs-VERSION-release.img

模塊文件:/lib/modules/VERSION-release

 

CentOS系統啟動流程:

POST:加電自檢:

BOOT Sequence(引導序列):按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備;

bootloader:引導加載器,程序

windows:ntloader

Linux:

1、LILO:LInux LOader

2、GRUB:GRand Uniform Bootloader

MBR(512):主要引導扇區

446:bootloader

64:分區表

2:有效校驗碼;55AA

 

kernel:內核自身初始化:

探測可識別到的所有硬件設備;

加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)

以只讀方式掛載根文件系統;

運行用戶空間的第一個應用程序:/sbin/init

 

init程序的類型

1、SysV:init,CentOS 5

配置文件:/etc/inittab

2、Upstart:init,CentOS 6

配置文件:/etc/inittab、/etc/init/*.conf

3、Systemd:systemd,CentOS 7

配置文件:/usr/lib/systemd/system,/etc/systemd/system

 

ramdisk:

內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問;

ramdisk –》 ramfs

CentOS5:initrd,工具程序:mkinitrd

CentOS6、7:initramfs,工具程序:mkinitrd,dracut

 

系統初始化:

POST ==》 ?BootSequence(BIOS) ?==》 ?Bootloader(MBR) ==》 ?kernel(ramdisk) ?==》 ?rootfs(只讀) ?==》 ?init(systemd)

 

/sbin/init

CentOS5:運行級別:為了系統的運行或維護等應用目的而設定:

0-6:7個級別

0:關機

1:單用戶模式(root,無須登錄),single,維護模式;

2:多用戶模式,會啟動網絡功能,但不會啟動NFS,維護模式;

3:多用戶模式,正常模式,文本界面;

4:預留級別;可同3級別;

5:多用戶模式,正常模式,圖形界面;

6:重啟

默認級別:3,5

切換級別:init #

查看級別:runlevel

who -r

 

配置文件:/etc/inittab

每一行定義一種action以及與之對應的process;

id:runlevel:action:process

action:

wait:切換至此級別運行一次;

respawn:此process終止,就重新運行;

initdefault:設定默認運行級別;process省略;

sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit;

。。。

 

chkconfig命令

查看:–list

添加:–add

刪除:–del

修改:–level NNN on|off

 

/etc/rc.d/rc.sysinit:系統初始化腳本

(1)設置主機名;

(2)設置歡迎信息;

(3)激活udev和selinux;

(4)掛載/etc/fstab文件中定義的文件系統;

(5)檢測根文件系統,并以讀寫方式重新掛載根文件系統;

(6)設置系統時鐘;

(7)激活swap設備;

(8)根據/etc/sysctl.conf文件設置內核參數;

(9)激活lvm及soft raid設備;

(10)加載設備的額外驅動程序;

(11)清理操作;

總結:/sbin/init ==> ?(/etc/inittab) ?==> ?設置默認運行級別 ==> ?運行系統初始化腳本、完成系統初始化 ?==> ?關閉對應下需要關閉的服務,啟動需要啟動的服務 ?==> ?設置登錄終端

 

CentOS 6:init程序為upstart,其配置文件:/etc/inittab,/etc/init/*.conf;注意語法遵循upstart配置文件語法格式;

 

啟動系統時,設置其運行級別為1;

CentOS5、6:內核命令參數single或者S或者1;

CentOS7:內核命令參數添加init=/bin/sh,假如rootfs為ro,還需mount -o remount,rw /,且運行命令“touch / .autorelabel”,否則將無法正常啟動系統,最后啟動系統exec /sbin/init;

 

GRUB(Boot Loader):

grub 0.x:grub legacy(傳統)

grub 1.x:grub2

 

grub legacy:

stage1:mbr

stage1_5:mbr之后的扇區,讓stage1中的BootLoader能識別stage2所在的分區上的文件系統;

stage2:磁盤分區(/boot/grub/)

其配置文件:/boot/grub/grub.conf ?<– ?/etc/grub.conf

stage2及內核等通常放置于一個基本磁盤分區;

功用:(1)提供菜單、交互式接口;

e:編輯模式,用于編輯菜單;

c:命令模式,交互式接口;

(2)加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可隱藏菜單

(3)為菜單提供了保護機制

為編輯菜單進行認證

為啟用內核或操作系統進行認證

 

如何識別設備:

(hd#,#):

hd#:磁盤編號,用數字表示;從0開始編號;

#:分區編號,用數字表示;從0開始編號;

 

grub的命令行接口:

help:獲取幫助列表;

help KEYWORD:詳細幫助信息;

find (hd#,#)/PATH/TO/SOMEFILE:查找文件

root (hd#,#):設定根設備

kernel?/PATH/TO/KERNEL_FILE:設定本次啟動時用到的內核文件;

initrd?/PATH/TO/INITRAMFS_FILE:設定為選定內核提供額外文件的ramdisk;

boot:引導啟動選定的內核;

 

配置文件:/boot/grub/grub.conf

配置項:

default=#:設定默認啟動的菜單欄,菜單欄編號從0開始;

timeout=#:指定菜單項等待選項選擇的時長;

splashimage=(hd#,#)//PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;

hiddenmenu:隱藏菜單;

password [–md5] STRING:菜單編輯認證;

title TITLE:定義菜單項的標題;可出現多次;

root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub的“根”;

kernel?/PATH/TO/VMLINUZ_FILE [選項] :啟動的內核;

initrd?/PATH/TO/INITRAMFS_FILE:內核匹配的ramdisk文件;

password [–md5] STRING:啟動選定的內核或操作系統時進行認證;

 

grub-md5-crypt命令:生成md5的密碼串;

 

安裝grub:

grub-install –root-directory=/PATH/TO/SOMEFILE /DEVICE_NAME

 

uname命令:顯示操作系統信息;

-n:顯示節點名稱;

-r:顯示內核的VERSION-release;

 

lsmod命令:顯示內核已裝載的模塊信息;顯示內容來自于:/proc/modules文件;

 

modinfo命令:顯示模塊的詳細描述信息;

-n:顯示模塊的存放路徑;

 

modprobe命令:裝、卸載模塊;默認配置文件為/etc/modprobe.conf,/etc/modprobe.d/*.conf

modprobe [-C config-file] [modulename] [module parameters…]:裝載模塊;

modprobe [-r] [modulename…]:卸載模塊;

 

depmod命令:內核模塊依賴關系及系統信息映射文件的生成工具;

 

/proc目錄:內核內部狀態及統計信息,以及可配置參數通過proc偽文件系統加以輸出;

參數:

只讀:輸出信息;

可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置;/proc/sys目錄

sysctl命令:查看或設定內核的參數;

sysctl -w path.to.parameter=VALUE

echo命令通過重定向的方式也可以修改內核參數;

echo “VALUE” > ?/proc/sys/path/to/parameter

 

sysctl命令:

默認配置文件:/etc/sysctl.conf

(1)設置某參數

sysctl -w path.to.parameter=VALUE

(2)通過讀取配置文件來設定參數

sysctl -p [/path/to/conf_file]

 

內核中的路由轉發參數:/proc/sys/net/ipv4/ip_forward;其值0為關閉,1為開啟;

 

常用的幾個參數:

net.ipv4.ip_forward:路由轉發

vm.drop_caches:清除buff和cache

kernel.hostname:主機名

 

/sys目錄:sysfs:輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數可以修改的,用于調整硬件工作特性;

 

udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件;udev是運行用戶空間程序;專用工具:udevadmin、hotplug;

udev為設備創建設備文件時,會讀取其事先先定義好的規則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下;

 

ramdisk文件的制作:

(1)mkinitrd命令:為當前正在使用的內核重新制作ramdisk文件

# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

(2)dracut命令:

# dracut /boot/initramfs-$(uname -r).img $(uname -r)

 

編譯內核:

前提:

(1)準備好開發環境;

(2)獲取目標主機上硬件設備的相關信息;

(3)獲取到目標主機系統功能的相關信息,例如要啟用的文件系統;

(4)獲取內核源代碼包;www.kernel.org

準備好開發環境:

包組(centos7):

# yum groupinstall “development tools”

目標主機硬件設備相關信息:

CPU:

1、# cat /proc/cpuinfo

2、x86info -a

3、lscpu

PCI設備:

lspci:顯示所有PCI設備;

lsusb:顯示USB設備;

lsblk:顯示塊設備;

 

了解全部硬件設備信息:hal-device

screen命令:剝離終端關聯的命令行管理工具

screen -ls:顯示正在運行的信息

screen -r #:#為信息號,恢復對應的命令行

Ctrl +a +d:逃逸出當前命令行

 

簡單依據模板文件的內核編譯制作過程:

1、下載內核源碼包并解壓;

# tar -xvf linux_kernel_file -C /usr/src

# ln -sv /usr/src/linux_kernel_file /usr/src/linux

#cd?/usr/src/linux

#cp /boot/config-VERSION-RELEASE .config

#make menuconfig:按需定制內核參數

#make -j #:根據cpu核心數開啟多線程

#make modules_install:安裝模塊

#make install

安裝生成bzImage為/boot/vmlinuz-VERSION-RELEASE.img

生成initramfs文件

編輯grub的配置文件

重啟系統,并測試使用新內核;

 

編譯內核的步驟

1、配置內核選項

支持“更新”模式進行配置

(a)make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項;

(b)make menuconfig:基于curses的文本窗口界面;

(c)make gconfig:基于GTK開發環境的窗口界面;

(d)make xconfig:基于QT開發環境的窗口界面;

支持“全新配置”模式進行配置

(a)make defconfig:基于內核為目標平臺提供的“默認”配置進行配置;

(b)make allnoconfig:所有選項均回答為“no”;

2、編輯

make [-j #]

make modules_install

make install

如何只編譯內核中的一部分功能:

(a)只編譯某子目錄中的相關代碼:

#cd /usr/src/linux

#make dir/

(b)只編譯一個特定的模塊:

#cd /usr/src/linux

#make dir/file.ko

如何交叉編譯內核:編譯的目標平臺與當前平臺不相同;

#make ARCH=arch_name

獲取特定目標平臺的使用幫助:

#make ARCH=arch_name help

 

如何在已經執行過編譯操作的內核源碼樹做重新編譯:

事先清理操作:

make clean:清理大多數編譯生成的文件,但會保留config文件等;

make mrproper:清理所有編譯生成的文件、config及某些備份文件;

make distclean:mrproper、patcher以及編輯器備份文件;

 

CentOS系統安裝:

安裝程序:anaconda

bootloader==》kernel(initrd(rootfs))==》anaconda

 

anaconda:

tui:基于cureses的文本窗口

gui:圖形界面

 

CentOS的安裝過程啟動流程:

MBR:boot.cat

stage2:isolinux/isolinux.bin

配置文件:isolinux/isolinux.cfg

每個對應的菜單選項:

加載內核:isolinux/vmlinuz

向內核傳遞參數:append initrd=initrd.img …

裝載根文件系統并啟動anaconda

注意:上述內容一般應位于引導設備上;而后續的anaconda及其安裝用到的程序包等有幾種方式可用:

本地光盤

本地硬盤

ftp server:yum repository

http server:yum repository

nfs server:yum repository

如何想手動指定安裝源:

boot:linux method

 

anaconda應用的工作過程:

1、安裝前配置階段:鍵盤類型、語言、時區、管理員密碼、創建一個普通用戶、設定分區方式及MBR的安裝位置、選定要安裝的程序包

2、安裝階段:在目標磁盤創建分區,執行格式化操作等、將選定的程序包安裝至目標位置、安裝bootloader

3、首次啟動:iptables、selinux、core dump

 

anaconda的配置方式:

(1)交互式配置方式

(2)通過讀取事先給定的配置文本自動完成配置;

按特定語法給出的配置選項;

kickstart文件;

 

安裝引導選項:

boot:有如下常用選項

text:文本安裝方式;

method:手動指定使用的安裝方法;

與網絡相關的引導選項:

ip=IPADDR

netmask=MASK

gateway=GW

dns=DNS_SERVER_IP

ifname=NAME:MAC_ADDR

與遠程訪問功能相關的引導選項:

vnc

vncpassword=’PASSWORD’

指明kickstart文件的位置:ks=

DVD driver:ks=cdrom:/PATH/TO/KICKSTART_FILE

Hard driver:ks=hd:/device/drectory/KICKSTART_FILE

HTTP server:ks=http://host:port//PATH/TO/KICKSTART_FILE

FTP server:ks=ftp://host:port//PATH/TO/KICKSTART_FILE

HTTPS server:ks=https://host:port//PATH/TO/KICKSTART_FILE

啟動緊急救援模式:rescue

 

kickstart文件的格式:

命令段:指明各種安裝前配置,如鍵盤類型等;

程序包段:指明要安裝的程序包組或程序包,不安裝的程序包等;

%packages:安裝包起始

@group_name:包組安裝

package:某包安裝

-package:不安裝某包

%end:安裝包結束

 

腳本段:

%pre:安裝前腳本;運行環境:運行于安裝介質上的微型linux環境;

%post:安裝后腳本;運行環境:安裝完成的系統;

 

創建kickstart文件的方式:

(1)直接手動編譯:依據某模板修改;

(2)可使用創建工具:system-config-kickstart;依據某模板修改生成

 

檢查ks文件語法錯誤命令:ksvalidator

 

制作centos7 引導光盤鏡像

# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS7-boot” -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos7-boot.iso /root/myiso/

 

SElinux:強制訪問控制,工作于linux內核;

本身linux:DAC:自主訪問控制

MAC:強制訪問控制;

 

SELinux有兩種工作級別:

strict:每個進程都受到selinux的控制;

targeted:僅有限個進程受到selinux的控制;只監控容易被入侵的進程;

 

selinux為每個文件提供了安全標簽,也為進程提供了安全標簽;

user:role:type

user:selinux的user;

role:角色;

type:類型;

 

selinux規則:

規則:哪種域能訪問哪種或哪些種類型內的文件;

 

配置selinux的方式:配置文件:/etc/selinux/config、/etc/sysconfig/selinux

1、selinux是否啟用;(enforcing|permissive|disabled)

2、給文件重新打簽:

3、設定某些布爾型特性;

 

相關命令:getenforce、setenforce、

 

給文件重新打標:chcon

chcon [OPTION]… CONTEXT FILE…
chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
chcon [OPTION]… –reference=RFILE FILE…

-R:遞歸

 

還原文件的默認標簽:

restorecon [-R] pathname…

 

布爾型規則查看與設定:

getsebool:查看

-a:查看所有

setsebool:設定

-P:永久有效

 

systemd新特性:

系統引導時實現服務并行啟動;

按需激活進程;

系統狀態快照;

基于依賴關系定義服務控制邏輯;

 

核心概念:unit

配置文件進行標識和配置:文件中主要包含了系統服務、監聽socker、保存的系統快照以及其他與init相關的信息;其保存位置為:

/usr/lib/systemd/system

/run/systemd/system

/etc/systemd/system

 

unit的類型:

service unit:文件擴展名為.service,用于定義系統服務;

target unit:文件擴展名為.target,用于模擬實現“運行級別”;

device unit:文件擴展名為.device,用于定義內核識別的設備;

mount unit:文件擴展名為.mount,用于定義文件系統掛載點;

socker unit:文件擴展名為.socker,用于標識進程間通信用的socker文件;

snapshot unit:文件擴展名為.snapshot,管理系統快照;

swap unit:文件擴展名為.swap,用于標識swap設備;

automount unit:.automount,實現文件系統的自動掛載點;

path unit:.path,用于定義文件系統中的一個文件或目錄;

 

管理系統服務:Centos 7:service unit;注意:兼容早期的服務腳本;

命令:systemctl COMMAND name.service

啟動:service name start ? ==》 ?systemctl start name.service

停止:service name stop ? ==》 ? systemctl stop name.service

重啟:service name restart ?==》 ?systemctl restart name.service

狀態:service name status ? ?==》 ? systemctl status name.service

條件時重啟:service name condrestart ==》 ? systemctl try-restart name.service

重載或重啟服務:systemctl reload-or-restart name.service

禁止設定為開機自啟:systemctl mask name.service

取消禁止設定為開機自啟:systemctl unmask name.service

 

查看某服務當前激活與否的狀態:systemctl is-active name.service

查看所有已激活的服務狀態:systemctl list-units –type service

查看所有服務狀態:systemctl list-units –type service –all

 

設定某服務開機自動啟動:

chkconfig name on ?==》 ? systemctl enable name.service

查看某服務開機自動啟動:

chkconfig –list name ? ==》 ? systemctl is-enabled name.service

查看所有服務的開機自動啟動狀態:

chkconfig –list ? ==》 ?systemctl list-unti-files –type service

查看某服務的依賴關系:

systemctl list-dependencies name.service

 

target units:

unit配置文件:.target

運行級別:

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

級別切換:

init N ? ==> ? systemctl isolate name.target

查看級別:

runlevel ? ==》 ? systemctl list-units –type target

獲取默認運行級別:

/etc/inittab ? ==》 ? systemctl get-default

修改默認運行級別:

/etc/inittab ? ==》 ? systemctl set-default name.target

切換至緊急救援模式

systemctl rescue

切換至emergency模式:

systemctl emergency

其他常用命令:

關機:systemctl halt;systemctl poweroff

重啟:systemctl reboot

掛起:systemctl suspend

快照:systemctl hibernate

快照并掛起:systemctl hybrid-sleep

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91903

(0)
N26-深圳-城市蝸牛N26-深圳-城市蝸牛
上一篇 2018-03-04
下一篇 2018-03-04

相關推薦

  • Awk 高級應用

                              Awk 簡介   Awk 是一種變成語言,用于在Linux/UNIX下對文本和數據進行掃描與處理,數據可以來自標準輸入,文件 ,管道。Awk分別代表其作者的姓…

    2017-07-17
  • 馬哥教育網絡班20期+第2周課程練習

    1、Linux上的文件管理類命令有:cp復制, mv剪切, rm移除 使用方法: cp復制  cp [OPTION]… [-T] SOURCE DEST  常用選項: -i:交互式 -r: 遞歸復制目錄及內部的所有內容 -a: 歸檔 演示: SRC是文件,會將/etc/fstab 中內容覆蓋到/bin/po…

    Linux干貨 2016-06-23
  • sed與vim相關練習

    sed 練習 以行為單位的新增/刪除功能 1將 /etc/passwd 的內容列出并且打印行號,同時,請將第 2~5 行刪除! 2在第二行后(亦即是加在第三行)加上“the is xing line?”字樣! 3在第二行前(亦即是加在第而行)加上“the is xing line?”字樣! 4在第二行后面加入兩行字,例如“the is xing line &…

    Linux干貨 2016-08-10
  • Linux第七周小結

    1、創建一個10G分區,并格式為ext4文件系統 a) 要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl; b) 掛載至/data/madata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; 2、創建一個大小為1G的swap分區,并創建好文件系統,并啟用之 3、寫一個腳本 a)&…

    2017-08-13
  • 推薦-DNS BIND初探

    DNS BIND DNS BIND 正向解析 反向解析 從服務器 子域授權 轉發 view DNS 什么是DNS? DNS是domain name system,域名系統的簡寫,負責實現域名與IP的轉換。 DNS的功能是什么? DNS能夠將IP地址與域名相互雙向轉換,能夠實現域名訪問。 DNS的歷史:  1. 初期網絡…

    2016-04-19
  • python裝飾器1

    簡單介紹裝飾器(注意格式)

    Linux干貨 2017-10-22
欧美性久久久久