Установка программного обеспечения в Linux

LinuxBeginner
Практиковаться сейчас

Введение

Программное обеспечение Ubuntu обычно поставляется в виде пакетов. Репозитории публикуют файлы пакетов и метаданные с описанием имён, версий, зависимостей и мест загрузки. apt работает с репозиториями и разрешает зависимости, а dpkg на более низком уровне управляет локальной базой данных установленных пакетов .deb.

Вы обновите метаданные, выполните поиск перед установкой, проверите установленный пакет, удалите его и установите детерминированный локальный .deb. Каждое изменение выполняется с помощью одноразового учебного пакета и проверяется по состоянию пакетов, а не по истории команд в терминале.

Просмотр состояния пакетов и источников

На этом шаге вы различите конфигурацию репозиториев, доступные метаданные и состояние установленных пакетов.

Проверьте определения включённых источников. В современных образах Ubuntu могут использоваться файлы .list или .sources. Этот конвейер только читает данные и ищет информацию в обоих расположениях: grep -R выполняет рекурсивный поиск, -h скрывает имена исходных файлов, -s подавляет сообщения об отсутствующих файлах, а -E включает группировку в шаблоне. head ограничивает вывод двенадцатью совпавшими строками:

grep -RhsE '^(deb |Types:|URIs:|Suites:)' /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null | head -n 12

Проверьте с помощью dpkg, установлен ли Bash. Параметр -W выбирает записи пакетов, а -f задаёт формат вывода. ${Package}, ${Version} и ${db:Status-Status} — это поля dpkg, а не переменные оболочки, поскольку формат заключён в одинарные кавычки:

dpkg-query -W -f='package=${Package} version=${Version} status=${db:Status-Status}\n' bash

dpkg-query читает локальное состояние установленных пакетов. В отличие от него, apt-cache policy сравнивает установленную версию с версиями, известными из настроенных репозиториев:

apt-cache policy bash

Сохраните стабильное наблюдение о состоянии установленного пакета:

mkdir -p /home/labex/project/package-lab
dpkg-query -W -f='${Package} ${db:Status-Status}\n' bash > /home/labex/project/package-lab/bash-state.txt
cat /home/labex/project/package-lab/bash-state.txt

Обновление метаданных репозиториев

На этом шаге вы обновите индекс пакетов и разберётесь, что именно изменяет apt update.

Выполните:

sudo apt update

Эта команда загружает актуальные метаданные репозиториев. Она не устанавливает новые версии всех пакетов; apt upgrade — отдельная операция, которая обновляет установленные пакеты.

Проверьте каталог кэша метаданных:

ls -ld /var/lib/apt/lists
find /var/lib/apt/lists -maxdepth 1 -type f | head

Запишите количество обычных файлов с метаданными:

find /var/lib/apt/lists -maxdepth 1 -type f | wc -l | tr -d ' ' > /home/labex/project/package-lab/index-file-count.txt
cat /home/labex/project/package-lab/index-file-count.txt

Поиск, проверка и установка пакета из репозитория

На этом шаге вы изучите пакет перед его установкой.

Найдите в именах и описаниях пакетов утилиту для отображения дерева каталогов:

apt search '^tree$'

Просмотрите метаданные пакета:

apt show tree

Установите пакет с обработкой зависимостей. sudo предоставляет необходимые административные права, а -y автоматически отвечает «да» на это уже проверенное действие установки:

sudo apt install -y tree

Проверьте состояние пакета и расположение команды, а затем выполните эту команду:

dpkg-query -W -f='${Package} ${Version} ${db:Status-Status}\n' tree | tee /home/labex/project/package-lab/tree-installed.txt
command -v tree
tree -L 1 /home/labex/project/package-lab

Выведите пути, предоставленные пакетом:

dpkg -L tree | head

Удаление пакета и проверка результата

На этом шаге вы удалите учебный пакет из репозитория и различите связанные операции очистки.

Удалите tree:

sudo apt remove -y tree

remove удаляет программы, установленные из пакета, но может сохранить конфигурацию пакета. purge также удаляет конфигурацию, принадлежащую пакету. autoremove удаляет зависимости, которые были установлены автоматически и больше не нужны; перед подтверждением на реальном узле изучите список предлагаемых действий.

Предварительно просмотрите результат очистки зависимостей, не изменяя систему. Параметр --dry-run выполняет расчёт, но ничего не удаляет:

sudo apt autoremove --dry-run | tee /home/labex/project/package-lab/autoremove-preview.txt

Изучите предложенные действия, прежде чем запускать apt autoremove без --dry-run, особенно на общем или рабочем узле.

Текущая сессия Bash может хранить старый путь к команде. Очистите кэш расположения команд, затем убедитесь, что команда удалена, и запишите состояние базы данных пакетов:

hash -r
command -v tree || echo "tree command is unavailable"
dpkg-query -W -f='${db:Status-Status}\n' tree 2>/dev/null || echo "not-installed" | tee /home/labex/project/package-lab/tree-removed.txt

Сохраните стабильную отметку независимо от того, оставит ли dpkg остаточную запись:

if dpkg-query -W -f='${db:Status-Status}' tree 2>/dev/null | grep -qx installed; then echo "still-installed"; else echo "not-installed"; fi > /home/labex/project/package-lab/tree-removed.txt
cat /home/labex/project/package-lab/tree-removed.txt

Проверка и установка локального Deb-пакета

На этом шаге вы проверите подготовленный .deb, установите его через apt, выполните его команду и корректно удалите пакет.

Перейдите в рабочий каталог и просмотрите метаданные пакета и его содержимое, не устанавливая пакет:

cd /home/labex/project/package-lab
dpkg-deb -I labex-greeter_1.0_all.deb
dpkg-deb -c labex-greeter_1.0_all.deb

Префикс ./ сообщает apt, что это локальный файл, а не имя пакета из репозитория:

sudo apt install -y ./labex-greeter_1.0_all.deb

Выполните запрос о пакете и запустите его:

dpkg-query -W -f='${Package} ${Version} ${db:Status-Status}\n' labex-greeter
labex-greeter | tee local-package-output.txt

После проверки удалите пакет и убедитесь, что команда из его содержимого исчезла:

sudo apt remove -y labex-greeter
if command -v labex-greeter >/dev/null; then echo "still-installed"; else echo "local-package-removed"; fi > local-package-state.txt
cat local-package-state.txt

Итоги

Вы отличили метаданные репозитория от состояния установленных пакетов, обновили индексы apt, изучили пакет перед установкой, проверили файлы содержимого и расположение команды, удалили пакет из репозитория и завершили полный жизненный цикл проверенного локального .deb.