从源代码安装软件笔记整理
1. 安装C语言开源软件的三个主要步骤
- 解压源代码
- 编译成二进制文件
- 将二进制文件安装到适当的文件夹
2. 解压源代码
常用解压命令
命令格式 | 说明 |
---|---|
gunzip [文件名] |
解压.gz文件 |
gzip [option] [文件名] |
压缩/解压文件 |
bunzip [文件名] |
解压.bz2文件 |
bzip [option] [文件名] |
压缩/解压文件 |
gzip/bzip 选项说明
选项 | 说明 |
---|---|
-d |
解压压缩文件 |
-c |
解压压缩文件到标准输出 |
3. patch命令
用于应用补丁文件
选项 | 说明 |
---|---|
-d 文件夹 |
移动到指定文件夹后处理 |
-p |
修正patch文件内的path: -p0 : 不修正path -p1 : 删除最初的’/’ -p2 : 删除下一级文件夹 |
patch |
应用补丁 |
-C |
测试(不实际应用补丁) |
-R |
取消补丁,恢复到补丁前状态 |
4. 生成Makefile
运行config脚本根据环境配置config文件:
config脚本主要选项
选项 | 说明 |
---|---|
--help |
显示帮助说明 |
--prefix=文件夹 |
指定安装目标的top路径 |
5. 编译和安装
make命令
根据当前文件夹内的Makefile编译源代码
基本格式:
make [option] [目标]
1. 网络设备管理
1.1 网络接口命名规则
接口名称 | 说明 |
---|---|
eth0 |
第一个 Ethernet 接口 |
eth1 |
第二个 Ethernet 接口 |
ppp0 |
第一个 PPP 接口 |
lo |
Loopback 接口 |
1.2 网络设备识别命令
1 | dmesg | grep eth # 查看内核识别的网络设备 |
1.3 网络接口配置命令
1 | ifconfig [-a] [IF名] [参数] |
参数 | 说明 |
---|---|
-a |
显示所有接口 |
IF名 |
指定接口名称 |
IP地址 |
设置 IP 地址 |
netmask |
设置子网掩码 |
up |
激活接口(等价于 ifup ) |
down |
停止接口(等价于 ifdown ) |
示例:
1 | ifconfig eth0 192.168.120.27 netmask 255.255.255.0 up |
1.4 NIC 组合与虚拟网络接口
- NIC 组合:允许将多个物理以太网适配器分组为虚拟网络适配器,提高性能和容错能力。
- MAC 地址设置:在 “交换机独立” 模式下,团队会将 MAC 地址设置为出站流量。
- IP 别名:在同一个网卡上分配不同 IP 地址。
1
ifconfig eth0:0 192.168.0.1 netmask 255.255.255.0 up
2. ARP 协议管理
2.1 ARP 协议简介
ARP (Address Resolution Protocol) 用于将 IP 地址解析为 MAC 地址。
2.2 ARP 命令
1 | arp [option] |
选项 | 说明 |
---|---|
-a [host] |
显示指定主机或全部 ARP 表 |
-f 文件名 |
从文件读取主机:MAC 对应表 |
-n |
显示 IP 地址而非主机名 |
-d [host] |
删除指定主机的 ARP 记录 |
-i [IF名] |
指定接口 |
-s [host] [MAC地址] |
添加主机和 MAC 地址的对应关系 |
示例:
1 | arp -s h001.example.com 00:01:02:03:04:05 |
2.3 ARP 监视工具
arpwatch
:监视网络中的 ARP 活动。
3. 网络管理命令
3.1 Ping 命令
1 | ping [host名或IP] [option] |
选项 | 说明 |
---|---|
-n |
不解析主机名,显示 IP 地址 |
-c 次数 |
发送指定次数的 ICMP 包 |
-i 间隔 |
按指定间隔发送 ICMP 包 |
示例:
1 | ping -c 4 192.168.1.1 |
3.2 Traceroute 命令
1 | traceroute [option] [host名或IP] |
选项 | 说明 |
---|---|
-i [IF] |
指定接口 |
-n |
显示 IP 地址而非主机名 |
3.3 Tcpdump 命令
1 | tcpdump [option] [条件式] |
选项 | 说明 |
---|---|
-i IF名 |
指定监视的接口 |
-s 比特数 |
指定从包中提取的比特数 |
-X |
显示十六进制和 ASCII 文本 |
-n |
不解析 ARP 地址 |
-l |
缓存标准输出 |
-t |
不显示时间 |
-v |
显示详细信息 |
条件式:
port
:指定端口
示例:
1 | tcpdump -nli eth0 port 53 |
3.4 Wireshark
- 图形化网络监视工具。
3.5 Netstat 命令
1 | netstat [option] |
选项 | 说明 |
---|---|
-a |
显示所有 socket |
-c |
每秒刷新 |
-i |
显示接口状态 |
-l |
只显示监听状态的端口 |
-n |
显示地址和端口 |
-p |
显示 PID 和进程 |
-r |
显示路由表 |
-t |
显示 TCP 连接 |
-u |
显示 UDP 连接 |
3.6 IP 命令
1 | ip [option] 操作对象 [命令] [设备] |
选项 | 说明 |
---|---|
-s |
显示状态 |
-r |
解析名称 |
操作对象:
link
:接口详细信息addr
:IP 地址route
:路由表neigh
:ARP 缓存
命令:
show
:显示指定对象add
:设置指定对象的参数
示例:
1 | ip link show eth0 |
4. 路由设置
4.1 Route 命令
1 | route [option] |
选项 | 说明 |
---|---|
-n |
不解析主机名 |
-F |
显示内核路由表 |
-C |
显示内核路由缓存 |
路由表项目:
Destination
:目标网络或主机Gateway
:网关Genmask
:目标子网掩码Flags
:路由状态(U:有效, H:目标主机, G:使用网关, !:无效)Metric
:到达目标的距离Ref
:路由引用数Use
:路径引用次数Iface
:使用的接口
示例:
1 | route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.0.1 |
5. 无线网络设置
5.1 无线规格与安全标准
规格 | 频率 | 传送速度 |
---|---|---|
IEEE 802.11a | 5.2GHz | 54Mbps |
IEEE 802.11b | 2.4GHz | 11Mbps |
IEEE 802.11g | 2.4GHz | 54Mbps |
IEEE 802.11n | 2.4GHz/5GHz | 600Mbps |
IEEE 802.11ac | 5GHz | 433Mbps~7Gbps |
安全标准:
- WEP:使用 RC4 算法,存在漏洞。
- WPA:多种加密技术(TKIP, AES),用户认证由 IEEE 802.1x 等实现。WPA-AES 比 WPA-TKIP 更安全。
5.2 无线接口状态确认
1 | iwconfig [wlanN] [essid ESSID] [key [s:]WEP key] |
示例:
1 | iwconfig wlan0 essid "windsor" |
5.3 获取无线接口信息
1 | iwlist [无线IF] [参数] |
参数 | 说明 |
---|---|
scanning [essid ID] |
显示可接入的热点列表 |
channel |
显示可设置的频道 |
rate |
显示传送速度 |
6. 高级网络设置
6.1 网络相关文件
文件 | 说明 |
---|---|
/etc/hostname |
记录主机名 |
/etc/hosts |
记录主机名、别名和 IP 的对应关系 |
/etc/networks |
记录网络和 IP 的对应关系 |
/etc/nsswitch.conf |
规定信息查找顺序 |
/etc/resolv.conf |
记录 DNS 服务器和域名 |
/etc/sysconfig/network |
网络功能、主机名、默认网关等设置 |
/etc/sysconfig/network-scripts/ |
存放网络接口设置文件 |
/etc/network/interfaces |
Debian 系统的网络接口设置文件 |
6.2 配置文件示例
/etc/sysconfig/network-scripts/ifcfg-eth0:
1 | DEVICE=eth0 |
/etc/network/interfaces (Debian):
1 | auto lo |
7. 网络问题排查
7.1 排查步骤
-
Ping 测试:
1
2ping 172.16.0.1
ping h001.s16.la.net- 如果 IP 能 Ping 通,但主机名失败,可能是 DNS 问题,检查
/etc/resolv.conf
。
- 如果 IP 能 Ping 通,但主机名失败,可能是 DNS 问题,检查
-
局域网连通但无法访问互联网:
- 检查默认网关或路由表:
1
route
- 如果没有默认路由,添加默认网关:
1
route add default gw 172.16.0.1
- 检查默认网关或路由表:
-
网络连接不通:
- 使用
traceroute
或tracepath
查看路径:1
traceroute www.lpi.jp
- 使用
-
网络接口问题:
- 检查网卡状态:
1
ifconfig
- 如果只显示
lo
,启动接口:1
2
3ifup eth0
# 或
ifconfig eth0 up
- 检查网卡状态:
7.2 需要确认的配置文件
文件 | 说明 |
---|---|
/etc/resolv.conf |
DNS 服务器设置 |
/etc/sysconfig/network-scripts/* |
网络接口设置(RHEL/CentOS) |
/etc/network/interfaces |
网络接口设置(Debian) |
/etc/hosts.allow , /etc/hosts.deny |
连接控制 |
补充说明:
- IP 别名:允许在同一个网卡上分配多个 IP 地址,常用于服务器提供多种服务。
- ARP 缓存:存储 IP 地址与 MAC 地址的映射关系,可通过
arp -d
手动清除缓存。 - 无线安全:建议使用 WPA2 或 WPA3 加密方式,避免使用不安全的 WEP。
- 路由表:理解目标网络、网关、子网掩码和接口的关系,确保数据包正确转发。
1. RAID (冗余磁盘阵列)
RAID(Redundant Arrays of Inexpensive Disks)是一种将多个硬盘组合以提高性能或数据冗余的技术。
Linux 上的 RAID
在 Linux 上应用 RAID,有软件 RAID 和硬件 RAID 之分。通常,硬件 RAID 会被视作 SCSI 设备。
RAID 各个等级:
-
RAID 0 (条带化)
- 多个硬盘组合成一个大磁盘,没有备份,提供较好的性能但没有容灾能力。
- 示例:三台 100GB 硬盘组成一个 300GB 的 RAID 0。
-
RAID 1 (镜像)
- 多台硬盘写入相同数据,提供冗余备份。
- 示例:三个 100GB 硬盘组成一个 100GB 的 RAID 1。
-
RAID 4
- 至少需要 3 台硬盘,其中一台用作备份分区。性能瓶颈在于备份分区。
- 示例:三个 100GB 硬盘组成一个 200GB 的 RAID 4。
-
RAID 5
- 使用分布式备份技术,性能较 RAID 4 好,且不需要专门的备份硬盘。
- 示例:三个 100GB 硬盘组成一个 200GB 的 RAID 5。
-
其他 RAID 等级:
- RAID LINEAR:类似 RAID 0。
- RAID 0+1 (RAID01):RAID 0 组成的 RAID 1。
- RAID 10 (RAID+0):RAID 1 组成的 RAID 0。
- RAID 6:比 RAID 5 多一台备份区。
mdadm
命令控制 RAID 阵列
mdadm [option] [设备名]
常用选项:
选项 | 描述 |
---|---|
-C , --create |
创建 RAID 阵列并生成相关设备 |
-a |
自动生成必要的设备文件 |
-c |
指定 Chunk 大小 |
-l , --level |
指定 RAID 级别 |
-n , --raid-devices |
指定 RAID 阵列中的设备数量 |
-x , --spare-devices |
指定备用设备数量 |
--manage |
管理 RAID 阵列 |
-a , --add |
添加设备 |
-r , --remove |
删除设备 |
-f , --fail |
标记设备为失效 |
--query |
查询 RAID 状态 |
--detail |
查看 RAID 详细状态 |
--stop |
停止指定的 RAID 阵列 |
--stop --scan |
停止所有 RAID 阵列 |
2. LVM (逻辑卷管理)
LVM 是 Linux 下的一种磁盘管理工具,可以灵活地管理硬盘、分区和逻辑卷。
LVM 结构:
- PV (Physical Volume):一个硬盘或一个分区作为物理空间。
- PE (Physical Extent):PV 组成 PE。
- VG (Volume Group):PE 组成 VG。
- LV (Logical Volume):VG 内的 PE 分配为 LV。
创建 LVM:
-
准备 LVM 用的分区:
1
2fdisk /dev/sda
fdisk /dev/sdb -
初始化 PV:
1
pvcreate /dev/sda1 /dev/sdb1
-
创建 VG:
1
vgcreate testvg /dev/sda1 /dev/sdb1
-
创建 LV:
1
lvcreate -L 1G -n lv01 testvg
-
创建文件系统并挂载:
1
2mke2fs -j /dev/testvg/lv01
mount /dev/testvg/lv01 /mnt
管理 LVM:
命令 | 说明 |
---|---|
pvdisplay |
显示物理 PV 信息 |
pvscan |
显示 PV 状态 |
pvmove |
移动 PV 中的 PE |
pvremove |
删除 PV |
vgextend |
扩展 VG |
vgreduce |
缩小 VG |
vgdisplay |
显示 VG 详情 |
lvdisplay |
显示 LV 详情 |
lvextend |
扩展 LV |
lvreduce |
缩小 LV |
lvremove |
删除 LV |
lvcreate -s |
创建快照 |
3. 访问记忆装置
设备文件说明:
设备文件 | 说明 |
---|---|
/dev/hda |
IDE 主硬盘 |
/dev/hdb |
IDE 从硬盘 |
/dev/sda |
第一个 SCSI/STAT/USB 硬盘 |
/dev/sdb |
第二个 SCSI/STAT/USB 硬盘 |
/dev/sr0 |
第一个 SCSI/STAT/USB CD/DVD |
/dev/st0 |
第一个 SCSI 磁带设备 |
硬盘管理:
Linux 将 IDE 以外的硬盘识别为 SCSI 设备。硬盘的数据传送模式有 PIO(Programmed I/O)和 DMA(Direct Memory Access)模式。通常使用 DMA 模式。
检查 DMA 模式:
1 | hdparm -i /dev/sda |
硬盘控制:
1 | hdparm -d1 /dev/sda # 启用 DMA 模式 |
使用 SCSI/STAT/USB:
1 | sdparm [option] [设备文件] |
4. iSCSI (Internet Small Computer System Interface)
iSCSI 是基于 TCP/IP 的 SCSI 协议,可以使远程存储设备像本地设备一样使用。
iSCSI 配置步骤:
-
配置
targets.conf
文件:1
2
3
4
5
6<target iqn.2014.01.com.example.lpic:target0>
backing-store /dev/sdb2
initiator-address 192.168.11.2
initiator-address 192.168.11.4
incominguser centuser password
</target> -
启动 iSCSI target 服务:
1
service tgtd start
-
使用
tgtadm
命令查看 target 状态:1
tgtadm --mode target --op show
-
使用
iscsiadm
从 initiator 查询 target:1
iscsiadm -m discovery -t sendtargets -p 192.168.11.3
-
配置认证方式:
修改/etc/iscsi/iscid.conf
:1
2
3node.session.auth.authmethod = CHAP
node.session.auth.username = centuser
node.session.auth.password = password -
登录 iSCSI:
1
iscsiadm -m node --login
登录后,使用
cat /proc/partitions
查看 iSCSI 目标是否添加成功。
1. 文件系统基础
/etc/fstab 文件格式解析
1 | 设备/标签/UUID 挂载点 文件系统类型 挂载选项 dump标志 fsck顺序 |
字段说明:
字段 | 说明 | 示例 |
---|---|---|
1 | 设备标识 | /dev/sda1, UUID=xxxx, LABEL=root |
2 | 挂载路径 | /, /home, /boot |
3 | 文件系统类型 | ext4, xfs, nfs |
4 | 挂载选项 | defaults, noatime |
5 | dump备份标志 | 0(不备份), 1(备份) |
6 | fsck检查顺序 | 0(不检查), 1(优先), 2(次级) |
文件系统类型对比
类型 | 特点 | 适用场景 |
---|---|---|
ext4 | 日志式, 最大16TB文件 | 通用Linux系统 |
XFS | 高性能, 最大8EB文件 | 大文件处理 |
Btrfs | 写时复制, 快照功能 | 高级存储需求 |
FAT32 | 兼容性好 | U盘/移动设备 |
NTFS | Windows兼容 | 双系统共享分区 |
常用挂载选项
选项 | 作用 | 性能影响 |
---|---|---|
async | 异步写入 | 提升性能 |
noatime | 不更新访问时间 | 显著提升 |
nodiratime | 不更新目录访问时间 | 小幅提升 |
discard | TRIM支持(SSD) | 延长SSD寿命 |
data=writeback | ext4日志模式 | 性能最佳 |
查看支持的文件系统:
1 | cat /proc/filesystems |
查看已挂载文件系统:
1 | cat /etc/mtab # 或 |
2. 挂载管理命令
mount 命令详解
1 | mount [选项] [设备] [挂载点] |
常用选项:
选项 | 说明 |
---|---|
-t | 指定文件系统类型 |
-o | 指定挂载选项(多选项用逗号分隔) |
-a | 挂载/etc/fstab中所有文件系统 |
–bind | 目录绑定挂载 |
-l | 显示标签 |
示例:
1 | mount -t ext4 -o noatime /dev/sdb1 /mnt/data |
umount 命令
1 | umount [选项] [设备|挂载点] |
选项 | 说明 |
---|---|
-a | 卸载所有文件系统 |
-t | 按类型卸载 |
-l | 延迟卸载(强制) |
-f | 强制卸载 |
强制卸载流程:
fuser -vm /mountpoint
查看占用进程kill -9 PID
结束进程umount -f /mountpoint
3. SWAP 管理
创建SWAP文件
1 | # 创建1GB交换文件 |
SWAP管理命令
命令 | 功能 |
---|---|
swapon -a |
启用所有swap |
swapon -s |
查看swap使用 |
swapoff -a |
禁用所有swap |
优化建议:
- 物理内存<8GB时,SWAP=1.5倍内存
- 物理内存≥8GB时,SWAP=8GB
4. 文件系统创建与维护
创建工具对比
命令 | 对应文件系统 | 特点 |
---|---|---|
mkfs.ext4 | ext4 | 默认日志模式 |
mkfs.xfs | XFS | 高性能大文件 |
mkfs.btrfs | Btrfs | 高级功能支持 |
ext4创建示例:
1 | mkfs.ext4 -b 4096 -m 1 -L DATA /dev/sdb1 |
XFS创建示例:
1 | mkfs.xfs -f -L BIGDATA /dev/sdc1 |
文件系统检查
ext系列检查:
1 | fsck -y /dev/sda1 # 自动修复 |
XFS检查:
1 | xfs_repair /dev/sdb1 |
检查时机:
- 异常关机后
- 定期维护时(建议每6个月)
- 出现I/O错误时
5. 高级文件系统特性
ext4 特性管理
转换ext3→ext4:
1 | tune2fs -O extent,uninit_bg,dir_index /dev/sda1 |
调整参数:
1 | tune2fs -c 30 -i 7d /dev/sda1 # 每30次挂载或7天检查 |
XFS 高级功能
查看信息:
1 | xfs_info /dev/sdb1 |
备份恢复:
1 | xfsdump -l 0 -f /backup/root.xfsdump /dev/sda1 |
6. 光盘与加密文件系统
光盘制作
1 | # 创建ISO |
加密文件系统
LUKS加密:
1 | cryptsetup luksFormat /dev/sdb1 |
关闭加密卷:
1 | umount /mnt/secure |
7. 磁盘健康监控
S.M.A.R.T. 监控
1 | smartctl -a /dev/sda # 查看详细信息 |
关键监控指标:
- Reallocated_Sector_Ct
- Current_Pending_Sector
- Temperature_Celsius
8. 故障处理流程
文件系统修复步骤
-
卸载文件系统:
1
umount /dev/sda1
-
进入单用户模式:
1
init 1
-
执行检查修复:
1
fsck -y /dev/sda1
-
严重损坏时:
1
2
3debugfs /dev/sda1
> lsdel # 查看已删除inode
> dump <inode> /tmp/recover_file
应急恢复方案
问题现象 | 解决方案 |
---|---|
无法挂载 | fsck -y /dev/sdX |
Superblock损坏 | e2fsck -b 32768 /dev/sdX |
只读文件系统 | mount -o remount,rw / |
1. 系统启动流程
1.1 启动阶段详解
阶段 | 组件 | 功能说明 |
---|---|---|
1 | BIOS | - 硬件自检(POST) - 读取CMOS设置 - 检测启动设备顺序 - 加载MBR中的BootLoader |
2 | MBR | - 512字节(启动代码+分区表) - 包含第一阶段BootLoader - 标识活动分区 |
3 | BootLoader | - 阶段1: MBR中的初始代码 - 阶段1.5: 文件系统识别 - 阶段2: 加载内核(/boot/grub/) |
4 | 内核 | - 硬件检测与初始化 - 加载驱动模块 - 挂载根文件系统 - 启动init进程(PID=1) |
5 | init进程 | - 根据/etc/inittab初始化系统 - 启动运行级别对应服务 - 生成所有后续进程 |
1.2 inittab 文件格式
1 | id:runlevels:action:process |
主要action类型
action | 说明 |
---|---|
boot | 系统启动时执行,不等待完成 |
bootwait | 系统启动时执行,等待完成 |
ctrlaltdel | 捕获Ctrl+Alt+Del组合键 |
initdefault | 设置默认运行级别 |
once | 进入运行级别时执行一次 |
respawn | 进程终止后自动重启 |
sysinit | 系统初始化脚本 |
wait | 进入运行级别时执行并等待 |
1.3 运行级别管理
标准运行级别
级别 | 说明 |
---|---|
0 | 关机 |
1/S | 单用户模式 |
2 | 多用户无NFS |
3 | 完整多用户模式 |
4 | 自定义 |
5 | 图形界面 |
6 | 重启 |
服务管理脚本
1 | /etc/init.d/service [command] |
命令 | 作用 |
---|---|
start | 启动服务 |
stop | 停止服务 |
restart | 重启服务 |
reload | 重载配置 |
status | 查看状态 |
服务自启动管理
RedHat系(chkconfig):
1 | chkconfig [选项] 服务名 [on|off] |
选项 | 说明 |
---|---|
–list | 显示服务状态 |
–level | 指定运行级别 |
–add | 添加服务 |
–del | 删除服务 |
Debian系(update-rc.d):
1 | update-rc.d [选项] 服务名 [commands] |
选项 | 说明 |
---|---|
-n | 模拟执行 |
-f | 强制操作 |
remove | 删除链接 |
1.4 Upstart 事件驱动
主要命令:
1 | initctl [command] job |
命令 | 功能 |
---|---|
start | 启动作业 |
stop | 停止作业 |
restart | 重启作业 |
status | 查看状态 |
list | 列出所有作业 |
配置文件位置:
1 | /etc/init/*.conf |
2. GRUB 引导加载器
2.1 GRUB Legacy vs GRUB2
特性 | GRUB Legacy | GRUB2 |
---|---|---|
版本 | 0.9x | 1.9x |
配置文件 | menu.lst | grub.cfg |
生成方式 | 直接编辑 | update-grub |
分区表示 | (hd0,0) | hd0,msdos1 |
2.2 GRUB Legacy 配置
/boot/grub/menu.lst 示例:
1 | timeout 5 |
常用命令:
1 | grub> root (hd0,0) # 设置根分区 |
2.3 GRUB2 配置
/etc/default/grub 关键参数:
参数 | 说明 |
---|---|
GRUB_DEFAULT | 默认启动项 |
GRUB_TIMEOUT | 菜单超时 |
GRUB_CMDLINE_LINUX | 内核参数 |
生成配置:
1 | update-grub |
2.4 内核启动参数
参数 | 作用 |
---|---|
root=/dev/sda1 | 指定根分区 |
ro/rw | 只读/读写挂载 |
init=/bin/bash | 指定初始化程序 |
single | 单用户模式 |
mem=1024M | 限制内存大小 |
查看当前参数:
1 | cat /proc/cmdline |
3. 其他引导加载器
3.1 LILO 配置
/etc/lilo.conf 示例:
1 | boot=/dev/sda |
应用配置:
1 | lilo -v |
3.2 SYSLINUX 系列
类型 | 文件系统 | 用途 |
---|---|---|
SYSLINUX | FAT | USB启动 |
ISOLINUX | ISO9660 | 光盘启动 |
EXTLINUX | ext2/3/4 | 硬盘启动 |
PXELINUX | 网络 | 网络启动 |
PXE启动环境搭建:
- 安装必要服务:
1 | yum install dhcp tftp-server syslinux |
- 配置DHCP:
1 | filename "pxelinux.0"; |
- 准备TFTP目录:
1 | cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ |
4. 系统恢复方法
4.1 救援模式操作
- 使用安装介质启动
- 进入救援模式
- 挂载原系统:
1 | chroot /mnt/sysimage |
- 修复引导:
1 | grub-install /dev/sda |
4.2 常见修复场景
问题 | 解决方案 |
---|---|
MBR损坏 | dd if=/usr/share/syslinux/mbr.bin of=/dev/sda |
GRUB损坏 | grub-install /dev/sda |
文件系统错误 | fsck -y /dev/sda1 |
密码重置 | init=/bin/bash 启动后修改密码 |
5. 启动优化技巧
- 并行启动:
1 | vim /etc/init/rc-sysinit.conf |
- 禁用不需要的服务:
1 | chkconfig --list | grep 3:on |
- 使用readahead:
1 | service readahead-early restart |
- SSD优化:
在/etc/fstab添加:
1 | noatime,discard |
1. 内核版本管理
版本号说明
-
2.X.Y 旧版本格式:
- X:偶数表示稳定版,奇数表示开发版
- Y:修订版本号
- 后缀说明:
-rcN
:Release Candidate(候选版本)-gitN
:开发中的Git版本
-
3.0+ 新版本分类:
类型 说明 Prepatch 稳定版前的测试版本 Mainline 包含新特性的主线开发版本 Stable 稳定版本 Longterm 长期支持版本(LTS)
版本查询命令
1 | uname [选项] |
常用选项
选项 | 说明 |
---|---|
-a | 显示全部系统信息 |
-r | 显示内核版本 |
-m | 显示硬件架构 |
其他查询方式
1 | # 查看/proc版本信息 |
2. 内核模块管理
核心命令对比
命令 | 功能说明 | 特点 |
---|---|---|
lsmod | 显示已加载模块 | 读取/proc/modules |
insmod | 加载单个模块 | 不处理依赖关系 |
rmmod | 卸载模块 | 需确保无依赖 |
modprobe | 智能加载/卸载模块 | 自动处理依赖关系 |
depmod | 生成模块依赖关系文件 | 创建modules.dep |
命令详解
lsmod 输出说明
1 | Module Size Used by Dependent modules |
- 显示模块名、大小、引用计数和被哪些模块使用
modinfo 模块信息
1 | modinfo [选项] 模块名 |
选项 | 说明 |
---|---|
-a | 显示作者信息 |
-d | 显示描述信息 |
-l | 显示许可证信息 |
-n | 显示模块文件路径 |
modprobe 高级用法
1 | modprobe [选项] 模块名 |
选项 | 说明 |
---|---|
-a | 加载所有匹配模块 |
-c | 显示当前配置 |
-l | 列出所有可用模块 |
-r | 递归卸载模块及依赖 |
-t 类型 | 仅操作指定类型模块 |
–show-depends | 显示模块依赖关系 |
配置文件
/etc/modprobe.conf
:模块别名和参数配置1
2alias eth0 e1000
options e1000 speed=1000 duplex=full
3. 内核编译流程
编译步骤
- 准备源代码
- 配置内核:
1
2
3
4make oldconfig # 基于旧配置更新
make menuconfig # 文本界面配置
make xconfig # Qt图形界面配置
make gconfig # GTK图形界面配置 - 编译内核:
1
2
3make # 编译内核和模块
make bzImage # 仅编译内核
make modules # 仅编译模块 - 安装组件:
1
2make modules_install # 安装模块到/lib/modules/
make install # 自动安装内核
手动安装示例
1 | # 复制内核文件 |
其他make目标
目标 | 说明 |
---|---|
clean | 清除编译文件 |
mrproper | 彻底清除(含配置) |
rpm-pkg | 生成RPM包 |
deb-pkg | 生成Debian包 |
4. 内核参数调优
/proc/sys 关键参数
路径 | 说明 |
---|---|
kernel/ctrl-alt-del | Ctrl+Alt+Del行为 |
kernel/shmall | 共享内存页数上限 |
kernel/shmmax | 共享内存段最大大小 |
net/ipv4/ip_forward | IP转发开关(1/0) |
fs/file-max | 系统最大文件句柄数 |
sysctl 工具
1 | sysctl [选项] [参数=值] |
选项 | 说明 |
---|---|
-a | 显示所有可用参数 |
-p | 从/etc/sysctl.conf加载配置 |
-w | 临时修改参数 |
initramfs 管理
1 | # 创建initramfs |
5. 内核调试与设备管理
/proc 关键文件
文件 | 内容说明 |
---|---|
/proc/cpuinfo | CPU详细信息 |
/proc/meminfo | 内存使用情况 |
/proc/modules | 已加载模块列表 |
/proc/partitions | 分区信息 |
硬件信息工具
lspci
1 | lspci [选项] |
选项 | 说明 |
---|---|
-vv | 超详细输出 |
-t | 树状显示设备层级 |
lsusb
1 | lsusb [选项] |
选项 | 说明 |
---|---|
-v | 详细输出设备描述符 |
-t | 树状显示USB设备拓扑 |
udev 设备管理
规则文件示例
/etc/udev/rules.d/70-persistent-net.rules
:
1 | SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", |
udevadm 工具
1 | udevadm info [选项] |
选项 | 说明 |
---|---|
-a | 显示父设备属性 |
-n | 指定设备节点路径 |
实时监控
1 | udevadm monitor |
1. top 命令 - 实时进程监控
基本用法
1 | top [选项] |
常用选项
选项 | 说明 |
---|---|
-b | 批处理模式(非交互式) |
-d 秒 | 设置刷新间隔时间 |
-n 次数 | 指定刷新次数后退出 |
-u 用户 | 只显示指定用户的进程 |
-p PID | 只监控指定PID的进程 |
显示字段说明
字段 | 说明 |
---|---|
PID | 进程ID |
PPID | 父进程ID |
USER | 进程所有者 |
RUSER | 实际用户名 |
UID | 用户ID |
GROUP | 所属组 |
PR | 优先级 |
NI | nice值 |
VIRT | 虚拟内存使用量(KB) |
RES | 物理内存使用量(KB) |
SHR | 共享内存大小(KB) |
S | 进程状态 |
TTY | 关联终端 |
%CPU | CPU使用率 |
%MEM | 内存使用率 |
TIME+ | CPU占用时间累计 |
COMMAND | 执行的命令 |
交互式操作
按键 | 功能说明 |
---|---|
空格/Enter | 立即刷新 |
f | 选择显示字段 |
o | 修改排序字段 |
l | 切换负载显示 |
m | 切换内存显示 |
u | 筛选用户进程 |
t | 切换CPU状态显示 |
P | 按CPU%排序 |
M | 按内存%排序 |
N | 按PID排序 |
T | 按运行时间排序 |
W | 保存当前配置 |
k | 结束进程 |
h/? | 帮助信息 |
q | 退出程序 |
A | 切换显示模式 |
d/s | 修改刷新间隔 |
</> | 切换排序顺序 |
2. vmstat - 系统资源监控
基本用法
1 | vmstat [刷新间隔(秒)] [刷新次数] |
输出字段说明
类别 | 字段 | 说明 |
---|---|---|
procs | r | 运行队列中的进程数(若持续超过CPU核心数表示CPU瓶颈) |
b | 等待I/O的进程数 | |
memory | swpd | 使用的swap空间大小 |
free | 空闲内存 | |
buff | 用作buffer的内存 | |
cache | 用作cache的内存 | |
swap | si | 每秒从swap读入内存量 |
so | 每秒从内存写入swap量 | |
io | bi | 块设备每秒接收的块数 |
bo | 块设备每秒发送的块数 | |
system | in | 每秒中断数 |
cs | 每秒上下文切换数 | |
cpu | us | 用户空间CPU时间占比 |
sy | 内核空间CPU时间占比 | |
id | CPU空闲时间占比 | |
wa | I/O等待时间占比 | |
st | 虚拟机偷取时间占比 |
3. iostat - I/O监控
基本用法
1 | iostat [选项] [间隔秒数] [次数] |
常用选项
选项 | 说明 |
---|---|
-c | 只显示CPU统计 |
-d | 只显示磁盘统计 |
-k | 以KB为单位显示 |
-t | 显示时间戳 |
CPU统计字段
字段 | 说明 |
---|---|
%user | 用户进程CPU占比 |
%nice | 调整优先级进程的CPU占比 |
%system | 内核CPU占比 |
%iowait | I/O等待占比 |
%steal | 虚拟机占用占比 |
%idle | 空闲占比 |
磁盘统计字段
字段 | 说明 |
---|---|
tps | 每秒I/O请求数 |
Blk_read/s | 每秒读取块数 |
Blk_wrtn/s | 每秒写入块数 |
Blk_read | 总读取块数 |
Blk_wrtn | 总写入块数 |
4. sar - 系统活动报告
基本用法
1 | sar [选项] [-s 开始时间] [-e 结束时间] [-f 日志文件] [间隔] [次数] |
常用选项
选项 | 说明 |
---|---|
-A | 显示所有报告 |
-b | I/O和传输速率统计 |
-c | 进程创建统计 |
-f 文件 | 指定日志文件 |
-n DEV | 网络设备统计 |
-n EDEV | 网络错误统计 |
-r | 内存和swap统计 |
-u | CPU利用率 |
-P ALL | 每个CPU核心统计 |
-R | 内存统计 |
-W | swap统计 |
详细字段说明
sar -b (I/O统计)
字段 | 说明 |
---|---|
tps | 每秒I/O请求数 |
rtps | 每秒读请求数 |
wtps | 每秒写请求数 |
bread/s | 每秒读取块数 |
bwrtn/s | 每秒写入块数 |
sar -n DEV (网络统计)
字段 | 说明 |
---|---|
IFACE | 网络接口名 |
rxpck/s | 每秒接收包数 |
txpck/s | 每秒发送包数 |
rxkB/s | 每秒接收KB数 |
txkB/s | 每秒发送KB数 |
sar -r (内存统计)
字段 | 说明 |
---|---|
kbmemfree | 空闲内存(KB) |
kbmemused | 已用内存(KB) |
%memused | 内存使用率 |
kbbuffers | buffer使用量(KB) |
kbcached | cache使用量(KB) |
5. 系统负载命令
uptime
显示:
- 系统运行时间
- 登录用户数
- 1/5/15分钟平均负载
w 命令
1 | w [选项] [用户名] |
选项
选项 | 说明 |
---|---|
-h | 不显示标题 |
-s | 精简格式(不显示登录时间/JCPU/PCPU) |
输出字段
字段 | 说明 |
---|---|
USER | 用户名 |
TTY | 终端名 |
FROM | 远程主机 |
LOGIN@ | 登录时间 |
IDLE | 空闲时间 |
JCPU | 该终端所有进程CPU时间 |
PCPU | 当前进程CPU时间 |
WHAT | 正在执行的命令 |
6. 进程监控
ps 命令
1 | ps [选项] |
常用选项
选项 | 说明 |
---|---|
a | 显示所有进程 |
e | 显示环境变量 |
x | 包括无终端进程 |
u | 显示用户信息 |
r | 只显示运行中进程 |
l | 长格式显示 |
U 用户 | 筛选指定用户 |
-C 命令 | 筛选指定命令 |
-e | 显示所有进程 |
-f | 完整格式显示 |
-l | 长格式显示 |
-p PID | 筛选指定PID |
-t tty | 筛选指定终端 |
显示字段
字段 | 说明 |
---|---|
USER | 用户名 |
PID | 进程ID |
PPID | 父进程ID |
%CPU | CPU使用率 |
%MEM | 内存使用率 |
VSZ | 虚拟内存大小 |
RSS | 物理内存大小 |
TTY | 关联终端 |
STAT | 进程状态 |
START | 启动时间 |
TIME | CPU占用时间 |
COMMAND | 执行的命令 |
其他进程工具
pstree
:以树状显示进程关系lsof
:列出打开的文件
7. 内存监控
free 命令
1 | free [选项] |
选项
选项 | 说明 |
---|---|
-b | 以字节显示 |
-k | 以KB显示(默认) |
-m | 以MB显示 |
-t | 显示总计行 |
-o | 不显示buffer行 |
-s 秒 | 持续监控间隔 |
输出字段
字段 | 说明 |
---|---|
total | 总内存量 |
used | 已用量(含buffer/cache) |
free | 空闲量(含buffer/cache) |
shared | 共享内存 |
buffers | buffer缓存 |
cached | page cache |
-/+ buffers/cache | 实际内存使用 |
used | 不含buffer/cache的用量 |
free | 含buffer/cache的空闲量 |
8. 磁盘与网络监控
df 命令
1 | df [选项] [目录] |
选项
选项 | 说明 |
---|---|
-a | 显示所有文件系统 |
-h | 人性化显示(1024进制) |
-H | 人性化显示(1000进制) |
-i | 显示inode信息 |
-l | 只显示本地文件系统 |
-m | 以MB为单位显示 |
网络测试工具
netserver
:启动测试服务(监听12865端口)netperf
:网络性能测试客户端
9. 高级监控系统
collectd
监控项目包括:
- CPU使用率
- 系统温度和风扇状态
- 进程状态
- 网络流量和延迟
- Web服务器状态(APACHE/Nginx)
- DNS服务器状态
- 数据库状态
- SWAP使用情况
- 用户登录情况
Nagios
功能特点:
- 网络服务监控
- 系统资源监控
- 基于Web的监控界面
- 邮件/SMS告警通知
- 自定义事件处理
- 日志自动轮转
- 支持分层主机结构
可视化工具
- MRTG:网络流量可视化
- Cacti:MRTG的增强替代品,提供更丰富的监控功能
守护进程管理与系统安全笔记整理
守护进程管理
Super Server (超级服务器)
- 作用:代替其他服务监视服务请求,建立连接后转交给实际服务处理
- 优势:降低系统负载,不需要为每个服务都启动独立进程
inetd (Internet Daemon)
- 传统的超级服务器守护进程
- 配置文件:
/etc/inetd.conf
inetd.conf 字段说明
字段 | 说明 |
---|---|
service_name | /etc/services 中定义的服务名 |
socket_type | socket类型(TCP=stream, UDP=dgram) |
protocol | 协议类型(通常TCP/UDP) |
flags | 请求处理方式(wait=等待处理完成, nowait=立即处理下一个) |
user | 执行用户 |
program | 程序绝对路径 |
args | 转发参数 |
重启inetd
1 | kill -HUP inetd的PID |
TCP Wrapper
- 访问控制机制,检查顺序:
- 先查
/etc/hosts.allow
→ 匹配则允许 - 再查
/etc/hosts.deny
→ 匹配则拒绝 - 都不匹配则允许
- 先查
通配符说明
通配符 | 说明 |
---|---|
ALL | 所有服务和主机 |
A EXCEPT B | 除B以外的A |
LOCAL | 本地主机(不含.) |
PARANOID | 主机名与DNS解析IP不一致的情况 |
示例配置
1 | in.telnetd: .lpic.jp # 允许lpic.jp域访问telnet |
xinetd (扩展的inetd)
- 更安全的超级服务器,支持分服务配置
- 主配置文件:
/etc/xinetd.conf
- 服务配置文件:
/etc/xinetd.d/
xinetd.conf 主要参数
1 | default |
服务配置示例(telnet)
1 | service telnet |
重启xinetd
1 | /etc/init.d/xinetd restart |
端口安全
检查开放端口
1 | netstat -atun # 显示所有TCP/UDP端口 |
nmap 扫描
1 | nmap 目标主机 # 扫描主机开放端口 |
查找特殊权限文件
1 | find / -perm -u+s -ls # 查找SUID文件 |
用户安全
密码有效期设置(chage)
1 | chage [选项] 用户名 |
选项 | 说明 |
---|---|
-l | 显示有效期 |
-m 天数 | 密码最小使用天数 |
-M 天数 | 密码最大有效期 |
-d 日期 | 最后修改日期 |
-W 天数 | 密码过期前警告天数 |
-I 天数 | 密码过期后锁定前天数 |
-E 日期 | 账号失效日期 |
禁止登录方法
- 创建
/etc/nologin
文件:禁止所有非root用户登录1
touch /etc/nologin
- 修改用户shell:
1
usermod -s /sbin/nologin 用户名 # 禁止指定用户登录
su/sudo
su (切换用户)
1 | su - 用户名 # 完全切换(加载环境变量) |
sudo (超级用户权限)
- 配置文件:
/etc/sudoers
(使用visudo
编辑) - 示例配置:
1
2
3
4
5# 允许student用户执行shutdown
student ALL=(ALL) /sbin/shutdown
# 允许wheel组成员执行所有命令且不输密码
%wheel ALL=(ALL) NOPASSWD:ALL
资源限制(ulimit)
1 | ulimit [选项] [限制值] |
选项 | 说明 |
---|---|
-a | 显示所有限制 |
-c size | 核心文件大小 |
-f size | 最大文件大小 |
-n num | 打开文件数限制 |
-u num | 用户最大进程数 |
-v size | 最大虚拟内存 |
OpenSSH 安全
SSH密钥文件
文件名 | 说明 |
---|---|
ssh_host_key | SSH1私钥 |
ssh_host_dsa_key | SSH2 DSA私钥 |
ssh_host_rsa_key | SSH2 RSA私钥 |
*.pub | 对应公钥 |
sshd配置(/etc/ssh/sshd_config)
参数 | 说明 |
---|---|
Port | SSH端口(默认22) |
Protocol | SSH版本(1,2) |
HostKey | 私钥文件路径 |
PermitRootLogin | 是否允许root登录 |
RSAAuthentication | 是否启用SSH1公钥认证 |
PubkeyAuthentication | 是否启用SSH2公钥认证 |
AuthorizedKeysFile | 授权公钥文件路径 |
PermitEmptyPasswords | 是否允许空密码 |
PasswordAuthentication | 是否启用密码认证 |
X11Forwarding | 是否允许X11转发 |
SSH密钥认证流程
- 客户端生成密钥对:
1
ssh-keygen -t rsa # 生成RSA密钥对
- 上传公钥到服务器:
1
ssh-copy-id 用户名@服务器
- 服务器端公钥存储在:
~/.ssh/authorized_keys
SSH实用命令
scp (安全复制)
1 | scp 文件 用户@主机:路径 # 上传 |
ssh-agent (密钥代理)
1 | eval `ssh-agent` # 启动代理 |
端口转发
1 | # 本地端口转发 |
GnuPG 文件加密
密钥管理
1 | gpg --gen-key # 生成密钥对 |
文件加密/解密
1 | # 加密文件(给指定用户) |
密钥吊销
1 | gpg --gen-revoke 用户邮件 > revoke.asc # 生成吊销证书 |
TCP/IP 基础笔记整理
IPv4 地址分类
标准分类
类别 | IP 地址范围 | 子网掩码 |
---|---|---|
A | 0.0.0.0 ~ 127.255.255.255 | 255.0.0.0 |
B | 128.0.0.0 ~ 191.255.255.255 | 255.255.0.0 |
C | 192.0.0.0 ~ 223.255.255.255 | 255.255.255.0 |
私有地址范围
类别 | IP 地址范围 |
---|---|
A | 10.0.0.0 ~ 10.255.255.255 |
B | 172.16.0.0 ~ 172.31.255.255 |
C | 192.168.0.0 ~ 192.168.255.255 |
CIDR (Classless Inter-Domain Routing)
- 无类别域间路由
- 允许更灵活的子网划分方式,不再受传统 A/B/C 类限制
IPv6
- 128 比特地址,用 16 进制表示,分为 8 个 block
- 表示规则:
- 每个 block 开头的 0 可以省略
- 连续的 0 可以用
::
表示,但整个地址中::
只能出现一次
IPv6 地址类型
类型 | 说明 |
---|---|
单播地址 (Unicast) | 标识单个接口,类似 IPv4 单播地址 |
组播地址 (Multicast) | 标识一组接口,类似 IPv4 组播地址 |
任播地址 (Anycast) | 新增类型,数据包发送给最近的一个接口 |
端口 (Port)
/etc/services
:端口与服务对应关系文件- 常用端口:
端口 | 协议 | 服务 | 说明 |
---|---|---|---|
20 | TCP | FTP | 文件传输(数据) |
21 | TCP | FTP | 文件传输(控制) |
22 | TCP | SSH | 安全Shell |
23 | TCP | Telnet | 远程登录 |
25 | TCP/UDP | SMTP | 邮件发送 |
53 | TCP/UDP | DNS | 域名解析 |
80 | TCP | HTTP | Web服务 |
110 | TCP | POP3 | 邮件接收 |
119 | TCP | NNTP | 网络新闻 |
139 | TCP/UDP | NetBIOS | Windows网络 |
143 | TCP | IMAP | 邮件访问 |
161 | UDP | SNMP | 网络管理 |
443 | TCP | HTTPS | 安全Web |
465 | TCP | SMTPS | 安全SMTP |
993 | TCP | IMAPS | 安全IMAP |
995 | TCP | POP3S | 安全POP3 |
nsswitch.conf 文件
控制各种系统数据库的搜索顺序和方法
1. 信息类型(Info)
automount
:自动挂载信息bootparams
:引导选项ethers
:MAC地址group
:用户组信息hosts
:主机名和IPnetworks
:网络信息passwd
:用户信息protocols
:网络协议publickey
:NIS+/NFS公钥rpc
:远程过程调用services
:网络服务shadow
:用户密码信息aliases
:邮件别名
2. 搜索方法(method)
files
:搜索本地文件nis
:搜索NIS数据库dns
:查询DNScompat
:兼容模式(±语法)
3. 搜索顺序
从左到右依次尝试,先找到的结果优先
4. 动作项([action])
格式:[[!]STATUS=action]
- STATUS:
NOTFOUND
:未找到SUCCESS
:成功找到UNAVAIL
:永久不可用TRYAGAIN
:临时不可用
- action:
return
:返回结果continue
:继续尝试下个方法
5. compat方法
在passwd/group/shadow文件中使用+
和-
来合并NIS信息
网络故障排除命令
ping
1 | ping 主机名或IP地址 |
- TTL:ICMP包最大生存时间
- time:响应时间
traceroute/tracepath
1 | traceroute 主机名或IP地址 |
- 显示到达目标的路径
host
1 | host [选项] 主机名或IP [DNS服务器] |
- 查询DNS信息
hostname
1 | hostname # 显示当前主机名 |
netstat
1 | netstat -a # 显示所有socket |
route
1 | route # 显示路由表 |
路由表字段说明:
- Destination:目标网络/主机
- Gateway:网关
- Genmask:子网掩码
- Flags:标志(U=有效,H=主机,G=网关)
- Metric:距离
- Ref:引用数
- Use:使用计数
- Iface:接口
ifconfig
1 | ifconfig 接口名 IP地址 netmask 子网掩码 |
ifup/ifdown
1 | ifup 接口名 # 启用接口 |
网络服务命令
telnet
1 | telnet 主机 [端口] # 默认端口23 |
ftp
1 | ftp 主机 |
dig
1 | dig [选项] @DNS服务器 主机名 域名 [查询类型] |
whois
1 | whois 目标 [@whois服务器] |
- 查询域名注册信息
网络配置文件
/etc/hostname
- 存储主机名
1 | windsor.lpic.jp |
/etc/hosts
- 主机名与IP映射
1 | 127.0.0.1 localhost.localdomain localhost |
/etc/nsswitch.conf
- 名称服务切换配置
1 | hosts: files ldap dns # 先查本地文件,再LDAP,最后DNS |
/etc/resolv.conf
- DNS配置
1 | domain lpic.jp |
/etc/sysconfig/network
- 基本网络设置
1 | NETWORKING=YES |
/etc/sysconfig/network-scripts/
- 网络接口配置文件(如ifcfg-eth0)
1 | DEVICE=eth0 |