Linux 日常运维技巧集
Linux 日常运维技巧集
简介
Linux 日常运维涉及定时任务、存储管理、性能分析、终端工具等方方面面。本文汇总了运维工作中最常用的实战技巧,包括 crontab 定时任务、Swap 分区、LVM 逻辑卷、文件系统、Vim 批量操作、Redis 集群、CI/CD 工具链等内容,是运维工程师的实用参考手册。
一、Linux 定时任务
1.1 crontab 基本操作
# 查看当前用户的定时任务
crontab -l
# 编辑当前用户的定时任务
crontab -e
# 删除当前用户的所有定时任务
crontab -r
# 以指定用户身份编辑定时任务
sudo crontab -u username -e
1.2 crontab 格式详解
格式:分 时 日 月 周 命令
字段说明:
┌──────── 分钟(0-59)
│ ┌────── 小时(0-23)
│ │ ┌──── 日(1-31)
│ │ │ ┌── 月(1-12)
│ │ │ │ ┌ 星期(0-7,0和7都代表周日)
│ │ │ │ │
* * * * * command
特殊符号:
| 符号 | 含义 |
|---|---|
* |
任意值(每分钟/每小时/每天…) |
, |
列举多个值,如 1,3,5 |
- |
范围,如 1-5 表示 1 到 5 |
/ |
步长,如 */5 表示每 5 个单位 |
1.3 常用示例
# 每晚 21:30 重启服务
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
# 每月 1、10、22 日的 4:45 重启服务
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
# 每周六、日的 1:10 重启服务
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
# 每小时重启一次
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
# 晚上 23 点到早上 7 点之间,每小时重启一次
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
# 每分钟执行一次脚本
* * * * * /path/to/script.sh
# 每天凌晨 3 点执行备份
0 3 * * * /path/to/backup.sh
# 每周一上午 9 点执行
0 9 * * 1 /path/to/weekly-task.sh
# 每季度第一天执行
0 0 1 1,4,7,10 * /path/to/quarterly-task.sh
注意:crontab 中的命令尽量使用绝对路径,因为 cron 环境的 PATH 变量可能与用户登录环境不同。如果需要输出日志,建议重定向到文件:
>> /var/log/mytask.log 2>&1
二、Swap 分区管理
当系统物理内存不足时,可以通过创建 Swap 交换分区来扩展虚拟内存。
# 第一步:创建 swap 文件(使用 dd 命令创建一个 4GB 的文件)
dd if=/dev/zero of=file.swap bs=1M count=4096
# 第二步:格式化为 swap 格式
mkswap file.swap
# 第三步:启用 swap 文件
swapon file.swap
# 第四步:验证 swap 是否生效
free -m
swapon -s
# 关闭 swap 文件
swapoff file.swap
# 删除 swap 文件
rm -f file.swap
开机自动挂载,在 /etc/fstab 中添加相应条目:
/path/to/file.swap none swap sw 0 0
注意:Swap 分区适合内存较小的服务器(如 1GB/2GB 的云服务器),但不能替代物理内存,频繁使用 Swap 会导致系统性能下降。
三、LVM 逻辑卷管理
3.1 LVM 基本概念
LVM(Logical Volume Manager)将磁盘(PV 物理卷)统一划分为一个大池子(VG 卷组),再从池子中分出 LV 逻辑卷。优点是可以方便地扩展和裁剪容量。
[图片占位符:LVM 架构示意图:PV -> VG -> LV]
- 物理卷(PV):磁盘分区或具有同等功能的设备
- 卷组(VG):由一个或多个 PV 组成,类似于物理磁盘
- 逻辑卷(LV):建立在 VG 之上,类似于磁盘分区
- 物理块(PE):PV 被划分的基本单元(默认 4MB)
- 逻辑块(LE):LV 被划分的基本单元,与 PE 一一对应
3.2 LVM 管理命令
# 物理卷管理
pvcreate /dev/sdb1 # 创建物理卷
pvscan # 扫描物理卷
pvdisplay # 显示物理卷信息
# 卷组管理
vgcreate vg_name /dev/sdb1 # 创建卷组
vgscan # 扫描卷组
vgdisplay # 显示卷组信息
vgextend vg_name /dev/sdc1 # 添加 PV 到卷组
vgreduce vg_name /dev/sda1 # 从卷组中删除 PV
# 逻辑卷管理
lvcreate -L 1500 -n www1 vg_name # 创建 1500M 的逻辑卷
lvscan # 扫描逻辑卷
lvdisplay # 显示逻辑卷信息
lvextend -L +500M /dev/vg_name/www1 # 扩展逻辑卷
lvreduce -L -500M /dev/vg_name/www1 # 裁剪逻辑卷
lvremove /dev/vg_name/www1 # 删除逻辑卷
3.3 激活卷组
vgchange -ay vg_name # 激活
vgchange -an vg_name # 停用
四、文件系统与存储
Linux 常用文件系统
| 文件系统 | 特点 |
|---|---|
| ext4 | Linux 最常用的文件系统,ext3 的升级版 |
| xfs | RHEL 的默认文件系统,适合大文件 |
| btrfs | 支持快照、压缩、加密 |
| tmpfs | 内存文件系统,重启后数据丢失 |
| swap | 交换分区,用于虚拟内存 |
存储类型
| 类型 | 说明 | 典型代表 |
|---|---|---|
| 块存储 | 磁盘级存储 | Ceph RBD |
| 对象存储 | 基于对象的存储 | S3、Swift |
| 文件存储 | 文件级共享 | NFS、CIFS、FTP |
五、Vim 批量操作技巧
5.1 录制宏(Macro)
宏是 Vim 中最强大的批量操作工具,可以将一系列操作录制下来,然后重复执行。
# 录制宏的步骤:
qa # 开始录制宏,存入寄存器 a(也可以用 qb、qc 等)
# ... 执行你的操作 ...
q # 停止录制
# 执行宏:
@a # 执行寄存器 a 中的宏(执行一次)
5@a # 执行 5 次
@@ # 重复上一次执行的宏
典型应用场景:
# 假设需要给每一行末尾加分号
qa # 开始录制
A; # 在行尾添加分号
j # 移动到下一行
q # 停止录制
99@a # 对接下来 99 行重复执行
5.2 块操作(Visual Block Mode)
块操作可以同时对多行进行编辑,适合批量注释、批量修改等场景。
# 进入块选择模式
Ctrl+V # 进入可视块模式
# 块操作步骤:
# 1. Ctrl+V 进入块选择模式
# 2. 用方向键选择要操作的行和列范围
# 3. 按 I(大写 i)在选中区域左侧进入插入模式
# 4. 输入要插入的内容(如 // 或 #)
# 5. 按 Esc,内容会自动应用到所有选中的行
# 批量删除注释:
# 1. Ctrl+V 选择注释符号所在列
# 2. 按 d 删除
5.3 其他实用批量操作
# 全局替换
:%s/old/new/g # 全文替换 old 为 new
:%s/old/new/gc # 全文替换,每次确认
# 行号范围替换
:10,20s/old/new/g # 第 10-20 行替换
# 正则替换
:%s/^/#/g # 在所有行首添加 #
:%s/$/;/g # 在所有行尾添加 ;
# 多行缩进
>> # 当前行右缩进
<< # 当前行左缩进
5>> # 当前行及下面 4 行右缩进
六、Redis 集群主从备份
6.1 Redis 主从复制概述
Redis 提供了主从复制(Master-Slave Replication)机制,通过将一个 Redis 服务器(主节点)的数据复制到一个或多个 Redis 服务器(从节点),实现数据冗余和读写分离。
主从结构:
Master(主节点)
├── Slave 1(从节点)
├── Slave 2(从节点)
└── Slave 3(从节点)
- 主节点(Master):负责写操作和部分读操作
- 从节点(Slave):复制主节点的数据,主要负责读操作
6.2 数据读写分离
主从复制的核心思想是读写分离:
- 写操作:只在主节点上执行,主节点将写命令异步复制到从节点
- 读操作:可以在主节点或从节点上执行,从节点分担读压力
优势:
- 数据冗余:主节点数据自动备份到从节点
- 负载均衡:读请求分散到多个从节点,提高系统吞吐量
- 高可用基础:主节点故障时,可以将从节点提升为主节点(结合 Sentinel 实现)
6.3 主从复制配置
# 在从节点的 redis.conf 中配置
slaveof <master-ip> <master-port>
# 或者在运行时通过命令配置
redis-cli slaveof <master-ip> <master-port>
# 查看主从状态
redis-cli info replication
6.4 Redis Sentinel 哨兵模式
Redis Sentinel 是 Redis 官方提供的高可用方案,当主节点出现故障时,Sentinel 会自动进行故障转移,将一个从节点提升为新的主节点。
# sentinel.conf 基本配置
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
七、性能分析工具
7.1 strace – 内核态性能追踪
strace 用于追踪程序执行时的系统调用:
# 追踪程序的所有系统调用
strace ./program
# 追踪正在运行的进程
strace -p <PID>
# 只追踪特定的系统调用
strace -e open,read,write ./program
# 统计系统调用的时间
strace -c ./program
7.2 ltrace – 用户态性能追踪
ltrace 用于追踪程序执行时的库函数调用:
# 追踪库函数调用
ltrace ./program
# 追踪特定函数
ltrace -e malloc,free ./program
7.3 lsof 命令详解
lsof(List Open Files)用于查看进程打开的文件,在 Linux 中"一切皆文件",因此 lsof 可以查看进程打开的网络端口、设备、管道等。
# 查看某个进程打开的所有文件
lsof -p <PID>
# 查看某个端口被哪个进程占用
lsof -i :8080
# 查看所有网络连接
lsof -i
# 查看指定用户打开的文件
lsof -u username
# 查看某个目录下被打开的文件
lsof +D /path/to/dir
# 查看所有 TCP 连接
lsof -i tcp
# 查看某个进程打开的网络连接
lsof -p <PID> -i
# 查看被删除但仍被进程占用的文件(排查磁盘空间问题)
lsof | grep deleted
典型应用场景:当磁盘空间显示已满但找不到大文件时,通常是因为文件被删除但进程仍在持有,使用
lsof | grep deleted可以定位问题进程,重启该进程即可释放空间。
7.4 free 命令详解
free 命令用于显示系统内存使用情况。
# 以 MB 为单位显示
free -m
# 以 GB 为单位显示
free -h
输出示例:
total used free shared buff/cache available
Mem: 7982 2430 3120 128 2431 5102
Swap: 4095 0 4095
关键字段含义:
| 字段 | 含义 |
|---|---|
total |
物理内存总量 |
used |
已使用的内存 |
free |
完全空闲的内存 |
shared |
共享内存(多个进程共同使用的内存) |
buff/cache |
缓冲区(buffers)和缓存(cache)占用的内存 |
available |
真正可用的内存(包含可以被回收的缓存) |
理解 buffers 和 cache:
- buffers:块设备(如磁盘)读写时的缓冲区,存储原始磁盘块的元数据
- cache:文件系统的页面缓存(Page Cache),缓存从文件读取的内容
- 两者都是为了加速 I/O 操作,当应用程序需要更多内存时,系统会自动回收这些缓存
内存计算公式:
实际应用使用内存 = used - buffers - cache
实际可用内存 = free + buffers + cache ≈ available
判断内存是否够用:不要只看
free列(通常很小),应该看available列。Linux 会尽可能多地利用空闲内存做缓存,这是正常且有益的行为。
7.5 其他性能分析工具
# 查看进程信息
pidof program_name # 按名称查找 PID
pgrep -u root # 查找指定用户的进程
pkill process_name # 按名称杀死进程
# 查看磁盘
lsblk # 查看所有磁盘
fdisk -l # 查看磁盘分区
八、tmux 终端复用
tmux 的一个强大功能是:当远程 SSH 连接异常断开时,session 会保留在服务器上,可以重新连接。
# 查看存在的 session
tmux ls
# 连接到之前的 session
tmux attach -t <session_id>
# 创建命名 session
tmux new -s work
# 分离 session(不关闭)
# 快捷键:Ctrl+B 然后按 D
# 关闭指定 session
tmux kill-session -t work
九、防火墙配置 (UFW)
9.1 基本操作
sudo ufw enable # 启用防火墙
sudo ufw default deny # 默认拒绝所有外部访问
sudo ufw disable # 关闭防火墙
sudo ufw status # 查看状态
9.2 规则管理
sudo ufw allow 80 # 允许 80 端口
sudo ufw allow 31422 # 允许新 SSH 端口
sudo ufw delete allow 80 # 删除规则
sudo ufw allow from 192.168.1.0/24 # 允许网段
sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22
9.3 推荐的安全配置
sudo apt-get install ufw
sudo ufw enable
sudo ufw default deny
sudo ufw allow 22
sudo ufw allow 31422
阿里云等云服务器还需要在安全组中配置端口放行。
十、网络工具
10.1 netcat (nc)
# 监听端口
nc -l ip port
# 连接
nc ip port
# 检测端口是否开放
nc -v ip port
# 传输文件
nc -l port < file # 发送端
nc server_ip port > file # 接收端
# 视频传输
cat video.avi | nc -l port
nc server_ip port | mplayer -vo x11 -cache 3000 -
10.2 tcpdump 抓包
# 监听本地回环
sudo tcpdump -i lo
# 监听指定主机
sudo tcpdump host 192.168.1.1
# 监听指定端口
sudo tcpdump port 8080
# 查看包内容
sudo tcpdump -X tcp port 12345
# 保存到文件(用 Wireshark 分析)
sudo tcpdump -w capture.pcap tcp port 8080
# 监听回环端口(注意:默认抓取第一张网卡)
sudo tcpdump tcp port 8888 -i lo
IP 头部通常 20 字节,TCP 头部通常 20 字节,查看应用层数据时需过滤掉前 40 字节。
10.3 nmap 扫描
# 扫描局域网设备
nmap -sP 192.168.1.0/24
# 扫描端口
nmap -p 1-65535 target_ip
十一、网络架构基础
11.1 三层架构
典型的网站三层架构:
- 前端服务器层(边缘服务器/反向代理):直接与用户交互,部署在公网、防火墙外,如 Nginx
- 应用服务器层:负责业务逻辑处理
- 数据库服务器层:负责数据存储和查询
根据需求还可以增加缓存服务器、负载均衡服务器、防火墙服务器等。
11.2 网络设备概念
路由器:负责网络寻址。两台计算机通信时,数据包经过成千上万的路由器,每个路由器计算下一个路由器的地址并转发数据包。
交换机:连接不同的局域网。连接到同一交换机的任何网络都能互通。具有路由功能的交换机称为三层交换机。
集线器(Hub):对接收到的信号进行放大和转发,扩大网络传输距离。
网关:一个网络通向其他网络的 IP 地址。当主机发现数据包的目的主机不在本地网络中,就把数据包转发给网关。
11.3 带宽与吞吐量
- 带宽:每秒最多能传输的数据量(理论最大值)
- 吞吐量:每秒实际传输的数据量
例如:20M 带宽 = 2MB/s(下载速度)
十二、Squid 代理服务器
# 安装
sudo apt-get install squid
# 配置
sudo vim /etc/squid/squid.conf
# http_port 3128 # 修改代理端口
# acl myhome src 171.213.12.0/255.0.0.0 # 定义允许的客户端
# http_access allow myhome # 允许访问
# http_access allow all # 允许所有(可选)
# 注释掉 http_access deny all # 默认拒绝
# 重启服务
sudo systemctl restart squid.service
# 验证监听
sudo netstat -nlt
十三、内网穿透工具
13.1 frp
frp 是一款优秀的内网穿透工具,支持 TCP、HTTP、UDP、STCP 等协议,配置简单清晰。
13.2 ngrok
ngrok 也可以搭建内网穿透服务器,但已停止维护,推荐使用 frp 替代。
十四、CI/CD 持续集成与持续交付
14.1 CI/CD 工具链
在互联网时代,产品快速迭代至关重要。CI/CD 工具链包括:
- 需求与 BUG 管理:禅道、Redmine 等
- 版本控制:Git、SVN 等
- 构建与测试:Jenkins(免费)、Bamboo(商业)等
- 交付:以 Docker 镜像形式提交至镜像仓库
14.2 DevOps 与持续交付
持续交付与 DevOps 的含义相似但不同。DevOps 的范围更广,以文化变迁为中心,涉及开发、运维、QA、管理部门之间的协作,并将软件交付过程自动化。
十五、其他实用技巧
15.1 文件传输
# lrzsz 工具
sudo apt-get install lrzsz
rz # 上传文件
sz filename # 下载文件
# scp 远程复制
scp user@host:/path/remote_file /path/local_dir
scp /path/local_file user@host:/path/remote_dir
15.2 后台运行程序
# 方式一:&
./program &
# 方式二:nohup(终端退出不影响)
nohup ./program &>/dev/null &
# 方式三:放入新会话
(./program &>/dev/null &)
15.3 进程与端口排查
# 查看服务绑定的端口
netstat -anp | grep service_name
# 查看进程打开的文件
lsof -p <PID>
# 强制杀死占用文件的进程
fuser -k /mnt/nfs_test
# 添加路由
sudo route add default gw 192.168.28.254 eth0
# 或
sudo ip route add default via 192.168.28.254
十六、Linux 包管理系统速查
Debian 系(APT/DPKG)
sudo apt update && sudo apt upgrade # 更新
sudo apt install package # 安装
sudo apt remove package # 卸载
sudo apt purge package # 卸载并删除配置
apt search keyword # 搜索
Red Hat 系(DNF/YUM)
sudo dnf update # 更新
sudo dnf install package # 安装
sudo dnf remove package # 卸载
sudo dnf search keyword # 搜索
Arch 系(Pacman)
sudo pacman -Syu # 更新系统
sudo pacman -S package # 安装
sudo pacman -R package # 卸载
sudo pacman -Ss keyword # 搜索
十七、Arch Linux 安装指南
17.1 准备工作
# 下载镜像(选择国内镜像源)
wget http://mirrors.aliyun.com/archlinux/iso/2022.07.01/archlinux-2022.07.01-x86_64.iso
# 刻录 U 盘
dd if=archlinux-2022.07.01-x86_64.iso of=/dev/sdb
# 启动安装,选择第一项
# Arch Linux Install Medium (x86_64, UEFI)
17.2 网络连接
# 有线:自动获取
# 无线:
iwctl
[iwd]# device list
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect <network_name>
[iwd]# exit
# 验证
ping www.baidu.com
17.3 磁盘分区
使用 cfdisk 创建三个分区(选择 GPT 类型):
| 分区 | 大小 | 类型 |
|---|---|---|
| EFI 分区 | 300M | EFI System |
| Swap 分区 | 4G | Linux swap |
| 系统分区 | 剩余空间 | Linux Filesystem |
# 格式化
mkfs.vfat /dev/sda1
mkfs.xfs -f /dev/sda2
mkswap /dev/sda3
# 挂载
mount /dev/sda2 /mnt
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
swapon /dev/sda3
17.4 安装系统
# 设置国内镜像源
reflector --country China --age 72 --sort rate --protocol https --save /etc/pacman.d/mirrorlist
# 安装基础系统
pacstrap /mnt linux linux-firmware linux-headers base base-devel vim git bash-completion
# 生成 fstab
genfstab -U /mnt >> /mnt/etc/fstab
# 进入新系统
arch-chroot /mnt
# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
17.5 基础配置
# 设置语言
vim /etc/locale.gen
# 取消注释:en_US.UTF-8 UTF-8 和 zh_CN.UTF-8 UTF-8
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
# 安装引导
pacman -S grub efibootmgr efivar networkmanager intel-ucode
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
# 启用网络
systemctl enable NetworkManager
# 设置 root 密码
passwd root
# 退出并重启
exit
umount /mnt/boot/efi
umount /mnt
reboot
17.6 桌面环境(KDE)
# 添加 ArchLinuxCN 源
vim /etc/pacman.conf
# [archlinuxcn]
# Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
# 更新 GPG 密钥
rm -rf /etc/pacman.d/gnupg && pacman-key --init
pacman -Sy archlinuxcn-keyring
pacman-key --populate archlinux archlinuxcn
pacman -Syy
# 安装显示服务
pacman -S xorg
# 安装字体
pacman -S ttf-dejavu wqy-microhei noto-fonts-cjk
# 安装 KDE 桌面
pacman -S plasma sddm konsole dolphin kate
systemctl enable sddm
# 安装输入法
pacman -S fcitx fcitx-im fcitx-configtool
yay -S fcitx-sogoupinyin
# 配置输入法环境变量
vim ~/.xprofile
# export GTK_IM_MODULE=fcitx
# export QT_IM_MODULE=fcitx
# export XMODIFIERS="@im=fcitx"
总结
Linux 日常运维涵盖的知识面极广,本文汇总了最常用的实战技巧。关键要点:
- 定时任务:熟练使用 crontab 配置周期性任务,注意使用绝对路径
- 存储管理:掌握 Swap 分区创建和 LVM 逻辑卷的创建、扩展、裁剪操作
- 文件系统:了解 ext4、xfs、btrfs 等常用文件系统的特点
- Vim 技巧:掌握宏录制和块操作提高编辑效率
- Redis 集群:理解主从复制和读写分离的基本架构
- 性能分析:strace/ltrace 用于定位系统性能瓶颈,lsof 用于查看进程打开的文件和端口
- 内存管理:理解 free 命令中 buffers/cache 的含义,合理使用 Swap 分区
- 网络排查:tcpdump、netcat、nmap 是网络诊断的三大利器
- 终端工具:tmux 保证远程操作不因断开而丢失
- CI/CD:理解持续集成与持续交付的工具链和工作流程
原始笔记来源: jdah/other_notes.c(Linux 运维全量内容)、hhjt/otherNotes.cpp(网络架构/Squid/frp/CI-CD 部分)
更多推荐





所有评论(0)