ฉันใช้ arch linux
มีวิธีแสดงรายการการขึ้นต่อกันที่ไม่บังคับของแพ็คเกจที่ติดตั้งทั้งหมดหรือไม่? และถ้าใช่ฉันจะกรองรายการนี้เพื่อดูเฉพาะแพ็คเกจที่หายไป (ไม่ได้ติดตั้ง) ได้หรือไม่
pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
ฉันใช้ arch linux
มีวิธีแสดงรายการการขึ้นต่อกันที่ไม่บังคับของแพ็คเกจที่ติดตั้งทั้งหมดหรือไม่? และถ้าใช่ฉันจะกรองรายการนี้เพื่อดูเฉพาะแพ็คเกจที่หายไป (ไม่ได้ติดตั้ง) ได้หรือไม่
pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
คำตอบ:
คุณสามารถใช้expacเพื่อสอบถามpacman
ฐานข้อมูล
สิ่งที่ต้องการ:
awk 'NF>=2' <(expac "%n %O") > optdeps
จะพิมพ์รายชื่อของทุกแพคเกจติดตั้งบนเครื่องของคุณและที่optdepends
สำหรับแต่ละคน ( %O
) 1optdeps
ไปยังไฟล์ที่เรียกว่า จากนั้นคุณสามารถเรียงลำดับนี้กับรายการของแพ็คเกจที่ติดตั้งไว้
ดูman expac
รายการตัวเลือกทั้งหมด
1. นั่นคือตัวพิมพ์ใหญ่ O ไม่ใช่ศูนย์ เนื่องจากเราไม่มีแบบอักษรที่แยกความแตกต่างระหว่างสอง ...
มียูทิลิตี้ที่ดีใน 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
สิ่งนี้ไม่ได้มีประสิทธิภาพ แต่จะค้นหาสิ่งที่คุณต้องการ (ในสี!):
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
นั้นและวงเล็บรอบ ๆ ส่วนที่เหลือของบรรทัดใช่ไหม
pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
แม้ว่าฉันจะต้องสังเกตว่าวิธีการแก้ปัญหาของ @ 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;
}
สิ่งนี้ควรทำเคล็ดลับ:
comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)
อินพุตแรกเพื่อcomm
แสดงรายการการพึ่งพาที่เป็นทางเลือกทั้งหมดอินพุตที่สองแพ็กเกจที่ติดตั้งทั้งหมดและแอ็ตทริบิวต์ 'ให้' รายการทั้งสองจะถูกจัดเรียงและมีองค์ประกอบแต่ละรายการเพียงครั้งเดียวเนื่องจากsort -u
ทั้งสองรายการจะถูกจัดเรียงและมีแต่ละองค์ประกอบเพียงครั้งเดียวเนื่องจากจากนั้นจะแสดงเฉพาะบรรทัดที่มีอยู่ในรายการแรก แต่ไม่อยู่ในรายการที่สอง
(แก้ไขเพื่อรวมคำแนะนำของ @ Archemar)
บางครั้งคุณต้องทำงานย้อนกลับ ... ขั้นแรกให้ค้นหาทั้งหมดที่ไม่ใช่ตัวเลือกขึ้นอยู่กับการอ้างอิงไขว้กับรายการทั้งหมดแล้วใช้ 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'
ฉันพยายามเฉพาะใน GNU sed แต่
yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'
ใช้งานได้ (ใช้ sort / uniq ตามที่คุณต้องการ)