Hướng dẫn tìm text trong linux

Bài viết này nhằm giúp quý khách có một cái nhìn tổng quát về lệnh find - một lệnh tìm kiếm khá hay và thường được sử dụng trên Linux giúp quý khách cải thiện quá trình tìm kiếm file, thư mục với các tuỳ biến. Sau đây là 20 ví dụ đơn giản thường được sử dụng.

Phần 1. Tìm kiếm cơ bản

1. Tìm kiếm file theo tên file đầy đủ

# find . vinahost.txt

Kết quả:

./vinahost.txt

Lệnh trên sẽ tìm file có tên là vinahost.txt ( dấu . đại diện cho thư mục hiện hành).

2. Tìm kiếm file theo tên không đầy đủ.

 # find /  -name vinahost*

Kết quả: 

/home/vinahost1.php

/var/vinahostabc.rar

Lệnh trên sẽ tìm trên toàn bộ hệ thống file có tên bắt đầu bằng "vinahost"

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

# find /home -name  *.php

Kết quả:

/home/vinahost.php

/home/admin/login.php

Lệnh trên sẽ tìm trong thư mục /home những file có tên bất kỳ, miễn nó có phần mở rộng là .php

4. Tìm kiếm file ẩn

# find / -type f -name ".*"

5. Tìm kiếm file có ownervinahost

find /home -user vinahostLệnh trên sẽ tìm kiếm tất cả những file trong thư mục home có owner là vinahost

6. Tìm kiếm file có groupvinahost

# find /home -group vinahost

Lệnh trên sẽ tìm kiếm tất cả những file trong thư mục home có group là vinahost

7. Tìm kiếm file được phân quyền 777

# find . -type f -perm 777

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

# find / -perm /u=r

8. Tìm kiếm file rỗng

# find /tmp -type f -empty9. Tìm kiếm file được chỉnh sửa trong vòng 50 ngày

# find / -mtime 50

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

# find / -mtime +50 –mtime -10011. Tìm kiếm file vừa được tạo ra trong vòng 1 giờ

# find / -cmin -60

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

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

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


14. Tìm thư mục có tên vinahost

# find / -type d -name vinahost

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

# find /opt /usr /var -name vinahost.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 vinahost.txt

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

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

# find / -size +100M -exec rm -rf {} \;17. Tìm và chmod 644 file có phần mở rộng là .html

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

18. 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 \;

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

# find /home -type f -exec grep -l 'vinahost' {} \;

20. 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.

Hi vọng 20 ví dụ trên có thể giúp ích được cho quý khách. Chúc quý khách thành công.

Hướng dẫn tìm text trong linux

Trong bài trước tôi đã giới thiệu về lệnh find trong linux, nó rất hữu ích trong việc tìm kiếm file. Tiếp tục tìm hiểu về Linux, tôi sẽ trình bày về lệnh grep - nó gíup bạn tìm chuỗi trong file chỉ định.

1. Tìm một chuỗi trong một file

Đây là cách sử dụng cơ bản và hay gặp nhất, nếu đơn gỉan bạn muốn tìm một chuỗi nào đó trong chỉ một file duy nhất thì có thể dùng theo cú pháp sau :

$ grep "chuoi" ten_file

Kết qủa sẽ hiển thị ngay trên màn hình command line theo dòng nào có chứa chuỗi sẽ hiển thị cả dòng trong file đó ra và chuỗi đó sẽ được highlight.

2. Tìm chuỗi trong nhiều file cùng lúc

Để làm được việc này thì bạn cần chỉ định pattern chung của các file muốn thực hiện tìm kiếm :

$ grep "chuoi" file_pattern

Ví dụ, tôi tìm chuỗi Error trong tất cả các file log mà chúng được ghi theo từng ngày với for mat report_ddmmyyyy.log :

$ grep "chuoi" report_*.log

Khi này kết qủa tìm kiếm sẽ hiển thị ra thêm cả tên file mà có chứa chuỗi Error dạng :

report_01082016.log: <nội dung match ở đây>
report_01082016.log: <nội dung match ở đây>
...
report_28082016.log: <nội dung match ở đây>
report_28082016.log: <nội dung match ở đây>
report_29082016.log: <nội dung match ở đây>

3. Tìm kiếm không phân biệt hoa thường

Bình thường nếu bạn đã chắc chắn chuỗi mình định tìm kiếm như nào và chỉ muốn có kết qủa match 100% chuỗi đó thì ko cần sử dụng thêm lựa chọn -i, khi khai báo thêm nó grep sẽ thực hiện tìm kiếm gần đúng theo kiểu không phân biệt ký tự hoa thường :

$ grep -i "chuoi" ten_file

Như ví dụ trên thì dù là Error, error hay ERROR ... đi chăng nữa thì bạn cũng sẽ nhận được kết qủa.

4. Tìm kiếm theo regular expression

Như bao ngôn ngữ lập trình, việc tìm kiếm theo regular expression luôn được hỗ trợ thì lệnh grep cũng vậy, bạn hoàn toàn có thể chỉ định biểu thức chính quy để tìm kiếm chuỗi match với nó.

$ grep "regex_here" ten_file

Trong grep thì nó cũng giống các ngôn ngữ khác, ví dụ [A-z] tức là match với chỉ kí tự alpha từ A lớn đến z nhỏ, hay dùng [^text] là ko chứa chuỗi text...

5. Tìm chính xác với grep -w

Nếu bạn tìm kiếm theo những lệnh trên thì kết qủa trả về sẽ chưa hẳn theo đúng mong muốn của bạn. Kết qủa thường sẽ thừa so với yêu cầu bởi vì grep sẽ tìm theo cả chuỗi con, ví dụ tìm no thì not, nothing cũng có chứa chuỗi no nên cũng sẽ trả về kết qủa. Do đó, nếu bạn muốn tìm chính xác từ mong muốn thì có thể dùng lựa chọn -w.

$ grep -i "is" demo_file

6. Hiển thị thêm dòng trước, sau, xung quanh dòng chứa kết qủa

Có những trường hợp bạn phải thao tác với file rất lớn, nên có thể lựa chọn tìm kiếm mà có hiển thị ra các dòng trước, sau hoặc xung quanh dòng kết qủa sẽ có thể hữu ích.

$ grep -<A, B hoặc C> <n> "chuoi" demo_file
-- A : là after
-- B : là before
-- C : là xung quanh
-- n : là số tự nhiên chỉ định xem hiển thị trước, sau hay xung quang bao nhiêu dòng

Ví dụ

$ grep -B 3 -iw "chuoi" demo_file
-- Tức là hiển thị trước kết qủa thêm nội dung của 3 dòng nữa. Không phân biệt hoa thường và tìm chính xác

7. Tìm tất cả các file ở tất cả các thư mục con

Đôi khi bạn không biết file ở đâu trong thư mục rất nhiều file, không nhớ tên file là gì hoặc đơn gỉan là muốn tìm kiếm với từ khóa xem nó có trong nhưng file nào trong thư mục hiện hành. Lúc đó, lựa chọn -r sẽ hữu ích. Nếu khai báo lựa chọn này thì nó sẽ tìm đến tận cùng các thư mục con, tất cả các file có trog chúng.

$ grep -r "chuoi" *

Đương nhiên bạn vẫn có thể tìm file pattern

$ grep -r "chuoi" file_name_*

8. Tìm kiếm ngược

Với những lựa chọn trên bạn có thể tìm kiếm từ khóa theo những hoàn cảnh của riêng mình, nhưng nếu bạn muốn ngược lại tức là chỉ tìm những dòng không chứa từ khóa đó thì hãy dùng -v.

$ grep -v "chuoi" file_*

9. Đếm số kết qủa

grep hoàn toàn có thể hỗ trợ bạn đếm xem trong file chỉ định có bao nhiêu kết qủa trả về bằng cách dùng -c. Ví dụ như đếm xem có bao nhiêu bản ghi được insert trong file log.

 grep -c -w "INSERT" log_*

10. Chỉ hiển thị tên file

Đơn gỉan là vậy, sẽ có case bạn chỉ quan tâm xem từ khóa bạn đang tìm xuất hiện trong những file nào thôi. Lúc đó hãy dùng lựa chọn -l

$ grep -l -r -w "Error" *

11. Hiển thị số thứ tự của dòng kết qủa

Trong một file rất lớn thì nhu cầu biết được xem kết qủa ở dòng nào thì tôi nghĩ luôn là cần thiết. grep hoàn toàn làm được điều này với lựa chọn -n.

$ grep -n -w "Error" file_name

12. Ứng dụng

Trong thực tế tôi hay gặp nhất có lẽ là lệnh kép kiểm tra xem một chương trình nào đó có đang chạy hay không, bằng cách kết hợp ps và grep. Ví dụ, với project Java thì đôi khi service tomcat đôi khi vì lý do nào đó mà nó bị chết nhưng tiến trình thì vẫn còn nên cần vào kill tiến trình đó đi rồi start lại. Tôi hay dùng lệnh sau để biết được id tiến trình của tomcat

Hướng dẫn tìm text trong linux

$ ps ux | grep tomcat

Hy vọng với những kiến thức cơ bản về lệnh grep trên thì các bạn có thể ứng dụng được trong thực tế sử dụng hệ điều hành Linux.

Thanks.