第二章 硬件和设备配置
- 一些命令
lsmod 当前装载的内核模块列表
dmesg 内核日志 - 一些虚拟文件
/proc/meminfo 内存信息
/proc/cpuinfo CUP信息
第三章 Linux 文件系统管理
磁盘识别和分区
磁盘分区
Linux通过不同的设备节点区分各个分区, 节点名字有磁盘名加分区号组成
如驱动器/dev/sda上的第一个分区叫做/dev/sda1- 主引导记录(MBR)
每个磁盘的头512字节, 它包括引导程序和分区表
主引导记录中有固定64字节保留为磁盘分区表, 最多能记录四个分区, 这四个分区叫做主分区 - 主分区
- 扩展分区
可以将主分区作为扩展分区使用, 一旦这样使用后就不能作其他用途. - 逻辑分区
扩展分区中可以建立多个逻辑分区
- 主引导记录(MBR)
使用fdisk分区
- fdisk -l 列出所有已知磁盘分区表
Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 5 40131 de Dell Utility Partition 1 does not end on cylinder boundary. /dev/sda2 * 6 527 4192965 83 Linux /dev/sda3 528 26635 209712510 83 Linux /dev/sda4 45007 60801 126873337+ 5 Extended /dev/sda5 45007 45019 104391 83 Linux /dev/sda6 45020 60801 126768883+ 8e Linux LVM
第一行:磁盘容量500.1GB
第二行:驱动器几何结构, 每个柱面(cylinders)有多个磁头(head), 每个磁头有多个容量为512字节(byte)的块组成. 则每个柱面的容量大约为
512 bytes/head * 255 heads / sector * 63 sectors / cylinder = 8225280 bytes
第三行: 上述计算结果
第四行: 分区表fdisk 列定义
设备(device) 指向分区的设备节点
引导(boot) 标*表示可以引导
开始结束 分区开始和结束的柱面
块 以1kb为单位的分区大小
Id 分区类型(用途)
System Id定义的分区类型的文本名称使用fdisk和使用命令菜单
fdisk /dev/sda
常用fdisk命令
命令 | 功能 |
---|---|
m | 列出命令菜单 |
p | 打印分区表 |
n | 创建新分区 |
d | 删除分区 |
t | 改变分区类型 |
q | 不保存退出 |
w | 保存退出 |
- partprobe 命令可以让内核读取所做的修改
建立和管理文件系统
- 文件系统
- inode
- dentry
- data
- 创建文件系统
- mkfs -t
- mkfs.ext2
- mkfs.ext3
- mkfs.vfat
- mkfs.msdos
- 使用dumpe2fs 查看文件系统
- dumpe2fs /dev/sda4
挂载文件系统
- 挂载文件系统
使用mount命令挂载文件系统
mount /dev/sda4 /dir -t ext2 -o noatime,noexec- 挂载什么设备
- 挂载到哪个目录
- 设备是什么文件系统格式
- 挂载文件系统选项
ro,rw 只读, 读写
(a)sync 同步进行时不需要内核缓冲, 会显著降低磁盘性能
(no)atime 是否维护文件访问时间
(no)dev 文件系统内所有文件都不要解释为设备节点
(no)exec 文件系统内所有文件都不要解释为可执行
(no)suid suid权限是否忽略
使用umount卸载文件系统
umount 设备名或者挂载点- 使用fuser或lsof找到使用文件系统的进程
- fuser -a /home
- lsof /home
/etc/fstab文件
- /etc/fstab 文件语法
列 | 示例 | 任务 |
---|---|---|
1 | /dev/hda6 | 要挂载的设备 |
2 | /home | 挂载点 |
3 | ext3 | 设备上的文件系统 |
4 | defaults | 挂载相关选项列表 |
5 | 0 | dump命令使用它决定在进行备份时是否要将这个分区存档 |
6 | 2 | fsck顺序, 1 保留给跟分区 2 除了根分区外的所有需要检查的分区 0不需检查 |
管理交换空间
- 交换空间
- Linux 中交换空间可以是一个单独的分区或为已经存在的(并且被挂载的)文件系统中的一个文件.
- 监控交换空间
/proc/swaps
/proc/meminfo
- 使用mkswap初始化交换空间
mkswap /dev/sda4
cat /proc/swaps - 使用swapon激活交换空间
swapon /dev/sda4
cat /proc/swaps - 使用swapoff停用交换空间
swapoff /dev/sda4 - 在/etc/fstab中定义交换空间
/dev/sda4 swap swap defaults 0 0 - 使用交换文件
- dd if=/dev/zero of=/tmp/swap bs=1024k count=256
- mkswap /tmp/swap
- swapon /tmp/swap
其他文件系统命令
- e2label
显示或设置文件系统的标签 - 使用fsck修复文件系统(file system check)
- tune2fs
修改已有ext2或ext3文件系统的参数
SELinux: Secure Enhanced Linux
- 启用SELinux
- /etc/sysconfig/selinux
- setenforce
setenforce 0 permissive
setenforce 1 enforcing - getenforce
查看SELinux上下文
- ps -Z
- ls -Z
用户:角色:类型
监控SELinux违规行为
/var/log/messages- 违反规则的进程
- 禁止访问的文件
- 禁止行动的详细信息 sealert -l xxxxx
/var/log/audit/audit.log
- 违反策略的行动
- 引起违规的进程
- 被访问文件
- SELinux上下文和目标文件
修改文件的SELinux上下文
- chcon
第四章 系统初始化和服务
引导程序概述
- BIOS
- POST系统自检
- 初始化键盘/视频设备/I/O端口/串口等
- 移交执行区域到引导程序
- 引导程序
- 内核
- /sbin/init
GRUB引导程序
- 引导程序的功能
- 编写内核命令行
- 必要情况下, 装载虚拟磁盘(initial ram disk)
- 装载并传递控制权给Linux内核
- 引导程序的设计
- stage1
定位装载并把控制权给第二阶段(第一阶段的引导程序在MBR中) - stage2
文件系统中的二进制文件
- stage1
/sbin/init和运行级别
- /sbin/init
内核启动的第一个进程, 跟随系统启动, 并且最后终止, 它负责启动停止和监控其他进程, 它的配置文件是/etc/inittab 运行级别
0 关机
1 单用户模式, 只有root用户能在控制台登录, 不会激活网络接口
2 没有网络文件系统
3 完整的多用户模式
4 本地配置
5 带有X服务器的多用户模式
6 重启/etc/inittab语法
除掉第一行, 都是用:分开的四行- 第一行: 没有意义的双字母标签
- 与本行相关的运行级别列表
- 预定义动作
- 要运行的命令
第三个字段定义的动作
- respawn init启动并监控指定的命令
- wait init在进入相应的运行级别时启动进程, 做其他工作前等待其结束
- ctrlaltdel 在控制台按下CTRL+ALT+DEL时init执行的动作
- powerfail init收到UPS信号时执行的命令
系统初始化和运行级别管理的/etc/inittab配置
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
系统启动时执行脚本/etc/rc.d/rc.sysinit
运行级别每改变一次/etc/rc.d/rc都会重新执行一次
外部事件的/etc/inittab配置
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
/sbin/init和getty
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
管理init
- runlevel命令查看当前运行级别和以前的运行级别
- init q 应用对/etc/inittab的更改
使用shutdown命令关闭机器
shutdown的选项
-h 停止机器后切断电源
-P 关闭电源
-r 重启
-c 取消排队的关机任务
shutdown命令的时间参数
hh:mm 关机发生的绝对时间
+n 关机发生的相对时间, 距离现在n分钟
now = +0
/etc/rc.d/rc.sysinit脚本
- rc : run level control
红帽企业版Linux服务脚本
- 使用相应的运行级调用脚本/etc/rc
- /etc/rc.d/init.d 目录中的服务脚本都是红帽企业版Linux的服务
使用命令 service serviceName command 操控服务 服务脚本命令
- start
- stop
- restart
- status
- reload
- condrestart 如果服务已经运行, 重新启动, 否则什么也不做
服务运行级别和chkconfig
- /etc/rc.d/rcN.d目录下面有一些这样的脚本Lddservice_name
L代表S或K
dd是两位数字
每当运行级别改变时, init就会调用rc脚本, K开头的服务如果在运行, 会用stop调用相应的脚本, S开头的服务会用start调用相应的脚本
数字则提示了这些操作的顺序
chkconfig可以配置这些服务是否启动
本地启动配置
- /etc/rc.local
启动顺序故障排除
- system-config-service可以用来管理服务
添加内核命令行参数 init=/bin/sh 可以启动一个交互式shell
- mount /proc
- mount -o remount,rw /
- mount -a
exit 会kernel panic pid为1的进程退出了
问题处理结束后
- umount -a
- mount -o remount,ro /
- umount /proc
- exec /sbin/init