Nhiều như tôi thích Oli (rất nhiều!) Tôi không đồng ý với anh ta về find
mệ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à grep
tì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à updatedb
lệ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 find
3+ 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 updatedb
là chạy và locate
cơ 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 find
lệnh cần phải đi qua toàn bộ cấu trúc thư mục để tìm tập tin. Các locate
lệ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.