Ubuntu系统运维

目录

  1. 系统信息查看
  2. 用户与权限管理
  3. 软件包管理
  4. 服务管理
  5. 进程管理
  6. 网络管理
  7. 磁盘与存储管理
  8. 防火墙管理
  9. 日志管理
  10. 定时任务
  11. 性能监控
  12. 系统维护
  13. Shell脚本基础
  14. 常用运维命令速查

一、系统信息查看

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 磁盘使用分析
相关推荐
NineData2 小时前
玖章算术NineData成功入选杭州市“新雏鹰”企业
运维·数据库·后端
枳实-叶2 小时前
【Linux驱动开发】第一天:用户态与内核态通俗讲解+最简字符设备驱动实战
linux·驱动开发·学习
Mrlxl.cn2 小时前
计算机网络——应用层
运维·服务器·计算机网络
计算机安禾2 小时前
【Linux从入门到精通】第23篇:条件判断——让脚本拥有“大脑”
linux·运维·服务器
张青贤2 小时前
Docker Remote 未授权访问漏洞修复方法
运维·docker·容器
feng_you_ying_li2 小时前
linu之进程的程序替换与shell基本实现的基本版本
linux
生物信息与育种2 小时前
JIPB | 一个表观多组学整合分析与可视化工具OmicsCanvas
运维·人工智能·算法·自动化·transformer
汤愈韬2 小时前
防火墙双击热备的工作模式详解
运维·服务器
humors2212 小时前
SSH管理github代码
运维·ssh·github