Làm thế nào để biết đường dẫn của một phần mềm cụ thể?


13

Bối cảnh: Tôi đang cố gắng làm cho một ứng dụng tự động bắt đầu khi tôi đăng nhập. Đối với điều này, tôi cần phải chọn pathcho các ứng dụng.

nhập mô tả hình ảnh ở đây

Đây là những con đường tôi đã xem xét:

  • /sbin
  • /usr/sbin
  • /usr/local/bin
  • /usr/share/

Nếu điều này có thể giúp ích, ứng dụng tôi đang cố gắng tìm được gọi là " ScreenCloud " và tôi đã tải xuống từ Trung tâm phần mềm Ubuntu.

Nhưng tôi không thể tìm thấy nó, có cách nào tôi có thể biết nơi được cài đặt một phần mềm cụ thể không? Bởi vì ngay cả khi tôi tìm thấy cái này, tôi vẫn muốn tránh vấn đề tương tự trong tương lai.


2
Nó không hoạt động nếu bạn chỉ gõ screencloud trong dòng lệnh?
Graham

Bạn đã lấy nó từ cửa hàng snap hay từ trung tâm phần mềm Ubuntu vì tôi không thể tìm thấy nó trong bất kỳ kho lưu trữ apt nào của Ubuntu.
mchid

2
@mchid Tôi không giải quyết liên kết của OP mà là nhận xét của bạn: "bởi vì tôi không thể tìm thấy nó trong bất kỳ kho lưu trữ apt nào của Ubuntu" Screencloud có thể được cài đặt từ .debgói nhưng bạn cần thêm PPA.
WinEunuuchs2Unix

1
@mchid Tôi biết lệnh được thay đổi từ screencloud.shđến screencloudvà bị nghi ngờ nó đã được chuyển ra khỏi /opt. Đó là một phần câu trả lời của tôi đã chỉ ra làm thế nào typewhichsẽ không tìm thấy screencloudnhưng locatesẽ.
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix Ngay trên. screencloud.shthực sự vẫn tồn tại nhưng tôi không chắc nó khác với screencloudthực tế như thế nào ngoài .shtập tin là tập lệnh và screencloudkhông phải vậy. Tôi thực sự không quen thuộc với ứng dụng này. Bên dưới /usr/bin/có một screencloud, a screencloud.sh, và cũng screencloud-theo sau là loại số phiên bản như thế nào gimp.
mchid

Câu trả lời:


16

Tìm đường dẫn của một thực thi

Cách tốt nhất

  • type executable

Kiểm tra câu hỏi này để tìm hiểu thêm về cách typetốt hơn. (Cảm ơn, bình luận!)

Những cách khác

  • whereis executable
  • which executable

Các lệnh đó chỉ tìm kiếm trong biến PATH ( echo $PATH), do đó chúng không hợp lệ trong một số trường hợp (hàm dựng sẵn, bí danh hoặc hàm bash, v.v.).


3
vô cùng đủ, đây chưa phải là một câu hỏi về hỏi Ubuntu. câu hỏi hay @Ced!
tatsu

Thật vậy, tôi khó có thể tin được!
Biggybi

1
Tôi phát hiện ra từ một câu hỏi khác typeđược ưa thích hơn whichlà nó được tích hợp sẵn và có thể xác định xem một lệnh có phải là bí danh hay không. Điều đó cũng mới đối với tôi!
Arronical

1
Xem ở đây để được giải thích (dài) về lý do tại sao typeđược ưa thích: Tại sao không sử dụng "cái nào"? Dùng gì rồi?
terdon

1
@mchid các điểm trong câu trả lời đều áp dụng. Bao gồm phần "Các trường hợp sử dụng" chỉ ra điều đó whichthực sự hữu ích trong ngữ cảnh cụ thể của các tập lệnh shell. Tuy nhiên, bên ngoài bối cảnh đó typehầu như luôn là sự lựa chọn tốt hơn.
terdon

1

Tìm vị trí lệnh bên trong hoặc bên ngoài đường dẫn

Giả sử bạn muốn tìm vị trí của uname, một chương trình liệt kê thông tin hệ thống. Nếu bạn muốn biết thư mục nào, lệnh cấp cao nhất được lưu trữ trong bạn có một số tùy chọn:

$ which uname
/bin/uname

$ type -a uname
uname is /bin/uname

$ command -v uname
/bin/uname

$ locate uname
/bin/uname
    (... SNIP dozens of Windows files on C & D ...)
/usr/lib/klibc/bin/uname
/usr/lib/plainbox-provider-resource-generic/bin/uname_resource
/usr/share/man/man1/uname.1.gz
/usr/share/man/man2/oldolduname.2.gz
/usr/share/man/man2/olduname.2.gz
/usr/share/man/man2/uname.2.gz

Xác định vị trí lợi thế

Tùy chọn cuối cùng locatetrả về tất cả các tệp chứa unamekhông chỉ chương trình được chạy từ dấu nhắc lệnh.

Ưu điểm của locatenó là sẽ tìm thấy các lệnh không có trong đường dẫn tìm kiếm của bạn. type -a(ưa thích hơn đơn giản type) và whichsẽ chỉ tìm thấy các lệnh trong đường dẫn tìm kiếm của bạn. Để xem đường dẫn tìm kiếm của bạn sử dụng echo $PATH.

Lấy ví dụ câu trả lời này trong Làm thế nào để bắt đầu screencloud? :

Thử...

/opt/screencloud/screencloud.sh

Các locate screencloudlệnh sẽ tìm thấy nó nhưng which screencloudtype -a screencloudsẽ không bởi vì:

  • Tên đầy đủ là screencloud.shvà chỉ locatetìm kiếm lệnh trên một phần khớp.
  • /opt/screencloudcó lẽ không có trong con đường tìm kiếm. whichtypechỉ tìm kiếm các tập tin thực thi trong đường dẫn tìm kiếm.

Lưu ý: Đây là một câu trả lời cũ hơn. ScreenCloud hiện đại được gọi với screencloud.

Lợi thế của findlệnh so với lệnh là nó có thể nhanh hơn hàng trăm hoặc thậm chí hàng nghìn lần. Ngoài ra, chạy findbắt đầu từ /sẽ cung cấp nhiều lỗi cho phép bạn sẽ không gặp phải locate.

Xác định vị trí bất lợi

Nếu bạn vừa cài đặt chương trình hôm nay, bạn sẽ cần sử dụng sudo updatedbđể cập nhật cơ sở dữ liệu định vị.


1

Sử dụng lệnh sau để liệt kê tất cả các $PATHthư mục của bạn :

echo $PATH | sed 's/:/\n/g'

Sử dụng lệnh sau để tìm đường dẫn đầy đủ cho screencloud:

for i in $(echo $PATH | sed 's/:/\n/g'); do find $i/screencloud* 2>@1; done

Nếu bạn sử dụng apt, apt-gethoặc Trung tâm Ubuntu Phần mềm để cài đặt các gói phần mềm, bạn có thể sử dụng lệnh sau đây để tìm đường dẫn đầy đủ:

dpkg -L screencloud | grep bin

Giả sử bạn sử dụng kho lưu trữ này , bạn sẽ có thể tìm thấy screencloud trong /usr/bin/.

Đường dẫn đầy đủ là:

/usr/bin/screencloud

hoặc là

/usr/bin/screencloud-*

Tuy nhiên, nếu bạn đã sử dụng cửa hàng snapcraft theo liên kết bạn đã cung cấp trong câu hỏi của mình, thì đường dẫn sẽ nằm trong thư mục sau:

/snap/bin

thêm thông tin

Ngoài ra, hãy nhớ rằng Ubuntu phân biệt chữ hoa chữ thường nên bạn phải sử dụng tất cả chữ thường không có chữ in hoa.


Cảm ơn bạn vì câu trả lời rất chi tiết này, bạn đã giành được một upvote :)
Ced

1
Đó là hiệu quả dưới /snap/bin!
Ced
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.