Я искал каждое изменение этого вопроса в течение многих дней, и я не смог найти четкое объяснение поэтому, я прихожу к коллективному знанию сюда в надеждах на разрешение моих вопросов об установке на дистрибутиве Linux.
Я установил (или по крайней мере попытался к), несколько пакетов от GitHub, и я думаю, что, возможно, установил их правильно потому что, когда я использую which <package>
или <package> -h
Я вижу путь (все находятся в/usr/bin/), и команды, связанные с корректными программами, однако, когда я использую apt-cache
пакеты не могут быть найдены.
Мой вопрос - это: что точно является различием в apt-cache policy
, which
, и использование -h
при проверке установки пакетов? Я установил каждый пакет немного по-другому и ни одного из них, я установил использование центра программного обеспечения для Ubuntu.
Для одного пакета:
git clone "package.git"
make
sudo ln -s ~/path/to/package_clone /usr/local/bin/.
для другого:
git clone https://github.com/package.git
cd pkg.dir/
sudo python setup.py install
pkg.dir -h
apt-cache
информационный инструмент диспетчера пакетов apt
/ dpkg
. Это только имеет информацию о пакетах, которые Вы установили через них (обратите внимание, что Центр программного обеспечения является просто фронтендом GUI для них), т.е. регулярные .deb пакеты (включая все из официальных репозиториев и PPAs).
, Если Вы устанавливаете приложения вручную или просто копированием их папок или запущением скриптов установки или make
команды, это не регулярные пакеты и поэтому не управляемое диспетчером пакетов. Вот почему apt-cache
не может найти информацию о пакетах - они просто не пакеты вообще.
Эти which
команда, с другой стороны, не связана с пакетами, она просто показывает Вам, какой исполняемый файл выполнить при вводе определенной команды путем поиска всех каталогов, указанных в $PATH
переменная среды для исполняемых файлов имени соответствия.
Путем выполнения apt-cache policy <package
. Вы отображаете информацию о приоритетном выборе именованного пакета.
Рассматриваемый пакет должен быть установлен apt-get
заранее. Это не будет знать о пакетах, которые Вы установили вручную (например, с git
команда).
Путем выполнения which
команда Вы спрашиваете свою систему, каков был бы точный тракт программы, если бы Вы пытались выполнить его.
У каждого пользователя есть a PATH
переменная среды, определенная, который содержит список каталогов ОС, будет искать (один за другим) точное совпадение названия программы, которое Вы ввели. Можно отобразить значение PATH
со следующей командой:
echo "$PATH"
Вы могли бы получить результат, подобный: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/snap/bin".
Если Вы вводите:
which mail
Система проверит:
/usr/local/sbin
содержать mail
? - Нет./usr/local/bin
содержать mail
? - Нет./usr/local/bin
содержать mail
? - Нет./usr/bin
содержать mail
? - Да. Так печать /usr/bin
.Это означает, пытались ли Вы работать:
mail
Система будет работать /usr/bin/mail
программа.
Наиболее популярный способ использования which
команда должна гарантировать выполнение правильной версии программы в случае, если у Вас есть несколько установленных версий. Или проверяя, может ли программа быть запущена вообще.
Путем запущения программы с -h
аргумент Вы на самом деле пытаетесь выполнить его. В зависимости от точной реализации это могло бы отобразить справку, например:
mail -h
Однако помните это -h
обычный аргумент, это до самой программы для ответа. Не вся справка дисплея программ с этим аргументом, некоторые могли бы возвратить ошибку, некоторые могли бы проигнорировать и работать, некоторые могли бы использовать его для совсем другой цели.
Нет никакого "официального" способа проверить, установлена ли вручную установленная программа правильно, но две последних команды (which
и попытка выполнить программу непосредственно), даст Вам наилучшее приближение.
Вместо справки Вы могли бы попытаться запустить программу с --version
(или -v
) аргумент, который является обычным способом попросить, чтобы выполненная программа отобразила свою версию.