Соглашения о присвоении имен / перевод между dpkg и способными пакетами?

Существует руководство, просто необходимо знать, где это. К этому можно получить доступ с man команда. Если Вы не уверены, как использовать его, ввести man man. man команда очень важна; помните это, даже если Вы забываете все остальное.

Руководство содержит подробную информацию о множестве тем, которые разделены на несколько разделов:

  1. Общие команды
  2. Системные вызовы
  3. Библиотечные функции, покрывая в особенности стандартную библиотеку C
  4. Специальные файлы (обычно устройства, найденные в /dev) и драйверы
  5. Форматы файлов и конвенции
  6. Игры и экранные заставки
  7. Разное
  8. Команды системного администрирования и демоны

Нотация ls(1) относится к ls страница в разделе 1. Считать его тип man 1 ls или man ls.

Чтобы постараться не быть сказанным читать руководство, когда Вы зададите вопрос, попробовать man command, apropos command, command -?, command --help, и несколько поисков Google. Если Вы не понимаете что-то в руководстве, заключаете его в кавычки в Вашем вопросе и пытаетесь объяснить, что Вы не понимаете. Обычно, когда они просят, чтобы Вы прочитали руководство, это - потому что они думают, что это будет более выгодно для Вас, чем простой, неполный ответ. Если Вы не знаете, какие страницы справочника релевантны, спрашивают.

3
02.12.2013, 23:24
2 ответа

Это - то же имя, apt просто frontend к dpkg. Проблема здесь - то, что команды не делают то, что Вы вещь они делают. Как объяснено в man apt-cache:

   pkgnames [prefix]
       This command prints the name of each package APT knows. The
       optional argument is a prefix match to filter the name list. The
       output is suitable for use in a shell tab complete function and the
       output is generated extremely quickly. This command is best used
       with the --generate option.

       Note that a package which APT knows of is not necessarily available
       to download, installable or installed, e.g. virtual packages are
       also listed in the generated list.

Так, apt-cache pkgnames списки все пакеты, доступные системе, независимо от того, установлены ли те пакеты или нет.

Если Вы хотите перечислить установленные пакеты только, Вы могли бы использовать dpkg -l или dpkg-query -l:

   -l, --list [package-name-pattern...]
          List packages matching given pattern. If no package-name-pattern
          is  given,  list all packages in /var/lib/dpkg/status, excluding
          the ones marked as not-installed (i.e.  those  which  have  been
          previously  purged). 

Это означает, что также перечислит те пакеты, которые были удалены, если их конфигурационные файлы все еще присутствуют, т.е. если они не были очищены. Второй столбец dpkg-query -l вывод является состоянием пакета, которое может быть любым из

          Package status:
            n = Not-installed
            c = Config-files
            H = Half-installed
            U = Unpacked
            F = Half-configured
            W = Triggers-awaiting
            t = Triggers-pending
            i = Installed

Так, для нахождения тех пакетов, которые в настоящее время устанавливаются Вы захотите выбрать тех, состояние которых i. Сделать это, просто grep для строк, 1-й символ которых - что-либо и чей второй i:

dpkg-query -l | grep '^.i'

Можно легко проверить, что две команды отличаются и что apt-cache возвраты тысячи большего количества результатов, чем dpkg. Например, в моей системе:

$ dpkg-query -l | grep '^.i' | wc -l
3938
$ apt-cache pkgnames | wc -l
39889
3
27.01.2020, 21:23
  • 1
    Супер полезный, спасибо. Ваш pkgnames придумывает почти 40k результаты, в то время как мой только придумывает вокруг 28k. Это произошло бы из-за различий в наших sources.list файлах? –  some1 03.12.2013, 00:00
  • 2
    @some1 да, точно. Другие источники означают различные пакеты. –  terdon♦ 03.12.2013, 00:03

Проблема состоит в том, что необходимо установить 'шаблон' (с кавычками) вместо того, чтобы просто написать имя:

$ dpkg-query -W 'samba'
samba   
$ dpkg-query -W 'samba*'
samba   
samba-client    
samba-common    2:3.6.9-1ubuntu1.1
samba-common-bin    2:3.6.9-1ubuntu1.1
samba-tools 
samba4-clients  
samba4-common   

Вот почему никакой пакет не появляется:

$ dpkg-query -W 'rkhunter' 
rkhunter    1.4.0-2

Другие вещи, которые могут работать:

dpkg-query -W '*a'
dpkg-query -W 'a*b*'
dpkg-query -W '?a*'

и т.д.

Нормальная оболочка wildchars позволяется в шаблоне имени пакета. Обратите внимание, что необходимо будет, вероятно, заключить шаблон имени пакета в кавычки, чтобы препятствовать тому, чтобы оболочка выполнила расширение имени файла.

0
27.01.2020, 21:23

Теги

Похожие вопросы