Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý 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

  1. Ghi mới hoặc ghi đè (>):

    echo "Hello DevOps" > output.txt
    • Tạo file mới hoặc đè lên file cũ.
  2. 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ũ.
  3. Ghi từ lệnh:

    df -h > disk_usage.txt

Đọc File Bash

  1. Cat: Đọc toàn bộ file.

    cat output.txt
  2. While read: Đọc từng dòng.

    while read LINE
    do
       echo "Dòng: $LINE"
    done < output.txt
  3. 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

  1. Kiểm tra file (bài 2):

    if [ -f "output.txt" ]; then
       echo "File tồn tại"
    fi
  2. Xóa file:

    rm output.txt
  3. Tạo thư mục:

    mkdir logs
  4. 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.shanalyze_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.

Điều hướng chuỗi bài viết<< Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
>> Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận