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 数据读写分离

主从复制的核心思想是读写分离

  • 写操作:只在主节点上执行,主节点将写命令异步复制到从节点
  • 读操作:可以在主节点或从节点上执行,从节点分担读压力

优势

  1. 数据冗余:主节点数据自动备份到从节点
  2. 负载均衡:读请求分散到多个从节点,提高系统吞吐量
  3. 高可用基础:主节点故障时,可以将从节点提升为主节点(结合 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 三层架构

典型的网站三层架构:

  1. 前端服务器层(边缘服务器/反向代理):直接与用户交互,部署在公网、防火墙外,如 Nginx
  2. 应用服务器层:负责业务逻辑处理
  3. 数据库服务器层:负责数据存储和查询

根据需求还可以增加缓存服务器、负载均衡服务器、防火墙服务器等。

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 工具链包括:

  1. 需求与 BUG 管理:禅道、Redmine 等
  2. 版本控制:Git、SVN 等
  3. 构建与测试:Jenkins(免费)、Bamboo(商业)等
  4. 交付:以 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 日常运维涵盖的知识面极广,本文汇总了最常用的实战技巧。关键要点:

  1. 定时任务:熟练使用 crontab 配置周期性任务,注意使用绝对路径
  2. 存储管理:掌握 Swap 分区创建和 LVM 逻辑卷的创建、扩展、裁剪操作
  3. 文件系统:了解 ext4、xfs、btrfs 等常用文件系统的特点
  4. Vim 技巧:掌握宏录制和块操作提高编辑效率
  5. Redis 集群:理解主从复制和读写分离的基本架构
  6. 性能分析:strace/ltrace 用于定位系统性能瓶颈,lsof 用于查看进程打开的文件和端口
  7. 内存管理:理解 free 命令中 buffers/cache 的含义,合理使用 Swap 分区
  8. 网络排查:tcpdump、netcat、nmap 是网络诊断的三大利器
  9. 终端工具:tmux 保证远程操作不因断开而丢失
  10. CI/CD:理解持续集成与持续交付的工具链和工作流程

原始笔记来源: jdah/other_notes.c(Linux 运维全量内容)、hhjt/otherNotes.cpp(网络架构/Squid/frp/CI-CD 部分)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐