Как узнать путь к конкретному программному обеспечению?

13

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

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

Вот пути, которые я уже изучил:

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

Если это может помочь, приложение, которое я пытаюсь найти, называется « ScreenCloud », и я загрузил его из Ubuntu Software Center.

Но я не могу найти его, есть ли способ узнать, где установлено конкретное программное обеспечение? Потому что, даже если я найду этот, я бы хотел избежать такой же проблемы в будущем.

CED
источник
2
Разве это не работает, если вы просто набираете screencloud в командной строке?
Грэм
Вы получили его в магазине мгновенных снимков или в программном центре Ubuntu, потому что я не могу найти его ни в одном из репозиториев Ubuntu apt.
mchid
2
@mchid Я обращался не к ссылке OP, а к вашему комментарию: «потому что я не могу найти ее ни в одном из репозиториев Ubuntu apt» Screencloud можно установить из .debпакета, но вам нужно добавить PPA.
WinEunuuchs2Unix
1
@mchid Я знал, что команда была изменена с screencloud.shна, screencloudи подозревал, что она была удалена /opt. В той части моего ответа указывалось, как typeи whichне найти, screencloudно locateнайдет.
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix Отлично. screencloud.shна самом деле все еще существует, но я не уверен, чем он отличается от screencloudтого, что.sh файл является сценарием, а screencloudне является. Я действительно не знаком с этим приложением. Ниже /usr/bin/есть a screencloud, a screencloud.sh, а также screencloud-сопровождаемый номером версии вроде как gimp.
mchid

Ответы:

16

Найти путь к исполняемому файлу

Лучший способ

  • type executable

Проверьте этот вопрос, чтобы узнать больше о том, как typeлучше. (Спасибо, комментарии!)

Другие способы

  • whereis executable
  • which executable

Эти команды echo $PATHвыполняют поиск только в переменной PATH ( ), поэтому в некоторых случаях они недопустимы (встроенные функции, псевдонимы или функции bash и т. Д.).

Biggybi
источник
3
достаточно невероятно, что это был еще не вопрос по Ubuntu. хороший вопрос @Ced!
Tatsu
Действительно, я с трудом могу в это поверить!
Биггиби
1
Из другого вопроса я узнал, что typeон предпочтительнее whichвстроенного в оболочку и может определить, является ли команда псевдонимом. Это было новым для меня тоже!
Arronical
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.

Возьмите, к примеру, этот ответ в разделе Как запустить screencloud? :

Пытаться...

/opt/screencloud/screencloud.sh

locate screencloudКоманда найдет его , но which screencloudи type -a screencloudне будет , потому что:

  • Полное имя есть screencloud.shи только locateкоманда ищет при частичном совпадении.
  • /opt/screencloudвероятно, не в пути поиска. whichи typeтолько искать исполняемые файлы в пути поиска.

Примечание: Это старый ответ. Современный ScreenCloud называется с screencloud.

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

Найдите недостатки

Если вы только что установили программу сегодня, вам нужно будет использовать ее sudo updatedbдля обновления базы данных locate.

WinEunuuchs2Unix
источник
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 Software Center для установки пакета, вы можете использовать следующую команду, чтобы найти полный путь:

dpkg -L screencloud | grep bin

Предполагая, что вы использовали этот репозиторий , вы сможете найти screencloud в/usr/bin/ .

Полный путь:

/usr/bin/screencloud

или

/usr/bin/screencloud-*

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

/snap/bin

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

Также помните, что в Ubuntu учитывается регистр, поэтому вы должны использовать все строчные буквы без заглавных букв.

mchid
источник
Спасибо за этот очень подробный ответ, вы выиграли upvote :)
Ced
1
Это было эффективно под /snap/bin!
Ced