Гид по технологиям

Как найти отсутствующие пакеты с помощью apt-file на Debian и Ubuntu

• 6 min read • Linux • Обновлено 25 Nov 2025
apt-file: поиск отсутствующих пакетов в Debian/Ubuntu
apt-file: поиск отсутствующих пакетов в Debian/Ubuntu

Версия и автор

Version 1.0
Author: Falko Timme

Введение

Это руководство объясняет, как находить отсутствующие пакеты на системах Debian и Ubuntu с помощью утилиты apt-file. Часто при компиляции из исходников процесс прерывается из‑за отсутствия заголовочного файла или другой системной зависимости. apt-file помогает узнать, какому пакету принадлежит файл, чтобы установить его и продолжить работу.

Определение: apt-file — это инструмент, который ищет файлы по их именам в индексах пакетов, даже если пакеты не установлены локально.

Важно: следуйте инструкциям с правами суперпользователя, когда требуется установка пакета или обновление индексов.

Проблема на примере (исходная ситуация)

Типичная ошибка при сборке проекта выглядит так:

root@falko-desktop:~/avant-window-navigator-0.1.1# make
make all-recursive
make[1]: Entering directory `/root/avant-window-navigator-0.1.1'
Making all in src
make[2]: Entering directory `/root/avant-window-navigator-0.1.1/src'
...
main.c:21:21: error: gtk/gtk.h: No such file or directory
...
make: *** [all] Error 2
root@falko-desktop:~/avant-window-navigator-0.1.1#

Сообщение “No such file or directory” подсказывает, что в системе отсутствует заголовок gtk/gtk.h. Но как узнать, в каком пакете он содержится? Решение — apt-file.

1 Установка apt-file

Установите apt-file стандартной командой:

apt-get install apt-file

Затем обновите локальную базу данных apt-file:

apt-file update

Примечание: выполняйте “apt-file update” после любого изменения /etc/apt/sources.list или при смене версий дистрибутива.

Важно: apt-file использует индексы репозиториев, поэтому для новых репозиториев сначала выполните apt update.

2 Поиск пакета по имени файла

Чтобы найти пакеты, содержащие конкретный файл, используйте:

apt-file search gtk/gtk.h

Вывод может выглядеть так:

libgfcui-dev: usr/include/gfc-2.0/gfc/gtk/gtk.hh
libgtk+2.0-directfb-dev: usr/include/directfb/gtk-2.0/gtk/gtk.h
libgtk1.2-dev: usr/include/gtk-1.2/gtk/gtk.h
libgtk2.0-dev: usr/include/gtk-2.0/gtk/gtk.h
libgtk2.0-doc: usr/share/doc/libgtk2.0-doc/gtk/gtk.html

В этом списке несколько пакетов содержат файлы с похожими путями. В большинстве случаев вам нужен пакет, содержащий заголовки версии GTK, совместимой с проектом. В примере правильным оказался libgtk2.0-dev.

Установите нужный пакет:

apt-get install libgtk2.0-dev

Попробуйте собрать проект снова. Если появится другая ошибка о пропавшем файле, повторите процедуру поиска.

Пример следующей ошибки и поиска:

awn-app.h:30:29: error: libwnck/libwnck.h: No such file or directory

Поиск:

apt-file search libwnck/libwnck.h

Вывод:

libwnck-dev: usr/include/libwnck-1.0/libwnck/libwnck.h

Установка:

apt-get install libwnck-dev

После установки повторите make.

3 Советы по уточнённому поиску

  • Если поиск по короткому имени возвращает слишком много результатов, укажите более точный путь, например gtk/gtk.h вместо gtk.h.
  • Используйте флаги оболочки для удобства: apt-file search “*/gtk.h” для совпадения с шаблоном.
  • Если вы знаете версию библиотеки (например gtk-2.0), включите её в путь: usr/include/gtk-2.0/gtk/gtk.h.

Примеры:

apt-file search "*/gtk.h"
apt-file search "usr/include/gtk-2.0/gtk/gtk.h"

4 Альтернативные инструменты и подходы

  • dpkg -S <файл> — помогает найти пакет для уже установленного файла. Работает только с локально установленными файлами.
  • apt-cache search <ключевое_слово> — ищет пакеты по описанию, но не по конкретным файлам.
  • online поисковики пакетов (packages.debian.org, packages.ubuntu.com) позволяют искать по имени файла в конкретной версии дистрибутива.

Когда использовать что:

  • Файл уже существует на диске: dpkg -S.
  • Нужно найти пакет по содержимому репозитория: apt-file или сайты пакетов.
  • Не знаете точного имени файла: apt-cache search + web-поиск.

5 Когда apt-file не помогает

Counterexamples / когда поиск может провалиться:

  • Файл является частью нестандартного репозитория, который не добавлен в /etc/apt/sources.list или в /etc/apt/sources.list.d; в этом случае apt-file не найдёт пакет до обновления индексов.
  • Файл принадлежит стороннему пакету, распространяемому вне репозиториев (например, tarball с исходниками). Тогда нужно искать по документации проекта.
  • Пакет был удалён из репозитория для текущей ветки дистрибутива.

Как действовать дальше:

  • Проверьте файл sources.list и включите соответствующий репозиторий.
  • Проверьте пакеты в online-индексах Debian/Ubuntu.
  • Свяжитесь с автором проекта или проверьте README для указаний о зависимостях.

6 Практическое правило и эвристика

Ментальная модель: представьте индекс пакетов как телефонную книгу, а файлы — как записи с именами абонентов. apt-file позволяет искать по имени абонента в книге всех репозиториев. Если абонент не найден — книга не полная или абонент вне сети.

Простая эвристика перед компиляцией:

  1. Прочитайте ошибки компилятора сверху вниз — первая ошибка часто самая важная.
  2. Выполните apt-file search для первого отсутствующего файла.
  3. Установите найденный dev-пакет (обычно с суффиксом -dev).
  4. Повторите сборку и переходите к следующей ошибке.

7 Playbook для разработчика или администратора (SOP)

Шаги:

  1. Убедитесь, что у вас есть права sudo/root.
  2. Выполните apt-get update.
  3. Установите apt-file, если он отсутствует: apt-get install apt-file.
  4. apt-file update.
  5. Для каждого сообщения “No such file or directory” выполните apt-file search <путь/к/файлу>.
  6. Установите соответствующие пакеты.
  7. Запустите сборку заново.
  8. Если apt-file ничего не нашёл — проверьте репозитории и внешний поиск по пакетам.

Критерии приёмки:

  • Проект собирается до следующей фазы (например, до компоновки или тестов) без ошибок о недостающих системных заголовках.
  • Все важные dev-зависимости установлены явно.

8 Чек-лист по ролям

Для разработчика:

  • Выполнил apt-get update.
  • Установил apt-file и обновил его базу.
  • Найден и установлен dev-пакет для первого отсутствующего файла.
  • Повторил сборку и проверил новые ошибки.

Для системного администратора:

  • Проверил /etc/apt/sources.list на наличие нужных репозиториев.
  • Обеспечил доступ к компонентам main, universe, multiverse при необходимости.
  • Запустил apt-file update после изменений репозиториев.

9 Рекомендации по безопасности и совместимости

  • Устанавливайте пакеты только из доверенных репозиториев.
  • Проверяйте подписи репозиториев и apt ключи при добавлении новых источников.
  • При работе в CI/CD окружении используйте кэш индексов и фиксированные версии пакетов для воспроизводимости.

10 Примеры и тестовые случаи

Тестовый кейс 1: отсутствует gtk/gtk.h

  1. apt-file search gtk/gtk.h -> находит libgtk2.0-dev
  2. apt-get install libgtk2.0-dev
  3. make -> исчезла ошибка gtk/gtk.h

Тестовый кейс 2: отсутствует libwnck/libwnck.h

  1. apt-file search libwnck/libwnck.h -> находит libwnck-dev
  2. apt-get install libwnck-dev
  3. make -> следующая проблема или успешно собралось

Критерии приёмки для теста: после установки пакетов исходные ошибки исчезают или появляются новые, но предыдущие не повторяются.

11 Быстрая шпаргалка команд

  • Установить apt-file:
apt-get install apt-file
  • Обновить базу apt-file:
apt-file update
  • Найти пакет по файлу:
apt-file search <путь/к/файлу>
  • Найти пакет для уже установленного файла:
dpkg -S <путь/к/файлу>
  • Искать пакет по описанию:
apt-cache search <ключевое_слово>

12 Решение проблем и отладка

Если apt-file ничего не находит:

  • Убедитесь, что вы выполнили apt-file update.
  • Проверьте, добавлен ли нужный репозиторий (main, universe и т.д.).
  • Проверьте актуальность версии дистрибутива — пакет мог быть удалён в текущей ветке.

Если найден пакет, но установка не решает проблему:

  • Проверьте, действительно ли файл присутствует в системе в ожидаемой версии: find /usr/include -name gtk.h
  • Проверьте зависимости пакета и наличие dev-версий библиотек.
  • Убедитесь, что сборочная система исходников ищет заголовки в правильных путях (PKG_CONFIG_PATH, CFLAGS, include paths).

Совет: для библиотек, использующих pkg-config, проверьте вывод pkg-config –cflags .

13 Диаграмма принятия решения

flowchart TD
  A[Проблема: отсутствие файла при сборке] --> B{Файл установлен локально?}
  B -- Да --> C[dpkg -S <файл>]
  B -- Нет --> D[apt-file search <путь/к/файлу>]
  D --> E{Найден пакет?}
  E -- Да --> F[apt-get install <пакет> и повторить сборку]
  E -- Нет --> G[Проверить репозитории / просмотреть online indices]
  G --> H[Добавить репозиторий или скачать пакет извне]
  H --> F
  C --> I[Если пакет нужен: apt-get install <пакет>]
  I --> F

14 Глоссарий (1 строка)

  • apt-file: инструмент для поиска файлов в пакетах репозиториев Debian/Ubuntu.
  • -dev: суффикс пакета с заголовками и файлами для разработки.
  • dpkg -S: поиск пакета для локально установленного файла.

15 Часто задаваемые вопросы

Вопрос: apt-file работает офлайн?

Нет. apt-file требует локального индекса, который формируется из удалённых репозиториев. Для офлайн-работы нужно заранее выполнить apt-file update и иметь кэш.

Вопрос: Как быстро найти, какой пакет предоставляет библиотеку для компоновки?

Используйте pkg-config для библиотек, поддерживающих его, например pkg-config –libs –cflags gtk+-2.0. Если это заголовочный файл, используйте apt-file search.

16 Ссылки

Резюме

Important: apt-file — простой и быстрый способ найти пакет по отсутствующему файлу и устранить ошибки сборки. Всегда обновляйте индексы и проверяйте репозитории перед поиском.

Ключевые шаги:

  • apt-get install apt-file
  • apt-file update
  • apt-file search <путь/к/файлу>
  • apt-get install <пакет>
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро