导图社区 第五部分 Linux 系统管理员
这是一篇关于第五部分 Linux 系统管理员的思维导图,从chapter 20 启动流程、模块管理与Loader、内核与内核模块、内核模块查看、initrd的重要性与创建initrd文件、内核功能中的vga设置、init配置文件错误等内容,总结的非常细致全面。
提示: 本内容由社区用户上传并分享。平台不对内容的真实性、合法性、知识产权归属及是否侵害第三方权利进行事前审核或保证。本内容可能包含受版权保护的图片、字体或其他第三方素材,使用前请自行确认授权范围。
云计算中的部分存储基础知识整理,包括:开源企业存诸freenas、Account、storage、Sharing。
网络基础知识思维导图,主要内容有网络范围、网络模型(标准)、单位、数据发送方式、数据包装格式、网络层IP协议、网络设备路由器/交换机设置。
这是一篇关于第五部分 Linux 系统管理员的思维导图,从chapter 20 启动流程、模块管理与Loader、内核与内核模块、内核模块查看、initrd的重要性与创建initrd文件、内核功能中的vga设置、init配置文件错误等内容,总结的非常细致全面。
社区模板帮助中心,点此进入>>
云计算中的部分存储基础知识整理,包括:开源企业存诸freenas、Account、storage、Sharing。
网络基础知识思维导图,主要内容有网络范围、网络模型(标准)、单位、数据发送方式、数据包装格式、网络层IP协议、网络设备路由器/交换机设置。
这是一篇关于第五部分 Linux 系统管理员的思维导图,从chapter 20 启动流程、模块管理与Loader、内核与内核模块、内核模块查看、initrd的重要性与创建initrd文件、内核功能中的vga设置、init配置文件错误等内容,总结的非常细致全面。
Linux
第五部分 Linux 系统管理员
chapter 20 启动流程、模块管理与 Loader
Linux 的启动流程
总体流程
1st step
加载 BIOS ,通过 BIOS 程序加载 CMOS 的信息,取得信息后 BIOS 进行开机自检,分析设备根据用户设置取得第一个可启动设备
2nd step
读取并执行第一个启动设备中 MBR (Master Boot Record,主引导分区) 的 Boot Loader(引导装载程序)
BIOS 会指定启动的设备来读取磁盘内操作系统内核文件,但不同操作系统文件系统格式不同,需以引导装载程序来处理内核文件加载问题
只要 BIOS 能检测到磁盘就能够通过 INIT 13 这条信道来读取该磁盘中的第一扇区内的 MBR
3rd step
依据 boot loader 的设置加载内核 Kernel,Kernel 会开始检测硬件与加载驱动程序
每种操作系统都有自己的 boot loader,必须使用自己的 loader 才能加载属于自己的操作系统内核
4th step
硬件驱动成功后,Kernel 会主动调用 init 进程,init 会取得 run-level 信息
5th step
init 执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的环境(网络、时区等)
6th step
init 执行 run-level 的各个服务的启动
7th step
init 执行 /etc/rc.d/rc.local 文件
8th step
init 执行终端机模拟程序 mingetty 来启动 login 进程,等待用户登录
BIOS,boot loader,kernel 加载与多重引导
BIOS
Basic Input Output System,是一套写死到主板上面的一个内存芯片(ROM)中的程序
CMOS
嵌入在主板上的存储器,它记录了各项硬件参数
系统时间
CPU 电压与频率
各项设备的 I/O地址与 IRQ 等
boot loader 的功能
提供菜单
用户可以选择不同的启动项,也是多重引导的重要功能
加载内核文件
直接指向可启动的程序区段来开始操作系统
转交其他 loader
将引导装载功能转交给其他 loader 负责
多重引导
一部主机上同时安装 windows 和 linux 的实现
文件系统规划中,最前面都有一个启动扇区(boot sector),这个启动扇区可以安装引导装载程序
操作系统默认都会安装一份 loader 到根目录所在文件系统的 boot sector 中,linux 系统安装时可以选择 boot loader 安装到 MBR 或者选择不安装,但 windows 安装时,默认会主动将 MBR 与 boot sector 都安装上一份 boot loader
windows 的 loader 默认不具有控制权转交的功能,因此不能使用 windows 的 loader 来加载 linux 的 loader,所以 多重引导时要先安装 windows 再安装 linux

加载内核检测硬件与 initrd 的功能
通过 boot loader 的管理读取内核文件后,linux 会将内核解压缩到内存中并利用内核的功能开始测试与驱动周边设备,内核开始接管 BIOS 后的工作
内核文件位置
/boot/vmlinuz
在启动过程中内核必须挂载根目录(只读的方式)才能读取内核模块提供加载驱动程序的功能
linux 安装在 IDE 接口的磁盘上,并且使用 ext2/ext3文件系统,不需要 initrd
若根目录在特殊的磁盘接口(USB,SATA,SCSI)中或者文件系统较为特殊(LVM,RAID等)时,启动时无法挂载根目录就需要 initrd
/boot/initrd(虚拟文件系统)
它能够通过 boot loader加载到内存中并解压缩在内存中仿真成一个根目录,此仿真在内存中的文件系统会提供一个可执行程序,通过该程序来加载启动过程中需要的内核模块(通常就是 USB,RAID,LVM,SCSI等文件系统与磁盘接口驱动程序),等载入完成会帮助内核重新调用 /sbin/init 来开始后续的正常启动流程

Boot Loader 可以加载 kernel 与 initrd,然后在内存中让 initrd 解压缩成为根目录,kernel 就能借此加载适当的驱动程序,最终释放虚拟文件系统并挂载实际的根目录文件系统,就能够开始后续正常的启动流程
第一个进程 init 及配置文件 /etc/inittab 与 runlevel
内核加载完毕进行完硬件检测与驱动加载后,主机硬件已经准备就绪,磁石内核会主动调用第一个进程 /sbin/init
/sbin/init
功能
准备软件执行环境,包括系统的主机名、网络设置、语系处理、文件系统格式及其他服务的启动
run level
启动执行等级
7 等级
0
halt
系统直接关机
1
single user mode
单用户维护模式
2
Multi-user,without NFS
类似于 runlevel 3 ,但无 NFS(网络) 服务
3
Full Multi-user mode
完整含有网络功能的纯文本模式
4
unused
系统保留
5
X11
与 runlevel 3 类似,但加载使用 X Window
6
reboot
重新启动
/etc/inittab
语法
利用冒号(:)将设置分隔成 4 字段
[ 设置选项 ] : [ run level ] : [ init 的操作行为 ] : [ 命令选项 ]
设置选项
最多四个字符,代表 init 的主要工作选项
run level
该选项在哪些 run level 下面进行
init 的操作行为
主要可以进行的操作选项
命令选项
即可以进行的命令,通常是一些脚本

init 的处理流程
init 依据 inittab 的设置一行一行从上往下执行
先取得 runlevel
使用 /etc/rc.d/rc.sysinit 进行系统初始化
根据执行等级 runlevel 执行一条,其他略过,由于 runlevel 是 5 ,故只执行 
设置好 ctrl+alt+del 组合键功能
设置不断电系统的 pf,pr 两种机制
启动 mingetty 的 6 个终端机(tty1~tty6)
最终以  启动图形界面 X Window
要做设置的话,不要哪项注释掉即可!
init 处理系统初始化流程(/etc/rc.d/rc.sysinit)
初始化整个系统环境主要就利用 /etc/rc.d/rc.sysinit 这个shell script 来设置,看看到底干了些啥?
取得网络环境与主机类型
读取网络配置文件/etc/sysconfig/network,取得主机名与默认网关(gateway)等网络环境
测试与挂载内存设备/proc及USB设备/sys
除了挂载 /proc 外,会主动检测系统上是否存在USB设备,若有则主动加载 usb 驱动并尝试挂载usb的文件系统
决定是否启动 SELinux
启动系统随机数生成器
帮助系统进行一些密码加密演算的功能
设置终端机(console)字体
设置显示于启动过程中的欢迎界面(textbanner)
设置系统时间(clock)与时区设置
读入/etc/sysconfig/clock 的设置值
接口设备的检测与 PnP(Plug and Play) 参数的测试
用户自定义模块的加载
自定义模块目录:/etc/sysconfig/modules/*.modules
加载内核相关设置
系统主动读取 /etc/sysctl.conf 文件的设置值
设置主机名与初始化电源管理模块(ACPI)
初始化软件磁盘阵列
主要通过 /etc/mdadm.conf 来设置
初始化 LVM 的文件系统
以 fsck 检验磁盘文件系统
会进行 filesystem check
进行磁盘配额 quota 的转换(非必要)
重新以可读写模式挂载系统磁盘
启动 quota 功能
启动系统伪随机数生成器(pseudo-random)
清除启动过程当中的临时文件
将启动相关信息加载到 var/log/dmesg 文件中
启动系统服务与相关启动配置文件(/etc/rc.d/rc N & /etc/sysconfig)
各个不同 run level 服务启动的各个script 位置就在 /etc/inittab 中指定

以上的各项脚本都是通过 /etc/rc.d/rc 这个命令来处理相关任务
以  说明
通过外部第一号参数 $1 来取得需要执行的脚本目录,即由 /etc/rc.d/rc 5 可以取得 /etc/rc5.d/ 这个目录来准备处理相关的脚本程序

找到 /etc/rc5.d/K??* 开头的文件,并进行 /etc/rc5.d/K??* stop 的操作

找到 /etc/rc5.d/S??* 开头的文件,并进行 /etc/rc5.d/S??* start 的操作

来看看 /etc/rc5.d/ 里面有啥?

特点
全部文件名都是以 Sxx 或者 Kxx 开头,xx为数字,且这些数字再文件之间是有相关性的,数字代表的是执行顺序
全部是链接文件,连接到 stand alone 服务启动的目录 /etc/init.d/ 去
用户自定义的开机启动程序(/etc/rc.d/rc.local)
/etc/rc.d/rc.local
该文件可以执行用户自己想要执行的系统命令,即用户有任何想要在启动时就进行的工作,直接写入该文件就行
根据 /etc/inittab 的设置加载终端机或 X Window 界面
参考选项
代表在 run level 2/3/4/5 时,都会执行 /sbin/mingetty,而且执行 6个,对应 6 个纯文本终端机
启动过程会用到的主要配置文件
/etc/modprobe.conf
该文件大多在于指定系统内的硬件所使用的模块
/etc/sysconfig/*
启动过程读取的一些服务的相关配置文件就记录在该目录下
authconfig
该文件主要设置用户的身份认证的机制
clock
该文件主要用于设置 linux 主机的时区,可以使用格林威治时间(GTM)或者北京本地时间(local),clock 文件内的设置选项 ZONE 所参考的时区位于 /usr/share/zoneinfo 目录下的相对路径中
修改时区
将 /usr/share/zoneinfo/Asia/Shanghai 这个文件复制成为 /etc/localtime
i18n
用于设置语系方面
keyboard & mouse
设置键盘与鼠标的形式
network
设置是否要启动网络以及设置主机名还有网关(GATEWAY)这两个重要信息
neywork-scripts/
该目录里的文件主要用于设置网卡
Run level 的切换
明白一点!
run level 的不同只是 /etc/rc[0-6].d 里面启动的服务不同而已
切换方式
要修改每次启动默认执行的 run level ,则需要修改 /etc/inittab 内的设置
若仅仅只是暂时更改系统的 run level ,则使用 init [0-6] 命令即可切换,但下次重启时还是以 /etc/inittab 中的设置为准
查看目前的 run level
runlevel 命令

左边代表前一个 run level,右边代表目前的 run level,若之前没有切换过 run level 则前一个 run level 不存在为 N
切换成 3

执行 init 3 后系统所作的工作
先比较 /etc/rc3.d/ 及 /etc/rc5.d/ 内的以 K 与 S 开头的文件
在新的 run level 即 /etc/rc3.d/ 内有多的 K 开头的文件,则予以关闭
在新的 run level 即 /etc/rc3.d/ 内有多的 S 开头的文件,则予以启动
关机/重启 新命令
init 0
关机
init 6
重启
内核与内核模块
内核与内核模块位置
内核
/boot/vmlinuz 或 /boot/vmlinuz-version
内核解压缩所需 RAMDisk
/boot/initrd(/boot/initrd-version)
内核模块
/lib/modules/version/kernel 或 /lib/modules/$(uname -r)/kernel
内核源码
/usr/src/linux huo /usr/src/kernels (要安装才会有,默认不安装)
内核被顺利加载到系统当中就会记录的信息
内核版本
/proc/version

系统内核功能
/proc/sys/kernel
内核模块与依赖性
内核模块目录

arch
与硬件平台有关的选项,如 CPU 等级等
crypto
内核所支持的加密技术,如 md5 或者时 des 等
drivers
一些硬件的驱动程序,如 显卡、网卡、PCI 等
fs
内核所支持的文件系统,如 vfat,reiserfs,nfs 等
lib
一些函数库
net
与网络有关的各项协议数据还有防火墙模块(net/ipv4/netfilter/*)等
sound
与音效有关的各项模块
Linux kernel 2.6.x 版本的内核模块扩展名一定是 .ko 结尾

模块依赖性文件
/lib/modules/$(uname -r)/modules.dep
该文件记录了内核所支持的模块之间的各项依赖性
怎么创建?
depmod [-Ane]
-A:不加任何参数时,depmod 会主动分析目前内核内的模块,并重新写入 /lib/modules/$(uname -r)/modules.dep 当中,若加上 -A 参数,则 depmod 会查找比 modules.dep 内还要新的模块,如果找到新模块才会更新
-n:不写入 modules.dep,而是将结果输出到屏幕
-e:显示出目前已加载的不可执行的模块名称
内核模块查看
lsmod
查看目前已经加载的模块
显示内容
Module
模块名称
Size
模块大小
Used by
此模块是否被其他模块所使用

modinfo
查阅模块的信息
modinfo [-adln] [module_name] [filename]
-a:仅列出作者名称
-d:仅列出该 modules 的说明(description)
-l:仅列出授权(license)
-n:仅列出该模块的详细路径

内核模块加载与删除
加载
modprobe
命令会主动查找 modules.dep 的内容,解决依赖后才决定需要加载的模块
modprobe [-lcfr] module_name
-l:列出目前系统所有模块
-c:列出目前在 /lib/modules/`uname -r`/kernel 当中的所有模块完整文件名
-f:强制加载该模块
-r:类似 rmmod, 删除某个模块
insmod
完全由用户自行加载一个完整文件命名的模块,并不会主动分析依赖性
注意必须是完整文件名: /full/path/module_name
删除
rmmod [-fw] module_name
-f:强制将该模块删除,无论是否正被使用
-w:若该模块正在被使用,则 rmmod 会等该模块被使用完毕才删除它
内核模块的额外参数设置 /etc/modprobe.conf
案例:两块网卡 eth0 和 eth1,都要是用模块 ne,为了避免使用同一模块导致网卡的错乱,先找到 eth0 与 eth1 的 I/O 和 IRQ
eth0:I/O(0x300),IRQ=5 eth1:I/O(0x320),IRQ=7
再来做设置

如此 linux 就不会捕获错网卡
Boot Loader : Grub
boot loader 的两个阶段(stage)
Stage 1
执行 boot loader 主程序
主程序必须安装在启动区,即 MBR 或者是 boot sector,并且通常仅安装 boot loader 的最小主程序(由于空间太小:MBR 都才有 446 Bytes)
Stage 2
主程序加载配置文件
第二阶段为通过 boot loader 加载所有配置文件与相关的环境参数文件(包括文件系统定义与主要配置文件 menu.lst),配置文件一般都在 /boot 下面,比如 grub 这个 boot loader 的有关文件就在 /boot/grub 中
grub 的配置文件 /boot/grub/menu.lst
grub 优点
认识与支持较多的文件系统,并且可以使用 grub 的主程序直接在文件系统中查找内核文件名
来看看 /boot/grub 中有些啥?

loader 读取了这些文件系统定义数据后就能够认识文件系统并读取该文件系统内的内核文件
启动的时候可以自行编辑与修改启动设置选项,类似于 bash 的命令模式
可以动态修改配置文件,而不需要在修改配置文件后重新安装 grub,即只要修改完 /boot/grub/menu.lst 里面的设置,在下次启动就生效了
硬盘与分区在 grub 中的代号
硬盘代号以小括号()括起来
硬盘以 hd 表示,后面会接一组数字
以“查找顺序”作为硬盘的编号
第一个查找到的硬盘为 0 号,第二个为 1 号,以此类推
每块硬盘的第一个分区代号 0 ,依序类推
/boot/grub/menu.lst 配置文件

解释一下
grub 的整体设置项目
default=0
默认启动选项,使用第一个启动菜单(title)
这个的设置必须与 title 作为对照,在配置文件中有几个 title ,启动的时候就会有几个菜单可以选择,grub 的起始号码为 0 故 default=0 代表使用第一个 title 选项来启动的意思,default 意思是如果在读秒时间结束前没有按键,grub 默认使用此 title 选项(在此为 0 号)来启动
timeout=5
若 5 秒内未动键盘则使用默认菜单启动
设置读秒时间
timeout=0 代表直接使用 default 值进行启动而不读秒
timeout=-1 代表直接进入菜单而不读秒
splashimage=(hd0,0)/grub/splash.xpm.gz
后台图示所在文件
hiddenmenu
读秒期间是否显示出完整的菜单界面(默认隐藏)
如果想显示菜单就把这个设置值批注掉
显示启动的设置项目
title CentOS (2.6.18-128.el5) root (hd0,0) kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet initrd /initrd-2.6.18-128.el5.img
第一个菜单的内容
启动的时候,可以直接指定内核文件启动或者将 boot loader 控制权转移到下一个 loader(此过程称为 chain loader),每个 title 后面接的是该启动项目名称的显示,即在菜单出现时菜单上面的名称而已
title 设置方式一:直接指定内核启动
样式 1:先指定内核文件放置的分区,再读取文件(目录树),最后再加入文件的实际文件名与路径(Kernel 与 initrd)
root
代表的是内核文件放置的那个分区,而不是根目录的意思,切记!
Kernel
接在这后面的是内核文件名,在文件名后面接的则是内核的参数
由于启动过程中需要挂载根目录,因此 kernel 后面接的 root=LABEL=/ 指的是linux 的根目录在哪个分区的意思
initrd
就是 initrd 制作出的 RAM Disk 的文件名
样式 2:直接指定分区与文件名,不需要额外指定内核文件所在设备代号
kernel (hd0,0) /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet initrd (hd0,0) /initrd-2.6.18-128.el5.img
title 设置方式二:利用 chain loader 的方式转交控制权
一般只需要设置两个
一个是预计要前往的 boot sector 所在的分区代号
一个是设置 chain loader 在那个分区的 boot sector(第一扇区)上
example 多重引导 window 与 linux 添加 title

由于windows 的系统盘需要设置为活动(active)状态,并且 grub 默认会去检验该分区的文件系统,故做点设置

initrd 的重要性与创建 initrd 文件
initrd
目的
提供启动过程中所需要的最重要的内核模块以让系统启动过程可以顺利完成
需要它的原因
因为内核模块放置于 /lib/modules/$(uname -r)/kernel/ 当中,这些模块必须要根目录被挂载时才能够被读取,但如果内核本身不具备磁盘的驱动程序时,就无法挂载根目录,也就没法取得驱动程序
它做的工作
initrd 可以将 /lib/modules/`uname -r`/kernel/ 内启动过程中一定需要的模块打包成一个文件(文件名就是 initrd),然后在启动时通过主机的 INT 13 硬件功能将该文件读出来解压缩,并且 initrd 在内存中会仿真成为根目录,由于此虚拟文件系统(Initial RAM Disk)主要包含磁盘和文件系统的模块,因此内核最后就能够认识实际的磁盘,也就能进行实际根目录的挂载
啥时候需要它?
根目录所在磁盘为 SATA、USB 或 SCSI 等连接接口
根目录所在文件系统为 LVM、RAID 等特殊格式
根目录所在文件系统为非传统 linux "认识" 的文件系统时
其他必须要在内核加载时提供的模块
创建 initrd 文件
一般各 distribution 提供的内核都会附上 initrd 文件,如果由特殊需求需要重制 initrd 才会使用下面的命令
mkinitrd [-v] [--with=模块名称] initrd文件名 内核版本
-v:显示 mkinitrd 的运行过程
--with=模块名称:就是模块的名字(.ko 前面那个),不需要文件名
initrd文件名:所要创建的 initrd 文件名
内核版本:某一个内核的版本
以 mkinitrd 默认功能创建一个 initrd 虚拟磁盘文件

加入 8139too 这个模块

内核功能中的 vga 设置
如何调整 tty1~tty6 终端机的分辨率(80*24)
前提
内核必须支持 FRAMEBUFFER_CONSOLE 这个内核功能参数才行
怎么确定支不支持?
grep 'FRAMEBUFFER_CONSOLE' /boot/config-$(uname -r)

参考设置值
将终端机屏幕分辨率调整为 1024*768,颜色深度为 15 bit 色

BIOS 无法读取大硬盘的问题
系统使用 DVD 启动安装时,可以顺利安装好 linux ,但第一次硬盘启动时,屏幕黑漆漆,且出现 grub> 字样而无法进入 linux 系统
原因
BIOS 无法读取大容量磁盘内的 kernel 与 initrd 文件
解决方法
让 kernel 与 initrd 文件放置在大容量磁盘的最前面,因为 BIOS 至少可以读到大磁盘的 1024 柱面的数据,因此就能够读取内核与虚拟文件系统的文件
新建 /boot 独立分区,并将 /boot 分区放置到最前面
保密 menu.lst
防止 menu.lst 在启动过程中被篡改,同时给某个菜单加把锁,解锁后该菜单才能被加载执行
创建加密密码
grub-md5-crypt

实现
vim /boot/grub/menu.lst
在 grub 的整体设置项目中加密码项,在要上锁的菜单 title 的第一行加锁就行

启动过程的问题解决
忘记 root 密码的解决之道
单用户维护模式进入系统重设密码
因为在启动流程中,若强制内核进入 run level 1 默认不需要密码即可取得一个 root 的 shell 来救援
操作
重启系统
启动进入 grub 菜单后,在要进入的菜单上按 e 进入详细设置
将光标移动到 kernel 上方并按 e 进入编辑界面
在 内核项最后添加 single
按下 enter 并按 b 就能够进入单用户维护模式
进入单用户维护模式后,以 passwd 命令重建 root 密码

init 配置文件错误
根据启动流程 run level 0~run level 6 都会读取 /etc/inittab 配置文件,那么 single mode (run level 1)同样需要读取 /etc/inittab 来进行开机,此时就无法进入单用户维护模式
怎么办?
既然默认的 init 无法执行,就直接告诉内核不要执行 init ,改调用 bash ,从而略过 init
同样进入 grub 后,grub edit

指定内核调用的第一个进程 init 变成了 /bin/bash,因此 /sbin/init 就不会被执行
进入系统后此时虽然可以利用 root 取得 bash 来工作,但此时除了根目录外,其他目录都未挂载且根目录被挂载为只读模式

执行命令
mount -o remount,rw /
将根目录重新挂载成可读写
mount -a
参考 /etc/fstab 的内容重新挂载文件系统

救援工作完毕须得重启·,使用 reboot 命令

因文件系统错误而无法启动
checking filesystems fsck.ext3 .......... ............. Give root password for maintenance (or type Control-D to continue):
输入 root 密码取得 bash,并以 mount -o remount,rw / 将根目录挂载成可读写后继续后续处理
造成这种界面可能原因除了 /etc/fstab 编辑错误外,若主机不正常关机也可能导致文件系统不一致的情况,也有可能会出现相同的问题,fsck 那行告知其实是 /dev/md0 出错,那就利用 fsck 去检测 /dev/md0 ,漫长等待后,等系统发现错误并出现 clear[Y/N] ,输入 Y
利用 chroot 切换到另外一块硬盘工作
三个 linux 系统在同一台主机上,若第一个 linux 系统无法进入,那么可以启动第二个 linux 系统,在第二个 linux 系统下将第一个 linux 挂载起来,用 chroot 变换到第一个 linux ,既能够进入到第一个 linux 去处理工作了
同样可以将Linux 硬盘拔到另一台linux主机上去,然后利用 chroot 来切换,以处理硬盘问题
chapter 21 系统设置工具(网络与打印机)与硬件检测
setup 系统设置工具
Red Hat 系列都有哟!
直接执行 setup 命令
LANG=en_US

LANG=zh_CN.UTF-8

硬件数据收集与驱动及 lm_sensors
硬件数据的收集与分析
查看内核所检测到的硬件信息命令
fdisk
fdisk -l
列出分区表
chapter 8
hdparm
查看硬盘信息与测试读写速度
chapter 8
dmesg
产看内存运行过程中所显示的各项信息记录
chapter 17
vmstat
分析系统(CPU/RAM/IO)目前的状态
chapter 17
lspci
列出整个 PC 系统的 PCI 接口设备
lspci [-vvn]
-v:显示更多的 PCI 接口的详细信息
-vv:比 -v 还要详细的信息
-n:直接查看 PCI 的 ID 而不是厂商名称
lsusb
列出目前系统上面各个 USB 端口的状态与连接的 usb 设备
lsusb [-t]
-t:使用类似树状目录来显示各个 USB 端口的相关性
iostat
与 vmstat 类似,可实时列出整个 CPU 与接口设备的 I/O 状态
iostat [ -c | -d ] [ -k | -m ] [-t] [ 间隔秒数 ] [ 检测次数 ]
-c:仅显示 CPU 状态
-d:仅显示存储设备的状态,不可与 -c 一起用
-k:默认显示的是 block, 可以改成 KB 的大小来显示
-m:与 -k 类似,只是以 MB 的单位来显示结果
-t:显示日期出来

驱动 USB 设备
USB (Universal Serial Bus)
96 年 version 1.0
12 Mbit/s
2000 年 version 2.0
480 Mbit/s
08 年 version 3.0
比 2.0 快 10 倍
USB 的芯片版本
OHCI (Open Host Controller Interface)
UHCI(Universal Host Controller Interface)
EHCI(Enahnced Host Controller Interface)
USB 2.0 在 Linux 上都以它来驱动

启动 U 盘
磁盘代号
/dev/sd[a-p]
手动加载 usb-storage 驱动模块
modprobe usb-storage
fdisk -l 查看识别与否
mount 挂载上来
启动 USB 打印机
使用 lm_sensors 取得温度、电压等信息
lm_sensors 主要依据主板芯片组的型号,带入相关模块后再检测温度、电压等信息
检测主板型号
sensors-detect
主板芯片组检测程序

利用 sensors 检测温度、电压等硬件参数
sensors
chapter 22 软件安装 源码与 Tarball
相关概念
开放源码、编译程序与可执行文件
linux 系统中,一个文件能否被执行看的是有没有可执行的那个权限(x),不过 Linux 系统中真正识别的可执行文件其实是二进制文件
比如 /usr/bin/passwd,/bin/touch 等文件就是二进制程序代码
file 命令
可以通过它来判断一个文件是否为二进制文件
如果是二进制程序并且可执行,则会显示可执行文件类(ELF 32-bit LSB executable),同时会说明是否使用共享库(shared libs)
如果是一般的 script ,那就会显示出 text executables

概要
开放源码
就是程序代码,写给人看的程序语言,但机器不认识,无法执行
编译程序
将程序代码转译成机器看得懂的语言
可执行文件
经过编译程序变成二进制程序后机器看得懂所以可以执行的文件
函数库
类似于子程序的角色,可以被调用来执行的一段功能函数
make 与 configure
step 1
检测操作环境
检测什么?
是否有合适的编译程序可以编译本软件的程序代码
是否已经存在本软件所需要的函数库或其他需要的相关软件
操作系统平台是否适合本软件,包括 linux 的内核版本
内核的头定义文件(header include)是否存在
怎么检测?
使用检测程序
configure
通过 configure 检测操作环境生成 makefile 规则文件
makefile 记录了源码如何编译的详细信息
step 2
编译
怎么编译?
按照 makefile 这个规则文件编译
谁来做?
make 程序
执行 make ,make 会在当前目录下寻找 makefile
通过 make 按照 configure 生成的 makefile 来编译
Tarball 软件
将软件的所有源码文件先以 tar 打包,再以压缩技术压缩,通常以 gzip 来压缩,故 tarball 文件一般的扩展名就会成 *.tar.gz 或者简写 *.tgz
若使用压缩率较佳的 bzip2 来压缩,则 tarball 文件名又会成 *.tar.bz2 之类的
Tarball 软件包经解压缩后内容
源代码文件
检测程序(可能是 configure 或 config 等文件名)
本软件简易说明与安装说明(INSTALL 或 README)
如何安装与升级软件
两种方式
直接以源码通过编译来安装与升级
直接以编译好的二进制程序来安装与升级
这种机制在各 distribution 中的使用
Red Hat 系统(含 Fedora/CentOS 系列)
RPM 与 yum
Debian
dpkg 与 APT
Tarball 软件的安装基本流程
将 Tarball 由厂商的网页下载下来
将 Tarball 解压缩,生成很多的源码文件
开始以 gcc 进行源码的编译(生成目标文件 Object file,扩展名 *.o)
然后以 gcc 进行函数库、主程序、子程序的链接,以形成主要的二进制文件
只要自己主机上面安装了 gcc 和 make,那么这两步就可以通过 make 命令完成
将上述二进制文件以及相关的配置文件安装到自己主机上
gcc 简易用法
gcc -c file
仅将源码文件编译成目标文件,并不做链接
此时会生成目标文件 file.o
gcc -o newfile file
将编译结果文件重命名,-o 后面接的是要输出的 binary file 文件名
gcc file -lm -L/usr/lib -I/usr/include
将链接的函数库及香瓜路径加入
-lm
-l:是加入某个函数库(library)的意思
-m:则是 libm.so huo libm.a 这个函数库文件,其中 lib 与 扩展名 .a 或 .so 不需要写
-L/path
path 就是要去搜索相关函数库的路径
-I/path
这个 path 就是 include 文件所在目录
用 make 进行宏编译
make 的优点
简化编译时所需要执行的命令
若在编译完成后,修改了某个源码文件,则 make 仅会针对被修改了的文件进行编译,其他的目标文件不会被更改
最后可以按照相依性来更新执行文件
makefile 的基本语法与变量
目标(target): 目标文件1 目标文件2 <tab>gcc -o 欲创建的可执行文件 目标文件1 目标文件2
目标(target)就是想要建立的信息
目标文件就是具有相关性的 Object files
建立可执行文件的语法就是以 tab 按键开头的那行,特别注意!!命令行必须以 tab 按键作为开头
规则
在 makefile 中,# 代表批注
<tab>需要在命令行的第一个字符
目标(target)与相关文件(就是目标文件)之间以冒号(:)隔开
两个目标
main
make main
编译 main 程序
clean
make clean
直接清除掉所有的目标文件与可执行文件
先清除目标文件再编译 main 程序
make clean main
变量
与 bash shell 语法不同
变量与变量之间以 "=" 隔开,同时两边可以有空格
变量左边不可以有<tab>
变量与变量内容在 "=" 两边,不能有":"
在习惯上,变量最好以大写字母为主
运用变量时,以 ${变量} 或 $(变量) 使用
在该 shell 的环境变量可以被套用
在命令行模式也可以定义变量
环境变量
因为 gcc 在编译的时候会主动去读取 CFLAGS 这个环境变量,所以,可以直接在 shell 定义出这个变量,也可以在 makefile 文件里面定义,更可以在命令列当中定义
取用规则
make 命令行后面加上的环境变量为第一优先
makefile 里面指定的环境变量为第二优先
shell 原本具有的环境变量第三优先
特殊变量
$@
代表目前的目标(target)
Tarball 的管理与建议
使用源码管理软件需要的基础软件
编译软件 gcc
make 及 autoconfig 等软件
需要Kernel 提供的 Library 以及相关的 Iiclude 文件
在Red Hat 系统当中,这个内核相关的功能通常都是被包含在 kernel-source 或 kernel-header 这些软件当中,记得要安装哟!
yum 软件组安装功能
安装 gcc 等软件开发工具
yum groupinstall "Development Tools"
若待安装的软件需要图形接口支持
yum groupinstall "X Software Development"
若安装的软件太旧,可能需要
yum groupinstall "Legacy Software Develpoment"
Tarball 安装基本步骤
取得源文件
将 tarball 文件在 /usr/local/src 目录下解压缩
取得步骤流程
进入解压缩后的目录,查阅 INSTALL 与 README (很重要的步骤)
相关属性软件安装
以自动检测程序(configure 或 config)检测操作环境,并建立 Makefile 文件
编译
以 make 这个程序并使用该目录下的 Makefile 作为它的参数配置文件,来进行 make(编译或其他)的操作
安装
以 make 这个程序,并以 Makefile 这个参数配置文件,依据 install 这个目标(target)的指定安装到正确的路径
一般 Tarball 软件安装的建议事项
默认情况下,原本linux distribution 发布安装的软件大多在 /usr 里面,用户自行安装的软件则建议放置在 /usr/local 下,至于源码(Tarball)则建议放在 /usr/local/src 下面
用 Apache 说事!
默认的安装软件的路径会有哪些?
/etc/httpd
配置文件
/usr/lib
函数库
/usr/bin
可执行文件
/usr/share/man
在线帮助文档
如果以 tarball 来安装且放在默认的 /usr/local 里面,由于 /usr/local 原本就默认了这几个目录,所以数据会被放置成这样
/usr/local/etc
/usr/local/bin
/usr/local/lib
/usr/local/man
如果所有的自己安装的软件都选择在这个默认路径下安装,那么所有软件的文件都将放置在这4个目录中,将来删除升级时就很难追查文件源
如果安装时选择一个单独的目录,(为apache单独建一个apache目录)数据就会放置成这样
/usr/local/apache/etc
/usr/local/apache/bin
/usr/local/apache/lib
/usr/local/apache/man
单一软件的文件在同一个目录下,移除该软件就简单多了
如此安装唯一要注意的就是需要设置环境变量和 man page 设置
需要将 /usr/local/apache/bin 加入 PATH 中或者利用绝对路径执行 apache 的命令
/usr/local/apache/man 也需要加入 man page 搜索路径中
即 vim /etc/man.config 在 40~50 行左右处添加 MANPATH /usr/local/apache/man
总的来说
最好将 tarball 的原始数据解压缩到 /usr/local/src 中
安装时,最好安装到 /usr/local 这个默认路径
考虑将来的反安装,最好可以将每个软件单独安装在 /usr/local 下面
为安装到单独目录的软件的 man page 加入 man path 搜索
command
cd /usr/local/src
tar -zxvf tarball绝对路径
./configure --help | more
查询可用参数有哪些
--prefix=/path 比较重要
--prefix 后面接的路径表示这个软件将来要安装到哪个目录去,若没指定该参数,则默认参数就是 /usr/local
make clean; make
make check
make install
利用 patch 更新源码
先要查看补丁文件确定在升级时需不需要拿掉多余的目录,再以 patch -pN < patch_file 来升级
更新完源码软件并没有更新,还需要将该软件进行编译安装才行
make clean;make
make install
example
源码文件

补丁文件

查看补丁文件

diff 那行代表使用 diff 比较时被比较的两个文件所在路径,那么在升级时我就需要把 main-0.2/ 这层目录拿掉,因为源码文件在 main-0.1这个目录下,也不存在 main-0.2 这个目录,只是在当前的目录进行更新
执行对源码的更新

函数库管理
依函数库被使用的类型分类
静态(static)函数库
特点
扩展名
.a
编译行为
这类函数库在编译的时候会直接整合到执行程序当中所以利用静态函数库编译成的文件较大
独立执行状态
编译成功的可执行文件可以独立执行
升级难易度
不容易
函数库被整合到可执行文件中,若函数库要升级,整个可执行文件都需要重新编译才能将新的函数库整合进去
动态(dynamic)函数库
特点
扩展名
.so
编译行为
这类函数库在编译的时候,在程序内只有一个指向的位置,并不整合进程序中,当执行程序需要使用到函数库的机制时程序才会去读取函数库来使用,故可执行文件比较小
独立执行状态
编译成功的可执行程序不能独立执行!首先函数库文件要存在,其次函数库所在目录也不能改变
升级难易度
较容易
函数库升级时,可执行文件不需要重新编译
绝大多数函数库位置
usr/lib、/lib
ldconfig 与 /etc/Id.so.conf
将常用动态函数库先加载进内存(缓存 cache)中,增进动态函数库的读取速度
如何做?
首先必须要在/etc/ld.so.conf 中写下想要读入高速缓存当中的动态函数库所在的目录
接下来就是利用 ldconfig 这个可执行文件将 /etc/ld.so.conf 的数据读入缓存当中,同时也将数据记录一份在 /etc/ld.so.cache 这个文件当中
使用 ldconfig (是小写的L,ldconfig)来判断动态函数库的链接信息
ldconfig [-f conf] [-C cache]
-f conf:conf 指的是某个文件名,意思是使用 conf 作为 libarary 函数库的取得路径,而不以 /etc/ld.so.conf 为默认值
-C cache:cache 指的是某个文件名,意思是使用 cache 作为缓存暂存的函数库资料,而不以 /etc/ld.so.cache 为默认值
ldconfig [-p]
-p:列出目前的所有函数库数据内容(/etc/ld.so.cache 内的数据)
example
将 MySQL 数据库的的相关函数库(位置:/usr/lib/mysql)读入缓存中以加快函数库读取效率
vi /etc/ld.so.conf
include ld.so.conf.d/*.conf /usr/lib/mysql
在执行 ldconfig
程序的动态函数库解析 ldd
ldd
判断某个可执行的二进制文件含有哪些动态函数库
ldd [-vdr] [filename]
-v:列出所有内容信息
-d:重新将数据有丢失的 link 点显示出来
-r:将 ELF 有关的错误内容显示出来

检验软件正确性
文件指纹
md5sum
md5sum [ -btc ] filename
-b:使用二进制的读取方式,默认为 Windows/DOS 文件类型的读取方式
-c:检验文件指纹
-t:以文本类型来读取文件指纹
md5sum [ --status | --warn ] --check filename
sha1sum
参数与 md5sum 一样用法
增加文件系统的安全性
给文件新建指纹数据库(就是 使用 md5sum 检查一次,将该文件指纹记录下来,然后经常以 shell script 的方式由程序自行来检查指纹表是否不同了)
chapter 23 软件安装:RPM、SRPM 与 YUM 功能
RPM
软件管理器
Red Hat(Fedora/CentOS/SuSE)
RPM
Debian (B2D/Ubuntu)
dpkg
RPM 与 SRPM
软件信息
软件版本、适用平台、编译发布次数等
e.g:rp-pppoe-3.1-5.i386.rpm
软件名称
rp-pppoe
版本信息
3.1
主版本
3
次版本
1
发布版本次数
5
适合的硬件平台
.i386
操作硬件平台
扩展名
.rpm
RPM 软件管理程序 rpm
RPM 默认安装路径
RPM 安装(install)
rpm -ivh package1.rpm package2.rpm
-i:install 的意思
-v:查看更详细的安装信息界面
-h:以安装信息栏显示安装进度
同时安装多个软件可以直接接在后面,空格隔开
RPM 升级与更新
rpm -Uvh package.rpm
后面接的软件即使没有安装过,则系统将直接予以安装,若后面接的软件由安装过旧版则系统自动更新至新版
rpm -Fvh package.rpm
如果后面接的软件并未安装到你的 linux 系统上,则该软件不会被安装,即只有已经安装过的软件才会被升级
RPM 查询(query)
查询已安装软件的信息
rpm -qa
-qa:列出所有的已经安装在本机 linux 系统上面的所有软件名称
-q:仅查询,后面接的软件名称是否有安装
rpm -q[ licdR ] 已安装的软件名称
-ql:列出该软件所有的文件与目录所在完整的文件名(list)
-qi:列出该软件的详细信息,包含开发商、版本与说明等
-qc:列出该软件的所有设置文件(找出在 /etc/ 下面的文件名而已)
-qd:列出该软件的所有帮助文件(找出与 man 有关的文件而已)
-qR:列出与该软件有关的依赖软件所含的文件(Required)
rpm -qf 存在于系统上的某个文件名
-qf:由后面接的文件名称找出该文件属于哪一个已经安装的软件
这部分的信息都是由 /var/lib/rpm 所提供,查询的也是这个目录下的数据库文件
查询某个 RPM 文件内含有的信息
rpm -qp[ licdR ] 未安装的某个文件名称
RPM 验证与数字证书(Verify/Signature)
验证(Verify)
使用 /var/lib/rpm 下面的数据库内容与目前 linux 系统的环境下的所有软件文件做比较看看“某些不正常”到底是哪些文件被不小心修改了
rpm -V 已安装的软件名称
后面加的是软件名称,若该软件所含的文件被改动过才会列出来
rpm -Va
列出目前系统上面所有可能被改动过的文件
rpm -Vp 某个 RPM 文件的文件名
后面加的是文件名称,列出该软件内可能被改动过的文件
rpm -Vf 在系统上面的某个文件
列出某个文件是否被改动过
验证无显示结果就是最好的结果,如果有显示结果,那么就可以看看到底文件被改动什么?
显示结果的第一个字段代表改动项,含有 8 个代表内容
S
file Size differs,代表文件容量大小是否被改动过,显示 S 代表被改动过,显示 . 表示没改动过
M
Mode differs,文件的类型或文件的属性(rwx)是否被改动
5
MD5 sum differs,若显示 5 代表 MD5指纹码已经不同了
D
Device major/minor number mis-match,设备的主/次代码已经改变
L
readLink(2) path mis-match,Link 路径已被改变
U
User ownership differs,文件的所有者已被改变
G
Group ownership differs,文件的所属用户组已被改变
T
mTime differs,文件的创建时间已被改变
显示的第二个字段代表的是文件类型
显示 c,代表设置文件(config file)
显示 d,代表文档(documentation)
显示 g,代表“鬼”文件(ghost file)
显示 l,代表授权文件(license file)
显示 r,代表自述文件(read me)
当一个设置文件的所有信息都被改变,那么使用 rpm -V 验证该文件就会显示成:SM5DLUGT c filename

数字证书
安装 RPM 文件时
首先必须安装原厂发布的公钥文件
实际安装原厂的 RPM 软件时,rpm 命令会去读取 RPM 文件的证书信息并与本机系统内的证书信息比较
若证书相同则予以安装,若找不到证书信息则给予警告且停止安装
CentOS 的数字证书位置

安装 CentOS 数字证书
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
不同版本GPG 金钥文件放置位置可能不同,不过文件名大多以 GPG-KEY 来说明的
卸载 RPM 与重建数据库(erase/rebuilddb)
卸载
rpm -e package
不过解安装的过程一定要由最上层往下解除
重建数据库
rpm --rebuilddb
SRPM 的使用
命令使用
rpmbuild
利用默认值安装 SRPM 文件
rpmbuild --rebuild
--rebuild 参数会将后面的 SRPM 进行编译与打包操作,最后生成 RPM 的文件,但是产生的 RPM 文件并没有安装到系统上,当使用 --rebuild 时,通常会看到这么一行:Wrote:/usr/src/redhat/RPMS/i386/pkgname.i386.rpm,这个就是编译完成的 RPM 包,用这个来安装
一切正常最终显示 exit 0
rpmbuild --recompile
--recompile 使用这个参数会直接编译、打包并且安装
SRPM 使用到的路径与需要的软件
路径
都在 /usr/src 这个目录里面
/usr/src/redhat/SPECS
这个目录当中放置的是该软件的设置文件,例如该软件的信息参数、设置项目等
/usr/src/redhat/SOURCES
这个目录中放置的是该软件的源文件(*tar.gz 的文件)以及 config 这个设置文件
/usr/src/redhat/BUILD
编译的过程当中,有些暂存的数据就会放置到这个目录
/usr/src/redhat/RPMS
经过编译并且顺利编译成功后,将打包完成的文件放置在这个目录中,里面含有 i386,i586,i686,norch等次目录
/usr/src/redhat/SRPMS
与 RPMS 类似,这里放置就是 SRPM 封装的文件
/tmp
在编译过程中,可能会发生不明的错误或者设置的错误,这时就会在 /tmp 下面生成一个相对应的错误问文档,可用来排错
需要的软件
既然是重新编译当然是 gcc,make 与其相关的程序
设置文件的主要内容(*.spec)
这个文件长啥样?
基本规则
整个文件的开头以 Summary 为开始,这部分的设置都是最基础的说明内容
然后每个不同段落之间都是以 % 来作为开头,譬如 %prep 与 %install
看看它的设置段落
系统整体信息方面的内容
必须要存在的参数项目
Summary
代表本软件的主要说明
Name
代表本软件的软件名称(最终 RPM 文件的文件名构成之一)
Version
本软件版本(也会是 RPM 文件名的构成之一)
Release
代表该软件打包的次数说明(也是 RPM 文件名构成之一)
License
代表本软件的授权模式,比如 GPL
Group
这个软件的开发团体
Url
源代码的主要官方网站
Source
这个软件的来源,如果是网络上下载的就会由网络来源地址,若是开发商自己提供的原始文件数据就不是网络来源地址
Patch
就是作为补丁的 patch file
BuildRoot
设置编译时 该使用哪个目录来临时存放中间文件(如编译过程中的目标文件和链接文件等)
ExclusiveArch
这个说明该软件适合安装的硬件,通常是 i386
可使用的额外参数设置值
Requires
如果该软件还需要其他的软件支持,那么这里必须写上
Prereq
这个软件需要的前驱程序,这里指的是程序,而 Requires 指的是软件
BuildRequires
编译过程中所需要的软件 Requires 指的是安装是需要检查的,因为与实际运行有关,而 BuildRequires 指的是编译时所需要的软件,只有在 SRPM 编译成为 RPM 时才会检查的项目
Packager
该软件经由谁打包
Vender
开发的厂商
根据上面的设置,最终的文件名会是
{Name}-{Version}-{Release}.{ExclusiveArch}.rpm
其他段落
%description
对软件的简短说明,必需
%prep
指的就是尚未进行设置或安装之前你要编译完成的 RPM 帮忙事先做的事情,它的工作事项主要有
进行软件补丁(patch)等相关工作
寻找软件所需要的目录是否存在,确认用的
事先新建软件所需要的目录,或者事先需要进行的任务
如果待安装的 linux 系统内已经有安装的时候可能会被覆盖掉的文件时,那么就需要进行备份的工作(backup)
%setup
该选项就是进行类似解压缩之类的工作,必需项,不然 tarball 源代码无法被解压缩
%build
创建,这个段落就是在描述怎么编译的,./configure、make 等选项
%install
安装
%clean
编译安装完毕,需要将 BuildRoot 内的暂存数据删除
%files
软件安装的文件都需要写到这里,这里也可以指定每个文件的类型,包括文档(%doc后面接的)与设置文件(%config 后面接的)
%changelog
这个选项主要记录该软件曾经的更新记录,星号(*)后面应该以时间、修改者、email 与软件版本来说明,减号(-)后面则是要做的详细说明
SRPM 的编译命令参数(-ba/-bb)
rpmbuild -ba xxx.spec
编译并同时生成 RPM 与 SRPM 文件
rpmbuild -bb xxx.spec
仅编译成 RPM 文件
不使用 SRPM 的默认参数而自己修改参数后再重新编译的实现
首先将 SRPM 内的文件放到 /usr/src/redhat/内的相关目录去
使用 rpm -i SRPM文件
无任何显示,只是会将 SRPM 的文件解开后放置到 /usr/src/redhat/下面
找到重要的设置文件
.spec 的文件
设置自己想要修改的参数项
执行编译命令
rpmbuild -ba/bb
执行了这个命令,系统是怎么处理的呢?
首先进入BUILD 目录(/usr/src/redhat/BUILD),依照 *.spec 文件内的 Name 与 Version 定义出工作的目录名称创建该目录并进入
在新建的目录中,针对 SOURCE 下的源文件,也就是 *.spec 里面 Sources 设置的那个文件以 tar 进行解压缩
再来开始 %build 及 %install 的设置与编译
最后将完成打包的文件放到该放置的地方去,如果规定的硬件是在 i386 的系统,那么最终编译成功的 *.i386.rpm 文件就会被放置到 /usr/src/redhat/RPMS/i386 中
YUM 在线升级机制
利用 yum 进行查询、安装、升级与删除功能
查询功能
yum [ list | info | search | providers | whatproviders ]参数
yum [option] [查询工作项目] [相关参数]
option,主要参数有
-y:当 yum 要等待用户输入时,这个选项可以自动提供 yes 的响应
--installroot=/some/path:将该软件安装在 /some/path 中而不使用默认路径
查询工作项目 相关参数 有
search
搜索某个软件名称或者是描述的重要关键字
list
列出目前 yum 所管理的所有软件名称与版本,类似 rpm -qa
info
同 list,不过有点类似 rpm -qai
providers
从文件去搜索软件,类似于 rpm -qf
安装、升级功能
yum [ install | update ] 软件
install:后面接要安装的软件
update:后面接要升级的软件,若要整个系统都升级,直接 update
删除功能
yum [remove] 软件

yum 的设置文件
/etc/yum.repos.d/CentOS-Base.repo
[base]
代表容器的名字,可随意取,但不能重复
name=
只是说明这个容器的意义
mirrorlist=
列出这个容器可以使用的镜像站点
baseurl=
这个最重要,后面接的就是容器的实际网址,mirrorlist 是由 yum 程序自行去找镜像站点,baseurl则是指定一个固定的容器网址
enable=1
就是让这个容器启动,如果不想启动可设置为 enable=0
gpgcheck=1
指定是否需要查阅 RPM 内的数字证书
gpgkey=
就是数字证书的公钥文件在哪
清除本机上面的旧数据
yum clean [ packages | headers | all ]
packages:将已下载的软件文件删除
headers:将下载的软件文件头删除
all:将所有容器数据都删除
yum 软件组功能
yum [组功能] [软件组]
组功能参数
grouplist
列出所有可使用的组列表,例如 Developement Tools
groupinfo
后面接 group name,则可了解该 group 内含的所有组名称
groupinstall
可以安装一整组的软件
groupremove
删除某个组
管理的选择
优先选择原厂的 RPM 功能
选择官方网站发布的 RPM 或者是提供的容器网址
利用 Tarball 安装特殊的软件
利用 Tarball 测试新版软件
chapter 24 X Window 设置介绍
chapter 25 Linux 备份策略
Linux 备份的数据
系统基本设置信息
操作系统本身需要备份的文件
主要跟账号与系统配置文件有关
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc 整个目录
/home
/var/spool/mail
/boot
/root
网络服务的内容数据
软件本身的配置文件
/etc 整个目录,/usr/local 整个目录
软件服务提供的数据
WWW
/var/www 整个目录 或 /srv/www 整个目录及系统的用户主文件夹
MySQL
/var/lib/mysql 整个目录
其他在 Linux 主机上提供服务的数据库文件
推荐需要备份的目录
/boot
/etc
/home
/root
/usr/local
/var
备份设备选择
远程备份系统
存储设备
备份种类、频率与工具选择
备份有哪些方式
完整备份的增量备份
指在系统进行完第一次完整备份后,经过一段时间的运行,比较系统与备份文件之间的差异,仅备份有差异的文件而已,而第二次增量备份则与第一次增量备份的数据比较,也仅备份有差异的数据
子主题
优点
备份数据量小且快速,备份效率高
缺点
还原麻烦,得一步一步还原
使用的备份软件
完整备份常用的工具
dd
可以直接读取磁盘扇区(sector)而不理会文件系统
缺点:
太慢
cpio
能够备份所有文件名,需要配合 find 或其他找文件名的命令
这两个需要额外使用脚本程序来处理
dump/restore
可以直接进行增量备份
example
dd if=/dev/sda of=/dev/sdb
将 /dev/sda 备份到完全一样的 /dev/sdb 硬盘上
find / -print | cpio -covB > /dev/st0
使用 cpio 来备份整个系统,存储设备为磁带机
cpio -iduv < /dev/st0
还原
dump -0u -f /backupdata/home.dump /home
使用 dump 将独立文件系统 /home 完整备份到用来备份的独立文件系统 /backupdata 上面
dump -1u -f /backupdata/home/home.dump.1 /home
第一次进行增量备份
tar --exclude /proc --exclude /mnt --exclude /tmp --exclude /backupdata -jcvp -f /backupdata/system.tar.bz2 /
使用 tar 将不必要的 /proc,/mnt,/tmp等目录除外,将整个文件系统全部备份到独立文件系统 /backupdata 上
完整备份的差异备份
差异备份与增量备份有点类似,也需要进行第一次的完整备份。只是差异备份每次的备份都是与原始的完整备份比较的结果
优点
还原快,只需要还原完整备份和最近一次的差异备份就ok
缺点
要使用的磁盘容量较大
使用的备份工具
和增量备份的差不多
rsync 备份
rsync -av 源目录 目标目录
rsync -av /home /backupdata
关键数据备份
使用 tar 分门别类的将各种服务在不同时间备份使用不同的文件名
比如 依据日期来备份mysql数据库
tar -jpcvf mysql.`date +%Y-%m-%d`.tar.bz2 /var/lib/mysql
chapter 26 Linux 内核编译与管理
系统移植
暂时略过!!
makefile 制作出来后,里面会有相当多的目标(target),最常见的就是 install 与 clean,通常 make clean 代表将目标文件清除掉,make 则是将源码进行编译,编译完成的可执行文件与相关的配置文件还在源码所在目录中,最后要进行 make install 来将编译完成的所有内容都安装到正确的路径去才能使用软件!
大部分命令执行方式
./configure
检测环境,makefile 的建立
make clean
清除一下比较妥当,因为不确定源码里面有没有包含上次编译过的目标文件,清一下至少保证新编译出来的是使用自己机器所编译完成的
make
编译,生成可被执行的可执行文件,尚未被安装到预定安装的目录中
make install
最后安装步骤,make 会依据 makefile 文件里面关于 install 的选项将上一步所编译完成的数据安装到默认的目录中,完成安装!