交互式登录配置文件读取顺序:
/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.178linux.com/91903