目录
- 系统信息查看
- 用户与权限管理
- 软件包管理
- 服务管理
- 进程管理
- 网络管理
- 磁盘与存储管理
- 防火墙管理
- 日志管理
- 定时任务
- 性能监控
- 系统维护
- Shell脚本基础
- 常用运维命令速查
一、系统信息查看
1.1 基本系统信息
# 查看系统版本
cat /etc/os-release
lsb_release -a
# 查看内核版本
uname -r
uname -a
# 查看主机名
hostname
hostnamectl
# 查看系统架构
arch
uname -m
# 查看系统运行时间
uptime
1.2 硬件信息
# 查看CPU信息
lscpu
cat /proc/cpuinfo
# 查看CPU核心数
nproc
# 查看内存信息
free -h
cat /proc/meminfo
# 查看内存详细信息
sudo dmidecode -t memory
# 查看磁盘信息
lsblk
fdisk -l
# 查看PCI设备
lspci
# 查看USB设备
lsusb
# 查看主板信息
sudo dmidecode -t baseboard
1.3 网络信息
# 查看网络接口
ip addr show
ip a
# 查看网络接口详细信息
ip link show
# 查看路由表
ip route show
# 查看DNS配置
cat /etc/resolv.conf
# 查看网络接口统计
ip -s link
# 查看网络连接
ss -tuln
netstat -tuln
1.4 已安装软件
# 查看已安装的deb包
dpkg -l | grep <package_name>
# 列出所有已安装包
dpkg --list
# 使用apt查看已安装
apt list --installed
# 查看包信息
apt show <package_name>
# 查看包文件列表
dpkg -L <package_name>
二、用户与权限管理
2.1 用户管理
# 查看当前用户
whoami
id
# 查看所有用户
cat /etc/passwd
# 创建用户
sudo adduser username
sudo useradd -m -s /bin/bash username
# 删除用户
sudo deluser username
sudo userdel -r username # 同时删除家目录
# 修改用户密码
sudo passwd username
# 修改用户信息
sudo usermod -aG groupname username # 添加用户到组
sudo usermod -s /bin/bash username # 修改shell
sudo usermod -d /new/home username # 修改家目录
2.2 组管理
# 查看所有组
cat /etc/group
# 创建组
sudo groupgroupname
# 删除组
sudo groupdel groupname
# 添加用户到组
sudo usermod -aG groupname username
# 查看用户所属组
groups username
id username
# 创建系统组
sudo groupadd --system groupname
2.3 权限管理
# 查看文件权限
ls -la /path/to/file
# 修改文件所有者
sudo chown user:group /path/to/file
# 递归修改所有者
sudo chown -R user:group /path/to/directory
# 修改文件权限
chmod 755 /path/to/file
chmod +x /path/to/script.sh
# 权限数字说明
# 4 = read (r)
# 2 = write (w)
# 1 = execute (x)
# 7 = rwx (4+2+1)
# 6 = rw- (4+2)
# 5 = r-x (4+1)
# 特殊权限
chmod 4755 /path/to/file # SUID
chmod 2755 /path/to/file # SGID
chmod 1755 /path/to/dir # Sticky bit
2.4 sudo权限
# 查看sudo权限
sudo -l
# 编辑sudoers文件
sudo visudo
# 添加用户到sudo组
sudo usermod -aG sudo username
# sudoers配置示例
# username ALL=(ALL:ALL) ALL
# %groupname ALL=(ALL) NOPASSWD: ALL
2.5 常用用户组
| 组名 |
说明 |
| sudo |
具有sudo权限的用户 |
| adm |
可以查看系统日志的用户 |
| docker |
可以运行Docker的用户 |
| www-data |
Web服务器用户 |
| ssh |
SSH访问用户 |
三、软件包管理
3.1 APT包管理
# 更新包索引
sudo apt update
# 升级已安装的包
sudo apt upgrade
# 完整升级(可能删除包)
sudo apt full-upgrade
# 安装软件包
sudo apt install package_name
# 卸载软件包
sudo apt remove package_name
sudo apt purge package_name # 包括配置文件
# 搜索软件包
apt search package_name
# 查看包信息
apt show package_name
# 清理缓存
sudo apt clean
sudo apt autoclean
# 删除不需要的依赖
sudo apt autoremove
3.2 DPKG包管理
# 安装deb包
sudo dpkg -i package.deb
# 卸载deb包
sudo dpkg -r package_name
sudo dpkg -P package_name # 包括配置文件
# 查看已安装包
dpkg -l
dpkg -l | grep package_name
# 查看包文件列表
dpkg -L package_name
# 查看文件属于哪个包
dpkg -S /path/to/file
3.3 Snap包管理
# 安装snap包
sudo snap install package_name
# 卸载snap包
sudo snap remove package_name
# 查看已安装snap
snap list
# 更新snap包
sudo snap refresh
# 查看snap版本
snap info package_name
3.4 添加第三方源
# 添加PPA源
sudo add-apt-repository ppa:repository/ppa
sudo apt update
# 手动添加源
echo "deb https://repo.example.com/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/repo.list
# 添加GPG密钥
curl -fsSL https://repo.example.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/repo.gpg
# 删除源
sudo rm /etc/apt/sources.list.d/repo.list
四、服务管理
4.1 systemctl基本操作
# 查看所有服务
systemctl list-units --type=service
# 查看运行中的服务
systemctl list-units --type=service --state=running
# 查看失败的服务
systemctl --failed
# 查看服务状态
systemctl status service_name
# 启动服务
sudo systemctl start service_name
# 停止服务
sudo systemctl stop service_name
# 重启服务
sudo systemctl restart service_name
# 重新加载配置
sudo systemctl reload service_name
# 启用开机启动
sudo systemctl enable service_name
# 禁用开机启动
sudo systemctl disable service_name
4.2 服务日志
# 查看服务日志
journalctl -u service_name
# 查看最近日志
journalctl -u service_name -n 50
# 实时查看日志
journalctl -u service_name -f
# 查看今天日志
journalctl -u service_name --since today
# 查看特定时间范围
journalctl -u service_name --since "2024-01-01 00:00:00" --until "2024-01-01 23:59:59"
4.3 常用系统服务
| 服务名称 |
说明 |
| ssh |
OpenSSH服务器 |
| nginx |
Nginx Web服务器 |
| apache2 |
Apache Web服务器 |
| mysql |
MySQL数据库 |
| postgresql |
PostgreSQL数据库 |
| docker |
Docker容器引擎 |
| ufw |
防火墙 |
| cron |
定时任务 |
| rsyslog |
系统日志 |
| systemd-resolved |
DNS解析 |
4.4 服务依赖关系
# 查看服务依赖
systemctl list-dependencies service_name
# 查看服务要求
systemctl show service_name -p Requires
# 查看服务被谁依赖
systemctl list-dependencies --reverse service_name
五、进程管理
5.1 查看进程
# 查看所有进程
ps aux
ps -ef
# 查看特定进程
ps aux | grep process_name
# 查看进程树
pstree
pstree -p
# 实时查看进程
top
htop # 需要安装
# 查看进程详细信息
cat /proc/<pid>/status
5.2 进程控制
# 终止进程
kill <pid>
kill -9 <pid> # 强制终止
# 终止所有匹配进程
killall process_name
pkill process_name
# 发送信号
kill -SIGTERM <pid>
kill -SIGHUP <pid>
kill -SIGUSR1 <pid>
# 调整进程优先级
nice -n 10 command
renice -n 10 -p <pid>
5.3 后台进程
# 后台运行
command &
# 查看后台任务
jobs
# 将后台任务提到前台
fg %1
# 将前台任务放到后台
Ctrl+Z
bg %1
# 忽略挂断信号运行
nohup command &
# 使用screen运行
screen -S session_name
# 在screen中运行命令
# Ctrl+A, D 分离
screen -r session_name # 重新连接
5.4 进程监控
# 按CPU使用率排序
ps aux --sort=-%cpu | head -20
# 按内存使用排序
ps aux --sort=-%mem | head -20
# 查看进程打开的文件
lsof -p <pid>
# 查看进程网络连接
lsof -i -p <pid>
# 查看进程资源使用
pidstat -p <pid> 1
六、网络管理
6.1 网络配置
# 查看网络接口
ip addr show
# 查看网络接口状态
ip link show
# 启用/禁用网络接口
sudo ip link set eth0 up
sudo ip link set eth0 down
# 配置静态IP(Netplan)
# 编辑 /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
# 应用Netplan配置
sudo netplan apply
# 查看路由表
ip route show
# 添加静态路由
sudo ip route add 192.168.2.0/24 via 192.168.1.1
# 删除路由
sudo ip route del 192.168.2.0/24
6.2 网络连通性测试
# Ping测试
ping 192.168.1.1
ping -c 4 192.168.1.1
# 端口连通性测试
nc -zv 192.168.1.1 80
telnet 192.168.1.1 80
# 路由跟踪
traceroute 192.168.1.1
tracepath 192.168.1.1
# DNS解析
nslookup www.baidu.com
dig www.baidu.com
host www.baidu.com
6.3 端口管理
# 查看监听端口
ss -tuln
netstat -tuln
# 查看特定端口占用
sudo lsof -i :80
sudo ss -tlnp | grep :80
# 查看端口对应的进程
sudo netstat -tlnp | grep :80
# 查看网络连接状态
ss -s
netstat -s
6.4 网络诊断
# 查看网络接口统计
ip -s link
# 查看ARP表
ip neigh show
# 清空ARP缓存
sudo ip neigh flush all
# 查看DNS缓存
sudo systemd-resolve --statistics
# 刷新DNS缓存
sudo systemd-resolve --flush-caches
# 网络抓包
sudo tcpdump -i eth0
sudo tcpdump -i eth0 port 80
sudo tcpdump -i eth0 host 192.168.1.1
七、磁盘与存储管理
7.1 磁盘信息
# 查看磁盘分区
lsblk
fdisk -l
# 查看磁盘使用情况
df -h
df -i # inode使用
# 查看目录大小
du -sh /path/to/directory
du -sh /path/to/directory/*
# 查看大文件
sudo find / -type f -size +100M -exec ls -lh {} \;
# 查看文件系统类型
df -T
7.2 磁盘清理
# 清理apt缓存
sudo apt clean
sudo apt autoclean
sudo apt autoremove
# 清理日志
sudo journalctl --vacuum-size=100M
sudo journalctl --vacuum-time=7d
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理旧内核
sudo apt autoremove --purge
# 查找大文件
sudo find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null
# 查找大目录
sudo du -ah / | sort -rh | head -20
7.3 磁盘管理
# 查看磁盘信息
sudo fdisk -l
# 分区管理
sudo fdisk /dev/sdb
# 格式化分区
sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb1
# 挂载分区
sudo mount /dev/sdb1 /mnt/data
# 卸载分区
sudo umount /mnt/data
# 查看挂载信息
mount | column -t
# 自动挂载配置
# 编辑 /etc/fstab
# /etc/fstab 示例
/dev/sdb1 /mnt/data ext4 defaults 0 2
7.4 LVM管理
# 查看物理卷
sudo pvs
sudo pvdisplay
# 查看卷组
sudo vgs
sudo vgdisplay
# 查看逻辑卷
sudo lvs
sudo lvdisplay
# 创建物理卷
sudo pvcreate /dev/sdb
# 创建卷组
sudo vgcreate vg_data /dev/sdb
# 创建逻辑卷
sudo lvcreate -L 100G -n lv_data vg_data
# 扩展逻辑卷
sudo lvextend -L +50G /dev/vg_data/lv_data
sudo resize2fs /dev/vg_data/lv_data
# 删除逻辑卷
sudo lvremove /dev/vg_data/lv_data
八、防火墙管理
8.1 UFW防火墙
# 查看状态
sudo ufw status
sudo ufw status verbose
# 启用防火墙
sudo ufw enable
# 禁用防火墙
sudo ufw disable
# 允许端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 允许端口范围
sudo ufw allow 1000:2000/tcp
# 允许IP
sudo ufw allow from 192.168.1.100
# 允许IP访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22
# 删除规则
sudo ufw delete allow 80/tcp
# 重置防火墙
sudo ufw reset
8.2 iptables防火墙
# 查看规则
sudo iptables -L -n
sudo iptables -L -n -v
# 允许端口
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许IP
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 拒绝IP
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# 删除规则
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
# 恢复规则
sudo iptables-restore < /etc/iptables/rules.v4
8.3 常用端口规则
# SSH (22)
sudo ufw allow 22/tcp
# HTTP (80)
sudo ufw allow 80/tcp
# HTTPS (443)
sudo ufw allow 443/tcp
# DNS (53)
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
# MySQL (3306)
sudo ufw allow from 192.168.1.0/24 to any port 3306
# PostgreSQL (5432)
sudo ufw allow from 192.168.1.0/24 to any port 5432
# Docker (2375/2376)
sudo ufw allow 2375/tcp
sudo ufw allow 2376/tcp
九、日志管理
9.1 系统日志
# 查看系统日志
sudo tail -f /var/log/syslog
# 查看内核日志
sudo tail -f /var/log/kern.log
# 查看认证日志
sudo tail -f /var/log/auth.log
# 查看启动日志
dmesg | tail -50
# 查看日志文件列表
ls -la /var/log/
9.2 Journalctl日志
# 查看所有日志
journalctl
# 查看最近日志
journalctl -n 50
# 实时查看日志
journalctl -f
# 查看特定服务日志
journalctl -u service_name
# 查看特定优先级
journalctl -p err
# 查看时间范围
journalctl --since "2024-01-01 00:00:00" --until "2024-01-01 23:59:59"
# 查看本次启动日志
journalctl -b
# 查看上次启动日志
journalctl -b -1
9.3 日志轮转
# 查看logrotate配置
cat /etc/logrotate.conf
ls -la /etc/logrotate.d/
# 手动轮转日志
sudo logrotate -f /etc/logrotate.conf
# 查看轮转状态
sudo logrotate -d /etc/logrotate.conf
9.4 常用日志文件
| 日志文件 |
说明 |
| /var/log/syslog |
系统日志 |
| /var/log/auth.log |
认证日志 |
| /var/log/kern.log |
内核日志 |
| /var/log/dpkg.log |
包管理日志 |
| /var/log/apt/ |
APT日志 |
| /var/log/nginx/ |
Nginx日志 |
| /var/log/mysql/ |
MySQL日志 |
| /var/log/journal/ |
systemd日志 |
十、定时任务
10.1 Crontab
# 查看当前用户的crontab
crontab -l
# 编辑crontab
crontab -e
# 删除crontab
crontab -r
# 查看其他用户的crontab
sudo crontab -u username -l
10.2 Crontab语法
# 分 时 日 月 周 命令
# * * * * * command
# │ │ │ │ │
# │ │ │ │ └─ 星期 (0-7, 0和7都是周日)
# │ │ │ └─── 月份 (1-12)
# │ │ └───── 日期 (1-31)
# │ └─────── 小时 (0-23)
# └───────── 分钟 (0-59)
# 示例
* * * * * /path/to/script.sh # 每分钟
*/5 * * * * /path/to/script.sh # 每5分钟
0 * * * * /path/to/script.sh # 每小时
0 2 * * * /path/to/script.sh # 每天凌晨2点
0 2 * * 1 /path/to/script.sh # 每周一凌晨2点
0 2 1 * * /path/to/script.sh # 每月1号凌晨2点
10.3 系统级定时任务
# 系统crontab
sudo vim /etc/crontab
# 系统级任务目录
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
ls -la /etc/cron.weekly/
ls -la /etc/cron.monthly/
# 添加系统级任务
sudo vim /etc/cron.d/mytask
10.4 systemd定时器
# 查看定时器
systemctl list-timers
# 创建定时器
sudo vim /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
# 启用定时器
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
十一、性能监控
11.1 CPU监控
# 查看CPU使用率
top
htop
# 查看CPU信息
lscpu
# 查看CPU使用率(文本模式)
mpstat 1 5
# 查看各核心使用率
mpstat -P ALL 1 5
# 查看负载
uptime
cat /proc/loadavg
11.2 内存监控
# 查看内存使用
free -h
free -m
# 查看内存详细信息
cat /proc/meminfo
# 查看进程内存使用
ps aux --sort=-%mem | head -20
# 查看内存使用趋势
vmstat 1 5
11.3 磁盘IO监控
# 查看磁盘IO
iostat -x 1 5
# 查看磁盘IO(简化)
iostat -d 1 5
# 查看进程IO
iotop
# 查看磁盘使用率
df -h
# 查看目录大小
du -sh /path/to/directory
11.4 网络监控
# 查看网络流量
iftop
nload
# 查看网络连接
ss -s
netstat -s
# 查看网络接口统计
ip -s link
# 查看网络错误
cat /proc/net/dev
# 实时网络监控
vnstat
11.5 综合监控工具
# 安装监控工具
sudo apt install htop iotop iftop nload sysstat
# 使用htop
htop
# 使用atop(高级监控)
sudo apt install atop
sudo atop
# 使用glances(综合监控)
sudo apt install glances
glances
十二、系统维护
12.1 系统更新
# 更新包索引
sudo apt update
# 升级包
sudo apt upgrade
# 完整升级
sudo apt full-upgrade
# 自动安全更新
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# 查看可更新包
apt list --upgradable
# 清理缓存
sudo apt clean
sudo apt autoclean
sudo apt autoremove
12.2 系统文件检查
# 检查文件系统
sudo fsck /dev/sda1
# 检查磁盘健康状态
sudo smartctl -a /dev/sda
# 安装smartmontools
sudo apt install smartmontools
# 查看磁盘SMART信息
sudo smartctl -H /dev/sda
12.3 系统清理
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理用户缓存
rm -rf ~/.cache/*
# 清理apt缓存
sudo apt clean
sudo apt autoclean
sudo apt autoremove
# 清理日志
sudo journalctl --vacuum-size=100M
# 清理旧内核
sudo apt autoremove --purge
# 清理孤立包
sudo apt autoremove
12.4 系统备份
# 使用tar备份
sudo tar czvf /backup/system-$(date +%Y%m%d).tar.gz / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp --exclude=/backup
# 使用rsync备份
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /backup/
# 使用dd创建磁盘镜像
sudo dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
# 恢复dd镜像
sudo dd if=/backup/sda.img of=/dev/sda bs=4M status=progress
12.5 系统还原
# 使用timeshift备份还原
sudo apt install timeshift
sudo timeshift --create
sudo timeshift --restore
# 手动恢复系统
# 1. 从Live USB启动
# 2. 挂载根分区
# 3. 恢复备份
# 4. 更新grub
sudo update-grub
十三、Shell脚本基础
13.1 脚本结构
#!/bin/bash
# 脚本说明
# 作者:xxx
# 日期:2024-01-01
# 变量定义
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
# 函数定义
backup() {
echo "Starting backup..."
tar czvf ${BACKUP_DIR}/backup-${DATE}.tar.gz /data
echo "Backup completed"
}
# 主逻辑
backup
13.2 变量与参数
# 变量赋值
NAME="John"
AGE=30
# 使用变量
echo "Name: $NAME"
echo "Age: ${AGE}"
# 位置参数
$0 # 脚本名
$1 # 第一个参数
$2 # 第二个参数
$# # 参数个数
$@ # 所有参数
$? # 上一个命令的退出状态
$$ # 当前进程ID
# 特殊变量
${VAR:-default} # 如果VAR未设置,使用default
${VAR:=default} # 如果VAR未设置,赋值为default
${VAR:?error} # 如果VAR未设置,显示错误
13.3 条件判断
# if语句
if [ condition ]; then
commands
elif [ condition ]; then
commands
else
commands
fi
# 比较运算符
# 数字比较
-eq # 等于
-ne # 不等于
-gt # 大于
-ge # 大于等于
-lt # 小于
-le # 小于等于
# 字符串比较
= # 等于
!= # 不等于
-z # 字符串为空
-n # 字符串不为空
# 文件测试
-e # 文件存在
-f # 是普通文件
-d # 是目录
-r # 可读
-w # 可写
-x # 可执行
# 示例
if [ -f /etc/passwd ]; then
echo "File exists"
fi
if [ $AGE -gt 18 ]; then
echo "Adult"
fi
13.4 循环
# for循环
for i in 1 2 3 4 5; do
echo $i
done
# 范围循环
for i in {1..10}; do
echo $i
done
# C风格循环
for ((i=0; i<10; i++)); do
echo $i
done
# while循环
while [ condition ]; do
commands
done
# until循环
until [ condition ]; do
commands
done
# 读取文件
while read line; do
echo $line
done < file.txt
13.5 函数
# 定义函数
function_name() {
commands
}
# 带参数函数
greet() {
echo "Hello, $1!"
}
# 调用函数
greet "John"
# 带返回值
add() {
return $(($1 + $2))
}
add 5 3
echo $? # 输出8
13.6 实用脚本示例
#!/bin/bash
# 系统健康检查脚本
echo "=== System Health Check ==="
# CPU负载
echo "CPU Load: $(uptime)"
# 内存使用
echo "Memory:"
free -h
# 磁盘使用
echo "Disk:"
df -h | grep -v tmpfs
# 运行时间
echo "Uptime: $(uptime -p)"
# 登录用户
echo "Logged in users:"
who
# 进程数
echo "Total processes: $(ps aux | wc -l)"
十四、常用运维命令速查
14.1 系统管理
# 重启系统
sudo reboot
sudo shutdown -r now
# 关机
sudo shutdown now
sudo poweroff
# 查看系统信息
uname -a
hostnamectl
# 查看运行时间
uptime
# 查看登录用户
who
w
14.2 远程管理
# SSH连接
ssh user@host
ssh -p 2222 user@host
# SSH密钥生成
ssh-keygen -t rsa -b 4096
# SSH密钥复制
ssh-copy-id user@host
# SCP传输
scp file.txt user@host:/path/
scp -r dir/ user@host:/path/
# Rsync同步
rsync -avz /local/path user@host:/remote/path
rsync -avz user@host:/remote/path /local/path
14.3 文件操作
# 复制文件
cp source.txt destination.txt
cp -r dir/ newdir/
# 移动文件
mv source.txt destination.txt
# 删除文件
rm file.txt
rm -rf dir/
# 创建目录
mkdir -p /path/to/dir
# 查看文件内容
cat file.txt
less file.txt
tail -f file.txt
tail -n 20 file.txt
# 查找文件
find /path -name "*.txt"
find /path -type f -size +100M
find /path -mtime -7 # 7天内修改的文件
14.4 压缩与解压
# tar压缩
tar czvf archive.tar.gz /path/to/dir
# tar解压
tar xzvf archive.tar.gz
# tar查看
tar tzvf archive.tar.gz
# zip压缩
zip -r archive.zip /path/to/dir
# zip解压
unzip archive.zip
# gzip压缩
gzip file.txt
# gzip解压
gunzip file.txt.gz
14.5 文本处理
# grep搜索
grep "pattern" file.txt
grep -r "pattern" /path/
grep -i "pattern" file.txt # 忽略大小写
grep -v "pattern" file.txt # 反向匹配
# sed替换
sed 's/old/new/g' file.txt
sed -i 's/old/new/g' file.txt # 直接修改文件
# awk处理
awk '{print $1}' file.txt
awk -F: '{print $1}' /etc/passwd
# 排序
sort file.txt
sort -n file.txt # 数字排序
sort -r file.txt # 反向排序
# 去重
uniq file.txt
sort file.txt | uniq
# 统计
wc -l file.txt # 行数
wc -w file.txt # 单词数
wc -c file.txt # 字符数
14.6 快速诊断脚本
#!/bin/bash
# 系统快速诊断脚本
echo "========================================="
echo " System Diagnostic Report"
echo "========================================="
echo ""
# 系统信息
echo "[System Information]"
echo "Hostname: $(hostname)"
echo "OS: $(lsb_release -ds)"
echo "Kernel: $(uname -r)"
echo "Uptime: $(uptime -p)"
echo ""
# CPU信息
echo "[CPU Information]"
echo "Model: $(lscpu | grep 'Model name' | cut -d: -f2 | xargs)"
echo "Cores: $(nproc)"
echo "Load: $(uptime | awk -F'load average:' '{print $2}')"
echo ""
# 内存信息
echo "[Memory Information]"
free -h
echo ""
# 磁盘信息
echo "[Disk Information]"
df -h | grep -v tmpfs
echo ""
# 网络信息
echo "[Network Information]"
ip -4 addr show | grep inet
echo ""
# 服务状态
echo "[Service Status]"
systemctl --failed 2>/dev/null | head -10
echo ""
# 登录用户
echo "[Logged In Users]"
who
echo ""
echo "========================================="
echo " Diagnostic Complete"
echo "========================================="
十五、系统监控方案
15.1 最简单方案:脚本定时监控
优点:零依赖,几行代码搞定,灵活自定义
#!/bin/bash
# 简单系统监控脚本
# 保存为 /usr/local/bin/monitor.sh
MONITOR_LOG="/var/log/system_monitor.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# 创建日志目录
sudo mkdir -p $(dirname $MONITOR_LOG)
# 获取系统信息
CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}')
MEM_USED=$(free -h | grep Mem | awk '{print $3}')
MEM_TOTAL=$(free -h | grep Mem | awk '{print $2}')
DISK_USED=$(df -h / | grep / | awk '{print $5}' | tr -d '%')
DISK_FREE=$(df -h / | grep / | awk '{print $4}')
PROCESSES=$(ps aux | wc -l)
USERS=$(who | wc -l)
# 输出到日志
echo "[$DATE] CPU: ${CPU_LOAD} | Mem: ${MEM_USED}/${MEM_TOTAL} | Disk: ${DISK_USED}% (${DISK_FREE}) | Procs: ${PROCESSES} | Users: ${USERS}" | sudo tee -a $MONITOR_LOG
# 告警检查(可选)
if [ $DISK_USED -gt 80 ]; then
echo "[$DATE] WARNING: Disk usage > 80%!" | sudo tee -a $MONITOR_LOG
fi
if [ $(echo "$CPU_LOAD > 2" | bc) -eq 1 ]; then
echo "[$DATE] WARNING: High CPU load!" | sudo tee -a $MONITOR_LOG
fi
# 设置执行权限
sudo chmod +x /usr/local/bin/monitor.sh
# 添加到crontab(每5分钟运行一次)
sudo crontab -e
# 添加一行:
*/5 * * * * /usr/local/bin/monitor.sh
# 查看监控日志
sudo tail -f /var/log/system_monitor.log
15.2 轻量级方案:Glances(推荐!)
优点:一站式监控,安装简单,Web界面,漂亮直观
# 安装Glances
sudo apt install glances -y
# 直接运行(终端界面)
glances
# 启用Web界面(浏览器访问 http://你的IP:61208)
glances -w
# 后台运行Web界面
sudo glances -w -d
# 设置开机自启
sudo vim /etc/systemd/system/glances.service
[Unit]
Description=Glances System Monitor
After=network.target
[Service]
ExecStart=/usr/bin/glances -w
Restart=always
[Install]
WantedBy=multi-user.target
# 启用服务
sudo systemctl enable glances
sudo systemctl start glances
sudo systemctl status glances
15.3 实时监控:Netdata
优点:超详细的实时监控,漂亮的Dashboard,安装一条命令搞定
# 一键安装Netdata
wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh && \
chmod +x /tmp/netdata-kickstart.sh && \
/tmp/netdata-kickstart.sh
# 或者用apt安装(版本可能旧一点)
sudo apt install netdata -y
# 访问Web界面:http://你的IP:19999
# 停止Netdata
sudo systemctl stop netdata
# 禁用开机自启
sudo systemctl disable netdata
15.4 进阶方案:Prometheus + Grafana(专业级)
优点:工业标准,可扩展,图形丰富,适合多机器监控
# 1. 安装Prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar xzf prometheus-2.45.0.linux-amd64.tar.gz
cd prometheus-2.45.0.linux-amd64
# 移动到系统目录
sudo mv prometheus promtool /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mv consoles console_libraries prometheus.yml /etc/prometheus/
# 创建prometheus用户
sudo useradd -M -r -s /bin/false prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
# 创建systemd服务
sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
# 安装Node Exporter(采集系统指标)
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xzf node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64
sudo mv node_exporter /usr/local/bin/
sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
# 配置Prometheus添加Node Exporter
sudo vim /etc/prometheus/prometheus.yml
# 在scrape_configs下添加:
- job_name: "node"
static_configs:
- targets: ["localhost:9100"]
# 安装Grafana
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana
# 启动所有服务
sudo systemctl daemon-reload
sudo systemctl enable prometheus node_exporter grafana-server
sudo systemctl start prometheus node_exporter grafana-server
# 访问
# Prometheus: http://IP:9090
# Grafana: http://IP:3000 (默认用户名密码: admin/admin)
# 在Grafana添加Prometheus数据源,导入Dashboard 1860
15.5 监控方案对比
| 方案 |
复杂度 |
需要Web界面 |
资源占用 |
适合场景 |
| 脚本监控 |
⭐ 极低 |
❌ 无 |
⭐ 极小 |
单台机器,简单监控 |
| Glances |
⭐ 低 |
✅ 有 |
⭐ 小 |
单机/少量机器,日常监控 |
| Netdata |
⭐ 低 |
✅ 有 |
⭐⭐ 中 |
单机/少量机器,实时监控 |
| Prom+Grafana |
⭐⭐⭐ 高 |
✅ 有 |
⭐⭐ 中 |
多机器集群,专业监控 |
15.6 监控告警脚本(配合方案1使用)
#!/bin/bash
# 监控告警脚本
# 保存为 /usr/local/bin/monitor-alert.sh
ADMIN_EMAIL="your@email.com"
MONITOR_LOG="/var/log/system_monitor.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# 检查磁盘
DISK_USED=$(df -h / | grep / | awk '{print $5}' | tr -d '%')
if [ $DISK_USED -gt 80 ]; then
echo "[$DATE] ALERT: Disk usage ${DISK_USED}% > 80%!" | sudo tee -a $MONITOR_LOG
echo "Disk usage is ${DISK_USED}% on $(hostname)" | mail -s "ALERT: Disk Usage High" $ADMIN_EMAIL
fi
# 检查内存
MEM_USED_PERCENT=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ $MEM_USED_PERCENT -gt 85 ]; then
echo "[$DATE] ALERT: Memory usage ${MEM_USED_PERCENT}% > 85%!" | sudo tee -a $MONITOR_LOG
echo "Memory usage is ${MEM_USED_PERCENT}% on $(hostname)" | mail -s "ALERT: Memory Usage High" $ADMIN_EMAIL
fi
# 检查CPU负载(1分钟平均)
CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | tr -d ',')
CPU_LOAD_INT=$(echo $CPU_LOAD | awk '{print int($1)}')
if [ $CPU_LOAD_INT -gt 2 ]; then
echo "[$DATE] ALERT: CPU load ${CPU_LOAD} > 2!" | sudo tee -a $MONITOR_LOG
echo "CPU load is ${CPU_LOAD} on $(hostname)" | mail -s "ALERT: High CPU Load" $ADMIN_EMAIL
fi
# 设置执行权限
sudo chmod +x /usr/local/bin/monitor-alert.sh
# 添加到crontab(每10分钟检查)
sudo crontab -e
# 添加:
*/10 * * * * /usr/local/bin/monitor-alert.sh
附录:快捷键与工具
A.1 终端快捷键
| 快捷键 |
功能 |
| Ctrl + C |
终止当前命令 |
| Ctrl + Z |
暂停当前命令 |
| Ctrl + D |
退出终端 |
| Ctrl + L |
清屏 |
| Ctrl + A |
光标移到行首 |
| Ctrl + E |
光标移到行尾 |
| Ctrl + U |
删除光标前内容 |
| Ctrl + K |
删除光标后内容 |
| Ctrl + R |
搜索历史命令 |
| Tab |
自动补全 |
A.2 常用管理工具
| 工具 |
安装命令 |
说明 |
| htop |
sudo apt install htop |
进程监控 |
| iotop |
sudo apt install iotop |
IO监控 |
| iftop |
sudo apt install iftop |
网络监控 |
| nload |
sudo apt install nload |
网络流量监控 |
| tmux |
sudo apt install tmux |
终端复用 |
| screen |
sudo apt install screen |
终端复用 |
| vim |
sudo apt install vim |
文本编辑器 |
| curl |
sudo apt install curl |
HTTP客户端 |
| wget |
sudo apt install wget |
下载工具 |
| jq |
sudo apt install jq |
JSON处理 |
| tree |
sudo apt install tree |
目录树显示 |
| ncdu |
sudo apt install ncdu |
磁盘使用分析 |