Перерахуйте необов'язкові залежності з pacman на arch linux


23

Я використовую аркуш Linux.

Чи є спосіб перерахувати необов'язкові залежності всіх встановлених пакетів? І якщо так, чи можу я фільтрувати цей список, щоб побачити лише відсутні (не встановлені) пакети?


1
Я не використовував Arch, але "залежність" не звучить необов'язково (це не в інших дистрибутивах).
Йорданм

AFAIK, я не думаю, що ти можеш це зробити з Pacman відразу. Але дуже можливо написати невеликий сценарій, щоб це зробити. Запросити pacman на список встановлених пакетів. Запропонуйте Яурту отримати свої PKGBUILD і прочитати список оптимістів. В останній версії pacman-git є команда, яка визначає, чи вже встановлені optdeps.
darnir

@jordanm: Як і побудови залежностей та факультативних залежностей. Optdeps потрібні лише для певних функцій пакету. Тож, якщо ви не використовуєте цю функцію, вам не потрібно переповнювати систему навантаженням залежностей.
darnir

Я використовувавpacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

Відповіді:


5

Ви можете використовувати expac для запиту pacmanбази даних.

Щось на зразок:

awk 'NF>=2' <(expac "%n %O") > optdeps

надрукує список усіх встановлених пакетів на вашій машині та optdependsдля кожного з них ( %O) 1 у файл, який називається optdeps. Потім можна порівняти це зі списком встановлених пакетів optdepends.

Дивіться man expacповний список варіантів.


1. Це верхній регістр O, а не нуль. Тому що у нас не може бути шрифту, який би відрізнявся між двома ...


[poke] У нас зараз такий шрифт. :)
муру

4

В AUR-сховищі є приємна утиліта (aur / pacdep).

pacdep має багато варіантів - лише один приклад - дізнайтеся необов'язкові пакети для "thunar-archive-plugin":

> pacdep -oppp thunar-archive-plugin
[...]
Optional dependencies:    6.16 MiB
  extra/file-roller     3.89 MiB
  extra/kdeutils-ark    1.12 MiB
  community/xarchiver   1.16 MiB
[...]

Вихідний результат означає, що жоден з необов'язкових пакетів не встановлений. Після установки "xarchiver" виглядає висновок

[...]
Optional dependencies:    6.16 MiB
 local:    1.16 MiB
  xarchiver            1.16 MiB
 sync:     5.01 MiB
  extra/file-roller    3.89 MiB
  extra/kdeutils-ark   1.12 MiB
[...]

Я знайшов (першу частину) цю відповідь на
http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependitions


3

Це не зовсім ефективно, але ви знайдете те, що хочете (у КОЛІРІ!):

pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do 
   echo -n "$pkg => "; 
   for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do 
       grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ; 
   done 
   echo
done 

Я не зовсім впевнений, але чи не повинен це бути ||замість &&після grep, а потім дужки навколо решти рядка?
Rörd

І що ще важливіше, для цього, мабуть, слід використовувати розділ «Необов’язкові депси» замість розділу «Залежить від» вихідного пакету.
Rörd

Наприклад, з xmms2 :pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_

2

Хоча мені довелося помітити, що рішення @ DarkHeart насправді не працює, це надихнуло мене зробити робоче. (хоча кольорів немає)

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

Перерахування всіх необов'язкових залежностей здійснюється в основному за допомогою виклику до пакетного запиту. Перший for-цикл видаляє пояснення, тому залишаються лише назви пакетів для необов'язкових залежностей; другий for-loop видаляє вже встановлені залежності у своєму першому рядку перед друком результатів у другому.

#!/usr/bin/perl
use strict;
use warnings;

my %deps;
for (`package-query -Q -f'%n %O'`) {
    $deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
}
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
    my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
    print "$pkg => @missing_deps\n" if @missing_deps;
}

2

Для цього слід зробити фокус:

comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)

Перший вхід - commсписок усіх необов'язкових залежностей, другий вхід усіх встановлених пакетів та їх атрибути "подати". Обидва списки відсортовані і містять кожен елемент лише один раз через sort -u. Тоді відображаються лише рядки, які містяться у першому, але не у другому списку.

(відредаговано, щоб включити пропозицію @ Archemar)


0

Іноді доводиться працювати назад ... спочатку знайдіть усі необов'язкові залежності, потім перехресне посилання з повним списком, а потім використовуйте uniq. Це створить список встановлених необов'язкових залежностей.

Знайдіть усі встановлені

pacman -Q

Знайти всі необов’язкові:

pacman -Qent

Тому унікальні записи повинні бути необов’язковими:

(pacman -Q; pacman -Qent) | sort | uniq -u 

Створення списку відсутніх необов'язкових залежить від описів, не дуже, але це працює.

pacman -Q > /tmp/paccache; for pkg in $(awk '{print $1}' /tmp/paccache); do pacman -Qi $pkg | grep "^Optional Deps" | grep -v None >/dev/null && echo $pkg >> /tmp/hasdeps; done

for pkg in $(awk '{print $1}' /tmp/hasdeps); do echo -ne "Package: $pkg ___ "; (pacman -Qi $pkg | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1) | grep -v installed; echo ___; done | grep -v "___ ___" | sed -e 's/Optional Deps/ /' -e 's/___//' | sed -e 's/ \+/ /g'

0

Я пробував тільки в GNU sed, але

yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'

це спрацювало (Використовуйте sort / uniq, як вам подобається).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.