Chciałbym uzyskać listę pakietów zainstalowanych ręcznie przez apt
lub aptitude
móc dowiedzieć się, czy foobar
pakiet został zainstalowany ręcznie czy automatycznie. Czy jest jakiś fajny sposób na zrobienie tego z wiersza poleceń?
apt
package-management
aptitude
Umang
źródło
źródło
Odpowiedzi:
Możesz użyć jednej z tych dwóch linijek. Oba dają dokładnie taką samą wydajność na moim komputerze i są bardziej precyzyjne niż wszystkie rozwiązania proponowane do tej pory (6 lipca 2014 r.) W tym pytaniu.
Używanie
apt-mark
:Używanie
aptitude
:Bardzo niewiele pakietów wciąż przechodzi przez pęknięcia, chociaż podejrzewam, że są one faktycznie instalowane przez użytkownika, albo bezpośrednio po instalacji poprzez konfigurację lokalizacji języka lub np. Przez instalator kodeków Totem. Wydaje się, że również wersje nagłówka linuxa kumulują się, mimo że zainstalowałem tylko niespecyficzny dla metapakietu pakiet. Przykłady:
Jak to działa:
sed
usuwa pozostałe białe znaki na końcu linii.Inne możliwości również nie działają:
ubuntu-14.04-desktop-amd64.manifest
pliku ( tutaj dla Ubuntu 14.04) zamiast/var/log/installer/initial-status.gz
. Więcej pakietów jest wyświetlanych jako zainstalowane ręcznie, nawet jeśli nie są.apt-mark showauto
zamiast/var/log/installer/initial-status.gz
.apt-mark
na przykład nie zawiera pakietu xserver-xorg, podczas gdy drugi plik tak.Użyłem różnych innych postów StackExchange jako odniesień, jednak żadne nie działa tak dobrze, jak powyższe rozwiązanie:
Oba wyświetlają więcej pakietów niż powyższe rozwiązanie.
EDYCJA: Co zrobić, jeśli uaktualniono z poprzedniej wersji:
Jeśli uaktualniłeś system Ubuntu z jednej wersji do drugiej, prawdopodobnie będziesz musiał dostosować ten proces. W takim przypadku sprawdziłbym plik manifestu nowszej wersji (patrz wyżej) oprócz pliku initial-status.gz z bieżącej wersji. Możesz to łatwo zrobić, dodając kolejne porównanie. Używanie samego pliku manifestu nie będzie działać, ponieważ plik manifestu niestety nie zawiera wszystkiego, co robi plik initial_status.gz (sprawdziłem).
źródło
/var/log/installer/initial-status.gz
brakuje. Chcę też wiedzieć, czy to zależy od oznaczenia aptsmanual
czy nie?showmanual
polecenie (poniżej). I użyjcomm
do porównania dwóch (posortowanych) list.showmanual
Wynik dał mi 1.840 bardziej unikalne pakiety zapt-mark showmanual
nie pokazane za pomocą tej metody.comm
Żadne pakiety nie były unikalne dla wyjścia tej komendy. Myślę, że bardziej interesujące jest odnotowanie, że dla mojego komputera 894 pakiety są wymienione w obu wynikach. Nie jestem pewien, dlaczego istnieje tak ogromna rozbieżność. Niektóre (wiele?) Pakiety wydają się być specyficzne dla wydania. Inne, takie jak XOrg, komponenty GTK ilib*
rzeczy mogą być aktualizacjami. W każdym razie ta odpowiedź jest bardzo dobrym początkiem.apt-mark showmanual
. Ciekawe, ile różnic jest widocznych. twoja lista zawiera 238 pakietów, a showmanual zwraca 1717 pakietów. Z 2179 zainstalowanych pakietów, jest tylko 223 na obu listach, 15 jest tylko u ciebie (przykłady: nodejs, lightdm), a 223 tylko w showmanual (przykłady: xserver-xorg, ubuntu-desktop). Wygląda na to, że twoja lista jest bardziej pomocna, ale nie wiedząc, skąd biorą się te różnice, nie jest łatwo zdecydować ... (ale jestem pewien, że ręcznie zainstalowałem nginx i lightdm ...) [przepraszam, że właśnie napisałem to samo;)]W nowszych wersjach pakietu apt istnieje także polecenie apt-mark
źródło
linux-image-3.11.0-*-generic
itp. Jako podręczniklinux-image-3.13.0-24-generic
jest ręczny, ale prądlinux-image-3.13.0-27-generic
jest automatyczny. Wygląda na to, że po uaktualnieniu pakietu referencyjnego (w tym przypadkulinux-image-generic
, który zmienił zależności), znak ręczny jest ustawiany automatycznieapt-get autoremove
. To zdecydowanie nie jest to, czego chcesz.W przypadku Ubuntu 16.04 sprawdź plik dziennika
/var/log/apt/history.log
.Na przykład:
Nie jest idealny, ale całkiem dobrze wyjaśnia, co dokładnie zainstalowałem ręcznie. Umieść
-B 1
grep, aby zobaczyć, kiedy został zainstalowany.Przykładowe dane wyjściowe
Nie jestem pewien, czy to odbierze,
aptitude
czy nie. Wydaje się, że nie pobiera instalacji z aplikacji komputerowej Ubuntu Software.źródło
apt-mark showauto | grep -iE '^foobar$'
wyświetli „foobar”, jeśli pakiet został zainstalowany automatycznie, nic poza tym.aptitude search '!~M ~i'
wyświetli listę pakietów, które nie zostały zainstalowane automatycznie. Szkoda, że aptitude nie będzie częścią domyślnej instalacji Ubuntu Desktop od 10.10.źródło
aptitude search
pokazuje WSZYSTKIE pakiety, nie tylko te, które są instalowane ręcznie (zakładam, że tego właśnie chciał OP)aptitude search '!~M ~i'
i zawiera listę 1043 pakietów. Nie ma mowy, żebym zainstalował tak wiele pakietów ręcznie.Poniższy skrypt wydrukuje wszystkie pakiety, które nie są ustawione na automatyczną instalację, a zatem zostały zainstalowane ręcznie:
opiera się na tym, jak apt-mark wypisuje automatycznie zainstalowane pakiety.
źródło
sys.exit(1)
bezimport sys
może spowodować błąd w nowszych wersjach Pythona. Alboimport sys
albo użyjexit(1)
.Aby uzyskać listę wszystkich pakietów (niezainstalowanych, zainstalowanych przez użytkownika lub domyślnie zainstalowanych we wszystkich PPA),
apt
stosuje się następującą metodę:apt list [option]
Możliwe przydatne opcje to:
--installed
wyświetlać tylko pakiety zainstalowane w systemie (spośród ponad 50 000)--manual-installed
aby wyświetlić listę pakietów, które zostały jawnie zainstalowane przez polecenie, bezpośrednio lub jako zależności.Alternatywnie możesz zrobić:
apt list --manual-installed | grep -F \[installed\]
aby uzyskać listę pakietów, które wynikają wyłącznie z poleceń użytkownika i ich zależności, oraz uzyskać dodatkowe informacje na ich temat, takie jak obsługiwana wersja i architektura (x86, x86_64, amd64, wszystkie itp.)źródło
Jak skomentowało kilka osób, showmanual apt-mark wydaje się nieco wadliwy (i zgłosiłem to jako błąd 727799 ). Kiedy go używam, w rzeczywistości zgłasza wiele rzeczy, które nawet nie są zalogowane / var / lib / apt / Extended_states (gdzie to powinno być przechowywane), a apt-get nie rejestruje rzeczy jako zainstalowanych w / var / lib / apt / Extended_states (tylko w / var / lib / dpkg / status). Skrypt Pythona autorstwa powyższego txwikinger czerpie bezpośrednio z / var / lib / apt / Extended_states, ale jeśli go używasz dzisiaj, składnia może nie działać (moje właśnie zaczęło generować błędy w Kubuntu 13.10). Zaktualizowana składnia to:
Dla mnie była to bardzo krótka lista 5 pozycji, która również nie wydaje się dokładna.
źródło
sys.exit(1)
bezimport sys
może spowodować błąd w nowszych wersjach Pythona. Alboimport sys
albo użyjexit(1)
.Chciałbym podać rozwiązanie GUI.
otwarty
Synaptic Package Manager
Iść do
Status
Kliknij
Installed (manual)
Podaje listę pakietów instalowanych ręcznie przez apt lub aptitude.
Niestety nie mogłem znaleźć żadnej opcji,
Custom Filters
aby dowiedzieć się, czyfoobar
pakiet został zainstalowany ręcznie czy automatycznie.Jeśli pakiet jest pod,
Installed
ale nie pod, oznaczaInstalled (manual)
to, że został zainstalowany automatycznie. Jeśli pakiet jest poniżej,Installed (manual)
to został zainstalowany ręcznie.źródło
Jeśli nikt nie daje piękny odpowiedź za pomocą polecenia APR-coś można zrobić to w przykry sposób . Apt-get przechowuje informacje w / var / lib / apt / Extended_states. Każdy plik instalowany automatycznie zostanie dodany do tego pliku. Jeśli zainstalujesz pakiet już w tym pliku ręcznie, pakiet pozostanie w tym pliku, ale z Autoinstalacją: 0 w drugim wierszu. Nie jest usuwany.
Uwaga: zgodnie z oczekiwaniami lepsze odpowiedzi, które mogą zadziałać, jeśli pojawią się zmiany umieszczania plików. Przechowuję moje na wypadek, gdyby informacje o lokalizacji pliku były przydatne.
źródło
apt-get install liferea
i nie został zainstalowany, ale otrzymałem wynik, który był efektem „oznaczono jako zainstalowany ręcznie”. Teraz liferea jest nadal w pliku, z wyjątkiem tego, że następny wiersz zawiera0
zamiast1
. Powinieneś także zmienić wzorzec wyrażenia regularnego na" foobar$"
zamiast po prostufoobar
.Po wielu wyszukiwaniach udało mi się skompletować ten skrypt. Dla mnie to działa dobrze:
źródło
sort -u
zamiastsort | unique
. Ponieważapt-mark
nie wyświetla architektury, należy usunąć ją z danych wyjściowych dpkg przed ustawieniem operacji (lub użyciemdpkg-query -W -f='${Package}\n'
). Poza tym dpkg może wyświetlać niektóre pakiety, które nie są obecnie zainstalowane. Jeśli chodzi o "desc", możesz użyć pakietu `dpkg-query -W -f = '# $ {binary: Summary} \ n' $ pack, który jest szybszy.apt-mark
może wyświetlać architekturę dla niektórych pakietów, ale nie dla wieludpkg -l
.apt-cache search
jest wolny. Uzyskiwanie listy zainstalowanych dat z góry za pomocą czegoś takiego jak help.ubuntu.com/community/ListInstalledPackagesByDate może być bardziej wydajneJak powiedział Li Lo,
apt-mark showauto
powinienem uzyskać grubą listę rzeczy automatycznie instalowanych.Teraz, aby pokazać rzeczy, które są instalowane ręcznie, okazuje się, że istnieje piękny prosty modyfikator wyszukiwania dla aptitude. Ale nie chcesz tego robić. Chcesz napisać wielkie polecenie bashowe, które robi naukę o rakietach.
Uwaga: To bardziej ilustruje, jak fajnie będziesz wyglądać, wydając masowe polecenia bash wszystkim znajomym.
Podzieliłem go na dwie linie dla czytelności. Co to robi?
apt-mark
źródło
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
jest odpowiednio lepszy;)Spowoduje to wyświetlenie wszystkich ręcznie zainstalowanych pakietów bez: zależności, odinstalowanych pakietów, pakietów zainstalowanych podczas instalacji systemu.
źródło