Nhiều như tôi thích Oli (rất nhiều!) Tôi không đồng ý với anh ta về findmệnh lệnh. Tôi không thích nó.
find lệnh mất hơn ba phút
Lấy ví dụ lệnh đơn giản này:
$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
(... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
real 3m40.589s
user 0m4.156s
sys 0m8.874s
Phải mất hơn ba phút cho findđể tìm kiếm tất cả mọi thứ bắt đầu từ /. Theo mặc định, các dòng thông báo lỗi xuất hiện và bạn phải tìm kiếm thông qua chúng để tìm thấy những gì bạn đang tìm kiếm. Tuy nhiên, tốt hơn là greptìm kiếm toàn bộ ổ đĩa trong một chuỗi mất 53 giờ : `grep`ing tất cả các tệp cho một chuỗi mất nhiều thời gian
Tôi biết tôi có thể sử dụng các tham số của lệnh find để làm cho nó hoạt động tốt hơn nhưng vấn đề ở đây là thời gian cần thiết để chạy.
locate lệnh mất ít hơn một giây
Bây giờ hãy sử dụng locate:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
Lệnh xác định vị trí mất ít hơn một giây!
updatedb chỉ chạy một lần một ngày theo mặc định
Đúng là updatedblệnh cập nhật cơ sở dữ liệu định vị chỉ được chạy một lần một ngày theo mặc định. Bạn có thể chạy thủ công trước khi tìm kiếm các tệp vừa thêm bằng cách sử dụng:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
Mặc dù việc này sẽ mất 3 giây, nhưng nó nhỏ so với find3+ phút của lệnh.
Tôi đã cập nhật của tôi sudo crontab -eđể bao gồm dòng ở dưới cùng:
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
Bây giờ cứ sau năm phút updatedblà chạy và locatecơ sở dữ liệu lệnh hầu như luôn cập nhật.
Nhưng không có thuộc tính?
Bạn có thể dẫn locateđầu ra cho các lệnh khác. Nếu ví dụ bạn muốn các thuộc tính tệp bạn có thể sử dụng:
$ locate mail-transport-agent.target | xargs stat
File: '/lib/systemd/system/mail-transport-agent.target'
Size: 473 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 667460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
Birth: -
Tóm lược
Tôi đã đăng câu trả lời này để cho thấy tốc độ và dễ sử dụng locate. Tôi đã cố gắng giải quyết một số lệnh ngắn được chỉ ra bởi những người khác.
Các findlệnh cần phải đi qua toàn bộ cấu trúc thư mục để tìm tập tin. Các locatelệnh có cơ sở dữ liệu riêng của nó mang đến cho tốc độ rất nhanh nó trong so sánh.