Изучаем пакетную базу операционной системы Debian

prolinux

Опубликован:  2024-01-06T04:40:22.478861Z
Отредактирован:  2024-01-06T04:40:22.478861Z
Статус:  публичный
11
0
0

Как известно, операционная система Debian распространяется посредством так называемых бинарных пакетов. Пакет - это особым образом упакованный архив, в котором хранятся готовые к использованию файлы какой-то конкретной программы, сценарии их распаковки при установке, список необходимых этой программе других пакетов, так называемых зависимостей и некоторые другие специфические подробности. Установка программы в операционную систему в этом случае заключается в простой распаковке файлов по заданному сценарию. В очередном лайфхаке на CodeJ рассмотрим пару полезных приёмов работы с пакетным менеджером dpkg, которые качественно облегчат жизнь оператору компьютера в процессе работы с Debian любой версии.

Пакетная база Debian

Пакет Debian представляет собой бинарный файл, у которого, как и у любого другого компьютерного файла, есть имя и расширение. Пакеты Debian обычно имеют расширение .deb. Такие файлы создаются разработчиками путём компиляции исходного кода программы и сборки пакета, а затем помещаются в специальное сетевое хранилище, откуда любой желающий может эти пакеты скачать и установить на свой компьютер.

Для работы с .deb пакетами, сборки, упаковки, установки в систему разработана специальная программа - пакетный менеджер. Пакетный менеджер Debian называется dpkg. Он присутствует в развёрнутой операционной системе изначально, как принято говорить - "из коробки" даже в самом стартовом наборе - так называемой базовой системе.

Пакетная база Debian имеет в своём составе несколько десятков тысяч установочных пакетов - программы почти на все случаи жизни. На домашней рабочей станции обычно установлено достаточно много программ, например на моей рабочей машине установлено 2660 пакетов. Неплохо бы научиться ориентироваться в этом множестве, и сейчас я покажу пару полезных приёмов работы с dpkg.

Определяем имя пакета по имени исполняемого файла программы

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

  1. В командной строке;

  2. В графическом окружении с помощью специально предназначенных для этого элементов пользовательского интерфейса.

Например, dpkg является утилитой командной строки, и в Debian для командной строки есть очень много полезных программ. Иногда пользователь знает имя конкретной программы, которую он обычно часто запускает в командной строке, но не знает имя пакета, из которого эта программа установлена.

Знать имя пакета полезно во многих ситуациях, особенно при установке операционной системы на компьютер, иногда это приходится делать. Давайте посмотрим на примере программы opusenc, как узнать имя пакета, зная только имя исполняемого файла программы.

Итак, opusenc.., этой программой я пользуюсь довольно часто для конвертирования звуковых дорожек некоторых роликов youtube.com в формат Opus. Для начала мне необходимо узнать, где хранится исполняемый файл программы. Это сделать довольно легко с помощью команды which.

$ which opusenc

Команда выведет в терминал одну единственную строчку, вот как она выглядит в моём терминале.

/usr/bin/opusenc

Отлично..! У нас есть адрес исполняемого файла, и теперь я могу запросить у пакетного менеджера dpkg имя пакета, из которого этот файл был установлен в систему. Достаточно указать ключ -S и адрес исполняемого файла в файловой системе, который уже известен.

$ dpkg -S /usr/bin/opusenc
opus-tools: /usr/bin/opusenc

Выхлоп предложенной команды в терминал сообщил, что opusenc пришёл в систему при установке пакета opus-tools. Теперь, зная имя пакета и устанавливая систему на новый компьютер, или на компьютер друга не составит труда установить Opus.

Определяем имя исполняемого файла программы

Иногда перед пользователем операционной системы стоит обратная задача.

Допустим, нам нужен Opus и мы установили в систему пакет opus-tools... Для начинающих пользователей совсем не очевидно, а как же воспользоваться программой, которую они только что установили. В этом случае на помощь опять приходит пакетный менеджер dpkg. У нас есть имя пакета, а у dpkg есть ключ -L. С помощью этого ключа можно увидеть состав установленного пакета, то есть все файлы и их адреса в файловой системе. Вводим...

$ dpkg -L opus-tools

Предложенная команда делает в терминал следующий выхлоп.

/.
/usr
/usr/bin
/usr/bin/opusdec
/usr/bin/opusenc
/usr/bin/opusinfo
/usr/share
/usr/share/doc
/usr/share/doc/opus-tools
/usr/share/doc/opus-tools/AUTHORS
/usr/share/doc/opus-tools/changelog.Debian.amd64.gz
/usr/share/doc/opus-tools/changelog.Debian.gz
/usr/share/doc/opus-tools/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/opusdec.1.gz
/usr/share/man/man1/opusenc.1.gz
/usr/share/man/man1/opusinfo.1.gz

Да, именно так выглядит состав пакета opus-tools. Здесь мы видим адреса, куда распакованы все принадлежащие этому пакету файлы. А зная назначение каталогов файловой системы Unix, мы очень просто сделаем очевидный вывод. В файловой системе Unix каталог /usr/bin предназначен для хранения исполняемых файлов пользовательских программ. Пакетный менеджер показал нам, что в этот каталог из пакета opus-tools распакованы три исполняемых файла:

  • opusdec - декодер Opus;

  • opusenc - энкодер Opus;

  • opus-info - информационная утилита Opus.

Из полученного при помощи dpkg списка мы также видим, что на каждую утилиту Opus пакет предлагает ещё и соответствующую этой утилите man-страницу. А это значит, что любой пользователь, даже самый зелёный хомячок, теперь может получить необходимую справочную информацию об особенностях и способах использования утилит Opus.

Определяем наличие пакета в системе и его версию

Иногда бывает полезно знать, пакет какой именно версии установлен в системе. Например, при обновлении операционной системы случается так, что обновляется ядро. При этом ядро старой версии лучше бы удалить, потому что оно становится ненужным балластом и только занимает место на диске, за время эксплуатации операционной системы таких ядер может накопиться очень много. Какой именно пакет удалять? Дилемма...

В очередной раз на помощь приходит dpkg. У программы есть ключ -l, с его помощью можно получить список всех установленных в системе пакетов с указанием их версий. Но такой список будет очень большим, напоминаю, в моей системе установлено 2660 пакетов, искать в нём установленные ядра - та ещё затея... Для этого воспользуемся программным каналом и утилитой grep, пусть она ищет ядра в выхлопе dpkg. Вводим...

$ dpkg -l | grep linux-image

В моей системе эта команда выдаёт в терминал следующее.

ii  linux-image-6.6.8-amd64                          6.6.8-1                                   amd64        Linux 6.6 for 64-bit PCs (signed)
ii  linux-image-amd64                                6.6.8-1                                   amd64        Linux for 64-bit PCs (meta-package)

Из этого выхлопа мы видим, что в системе установлено одно единственное ядро версии 6.6.8. Следовательно, никаких других, устаревших версий ядра в операционной системе нет, администратор системы прилежный и поэтому может спать спокойно... :)

Выводы и умозаключения

  1. Пакетная база Debian довольно обширна, и администратору домашнего компьютера будет очень полезно научиться ориентироваться в ней и получать информацию об установленных в системе пакетах их файлах и способах использования.

  2. В Debian легко получить всю необходимую информацию о любом установленном в систему пакете с помощью пакетного менеджера dpkg.

  3. Иногда выхлоп некоторых консольных утилит бывает достаточно обильным и может занимать несколько страниц на терминале, чтобы не листать этот выхлоп в поисках нужного, во многих ситуациях полезно использовать программный канал и фильтровать вывод некоторых консольных команд по регулярному выражению, UNIX-WAY - это красиво.

Метки:  linux, cli, debian, grep, terminal, opus, dpkg