Niektóre pakiety mają Provides:
nagłówek. Na przykład pakiet postfix
na Debian Wheezy ma Provides: mail-transport-agent
.
Pakiet, mail-transport-agent
który nie istnieje fizycznie, jest uważany za pakiet „wirtualny”.
Skąd mam wiedzieć, w systemie opartym na Debianie, czy dany pakiet wirtualny jest „zainstalowany” (lub „dostarczony”)? Czy mogę wymienić wszystkie „dostarczone” pakiety wirtualne?
Wskazówka : aby wyświetlić listę wszystkich istniejących pakietów wirtualnych, zainstalowanych lub nie, wykonaj:aptitude search "~v"
Odpowiedzi:
Aby wyświetlić listę pakietów pod warunkiem
mail-transport-agent
:Zrób to,
aptitude search '~Pmail-transport-agent ~i'
aby wyświetlać tylko listę zainstalowanych pakietów (jeśli istnieją).Aby wyświetlić listę wszystkich pakietów wirtualnych dostarczanych przez aktualnie zainstalowane pakiety:
Patrz podręcznik umiejętności dla wyjaśnienia wzorców wyszukiwania.
źródło
aptitude
. Lubię jednak wyjaśnienie @ umläute.aptitude search '~Pmysql-server ~i'
co dajemariadb-server-10.0
amariadb-server-core-10.0
, ale kiedy to robięaptitude search '~Rprovides:~i ~v'
, nie widzęmysql-server
na liście ... Jednak ja widzęvirtual-mysql-client
,virtual-mysql-client-core
,virtual-mysql-server
avirtual-mysql-client-core
na liście.Problem polega na tym, że istnieje subtelna różnica między pakietami wirtualnymi a pakietami dostarczanymi przez inne pakiety.
różnica jest taka, że pakiet może dostarczyć do prawdziwego pakietu, jak również, a nie tylko wirtualnego pakietu.
w każdym razie następujące polecenie wyszuka wszystkie pakiety, które dostarczają pakiet i wydrukuje zarówno nazwę pakietu, jak i dostarczone przez niego pakiety:
aby sprawdzić, czy w systemie jest zainstalowany jakiś pakiet, który udostępnia dany pakiet (np. mail-transport-agent), użyj
źródło
grep-available
igrep-status
są dostępne po zainstalowaniudctrl-tools
pakietu.Możesz wykryć obecność danego pakietu wirtualnego, używając
apt-cache showpkg <virtual>
do wyświetlenia listy pakietów kandydatów, a następniedpkg -l <canddate> <candidate> ...
do wyświetlenia statusu instalacji kandydatów.Na przykład:
Oto pełny wydruk:
Wierzę
dpkg
iapt-cache
są narzędzia poziomie niższym niżaptitude
,grep-available
igrep-status
. Korzystanie z narzędzi niższego poziomu może, ale nie musi, być zaletą, w zależności od konkretnych wymagań.źródło
Wszystkie wirtualne pakiety można uzyskać z AUTORYZOWANEGO WYKAZU WIRTUALNYCH NAZW PAKIETÓW . Jeśli chodzi o ustalenie, czy pakiet wirtualny jest zainstalowany, używam go
dpkg -l
i faktu, że ma kod wyjścia 0, jeśli pakiet jest zainstalowany, i kod wyjścia 1, jeśli nie jest zainstalowany.źródło
dpkg -l mail-transport-agent
może zwrócić 0, nawet jeśli nie ma pakietu, który jest aktualnie zainstalowany. Myślę, że opiera się na obecności,/var/dpkg/lib/available
ale nie jestem pewien. Sprawdziłem, czydpkg -l foo
zwraca 1 dla pakietu, którego nigdy nie instalowałem, ale 0 dla pakietu, który właśnie wyczyściłem.