Sự khác biệt giữa định vị / whereis / which


13

Sự khác biệt cơ bản giữa locate whereiswhichlệnh là gì.

Sự khác biệt cơ bản mà tôi quan sát được là locateđịnh vị tất cả các tên tệp liên quan trong toàn bộ hệ thống tệp, trong khi đó whereiswhichcác lệnh chỉ cung cấp vị trí (hệ thống / địa chỉ cục bộ của tệp) của ứng dụng đã cài đặt. Làm thế nào chính xác là quan sát của tôi?

Làm thế nào là các lệnh được thực hiện trong nội bộ. Tại sao locatehoạt động nhanh như vậy so với tìm kiếm dấu gạch ngang, trong khi locatephải tìm kiếm một tên tệp cụ thể khớp với chuỗi mục tiêu trong toàn bộ phân cấp hệ thống tệp?


2
và những gì về type? : P
jamesmstone

@jamesmstone bạn có ý gì type, xin hãy giải thích
Chinmaya B

2
Xin lỗi tôi chỉ cố gắng thêm vào câu hỏi của bạn. typelà một lệnh khác mà dường như (trong mắt tôi) làm một điều tương tự như những gì bạn đã đề cập.
jamesmstone

@jamesmstone Tôi không nghĩ có bất kỳ loại lệnh nào hoạt động trong hệ thống của tôi. Tôi không thể tìm thấy bất kỳ hướng dẫn hoặc trang thông tin cho typelệnh. Tôi đã thử man typeinfo type.
Chinmaya B

Hmm, tôi tự hỏi tại sao ... Bạn đang sử dụng bash?
jamesmstone

Câu trả lời:


17

whichtìm thấy khả năng thực thi nhị phân của chương trình (nếu nó nằm trong PATH của bạn). man whichgiải thích rõ hơn:

trong đó trả về tên đường dẫn của các tệp (hoặc liên kết) sẽ được thực thi trong môi trường hiện tại, các đối số của nó được đưa ra dưới dạng các lệnh trong trình bao tuân thủ POSIX. Nó thực hiện điều này bằng cách tìm kiếm PATH cho các tệp thực thi khớp với tên của các đối số. Nó không theo các liên kết tượng trưng.

whereistìm tệp nhị phân, nguồn và tệp man cho một chương trình. Ví dụ

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Bạn có thể nhận thêm chi tiết bằng cách chuyển đầu ra của các lệnh này làm đối số cho ls -lhoặcfile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locatethực sự tìm thấy tất cả các tệp có mẫu được chỉ định ở bất cứ đâu trong đường dẫn của chúng. Bạn có thể yêu cầu nó chỉ tìm các tệp và thư mục có tên (chứ không phải đường dẫn đầy đủ) bao gồm mẫu có -btùy chọn, thường là những gì bạn muốn và đưa ra một danh sách ít khó sử dụng hơn.

locatelà nhanh bởi vì nó sử dụng cơ sở dữ liệu nhị phân được cập nhật định kỳ (một lần mỗi ngày, bởi cron). Bạn có thể tự cập nhật nó để đảm bảo các tệp được thêm gần đây được tìm thấy bằng cách chạysudo updatedb

Một điều nữa về locate- không quan tâm liệu các tệp có còn tồn tại hay không, vì vậy để tránh tìm các tệp bị xóa gần đây, hãy sử dụng -e. Thường thì tôi cũng dẫn đến lessdanh sách có thể dài. Điển hình là tôi làm:

sudo updatedb && locate -b -e gimp | less

Cách thức hoạt động của Dash của Unity được giải thích ở đây - nó sử dụng Zeitgeist để lập chỉ mục các tệp hệ thống và tìm hiểu từ các mẫu sử dụng và cho phép các ứng dụng khác sử dụng dữ liệu này, do đó, nó còn hoạt động nhiều hơn thế locate.


bạn có thể so sánh dấu gạch ngang và định vị hiệu suất lệnh và chi tiết thực hiện không? Việc cập nhật cơ sở dữ liệu nhị phân nên được thực hiện sau khi tạo bất kỳ tệp mới nào trong hệ thống, vì vậy khoảng thời gian đó sẽ không chính xác hoặc được quản lý bởi các quy trình hệ thống?
Chinmaya B

2
@Creator cập nhật cơ sở dữ liệu tự động được thực hiện bởi cron, một lần mỗi ngày. Bạn có thể kiểm tra khi cài đặt thứ gì đó mà bạn không thể tìm thấy ngay các tệp locate. Dấu gạch ngang sử dụng một chỉ mục hoàn toàn khác - chậm hơn vì nó có nhiều thứ hơn (tôi đã chỉnh sửa câu trả lời của mình)
Zanna

1
Vì vậy, để tổng hợp xác định vị trí là hữu ích và mạnh mẽ hơn so với cái đó hoặc là câm trong khi dấu gạch ngang mạnh hơn và thực hiện học máy. và cảm ơn vì sudo updatedblệnh của bạn rất hữu ích không biết rằng mặc dù tôi đã sử dụng -e thường xuyên.
Chinmaya B

@Creator yep bạn phrased nó tốt hơn :) vui vì nó đã giúp
Zanna

0

Đơn giản

$ which samba

Lệnh nào tìm kiếm danh sách các chương trình được liệt kê thông qua cài đặt PATH

$ whereis samba

Lệnh whereis cũng tìm kiếm các chương trình không có trong cài đặt PATH

$locate samba

Cũng tìm thấy các tệp theo tên tệp nhưng không tự tìm kiếm cấu trúc thư mục mà chỉ tìm thấy một cơ sở dữ liệu được chuẩn bị bởi updateb. Do đó xác định vị trí nhanh hơn tìm nhưng kém chính xác. Ví dụ:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.