Я пытаюсь найти способ получить список пакетов, которые больше не доступны в репозиториях, которые я включил. Эта рабочая станция прошла через несколько версий Ubuntu, и в нее были добавлены и удалены многие сторонние репозитории. Я хотел бы получить список программного обеспечения, которое у меня есть, из этих удаленных репозиториев, чтобы я мог очистить его или добавить обратно соответствующие репозитории.
ممکن است روش تمیزتری وجود داشته باشد ، اما در بالای سر من می توانید
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'
Возможно, есть более чистый способ, но вы, наверное, из моей головы можете сделать
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
Очистить первые несколько строк установленного
файла: у него будут заголовки.
Бонус, если кто-нибудь могу исправить мою подсветку синтаксиса ...
Дополнительная информация для исследования.
ubuntu-support-status echo "$(sudo apt-mark showmanual | wc -l) packages marked as 'manually installed'."
... ubuntu-support-status и apt-mark могут потребовать установки.
Если у вас установлен 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
Первый символ каждой строки указывает текущее состояние пакета. Наиболее распространены следующие состояния:
Второй символ указывает сохраненное действие, которое должно быть выполнено над пакетом, если есть, в противном случае отображается пустое пространство. Наиболее распространенные действия:
Если третий символ - A, пакет был установлен автоматически.
Полный список возможных флагов состояния и действий см. В разделе Доступ к информации о пакете в справочнике по aptitude. руководство.
sudo apt list --manual-installed | grep -v cosmic
Или любое другое слово, которое появляется больше всего в sudo apt list --manual-installed
grep -v фильтрует любое указанное слово.
BLOCKQUOTE>
Чтобы получить список приложений, которых нет в зарегистрированном репозитории или 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.
Как уже упоминалось, поиск apt-get не является хорошим методом проверки доступности пакета. Дополнительно я добавил все в одну строку:
for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done
Начиная с 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
и прочитать имена пакетов в разделе «Больше не загружается:».