交互式登錄配置文件讀取順序:
/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