Macld DevOps,Linux Bài 4. Xử Lý File trong Bash-Đọc, Ghi và Quản Lý Hiệu Quả

Bài 4. Xử Lý File trong Bash-Đọc, Ghi và Quản Lý Hiệu Quả

Xử Lý File trong Bash – Đọc, Ghi và Quản Lý trong DevOps

Trong DevOps, việc làm việc với file là một phần không thể thiếu trong quá trình hàng ngày – từ log hệ thống, cấu hình (config) cho đến báo cáo pipeline. Việc nắm vững các kỹ thuật xử lý file trong Bash – bao gồm đọc, ghi và quản lý file – sẽ giúp bạn tự động hóa nhiều công việc lặp lại, tiết kiệm thời gian và công sức đáng kể. Trong bài viết thứ tư của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ chia sẻ với bạn những kỹ thuật cơ bản và thực tế trong việc làm việc với file, kèm theo các ví dụ cụ thể. Đây là những kinh nghiệm thực tế tôi áp dụng trong công việc quản lý server và pipeline, không chỉ đơn thuần là lý thuyết.

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 50 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 World" > 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:
    [2024-10-31 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 thêm quyền ghi file, kiểm tra $? giúp phát hiện ngay.

Kết Luận

Việc xử lý file trong Bash là một kỹ năng cơ bản nhưng rất mạnh mẽ, giúp bạn đọc và ghi file, cũng như quản lý file hiệu quả. Thực hành với các script như log_manager.shanalyze_log.sh cho thấy khả năng tự động hóa log và phân tích dữ liệu một cách dễ dàng. Trong bài viết tiếp theo, chúng ta sẽ cùng khám phá các công cụ xử lý văn bản, bao gồm cách sử dụng grep, awk, và sed để xử lý văn bản như một chuyên gia

Điều hướng chuỗi bài viết

<< Bài 3. Vòng Lặp trong Bash-Tự Động Hóa Lặp Lại Hiệu Quả
>> Bài 5. Text Processing trong Bash Grep, Awk, Sed Hiệu Quả

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *