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行

tail -5 access.log

 

2. 统计文件总行数

wc -l access.log

 

3. 找出包含"404"的行

grep "404" access.log

 

4. 找出所有GET请求

grep "GET" access.log

 

5. 统计有多少个不同的客户端IP

awk '{print $1}' access.log | sort | uniq | wc -l

 

6. 查看所有状态码分布

awk '{print $9}' access.log | sort | uniq -c

 

7. 找出所有返回500的错误

grep "500" access.log

 

8. 提取所有URL路径

awk '{print $7}' access.log

 

💡 逐个命令详解

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错误的IPURL
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
 
posted @ 2026-07-11 10:48  卷死了~  阅读(6)  评论(0)    收藏  举报