bi-kip-linux-1

Trong vai trò một System Admin, có rất nhiều trường hợp bạn cần kỹ năng tìm kiếm file hoặc 1 chuỗi nào đó trong rất nhiều file.

VD: Bạn cần kiểm tra và dọn dẹp các file log (có đuôi .log, .trc), khi một phân vùng trên hệ thống đã gần đầy 100%.


   Tìm kiếm file theo tên

   Đặt vấn đề

Bạn muốn tìm kiếm một file trong hệ thống, bạn chỉ biết tên của file đó. Ví dụ: bạn muốn tìm kiếm file log của Oracle database, bạn biết file log sẽ được đặt tên theo cú pháp alert<ORACLE_SID>.log.

   Giải pháp

Tìm kiếm các file mà tên file chứa từ alert và kết thúc file là từ log. Tại ví dụ này tôi tìm kiếm trong toàn bộ các phân vùng (tìm trong thư mục /).

$ cd /
$ find . -name "alert*.log"

Kết quả trả ra bao gồm đường dẫn chi tiết đến file:

/u01/app/oracle/diag/rdbms/lab/lab/trace/alert_lab.log


Trong thực tế nếu bạn sử dụng user không có quyền truy cập vào một số directory khi tìm kiếm, bạn sẽ thấy rất nhiều cảnh báo warning hiển thị ra màn hình, ví dụ như:

find: `./var/cache/ldconfig': Permission denied
find: `./var/cache/hald': Permission denied
find: `./var/cache/rpcbind': Permission denied
find: `./var/log/sssd': Permission denied
find: `./var/log/gdm': Permission denied


Để loại bỏ các warning đó, bạn có thể sử dụng lệnh sau:

$ find . -name "alert*.log" 2>/dev/null

   Tìm kiếm 1 chuỗi ký tự trong nội dung nhiều file

   Đặt vấn đề

Trong quá trình quản trị, sẽ có rất nhiều công việc bạn cần đến kỹ năng này.

Giả sử bạn có một tập các file sql để thực hiện cập nhật Cơ sở dữ liệu, bạn muốn tìm xem file nào chứa câu lệnh “insert”. Hoặc bạn muốn tìm xem những file log nào có chứa cụm từ cảnh báo lỗi “ERROR”. Trong hệ thống có rất nhiều file log, nếu chúng ta tìm thủ công từng file thì sẽ mất rất nhiều thời gian.

   Giải pháp

Thực hiện tìm kiếm sử dụng xargs kết hợp find

$ find /home/oracle/scripts/ -name "*.sql" | xargs grep -i "insert"


Kết quả trả ra bao gồm tên file và phần nội dung chứa chuỗi ký tự đang tìm kiếm:

/home/oracle/scripts/upcode1.sql:insert into test select * from hr.employees;

Giải thích câu lệnh

  • /home/oracle/scripts/ : đường dẫn chúng ta tìm kiếm
  •  -name “*.sql” : Tìm tất cả các file có đuôi là .sql
  •  xargs grep -i “insert” : nội dung trong các file có chứa chuỗi “insert”

Chúng ta cũng có thể sử dụng phương án sau:

$ find /home/oracle/scripts/ -name "*.sql" -exec grep -i "insert" '{}' \; -print

Kết quả trả ra như sau:

insert into test select * from hr.employees; → đây là nội dung trong file chứa chuỗi ký tự đang tìm kiếm
/home/oracle/scripts/upcode1.sql → đây là tên file chứa nội dung trên

Giải thích câu lệnh:

  • find /home/oracle/scripts/ -name “*.sql”: Tìm các file có tên file cuối cùng là “.sql” trong thư mục /home/oracle/scripts/
  • Kết quả của câu lệnh trên sẽ được đưa vào lệnh -exec ‘{}’, tại đây mỗi file sẽ được thực thi câu lệnh grep -i “insert”
  • Ký tự \; để kết thúc của lệnh -exec
  • -print để hiển thị tên các file tìm được

Tại một số trường hợp bạn chỉ muốn hiển thị tên của file (không cần hiển thị nội dung) , bạn làm như sau:

$ find /home/oracle/scripts/ -name "*.sql" -exec grep -qi "insert" '{}' \; -print

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    Đọc thêm  Bí kíp Linux #8: Tìm nguyên nhân hệ điều hành bị chậm bằng vmstat
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments