Danh sách bài viết trong series Bashscript từ cơ bản đến áp dụng vào DevOps
- Bài 1. Cơ Bản Bash Script trong DevOps
- Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản
- Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
- Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
- Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
- Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
- Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
- Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch Hiệu Quả
- Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
- Bài 10. Error Handling Bash DevOps: Xử Lý Ngoại Lệ Hiệu Quả
- Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
- Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp Hiệu Quả
- Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
- Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
- Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống Hiệu Quả
- Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
- Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API Hiệu Quả
- Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
- Bài 19. Bash và Security trong DevOps: Bảo Mật Script Hiệu Quả
- Bài 20. Best Practice trong Bash DevOps: Làm Chủ Script Hiệu Quả
Xử Lý File trong Bash – Đọc, Ghi và Quản Lý trong DevOps
Trong DevOps, file là thứ bạn đụng đến hàng ngày – từ log hệ thống, config, đến báo cáo pipeline. Biết cách xử lý file trong Bash DevOps – như đọc file Bash, ghi file Bash, và quản lý file Bash – sẽ giúp bạn tự động hóa những công việc lặp lại, tiết kiệm thời gian và công sức. Trong bài thứ tư của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua các kỹ thuật cơ bản để làm việc với file, kèm thực hành thực tế. Đây là kinh nghiệm tôi dùng khi quản lý server và pipeline, không chỉ là lý thuyết đâu nhé!
Tại Sao Xử Lý File Quan Trọng?
File trong DevOps
- Log: Lưu trữ lỗi, truy cập để debug.
- Config: Quản lý cấu hình tool (VD:
.gitlab-ci.yml
). - Báo cáo: Tổng hợp trạng thái hệ thống từ script.
Ví dụ: Thay vì xem log thủ công, bạn viết script đọc và trích xuất lỗi – nhanh hơn cả chục lần.
Lợi Ích trong DevOps
- Tự động hóa: Ghi trạng thái hệ thống vào file để phân tích sau.
- Debug: Đọc log, tìm vấn đề mà không cần tool phức tạp.
- Pipeline: Lưu kết quả test để dùng ở stage sau.
Thực tế: Tôi từng dùng Bash để đọc log Nginx, phát hiện 500 lỗi trong 5 phút – không cần mở file bằng tay.
Cách Xử Lý File trong Bash
Ghi File Bash
-
Ghi mới hoặc ghi đè (
>
):echo "Hello DevOps" > output.txt
- Tạo file mới hoặc đè lên file cũ.
-
Thêm vào file (
>>
):echo "Dòng mới" >> output.txt
- Thêm vào cuối file, không xóa nội dung cũ.
-
Ghi từ lệnh:
df -h > disk_usage.txt
Đọc File Bash
-
Cat: Đọc toàn bộ file.
cat output.txt
-
While read: Đọc từng dòng.
while read LINE do echo "Dòng: $LINE" done < output.txt
-
Head/Tail: Đọc đầu/cuối.
head -n 2 output.txt # 2 dòng đầu tail -n 2 output.txt # 2 dòng cuối
Quản Lý File Bash
-
Kiểm tra file (bài 2):
if [ -f "output.txt" ]; then echo "File tồn tại" fi
-
Xóa file:
rm output.txt
-
Tạo thư mục:
mkdir logs
-
Di chuyển/đổi tên:
mv output.txt logs/output.txt
Tips: Luôn kiểm tra file tồn tại trước khi ghi/xóa để tránh lỗi.
Thực Hành: Script Quản Lý Log Hệ Thống
Script Tự Động Ghi và Đọc Log
Tạo log_manager.sh
:
#!/bin/bash
# Biến
LOG_FILE="system_log.txt"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# Ghi thông tin hệ thống vào log
echo "[$TIMESTAMP] Kiểm tra hệ thống" > $LOG_FILE
echo "Hostname: $(hostname)" >> $LOG_FILE
echo "Disk usage: $(df -h / | tail -1 | awk '{print $5}')" >> $LOG_FILE
echo "CPU usage: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}')%" >> $LOG_FILE
# Kiểm tra và cảnh báo
DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ $DISK -gt 80 ]; then
echo "[$TIMESTAMP] Cảnh báo: Disk vượt $DISK% (ngưỡng 80%)" >> $LOG_FILE
fi
# Đọc và in log
echo "Nội dung log:"
cat $LOG_FILE
Chạy và Test
chmod +x log_manager.sh
./log_manager.sh
-
Kết quả mẫu:
Nội dung log: [2025-03-13 10:00:00] Kiểm tra hệ thống Hostname: my-server Disk usage: 42% CPU usage: 15.3%
-
Nếu disk > 80%, thêm dòng cảnh báo.
Giải thích:
> $LOG_FILE
: Ghi đè log mới.>> $LOG_FILE
: Thêm dòng tiếp theo.cat $LOG_FILE
: Đọc toàn bộ file.
DevOps: Script này có thể chạy định kỳ để lưu trạng thái hệ thống.
Script Đọc và Phân Tích Log
Tạo analyze_log.sh
:
#!/bin/bash
LOG_FILE="system_log.txt"
if [ -f "$LOG_FILE" ]; then
echo "Phân tích $LOG_FILE..."
while read LINE
do
if echo "$LINE" | grep -q "Cảnh báo"; then
echo "Tìm thấy lỗi: $LINE"
fi
done < "$LOG_FILE"
else
echo "Không tìm thấy $LOG_FILE"
fi
chmod +x analyze_log.sh
./analyze_log.sh
- Kết quả: In dòng có “Cảnh báo” nếu disk vượt ngưỡng.
Thực tế: Tôi từng dùng cách này để lọc lỗi 500 từ log Nginx – nhanh hơn mở file bằng tay cả chục lần.
Ứng Dụng trong DevOps
Tự Động Hóa Log
- Lưu log từ pipeline:
docker ps > container_list.txt
Pipeline CI/CD
- Ghi kết quả test:
test: script: - pytest > test_result.txt - cat test_result.txt
Case study: Một team dùng Bash ghi log CPU mỗi giờ, phát hiện server bất thường trước khi crash – chỉ với 10 dòng script.
Debug Xử Lý File
- Kiểm tra ghi lỗi:
if [ $? -eq 0 ]; then echo "Ghi file thành công" else echo "Lỗi khi ghi file" fi
Thực tế: Tôi từng quên quyền ghi file, kiểm tra $?
giúp phát hiện ngay.
Kết Luận
Xử lý file trong Bash DevOps là kỹ năng cơ bản nhưng mạnh mẽ để đọc file Bash, ghi file Bash, và quản lý file Bash. Thực hành với log_manager.sh
và analyze_log.sh
cho thấy bạn có thể tự động hóa log và phân tích dữ liệu dễ dàng. Bài tiếp theo, chúng ta sẽ khám phá Công Cụ Text Processing – cách dùng grep, awk, sed để xử lý text như pro.