17.系统维护

分類 后端, linux

从源代码安装软件笔记整理

1. 安装C语言开源软件的三个主要步骤

  1. 解压源代码
  2. 编译成二进制文件
  3. 将二进制文件安装到适当的文件夹

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] [目标]

留言與分享

16.网络

分類 后端, linux

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
2
3
route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.0.1
route add default gw 192.168.0.50
route del -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
2
iwconfig wlan0 essid "windsor"
iwconfig wlan0 key s:abc12345

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
2
3
4
5
6
7
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.6
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes

/etc/network/interfaces (Debian):

1
2
3
4
5
6
7
8
9
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.6
netmask 255.255.255.0
gateway 192.168.0.1
dns-domain example.com
dns-nameservers 192.168.1.1

7. 网络问题排查

7.1 排查步骤

  1. Ping 测试

    1
    2
    ping 172.16.0.1
    ping h001.s16.la.net
    • 如果 IP 能 Ping 通,但主机名失败,可能是 DNS 问题,检查 /etc/resolv.conf
  2. 局域网连通但无法访问互联网

    • 检查默认网关或路由表:
      1
      route
    • 如果没有默认路由,添加默认网关:
      1
      route add default gw 172.16.0.1
  3. 网络连接不通

    • 使用 traceroutetracepath 查看路径:
      1
      traceroute www.lpi.jp
  4. 网络接口问题

    • 检查网卡状态:
      1
      ifconfig
    • 如果只显示 lo,启动接口:
      1
      2
      3
      ifup 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。
  • 路由表:理解目标网络、网关、子网掩码和接口的关系,确保数据包正确转发。

留言與分享

15.高度的存储管理

分類 后端, linux

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 结构:

  1. PV (Physical Volume):一个硬盘或一个分区作为物理空间。
  2. PE (Physical Extent):PV 组成 PE。
  3. VG (Volume Group):PE 组成 VG。
  4. LV (Logical Volume):VG 内的 PE 分配为 LV。

创建 LVM:

  1. 准备 LVM 用的分区:

    1
    2
    fdisk /dev/sda
    fdisk /dev/sdb
  2. 初始化 PV:

    1
    pvcreate /dev/sda1 /dev/sdb1
  3. 创建 VG:

    1
    vgcreate testvg /dev/sda1 /dev/sdb1
  4. 创建 LV:

    1
    lvcreate -L 1G -n lv01 testvg
  5. 创建文件系统并挂载:

    1
    2
    mke2fs -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 配置步骤:

  1. 配置 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>
  2. 启动 iSCSI target 服务:

    1
    service tgtd start
  3. 使用 tgtadm 命令查看 target 状态:

    1
    tgtadm --mode target --op show
  4. 使用 iscsiadm 从 initiator 查询 target:

    1
    iscsiadm -m discovery -t sendtargets -p 192.168.11.3
  5. 配置认证方式:
    修改 /etc/iscsi/iscid.conf

    1
    2
    3
    node.session.auth.authmethod = CHAP
    node.session.auth.username = centuser
    node.session.auth.password = password
  6. 登录 iSCSI:

    1
    iscsiadm -m node --login

    登录后,使用 cat /proc/partitions 查看 iSCSI 目标是否添加成功。

留言與分享

14.设备和文件系统

分類 后端, linux

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
2
cat /etc/mtab   # 或
cat /proc/mounts

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 强制卸载

强制卸载流程:

  1. fuser -vm /mountpoint 查看占用进程
  2. kill -9 PID 结束进程
  3. umount -f /mountpoint

3. SWAP 管理

创建SWAP文件

1
2
3
4
5
# 创建1GB交换文件
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

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
2
fsck -y /dev/sda1   # 自动修复
e2fsck -f /dev/sda1 # 强制检查

XFS检查:

1
xfs_repair /dev/sdb1

检查时机:

  • 异常关机后
  • 定期维护时(建议每6个月)
  • 出现I/O错误时

5. 高级文件系统特性

ext4 特性管理

转换ext3→ext4:

1
2
tune2fs -O extent,uninit_bg,dir_index /dev/sda1
fsck -pf /dev/sda1

调整参数:

1
2
tune2fs -c 30 -i 7d /dev/sda1  # 每30次挂载或7天检查
tune2fs -m 5 /dev/sda1 # 保留5%空间

XFS 高级功能

查看信息:

1
2
xfs_info /dev/sdb1
xfs_admin -l /dev/sdb1

备份恢复:

1
2
xfsdump -l 0 -f /backup/root.xfsdump /dev/sda1
xfsrestore -f /backup/root.xfsdump /mnt/restore

6. 光盘与加密文件系统

光盘制作

1
2
3
4
5
# 创建ISO
mkisofs -JR -V "BACKUP_2023" -o backup.iso /backup

# 刻录光盘
cdrecord -v dev=1,0,0 speed=24 backup.iso

加密文件系统

LUKS加密:

1
2
3
4
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 secret
mkfs.ext4 /dev/mapper/secret
mount /dev/mapper/secret /mnt/secure

关闭加密卷:

1
2
umount /mnt/secure
cryptsetup luksClose secret

7. 磁盘健康监控

S.M.A.R.T. 监控

1
2
3
smartctl -a /dev/sda          # 查看详细信息
smartctl -H /dev/sda # 健康状态
smartctl -t long /dev/sda # 启动长测试

关键监控指标:

  • Reallocated_Sector_Ct
  • Current_Pending_Sector
  • Temperature_Celsius

8. 故障处理流程

文件系统修复步骤

  1. 卸载文件系统

    1
    umount /dev/sda1
  2. 进入单用户模式

    1
    init 1
  3. 执行检查修复

    1
    fsck -y /dev/sda1
  4. 严重损坏时

    1
    2
    3
    debugfs /dev/sda1
    > lsdel # 查看已删除inode
    > dump <inode> /tmp/recover_file

应急恢复方案

问题现象 解决方案
无法挂载 fsck -y /dev/sdX
Superblock损坏 e2fsck -b 32768 /dev/sdX
只读文件系统 mount -o remount,rw /

留言與分享

13.系统启动

分類 后端, linux

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
2
3
4
5
6
timeout 5
default 0
title CentOS
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda1
initrd /initrd.img

常用命令:

1
2
3
grub> root (hd0,0)     # 设置根分区
grub> setup (hd0) # 安装到MBR
grub> cat /grub/menu.lst # 查看配置

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
2
3
4
5
6
boot=/dev/sda
map=/boot/map
default=linux
image=/boot/vmlinuz
label=linux
root=/dev/sda1

应用配置:

1
lilo -v

3.2 SYSLINUX 系列

类型 文件系统 用途
SYSLINUX FAT USB启动
ISOLINUX ISO9660 光盘启动
EXTLINUX ext2/3/4 硬盘启动
PXELINUX 网络 网络启动

PXE启动环境搭建:

  1. 安装必要服务:
1
yum install dhcp tftp-server syslinux
  1. 配置DHCP:
1
2
filename "pxelinux.0";
next-server 192.168.1.100;
  1. 准备TFTP目录:
1
2
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg

4. 系统恢复方法

4.1 救援模式操作

  1. 使用安装介质启动
  2. 进入救援模式
  3. 挂载原系统:
1
chroot /mnt/sysimage
  1. 修复引导:
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. 并行启动:
1
2
3
vim /etc/init/rc-sysinit.conf
# 修改为:
env DEFAULT_RUNLEVEL=2
  1. 禁用不需要的服务:
1
2
chkconfig --list | grep 3:on
chkconfig servicename off
  1. 使用readahead:
1
service readahead-early restart
  1. SSD优化:
    在/etc/fstab添加:
1
noatime,discard

留言與分享

12.内核

分類 后端, linux

1. 内核版本管理

版本号说明

  • 2.X.Y 旧版本格式

    • X:偶数表示稳定版,奇数表示开发版
    • Y:修订版本号
    • 后缀说明:
      • -rcN:Release Candidate(候选版本)
      • -gitN:开发中的Git版本
  • 3.0+ 新版本分类

    类型 说明
    Prepatch 稳定版前的测试版本
    Mainline 包含新特性的主线开发版本
    Stable 稳定版本
    Longterm 长期支持版本(LTS)

版本查询命令

1
uname [选项]

常用选项

选项 说明
-a 显示全部系统信息
-r 显示内核版本
-m 显示硬件架构

其他查询方式

1
2
3
4
5
# 查看/proc版本信息
cat /proc/version

# 通过Makefile查看
head -4 /usr/src/linux/Makefile

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
    2
    alias eth0 e1000
    options e1000 speed=1000 duplex=full

3. 内核编译流程

编译步骤

  1. 准备源代码
  2. 配置内核
    1
    2
    3
    4
    make oldconfig    # 基于旧配置更新
    make menuconfig # 文本界面配置
    make xconfig # Qt图形界面配置
    make gconfig # GTK图形界面配置
  3. 编译内核
    1
    2
    3
    make           # 编译内核和模块
    make bzImage # 仅编译内核
    make modules # 仅编译模块
  4. 安装组件
    1
    2
    make modules_install  # 安装模块到/lib/modules/
    make install # 自动安装内核

手动安装示例

1
2
3
4
5
6
7
8
9
10
# 复制内核文件
cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.32
cp System.map /boot/System.map-2.6.32

# 创建链接
ln -s /boot/vmlinuz-2.6.32 /boot/vmlinuz
ln -s /boot/System.map-2.6.32 /boot/System.map

# 生成initramfs
mkinitramfs -o /boot/initrd-2.6.32.img 2.6.32

其他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
2
3
4
5
6
# 创建initramfs
mkinitramfs -o initrd.img 3.16.0-4-amd64

# 解压分析
mkdir initrd && cd initrd
zcat ../initrd.img | cpio -id

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
2
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", 
ATTR{address}=="08:00:27:aa:11:3c", NAME="eth0"

udevadm 工具

1
udevadm info [选项]
选项 说明
-a 显示父设备属性
-n 指定设备节点路径

实时监控

1
udevadm monitor

留言與分享

11.性能测定

分類 后端, linux

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. 系统运行时间
  2. 登录用户数
  3. 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的增强替代品,提供更丰富的监控功能

留言與分享

  • 第 1 頁 共 1 頁
作者的圖片

Kein Chan

這是獨立全棧工程師Kein Chan的技術博客
分享一些技術教程,命令備忘(cheat-sheet)等


全棧工程師
資深技術顧問
數據科學家
Hit廣島觀光大使


Tokyo/Macau