Sự khác biệt giữa định vị và trong Linux


27

Sự khác biệt giữa locatewhichtrong Linux là gì?

Tại sao khi tôi sử dụng locate mentor, nó liệt kê tất cả các cố vấn nhưng khi tôi sử dụng which mentorthì nó nói "không có cố vấn trong ..." - điều này có nghĩa là gì?


Xem điều này liên quan unix.stackexchange.com/a/60208/84427
chơi chữ

Cũng có wherewhereis.
Jan Tojnar

trong bash, thích : type -all acommand. Và nếu tôi đọc Biểu tượng XY đằng sau câu hỏi của bạn: bạn có một lệnh, bạn có thể thấy nó thông qua định vị, nhưng không thể thực thi nó? sau đó chỉnh sửa PATH, trong ~/.profiletệp người dùng cụ thể của bạn hoặc nếu bạn bị thuyết phục bạn biết phải làm gì, trong /etc/profiletệp toàn cầu [CẢNH BÁO: bạn có thể phá vỡ các tập lệnh hệ thống (và có thể rất nhiều HĐH) nếu bạn thêm đường dẫn sai vào $ PATH của / etc / profile ... (ví dụ: các đường dẫn chứa các lệnh thường được tìm thấy ở mọi nơi). Chỉ thích thêm vào KẾT THÚC của biến. Và xin vui lòng không đặt ::hoặc . bất cứ nơi nào trong PATH đó.
Olivier Dulac

Câu trả lời:


45

Sự khác biệt giữa locatevà là whichgì?

locate sử dụng cơ sở dữ liệu được xây dựng trước đó để định vị tệp.

locateđọc một hoặc nhiều cơ sở dữ liệu được chuẩn bị bởi updatedb(8) và ghi tên tệp khớp với ít nhất một trong các MẪU vào đầu ra tiêu chuẩn, mỗi tên trên mỗi dòng.

Nguồn định vị (1) - Trang người dùng Linux

updatedbtạo hoặc cập nhật cơ sở dữ liệu được sử dụng bởi locate(1). Nếu cơ sở dữ liệu đã tồn tại, dữ liệu của nó được sử dụng lại để tránh các thư mục đọc lại không thay đổi.

updatedbthường được chạy hàng ngày bởi cron(8) để cập nhật cơ sở dữ liệu mặc định ( /var/lib/mlocate/mlocate.db)

Nguồn updateb (8) - Trang người dùng Linux


whichtìm kiếm một tập tin thực thi bằng cách tìm kiếm nó trong các thư mục trong PATHbiến môi trường.

whichmất một hoặc nhiều đối số. Đối với mỗi đối số của nó, nó in ra stdoutđường dẫn đầy đủ của các tệp thực thi sẽ được thực thi khi đối số này được nhập tại dấu nhắc shell. Nó thực hiện điều này bằng cách tìm kiếm một tập lệnh thực thi hoặc tập lệnh trong các thư mục được liệt kê trong biến môi trường PATH.

sử dụng thuật toán tương tự như bash(1).

Nguồn mà (1) - Trang người dùng Linux


locate mentorliệt kê người cố vấn, nhưng which mentornói "không có người cố vấn trong ..."

Điều đó nghĩa là gì?

Bạn có một số tệp có tên mentorcó thể được tìm thấy trong locatecơ sở dữ liệu.

Bạn không có tập tin thực thi hoặc tập lệnh có tên mentortrong PATH.


2
"Cập nhật" - thật tốt khi biết không chỉ Microsoft mà đưa ra những cái tên quá cụ thể cho mọi thứ. (Trong Win32, DeleteObjectxóa một đối tượng GDI, CloseHandleđóng tay cầm kernel, v.v. Tương tự updatedbcập nhật locateDB)
user253751 30/03/2016

"Mà" cũng đặc biệt hữu ích trong trường hợp bạn có thể có nhiều phiên bản của cùng một chương trình khởi động ở nhiều nơi khác nhau trên đường dẫn của bạn, vì vậy nó sẽ cho bạn biết phiên bản nào thực sự được thực thi khi bạn chạy lệnh. Điều này rất hữu ích cho tôi trước khi chẩn đoán hành vi không mong muốn - ví dụ, nó giúp tôi nhận ra rằng tôi đã để lại một phiên bản tiện ích được cài đặt thủ công trên hệ thống của mình để nó ghi đè lên phiên bản được cài đặt bởi trình quản lý gói.
Càrcer

11

whichlà để xác định vị trí một lệnh ( whichtrả về tên đường dẫn của các tệp / liên kết sẽ được thực thi trong môi trường hiện tại)

locatelà tìm tệp theo tên ( locateđọc một hoặc nhiều cơ sở dữ liệu được chuẩn bị bởi updatedbvà ghi tên tệp khớp với ít nhất một trong các mẫu cho đầu ra đứng, mỗi mẫu trên một dòng)


2
Vui lòng cung cấp thẩm quyền cho các nguồn của bạn - các mô tả trong câu trả lời của bạn được lấy trực tiếp từ các trang hướng dẫn cho các tiện ích đó.
Tái lập lại Monica iamnotmaynard

5

locatelấy một mẫu toàn cầu theo mặc định (mẫu Regex cũng có thể được sử dụng) và tìm kiếm cơ sở dữ liệu /var/lib/mlocate/mlocate.dbcho bất kỳ tên tệp nào khớp với mẫu.

whichlà một lệnh để tìm kiếm đường dẫn đầy đủ của một lệnh trong các thư mục được diễn giải bởi PATHbiến môi trường.

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.