前言

本文整理了 CentOS 系统中最常用的命令,涵盖文件管理、用户管理、进程管理、网络管理、系统管理等各个方面,适合运维工程师和系统管理员日常查阅。


一、文件与目录管理

1.1 基础操作

# 查看当前目录
pwd

# 切换目录
cd /home
cd ..
cd ~          # 切换到用户家目录
cd -          # 切换到上一个目录

# 列出文件
ls                    # 列出当前目录文件
ls -la                # 列出详细信息(包括隐藏文件)
ls -lh                # 人类可读格式显示文件大小
ls -lt                # 按修改时间排序
ls /path/to/dir       # 列出指定目录内容

# 查看文件内容
cat file.txt          # 显示整个文件
more file.txt         # 分页显示
less file.txt         # 可前后翻页查看
head -n 10 file.txt   # 查看前 10 行
tail -n 10 file.txt   # 查看后 10 行
tail -f /var/log/messages  # 实时查看日志

1.2 文件操作

# 创建文件
touch file.txt
echo "content" > file.txt
echo "append content" >> file.txt

# 复制文件
cp file.txt file_backup.txt
cp -r dir1/ dir2/     # 递归复制目录

# 移动/重命名文件
mv old_name.txt new_name.txt
mv file.txt /tmp/

# 删除文件
rm file.txt
rm -rf directory/     # 强制递归删除目录(慎用!)
rm -i file.txt        # 删除前确认

1.3 目录操作

# 创建目录
mkdir new_dir
mkdir -p dir1/dir2/dir3  # 递归创建多级目录

# 删除空目录
rmdir empty_dir

# 查看目录树
tree
tree -L 2             # 只显示 2 层
tree -d               # 只显示目录

1.4 文件查找

# 查找文件(按名称)
find /path -name "filename"
find /path -name "*.log"
find /path -iname "FILE*"    # 忽略大小写

# 查找文件(按类型)
find /path -type f           # 查找文件
find /path -type d           # 查找目录

# 查找文件(按大小)
find /path -size +100M       # 大于 100MB
find /path -size -10M        # 小于 10MB

# 查找文件(按时间)
find /path -mtime -7         # 7 天内修改过的
find /path -mtime +30        # 30 天前修改的

# 查找并执行命令
find /path -name "*.log" -delete
find /path -name "*.tmp" -exec rm {} \;

# 定位文件(快速查找数据库)
locate filename
updatedb                     # 更新数据库

# 搜索命令路径
which python3
whereis python

1.5 文件内容搜索

# 在文件中搜索文本
grep "pattern" file.txt
grep -i "error" /var/log/messages    # 忽略大小写
grep -r "keyword" /path/to/dir      # 递归搜索
grep -n "pattern" file.txt           # 显示行号
grep -v "comment" file.txt           # 反向匹配
grep -E "error|warning" log.txt      # 正则表达式

# 组合命令
grep "error" log.txt | wc -l         # 统计出现次数
ps aux | grep nginx                   # 查找 nginx 进程

二、文件权限与属性

2.1 权限管理

# 查看权限
ls -la

# 权限表示:-rwxr-xr--
# - 文件类型(-文件 d目录 l链接)
# rwx 所有者权限  r-x 所属组权限  r-- 其人权限

# 修改权限(数字方式)
chmod 755 file.sh    # rwxr-xr-x
chmod 644 file.txt   # rw-r--r--
chmod +x script.sh   # 添加执行权限

# 修改权限(符号方式)
chmod u+x file.sh    # 所有者添加执行权限
chmod g-w file.txt   # 移除组写权限
chmod o=r file.txt   # 其人只读

# 递归修改权限
chmod -R 755 /var/www/html/

2.2 所有者管理

# 查看所有者
ls -l

# 修改所有者
chown user file.txt
chown user:group file.txt    # 同时修改所有者和组

# 递归修改
chown -R www-data:www-data /var/www/

# 修改所属组
chgrp group file.txt

2.3 特殊权限

# SUID(以文件所有者身份执行)
chmod u+s /usr/bin/passwd

# SGID(继承目录的组权限)
chmod g+s /shared/directory

# Sticky Bit(只有所有者可删除)
chmod +t /tmp

三、用户与组管理

3.1 用户管理

# 查看当前用户
whoami
id

# 查看所有用户
cat /etc/passwd
cut -d: -f1 /etc/passwd

# 添加用户
useradd username
useradd -m -s /bin/bash username    # 创建家目录和指定 shell
useradd -g groupname username       # 指定主组

# 设置密码
passwd username
echo "password" | passwd --stdin username

# 修改用户
usermod -aG group username     # 添加到附加组
usermod -l newname oldname     # 修改用户名
usermod -s /bin/zsh username   # 修改默认 shell

# 删除用户
userdel username
userdel -r username           # 同时删除家目录

# 查看登录用户
who
w
last                          # 查看登录历史

3.2 组管理

# 查看所有组
cat /etc/group
getent group

# 添加组
groupadd groupname

# 删除组
groupdel groupname

# 修改组
groupmod -n newname oldname

# 将用户添加到组
gpasswd -a username groupname
usermod -aG groupname username

# 从组中移除用户
gpasswd -d username groupname

3.3 切换用户

# 切换到 root
su -
su root

# 切换到普通用户
su - username

# 以其他用户身份执行命令
sudo command
su - username -c "command"

四、进程管理

4.1 进程查看

# 查看进程
ps aux
ps -ef
ps aux | grep nginx

# 实时查看进程(动态)
top
htop                      # 更友好的界面

# 查看进程树
pstree
pstree -p                 # 显示 PID
pstree -u                 # 显示用户

# 查看指定进程
ps aux | grep mysql
pgrep mysql
pidof nginx

4.2 进程控制

# 终止进程
kill 1234
kill -9 1234              # 强制终止
killall nginx
pkill httpd

# 后台运行
nohup command &           # 退出终端后继续运行
nohup ./script.sh > log.txt 2>&1 &

# 查看后台任务
jobs
bg %1                     # 后台继续运行
fg %1                     # 前台运行

# 调整进程优先级
nice -n 10 command        # 降低优先级(10)
renice -n 5 -p 1234       # 调整已运行进程的优先级

4.3 系统资源监控

# CPU 和内存使用
free -h                   # 查看内存
free -h -s 2              # 每 2 秒刷新
vmstat 1 5                # 每秒显示一次,共 5 次

# 磁盘使用
df -h                     # 人类可读格式
du -sh *                  # 查看目录大小
du -sh /var/log/*         # 查看日志文件大小

# I/O 监控
iostat -x 1               # 实时监控 I/O

# 综合监控
dstat                     # 需要安装
sar                       # 系统活动报告

# 查看系统负载
uptime
cat /proc/loadavg

五、网络管理

5.1 网络配置

# 查看 IP 地址
ip addr
ip a
ip addr show eth0

# 查看网络接口
ifconfig                  # 传统命令
ip link show

# 配置 IP(临时)
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up

# 查看/配置路由
ip route
ip route add default via 192.168.1.1
ip route del default

# 查看 DNS 配置
cat /etc/resolv.conf

# 修改 DNS
echo "nameserver 8.8.8.8" >> /etc/resolv.conf

5.2 网络测试

# 测试网络连通性
ping google.com
ping -c 4 192.168.1.1    # 只 ping 4 次

# 测试端口连通性
telnet 192.168.1.1 80
nc -zv 192.168.1.1 22    # 需要 netcat

# 查看端口监听
netstat -tlnp
netstat -tulpn
ss -tulpn                # 更快
lsof -i :80              # 查看谁在使用端口 80

# 跟踪路由
traceroute google.com
tracepath google.com

# DNS 查询
nslookup google.com
dig google.com
host google.com

# 抓包
tcpdump -i eth0          # 需要安装
tcpdump -i eth0 port 80

5.3 防火墙管理(firewalld)

# 启动/停止/重启防火墙
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
systemctl enable firewalld    # 开机启动

# 查看防火墙状态
firewall-cmd --state
firewall-cmd --list-all

# 查看开放的端口
firewall-cmd --list-ports

# 开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload

# 移除端口
firewall-cmd --permanent --remove-port=80/tcp
firewall-cmd --reload

# 添加服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

# 查看富规则
firewall-cmd --list-rich-rules

5.4 端口转发

# 本地端口转发
ssh -L 8080:remote.example.com:80 user@server

# 远程端口转发
ssh -R 8080:localhost:80 user@server

# 动态端口转发(SOCKS 代理)
ssh -D 1080 user@server

六、系统管理

6.1 服务管理(systemd)

# 启动服务
systemctl start nginx
systemctl start docker

# 停止服务
systemctl stop nginx

# 重启服务
systemctl restart nginx

# 重新加载配置
systemctl reload nginx

# 查看服务状态
systemctl status nginx

# 开机自启
systemctl enable nginx
systemctl disable nginx

# 查看服务是否开机自启
systemctl is-enabled nginx

# 查看所有服务
systemctl list-units --type=service
systemctl list-units --all | grep nginx

# 查看启动失败的服务
systemctl --failed

# 查看服务依赖
systemctl list-dependencies nginx

6.2 日志管理(journalctl)

# 查看系统日志
journalctl

# 查看指定服务的日志
journalctl -u nginx
journalctl -u docker -f       # 实时查看

# 查看最近 100 条日志
journalctl -n 100

# 查看指定时间的日志
journalctl --since "1 hour ago"
journalctl --since yesterday
journalctl --since "2026-03-25 00:00:00"
journalctl --until "2026-03-25 12:00:00"

# 查看内核日志
journalctl -k

# 只显示错误
journalctl -p err
journalctl -p err -b         # 本次启动的错误

# 持续监控
journalctl -f

# 导出日志
journalctl > export.log
journalctl -u nginx > nginx.log

6.3 系统信息查看

# 查看系统版本
cat /etc/redhat-release
cat /etc/os-release
hostnamectl

# 查看内核版本
uname -r
uname -a

# 查看系统架构
uname -m
arch

# 查看主机名
hostname
hostnamectl set-hostname new-name

# 查看开机时间
uptime
who -b

# 查看环境变量
env
export PATH=$PATH:/new/path

# 查看定时任务
crontab -l
crontab -e                # 编辑定时任务

6.4 系统更新与软件管理(yum/dnf)

# 更新系统
yum update
yum upgrade
yum check-update

# 安装软件
yum install package_name
yum install nginx docker
yum localinstall package.rpm

# 卸载软件
yum remove package_name
yum erase package_name

# 搜索软件
yum search keyword
yum info package_name
yum provides nginx         # 查看哪个包提供某个文件

# 查看已安装软件
yum list installed
yum list installed | grep docker

# 查看可更新软件
yum check-update
yum list updates

# 清理缓存
yum clean all
yum makecache

# 查看软件仓库
yum repolist
yum repolist all

# 添加/启用仓库
yum-config-manager --add-repo http://repo.url
yum-config-manager --enable epel
yum-config-manager --disable repo

# 查看 yum 历史
yum history
yum history info 5
yum history undo 5
yum history redo 3

6.5 RPM 包管理

# 安装 RPM 包
rpm -ivh package.rpm       # i=安装, v=显示详细信息, h=显示进度
rpm -Uvh package.rpm       # U=升级

# 查询已安装软件
rpm -qa                    # 查询所有已安装
rpm -qa | grep docker
rpm -q docker              # 查询特定软件
rpm -qi docker             # 查询详细信息
rpm -ql docker             # 查看安装的文件列表

# 查询文件属于哪个包
rpm -qf /etc/nginx/nginx.conf
which nginx | xargs rpm -qf

# 卸载 RPM 包
rpm -e package_name
rpm -e --nodeps package   # 忽略依赖关系卸载

# 验证 RPM 包
rpm -V package_name        # 验证软件包完整性
rpm -K package.rpm        # 验证 RPM 包签名

# 导入 GPG 密钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

6.6 EPEL 仓库

# 安装 EPEL(Extra Packages for Enterprise Linux)
yum install epel-release

# 查看 EPEL 仓库
yum repolist | grep epel

# 仅从 EPEL 安装软件
yum --enablerepo=epel install htop

# 临时禁用 EPEL
yum --disablerepo=epel update

七、磁盘管理

7.1 磁盘使用

# 查看磁盘使用情况
df -h

# 查看 inode 使用
df -i

# 查看目录大小
du -sh /var/log
du -h --max-depth=1 /var/log

# 查看大文件
find /var/log -type f -size +100M -exec ls -lh {} \;

# 按大小排序
du -sh * | sort -h
du -sh * | sort -rh | head -10

7.2 磁盘挂载

# 查看磁盘分区
fdisk -l

# 查看块设备
lsblk

# 查看文件系统
blkid

# 挂载磁盘
mount /dev/sdb1 /mnt
mount -t ntfs /dev/sdb1 /mnt

# 卸载磁盘
umount /mnt
umount -l /mnt            # 强制卸载

# 查看挂载信息
mount
df -h
cat /etc/fstab            # 查看开机自动挂载

# 添加开机自动挂载
echo "/dev/sdb1 /mnt xfs defaults 0 0" >> /etc/fstab

7.3 LVM 管理

# 创建物理卷
pvcreate /dev/sdb1

# 创建卷组
vgcreate vg_name /dev/sdb1

# 创建逻辑卷
lvcreate -L 10G -n lv_name vg_name
lvcreate -l 100%FREE -n lv_name vg_name

# 扩展逻辑卷
lvextend -L +5G /dev/vg_name/lv_name
lvextend -l +100%FREE /dev/vg_name/lv_name

# 扩展文件系统
xfs_growfs /
resize2fs /dev/vg_name/lv_name

# 查看 LVM 信息
vgdisplay
lvdisplay
pvdisplay

八、压缩与解压

8.1 tar 打包

# 打包
tar -cvf archive.tar file1 file2 dir/

# 打包并压缩(gzip)
tar -czvf archive.tar.gz file1 file2 dir/
tar -czvf backup.tar.gz /var/www/html/

# 打包并压缩(bzip2,更小但更慢)
tar -cjvf archive.tar.bz2 dir/

# 打包并压缩(xz,最小但最慢)
tar -cJvf archive.tar.xz dir/

# 解压
tar -xvf archive.tar
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xJvf archive.tar.xz

# 解压到指定目录
tar -xzvf archive.tar.gz -C /path/to/dir

# 查看压缩包内容
tar -tzvf archive.tar.gz

8.2 zip 压缩

# 压缩
zip archive.zip file1 file2 dir/

# 递归压缩
zip -r archive.zip directory/

# 解压
unzip archive.zip
unzip archive.zip -d /path/to/dir

# 查看压缩包内容
unzip -l archive.zip

九、文本处理

9.1 文本编辑(vim)

vim file.txt

# 模式
i       # 进入插入模式
ESC     # 返回普通模式
:       # 进入命令模式

# 基本操作
:w      # 保存
:q      # 退出
:wq     # 保存并退出
:q!     # 强制退出不保存
u       # 撤销
Ctrl+r  # 重做

# 搜索
/keyword    # 向下搜索
?keyword    # 向上搜索
n           # 下一个匹配
N           # 上一个匹配

# 替换
:s/old/new/           # 替换第一个
:s/old/new/g          # 替换所有
:%s/old/new/g         # 全文替换
:%s/old/new/gc        # 全文替换(确认)

9.2 文本处理工具

# 排序
sort file.txt
sort -r file.txt             # 反向排序
sort -n file.txt             # 按数字排序
sort -u file.txt             # 去重并排序
sort -t: -k2 -n /etc/passwd  # 按第 2 列排序

# 去重
uniq file.txt
uniq -c file.txt            # 统计重复次数
sort file.txt | uniq         # 先排序再去重

# 统计
wc -l file.txt               # 行数
wc -w file.txt               # 单词数
wc -c file.txt               # 字符数

# 提取列
cut -d: -f1 /etc/passwd      # 以 : 分隔,提取第 1 列
cut -c1-10 file.txt          # 提取第 1-10 个字符

# 文本合并
paste file1.txt file2.txt

# 差异比较
diff file1.txt file2.txt
sdiff file1.txt file2.txt

# 内容替换
sed 's/old/new/g' file.txt
sed -i 's/old/new/g' file.txt    # 直接修改文件
sed '1,10d' file.txt              # 删除 1-10 行
sed '/pattern/d' file.txt         # 删除匹配的行

# 数据统计
awk '{sum+=$1} END {print sum}' file.txt
awk '{print $1, $3}' file.txt    # 打印第 1、3 列
awk -F: '{print $1}' /etc/passwd

十、计划任务

10.1 crontab 定时任务

# 编辑定时任务
crontab -e

# 查看定时任务
crontab -l

# 删除定时任务
crontab -r

# 格式: 分 时 日 月 周 命令
# * * * * * command
# │ │ │ │ │
# │ │ │ │ └─ 星期几 (0-7, 0 和 7 都表示星期日)
# │ │ │ └─── 月份 (1-12)
# │ │ └───── 日期 (1-31)
# │ └─────── 小时 (0-23)
# └───────── 分钟 (0-59)

# 示例
0 0 * * * /root/backup.sh          # 每天凌晨执行
*/5 * * * * /root/check.sh         # 每 5 分钟执行
0 9-18 * * 1-5 /root/work.sh      # 工作日 9-18 点执行
0 0 1 * * /root/monthly.sh        # 每月 1 号执行

# 编辑其他用户的定时任务
crontab -u username -e

10.2 systemd 定时器

# 查看定时器
systemctl list-timers

# 创建定时器服务
cat > /etc/systemd/system/backup.service <<EOF
[Unit]
Description=Backup Service

[Service]
Type=oneshot
ExecStart=/root/backup.sh
EOF

cat > /etc/systemd/system/backup.timer <<EOF
[Unit]
Description=Run Backup Daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
EOF

# 启用定时器
systemctl enable backup.timer
systemctl start backup.timer

十一、SSH 远程连接

11.1 基本连接

# 基本连接
ssh user@192.168.1.100
ssh -p 2222 user@192.168.1.100    # 指定端口

# 使用密钥连接
ssh -i ~/.ssh/id_rsa user@server

# 执行远程命令
ssh user@server "command"

# 端口转发
ssh -L 8080:localhost:80 user@server
ssh -R 8080:localhost:80 user@server

11.2 SSH 密钥管理

# 生成密钥对
ssh-keygen -t rsa -b 4096
ssh-keygen -t ed25519

# 复制公钥到服务器
ssh-copy-id user@server

# 查看公钥
cat ~/.ssh/id_rsa.pub

# 查看私钥
cat ~/.ssh/id_rsa

# 修改密钥权限
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

11.3 SSH 配置

# 编辑 SSH 配置文件
vim ~/.ssh/config

# 配置示例
Host server1
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa

Host server2
    HostName example.com
    User admin
    Port 2222

# 使用配置连接
ssh server1

十二、性能优化

12.1 系统调优

# 查看系统限制
ulimit -a

# 修改限制
ulimit -n 65535              # 文件描述符数量
ulimit -u 4096               # 进程数量

# 永久修改
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

# 内核参数调优
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.tcp_max_syn_backlog = 8192
vm.swappiness = 10

# 应用内核参数
sysctl -p

12.2 磁盘性能优化

# 查看磁盘 I/O 调度算法
cat /sys/block/sda/queue/scheduler

# 修改调度算法
echo deadline > /sys/block/sda/queue/scheduler

# 查看磁盘读写速度
dd if=/dev/zero of=test bs=1M count=1024 oflag=direct

十三、常见故障排查

13.1 磁盘满了解决

# 查找大文件
find / -type f -size +100M 2>/dev/null | xargs ls -lh

# 清理日志文件
> /var/log/messages
journalctl --vacuum-time=7d    # 保留 7 天日志

# 清理 yum 缓存
yum clean all

# 查找已删除但还被占用的文件
lsof +L1

13.2 内存不足解决

# 查看内存使用
free -h
cat /proc/meminfo

# 清理缓存
sync; echo 3 > /proc/sys/vm/drop_caches

# 查看内存占用前 10 的进程
ps aux --sort=-%mem | head -11

13.3 CPU 占用高

# 查看占用 CPU 最高的进程
ps aux --sort=-%cpu | head -11
top -o %CPU

# 查看 CPU 核心数
nproc
lscpu

13.4 网络问题

# 查看网络连接
ss -s
netstat -an | grep ESTABLISHED | wc -l

# 查看各状态连接数
ss -ant | awk '{print $1}' | sort | uniq -c | sort -nr

# 查看 TIME_WAIT 过多
ss -ant | awk '{print $1}' | grep TIME_WAIT | wc -l

# 优化内核参数
vim /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

十四、实用技巧

14.1 快捷键

# Ctrl+C       # 终止当前命令
# Ctrl+Z       # 挂起当前命令
# Ctrl+D       # 退出当前 shell
# Ctrl+L       # 清屏
# Ctrl+A       # 光标移到行首
# Ctrl+E       # 光标移到行尾
# Ctrl+U       # 删除光标前所有字符
# Ctrl+K       # 删除光标后所有字符
# Ctrl+W       # 删除前一个单词
# Ctrl+R       # 搜索历史命令
# !!           # 执行上一条命令
# !$           # 上一条命令的最后一个参数

14.2 历史命令

# 查看历史命令
history
history 20                # 最近 20 条

# 执行历史命令
!100                       # 执行第 100 条命令
!nginx                     # 执行最后一条包含 nginx 的命令

# 搜索历史命令
Ctrl+R 然后输入关键字

# 清除历史
history -c

14.3 管道与重定向

# 管道
ps aux | grep nginx
cat file.txt | grep error | wc -l

# 输出重定向(覆盖)
echo "text" > file.txt
command > log.txt 2>&1      # 标准输出和错误都重定向

# 输出重定向(追加)
echo "text" >> file.txt

# 输入重定向
mysql -u root -p < backup.sql

# 这里文档
cat <<EOF
> line 1
> line 2
> EOF

14.4 后台运行

# 后台运行
command &

# 退出终端后继续运行
nohup command &

# 使用 screen
screen -S session_name        # 创建会话
screen -ls                     # 列出会话
screen -r session_name        # 恢复会话
Ctrl+A+D                       # 分离会话

# 使用 tmux
tmux new -s session_name
tmux ls
tmux attach -t session_name
Ctrl+B+D                       # 分离会话

十五、速查表总结

文件操作

操作 命令
复制 cp
移动 mv
删除 rm
查看 cat / less / more
查找 find / locate
搜索 grep

权限管理

操作 命令
修改权限 chmod
修改所有者 chown
修改组 chgrp

进程管理

操作 命令
查看进程 ps / top / htop
终止进程 kill / killall
后台运行 nohup / &

网络管理

操作 命令
查看配置 ip addr
查看连接 ss / netstat
测试连通 ping
防火墙 firewall-cmd

系统管理

操作 命令
服务管理 systemctl
查看日志 journalctl
软件安装 yum / dnf
定时任务 crontab

参考资源


十四、实用技巧

14.1 快捷键

# Ctrl+C       # 终止当前命令
# Ctrl+Z       # 挂起当前命令
# Ctrl+D       # 退出当前 shell
# Ctrl+L       # 清屏
# Ctrl+A       # 光标移到行首
# Ctrl+E       # 光标移到行尾
# Ctrl+U       # 删除光标前所有字符
# Ctrl+K       # 删除光标后所有字符
# Ctrl+W       # 删除前一个单词
# Ctrl+R       # 搜索历史命令
# !!           # 执行上一条命令
# !$           # 上一条命令的最后一个参数

14.2 历史命令

# 查看历史命令
history
history 20                # 最近 20 条

# 执行历史命令
!100                       # 执行第 100 条命令
!nginx                     # 执行最后一条包含 nginx 的命令

# 搜索历史命令
Ctrl+R 然后输入关键字

# 清除历史
history -c

14.3 管道与重定向

# 管道
ps aux | grep nginx
cat file.txt | grep error | wc -l

# 输出重定向(覆盖)
echo "text" > file.txt
command > log.txt 2>&1      # 标准输出和错误都重定向

# 输出重定向(追加)
echo "text" >> file.txt

# 输入重定向
mysql -u root -p < backup.sql

# 这里文档
cat <<EOF
> line 1
> line 2
> EOF

14.4 后台运行

# 后台运行
command &

# 退出终端后继续运行
nohup command &

# 使用 screen
screen -S session_name        # 创建会话
screen -ls                     # 列出会话
screen -r session_name        # 恢复会话
Ctrl+A+D                       # 分离会话

# 使用 tmux
tmux new -s session_name
tmux ls
tmux attach -t session_name
Ctrl+B+D                       # 分离会话

14.5 大括号扩展

# 批量创建文件
touch file{1..10}.txt
touch {a,b,c}.log

# 批量备份
cp config.conf{,.bak}

# 批量操作
mkdir -p dir1 dir2 dir3
chown user:{user1,user2} file.txt

十五、备份与恢复

15.1 rsync 同步工具

# 本地同步
rsync -avz /src/ /dst/
rsync -avz --delete /src/ /dst/      # 删除目标中源没有的文件

# 远程同步
rsync -avz /local/ user@remote:/remote/
rsync -avz user@remote:/remote/ /local/

# 只同步不同文件
rsync -avz --ignore-existing /src/ /dst/

# 显示同步进度
rsync -avz --progress /src/ /dst/

# 排除文件
rsync -avz --exclude 'log' --exclude '*.tmp' /src/ /dst/

# 压缩传输
rsync -avz --compress /src/ user@remote:/dst/

# 断点续传
rsync -avz --partial /src/ /dst/

15.2 dd 备份

# 备份整个磁盘
dd if=/dev/sda of=/backup/backup.img bs=4M status=progress

# 恢复磁盘
dd if=/backup/backup.img of=/dev/sda bs=4M status=progress

# 创建指定大小的文件
dd if=/dev/zero of=test.img bs=1M count=100

# 备份分区表
dd if=/dev/sda of=/backup/mbr.bin bs=512 count=1

# 擦除磁盘(安全删除)
dd if=/dev/urandom of=/dev/sda bs=4M

# 光盘镜像
dd if=/dev/cdrom of=cd.iso

15.3 tar 备份

# 备份整个目录
tar -czvf backup-$(date +%Y%m%d).tar.gz /path/to/dir

# 恢复备份
tar -xzvf backup.tar.gz -C /path/to/restore

# 备份到远程
tar -czvf - /path/to/dir | ssh user@remote "cat > /backup/remote.tar.gz"

# 查看备份内容
tar -tzvf backup.tar.gz

# 增量备份(配合 find)
find /path -mtime -1 -print0 | tar -czvf backup.tar.gz --null -T -

十六、时间管理

16.1 时区设置

# 查看当前时区
timedatectl
date

# 查看所有时区
timedatectl list-timezones
timedatectl list-timezones | grep Asia

# 设置时区
timedatectl set-timezone Asia/Shanghai
timedatectl set-timezone UTC

# 硬件时间
hwclock                       # 查看硬件时间
hwclock -w                    # 将系统时间写入硬件
hwclock -s                    # 将硬件时间写入系统

16.2 NTP 时间同步

# 安装 chrony
yum install chrony

# 启动服务
systemctl start chronyd
systemctl enable chronyd

# 查看同步状态
chronyc sources -v
chronyc tracking
timedatectl status

# 手动同步
chronyc makestep

# 配置 NTP 服务器
vim /etc/chrony.conf
server ntp.aliyun.com iburst
server time.cloudflare.com iburst

# 重启服务
systemctl restart chronyd

16.3 日期操作

# 查看当前时间
date
date +"%Y-%m-%d %H:%M:%S"

# 设置系统时间
date -s "2026-03-25 18:00:00"

# 格式化输出
date +"%Y-%m-%d"
date +"%H:%M:%S"
date +"%Y年%m月%d日"

# 计算日期
date -d "next monday"
date -d "2 days ago"
date -d "1 month ago" +%Y-%m-%d

# 时间戳转换
date +%s                      # 当前时间戳
date -d @1609459200           # 时间戳转日期

十七、SELinux 管理

17.1 SELinux 状态

# 查看 SELinux 状态
sestatus
getenforce                    # Enforcing, Permissive, Disabled

# 查看上下文
ls -Z /path/to/file
ps auxZ | grep nginx

# 查看布尔值
getsebool -a
getsebool httpd_can_network_connect

17.2 SELinux 配置

# 临时关闭(重启后恢复)
setenforce 0                   # 0=关闭,1=开启

# 永久关闭(需要重启)
vim /etc/selinux/config
SELINUX=disabled

# 临时切换到宽松模式
setenforce Permissive

# 修改布尔值
setsebool -P httpd_can_network_connect on
setsebool -P ftp_home_dir 1

# 恢复默认上下文
restorecon -R -v /path/to/dir

# 修改文件上下文
chcon -R -t httpd_sys_content_t /var/www/html

17.3 SELinux 故障排查

# 查看拒绝日志(ausearch)
ausearch -m avc -ts recent

# 查看审计日志
grep AVC /var/log/audit/audit.log

# 生成策略模块
audit2allow -w -a
audit2allow -a -M mymodule

十八、系统启动与 GRUB

18.1 启动项管理

# 查看启动项
systemctl list-unit-files
systemctl list-unit-files | grep enabled
systemctl list-unit-files | grep disabled

# 启用启动项
systemctl enable service
systemctl disable service

# 查看失败的服务
systemctl --failed
systemctl --type=service --state=running

18.2 运行级别

# 查看当前运行级别
runlevel
systemctl get-default

# 设置默认运行级别
systemctl set-default graphical.target   # 图形界面
systemctl set-default multi-user.target    # 命令行

# 切换运行级别
systemctl isolate rescue.target
systemctl isolate emergency.target

# 运行级别说明
# poweroff.target    关机
# rescue.target      救援模式
# multi-user.target  命令行模式(3)
# graphical.target   图形界面(5)
# reboot.target      重启

18.3 GRUB 配置

# 查看 GRUB 配置
cat /etc/default/grub

# 修改默认启动项
GRUB_DEFAULT=0
GRUB_TIMEOUT=5

# 修改内核参数
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=off"

# 重新生成 GRUB 配置
grub2-mkconfig -o /boot/grub2/grub.cfg

# 更新 GRUB
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

# 查看 GRUB 菜单
cat /boot/grub2/grub.cfg | grep menuentry

18.4 内核模块管理

# 查看已加载模块
lsmod
cat /proc/modules

# 加载模块
modprobe module_name
insmod /path/to/module.ko

# 卸载模块
modprobe -r module_name
rmmod module_name

# 查看模块信息
modinfo module_name

# 查看模块依赖
modprobe --show-depends module_name

十九、高级监控工具

19.1 安装监控工具

# 安装常用监控工具
yum install -y htop iotop iftop nmap sysstat ncdu

# EPEL 提供的工具
yum install -y glances nmon dstat bcc-tools

19.2 实时监控工具

# htop(比 top 更友好的界面)
htop
# F5: 树形视图
# F6: 排序方式
# F9: 常规选项
# K: 终止进程

# glances(综合监控)
glances
# 显示:CPU、内存、交换、进程、网络、磁盘 I/O

# iotop(I/O 监控)
iotop
iotop -o                      # 只显示有 I/O 的进程

# iftop(网络流量)
iftop -i eth0
iftop -nP                     # 不解析主机名,显示端口

# nmon(AIX 风格监控)
nmon
# c: CPU, m: 内存, d: 磁盘, n: 网络

# dstat(全能监控)
dstat
dstat -cdngy                 # CPU、磁盘、网络、系统、时间

19.3 网络监控

# 查看网络流量
iftop
nethogs                       # 按进程显示流量

# 网络连接统计
ss -s
netstat -an | awk '{print $6}' | sort | uniq -c | sort -nr

# 抓包分析
tcpdump -i eth0 -nn port 80
tcpdump -i eth0 -w capture.pcap

# 网络诊断
mtr google.com
tracepath google.com

19.4 性能分析

# CPU 性能
perf top
perf record -a -g -F 99 sleep 10

# 内存分析
slabtop                       # 内核缓存统计
pmap -x 1234                  # 进程内存映射

# 火焰图生成
perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > out.svg

二十、Shell 脚本基础

20.1 变量与参数

# 定义变量
name="John"
echo $name
echo ${name}

# 特殊变量
$0      # 脚本名称
$1-$9   # 位置参数
$#      # 参数个数
$@      # 所有参数(独立)
$*      # 所有参数(整体)
$?      # 上个命令的退出状态
$$      # 当前进程 PID
$!      # 后台任务 PID

# 环境变量
export VAR=value
echo $PATH
echo $HOME

20.2 条件判断

# 文件判断
[ -f file ]              # 文件存在且是普通文件
[ -d dir ]               # 目录存在
[ -e file ]              # 文件或目录存在
[ -r file ]              # 文件可读
[ -w file ]              # 文件可写
[ -x file ]              # 文件可执行
[ -s file ]              # 文件大小非零

# 字符串判断
[ -z "$str" ]            # 字符串为空
[ -n "$str" ]            # 字符串非空
[ "$a" = "$b" ]          # 字符串相等
[ "$a" != "$b" ]         # 字符串不等

# 数字判断
[ $a -eq $b ]            # 相等
[ $a -ne $b ]            # 不等
[ $a -gt $b ]            # 大于
[ $a -ge $b ]            # 大于等于
[ $a -lt $b ]            # 小于
[ $a -le $b ]            # 小于等于

# 逻辑判断
[ -f file ] && echo "exists"
[ ! -d dir ] && echo "not exists"
[ -f file ] || [ -f file2 ]

20.3 循环结构

# for 循环
for i in {1..10}; do
    echo $i
done

for file in *.txt; do
    mv "$file" "${file%.txt}.bak"
done

# while 循环
while [ $count -lt 10 ]; do
    echo $count
    count=$((count+1))
done

# until 循环
until [ -f "stop.txt" ]; do
    echo "waiting..."
    sleep 1
done

20.4 函数

# 定义函数
function greet() {
    echo "Hello, $1!"
}

# 或简化写法
greet() {
    echo "Hello, $1!"
}

# 调用函数
greet "World"

# 返回值
check_file() {
    if [ -f "$1" ]; then
        return 0
    else
        return 1
    fi
}

20.5 一行脚本技巧

# 批量重命名
for f in *.jpg; do mv "$f" "prefix_$f"; done

# 批量修改权限
find . -type f -exec chmod 644 {} \;

# 快速备份
cp important.conf{,.bak}

# 批量替换
find . -type f -exec sed -i 's/old/new/g' {} \;

# 统计文件数量
find . -type f | wc -l

# 查找并删除
find . -name "*.tmp" -mtime +7 -delete

# 快速创建目录结构
mkdir -p dir1/{dir2,dir3}/{subdir1,subdir2}

# 批量下载
for i in {1..10}; do wget http://example.com/file$i; done

二十一、故障排查专题

21.1 系统无法启动

# 进入救援模式
# GRUB 菜单按 e,修改 linux16 行末尾添加:
rd.break

# 重新挂载根文件系统
switch_root
mount -o remount,rw /sysroot

# 重置 root 密码
chroot /sysroot
passwd
exit

# SELinux 重标记
touch /.autorelabel

# 重启
exit
reboot

21.2 忘记 root 密码

# 单用户模式重启
1. 重启系统
2. GRUB 菜单按 e
3. linux16 行末尾添加:rd.break
4. 按 Ctrl+x 启动
5. 执行上面的重置密码步骤

21.3 磁盘已满(100%)

# 快速定位大目录
du -sh /* 2>/dev/null | sort -hr | head -10

# 清理日志文件
for file in /var/log/*; do > $file; done

# 清理日志轮转
journalctl --vacuum-size=500M
journalctl --vacuum-time=7d

# 清理 yum 缓存
yum clean all
rm -rf /var/cache/yum/*

# 查找并删除旧的备份
find /backup -name "*.tar.gz" -mtime +30 -delete

# 清理临时文件
rm -rf /tmp/*
rm -rf /var/tmp/*

21.4 内存泄漏排查

# 查看内存使用
free -h
cat /proc/meminfo | grep Slab

# 查找内存占用高的进程
ps aux --sort=-%mem | head -20

# 使用 valgrind 检测内存泄漏
valgrind --leak-check=full --show-leak-kinds=all ./program

# 清理 page cache
sync; echo 3 > /proc/sys/vm/drop_caches

21.5 CPU 100% 排查

# 查找占用高的进程
top -o %CPU
ps aux --sort=-%cpu | head -20

# 查看线程信息
ps -eLf | head

# 使用 perf 分析
perf top
perf record -g -p <PID>

# CPU 绑定
taskset -c 0,1 command        # 绑定到 CPU 0 和 1

二十二、常用组合命令

# 查找并删除 7 天前的日志
find /var/log -name "*.log" -mtime +7 -delete

# 统计每个 IP 的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# 查看 TCP 连接状态统计
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn

# 批量杀死进程
ps aux | grep zombie | awk '{print $2}' | xargs kill -9

# 监控文件变化
tail -f /var/log/messages | grep --line-buffered ERROR

# 快速生成测试文件
dd if=/dev/zero of=test.img bs=1M count=100

# 查看 CPU 核心数
lscpu | grep "^CPU(s):"
nproc

# 查看系统位数
getconf LONG_BIT
uname -m

# 生成随机密码
openssl rand -base64 12
tr -dc A-Za-z0-9 < /dev/urandom | head -c 12

# 批量转换文件编码
find . -name "*.txt" -exec iconv -f GBK -t UTF-8 {} -o {}.utf8 \;

# 监控目录变化
inotifywait -m -r /path/to/watch