目录
系统信息查看
用户与权限管理
软件包管理
服务管理
进程管理
网络管理
磁盘与存储管理
防火墙管理
日志管理
定时任务
性能监控
系统维护
Shell脚本基础
常用运维命令速查
一、系统信息查看
1.1 基本系统信息
bash
复制代码
# 查看系统版本
cat /etc/os-release
lsb_release -a
# 查看内核版本
uname -r
uname -a
# 查看主机名
hostname
hostnamectl
# 查看系统架构
arch
uname -m
# 查看系统运行时间
uptime
1.2 硬件信息
bash
复制代码
# 查看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 网络信息
bash
复制代码
# 查看网络接口
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 已安装软件
bash
复制代码
# 查看已安装的deb包
dpkg -l | grep <package_name>
# 列出所有已安装包
dpkg --list
# 使用apt查看已安装
apt list --installed
# 查看包信息
apt show <package_name>
# 查看包文件列表
dpkg -L <package_name>
二、用户与权限管理
2.1 用户管理
bash
复制代码
# 查看当前用户
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 组管理
bash
复制代码
# 查看所有组
cat /etc/group
# 创建组
sudo groupgroupname
# 删除组
sudo groupdel groupname
# 添加用户到组
sudo usermod -aG groupname username
# 查看用户所属组
groups username
id username
# 创建系统组
sudo groupadd --system groupname
2.3 权限管理
bash
复制代码
# 查看文件权限
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权限
bash
复制代码
# 查看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包管理
bash
复制代码
# 更新包索引
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包管理
bash
复制代码
# 安装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包管理
bash
复制代码
# 安装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 添加第三方源
bash
复制代码
# 添加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基本操作
bash
复制代码
# 查看所有服务
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 服务日志
bash
复制代码
# 查看服务日志
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 服务依赖关系
bash
复制代码
# 查看服务依赖
systemctl list-dependencies service_name
# 查看服务要求
systemctl show service_name -p Requires
# 查看服务被谁依赖
systemctl list-dependencies --reverse service_name
五、进程管理
5.1 查看进程
bash
复制代码
# 查看所有进程
ps aux
ps -ef
# 查看特定进程
ps aux | grep process_name
# 查看进程树
pstree
pstree -p
# 实时查看进程
top
htop # 需要安装
# 查看进程详细信息
cat /proc/<pid>/status
5.2 进程控制
bash
复制代码
# 终止进程
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 后台进程
bash
复制代码
# 后台运行
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 进程监控
bash
复制代码
# 按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 网络配置
bash
复制代码
# 查看网络接口
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
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]
bash
复制代码
# 应用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 网络连通性测试
bash
复制代码
# 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 端口管理
bash
复制代码
# 查看监听端口
ss -tuln
netstat -tuln
# 查看特定端口占用
sudo lsof -i :80
sudo ss -tlnp | grep :80
# 查看端口对应的进程
sudo netstat -tlnp | grep :80
# 查看网络连接状态
ss -s
netstat -s
6.4 网络诊断
bash
复制代码
# 查看网络接口统计
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 磁盘信息
bash
复制代码
# 查看磁盘分区
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 磁盘清理
bash
复制代码
# 清理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 磁盘管理
bash
复制代码
# 查看磁盘信息
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
bash
复制代码
# /etc/fstab 示例
/dev/sdb1 /mnt/data ext4 defaults 0 2
7.4 LVM管理
bash
复制代码
# 查看物理卷
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防火墙
bash
复制代码
# 查看状态
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防火墙
bash
复制代码
# 查看规则
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 常用端口规则
bash
复制代码
# 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 系统日志
bash
复制代码
# 查看系统日志
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日志
bash
复制代码
# 查看所有日志
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 日志轮转
bash
复制代码
# 查看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
bash
复制代码
# 查看当前用户的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 系统级定时任务
bash
复制代码
# 系统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定时器
bash
复制代码
# 查看定时器
systemctl list-timers
# 创建定时器
sudo vim /etc/systemd/system/backup.timer
ini
复制代码
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
bash
复制代码
# 启用定时器
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
十一、性能监控
11.1 CPU监控
bash
复制代码
# 查看CPU使用率
top
htop
# 查看CPU信息
lscpu
# 查看CPU使用率(文本模式)
mpstat 1 5
# 查看各核心使用率
mpstat -P ALL 1 5
# 查看负载
uptime
cat /proc/loadavg
11.2 内存监控
bash
复制代码
# 查看内存使用
free -h
free -m
# 查看内存详细信息
cat /proc/meminfo
# 查看进程内存使用
ps aux --sort=-%mem | head -20
# 查看内存使用趋势
vmstat 1 5
11.3 磁盘IO监控
bash
复制代码
# 查看磁盘IO
iostat -x 1 5
# 查看磁盘IO(简化)
iostat -d 1 5
# 查看进程IO
iotop
# 查看磁盘使用率
df -h
# 查看目录大小
du -sh /path/to/directory
11.4 网络监控
bash
复制代码
# 查看网络流量
iftop
nload
# 查看网络连接
ss -s
netstat -s
# 查看网络接口统计
ip -s link
# 查看网络错误
cat /proc/net/dev
# 实时网络监控
vnstat
11.5 综合监控工具
bash
复制代码
# 安装监控工具
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 系统更新
bash
复制代码
# 更新包索引
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 系统文件检查
bash
复制代码
# 检查文件系统
sudo fsck /dev/sda1
# 检查磁盘健康状态
sudo smartctl -a /dev/sda
# 安装smartmontools
sudo apt install smartmontools
# 查看磁盘SMART信息
sudo smartctl -H /dev/sda
12.3 系统清理
bash
复制代码
# 清理临时文件
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 系统备份
bash
复制代码
# 使用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 系统还原
bash
复制代码
# 使用timeshift备份还原
sudo apt install timeshift
sudo timeshift --create
sudo timeshift --restore
# 手动恢复系统
# 1. 从Live USB启动
# 2. 挂载根分区
# 3. 恢复备份
# 4. 更新grub
sudo update-grub
十三、Shell脚本基础
13.1 脚本结构
bash
复制代码
#!/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 变量与参数
bash
复制代码
# 变量赋值
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 条件判断
bash
复制代码
# 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 循环
bash
复制代码
# 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 函数
bash
复制代码
# 定义函数
function_name() {
commands
}
# 带参数函数
greet() {
echo "Hello, $1!"
}
# 调用函数
greet "John"
# 带返回值
add() {
return $(($1 + $2))
}
add 5 3
echo $? # 输出8
13.6 实用脚本示例
bash
复制代码
#!/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 系统管理
bash
复制代码
# 重启系统
sudo reboot
sudo shutdown -r now
# 关机
sudo shutdown now
sudo poweroff
# 查看系统信息
uname -a
hostnamectl
# 查看运行时间
uptime
# 查看登录用户
who
w
14.2 远程管理
bash
复制代码
# 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 文件操作
bash
复制代码
# 复制文件
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 压缩与解压
bash
复制代码
# 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 文本处理
bash
复制代码
# 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 快速诊断脚本
bash
复制代码
#!/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 最简单方案:脚本定时监控
优点 :零依赖,几行代码搞定,灵活自定义
bash
复制代码
#!/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
bash
复制代码
# 设置执行权限
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界面,漂亮直观
bash
复制代码
# 安装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
ini
复制代码
[Unit]
Description=Glances System Monitor
After=network.target
[Service]
ExecStart=/usr/bin/glances -w
Restart=always
[Install]
WantedBy=multi-user.target
bash
复制代码
# 启用服务
sudo systemctl enable glances
sudo systemctl start glances
sudo systemctl status glances
15.3 实时监控:Netdata
优点 :超详细的实时监控,漂亮的Dashboard,安装一条命令搞定
bash
复制代码
# 一键安装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(专业级)
优点 :工业标准,可扩展,图形丰富,适合多机器监控
bash
复制代码
# 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
ini
复制代码
[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
bash
复制代码
# 安装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
ini
复制代码
[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
bash
复制代码
# 配置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使用)
bash
复制代码
#!/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
bash
复制代码
# 设置执行权限
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
磁盘使用分析