В блоке «Знакомство с 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 — фиксирует версию пакета, запрещая обновление.

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.