Hướng dẫn sử dụng lệnh find trong Linux ?

thuy linh
thuy linh
Trả lời 12 năm trước

Với giao diện dòng lệnh, Linux thực sự là một công cụ rất mạnh mẽ và linh hoạt. Các công cụ như grep, awk, find và locate sẽ giúp bạn dễ dàng hơn trong việc tìm kiếm các tập tin, tìm kiếm văn bản trong file hoặc thay thế một từ nào đó. Bài viết sau sẽ hướng dẫn các bạn cách sử dụng lệnh find để cải thiện quá trình tìm kiếm bằng dòng lệnh.

>>> 10 câu lệnh Linux hữu dụng nhất

Hướng dẫn sử dụng lệnh find trong Linux

Về hình thức, lệnh find được sử dụng một cách đơn giản như sau:

# find .
.helloworld.txt
.image01.jpg
.image02.jpg
.image03.jpg

Lệnh này sẽ cung cấp cho bạn một danh sách tất cả các tập tin và thư mục trong đường dẫn hiện hành. Lưu ý rằng truy vấn này sẽ hiển thị cả những tập tin trong cả thư mục con, vì vậy danh sách này sẽ rất dài nếu bạn có nhiều file trong đó. Để dừng sự hiển thị này bạn hãy ấn phím Ctrl + C.
Phương thức trên là cách đơn giản nhất để sử dụng lệnh find. Bằng cách kết hợp với một số các tham số và biểu thức thông thường khác, bạn có thể làm cho việc tìm kiếm tập tin được thông minh hơn. Ví dụ, nếu bạn muốn tìm kiếm tất cả tập tin có tên bắt đầu bằng “image”, hãy làm như sau:

# find . -name image*

Ở đây chúng ta sử dụng tham số -name trong lệnh find để tìm kiếm tất cả tập tin có tên bắt đầu bằng image. Lưu ý rằng trường hợp này kết quả sẽ phân biệt chữ hoa với chữ thường. Để có kết quả không phân biệt hoa – thường bạn có thể dùng lệnh “# find . -iname image*” .

Bạn cũng có thể sử dụng ký tự đại diện cho việc tìm kiếm các tập tin với phần mở rộng nhất định. Để tìm kiếm toàn bộ nội dung file trong thư mục hiện hành và cả thư mục con có phần mở rộng .php, bạn sử dụng lệnh sau:

# find . -name *.php

Bạn cũng có thể thực hiện việc tìm kiếm theo hướng ngược lại. Tức là tìm tất cả những tập tin không có phần mở rộng .php như sau:

# find . ! -name “*.php”

Lưu ý: dấu chấm than (!) được dùng để thực thi việc tìm kiếm theo chiều ngược lại, điều này có thể được dùng cho toàn bộ những tùy chọn khác.

Một trong những vấn đề thường gặp phải khi dùng lệnh find là theo mặc định nó sẽ tìm cả những thư mục con. Trong khi đó nhiều khi bạn chỉ cần tìm trong thư mục hiện hành. Để làm được điều này bạn cần sử dụng đến tùy chọn -maxdepth. Với tùy chọn này, lệnh find sẽ được “thông báo” rằng có nhiều cấp độ trong thư mục con nên nó cần “xem xét” khi tìm kiếm. Vì vậy nếu bạn chỉ muốn find tìm trong thư mục hiện hành, chỉ cần thêm chỉ số 0 vào sau -maxdepth:

# find . ! -name “*.php” -maxdepth 0

(Dòng lệnh trên sẽ tìm tất cả file trong thư mục hiện tại không có phần mở rộng là .php)

Nếu muốn tìm kiếm sâu hơn vào cả thư mục con, bạn chỉ cần tăng chỉ số cho -maxdepth lên thành 1,2... tùy theo các cấp của thư mục bạn có. Tương tự, bạn cũng có thể sử dụng lệnh -mindepth để thiết lập giới hạn thấp nhất cho cấp của thư mục được tìm kiếm. Bằng cách kết hợp hai tùy chọn -maxdepth và -mindepth một cách linh hoạt bạn sẽ có được nhiều kết quả theo nhiều nhu cầu của mình.

Tìm kiếm với các tiêu chí khác

Nếu như ở phần trên chúng ta đã biết cách sử dụng tùy chọn -name để tìm kiếm theo tên tập tin. Tương tự như vậy, trong trường hợp bạn muốn tìm những kết quả theo tên người dùng thì có thể thêm tùy chọn -user. Ví dụ bạn muốn hiển thị những tập tin có phần mở rộng .php của user có tên Quantrimang, hãy làm như sau:

# find . -name “*.php” -maxdepth 2 -user Quantrimang

Khắc phục lỗi thường gặp

Thông thường bạn có thể sử dụng lệnh find trong shell scripts. Bản thân lệnh này sẽ ném ra vài lỗi. Tuy nhiên, khi bạn chạy nó như một user bình thường các lỗi nếu gặp phải sẽ được bật lên dạng pop-up. Ví dụ, nếu bạn chạy lệnh tìm kiếm trong thư mục root nhưng không có quyền root sẽ gặp lỗi kiểu Permission denied. Điều này sẽ gây khó chịu khi sử dụng lệnh trong một kịch bản. Mặc dù bản thân lệnh find không thể tự khắc phục lỗi này nhưng chúng ta vẫn có thể giải quyết dễ dàng bằng cách chuyển hướng toàn bộ lỗi về /dev/null như sau:

# find / -name StewieGriffin*
/root: Permission denied
/home/peterg: Permission denied
/home/stewie/StewieGriffin-resume.doc

Sẽ được chuyển thành

# find / -name StewieGriffin* 2>/dev/null
/home/stewie/StewieGriffin-resume.doc

Bây giờ bạn có thể yên tâm sử dụng lệnh find trong các script của mình mà không cần lo lắng đến các lỗi ở đầu ra.

Sử dụng lệnh find cho người lười biếng

Nếu bạn là một người như vậy, hãy kết hợp các lệnh tiện ích để có được kết quả như ý muốn. Chẳng hạn như bạn muốn tìm kiếm tập tin có chứa từ “Quantrimang” bạn chỉ cần chạy lệnh # find . | grep Quantrimang. Lệnh này tương tự như # find . -name web. Tương tự, để kết quả trả về không phân biệt chữ hoa – chữ thường bạn chỉ cần làm như sau: # find . | grep -i web. Ngoài ra bạn cũng có thể kết hợp lệnh find với sed hoặc awk.

Cái hay của các dòng lệnh trong Linux hoặc UNIX ở chỗ chúng là những công cụ thực sự mạnh mẽ, bạn chỉ cần bỏ ra một chút thời gian nhỏ là đã có thể làm chủ được chúng. Chúc các bạn thành công!

Vo Phan Hien
Vo Phan Hien
Trả lời 12 năm trước

linus xài hơi khó với những người đã xài quen windown của microsoft nhưng tốt độ của linus nhanh hơn window nhiều dù gì máy tui ram 256 pen 3 xài còn ok mà