Linux 详细命令手册
大约 17 分钟
Linux 详细命令手册
配套知识库:Linux 知识库总览 | 适用:RHEL/CentOS/Rocky/麒麟 等 Linux 发行版 说明:本手册按运维场景分类整理高频命令,含参数说明与示例,建议配合 RHCE9 视频(RedHat RHCE9 课程)练习。
一、系统信息与硬件
# 系统与内核
uname -a # 查看内核版本
cat /etc/os-release # 查看发行版信息
hostnamectl # 主机名与系统信息
hostnamectl set-hostname k8s-master1 # 永久修改主机名
uptime # 运行时间与负载
date # 当前时间;date -s "2026-08-30 10:00:00" 修改
# 硬件信息
lscpu # CPU 信息
free -h # 内存信息(-h 人类可读)
lsblk # 块设备树状图
blkid # 块设备 UUID 与文件系统
lspci # PCI 设备
dmidecode -t memory # 内存条详情
ethtool eth0 # 网卡信息
# 负载与资源
top # 动态查看进程与负载(P=CPU排序 M=内存排序 q=退出)
vmstat 1 5 # 系统虚拟内存/CPU 统计
iostat -x 1 # 磁盘 IO 统计
sar -u 1 5 # CPU 使用率历史统计(需 sysstat)
uptime # 1/5/15 分钟平均负载二、文件与目录管理
# 查看
ls -lh /etc # 长格式、人类可读
ls -la # 含隐藏文件
stat /etc/hosts # 文件详细信息(inode、时间戳)
file /bin/ls # 文件类型
du -sh /var/log # 目录占用总大小
du -sh * | sort -rh | head # 当前目录占用 Top
# 创建/删除/移动
mkdir -p /data/logs # 递归创建目录
touch /tmp/a.txt # 创建空文件/更新时间戳
cp -rp /etc /backup/etc # 递归复制保留属性
mv /old /new # 移动/重命名
rm -rf /tmp/old # 强制递归删除(慎用!)
rm -f /tmp/*.log # 按通配符删除
# 查找
which nginx # 命令路径
whereis nginx # 命令+源码+man 路径
find /var -name "*.log" -mtime +7 # 按名称与修改时间查找
find / -type f -size +100M # 按大小查找
find /data -type d -name "logs" # 按类型查找
find / -name "*.conf" -exec ls -l {} \; # 查找并执行
# 压缩归档
tar zcvf /backup/etc.tar.gz /etc # 打包压缩(gzip)
tar zxvf /backup/etc.tar.gz -C /tmp # 解压到指定目录
tar jcvf /backup/etc.tar.bz2 /etc # bzip2 压缩
tar xf /backup/etc.tar.gz --strip-components=1 # 去掉顶层目录
zip -r /backup/logs.zip /var/log # zip 压缩
unzip logs.zip -d /tmp # zip 解压三、文本处理与三剑客
# 查看文件
cat /etc/passwd # 全部输出
head -n 20 /var/log/messages # 前 20 行
tail -n 20 /var/log/messages # 后 20 行
tail -f /var/log/messages # 实时跟踪
less /etc/nginx/nginx.conf # 分页查看(/搜索 q退出)
wc -l /etc/passwd # 行数统计
# grep 过滤
grep "ERROR" /var/log/app.log # 基础过滤
grep -r "timeout" /etc/nginx/ # 递归搜索
grep -E "^(root|bin):" /etc/passwd # 扩展正则
grep -v "^#" /etc/ssh/sshd_config # 排除注释行
grep -i "error" log.txt # 忽略大小写
# sed 流编辑
sed -n '5,10p' /etc/passwd # 打印 5-10 行
sed -i 's/old/new/g' /etc/nginx.conf # 全局替换并保存(生产慎用!先备份)
sed -i '/^#/d' /etc/nginx.conf # 删除注释行
sed -i '3d' /etc/hosts # 删除第 3 行
# awk 取列/统计
awk -F: '{print $1, $3}' /etc/passwd # 按冒号分割取第 1、3 列
awk '{print $NF}' /var/log/nginx/access.log # 取每行最后一列
awk '{sum+=$1} END{print sum}' nums.txt # 求和
awk '$3 > 90 {print $0}' /proc/stat # 条件过滤
# 排序去重
sort -k2 -n file.txt # 按第 2 列数字排序
sort -rn file.txt # 倒序
uniq -c file.txt # 统计重复次数
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head # 统计 Top IP四、用户与权限
# 用户管理
useradd -m -u 1001 -s /bin/bash dev # 创建用户(家目录、UID、shell)
passwd dev # 设置密码
usermod -aG wheel dev # 追加到附加组
usermod -s /sbin/nologin dev # 禁止登录
userdel -r dev # 删除用户及家目录
id dev # 查看 UID/GID/组
whoami / w / who # 当前登录信息
# 组管理
groupadd ops # 创建组
gpasswd -a dev ops # 用户加入组
gpasswd -d dev ops # 用户移出组
# 提权 sudo
sudo -i # 切换到 root 环境
sudo -u dev ls /home/dev # 以指定用户执行
visudo # 编辑 /etc/sudoers
# 授权示例:dev ALL=(ALL) NOPASSWD:ALL
su - dev # 切换用户(加载环境)
# 文件权限
chmod 755 /data # 设置权限
chmod u+x script.sh # 属主加执行
chmod -R g+w /data # 递归组加写
chown dev:ops /data # 修改属主属组
chown -R dev:dev /home/dev # 递归修改
umask 022 # 默认权限掩码(文件 644 目录 755)
# 特殊权限与 ACL
chmod u+s /usr/bin/passwd # SUID(以属主身份运行)
chmod g+s /data # SGID(继承组)
chmod +t /tmp # Sticky(仅属主可删)
setfacl -m u:dev:rwx /data # 给 dev 单独授权
setfacl -x u:dev /data # 删除 ACL
getfacl /data # 查看 ACL五、进程与性能
# 进程查看
ps -ef # 全格式进程列表
ps aux # BSD 风格
ps -ef | grep java # 按进程名过滤
pgrep -l java # 只输出 PID+名称
pstree -p # 进程树
top -d 1 -p 1234 # 监控指定 PID
htop # 交互式(需安装)
# 进程状态
# R运行 S睡眠 D不可中断 Z僵尸 T停止
ps aux | awk '$8 ~ /Z/' # 查找僵尸进程
# 信号与终止
kill -9 1234 # 强杀
kill -15 1234 # 优雅终止(默认 TERM)
killall java # 按名称杀
pkill -f "nginx: worker" # 按完整命令行匹配
kill -0 1234 # 检测进程是否存在
# 优先级
nice -n -10 ./app # 以更高优先级启动(-20~19)
renice -n 5 -p 1234 # 调整运行中进程
# 后台作业
./app.sh & # 后台运行
nohup ./app.sh > app.log 2>&1 & # 脱离终端后台运行(常用)
jobs / fg / bg # 作业控制
setsid ./app.sh & # 新会话运行
# 性能定位
top -H -p PID # 查看进程内线程
vmstat 1 5 # 内存/IO/CPU
iostat -x 1 # 磁盘 IO
pidstat -p PID 1 5 # 进程维度性能
lsof -p PID # 进程打开的文件
strace -p PID # 跟踪系统调用六、磁盘与 LVM
# 分区
lsblk # 查看块设备
fdisk -l # MBR 分区表
fdisk /dev/sdb # 交互式分区(n新建 w保存)
gdisk /dev/sdb # GPT 分区表
parted /dev/sdb mklabel gpt # 命令行分区
# 格式化与挂载
mkfs.xfs /dev/sdb1 # XFS 格式化
mkfs.ext4 /dev/sdb1 # ext4 格式化
mount /dev/sdb1 /data # 临时挂载
umount /data # 卸载
# 永久挂载(/etc/fstab)
echo "/dev/sdb1 /data xfs defaults 0 0" >> /etc/fstab
mount -a # 重新加载 fstab
df -hT # 查看挂载与文件系统
lsblk -f # 查看文件系统与 UUID
# LVM
pvcreate /dev/sdb1 /dev/sdc1 # 创建物理卷
vgcreate vg0 /dev/sdb1 /dev/sdc1 # 创建卷组
vgextend vg0 /dev/sdd1 # 卷组扩容
lvcreate -L 10G -n lv_data vg0 # 创建逻辑卷
lvcreate -l 100%FREE -n lv_data vg0 # 使用全部剩余空间
lvextend -L +5G /dev/vg0/lv_data # 逻辑卷扩容
xfs_growfs /data # XFS 在线扩容文件系统
resize2fs /dev/vg0/lv_data # ext4 扩容
lvreduce -L -5G /dev/vg0/lv_data # 缩容(先卸载,ext4 可在线,XFS 不支持)
pvdisplay / vgdisplay / lvdisplay # 查看 LVM 详情
pvs / vgs / lvs # 简略视图
# swap
free -h # 查看 swap
swapon --show # 查看 swap 设备
fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile七、软件包管理(DNF/YUM/RPM)
# 仓库
dnf repolist # 仓库列表
dnf install -y epel-release # 安装 EPEL 仓库
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装/卸载/更新
dnf install -y nginx # 安装(-y 自动确认)
dnf remove -y nginx # 卸载
dnf update -y # 全量更新
dnf list installed | grep nginx # 已安装
dnf search nginx # 搜索
dnf info nginx # 包信息
dnf provides */nginx # 文件属于哪个包
# rpm
rpm -ivh package.rpm # 安装
rpm -e package # 卸载
rpm -qa | grep nginx # 查询已安装
rpm -qf /etc/nginx/nginx.conf # 文件属于哪个包
rpm -ql nginx # 包安装的文件列表
rpm -V nginx # 校验包完整性
# 源码编译(如 nginx)
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make -j$(nproc)
make install八、计划任务
# 一次性任务
at 10:30 # 10:30 执行(回车后输入命令 Ctrl+D)
at now + 5 minutes
atq # 查看待执行任务
atrm 3 # 删除任务
# 周期任务 crontab
crontab -e # 编辑当前用户计划任务
crontab -l # 查看
crontab -r # 清空
# 格式:分 时 日 月 周 命令
*/5 * * * * /usr/local/bin/check.sh # 每 5 分钟
0 2 * * * /usr/local/bin/backup.sh # 每天 02:00
0 0 * * 0 /usr/local/bin/weekly.sh # 每周日 00:00
30 3 1 * * /usr/local/bin/monthly.sh # 每月 1 日 03:30
# 常用环境:MAILTO="" PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
# 系统级:/etc/crontab、/etc/cron.d/
# 日志:/var/log/cron九、服务与 systemd
systemctl start nginx # 启动服务
systemctl stop nginx # 停止
systemctl restart nginx # 重启
systemctl reload nginx # 平滑重载配置(不中断)
systemctl enable nginx # 开机自启
systemctl disable nginx # 取消自启
systemctl status nginx # 状态(含最近日志)
systemctl is-active nginx # 是否运行(active/inactive)
systemctl list-units --type=service --state=running # 运行中的服务
systemctl daemon-reload # 重载 unit 定义
journalctl -u nginx # 服务日志
journalctl -u nginx -f # 实时跟踪
journalctl --since "2026-08-30 10:00" # 按时间过滤
journalctl -p err # 只显示错误级别
# 自定义服务:/etc/systemd/system/app.service
# [Unit] Description=xx After=network.target
# [Service] ExecStart=/opt/app/run.sh Restart=always User=app
# [Install] WantedBy=multi-user.target十、网络管理
# 查看
ip addr / ip a # IP 地址
ip route / ip r # 路由表
ss -lntp # 监听端口(-l 监听 -n 数字 -t TCP -p 进程)
ss -tunap # 全部 TCP/UDP 连接
hostname -I # 本机 IP
ping -c 4 baidu.com # 连通性测试
traceroute baidu.com # 路由追踪
dig baidu.com # DNS 查询
nslookup baidu.com # DNS 查询(简单)
curl -I http://localhost:8080 # HTTP 头探测
nc -zv 10.0.0.10 22 # 端口探测
mtr baidu.com # 网络质量
# NetworkManager
nmcli con show # 连接列表
nmcli device status # 设备状态
nmcli con mod ens33 ipv4.addresses 10.0.0.10/24 ipv4.gateway 10.0.0.1 ipv4.dns 223.5.5.5 ipv4.method manual
nmcli con up ens33 # 激活
nmcli con add type ethernet con-name eth1 ifname ens37 ipv4.addresses 10.0.0.20/24 ipv4.method manual
hostnamectl set-hostname node1 # 修改主机名
# 网卡绑定(bond)
# /etc/sysconfig/network-scripts/ifcfg-bond0
# BONDING_OPTS="mode=1 miimon=100" # 主备模式
# 防火墙 firewalld
firewall-cmd --state # 状态
firewall-cmd --list-all # 当前规则
firewall-cmd --permanent --add-port=8080/tcp # 开放端口
firewall-cmd --permanent --add-service=http # 开放服务
firewall-cmd --permanent --add-source=192.168.1.0/24 --zone=trusted
firewall-cmd --reload # 重载生效
firewall-cmd --permanent --remove-port=8080/tcp
systemctl stop firewalld && systemctl disable firewalld # 关闭防火墙
# SELinux
getenforce # 查看状态(Enforcing/Permissive/Disabled)
setenforce 0 # 临时关闭
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config # 永久关闭
ls -Z /var/www/html # 查看上下文
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?" # 放行目录
restorecon -Rv /data/web # 恢复上下文
ausearch -m avc -ts recent # 查看 SELinux 拒绝日志十一、SSH 与远程管理
ssh root@10.0.0.10 # 远程登录
ssh -p 2222 root@10.0.0.10 # 指定端口
scp file.txt root@10.0.0.10:/tmp/ # 拷贝文件
scp -r /data root@10.0.0.10:/backup/ # 递归拷贝目录
rsync -avz /data root@10.0.0.10:/backup/ # 增量同步
sftp root@10.0.0.10 # 文件传输会话
# 密钥认证
ssh-keygen -t rsa -b 4096 # 生成密钥对
ssh-copy-id root@10.0.0.10 # 拷贝公钥到目标
# 免密后:ssh root@10.0.0.10 直接登录
# 服务端配置 /etc/ssh/sshd_config
# Port 22 → 修改端口
# PermitRootLogin no → 禁止 root 登录
# PasswordAuthentication yes/no → 是否允许密码登录
# PubkeyAuthentication yes → 启用密钥
systemctl restart sshd # 生效
# 隧道
ssh -L 8080:localhost:80 root@10.0.0.10 # 本地端口转发
ssh -N -f -L 3307:127.0.0.1:3306 root@db1 # 后台建立隧道十二、日志管理
# 日志位置
/var/log/messages # 系统主日志
/var/log/secure # 安全/认证日志
/var/log/cron # 计划任务日志
/var/log/boot.log # 启动日志
/var/log/dmesg # 内核日志
/var/log/nginx/access.log # 应用日志(按应用)
# 查看
tail -f /var/log/messages
grep -i "error\|fail" /var/log/messages
journalctl -xe # 系统 journal 最近错误
dmesg | tail -20 # 内核最近日志
# rsyslog 规则(/etc/rsyslog.conf, /etc/rsyslog.d/*.conf)
# 语法:设施.级别 目标
# authpriv.* /var/log/secure
# 自定义应用日志:app.* /var/log/app.log
# logrotate 轮转(/etc/logrotate.conf, /etc/logrotate.d/)
cat > /etc/logrotate.d/app <<'EOF'
/var/log/app/*.log {
daily # 每天轮转
rotate 30 # 保留 30 份
compress # 压缩
missingok
notifempty
copytruncate # 应用不重开日志文件时用
}
EOF十三、Shell 脚本要点
#!/bin/bash
# 变量
name="world"
echo "hello $name"
read -p "请输入: " input
export PATH=/usr/local/bin:$PATH
# 条件
if [ -f /etc/nginx.conf ]; then
echo "存在"
elif [ -d /data ]; then
echo "目录"
else
echo "不存在"
fi
# 循环
for i in $(seq 1 10); do echo $i; done
for f in /etc/*.conf; do echo $f; done
while read line; do echo $line; done < /etc/hosts
# 函数
function check_port() {
local port=$1
ss -lnt | grep -q ":$port " && echo "端口占用" || echo "空闲"
}
check_port 8080
# 实战:批量创建用户
for u in dev1 dev2 dev3; do
useradd -m $u && echo "$u:123456" | chpasswd
done
# 实战:MySQL 备份脚本骨架
# mysqldump -u备份用户 -p密码 dbname | gzip > /backup/db_$(date +%F).sql.gz
# 保留 7 天:find /backup -name "*.sql.gz" -mtime +7 -delete十四、Ansible 快速命令
# 安装与配置
dnf install -y ansible
vi /etc/ansible/hosts # Inventory(或项目内 hosts)
# [webservers]
# 192.168.1.10 ansible_ssh_user=root
# 192.168.1.11 ansible_ssh_user=root
# 连通性
ansible all -m ping
ansible webservers -m shell -a "uptime"
ansible webservers -m shell -a "free -h" -b
# 常用模块
ansible all -m copy -a "src=/etc/hosts dest=/tmp/hosts"
ansible all -m file -a "path=/data state=directory mode=0755"
ansible all -m yum -a "name=nginx state=present"
ansible all -m service -a "name=nginx state=started enabled=yes"
ansible all -m cron -a "name=backup minute=0 hour=2 job=/opt/backup.sh"
ansible all -m user -a "name=dev shell=/bin/bash"
# 语法检查与执行
ansible-playbook -C site.yml # 检查模式(dry-run)
ansible-playbook site.yml -uroot -k # 实际执行
ansible-playbook site.yml --tags nginx # 只执行指定标签
ansible-playbook site.yml --list-hosts # 查看目标主机
ansible-playbook site.yml --list-tasks # 查看任务列表
# ansible-doc
ansible-doc -l | grep yum
ansible-doc -s copy十五、性能调优常用内核参数
# 查看/设置
sysctl vm.swappiness # 查看
sysctl -w vm.swappiness=10 # 临时修改
vi /etc/sysctl.conf # 永久(sysctl -p 生效)
# 常用参数
net.ipv4.ip_forward = 1 # 开启转发(K8S/路由)
net.ipv4.tcp_tw_reuse = 1 # TIME_WAIT 复用
net.core.somaxconn = 65535 # 连接队列上限
vm.swappiness = 10 # 减少 swap 使用
vm.max_map_count = 262144 # 内存映射数(ES 需要)
fs.file-max = 1000000 # 文件句柄上限
# 用户限制:/etc/security/limits.conf
# * soft nofile 65535
# * hard nofile 65535
# * soft nproc 65535
# * hard nproc 65535十六、性能调优进阶(RHCA RH442 精读命令)
来源:
分章笔记\01-Linux\RHCA英语教材精读\RH442-01~13(RH442 RHEL8.0 官方教材 OCR 精读,每章含命令速查表/词汇表/自测 10 题)。本节把 12 个主题章的速查命令汇总成一套“调优命令手册”,实验环境命令以lab评分为准。
16.1 监控工具选型与硬件画像(Ch2~3)
# 系统监控(快照/实时/概览)
ps aux ; top -n 1 # 进程快照/实时;load 高+us 低+wa 高=存储瓶颈
free -m -s 1 # available≈回收缓存后可用量
df -h ; lsblk -fp ; findmnt # 磁盘与挂载
vmstat 1 5 # 虚拟内存统计(首行是开机均值,忽略)
sar -q -B -r -n DEV 1 3 # sysstat 汇总(CPU/分页/内存/网卡)
# 每 CPU / 进程级
mpstat -P ALL 1 3 # 各 CPU 使用率
pidstat -d -r -t -p <pid> 1 3 # 进程磁盘/内存/线程
iostat -xd vda 1 3 # %util 超 100%=设备异常
# PCP(Performance Co-Pilot)
yum install pcp pcp-system-tools pcp-gui
systemctl enable --now pmcd # 采集守护
pcp dstat ; pcp-atop -d # 汇总/磁盘视图
pmstat -s 5 ; pmcollectl -c 5 # 周期采样
pminfo ; pmval kernel.all.load # 指标名与取值
pmlogger + pmdumplog + pmval -a <归档> -S <起> -T <止> # 归档回放
# 硬件画像(调优第一步)
dmesg -T | grep -iE "dma|huge|io scheduler" ; dmesg -T | head
lscpu [-p] ; getconf -a # CPU/系统常数(PAGESIZE、NPROCESSORS_ONLN)
dmidecode ; cat /sys/class/dmi/id/product_name
lspci ; lsusb ; lstopo ; lshw -short
# RAS 硬件错误(内存/PCIe)
yum install rasdaemon ; systemctl enable --now rasdaemon
ras-mc-ctl --summary ; ras-mc-ctl --errors
# 虚拟化硬件视角
virsh dumpxml <guest> ; kvm_stat # CPU mode/balloon;KVM 事件
# guest 内核符号转宿主 perf kvm 分析
# guest 内导出 /proc/modules、/proc/kallsyms → 宿主 perf kvm record/report16.2 内核可调参数与 tuned 档(Ch4)
# 查看/临时/永久
sysctl vm.swappiness ; cat /proc/sys/vm/swappiness
sysctl -w vm.swappiness=10 ; echo 10 > /proc/sys/vm/swappiness
vi /etc/sysctl.conf ; sysctl -p
vi /etc/sysctl.d/99-custom.conf ; sysctl --system # 目录式(推荐)
# 内核模块参数
modinfo <模块> ; modprobe -r <模块>
modprobe <模块> <参数=值>
vi /etc/modprobe.d/<名>.conf # 写 options <模块> <参数=值>
# tuned 档
tuned-adm active ; tuned-adm list ; tuned-adm recommend
tuned-adm profile virtual-host|virtual-guest|throughput-performance|latency-performance
# 自订档 /etc/tuned/<档名>/tuned.conf:
# [main] summary=说明 include=<父档>
# [sysctl] vm.swappiness=10
# [vm] transparent_hugepages=never
# [disk] elevator=mq-deadline 或 devices=vda readahead=4096 sectors
# [sysfs] /sys/block/vda/queue/iosched/fifo_batch=1
tuned-adm profile <档名> ; tuned-adm verify <档名>16.3 cgroups 与 systemd 资源限制(Ch5)
# systemd 服务限额:/etc/systemd/system/<svc>.service.d/50-limit.conf
# [Service] MemoryLimit=1G TasksMax=512 CPUQuota=50%
systemctl set-property sshd.service MemoryLimit=1G # 自动生成 drop-in
systemctl daemon-reload ; systemctl restart <svc>
systemd-cgls ; systemd-cgtop # cgroup 树/用量
# slice 隔离:/etc/systemd/system/system-frontend.slice
# [Slice] CPUQuota=50% CPUAccounting=yes
# 服务入片:drop-in [Service] Slice=system-frontend.slice
# cgroup v2 手动:mkdir /sys/fs/cgroup/<组>
echo 50M > /sys/fs/cgroup/<组>/memory.max ; echo <pid> > /sys/fs/cgroup/<组>/cgroup.procs
# PAM 会话级限制:/etc/security/limits.conf
# * soft nofile 65535 * hard nofile 65535 * soft nproc 6553516.4 系统追踪工具(Ch6)
perf list ; perf stat -e cycles,instructions,cache-misses <cmd>
perf record -e <事件> <cmd> ; perf report --stdio ; perf archive
strace -f -e open -p <pid> <cmd> ; strace -c <cmd> # 调用追踪/汇总
# SystemTap(需 debuginfo,stap-prep 自动准备)
yum install systemtap ; stap-prep ; stap -v <脚本.stp>
stap -p 4 -m <模块名> <脚本> # 预编译
staprun <模块名> # 受限用户运行
# BCC/eBPF(免内核模块,最省事)
yum install bcc-tools
/usr/share/bcc/tools/execsnoop # 实时新进程
/usr/share/bcc/tools/opensnoop # open 系统调用
/usr/share/bcc/tools/biosnoop # 块设备 I/O
/usr/share/bcc/tools/cachestat # 页缓存命中16.5 CPU 调度与亲和(Ch7)
chrt -f -p 50 <pid> # SCHED_FIFO 优先级 50
chrt -r -p 30 <pid> # SCHED_RR
chrt -d ... # SCHED_DEADLINE(-T/-D/-P 调 runtime/deadline/period)
nice -n -10 <cmd> ; renice -n -10 -p <pid>
sysctl kernel.sched_rt_runtime_us=-1 # 关实时节流(默认 950000,留 5%)
taskset -pc 0,1 <pid> # 运行中进程绑核
taskset -c 0-3 <cmd> # 启动即绑
# systemd 绑核:drop-in [Service] CPUAffinity=0
# IRQ 亲和
cat /proc/interrupts ; echo 2 > /proc/irq/<N>/smp_affinity
# 缓存行为
valgrind --tool=cachegrind <cmd> ; perf stat -e cache-misses <cmd>16.6 内存调优(Ch8)
free -m ; vmstat 1
grep -E "Active|Dirty|Huge|Commit" /proc/meminfo
# 大页 / THP
sysctl -w vm.nr_hugepages=20 # 2 MiB 页;要连续空闲内存
echo never > /sys/kernel/mm/transparent_hugepage/enabled # always/never/madvise
grep AnonHugePages /proc/meminfo # THP 实际用量
# 分页回收
sysctl vm.swappiness=1 # 最小 swap(不建议写 0)
sysctl vm.dirty_expire_centisecs=500 ; vm.dirty_writeback_centisecs=100
sysctl vm.dirty_background_ratio=3 # 脏页 3% 后台回写
sysctl vm.dirty_ratio=15 # 15% 进程写阻塞强制刷盘
# OOM
sysctl vm.panic_on_oom=1 # panic 而非杀进程
# systemd 免疫:drop-in [Service] OOMScoreAdjust=-1000
# NUMA
numactl --hardware ; numastat -cm # 节点/内存/大页分布
numactl --cpunodebind=0 --membind=0 <cmd>
sysctl kernel.numa_balancing=0 # 用 numad 时关自动平衡
# overcommit
sysctl vm.overcommit_memory=0|1|2 ; sysctl vm.overcommit_ratio=50
watch grep Commit /proc/meminfo # CommitLimit / Committed_AS16.7 存储 I/O 与 RAID(Ch9)
# 多队列 I/O 调度器
cat /sys/block/vda/queue/scheduler # [mq-deadline] kyber bfq none
echo none > /sys/block/vda/queue/scheduler # NVMe=none 不可改
ls /sys/block/vda/queue/iosched # fifo_batch/front_merges/read_expire/write_expire/writes_starved
# 旧单队列 deadline/cfq/noop:引导参数 scsi_mod.use_blk_mq=0
# fio 基准(direct=1 才测到磁盘而非内存)
fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite \
--bs=4k --direct=1 --size=512M --numjobs=2 --group_reporting --filename=/tmp/testfile
# 软件 RAID
parted /dev/vdb mklabel gpt
parted -a optimal /dev/vdb mkpart primary 0% 100% ; partx -uv /dev/vdb
mdadm -C /dev/md0 -l raid0 -n 2 /dev/vd[b-c]1 # raid0/1/5/6/10
mdadm --detail /dev/md0 # 默认 Chunk Size 512K
mdadm --stop /dev/md0 ; mdadm --remove /dev/md0
mdadm --zero-superblock /dev/vdb # 清成员盘标识
# 条带对齐:XFS su=chunk、sw=数据盘数(总盘-校验盘)
mkfs -t xfs -d su=512k,sw=2 /dev/md0
mkfs.ext4 -E stride=128,stripe-width=256 <dev> # 块数口径(4K 块+512K chunk)
# LVM RAID
lvcreate --type raid0 -L 3G -n raidlv raidvg ; lvconvert --type raid1 <lv>
# I/O 分析
iostat -xd vda ; iotop -o -P -a ; pcp-atop -d ; pmiostat -R vda
blktrace -d /dev/vda ; blkparse ; btt # Q2c=含等待、D2c=设备服务16.8 文件系统调优(Ch10)
# XFS 格式化(条带/块/目录块/inode)
mkfs.xfs -d su=512k,sw=2 -b size=4096 -n size=8192 -i size=512 <dev>
# ext4 格式化(小文件场景:inode 128、开 large_dir、关 huge_file/extra_isize)
mkfs.ext4 -I 128 -b 4096 -O large_dir,^huge_file,^extra_isize <dev>
# atime 族挂载项(默认 relatime)
mount -o noatime|nodiratime|relatime <dev> <mnt>
# SSD discard(TRIM)
fstrim /mnt ; systemctl enable --now fstrim.timer ; mount -o discard <dev> <mnt>
# XFS 外部日志(建与挂载都要指 logdev)
mkfs.xfs -l logdev=/dev/vdd1 /dev/vdc1
mount -o logdev=/dev/vdd1 /dev/vdc1 /mnt
# ext4 外部日志(同块大小)
mkfs.ext4 -O journal_dev -b 4096 /dev/vdd1 # 先建日志设备
mkfs.ext4 -J device=/dev/vdd1 -b 4096 /dev/vdc1 # 主 FS 指日志;挂载无需再指
# ext4 内转外(先干净卸载/fsck 保证旧日志空)
tune2fs -O ^has_journal /dev/vdc1 ; tune2fs -j -J device=/dev/vdd1 /dev/vdc1
tune2fs -l <dev> ; lsblk -f ; findmnt --target <mnt>16.9 网络调优(Ch11)
# BDP=带宽(bit/s)×RTT(s)÷8 → 缓冲字节;RTT 用 ping 平均
ping <host> ; sysctl -w net.core.rmem_max=25000000
sysctl -w net.ipv4.tcp_rmem="4096 12500000 25000000" # min default max
# tcp_rmem/wmem 的 max 不能超过 net.core.rmem_max/wmem_max
sysctl net.ipv4.tcp_window_scaling=1 # BDP>64KiB 时协商窗口缩放
# 巨帧(MTU 1500→9000,SAN/集群等全线支持才用)
nmcli connection modify <连接> 802-3-ethernet.mtu 9000 ; nmcli connection up <连接>
# ethtool(改动即时生效,持久化走 NetworkManager 属性)
ethtool ens3 ; ethtool -s ens3 advertise 0x28 # 100/1000M Full 位掩码
ethtool -s ens3 autoneg off speed 1000 duplex full
ethtool -k ens3 ; ethtool -K ens3 tx-tcp-segmentation off|on # TSO 开关
nmcli connection modify <连接> ethtool.feature-tx-tcp-segmentation on
# qperf 双机吞吐(服务端 qperf 默认 19765)
qperf <host> --time 20 tcp_bw udp_bw
# team 聚合(teamd runners:broadcast/roundrobin/activebackup/loadbalance/lacp)
nmcli connection add type team con-name team0 ifname team0 team.runner loadbalance
nmcli connection add type ethernet slave-type team con-name team0-port1 ifname eno1 master team0
nmcli connection up team0 ; teamdctl team0 state ; teamnl team0 ports16.10 虚拟化调优(Ch12)
tuned-adm profile virtual-host # 宿主档(脏页阈值 5%);guest 用 virtual-guest
virsh numatune <guest> # strict 模式+nodeset
virsh vcpupin <guest> --config 0 0 # vCPU0→物理 CPU0(缓存命中)
virsh emulatorpin <guest> --config 1 # QEMU 线程绑物理 CPU1
virsh schedinfo <guest> --config cpu_shares=2048 # 2 倍于默认 1024
virsh memtune <guest> --config --hard-limit 1024MiB --soft-limit 512MiB
virsh node-memory-tune --shm-pages-to-scan 100 --shm-sleep-millisecs 10 --shm-merge-across-nodes 1 # KSM
systemctl disable ksm ksmtuned --now # 关 KSM;单 guest 用 XML nosharepages
qemu-img create -f qcow2 -o preallocation=metadata /var/lib/libvirt/images/disk.qcow2 1G
# 磁盘 XML:driver cache=none(可迁移)io=native;iotune 限流
virsh blkdeviotune <guest> vdb --config --total-iops-sec 1000 --total-bytes-sec 20M
# 取虚机指标
virsh domblkstat <guest> vda --human ; virsh domifstat <guest> vnet0 ; virsh dommemstat <guest>
# Prometheus + Grafana(KVM 监控栈)
# 目标装 node_exporter(:9100)→ prometheus.yml 配 scrape_configs/static_configs
./promtool check config prometheus.yml
./prometheus --storage.tsdb.path /var/lib/prometheus/ # :9090 /metrics /targets
# Grafana :3000(admin/admin),数据源填 Prometheus,导入仪表盘 JSON16.11 RH442 综合复习 Lab(Ch13)
lab compreview-cpu start|grade|finish # slice 限 50% + httpd 绑 CPU0 + rngd batch 优先级 0
lab compreview-disk start|grade|finish # tuned readahead=4096 扇区 + XFS 外部日志(logdev)
lab compreview-memory start|grade|finish # 大页 128/THP never/swappiness=1/dirty 3-15/overcommit=1
# # + memload MemoryLimit=512M + numactl --interleave all逐章命令速查表/词汇表/自测见
RHCA英语教材精读\RH442-01~13;RHCA 各实验环境以lab脚本评分为准。
十七、故障排查套路
# 1. 系统负载高 → top 看 CPU/内存 → 定位进程
# 2. 磁盘满 → df -h 找分区 → du -sh * 找大文件 → 清理/扩容
# 3. 端口不通 → ss -lntp 看监听 → firewall-cmd --list-all 看防火墙 → ping/curl 测试
# 4. 服务起不来 → journalctl -u 服务名 -xe → 检查配置语法(nginx -t)
# 5. 内存不足 → free -h → top 按内存排序 → 查 OOM(dmesg | grep -i oom)
# 6. 网络慢 → ping/traceroute → mtr → ethtool 网卡速率 → iperf 带宽测试
# 7. 登录失败 → tail -f /var/log/secure 实时观察
# 8. 内核问题 → dmesg | tail -50 → /var/log/messages提示:生产环境执行 rm -rf、sed -i、lvextend 等操作前务必先备份或确认,避免误操作造成数据丢失。
