Как получить список устаревших пакетов?

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

26
задан 25 January 2012 в 01:19

8 ответов

ممکن است روش تمیزتری وجود داشته باشد ، اما در بالای سر من می توانید

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

چند خط اول پرونده نصب شده را پاک کنید: آن هدر خواهد داشت.

اگر کسی بتواند برجسته سازی نحو من را برطرف کند ، جایزه خواهد گرفت ... متأسفانه نحو کمی ناخوشایند است و برای یافتن مستندات باید از صفحه اصلی کاوش کنید ، اما ارزش آن را دارد.

apt-show-version همچنین می تواند مفید باشد:

apt-show-versions | grep 'No available version'
28
ответ дан 25 January 2012 в 01:19

Возможно, есть более чистый способ, но вы, наверное, из моей головы можете сделать

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

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

Бонус, если кто-нибудь могу исправить мою подсветку синтаксиса ...

0
ответ дан 25 January 2012 в 01:19

Дополнительная информация для исследования.

ubuntu-support-status 
echo "$(sudo apt-mark showmanual | wc -l) packages marked as 'manually installed'."

... ubuntu-support-status и apt-mark могут потребовать установки.

1
ответ дан 25 January 2012 в 01:19

Если у вас установлен aptitude , используйте

aptitude search '?obsolete'

или его краткую форму

aptitude search '~o'

Вот пример вывода

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library

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

  • p, что означает, что в системе нет следов пакета,
  • c, что означает, что пакет был удален, но его файлы конфигурации остаются в системе,
  • i, что означает, что пакет установлен, и
  • v, что означает, что пакет является виртуальным.

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

  • i, означающее, что пакет будет установлен,
  • d, означающий, что пакет будет удален, и
  • p, означающий, что пакет и его файлы конфигурации будут удалены.

Если третий символ - A, пакет был установлен автоматически.

Полный список возможных флагов состояния и действий см. В разделе Доступ к информации о пакете в справочнике по aptitude. руководство.

7
ответ дан 25 January 2012 в 01:19
sudo apt list --manual-installed | grep -v cosmic

Или любое другое слово, которое появляется больше всего в sudo apt list --manual-installed

grep -v фильтрует любое указанное слово.

0
ответ дан 25 January 2012 в 01:19

Чтобы получить список приложений, которых нет в зарегистрированном репозитории или PPA, сделайте следующее:

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'

Это должно вывести такой текст:

app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive

Для меня это сработало и показало три приложения, которые я были установлены с использованием пакетов DEB и не были доступны в репо или PPA.

Однако помните, что невозможно проверить все программы, только те, которые прошли через dpkg . Например, некоторые приложения устанавливаются путем простого извлечения их в нужные папки, а другие используют отдельную корзину или скрипт установщика.Так что лучше всего самому вести список приложений, установленных любым способом, кроме APT.

8
ответ дан 25 January 2012 в 01:19

Как уже упоминалось, поиск apt-get не является хорошим методом проверки доступности пакета. Дополнительно я добавил все в одну строку:

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done
0
ответ дан 25 January 2012 в 01:19

Начиная с Ubuntu 19.10, также можно запустить

apt list ?obsolete

, чтобы получить список устаревших пакетов.

Для любого выпуска вы можете использовать следующий однострочник Bash:

comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)

Для этого не нужно устанавливать дополнительные пакеты, к тому же это относительно быстро. Это также обнаружит частично установленные пакеты (но не найдет те, у которых остались только файлы конфигурации; однако это можно легко изменить). Примечание: здесь не важно, какой архитектурой являются пакеты.

Если вы хотите включить пакеты, у которых установлена ​​версия, отличная от версии, доступной в репозиториях, вы можете выбрать одно из следующих действий:

Использовать современный apt :

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'

Еще один вариант - запустить

ubuntu-support-status --show-unsupported

и прочитать имена пакетов в разделе «Больше не загружается:».

4
ответ дан 23 November 2019 в 01:58

Другие вопросы по тегам:

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