1. Các thao tác cơ bản với tệp
1.7. Duyệt tìm tệp
Nếu dùng lệnh ls tìm vẫn không ra một tệp, chúng ta thử dùng lệnh find. find
là công cụ cực kỳ mạnh và cũng chính vì thế mà find lại trở thành một trong những lệnh khó dùng nhất. find có ba phần, mỗi phần lại có thể gồm nhiều phần nhỏ:
-Tìm ở đâu -Tìm cái gì
-Tìm được rồi thì thực hiện thao tác nào.
Nếu biết tên tệp nhưng không biết vị trí tệp ấy, chúng ta gõ lệnh như sau:
find /-name tên_tệp -print
Ghi chú: Hãy cẩn thận khi duyệt tìm từ thư mục gốc. Trên những hệ thống
lớn, nếu tìm từ thư mục gốc, máy sẽ lục lọi mọi thư mục bên dưới rồi đến phiên các thư mục cấp dưới nữa, chưa kể những ổ đĩa khác tại chỗ và ổ đĩa từ xa, do đó sẽ tốn rất nhiều thì giờ.
Do đó có lẽ chúng ta nên giới hạn việc duyệt tìm ở một hai thư mục thôi. Thí dụ, khi biết có tệp ở thư mục /usr hoặc /usr2, chúng ta gõ lệnh:
find /usr /usr2 -name tên_tệp -print
Chúng ta có thể dùng nhiều tuỳ chọn với find. Bảng sau đây chỉ liệt kê một phần nhỏ. Muốn tham khảo mọi tuỳ chọn, chúng ta gõ lệnh:
man find
Bảng 10.6: Một mẫu các cờ dùng với lệnh find.
Lệnh Mô tả
- name tệp Biến tệp có thể là tên của một tệp hoặc tên tệp kèm ký tự wildcard. Nếu có kèm wildcard, những tệp nào khớp với wildcard sẽ được chọn để xử lý.
-links n Bất kỳ tệp nào có số kết nối bằng hoặc lớn hơn n sẽ được chọn. Chúng ta thay thế n bằng con số cần thiết.
-size n [c] Bất kỳ tệp nào có số block 512 byte bằng hoặc lớn hơn n sẽ được chọn. Nếu có c gắn theo n, máy sẽ chọn những tệp có số ký tự bằng hoặc lớn hơn n.
-atime n Tệp nào được truy cập trong vòng n ngày sẽ được chọn. Chúng ta lưu ý là thao tác duyệt tìm tệp bằng lệnh find sẽ thay đổi nhãn ngày tháng của tệp.
-exec cmd Sau khi chọn xong danh sách tệp, chúng ta có thể dùng danh sách này làm đối số để chạy một lệnh Linux. Có hai quy định đơn giản với -exec: tên của tệp được đại diện bởi {} và lệnh phải tận cùng bằng dấu chấm phẩy thoát, nghĩa là \;. Giả sử khi đã đăng nhập với quyền hạn root, chúng ta tạo ra một thư
mục user. Kết quả là mọi tệp đều thuộc về root, nhưng lẽ ra chúng phải thuộc quyền sở hữu của user đó. Chúng ta phải ra lệnh sau đây để đổi chủ sở hữu của mọi tệp trong /usr/pla và mọi thư mục cấp dưới từ root sang pla: find /home/pla -exec chown pla {}\;
-print In tên và vị trí các tệp được chọn.
Lệnh find giúp chúng ta thực hiện nhiều thử nghiệm logic đối với tệp. Thí dụ chúng ta muốn tìm một loạt những tên tệp nhưng không thể dùng wildcard để đại diện, vì không khớp hoàn toàn. Trường hợp này chúng ta dùng tuỳ chọn or (-o) như sau:
find /home (-name tệp1 -o -name tệp2) -print