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

Обходной путь

. /etc/profile.d/vte.sh

не работал для меня. Тем не менее, что было сделано: я, наконец, обнаружил, что на вкладке «Настройки» в профиле «Настройки» (щелкните правой кнопкой мыши в терминале-> Профили), сняв флажок «Запустить пользовательскую команду вместо моей оболочки», если она отмечена, также можно решить этот выпуск.

16
задан 25 January 2012 в 03:19

5 ответов

aptitude search '~o'

Aptitude имеет очень мощный поиск. К сожалению, синтаксис немного громоздкий, и вам нужно вырыть man-страницу, чтобы найти документацию, но это того стоит.

apt-show-versions также может быть полезным:

apt-show-versions | grep 'No available version'
17
ответ дан 25 May 2018 в 14:54

Чтобы получить список приложений, которые не находятся в зарегистрированном репозитории или 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, и не были доступны в Repo или PPA.

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

5
ответ дан 25 May 2018 в 14:54
  • 1
    Работает для всех моих локальных пакетов dpkg. Одно исключение. В нем перечислены skype-bin, тогда как apt-cache policy skype-bin ясно показывает каноническое партнерское репо. Я не уверен, что происходит. Вопрос Multiarch? Еще +1 для apt-show-versions! – gertvdijk 6 January 2013 в 03:37
  • 2
    aptitude вызывает эти «устаревшие» пакеты. См. Комментарий хронита выше. – Henk Poley 5 March 2013 в 22:54

Если у вас установлено использование 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

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

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

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

p, что означает, что в системе нет следа пакета d, что означает, что пакет будет удален, а c, это означает, что пакет был удален, но его файлы конфигурации остались в системе,

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

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

4
ответ дан 25 May 2018 в 14:54
  • 1
    aptitude search ?obsolete может работать в bash, но вы должны использовать aptitude search '?obsolete' – A.B. 1 July 2015 в 21:28
  • 2
    не могли бы вы добавить некоторые детали при разборе вывода? – Elder Geek 2 July 2015 в 04:54
  • 3
    «Устаревший» отличается от «~ o»? – Sean 2 July 2015 в 21:20
  • 4
    @ A.B. В справочном руководстве по шаблонам поиска не упоминается использование одинарных кавычек, поэтому их следует избегать. Однако он показывает использование двойных кавычек в случае пробелов в поисковых терминах, но это не так. – Demis Palma ツ 3 July 2015 в 01:59
  • 5
    @Sean Нет, они не разные. ~ o - короткая форма для «устаревшего». – Demis Palma ツ 3 July 2015 в 02:00

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

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

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

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

1
ответ дан 25 May 2018 в 14:54
  • 1
    если вы собираетесь использовать вывод dpkg -l для получения списка установленных пакетов, вы должны ограничить результаты на строки с «i» во втором столбце, так как dpkg также отобразит пакеты, которые не установлены (возможно, удалены, но не очищается). в качестве примера, изменив вашу первую команду как dpkg -l | grep '^.[^i]' | cut -f 3 -d ' ', она вернет список пакетов, которые НЕ установлены. (но когда-то были) – stew 25 January 2012 в 01:46
  • 2
    Кроме того, apt-cache search someinstalledpackage вернет что-то, даже если пакет недоступен из репо, поэтому я не считаю, что это будет работать вообще. – stew 25 January 2012 в 01:54
  • 3
    @stew. Я оставлю это здесь, чтобы узнать, достигнут ли кто-нибудь выводы, но ваш ответ определенно намного лучше. +1 к вам. – Jeff Ferland 25 January 2012 в 01:59

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

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done
1
ответ дан 25 May 2018 в 14:54

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

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