Header Ads Widget

Tìm kiếm theo điều kiện trong Linux

Lệnh find là một trong những lệnh quan trọng và tiện dụng nhất trên hệ thống Linux. 

Có thể tìm các file trên PC Linux dựa trên khá nhiều điều kiện và biến số bạn đặt. Bạn có thể tìm file theo quyền, người dùng, nhóm, loại file, ngày tháng, dung lượng và các tiêu chí có thể có khác bằng cách sử dụng lệnh find.

Phân loại

Tìm kiếm theo loại ký tự đại diện cho từng type
  • f : file
  • d: thư mục
  • l : link
  • c : các thiết bị phần cứng

Vd: muốn tìm trên hệ thống có bao nhiêu thiết bị phần cứng kết nối
find / -type c
Vd: muốn tìm kiếm trong thư mục /home có bao nhiêu file
find /home -type f
Vd: muốn tìm kiếm trong thư mục /home có bao nhiêu thư mục
find /home -type d

Dung lượng

Tìm kiếm theo dung lượng (size) ký tự đại diện cho từng size

  • c: byte
  • k : Kilobytes
  • M : Megabytes
  • G: Gigabytes
  • b: 512-byte blocks

Vd: Tìm toàn bộ file có dung lượng đúng 100 byte trong thư mục home

find /home -size 100c

 

Vd: Tìm toàn bộ file có dung lương nhỏ hơn 100 byte trong thư mục home

find /home -size -100c

 

Vd: tìm một file trong thư mục /home có dung lượng lớn hơn 500M

find /home -size +500M

Thời gian

Trong phần tìm kiếm theo thời gian thì có 3 khái niệm sau :

  • -atime : : Access Time : thời gian truy cập cuối cùng vào file
  • -mtime: : Modification Time : thời gian chĩnh sửa cuối cùng của file
  • -ctime : : Change Time : thời gian thay đổi file trên các inode

Vd: tìm kiếm những file đã được thay đổi (modification) cách đây 1 ngày

find / -mtime 1

 

Vd : tìm kiếm những file đã được truy cập cách đây 5 ngày

find / -atime 5

 

 Chủ sở hữu

Đối với chủ sở hữu thì option có 2 lựa chọn:
  • user : -user
  • group: -group
Vd: Tìm các file có chủ sở hữu là lienvu trong thư mục home

find /home -user "lienvu"


Vd : Tìm các file được sở hữu bởi group lienvu_group

find /home -group "lienvu_group"

 

Thực thi các file được tìm kiếm

Một option việc tìm kiếm và xử lý kết quả

{} : tượng trưng cho những phần tử được tìm kiếm trùng khớp
\; : để cho biết command trên kết thúc

Vd: Tìm kiếm tất cả các file có perm là 664 thay thành 611 trong thư mục home

find /home -type f -perm 664 -exec chmod 611 {} \;
Vd: Tìm kiếm tất cả các thư mục có perm 777 thay đổi thành 755 trong thư mục home
find /home -type d -perm 777 -exec chmod 755 {} \;


Ví dụ thực tế

Tìm kiếm file theo tên file đầy đủ
find . lienvu.com.txt
Lệnh trên sẽ tìm file có tên là lienvu.com.txt ( dấu . đại diện cho thư mục hiện hành).


Tìm kiếm file theo tên không đầy đủ
find / -name lienvu*

 

Tìm kiếm file với phần mở rộng

find /home -name *.php

 

Tìm kiếm file ẩn
find / -type f -name ".*"

 

Tìm kiếm file có owner là lienvu
find /home -user lienvu

 

Tìm kiếm file có group là lienvu
find /home -group lienvu

 

Tìm kiếm file được phân quyền 777
find . -type f -perm 777

 

 Tìm file chỉ có quyền read

find / -perm /u=r

 

Tìm kiếm file rỗng

find /tmp -type f -empty

 

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

 

Tìm kiếm file được chỉnh sửa trong vòng 50 - 100 ngày

find / -mtime +50 –mtime -100

 

Quy tắc:

Dấu "+X" thể hiện lớn hơn X ngày

VD: Tìm các file được tạo trước 5 ngày

find /data/ -type f -mtime +5

Dấu "-X" thể hiện trong khoảng từ X ngày đến ngày hiện tại

VD: Tìm các file được tạo từ 5 ngày trước đến ngày hiện tại

find /data/ -type f -mtime -5

Không dấu thể hiện tìm đúng ngày:

VD: Tìm các file được tạo 5 ngày trước tính từ ngày hiện tại

 find /data/ -type f -mtime 5

Tìm kiếm file vừa được tạo ra trong vòng 1 giờ

find / -cmin -60

 

 Tìm kiếm file có dung lượng 50M

find / -size 50M

 

Tìm kiếm file có dung lượng lớn hơn 50M nhỏ hơn 100M

find / -size +50M -size -100M

 

Tìm thư mục có tên lienvu.com

find / -type d -name chiaseaz

 

Tìm kiếm trên nhiều thư mục

find /opt /usr /var -name lienvu.com.txt -type f

 

Tìm và xoá file có dung lượng trên 100M

find / -size +100M -exec rm -rf {} \;

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

find /usr/local -name "*.html" -type f -exec chmod 644 {} \;

 

Tìm file có phần mở rộng là .mp3 và copy file đó đến thư mục /data/music

find . -type f -name "*.mp3" -exec cp {} /data/music\;

Tìm file có chứa nội dụng lienvu.com

find /home -type f -exec grep -l 'lienvu.com' {} \;

 

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.

Tìm file theo định dạng đuôi mở rộng

find . -type f  -name '*.php' -printf '%TY-%Tm-%Td %TT %p\n' | sort

Nhận xét