Làm thế nào để tìm đường dẫn của ứng dụng từ dòng lệnh?


109

Ví dụ, tôi đã gitcài đặt trên hệ thống của mình. Nhưng tôi không nhớ nơi tôi đã cài đặt nó, vậy lệnh nào phù hợp để tìm ra điều này?


45
Heh, heh " whichmệnh lệnh" thực sự :)
Tikhon Jelvis

Câu trả lời:


123

Nếu nó nằm trong đường dẫn của bạn, thì bạn có thể chạy type githoặc which git. Các whichlệnh đã có vấn đề nhận được con đường đúng đắn (sự nhầm lẫn giữa môi trường và các tập tin dot). Đối với type, bạn có thể chỉ nhận được đường dẫn với -pđối số.

Nếu nó không nằm trong đường dẫn của bạn, thì tốt nhất bạn nên tìm nó với locate -b git Nó sẽ tìm thấy bất cứ thứ gì có tên 'git'. Nó sẽ là một danh sách dài, vì vậy có thể tốt để đủ điều kiện với nó locate -b git | fgrep -w bin.


10
Tôi sử dụng locatevô tận (nó rất nhanh), nhưng đối với những người không biết về nó, locatechỉ cập nhật như bản cập nhật cơ sở dữ liệu gần đây nhất của nó, được tự động chạy hàng ngày trên Ubuntu của tôi. Lệnh refreshsudo updatedb... Cũng locatecó khả năng regex tích hợp, vì vậy các lệnh như thế này hoạt động: locate -br "^git$"... -b` có nghĩa là hạn chế tìm kiếm chỉ tên cơ sở ... hoặc không có -b, nó tìm kiếm tên đường dẫn đầy đủ .. Ngoài ra , nó chỉ tìm kiếm các đường dẫn mà bạn đã cấu hình nó để tìm kiếm .. không có điều khiển dòng lệnh nào ngoài bộ lọc regex của bạn.
Peter.O

7
Thích typeđến which. whichdễ bị nhầm lẫn .
Gilles

@Gilles, điều đó thật buồn cười đối với tôi, hành vi hoàn toàn ngược lại: typelà một phần mềm dựng sẵn cho tôi biết bí danh và như vậy, và whichlà một chương trình bên ngoài chỉ cho tôi đường dẫn đến một thực thi ... mặc dù nếu có một phần mềm được tích hợp vào cách mà thực thi sẽ không được gọi.
quodlibetor

@quodlibetor Vấn đề whichlà nó không biết về các hàm và hàm dựng sẵn (có liên quan khi bạn tự hỏi việc gõ lệnh sẽ làm gì) và nó sử dụng khác nhau $PATHtrên một số hệ thống.
Gilles

48

Cách tiêu chuẩn POSIX để làm điều này là command -v git. Tất cả các hệ thống giống như UNIX nên hỗ trợ này.


4
Tôi biết điều này đã hơn một năm tuổi, nhưng đây chính xác là những gì tôi đang tìm kiếm; ngạc nhiên đây không phải là câu trả lời được chấp nhận.
Akoi Meexx

13

whereis git và bạn có được đường dẫn đến lệnh.

đó chỉ là nếu git nằm trong biến PATH của bạn, trong trường hợp bạn đã cài đặt nó không thông qua trình quản lý gói của bạn, nó phức tạp hơn và bạn nên sử dụng các lệnh findhoặc locate.


1
Sử dụng whichcũng được khuyến khích.
Nikhil Mulley

5
@Nikhil type, đúng hơn là không which. Xem Làm thế nào để sử dụng whichtrên một lệnh bí danh?
Gilles

13

Những câu trả lời khác ở đây dường như chủ yếu hướng tới các phiên bản hiện đại của Linux, vì vậy nếu bạn xảy ra để sử dụng gittrên một hệ điều hành mà không có locate, whereis, which, hoặc apropos(như Solaris, HPUX, vv), sau đó luôn luôn là chế độ chờ cũ find.

find / -name git 

Một số phiên bản cũ hơn của các hệ thống được liệt kê ở trên, bạn có thể cần một -printtùy chọn được cung cấp cho find.

find / -name git -print

Và nếu bạn sử dụng locate, hãy chắc chắn rằng bạn chạy updatedbđịnh kỳ. ( locate.updatedbtrên một số dẫn xuất BSD)


8
Đối với các chương trình trong đường dẫn, sử dụngtype ; nó đáng tin cậy và di động (ngoại trừ các hệ thống 30 năm tuổi).
Gilles

Cảm ơn, @Gilles. Tôi chưa bao giờ biết về type. :) Đó chắc chắn sẽ đi vào tiết mục!
Tim Kennedy

Có lẽ đáng để chỉ ra rằng findmột tìm kiếm sâu đầu tiên của hệ thống tệp bắt đầu từ bất cứ nơi nào bạn root nó. Vì vậy, find / -name gitsẽ đi qua toàn bộ hệ thống của bạn. Nếu bạn biết rằng chương trình nằm trên con đường của bạn, bạn thường có thể làm IFS=":"; path=$PATH; set $path; for dir in $path; do find $dir -name git; done, mặc dù các hệ thống tập tin Unix đủ cho phép để điều này có thể phá vỡ theo nhiều cách khác nhau nếu có các ký tự lạ trong bạn PATH.
quodlibetor

Trên thực tế, lệnh tôi đã đưa ra trước đây sẽ phá vỡ lệnh của bạn PATH, điều chính xác (với cùng cảnh báo như trước) là IFS=":"; for dir in $PATH; do find "$dir" -name git; done. Ngoài ra, để nhắc lại, câu trả lời này chỉ nên được sử dụng bởi những người không có quyền truy cập vào typehoặc which hoặc locate , tức là, hầu như không ai. Câu trả lời của @ Arcege là chính xác.
quodlibetor

5

Để có được đường dẫn đến chương trình đã cài đặt, bạn có thể sử dụng whereishoặc which. Nếu bạn quên tên của nó, bạn có thể sử dụng aproposvới một từ đồng nghĩa hoặc mô tả về tiện ích của bạn, ví dụ như apropos "version control"sẽ tìm thấy git. Theo sau đó tất nhiên là whatislệnh tóm tắt ngắn gọn chức năng của một chương trình. Tuy nhiên, điều này không áp dụng cho tất cả các chương trình và chức năng trên hệ thống của bạn. Hãy thử ví dụ whatis "the meaning of life, universe and everything".


2
Tôi nghĩ rằng nó sẽ trở lại với "42"! CƯỜI NGẢ NGHIÊNG.
Joe
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.