sự khác biệt nào


112

Sự khác biệt giữa whichvà là whereisgì?


Tôi xin lỗi nhưng trên hệ thống OS X 10.5.8 của tôi và luôn mang lại kết quả tương tự. Có lẽ đây một câu hỏi cụ thể về OS X, vì tôi đồng ý, một kết quả khác được mong đợi. Có lẽ Whereis không tuân thủ những gì nó nên làm. Ít nhất hai ví dụ (xem bên dưới) không hoạt động: whereis ls và whereis php luôn cho kết quả giống như vậy ... Có ai có thể xác nhận điều này không? Liệu Snow Leopard có hành xử giống nhau không?
Sói

Vâng tôi biết, đó là lý do tại sao tôi hỏi câu hỏi này.
mk12

@Wolf đây là một ví dụ về whichwhereisđưa ra đầu ra khác nhau (trên macOS Sierra) apple.stackexchange.com/questions/259047/ chủ
Matthew

@ mk12 Tôi cảm thấy như typelà vượt trội. Nó cũng biết về các bí danh đã xác định, các hàm, v.v.
phil294

Câu trả lời:


121

Làm thế nào về việc học whereiswhichsử dụng whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Về cơ bản, whereistìm kiếm các tệp "có thể hữu ích", trong khi whichchỉ tìm kiếm các tệp thực thi.

Tôi hiếm khi sử dụng whereis. Mặt khác, whichrất hữu ích, đặc biệt trong các kịch bản. whichlà câu trả lời cho câu hỏi sau: Lệnh này đến từ đâu?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2

34
không biết về whatis, cảm ơn.
mk12

1
BTW, tôi sẽ xóa thẻ "osx", vì câu hỏi này áp dụng cho tất cả các biến thể unix (bao gồm Linux, BSD, Mac OS X, ...)
Denilson Sá Maia

đổi thành unix
mk12

1
Có nhiều hơn thế. Trên hệ thống của tôi, trong đó và trả về các đường dẫn thực thi khác nhau. Tôi chỉ có thể có được đường dẫn đến cái thực sự chạy cùng whereis, không phải đường dẫn which.
Jordan Reiter

1
@JordanReiter: Không thể nào! whichcho thấy con đường thực tế. Bạn có chắc chắn đường dẫn được chỉ bởi whichkhông chỉ là một liên kết tượng trưng đến đường dẫn được chỉ bởi whereis? Có lẽ nó là một bí danh vỏ. Trong bash, hãy thử chạy type your_cmd_here.
Denilson Sá Maia

23

whereis tìm kiếm các vị trí * nix tiêu chuẩn cho một lệnh được chỉ định.

whichtìm kiếm PATH dành riêng cho người dùng của bạn (có thể bao gồm một số vị trí trong đó tìm kiếm và có thể không bao gồm các vị trí khác - nó cũng có thể bao gồm một số địa điểm whereiskhông tìm kiếm nếu bạn đã thêm vào PATH của mình)


* Nix là gì?
mk12

2
Unix, Linux, v.v. (Mac OS X thuộc v.v.)

8
Ohhh, haha, tôi luôn nghĩ rằng tràn stack đang kiểm duyệt chữ U trong unix bất cứ khi nào tôi thấy điều đó vì một số lý do ..
mk12

Không. Chỉ là một quy ước khá phổ biến về việc sử dụng ký tự đại diện sáng tạo để chỉ một họ các hệ điều hành tương tự. ;)

6

Trích dẫn trang người đàn ông của họ:

trong đó :

trong đó định vị các phần nguồn / nhị phân và hướng dẫn sử dụng cho các tệp được chỉ định.

Ví dụ :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

tức là, "php" thực thi và một số thứ khác (như trang man).


trong đó :

trong đó trả về tên đường dẫn của các tệp sẽ được thực thi trong môi trường hiện tại

Ví dụ :

$ which php
/usr/bin/php

tức là chỉ có tệp thực thi "php".


1

tìm kiếm cho thực thi trong thư mục theo quy định của PATH biến môi trường. Và nếu phát hiện ra, tên đường dẫn đầy đủ của tệp thực thi này sẽ được in.

$ which ls
/ bin / ls
$ which ifconfig
$ # Không có đầu ra, bởi vì ifconfig chỉ tồn tại trong PATH của root.

trong đó tìm kiếm các tệp thực thi, tệp nguồn và các trang thủ công bằng cách sử dụng cơ sở dữ liệu được xây dựng bởi hệ thống.

$ whereis less
less: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Nhưng có vẻ như whereisxác định vị trí không sử dụng cơ sở dữ liệu tương tự. Khi tôi cài đặt một phần mềm và sau đó sử dụng whereisxác định vị trí ngay lập tức để tìm kiếm phần mềm này. Kết quả là whereis có thể tìm hiểu một số tác phẩm liên quan đến phần mềm này khi xác định vị trí không thể. Họ có thực sự sử dụng cơ sở dữ liệu khác nhau? Cơ sở dữ liệu hoạt động như thế nào? --Vâng, làm thế nào về việc từ chối làm một nhà giáo? :)


bạn đã chạy lệnh updateb chưa? xác định vị trí dựa vào đó theo như tôi nhớ
Oliver M Grech
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.