회사의 개인 apt 저장소에서 설치된 패키지 목록을 가져오려고 합니다.
이것은 작동합니다:
#!/bin/bash
fqdn=$1
for pkg in $(dpkg-query --show | awk '{print $1;}'); do
if apt-cache showpkg $pkg | grep -q $fqdn; then
echo $pkg
fi
done
하지만 ~3466() 패키지가 설치된 시스템에서 이를 실행하는 데는 dpkg -l | wc -l
1분45.812초가 걸립니다. "설치된 패키지를 로컬로 검색"이 사용자에게 표시되는 데 너무 오랜 시간이 걸립니다.
더 좋은 방법이 있나요?
나는 교체로 줄을 읽으 apt-cache showpkg
려고 노력합니다. 이는 CLI 인터페이스가 불안정하고 15분 35.913초가 걸린다는 경고입니다.apt show
APT-Sources:
답변1
패키지를 반복하지 마세요:
dpkg -l | awk '/^ii/ { print $2 }' | xargs apt-cache showpkg |
awk "/^Package:/ { package = \$2 } /$1/ { print package }" | uniq
내 시스템에서는 이 작업에 몇 초가 걸리며 6,000개가 넘는 패키지를 설치하고 /var/lib/apt
직접 사용하지 않습니다.
몇 가지 제한 사항이 있습니다. 특히 어떤 항목인지 확인하지 않습니다.버전현재 설치된 v.는 저장소에서 사용할 수 있으며 데비안은 패키지가 실제로 설치된 저장소를 확인할 수 있는 방법을 제공하지 않습니다.
답변2
이것은 단지 필요 0m3.654s
하지만 사용됩니다 /var/lib/apt
.
#!/bin/bash
fqdn=$1
for pkg in $(dpkg-query --show | awk -F "[ \t:]" '{print $1;}'); do
if grep -q "Package: $pkg" /var/lib/apt/lists/${fqdn}_*_Packages; then
echo $pkg
fi
done
나는 이것이 /var/lib/apt
내부적이라는 것을 알고 apt
있으므로 apt
구현을 변경하고 스크립트를 중단할 수 있는 옵션이 있습니다. 이런 일이 일어날 가능성은 낮지만 일어날 수 있습니다. 대신 일반적으로 apt
도구를 사용하여 이 데이터에 액세스하는 것이 더 좋습니다 .