Як знати шлях певного програмного забезпечення?


13

Контекст: Я намагаюся зробити додаток автоматично запускатися під час входу. Для цього мені потрібно вибрати pathдля програми.

введіть тут опис зображення

Ось шляхи, які я вже розглядав:

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

Якщо це може допомогти, додаток, який я намагаюся знайти, називається " ScreenCloud ", і я завантажив його з програмного центру Ubuntu.

Але я не можу його знайти, чи є якийсь спосіб я знати, де встановлено певне програмне забезпечення? Тому що навіть якби я знайшов для цього, я хотів би уникнути того самого питання в майбутньому.


2
Це не працює, якщо ви просто введете screencloud у командному рядку?
Грем

Ви отримали його в оснащенні магазину або в програмному центрі Ubuntu, оскільки я не можу знайти його в жодному зі схожих сховищ Ubuntu.
mchid

2
@mchid Я не звертався до посилання ОП, а скоріше до вашого коментаря: "оскільки я не можу знайти його в жодному з схожих сховищ Ubuntu" Screencloud можна встановити з .debпакету, але вам потрібно додати PPA.
WinEunuuchs2Unix

1
@mchid Я знав, що команда була змінена з screencloud.shна screencloudі підозрювала, що її переміщено /opt. Ця частина моєї відповіді вказувала на те, як typeі whichне знайду, screencloudале locateхотів би.
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix Ввімкнено. screencloud.shнасправді все ще існує, але я не впевнений, чим він відрізняється від screencloudтого, що .shфайл є сценарієм і screencloudні. Я дійсно не знайомий з цією програмою. Внизу /usr/bin/є screencloud, a screencloud.sh, а також screencloud-слідом за номером версії, як начебто gimp.
мчід

Відповіді:


16

Знайдіть шлях виконуваного файлу

Кращий спосіб

  • type executable

Ознайомтеся з цим питанням, щоб дізнатися більше про те, як typeкраще. (Спасибі, коментарі!)

Інші способи

  • whereis executable
  • which executable

Ці команди здійснюють пошук лише у змінній PATH ( echo $PATH), тому в деяких випадках вони недійсні (вбудовані функції, псевдоніми або функції bash тощо).


3
Неймовірно, це ще не було питання про запитання ubuntu. гарне запитання @Ced!
тацу

Справді, я навряд чи можу повірити!
Biggybi

1
Я дізнався з іншого питання, яке typeнадається перевазі, whichоскільки це вбудована оболонка, і я можу визначити, чи є команда псевдонімом. Це було для мене теж новим!
Арронічний

1
Дивіться тут (довге) пояснення, чому typeвіддається перевага: Чому б не використовувати "який"? Що тоді використовувати?
тердон

1
@mchid застосовуються пункти у відповіді. У тому числі розділ "Використовувати випадки", який вказує, що whichдійсно корисний у конкретному контексті скриптів оболонки. Однак поза цим контекстом typeмайже завжди кращий вибір.
тердон

1

Знайти розташування команди всередині або зовні шляху

Припустимо, ви хочете знайти місцеперебування unameпрограми, яка містить список системної інформації. Якщо ви хочете знати, в якому каталозі зберігається команда верхнього рівня, у вас є ряд варіантів:

$ 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

Знайдіть переваги

Остання опція locateповертає всі файли, що містять unameне лише програму, запущену з командного рядка.

Перевага в locateтому, що він знайде команди, які не знаходяться у вашому шляху пошуку. type -a(бажано над простим type) і whichзнайде лише команди на шляху пошуку. Щоб побачити шлях пошуку echo $PATH.

Візьмемо для прикладу цю відповідь у розділі Як почати екран? :

Спробуйте ...

/opt/screencloud/screencloud.sh

locate screencloudКоманда знайде його , але which screencloudі type -a screencloudНЕ буде , тому що:

  • Повне ім'я є screencloud.shі locateкоманда шукає лише часткове збіг.
  • /opt/screencloudймовірно, немає у шляху пошуку. whichі typeшукати лише виконавчі файли на шляху пошуку.

Примітка. Це відповідь старіша. Сучасний ScreenCloud викликається за допомогою screencloud.

Перевага локації перед findкомандою полягає в тому, що вона може бути в сотні чи навіть тисячі разів швидше. Також запущений з findпочатку /призведе до багатьох помилок дозволу, з якими ви не зіткнетесь locate.

Знайдіть недоліки

Якщо ви щойно встановили програму сьогодні, вам потрібно буде sudo updatedbоновити базу даних locate.


1

Використовуйте таку команду, щоб перерахувати всі ваші $PATHкаталоги:

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

Використовуйте таку команду, щоб знайти повний шлях для screencloud:

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

Якщо ви використовували apt, apt-getабо Програмний центр Ubuntu для встановлення пакету, ви можете використовувати таку команду, щоб знайти повний шлях:

dpkg -L screencloud | grep bin

Припускаючи , що ви використовували цей репозиторій , ви повинні бути в змозі знайти screencloud в /usr/bin/.

Повний шлях:

/usr/bin/screencloud

або

/usr/bin/screencloud-*

Однак якщо ви користувалися магазином snapcraft відповідно до посилання, яке ви вказали у своєму запитанні, то шлях буде знаходитись у наступному каталозі:

/snap/bin

більше інформації

Також пам’ятайте, що Ubuntu відрізняється великими літерами, тому ви повинні використовувати всі малі літери без великих літер.


Дякую за дуже докладну відповідь, ви виграли upvote :)
CED

1
Це було фактично під /snap/bin!
Ced
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.