В блоке «Знакомство с Linux» мы уже ставили программы через sudo apt install — и это работало. Но мы не задавались вопросом: а откуда apt берёт эти программы? Что будет, если нужного пакета нет в стандартном списке? Как откатить обновление, которое всё сломало? Как посмотреть, какие пакеты установлены?
Сейчас разберёмся.
Когда вы набираете sudo apt install nginx, apt не скачивает nginx с какого-то случайного сайта. Он обращается к репозиторию — серверу, на котором хранятся тысячи проверенных пакетов.
Список репозиториев хранится в файле /etc/apt/sources.list и в директории /etc/apt/sources.list.d/. Посмотрим:
cat /etc/apt/sources.list
Вы увидите строки вроде:
deb http://archive.ubuntu.com/ubuntu jammy main restricted
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted
deb http://security.ubuntu.com/ubuntu jammy-security main restricted
Каждая строка — один источник пакетов. Разберём:
deb— тип пакетов (скомпилированные программы).http://archive.ubuntu.com/ubuntu— адрес сервера.jammy— кодовое имя релиза Ubuntu (22.04).main restricted— разделы:main— свободное ПО с поддержкой,restricted— проприетарные драйверы.
Когда вы запускаете sudo apt update, apt ходит по всем репозиториям из sources.list и скачивает индекс — список доступных пакетов с версиями. Это как обновить каталог магазина: вы не покупаете товары, а просто узнаёте, что есть в наличии.
А sudo apt upgrade — это уже «покупка»: apt сравнивает установленные пакеты с индексом и обновляет те, для которых вышли новые версии.
# Обновить каталог (индекс пакетов)
sudo apt update
# Обновить все пакеты до последних версий
sudo apt upgrade
# То же самое, но может удалять/добавлять пакеты при конфликтах
sudo apt full-upgrade
Иногда нужной программы нет в стандартных репозиториях. Например, вы хотите установить свежую версию Node.js, а в Ubuntu — старая. Для этого существуют PPA — персональные репозитории разработчиков.
# Подключить PPA (пример)
sudo add-apt-repository ppa:ondrej/php
# После добавления — обновить индекс
sudo apt update
# Теперь можно ставить пакеты из нового репозитория
sudo apt install php8.3
Удалить PPA:
sudo add-apt-repository --remove ppa:ondrej/php
Теперь — dpkg. Если apt — это «магазин с каталогом», то dpkg — «руки, которые устанавливают товар на полку». apt использует dpkg под капотом для установки каждого пакета.
Когда dpkg полезен? Когда вы скачали .deb-файл вручную — например, с официального сайта программы (Google Chrome, VS Code, Slack):
# Установить скачанный .deb-файл
sudo dpkg -i google-chrome-stable_amd64.deb
# Если dpkg ругается на зависимости — доустановить их через apt
sudo apt install -f
Связка dpkg -i + apt install -f — стандартный способ установки .deb-пакетов, скачанных с сайтов.
Другие полезные команды dpkg:
# Список всех установленных пакетов
dpkg -l
# Поиск среди установленных
dpkg -l | grep nginx
# Какие файлы принадлежат пакету?
dpkg -L nginx
# Какому пакету принадлежит файл?
dpkg -S /usr/bin/curl
# curl: /usr/bin/curl
Последняя команда особенно полезна: нашли незнакомый файл в системе — dpkg -S покажет, какой пакет его принёс.
Вернёмся к apt. Вот команды, которые вам пригодятся постоянно, но о которых редко пишут в начальных руководствах:
# Поиск пакета по имени или описанию
apt search "web server"
# Подробная информация о пакете (версия, размер, описание, зависимости)
apt show nginx
# Список установленных пакетов
apt list --installed
# Список пакетов, для которых есть обновления
apt list --upgradable
И команды для наведения порядка:
# Удалить пакет, но оставить конфигурационные файлы
sudo apt remove nginx
# Удалить пакет вместе с конфигами
sudo apt purge nginx
# Удалить зависимости, которые больше никому не нужны
sudo apt autoremove
# Очистить кеш скачанных .deb-файлов (освобождает место)
sudo apt clean
Разница между remove и purge важна: после remove конфиги остаются в системе. Если вы заново установите пакет — он подхватит старые настройки. После purge — как будто пакета никогда не было.
Что делать, если обновление пакета сломало что-то? Можно откатить — установить конкретную версию:
# Посмотреть доступные версии пакета
apt list -a nginx
# Установить конкретную версию
sudo apt install nginx=1.18.0-6ubuntu1
# Зафиксировать версию (запретить обновление)
sudo apt-mark hold nginx
# Снять фиксацию
sudo apt-mark unhold nginx
# Посмотреть зафиксированные пакеты
apt-mark showhold
apt-mark hold — спасение, когда конкретная версия пакета работает, а новая — ломает. Вы фиксируете рабочую версию, и apt upgrade её не трогает.
Подведём итог. apt — это не просто «установщик программ». Это целая экосистема: репозитории, индексы, зависимости, версионирование. Понимание того, как она работает, отличает пользователя, который копирует команды из Stack Overflow, от администратора, который знает, что делает.
В следующем уроке — процессы. Что такое процесс, как посмотреть, что сейчас работает в системе, и как остановить зависшую программу.
Репозиторий — удалённый сервер с пакетами. Список репозиториев — в /etc/apt/sources.list.
apt update — обновляет индекс (каталог) доступных пакетов. apt upgrade — обновляет установленные пакеты до новых версий.
PPA — дополнительный репозиторий от стороннего разработчика. Подключается через add-apt-repository.
dpkg — низкоуровневый менеджер, работает с отдельными .deb-файлами. Не разрешает зависимости самостоятельно.
apt remove — удаляет пакет, оставляя конфиги. apt purge — удаляет полностью. apt autoremove — убирает ненужные зависимости.
apt-mark hold — фиксирует версию пакета, запрещая обновление.