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

Можно объединить критерии с -o как предложено Shadur. Отметьте это -o имеет более низкий приоритет, чем сопоставление, таким образом, Вам, возможно, понадобятся круглые скобки.

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \)  # all .jpg or .png images modified in the past week

На Linux можно использовать -regex объединить расширения более кратким способом. Значением по умолчанию regexp синтаксис является Emacs (основной regexps плюс несколько расширений такой как \| для чередования); существует опция переключиться на расширенный regexps.

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

На FreeBSD, NetBSD и OSX, можно использовать -regex объединенный с -E для расширенного regexps.

find -E . -regex '.*\.(jpg|png)'

53
21.07.2014, 21:13
10 ответов

Просто код

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
  | cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt

Объяснение

Один способ думать об этой проблеме состоит в том, чтобы повредить это в три части:

  • Как я получаю список пакетов, не установленных как зависимости?
  • Как я получаю список пакетов, установленных по умолчанию?
  • Как я могу получить различие между этими двумя списками?

Как я получаю список пакетов, не установленных как зависимости?

Следующая команда, кажется, работает над моей системой:

$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt

Аналогичные подходы могут быть найдены в ссылках, которые Gilles отправил как комментарий на вопрос. Некоторые источники утверждают, что это будет только работать при использовании способности для установки пакетов; однако, я почти никогда не использую способность для установки пакетов и нашел, что это все еще работало. --disable-columns препятствует тому, чтобы способность дополнила строки имен пакета с пробелами, которые препятствовали бы сравнению ниже. | sort -u сортирует файл и удаляет дубликаты. Это делает заключительный шаг намного легче.

Как я получаю список пакетов, установленных по умолчанию?

Примечание: Этот раздел начинается с 'неправильным путем', что я думаю, иллюстративно. Вторая часть кода является той, которая работает.

Это немного более хитро. Я первоначально думал, что хорошее приближение будет всеми пакетами, которые являются зависимостями метапакетов, минимальных человечностью, стандартных человечностью, настольных человечностью, и различный Linux связанные с ядром пакеты. Несколько результатов на поисках Google, казалось, использовали этот подход. Для получения списка этих зависимостей я сначала попробовал следующее (который не работал):

$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u

Это, кажется, не учитывает некоторые пакеты, которые я знаю, должен был прибыть по умолчанию. Я все еще полагаю, что этот метод должен работать, если Вы создаете правильный список метапакетов.

Однако кажется, что зеркала Ubuntu содержат "явный" файл, который содержит все пакеты в установке по умолчанию. Декларация для Ubuntu 12.04.3 здесь:

http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest

Если Вы перерываете эту страницу (или страницу зеркала ближе Вам):

http://mirror.pnl.gov/releases/precise/

Необходимо смочь найти ".manifest" файл, который соответствует версии и архитектуре, которую Вы используете. Извлечь просто пакет называет, я сделал это:

wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt

Список был, вероятно, уже отсортирован и уникален, но я хотел быть уверенным, что он был правильно отсортирован для создания следующего шага легче. Я затем вставил вывод defaultinstalled.txt.

Как я могу получить различие между этими двумя списками?

Это - самая легкая часть, так как большинство подобных Unix систем имеет много инструментов, чтобы сделать это. comm инструмент является одним из многих способов сделать это:

comm -23 currentlyinstalled.txt defaultinstalled.txt

Это должно распечатать список строк, которые уникальны для первого файла. Таким образом это должно распечатать список установленных пакетов не в установке по умолчанию.

46
27.01.2020, 19:33
  • 1
    Что Ваш первый конвейер делает это aptitude search '~i!~M' -F %p не? –  ephemient 30.10.2010, 07:57
  • 2
    @ephemient: Вероятно, ничто. Я не знаю много о способности и таким образом используемых инструментах, с которыми я знаком вместо того, чтобы рыть вокруг в файле человека программы, которую я никогда не использую. –  Steven D 30.10.2010, 19:38
  • 3
    Вы отчасти уничтожаете мою надежду, я думал, что был некоторый стандартный простой способ :( –  phunehehe 02.11.2010, 03:31
  • 4
    Это почти работает, но все еще не корректно. Существует несколько пакетов и библиотек, которые я, конечно, не устанавливал вручную содержавшийся в получающемся списке. Я использовал http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest и дополнительное | sed "s/ *$//" но все еще провал. –  jmiserez 06.07.2014, 17:14
  • 5
    Первый шаг, который получает список пакетов, не установленных как зависимости, может быть заменен apt-mark showmanual | sort -u, как показано в других ответах. Более простой, и не полагается aptitude который не установлен по умолчанию. –  skagedal 03.05.2015, 09:44

Вот некоторый демонстрационный вывод cat /var/log/apt/history.log:

Start-Date: 2011-01-22  00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22  00:43:48

Start-Date: 2011-01-23  01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23  01:16:31

Что касается Вашего вопроса, отфильтруйте материал с grep (cat /var/log/apt/history.log | grep Commandline).

Обратите внимание, что эти файлы повернуты, таким образом проверьте на других, таким образом, Вы ничего не пропускаете:

$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz

Примечание:

  • Я проверил и способность и синаптический (версии 0.70 и 0.6.3 соответственно), и они оба регистрируют свои операции по тому файлу журнала. Одна неудача с ними состоит в том, что у них нет строки, запускающейся с Commandline, так grep прием не будет работать с ними.
8
27.01.2020, 19:33
  • 1
    Интересное решение. Необходимо будет скорректировать команду grep немного, чтобы просто получить список пакетов и составлять пакеты, установленные aptitude и другие диспетчеры пакетов. Если Ваши журналы вращались далеко, хорошо затем Вам не повезло. Обновленный –  Steven D 24.01.2011, 00:27
  • 2
    @steven. Мой grep-fu имеет новичка, таким образом, я оставлю это читателю. Кроме того, я не знаю, вращается ли вещь далеко. Я только имею в файлы там сам. –  tshepang 24.01.2011, 01:03
  • 3
    Вращаются ли они, далеко будет зависеть от Вашей установки logrotate и какой длины Ваша система была вокруг. Я не уверен в значениях по умолчанию Ubuntu, так как это было долгое время, так как я изменил их. –  Steven D 24.01.2011, 05:40

Вы хотели бы взглянуть на эту статью.

В конце статьи существует сценарий Python, который должен сделать то, что Вы хотите.

Это было записано для (k) человечности. но должен работать на Ubuntu также.

3
27.01.2020, 19:33
  • 1
    ссылка больше, кажется, не работает. –  rog 16.07.2013, 11:13
  • 2
    файла как они - то, почему важно включать релевантную информацию в Ваш ответ. –  whitehat101 14.11.2015, 02:52

Выезд /var/log/apt/term.log

1
27.01.2020, 19:33
  • 1
    это - довольно болезненный способ сделать вещи, и нет никакого различия между пакетами, которые я устанавливаю сам, и втянутые зависимостями –  phunehehe 29.10.2010, 10:18
  • 2
    , который я согласовываю, но я не знал, что склонный отслеживает те:/Теперь, я знаю благодаря объему плазмы Stefan :) –  Joril 29.10.2010, 17:00

Согласно man apt-mark:

apt-mark showauto
apt-mark showmanual
9
27.01.2020, 19:33
  • 1
    showmanual показывает вещи как xserver-xorg-video-vesa, который я клянусь, что не устанавливал вручную. –  phunehehe 22.09.2012, 06:18

Я столкнулся с этой красивой остротой, в то время как я искал этот запрос

Один лайнер

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )`

Эта острота фильтрует пакеты, установленные системой с помощью журналов от /var/log/installer/initial-status.gz

Я отправлю ссылку на исходный поток, когда я нашел его, поскольку эта острота не является моей и и я, может казаться, не помню, где я видел его.

7
27.01.2020, 19:33

Ниже дополнение к ответу D Steven.

Следующая строка, кажется, усекает имена пакета в 32 символах:

aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt

Это, кажется, работает:

aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt

см. этот ответ

2
27.01.2020, 19:33

Вы можете использовать любой из этих двух однострочников. Оба дают одинаковый результат на моей машине и являются более точными, чем все решения, предложенные до сих пор (июль 2014 г.) в этом вопросе. Они представляют собой комбинацию двух ответов (1) и (2) . Обратите внимание, что я изначально разместил этот ответ здесь .

Использование apt-mark :

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Использование aptitude :

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Очень немногие пакеты все еще не могут пройти через трещины, хотя я подозреваю, что эти на самом деле установлен пользователем, либо сразу после установки через настройку языковой локализации, либо, например, через установщик кодеков Totem. Кроме того, похоже, что версии заголовков linux также накапливаются, хотя я установил только метапакет, не зависящий от версии. Примеры:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

Как это работает

  1. Получить список пакетов, установленных вручную. Для возможности дополнительный sed удаляет оставшиеся пробелы в конце строки.
  2. Получить список установленных пакетов сразу после новой установки.
  3. Сравните файлы, выведите только те строки в файле 1, которых нет в файле 2.

Другие возможности также не работают:

  • Использование ubuntu-14.04-desktop-amd64. файл manifest ( здесь для Ubuntu 14.04) вместо /var/log/installer/initial-status.gz . Другие пакеты отображаются как установленные вручную, хотя это не так.
  • Использование apt-mark showauto вместо /var/log/installer/initial-status.gz . apt-mark , например, не включает пакет xserver-xorg, в то время как другой файл включает.

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

24
27.01.2020, 19:33

¡Muchas gracias y felicitaciones a los que se les ocurrió esa joya de guión!
Quería agregar mis 2¢ y agregué la fecha de instalación que deduzco de $info.
No dominé los detalles de por qué los archivos $info se actualizan o no y cuándo, pero funciona en la práctica.
Mi secuencia de comandos enumera las actualizaciones más recientes de los paquetes que no son de dependencia agregados después de la instalación.
Dándole una verificación periódica, estaba viendo lo que habría registrado manualmente sin una sola falla.
Es decir, lotes de paquetes instalados por el mismo motivo. Desafortunadamente, las actualizaciones rompen ese orden.
Después de una actualización del sistema, tenía una lista de mis paquetes agregados que la actualización no actualizó, seguidos de los que sí.
¡Limpio! Disfrutar.

info='/var/lib/dpkg/info/'

comm -13 > /tmp/packages \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )

while read n; do
  echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
    | tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
0
27.01.2020, 19:33

Вы также можете посмотреть файл /var/lib/apt/extended_states.

cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'

Это полезно, если вы хотите узнать, что было установлено на старом разделе.

1
27.01.2020, 19:33

Теги

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