แสดงรายการการพึ่งพาเผื่อเลือกด้วย pacman บน arch linux


23

ฉันใช้ arch linux

มีวิธีแสดงรายการการขึ้นต่อกันที่ไม่บังคับของแพ็คเกจที่ติดตั้งทั้งหมดหรือไม่? และถ้าใช่ฉันจะกรองรายการนี้เพื่อดูเฉพาะแพ็คเกจที่หายไป (ไม่ได้ติดตั้ง) ได้หรือไม่


1
ฉันไม่ได้ใช้ Arch แต่ "การพึ่งพา" ไม่ได้เป็นตัวเลือก (ไม่ใช่ใน distros อื่น ๆ )
จอร์แดน

AFAIK ฉันไม่คิดว่าคุณจะทำอย่างนั้นกับ Pacman ได้เลย แต่มันเป็นไปได้ที่จะเขียนบทเล็ก ๆ เพื่อทำมัน เคียวรี pacman สำหรับรายการของแพ็กเกจที่ติดตั้ง ให้ Yaourt ดึง PKGBUILDs และอ่านรายการ optdeps เวอร์ชันล่าสุดของ pacman-git มีการคอมมิชชันที่ระบุว่า optdeps ถูกติดตั้งแล้ว
darnir

@jordanm: ตามที่มีการสร้างการอ้างอิงและการพึ่งพาตัวเลือก ต้องทำการยกเลิกการใช้งานสำหรับคุณสมบัติบางอย่างของแพ็คเกจเท่านั้น ดังนั้นหากคุณไม่ได้ใช้คุณสมบัตินั้นคุณไม่จำเป็นต้องขยายระบบของคุณด้วยการพึ่งพา
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) 1optdepsไปยังไฟล์ที่เรียกว่า จากนั้นคุณสามารถเรียงลำดับนี้กับรายการของแพ็คเกจที่ติดตั้งไว้

ดูman expacรายการตัวเลือกทั้งหมด


1. นั่นคือตัวพิมพ์ใหญ่ O ไม่ใช่ศูนย์ เนื่องจากเราไม่มีแบบอักษรที่แยกความแตกต่างระหว่างสอง ...


[กระตุ้น] เรามีแบบอักษรนี้แล้ว :)
muru

4

มียูทิลิตี้ที่ดีใน AUR-Repository (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-dependencies


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

และที่สำคัญกว่านี้ควรใช้ส่วน "ตัวเลือกไม่จำเป็น" แทนส่วน "ขึ้นอยู่กับ" ของเอาต์พุต pacman
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-loop แรกจะลบคำอธิบายออกดังนั้นเฉพาะชื่อแพ็กเกจสำหรับการพึ่งพาที่เป็นทางเลือกยังคงอยู่ 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 ตามที่คุณต้องการ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.