DevOps工程师必备Linux命令完全指南

目录

  1. 文件和目录操作
  2. 文本处理和查找
  3. 系统监控和性能分析
  4. 网络管理和诊断
  5. 进程管理
  6. 权限和用户管理
  7. 磁盘和文件系统管理
  8. 服务管理
  9. 日志管理
  10. 压缩和归档
  11. 远程连接和文件传输
  12. 自动化和脚本

文件和目录操作

基础导航命令

ls - 列出目录内容

bash 复制代码
# 基本用法
ls                    # 列出当前目录文件
ls -l                 # 详细信息(权限、大小、时间)
ls -la                # 包含隐藏文件的详细信息
ls -lh                # 人类可读的文件大小
ls -ltr               # 按时间倒序排列
ls -lS                # 按文件大小排序

# 实用组合
ls -la /var/log/      # 查看日志目录详细信息
ls -lh --color=auto   # 彩色输出,便于识别文件类型

# DevOps场景应用
ls -la /etc/nginx/    # 检查nginx配置文件权限
ls -ltr /var/log/app/ | tail  # 查看最新的应用日志文件

cd - 切换目录

bash 复制代码
cd /path/to/directory  # 绝对路径
cd ../                 # 返回上级目录
cd ~                   # 回到家目录
cd -                   # 返回前一个目录
cd                     # 默认回到家目录

# DevOps常用路径
cd /var/log           # 日志目录
cd /etc               # 配置文件目录
cd /opt               # 第三方软件安装目录
cd /usr/local/bin     # 本地二进制文件

pwd - 显示当前路径

bash 复制代码
pwd                   # 显示完整路径
pwd -P                # 显示物理路径(解析符号链接)

文件操作命令

cp - 复制文件/目录

bash 复制代码
# 基本复制
cp file1 file2        # 复制文件
cp -r dir1 dir2       # 递归复制目录
cp -p file1 file2     # 保持原文件属性
cp -v file1 file2     # 显示复制过程

# DevOps场景
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak  # 备份配置文件
cp -r /var/www/html/ /backup/$(date +%Y%m%d)/       # 带时间戳的备份

mv - 移动/重命名文件

bash 复制代码
mv oldname newname    # 重命名文件
mv file /path/        # 移动文件到指定目录
mv -v file1 file2     # 显示移动过程

# DevOps场景
mv access.log access.log.$(date +%Y%m%d)  # 日志轮转
mv /tmp/deploy/* /var/www/html/            # 部署文件

rm - 删除文件/目录

bash 复制代码
rm file               # 删除文件
rm -r directory       # 递归删除目录
rm -f file            # 强制删除,不提示
rm -rf directory      # 强制递归删除(危险!)
rm -i file            # 交互式删除,确认提示

# 安全删除实践
rm -i *.log           # 交互式删除日志文件
find /tmp -name "*.tmp" -mtime +7 -exec rm {} \;  # 删除7天前的临时文件

mkdir - 创建目录

bash 复制代码
mkdir directory       # 创建单个目录
mkdir -p path/to/dir  # 创建多级目录
mkdir -m 755 dir      # 指定权限创建目录

# DevOps场景
mkdir -p /var/log/myapp/{error,access,debug}  # 创建应用日志目录结构
mkdir -p /backup/$(date +%Y/%m/%d)            # 创建按日期分层的备份目录

touch - 创建文件或更新时间戳

bash 复制代码
touch file            # 创建空文件或更新时间戳
touch -t 202501011200 file  # 设置特定时间戳
touch file{1..5}      # 批量创建文件

# DevOps场景
touch /var/log/app.log  # 创建日志文件
touch .maintenance      # 创建维护标志文件

文本处理和查找

查看文件内容

cat - 显示文件内容

bash 复制代码
cat file              # 显示整个文件
cat -n file           # 显示行号
cat -b file           # 只对非空行显示行号
cat file1 file2       # 合并显示多个文件

# DevOps场景
cat /etc/hosts        # 查看主机映射
cat /proc/cpuinfo     # 查看CPU信息
cat /etc/os-release   # 查看系统版本

less / more - 分页查看文件

bash 复制代码
less file             # 分页查看,支持前后翻页
more file             # 分页查看,只能向前翻页

# less 内部命令
# 空格键:下一页
# b:上一页
# g:跳到文件开头
# G:跳到文件末尾
# /pattern:搜索
# q:退出

# DevOps场景
less /var/log/syslog  # 查看系统日志
less +F /var/log/app.log  # 类似tail -f的实时查看

head / tail - 查看文件头尾

bash 复制代码
head file             # 显示前10行
head -n 20 file       # 显示前20行
tail file             # 显示后10行
tail -n 50 file       # 显示后50行
tail -f file          # 实时跟踪文件更新

# DevOps场景
tail -f /var/log/nginx/access.log              # 实时监控访问日志
tail -n 100 /var/log/app.log | grep ERROR      # 查看最近100行中的错误
head -n 1 /etc/passwd                          # 查看passwd文件格式

文本搜索和处理

grep - 文本搜索

bash 复制代码
# 基本搜索
grep "pattern" file           # 在文件中搜索模式
grep -i "pattern" file        # 忽略大小写
grep -v "pattern" file        # 反向匹配(不包含pattern的行)
grep -n "pattern" file        # 显示行号
grep -r "pattern" directory   # 递归搜索目录
grep -c "pattern" file        # 统计匹配行数

# 正则表达式
grep "^ERROR" file            # 匹配以ERROR开头的行
grep "ERROR$" file            # 匹配以ERROR结尾的行
grep -E "(ERROR|WARN)" file   # 匹配ERROR或WARN

# DevOps实战应用
grep -i error /var/log/syslog                    # 查找系统错误
grep -r "OutOfMemoryError" /var/log/             # 递归查找内存错误
grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$"  # 查看配置文件(去除注释和空行)
ps aux | grep nginx                              # 查找nginx进程
netstat -tulpn | grep :80                        # 查看80端口使用情况

awk - 文本处理利器

bash 复制代码
# 基本用法
awk '{print $1}' file         # 打印第一列
awk '{print $1, $3}' file     # 打印第一和第三列
awk 'NR==5' file              # 打印第5行
awk '/pattern/ {print $0}' file  # 打印匹配行

# 条件处理
awk '$3 > 100' file           # 第三列大于100的行
awk 'length($0) > 80' file    # 行长度大于80的行

# DevOps实战
# 分析访问日志
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 统计最多访问的IP

# 分析进程内存使用
ps aux | awk '{sum+=$6} END {print "Total memory: " sum/1024 " MB"}'

# 从配置文件提取特定信息
awk -F: '$3 >= 1000 {print $1}' /etc/passwd  # 查找UID大于等于1000的用户

# 日志分析:统计HTTP状态码
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

sed - 流编辑器

bash 复制代码
# 基本替换
sed 's/old/new/' file         # 替换每行第一个匹配
sed 's/old/new/g' file        # 替换所有匹配
sed 's/old/new/gi' file       # 忽略大小写替换

# 行操作
sed -n '5p' file              # 只打印第5行
sed '5d' file                 # 删除第5行
sed '1,5d' file               # 删除1-5行

# DevOps实战
# 配置文件修改
sed -i 's/localhost/0.0.0.0/g' /etc/nginx/nginx.conf  # 直接修改文件
sed -i '/^#/d' config.txt     # 删除注释行
sed -i '/^$/d' config.txt     # 删除空行

# 日志处理
sed 's/\[.*\]/[TIMESTAMP]/' access.log  # 替换时间戳
sed -n '/ERROR/,/^$/p' app.log           # 打印ERROR到空行之间的内容

find - 文件查找

bash 复制代码
# 基本查找
find /path -name "filename"           # 按文件名查找
find /path -name "*.log"              # 通配符查找
find /path -iname "*.LOG"             # 忽略大小写查找
find /path -type f                    # 只查找文件
find /path -type d                    # 只查找目录

# 按时间查找
find /path -mtime +7                  # 7天前修改的文件
find /path -mtime -1                  # 1天内修改的文件
find /path -atime +30                 # 30天未访问的文件

# 按大小查找
find /path -size +100M                # 大于100MB的文件
find /path -size -1k                  # 小于1KB的文件

# 执行操作
find /path -name "*.tmp" -delete      # 删除找到的文件
find /path -name "*.log" -exec ls -lh {} \;  # 对找到的文件执行命令

# DevOps实战场景
# 清理临时文件
find /tmp -type f -mtime +7 -delete

# 查找大文件
find /var -size +100M -type f -exec ls -lh {} \; | sort -k5 -hr

# 查找配置文件
find /etc -name "*.conf" -type f

# 查找最近修改的日志文件
find /var/log -name "*.log" -mtime -1

# 批量修改权限
find /var/www -type f -exec chmod 644 {} \;
find /var/www -type d -exec chmod 755 {} \;

# 查找空文件和目录
find /path -empty -type f             # 空文件
find /path -empty -type d             # 空目录

系统监控和性能分析

系统资源监控

top / htop - 实时进程监控

bash 复制代码
# top命令
top                   # 实时显示进程信息
top -p PID            # 监控特定进程
top -u username       # 监控特定用户的进程

# top内部快捷键
# P:按CPU使用率排序
# M:按内存使用率排序
# k:杀死进程
# q:退出

# htop(更友好的界面)
htop                  # 彩色界面的进程监控
htop -u username      # 监控特定用户

# DevOps应用
top -p $(pgrep nginx) # 监控nginx进程

ps - 进程快照

bash 复制代码
# 基本用法
ps                    # 显示当前用户进程
ps aux                # 显示所有进程详细信息
ps -ef                # 另一种显示所有进程的方式
ps -u username        # 显示特定用户进程

# 进程树
ps -ejH               # 显示进程树
pstree                # 更直观的进程树

# DevOps实战
ps aux | grep nginx                    # 查找nginx进程
ps aux | sort -nrk 3 | head           # CPU使用率最高的进程
ps aux | sort -nrk 4 | head           # 内存使用率最高的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head  # 自定义显示格式

iostat - I/O统计

bash 复制代码
iostat                # 显示CPU和I/O统计
iostat -x 1 10        # 每秒更新,显示10次,扩展信息
iostat -d 2           # 每2秒显示磁盘统计

# 重要指标说明
# %iowait:等待I/O的CPU时间百分比
# r/s:每秒读操作数
# w/s:每秒写操作数
# util:设备利用率

# DevOps应用
iostat -x 1 | grep -E "(Device|sda)"  # 监控主磁盘I/O

iotop - 实时I/O监控

bash 复制代码
iotop                 # 实时显示进程I/O使用情况
iotop -a              # 显示累积I/O而不是带宽
iotop -o              # 只显示有I/O活动的进程
iotop -p PID          # 监控特定进程

vmstat - 虚拟内存统计

bash 复制代码
vmstat                # 显示虚拟内存统计
vmstat 2 5            # 每2秒更新,显示5次
vmstat -s             # 显示内存统计总结

# 重要指标
# r:运行队列中的进程数
# b:不可中断睡眠的进程数
# swpd:虚拟内存使用量
# free:空闲内存
# si/so:换入/换出内存页数

内存和磁盘监控

free - 内存使用情况

bash 复制代码
free                  # 显示内存使用情况
free -h               # 人类可读格式
free -m               # 以MB为单位显示
free -s 2             # 每2秒更新一次

# DevOps监控脚本
watch -n 2 free -h    # 每2秒刷新内存使用情况

df - 磁盘空间使用

bash 复制代码
df                    # 显示文件系统磁盘使用情况
df -h                 # 人类可读格式
df -i                 # 显示inode使用情况
df -T                 # 显示文件系统类型

# DevOps实战
df -h | grep -vE '^Filesystem|tmpfs|cdrom'  # 过滤掉临时文件系统
df -h /var/log        # 检查日志目录磁盘使用

du - 目录空间使用

bash 复制代码
du                    # 显示目录使用情况
du -h                 # 人类可读格式
du -s                 # 只显示总计
du -sh *              # 显示当前目录下各文件/目录大小

# DevOps实战
du -sh /var/log/* | sort -hr            # 查看最大的日志文件
du -h --max-depth=1 /var | sort -hr     # 查看/var下各目录大小
find /var/log -name "*.log" -exec du -sh {} \; | sort -hr  # 查找最大的日志文件

网络管理和诊断

网络状态查看

netstat - 网络连接状态

bash 复制代码
netstat -tulpn        # 显示所有监听端口
netstat -an           # 显示所有连接
netstat -rn           # 显示路由表
netstat -i            # 显示网络接口统计

# 参数说明
# -t:TCP连接
# -u:UDP连接
# -l:只显示监听端口
# -p:显示进程信息
# -n:以数字形式显示地址和端口

# DevOps实战
netstat -tulpn | grep :80             # 查看80端口使用情况
netstat -tulpn | grep nginx           # 查看nginx监听的端口
netstat -an | grep ESTABLISHED | wc -l  # 统计活跃连接数

ss - Socket统计(netstat的现代替代)

bash 复制代码
ss -tulpn             # 显示所有监听端口
ss -tln               # 只显示TCP监听端口
ss -p                 # 显示进程信息

# DevOps应用
ss -tulpn | grep :22             # 查看SSH端口
ss -o state established          # 显示已建立的连接

lsof - 列出打开的文件

bash 复制代码
lsof                  # 列出所有打开的文件
lsof -i               # 列出网络连接
lsof -i :80           # 查看80端口被哪个进程使用
lsof -u username      # 查看用户打开的文件
lsof -p PID           # 查看进程打开的文件

# DevOps实战
lsof -i :22                    # 查看SSH连接
lsof -i tcp:80                 # 查看80端口TCP连接
lsof +D /var/log               # 查看谁在使用日志目录
lsof | grep deleted            # 查找已删除但仍被进程占用的文件

网络诊断工具

ping - 网络连通性测试

bash 复制代码
ping hostname         # 基本ping测试
ping -c 5 hostname    # 发送5个包后停止
ping -i 2 hostname    # 每2秒发送一个包
ping -s 1024 hostname # 指定数据包大小

# DevOps应用
ping -c 3 8.8.8.8     # 测试外网连通性
ping -c 1 localhost   # 测试本地网络栈

traceroute / tracepath - 路由跟踪

bash 复制代码
traceroute hostname   # 跟踪到目标的网络路径
tracepath hostname    # Linux自带的路由跟踪工具
mtr hostname          # 结合ping和traceroute的工具

# DevOps应用
traceroute google.com # 诊断网络路由问题
mtr --report-cycles 10 google.com  # 生成报告格式的路由分析

nmap - 网络扫描

bash 复制代码
nmap hostname         # 扫描常用端口
nmap -p 1-65535 hostname  # 扫描所有端口
nmap -sS hostname     # TCP SYN扫描
nmap -sU hostname     # UDP扫描

# DevOps应用
nmap -p 22,80,443 server  # 扫描常用服务端口
nmap -sn 192.168.1.0/24   # 网段主机发现

tcpdump - 网络包捕获

bash 复制代码
tcpdump -i eth0       # 在eth0接口上捕获包
tcpdump -i any        # 在所有接口上捕获
tcpdump host hostname # 捕获与特定主机的通信
tcpdump port 80       # 捕获80端口的流量

# DevOps实战
tcpdump -i eth0 port 22 -w ssh.pcap     # 捕获SSH流量并保存
tcpdump -i any host 192.168.1.100       # 监控特定IP的流量
tcpdump -i eth0 -n port 80 | head -20   # 查看HTTP流量样本

进程管理

进程控制

kill - 终止进程

bash 复制代码
kill PID              # 发送TERM信号终止进程
kill -9 PID           # 发送KILL信号强制终止
kill -HUP PID         # 发送HUP信号(通常用于重载配置)
kill -USR1 PID        # 发送用户定义信号1

# 信号类型
# TERM (15):正常终止信号
# KILL (9):强制终止信号
# HUP (1):挂起信号,通常用于重载配置
# USR1 (10):用户定义信号1

# DevOps应用
kill -HUP $(cat /var/run/nginx.pid)     # 重载nginx配置
kill -USR1 $(cat /var/run/nginx.pid)    # nginx日志轮转

killall - 按名称终止进程

bash 复制代码
killall processname   # 终止所有同名进程
killall -9 processname # 强制终止所有同名进程
killall -u username   # 终止特定用户的所有进程

# DevOps应用
killall nginx         # 终止所有nginx进程
killall -HUP rsyslog  # 重载rsyslog服务

pkill / pgrep - 按模式终止/查找进程

bash 复制代码
pgrep nginx           # 查找nginx进程PID
pgrep -u username     # 查找特定用户的进程
pkill nginx           # 终止nginx进程
pkill -f "python app.py"  # 按完整命令行匹配终止进程

# DevOps应用
pgrep -f "java.*tomcat" | xargs kill -9  # 强制终止tomcat
pkill -u deploy       # 终止deploy用户的所有进程

后台进程管理

nohup - 不挂起运行

bash 复制代码
nohup command &       # 后台运行命令,不受终端关闭影响
nohup ./script.sh > output.log 2>&1 &  # 重定向输出到文件

# DevOps应用
nohup python app.py > /var/log/app.log 2>&1 &  # 后台运行应用
nohup ./backup.sh > backup.log 2>&1 &          # 后台运行备份脚本

screen / tmux - 终端复用

bash 复制代码
# screen
screen                # 创建新会话
screen -S sessionname # 创建命名会话
screen -ls            # 列出所有会话
screen -r sessionname # 恢复会话
# Ctrl+A, D:分离会话

# tmux
tmux                  # 创建新会话
tmux new-session -s name  # 创建命名会话
tmux list-sessions    # 列出会话
tmux attach-session -t name  # 恢复会话
# Ctrl+B, D:分离会话

# DevOps应用
screen -S deployment  # 创建部署会话
tmux new-session -s monitoring  # 创建监控会话

jobs / bg / fg - 作业控制

bash 复制代码
jobs                  # 列出当前作业
bg %1                 # 将作业1放到后台
fg %1                 # 将作业1调到前台
command &             # 直接后台运行命令

# Ctrl+Z:暂停前台进程
# Ctrl+C:终止前台进程

权限和用户管理

权限管理

chmod - 修改文件权限

bash 复制代码
# 数字模式
chmod 755 file        # rwxr-xr-x
chmod 644 file        # rw-r--r--
chmod 600 file        # rw-------

# 符号模式
chmod u+x file        # 给所有者添加执行权限
chmod g-w file        # 移除组的写权限
chmod o+r file        # 给其他用户添加读权限
chmod a+x file        # 给所有人添加执行权限

# 递归修改
chmod -R 755 directory

# DevOps应用
chmod +x deploy.sh                    # 给脚本添加执行权限
chmod 600 ~/.ssh/id_rsa               # 设置私钥权限
chmod -R 644 /var/www/html/*.html     # 设置网站文件权限
find /var/www -type d -exec chmod 755 {} \;  # 目录755权限
find /var/www -type f -exec chmod 644 {} \;  # 文件644权限

chown - 修改文件所有者

bash 复制代码
chown user file       # 修改文件所有者
chown user:group file # 修改所有者和组
chown :group file     # 只修改组
chown -R user:group directory  # 递归修改

# DevOps应用
chown -R nginx:nginx /var/www/html/       # 修改网站目录所有者
chown root:root /etc/sudoers              # 确保sudoers文件安全
chown mysql:mysql /var/lib/mysql/         # 修改数据库目录所有者

chgrp - 修改文件组

bash 复制代码
chgrp group file      # 修改文件组
chgrp -R group directory  # 递归修改组

umask - 设置默认权限

bash 复制代码
umask                 # 查看当前umask值
umask 022             # 设置umask值(新文件权限 = 666-umask)
umask 002             # 组内可写的umask设置

# 在.bashrc中设置默认umask
echo "umask 022" >> ~/.bashrc

用户管理

su / sudo - 切换用户

bash 复制代码
su username           # 切换到指定用户
su -                  # 切换到root用户并加载环境
sudo command          # 以root权限执行命令
sudo -u username command  # 以指定用户权限执行命令
sudo -l               # 查看当前用户sudo权限

# DevOps应用
sudo systemctl restart nginx      # 重启nginx服务
sudo -u postgres psql             # 以postgres用户连接数据库
sudo tail -f /var/log/syslog       # 查看系统日志

id - 显示用户信息

bash 复制代码
id                    # 显示当前用户信息
id username           # 显示指定用户信息
whoami                # 显示当前用户名
who                   # 显示当前登录用户
w                     # 显示详细的用户活动信息

# DevOps应用
id nginx              # 查看nginx用户的UID和GID
w                     # 查看系统负载和用户活动

磁盘和文件系统管理

挂载和文件系统

mount / umount - 挂载文件系统

bash 复制代码
mount                 # 显示已挂载的文件系统
mount /dev/sdb1 /mnt  # 挂载设备到目录
mount -t ext4 /dev/sdb1 /mnt  # 指定文件系统类型挂载
mount -o ro /dev/sdb1 /mnt    # 只读挂载

umount /mnt           # 卸载文件系统
umount -f /mnt        # 强制卸载

# DevOps应用
mount | grep -E '^/dev'                # 查看物理设备挂载
mount -o bind /var/log /backup/log     # 绑定挂载(备份场景)

lsblk - 列出块设备

bash 复制代码
lsblk                 # 树形显示块设备
lsblk -f              # 显示文件系统信息
lsblk -S              # 只显示SCSI设备

fdisk - 磁盘分区管理

bash 复制代码
fdisk -l              # 列出所有磁盘分区
fdisk /dev/sdb        # 对指定磁盘进行分区操作

# fdisk交互命令
# p:打印分区表
# n:创建新分区
# d:删除分区
# w:保存并退出
# q:不保存退出

文件系统检查和修复

fsck - 文件系统检查

bash 复制代码
fsck /dev/sdb1        # 检查文件系统
fsck -f /dev/sdb1     # 强制检查
fsck -y /dev/sdb1     # 自动回答yes
e2fsck /dev/sdb1      # 检查ext2/3/4文件系统

# 注意:检查前需要先卸载文件系统

服务管理

Systemd服务管理

systemctl - 服务控制

bash 复制代码
# 服务状态管理
systemctl start service    # 启动服务
systemctl stop service     # 停止服务
systemctl restart service  # 重启服务
systemctl reload service   # 重载配置
systemctl status service   # 查看服务状态

# 服务开机自启
systemctl enable service   # 设置开机自启
systemctl disable service  # 禁用开机自启
systemctl is-enabled service # 检查是否开机自启

# 服务信息
systemctl list-units       # 列出所有单元
systemctl list-units --type=service  # 只列出服务
systemctl list-unit-files  # 列出所有单元文件

# DevOps应用
systemctl status nginx              # 查看nginx状态
systemctl restart docker            # 重启docker服务
systemctl enable postgresql         # 设置数据库开机自启
systemctl --failed                  # 查看失败的服务

传统服务管理(SysV Init)

service - 服务控制(较老的系统)

bash 复制代码
service nginx start      # 启动nginx
service nginx stop       # 停止nginx
service nginx restart    # 重启nginx
service nginx status     # 查看状态

# 查看所有服务状态
service --status-all

chkconfig - 开机启动管理(CentOS/RHEL)

bash 复制代码
chkconfig --list         # 列出所有服务
chkconfig nginx on       # 设置开机启动
chkconfig nginx off      # 禁用开机启动

日志管理

系统日志

journalctl - Systemd日志查看

bash 复制代码
journalctl               # 查看所有日志
journalctl -f            # 实时跟踪日志
journalctl -u nginx      # 查看nginx服务日志
journalctl --since "2025-01-01"  # 查看指定日期后的日志
journalctl --until "2025-01-02"  # 查看指定日期前的日志
journalctl -p err        # 只显示错误级别日志

# 日志级别
# emerg (0):紧急
# alert (1):警告
# crit (2):严重
# err (3):错误
# warning (4):警告
# notice (5):注意
# info (6):信息
# debug (7):调试

# DevOps应用
journalctl -u docker -f                    # 实时查看docker日志
journalctl --since "1 hour ago"            # 查看1小时内的日志
journalctl -u nginx --since today          # 查看今天的nginx日志
journalctl -p err --since "2025-01-01"     # 查看错误日志

日志文件管理

logrotate - 日志轮转

bash 复制代码
# 配置文件:/etc/logrotate.conf 和 /etc/logrotate.d/

# 手动执行日志轮转
logrotate /etc/logrotate.conf
logrotate -f /etc/logrotate.d/nginx  # 强制轮转nginx日志

# 测试配置
logrotate -d /etc/logrotate.d/nginx  # 调试模式,不实际执行

实时日志监控

tail -f 和变种

bash 复制代码
tail -f /var/log/syslog              # 实时跟踪系统日志
tail -f /var/log/nginx/access.log    # 实时跟踪访问日志
tail -n 100 -f /var/log/app.log      # 先显示最后100行,然后跟踪

# 多文件同时监控
multitail /var/log/syslog /var/log/nginx/error.log

# 过滤和高亮
tail -f /var/log/app.log | grep --color=always ERROR

压缩和归档

归档和压缩

tar - 归档工具

bash 复制代码
# 创建归档
tar -cf archive.tar files/          # 创建tar归档
tar -czf archive.tar.gz files/      # 创建gzip压缩的tar归档
tar -cjf archive.tar.bz2 files/     # 创建bzip2压缩的tar归档

# 解压归档
tar -xf archive.tar                 # 解压tar归档
tar -xzf archive.tar.gz             # 解压gzip归档
tar -xjf archive.tar.bz2            # 解压bzip2归档

# 查看归档内容
tar -tf archive.tar                 # 列出归档内容
tar -tzf archive.tar.gz             # 列出gzip归档内容

# 排除文件
tar -czf backup.tar.gz --exclude='*.log' /var/www/

# DevOps应用
# 备份网站
tar -czf website_backup_$(date +%Y%m%d).tar.gz /var/www/html/

# 备份配置文件
tar -czf config_backup.tar.gz /etc/nginx/ /etc/apache2/

# 解压到指定目录
tar -xzf backup.tar.gz -C /restore/

# 备份除了日志外的所有文件
tar -czf app_backup.tar.gz --exclude='logs/*' --exclude='*.log' /opt/myapp/

gzip / gunzip - 压缩单个文件

bash 复制代码
gzip file.txt         # 压缩文件(原文件被替换)
gzip -k file.txt      # 保留原文件
gunzip file.txt.gz    # 解压文件
gzip -d file.txt.gz   # 解压文件(同gunzip)

# 查看压缩文件内容
zcat file.txt.gz      # 查看压缩文件内容
zless file.txt.gz     # 分页查看压缩文件
zgrep pattern file.txt.gz  # 在压缩文件中搜索

zip / unzip - ZIP格式

bash 复制代码
zip archive.zip files/       # 创建zip归档
zip -r archive.zip directory/  # 递归创建zip归档
unzip archive.zip            # 解压zip文件
unzip -l archive.zip         # 列出zip文件内容

# DevOps应用
zip -r deployment_$(date +%Y%m%d).zip /opt/app/  # 打包部署文件
unzip -q deployment.zip -d /deploy/              # 静默解压到指定目录

远程连接和文件传输

SSH连接

ssh - 安全Shell连接

bash 复制代码
ssh user@hostname           # 基本SSH连接
ssh -p 2222 user@hostname   # 指定端口连接
ssh -i keyfile user@hostname # 使用密钥文件连接
ssh -L 8080:localhost:80 user@hostname  # 本地端口转发
ssh -R 8080:localhost:80 user@hostname  # 远程端口转发

# SSH配置文件:~/.ssh/config
# Host server1
#     HostName 192.168.1.100
#     User admin
#     Port 2222
#     IdentityFile ~/.ssh/server1_key

# DevOps应用
ssh -t user@server "sudo tail -f /var/log/app.log"  # 执行远程命令
ssh -N -L 3306:localhost:3306 user@dbserver         # MySQL隧道

文件传输

scp - 安全复制

bash 复制代码
# 本地到远程
scp file.txt user@hostname:/path/
scp -r directory/ user@hostname:/path/

# 远程到本地
scp user@hostname:/path/file.txt ./
scp -r user@hostname:/path/directory/ ./

# 指定端口和密钥
scp -P 2222 -i keyfile file.txt user@hostname:/path/

# DevOps应用
scp deploy.tar.gz user@server:/opt/       # 传输部署包
scp -r /var/log/ backup@server:/backup/   # 备份日志到远程服务器

rsync - 高效同步工具

bash 复制代码
# 基本同步
rsync -av source/ destination/     # 归档模式同步
rsync -av --delete source/ dest/   # 同步并删除目标中多余文件
rsync -av --dry-run source/ dest/  # 预览同步操作

# 远程同步
rsync -av source/ user@hostname:/path/
rsync -av user@hostname:/path/ destination/

# 排除文件
rsync -av --exclude='*.log' source/ dest/
rsync -av --exclude-from=exclude.txt source/ dest/

# DevOps应用
# 网站同步
rsync -av --delete /var/www/html/ backup@server:/backup/www/

# 配置文件同步
rsync -av /etc/nginx/ config@server:/backup/nginx/

# 增量备份
rsync -av --link-dest=/backup/latest /data/ /backup/$(date +%Y%m%d)/

sftp - 安全FTP

bash 复制代码
sftp user@hostname      # 连接SFTP服务器
# SFTP内部命令:
# ls:列出远程目录
# lcd:切换本地目录
# cd:切换远程目录
# put:上传文件
# get:下载文件
# mput:批量上传
# mget:批量下载

自动化和脚本

定时任务

cron - 定时任务调度

bash 复制代码
crontab -l            # 查看当前用户的定时任务
crontab -e            # 编辑定时任务
crontab -r            # 删除所有定时任务
crontab -u user -l    # 查看指定用户的定时任务

# Cron时间格式:分 时 日 月 周
# * * * * * command
# 分钟 (0-59)
# 小时 (0-23)
# 日期 (1-31)
# 月份 (1-12)
# 星期 (0-7, 0和7都表示周日)

# DevOps实战示例
# 每天凌晨2点备份数据库
0 2 * * * /opt/scripts/backup_db.sh

# 每5分钟检查服务状态
*/5 * * * * /opt/scripts/check_services.sh

# 每周日凌晨3点清理日志
0 3 * * 0 /opt/scripts/cleanup_logs.sh

# 每月1号生成报告
0 0 1 * * /opt/scripts/monthly_report.sh

环境变量和配置

env / export - 环境变量管理

bash 复制代码
env                   # 显示所有环境变量
export VAR=value      # 设置环境变量
unset VAR             # 删除环境变量
echo $VAR             # 显示变量值

# 在脚本中设置环境变量
export PATH=$PATH:/opt/myapp/bin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk

# DevOps应用
export DOCKER_HOST=tcp://docker-server:2376
export KUBECONFIG=/etc/kubernetes/admin.conf

脚本调试和执行

bash 调试选项

bash 复制代码
bash -x script.sh     # 显示脚本执行过程
bash -n script.sh     # 检查语法不执行
bash -v script.sh     # 显示读取的脚本行

# 在脚本中设置调试
#!/bin/bash
set -x                # 开启调试模式
set -e                # 遇到错误立即退出
set -u                # 使用未定义变量时报错
set -o pipefail       # 管道中任何命令失败都返回非零状态

高级技巧和实战场景

管道和重定向

bash 复制代码
# 管道组合
ps aux | grep nginx | grep -v grep | awk '{print $2}'  # 获取nginx进程PID
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10  # 统计访问最多的IP

# 重定向
command > file        # 重定向输出到文件(覆盖)
command >> file       # 重定向输出到文件(追加)
command 2> file       # 重定向错误输出
command &> file       # 重定向所有输出
command < file        # 从文件读取输入

# 高级重定向
exec 3> logfile       # 创建文件描述符3
echo "log message" >&3  # 写入到文件描述符3
exec 3>&-             # 关闭文件描述符3

实战脚本示例

系统监控脚本

bash 复制代码
#!/bin/bash
# 系统资源监控脚本

LOG_FILE="/var/log/system_monitor.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

# CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)

# 内存使用率
MEM_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')

# 磁盘使用率
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)

# 写入日志
echo "$DATE CPU:${CPU_USAGE}% MEM:${MEM_USAGE}% DISK:${DISK_USAGE}%" >> $LOG_FILE

# 告警条件
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
    echo "$DATE HIGH CPU USAGE: ${CPU_USAGE}%" | mail -s "CPU Alert" admin@example.com
fi

if (( $(echo "$MEM_USAGE > 80" | bc -l) )); then
    echo "$DATE HIGH MEMORY USAGE: ${MEM_USAGE}%" | mail -s "Memory Alert" admin@example.com
fi

自动部署脚本

bash 复制代码
#!/bin/bash
# 自动部署脚本

APP_NAME="myapp"
DEPLOY_DIR="/opt/$APP_NAME"
BACKUP_DIR="/backup/$APP_NAME"
SERVICE_NAME="$APP_NAME"

# 创建备份
echo "Creating backup..."
sudo cp -r $DEPLOY_DIR $BACKUP_DIR/$(date +%Y%m%d_%H%M%S)

# 停止服务
echo "Stopping service..."
sudo systemctl stop $SERVICE_NAME

# 部署新版本
echo "Deploying new version..."
sudo tar -xzf $APP_NAME.tar.gz -C $DEPLOY_DIR --strip-components=1

# 设置权限
sudo chown -R $APP_NAME:$APP_NAME $DEPLOY_DIR
sudo chmod +x $DEPLOY_DIR/bin/*

# 启动服务
echo "Starting service..."
sudo systemctl start $SERVICE_NAME

# 检查服务状态
if sudo systemctl is-active --quiet $SERVICE_NAME; then
    echo "Deployment successful!"
else
    echo "Deployment failed! Rolling back..."
    sudo systemctl stop $SERVICE_NAME
    sudo rm -rf $DEPLOY_DIR/*
    sudo cp -r $BACKUP_DIR/latest/* $DEPLOY_DIR/
    sudo systemctl start $SERVICE_NAME
    exit 1
fi

日志分析脚本

bash 复制代码
#!/bin/bash
# 日志分析脚本

LOG_FILE="/var/log/nginx/access.log"
REPORT_FILE="/tmp/log_analysis_$(date +%Y%m%d).txt"

echo "Nginx Log Analysis Report - $(date)" > $REPORT_FILE
echo "======================================" >> $REPORT_FILE

# 统计总请求数
TOTAL_REQUESTS=$(wc -l < $LOG_FILE)
echo "Total Requests: $TOTAL_REQUESTS" >> $REPORT_FILE

# 统计独立IP数
UNIQUE_IPS=$(awk '{print $1}' $LOG_FILE | sort | uniq | wc -l)
echo "Unique IPs: $UNIQUE_IPS" >> $REPORT_FILE

# 前10个访问最多的IP
echo -e "\nTop 10 IPs:" >> $REPORT_FILE
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE

# 响应状态码统计
echo -e "\nStatus Codes:" >> $REPORT_FILE
awk '{print $9}' $LOG_FILE | sort | uniq -c | sort -nr >> $REPORT_FILE

# 最受欢迎的页面
echo -e "\nTop 10 Pages:" >> $REPORT_FILE
awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE

echo "Report generated: $REPORT_FILE"

一键运维脚本

bash 复制代码
#!/bin/bash
# 一键运维工具

function show_menu() {
    echo "================================"
    echo "       运维工具菜单"
    echo "================================"
    echo "1. 系统状态检查"
    echo "2. 服务状态检查"
    echo "3. 日志查看"
    echo "4. 磁盘清理"
    echo "5. 网络诊断"
    echo "6. 退出"
    echo "================================"
}

function check_system() {
    echo "=== 系统状态 ==="
    echo "系统负载:"
    uptime
    echo -e "\n内存使用:"
    free -h
    echo -e "\n磁盘使用:"
    df -h
    echo -e "\nCPU信息:"
    top -bn1 | head -5
}

function check_services() {
    echo "=== 服务状态 ==="
    services=("nginx" "mysql" "redis" "docker")
    for service in "${services[@]}"; do
        if systemctl is-active --quiet $service; then
            echo "$service: ✅ 运行中"
        else
            echo "$service: ❌ 未运行"
        fi
    done
}

function view_logs() {
    echo "=== 最新错误日志 ==="
    journalctl -p err --since "1 hour ago" --no-pager | tail -20
}

function disk_cleanup() {
    echo "=== 磁盘清理 ==="
    echo "清理临时文件..."
    sudo find /tmp -type f -mtime +7 -delete
    echo "清理日志文件..."
    sudo find /var/log -name "*.log" -mtime +30 -delete
    echo "清理完成"
}

function network_check() {
    echo "=== 网络诊断 ==="
    echo "网络接口:"
    ip addr show | grep -E "inet.*scope global"
    echo -e "\n连通性测试:"
    ping -c 3 8.8.8.8
    echo -e "\n端口监听:"
    ss -tulpn | grep LISTEN | head -10
}

# 主循环
while true; do
    show_menu
    read -p "请选择操作 [1-6]: " choice
    
    case $choice in
        1) check_system ;;
        2) check_services ;;
        3) view_logs ;;
        4) disk_cleanup ;;
        5) network_check ;;
        6) echo "退出"; exit 0 ;;
        *) echo "无效选择,请重新输入" ;;
    esac
    
    echo -e "\n按回车键继续..."
    read
done

总结

这份Linux命令指南涵盖了DevOps工程师日常工作中最常用的命令和技巧。掌握这些命令可以大大提高工作效率,帮助你更好地管理服务器、监控系统状态、处理日志文件、自动化运维任务等。

学习建议:

  1. 循序渐进:从基础命令开始,逐步掌握高级功能
  2. 多练习:在安全的环境中反复练习这些命令
  3. 组合使用:学会将多个命令组合使用,发挥更大威力
  4. 编写脚本:将常用操作编写成脚本,提高自动化水平
  5. 持续学习:Linux命令体系庞大,需要持续学习和实践

最佳实践:

  • 总是备份重要文件
  • 使用适当的权限设置
  • 编写可读性强的脚本
  • 添加适当的日志记录
  • 定期监控系统状态
  • 自动化重复性任务
相关推荐
数据智能老司机1 天前
DevOps 安全与自动化——理解 DevOps 文化与原则
架构·自动化运维·devops
数据智能老司机1 天前
DevOps 安全与自动化——开发环境搭建
架构·自动化运维·devops
卓豪终端管理2 天前
电脑远程关机的重要性
运维·网络·devops
极小狐2 天前
GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【一】
ci/cd·gitlab·devsecops·devops·极狐gitlab
极小狐2 天前
GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【三】
ci/cd·gitlab·devsecops·devops·极狐gitlab
johnny2333 天前
Jaeger理论、实战、问题记录
devops
Fireworkitte4 天前
DevOps 详解
运维·devops
极小狐5 天前
GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【二】
ci/cd·gitlab·devsecops·devops·极狐gitlab
srrsheng5 天前
电商项目DevOps一体化运维实战
运维·devops