Sử dụng câu lệnh find để tìm kiếm thư mục và tập tin

  • Sunday 04/09/2011

Một trong những câu lệnh mà các Sysadmin thường xuyên phải đối mặt trong công việc hằng ngày đó là tìm kiếm các tập tin hay thư mục trên server. Việc sử dụng thành thạo câu lệnh find trong Linux là một vũ khí lợi hại giúp bạn quản lý hiệu quả các máy chủ. Dưới đây là những câu lệnh sử dụngfindkhông thể thiếu đối với các Sysadmin:

Tìm Theo Tên

Để tìm một thư mục hay tập tin theo tên sử dụng câu lệnh find với option name:

$ find -name "query"

Câu lệnh ở trên sẽ tìm kiếm tất cả các tập tin và thư mục với tên là query. Câu lệnh này phân biệt giữa in hoa và in thường nên các file có tên là Query sẽ không được trả về trong kết quả tìm kiếm.

Để tìm với tên nhưng không phân biệt in hoa in thường, chúng ta sử dụng option iname:

$ find -iname "query"

Tìm Theo Loại

Để chỉ tìm hoặc là tập tin hoặc là thư mục, chúng ta sử dụng option type, ví dụ dưới sẽ chỉ tìm các tập tin:

$ find -type f

Để chỉ tìm các thư mục thay thế f bởi d trong câu lệnh ở trên.

$ find -type d

Tìm Theo Thời Gian

Có 3 loại thời gian chúng ta có thể dùng để tìm ra một file:

  • Access time: Thời gian mà file được đọc hay viết
  • Modification time: Thời gian mà file được cập nhật
  • Change time: Thời gian mà thông tin meta-data của file thay đổi (như người dùng nào làm chủ file đó, loại file, file permission..)

Có 3 option được sử dụng để tìm file tương ứng với 3 loại thời gian trên đó là: atimemtime và ctime.

Ví dụ sau sẽ tìm các file được cập nhât cách đây một ngày:

$ find / -mtime 1

Để tìm các file được cập nhật từ một ngày trở lại thay giá trị 1 ở trên bằng -1

$ find / -mtime -1

Ngược lại, để tìm các file được cập nhật từ hơn một ngày thay giá trị này bằng +1

$ find / -mtime +1

Một số vd thông dụng liên quan tới lệnh find
Phần A, Tìm kiếm cơ bản 
1. Tìm kiếm file được chỉnh sửa trong vòng 50 ngày 
# find / -mtime 50

2. Tìm kiếm file được chỉnh sửa trong vòng 50 - 100 ngày
# find / -mtime +50 –mtime -100

3. Tìm kiếm file vừa được tạo ra trong vòng 1 giờ
# find / -cmin -60

4. Tìm kiếm file có dung lượng 50M
# find / -size 50M

5. Tìm kiếm file có dung lượng lớn hơn 50M nhỏ hơn 100M
# find / -size +50M -size -100M


6. Tìm thư mục có tên superdata
# find / -type d -name superdata

7. Tìm kiếm trên nhiều thư mục
# find /opt /usr /var -name superdata.txt -type f

Lệnh trên sẽ tìm kiếm trên các thư mục /opt /usr  /var  tập tin superdata.txt

Phần B. Tìm kiếm nâng cao, kết hợp với lệnh khác (rm, exec, cp, grep,..)

8. Tìm và xoá file có dung lượng trên 100M
# find / -size +100M -exec rm -rf {} ;

9. Tìm và chmod 644 file có phần mở rộng là .html

# find /usr/local -name "*.html" -type f -exec chmod 644 {} ; 
 
10. Tìm file có phần mở rộng là .mp3 và copy file đó đến thư mục /tmp/MusicFiles

# find . -type f -name "*.mp3" -exec cp {} /tmp/MusicFiles ;

11. Tìm file có chứa nội dụng superdata
# find /home -type f -exec grep -l 'superdata' {} ;

12. Tìm file theo tên hoặc phần mở rộng hoặc kích thước (-o = OR)
# find / ( -name '*.txt' -o -name 'doc*' -o -size +5M )

Lệnh trên sẽ tìm những file có phần mở rộng là .txt hoặc những file có tên bắt đầu bằng doc hoặc những file có kích thước lớn hơn 5M.