Введение
Программное обеспечение 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.



