Używam tego dpkg -l
polecenia, aby dowiedzieć się, którą wersję pakietu zainstalowałem. Na przykład:
dpkg -l network-manager
zwraca informacje na opakowaniu:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-=========================-=========================-==================================================================
ii network-manager 0.8.3~git.20101118t223039 network management framework daemon
Jak widać, zwraca wartość, 0.8.3~git.20101118t223039
która jest błędna, ponieważ obcina wersję (wybrałem długą na potrzeby tego pytania). Sposób, w jaki rozwiązałem to w przeszłości, polega na przekazaniu głupio długiego argumentu COLUMNS, aby go rozwinąć:
COLUMNS=200 dpkg -l network-manager
co daje mi cały numer wersji, ale także garść śmieci:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-============================================-============================================-========================================================================================================
ii network-manager 0.8.3~git.20101118t223039.d60a988-0ubuntu1 network management framework daemon
Teraz widzę pełny numer wersji, który jest 0.8.3~git.20101118t223039.d60a988-0ubuntu1
.
Mam wrażenie, że nie jest to właściwy sposób na znalezienie numeru wersji zainstalowanego pakietu. W przeszłości tak naprawdę nigdy nie stanowiło to problemu, ale przy dołączaniu „ubuntu” w wersjach i rozprzestrzenianiu się umów PPA ciągi te stają się coraz dłuższe. Czy istnieje prostszy sposób?
źródło
dpkg --info package.deb
działa, choć-s
niedpkg --info package.deb
działa na plikach pakietów,dpkg -s <packagename>
działa na nazwach pakietów - plik nie jest wymaganyźródło
dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
dpkg-query --showformat='${Version}\n' --show python3-lxml
.To nie używa
dpkg
polecenia, ale apt-show-wersjePrzykład:
źródło
Myślę, że aneeshep's jest najlepszą odpowiedzią, ponieważ twoje pytanie określa użycie dpkg. Ale dla kompletności, oto inny sposób:
Lub tylko numer wersji:
źródło
apt-cache
zależą od bieżących ustawień regionalnych. Na przykład w Niemczech musiszgrep 'Installiert:'
. Aby to zrekompensować, zawsze używaj ustawień regionalnychC.UTF-8
podczas pisania skryptów. AlboLC_ALL=C.UTF-8; export LC_ALL
na początku skryptu, albo dla poszczególnych przypadków coś takiego:LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}'
Inną metodą znalezienia wersji zainstalowanego pakietu jest
dpkg
jak poniżej:Przykład:
Wyjaśnienie:
dpkg -l
polecenie wyświetla listę wszystkich zainstalowanych pakietów. To standardowe wyjście zostało podane jako dane wejściowe doawk
polecenia.awk
szuka odpowiedniej nazwy pakietu na standardowym wejściu ( kolumna 2 ), jeśli znajdzie, to pobiera odpowiedni wiersz. I w końcu wypisuje wartość ( kolumna 3 ), która faktycznie reprezentuje wersję pakietu.Zgodnie z powyższym kolumna 2 reprezentuje nazwę pakietu , kolumna 3 reprezentuje wersję pakietu , kolumna 4 reprezentuje architekturę, a kolumna 5 przedstawia opis pakietu .
źródło
dpkg
a następnie pozwolić, aby awk je ponownie przefiltrował? Możesz poprosić o wpis także dla pojedynczej paczki:dpkg -l <package-name>