1_devops_linux基础
第一步:准备练习环境
bash
# 1. 创建练习目录
mkdir -p ~/devops-lab/day1
cd ~/devops-lab/day1
# 2. 创建一个模拟的Nginx访问日志文件(直接复制执行)
cat > access.log << 'EOF'
192.168.1.100 - - [10/Jul/2026:08:15:32 +0800] "GET /index.html HTTP/1.1" 200 2048 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0"
192.168.1.101 - - [10/Jul/2026:08:16:45 +0800] "POST /api/login HTTP/1.1" 401 512 "-" "curl/7.68.0"
192.168.1.102 - - [10/Jul/2026:08:17:20 +0800] "GET /products/list HTTP/1.1" 200 4096 "https://example.com/index.html" "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)"
192.168.1.100 - - [10/Jul/2026:08:18:03 +0800] "GET /images/logo.png HTTP/1.1" 404 0 "https://example.com/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0"
192.168.1.103 - - [10/Jul/2026:08:19:12 +0800] "GET /api/users HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
192.168.1.101 - - [10/Jul/2026:08:20:55 +0800] "POST /api/order HTTP/1.1" 500 256 "-" "curl/7.68.0"
192.168.1.104 - - [10/Jul/2026:08:22:30 +0800] "GET /about.html HTTP/1.1" 200 1536 "https://example.com/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Edge/114.0.1823.67"
192.168.1.100 - - [10/Jul/2026:08:24:10 +0800] "GET /css/style.css HTTP/1.1" 200 3072 "https://example.com/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0"
192.168.1.102 - - [10/Jul/2026:08:26:45 +0800] "GET /api/users HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (Linux; Android 11; SM-G991B)"
192.168.1.105 - - [10/Jul/2026:08:28:20 +0800] "GET /index.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0"
EOF
# 3. 查看文件内容
cat access.log # 查看全部
head -5 access.log # 查看前5行
tail -3 access.log # 查看后3行
wc -l access.log # 统计行数
<hr size=1 width="100%" align=center>
📝 训练任务清单(第1天)
|
任务 |
命令示例 |
你的输出 |
|
1. 查看文件最后5行 |
|
|
|
2. 统计文件总行数 |
|
|
|
3. 找出包含"404"的行 |
|
|
|
4. 找出所有GET请求 |
|
|
|
5. 统计有多少个不同的客户端IP |
|
|
|
6. 查看所有状态码分布 |
|
|
|
7. 找出所有返回500的错误 |
|
|
|
8. 提取所有URL路径 |
|
💡 逐个命令详解
1. ls - 列出目录内容
bash
ls -la # 详细列出所有文件(包括隐藏文件)
ls -lh # 人类可读的文件大小格式
ls -lt # 按修改时间排序
2. cd + pwd - 切换目录 / 查看当前路径
bash
cd /var/log # 切换到日志目录
cd ~ # 回到用户主目录
cd - # 回到上一个目录
pwd # 显示当前所在路径
3. cp / mv / rm - 复制/移动/删除
bash
cp access.log access_backup.log # 复制文件
mv access_backup.log /tmp/ # 移动文件
rm -f access_backup.log # 强制删除文件
cp -r /etc/nginx /tmp/nginx_bak # 递归复制目录
4. grep - 文本搜索(超级重要!)
bash
# 基本用法
grep "error" /var/log/syslog # 在文件中搜索error
# 常用选项
grep -i "error" log.txt # 忽略大小写
grep -v "INFO" log.txt # 排除包含INFO的行
grep -r "TODO" ./src/ # 递归搜索目录下所有文件
grep -E "error|warning" log.txt # 正则匹配(扩展)
# 实战:统计错误数量
grep -c "500" access.log # 统计500错误出现次数
5. awk - 文本处理神器(重点掌握)
bash
# 格式:awk '{print $N}' # N代表第几列
# 示例
awk '{print $1}' access.log # 打印第一列(IP地址)
awk '{print $9}' access.log # 打印第九列(状态码)
awk '{print $1, $9}' access.log # 打印IP和状态码
# 条件过滤
awk '$9 == 500 {print $1, $7}' access.log # 打印500错误的IP和URL
awk '$9 >= 400 {print}' access.log # 打印所有4xx/5xx错误
# 统计求和
awk '{sum += $10} END {print sum}' access.log # 第10列是响应大小
6. sort / uniq - 排序和去重
bash
# 排序
sort access.log # 按字母排序
sort -n access.log # 按数字排序
sort -k 9 -n access.log # 按第9列数字排序(状态码)
# 去重(必须先sort)
sort access.log | uniq # 去重
sort access.log | uniq -c # 去重并统计次数
sort access.log | uniq -d # 只显示重复行
# 实战:查看访问量最多的IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -5
7. find - 查找文件
bash
# 基本用法
find /var/log -name "*.log" # 按名称查找
find /var/log -type f -size +100M # 查找大于100M的文件
find . -mtime -7 # 查找7天内修改过的文件
find . -mtime +30 -exec rm {} \; # 删除30天前的文件
# 实战:查找并清理大日志文件
find /var/log -name "*.log" -size +1G -exec ls -lh {} \;
8. sed - 流编辑器(文本替换)
bash
# 替换内容
sed 's/192.168.1/10.0.0/g' access.log # 替换IP网段(仅输出,不修改)
sed -i 's/192.168.1/10.0.0/g' access.log # 直接修改文件
# 删除行
sed '/404/d' access.log # 删除包含404的行
sed '1,5d' access.log # 删除第1-5行
# 实战:格式化输出
sed 's/^/>>> /' access.log # 每行加前缀
创建一个脚本 analyze_log.sh,完成以下功能:
bash
#!/bin/bash
# 日志分析脚本
LOG_FILE="access.log"
echo "========== 日志分析报告 =========="
echo ""
echo "1. 总访问量:"
wc -l $LOG_FILE
echo ""
echo "2. 状态码分布:"
awk '{print $9}' $LOG_FILE | sort | uniq -c | sort -rn
echo ""
echo "3. 访问量TOP5的IP:"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -rn | head -5
echo ""
echo "4. 错误请求(4xx/5xx):"
grep -E " [45][0-9][0-9] " $LOG_FILE | wc -l
echo ""
echo "5. 最常访问的URL TOP5:"
awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -rn | head -5
运行方式:
bash
chmod +x analyze_log.sh
./analyze_log.sh

浙公网安备 33010602011771号