Як отримати список доступних (тобто невстановлених) пакетів у Debian?


19

По суті, я шукаю еквівалент Debian:

yum list available

показати мені, які пакунки доступні (хоча зараз не встановлені). Я вважаю за краще щось, що можна запустити з консолі, оскільки це на віддаленому сервері. Спасибі.

Відповіді:


7

grep-dctrlі його похідні забезпечують чудовий спосіб запиту файлів підходящого кешу. (Ви можете встановити ці інструменти на ubuntu за допомогою sudo apt-get install dctrl-tools)

У випадку наявних (але не обов'язково встановлених) пакетів, ви можете використовувати grep-available. Наприклад, перелічити всі доступні пакети:

grep-available  -s Package .

Редагувати:

aptitude може показати вам список не встановлених пакетів, просто запустивши його.

Ви також можете отримати список не встановлених пакетів aptitudeза допомогою:

aptitude -F "%p" search "?not(?installed)"

Зауважте, що з новими пакетами з декількома арками ви отримаєте пакунки для інших архітектур, перелічених у цьому результаті. Наприклад, я отримую:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

У мене bashвстановлений пакет, але це версія amd64, оскільки моя ОС встановлена ​​з версією amd64 Ubuntu Precision. Якщо ви не хочете бачити ці пакети для інших архітектур, ви можете виключити рядки, що містять ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

Дякую, але проблема в цьому полягає в тому, що мені доведеться пробиватися через усі списки пакунків для вибраних вами сховищ. Можливо, кращим способом візуалізації проблеми було б таким чином: уявіть, що X є універсальним набором усіх пакунків у сховищах пакунків Debian, на який вказується мій сервер, а Y - набором пакунків, які я встановив на вказаному сервері; що, по суті, я прагну - це X - Y. Тепер я розумію, що я можу це зробити програмно, але я сподівався, що буде достатньо простої команди для досягнення того ж результату в системі Debian.
freakwincy

Щойно побачив вашу відредаговану відповідь. Це саме те, що я шукав! Спасибі.
freakwincy

PS Я би відповідав за вашу відповідь, але поки не накопичив достатньо репутаційних балів.
freakwincy

Без проблем. Ласкаво просимо до SU до речі ;-)
phaphink

16

apt-cache використовується для запиту кеш пакетів:

apt-cache pkgnames | сортувати
APT-кеша пошуку річ
APT-кеша пошуку --names тільки річ

дякую, але я боюся, що це не працює. Я порівняв список, сформований першою командою, з попередньо сформованим списком встановлених пакетів, який я отримав таким чином: code"dpkg --get-select | grep '[[: space:]] install $' | awk '{print $ 1}' > встановлено.txt "і знайдено дублікати. Інші дві вказані вами команди не працюватимуть, оскільки я не шукаю конкретний пакет, а будь-який пакет, який наразі не встановлений.
freakwincy

2

Використовуйте apt-cacheдля цього:

apt-cache search package

Оскільки в системі apt-cacheвикористовується лише кеш пакетів, переконайтеся, що цей кеш оновлений:

apt-get update

Ви також можете скористатися утилітою, apt-fileякщо вам відомо ім’я файлу, який ви хочете шукати; це, однак, слід додати до системи. Наприклад:

apt-file search somefilename

Я схильний використовувати apt-cacheодин із наступних способів:

apt-cache search package | sort | grep item

(Це показує вам речі , які мають елемент на самому справі в їх резюме або імен.)

apt-cache search thing | sort | less

(Цей предмет шукає , а потім сортує його для приємного перегляду less.)


2

Моя точка зору - працювати з командами, встановленими за замовчуванням, і уникати зайвих пакетів, якщо немає якоїсь конкретної причини.

У моєму Debian з GNU розбийте ці прості команди

apt list
apt list --all-versions

дає список будь-якого (встановленого та не встановленого). Тоді я можу обмежити результати grep "встановлено" або grep -v "встановлено". Він також може поєднуватися з одним або декількома назвами пакунків (приймаються дикі знаки).

Перемикач "-всі-версії" забезпечує виведення окремих рядків для кожної версії пакета (стабільний, тестуючий, нестабільний, експериментальний).

Простий "підходящий список" дає лише одну (найвищий пріоритет) версію.


0

Суворо поставивши запитання (ви хочете показати список не встановлених пакетів), спробуйте використовувати

(відредаговано відповідно до коментарів нижче)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Хоча не впевнений у точному синтаксисі, оскільки я це пишу на вікні вікна і не можу перевірити. Можливо, спробуйте змінити те, на що ви жартуєте


У цьому списку встановлені пакети, не видалені .
phaphink

@Raphink: Вибачте, я змінив публікацію, щоб виправити це
PPC

Немає проблем, але ви все ще не перераховуєте пакети, які не встановлені. Виключивши «II» пакети (які насправді не зовсім те , що ваше вираз робить, ви повинні використовувати '^ii'замість '[ii]'), вам не вистачає на пакети, які встановлені , але не сконфігуровані, наприклад , (наприклад , iFчи iH, наприклад).
phaphink

@PPC: На жаль, це не працює, як лише dpkg -l, перераховує лише встановлені пакети, тобто всі пакунки знаходяться за допомогою "ii", тому трубопровід результатів grep за допомогою прапорців --invert-match або -v дає лише a серія тире, яка є роздільником заголовка списку. Все одно, дякую.
freakwincy

@ freakwincy: Правильно! Вибачте за те, що не тестували його перед відправленням (працюю над Windows). Відповідно до manpage, ви повинні використовувати "dpkg -l '*'" для переліку всіх пакетів.
КПП
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.