{{tag>linux dpkg system packages}}

====== dpkg - Пакетный менеджер ======

===== Продолжение настройки пакетов =====

<code bash>
$ dpkg --configure -a
</code>

===== Переустановка пакетов / Восстановдение пакетов =====

  * [[debian:repaire:packages]]

==== Исправить ошибки ====

  * [[system:apt|apt-get]] clean
  * [[system:apt|apt-get]] -f install
  * dpkg --configure -a


===== Список установленных пакетов =====

<code>
dpkg --get-selections
</code>

==== Список установленных PHP 7.0 ====

<code bash>
$ dpkg --get-selections | grep -v "deinstall" |grep php7.0| cut -f1
</code>

в строчку

<code bash>
$ dpkg --get-selections | grep -v "deinstall" |grep php7.0| cut -f1 | tr '\n' ' '
</code>
===== Поиск пакета, которому принадлежит конкретный файл. =====

Иногда не понятно какому пакету принадлежит данный файл в системе. Будь то исполняемый файл, библиотека и тп.

Для этого существует команда dpkg -S чего_ищем, но здесь есть маленькая хитрость:

Если указать просто имя програмки (к примеру ssh), то выдастся много ненужного мусора. Чтобы этого не происходило, нужно указывать полный путь к данной программе:

<code>
  $ which ssh
  
  /usr/bin/ssh
  
  $ dpkg -S /usr/bin/ssh
  
  openssh-client: /usr/bin/ssh
</code>  
или проще:
<code>
  $ dpkg -S `which ssh`
</code>
  
  openssh-client: /usr/bin/ssh
Здесь видно что программа ssh входит в пакет openssh-client.


===== Удаление группы пакетов по признаку в названии.=====

Иногда хочется удалить группу пакетов содержащих что-то общее в названии (к примеру kde или x-server).

Для этого поможет команда dpkg -l 'чего_ищем' - показывает все пакеты удовлетворяющие запросу.

К примеру: удалить все что содержит kde:

  * dpkg -P `dpkg -l '*kde*' | awk '{ print $2 }' | sed '1,6d'`
здесь конвеер в подоболочке:
  * dpkg -P пакет(ы) - удалить пакет(ы) вместе с конфигурационными файлами
  * dpkg -l '*kde*' - показать все пакеты содержащие слово kde в любой части слова
  * awk '{ print $2 }' - печатать только второй столбик (содержащий имена пакетов)
  * sed '1,6d' - удалить первые 6 строк (мусор)
У данного конвеера есть маленький недочет: dpkg пытается удалить даже не установленные пакеты в системе. Скриптик работающий более правильно пусть будет домашним заданием! ;-)

Прочие вкусности.

  * dpkg -r имя_пакета - удалить пакет
  * dpkg -P имя_пакета - удалить пакет вместе с конфигурационными файлами;
  * dpkg -s имя_пакета - показать подробную информацию о пакете;
  * dpkg -L имя_пакета - показать список файлов содержащихся в пакете.
  * dpkg --get-selections - Показывает список установленных пакетов

===== Убрать варнинги dpkg =====

У меня при работе с dpkg и apt-get появились такие сообщения

<code>
  dpkg: warning: parsing file '/var/lib/dpkg/status' near line 25810 package 'kernel-source-2.4.18':
   error in Version string 'linex3': version number does not start with digit
  dpkg: warning: parsing file '/var/lib/dpkg/available' near line 48390 package 'am-utils':
   'Replaces' field, reference to 'amd': error in version: version number does not start with digit
  dpkg: warning: parsing file '/var/lib/dpkg/available' near line 48393 package 'am-utils':
   'Conflicts' field, reference to 'amd': error in version: version number does not start with digit
   ...
</code>

Сообщение в которых фигурирует /var/lib/dpkg/available чистятся командой

  * $ sudo dpkg --clear-avail
Те пакеты, в варнингах которых находится /var/lib/dpkg/status, удалены, но их настройки остались.
Для того что бы окончательно почистить на ними можно применить команду apt-get purge

  * $ apt-get purge kernel-source-2.4.18
  
===== Заморозить пакет =====

  * aptitude -t squeeze install php
  * aptitude hold php


