Znajdź wszystkie pakiety zainstalowane przez użytkownika

38

Czy jest jakiś sposób na uzyskanie listy wszystkich pakietów zainstalowanych przez użytkownika w systemie Ubuntu, tj. Pakietów zainstalowanych na domyślnie zainstalowanych pakietach?

(Chodzi o to, aby uzyskać pełną listę, której można użyć do zainstalowania tych samych pakietów w czystej instalacji Ubuntu)

Rabarberski
źródło

Odpowiedzi:

15

Spójrz na te pliki,

  1. ' /var/log/installer/initial-status.gz' - twoja podstawowa instalacja
    • ta data pliku byłaby datą instalacji (tak myślę)
    • ' /var/log/dpkg.log' aktualizacja osi czasu (tego właśnie chcesz)
    • ' /var/log/apt/term.log' - rzeczy aptzaktualizowane w twoim systemie
    • " /var/cache/apt/archives/'Będzie zawierać debpakiety pobrane do instalacji

Aktualizacja: wykonaj następujące dwa kroki, aby uzyskać dokładną listę nowych instalacji:

  1. wykonać: grep -w install /var/log/dpkg.log > full-list.log
  2. Spójrz na linie poza /var/log/installer/initial-status.gzznacznikiem czasu

Ponieważ chcesz uzyskać czystą instalację w innym systemie z tymi pakietami, możesz nawet skopiować pliki „deb” ze ścieżki „cache / apt / archives” do ścieżki nowej instalacji i zainstalować je w jednym ujęciu (bez pobierania znowu oni).

nik
źródło
Dzięki za wskazówkę. Jest to przydatne, chociaż szukałem więcej pojedynczego polecenia, aby uzyskać tę listę. cat /var/log/dpkg.log | grep 'install' wydaje się zbliżać, jeśli zignoruję elementy zainstalowane przed datą / godziną instalacji
Rabarberski
Dodanie przyczyny głosowania w głosowaniu w dół pomogłoby zrozumieć problem w odpowiedzi, jeśli taki istnieje. Doprowadziłoby to również do lepszych odpowiedzi w przyszłości.
nik
Ups, głos był przypadkowo mój. Już głosowałem twoją odpowiedź. Kiedy próbowałem oznaczyć twoją odpowiedź jako „ostateczną”, kliknąłem i uderzyłem strzałkę głosowania w dół. Próba cofnięcia go spowodowała wyświetlenie komunikatu: „Głosuj za stary, aby go zmienić, chyba że ta odpowiedź zostanie edytowana”. Przepraszam nik, zarówno z powodu przegłosowania, jak i zamieszania. :-(
Rabarberski
@Rabarberski, cóż, to się zdarza ... bez szkody.
nik
nie działa, jeśli / var / log / installer nie istnieje, jak w przypadku instalacji na serwerze. Sensowne byłoby również dodanie NUMERÓW WERSJI, jeśli mówimy o „Ubuntu” - który to Ubuntu?
8

Tylko dla uśmiechów, stworzyłem jedno-liniowy (tutaj podzielony dla przejrzystości), który obliczy pakiety zainstalowane ręcznie , z wyłączeniem tych zainstalowanych początkowo i automatycznie zainstalowanych pakietów:

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )

Działa to zarówno w, jak bashi w zsh.

geekozaur
źródło
Działa to prawie idealnie, ale wydaje się, że drukuje kilka bibliotek zainstalowanych podczas pierwszej instalacji. Jest grono libtiff, libxcbitp, które nie zainstalować sobie. Ta odpowiedź: superuser.com/a/105000/24349 rozwiązuje ten problem , sortując według czasu instalacji i usuwając wszystko przed czasem instalacji systemu. Świetne (ab) użycie powłoki!
haxney
3

Na podstawie powyższych informacji napisałem krótki skrypt Pythona, aby wyświetlić listę pakietów, które zostały ręcznie zainstalowane. Zobacz ten link .

Zapraszam do korzystania z niego, chociaż nie biorę za to odpowiedzialności. Jednak opinie i sugestie są zawsze mile widziane.

Kazark
źródło
Znakomity! Uruchomienie zajmuje trochę czasu, ale jest to jedyne znalezione przeze mnie rozwiązanie, które robi dokładnie to, czego potrzebuję!
haxney
2
Niestety link jest teraz zepsuty (pokazuje ślad w pythonie), co pokazuje wartość umieszczenia tutaj odpowiedzi (szczególnie w przypadku „krótkiego skryptu python”
David Ljung Madison Stellar
Znaleziono repozytorium github ze skryptem: github.com/gerjantd/bin/blob/master/… Kliknij „raw”, aby pobrać i uruchom z „python list_manually_installed_packages.py”
David Ljung Madison Stellar
2
Link github też jest teraz zerwany ...
Suzana
2

Sprawdź moją odpowiedź tutaj na powiązane pytanie: Jak mogę wyświetlić listę wszystkich pakietów zainstalowanych w moim systemie Debian? . Niektóre inne odpowiedzi na pytanie zawierają również miłe sugestie dotyczące uzyskania takiej listy.

To pytanie należy oznaczyć jako duplikat, ponieważ poprzednie pytanie obejmuje również to pytanie, ale przydatne może być samodzielne postawienie tego pytania, aby było łatwiej je znaleźć.

nagul
źródło
1

zakładając, że masz spójną historię i korzystasz z umiejętności:

history | grep -e "^..... aptitude install"

wyświetli tylko te pakiety, które zainstalowałeś z aptitude install ... duh

Fehlersturm
źródło
1

To jest włamanie, ale działa całkowicie.

Najpierw przejdź na stronę http://releases.ubuntu.com/maverick/ (lub inną wersję Ubuntu, której używasz) i pobierz *.manifest filewersję powiązaną z używaną wersją Ubuntu.

Następnie uruchom następujący skrypt (zastępując <manifest file>, nawiasy kątowe i wszystko inne) ze ścieżką do pobranego pliku. Zawsze możesz dołączyć > outputdo końca, aby wykonać zrzut pliku.

diff --suppress-common-lines <(sed 's/ .*//' <manifest file>) <(dpkg --get-selections | sed 's/[ \t].*//') | grep '>' | sed 's/[>] //'
Arthur Summers
źródło
1

Dzięki geekozaurowi, niezły kod. Użyłem go, ale zastanawiałem się, jak go uruchomić. Oto jak to zrobiłem w Ubuntu 11.10 - działa w terminalu bash:

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  ) > user-installed-packages

Następnie, aby dodać kartę \t- i installw każdej linii:

sed 's/$/\tinstall/' user-installed-packages >uip

Następnie na nowej maszynie:

sudo dpkg --set-selections < uip

Aby zainstalować pakiety:

sudo apt-get dselect-upgrade
jrussell88
źródło
0

Innym sposobem na to jest określenie, co zostało zainstalowane na podstawie „zadań”, które określają pakiety podstawowe do zainstalowania zgodnie z początkowymi potrzebami.

tasksel --list-tasks

Przynajmniej byś miał server. Możesz jednak wybrać więcej. Dla każdego z zainstalowanych zadań możesz uzyskać listę zainstalowanych pakietów. Następujące polecenie robi to wszystko w jednym wierszu (w podziale na przejrzystość) dla tych, które wybrałem w mojej instalacji:

(tasksel --task-packages server ; \
 tasksel --task-packages openssh-server ; \
 tasksel --task-packages lamp-server) | sort | uniq

Ogólne podejście do powyższego byłoby:

(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
 do tasksel --task-packages $a; done) | sort | uniq

Teraz użyj, apt-cache depends --installed -i --recurse <packagename> | grep -v "^ "aby uzyskać listę zależności używanych przez wszystkie pakiety zdefiniowane w zadaniu. Można to zrobić w jednym wierszu w następujący sposób

apt-cache depends --installed -i --recurse \
     $(for a in $( tasksel --list-tasks | \
                   grep "^i" | \
                   awk '{ print $2 }' ) ; \
       do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq

Poniżej wymieniono wszystkie pakiety, które są zainstalowane w systemie (nie uwzględniając zależności).

dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'

Teraz użyj commpolecenia, aby znaleźć te, które są tylko na drugiej liście (tj. Zignoruj ​​te, które są w obu plikach i tylko w pierwszym pliku)

comm -13 <(apt-cache depends --installed -i --recurse \
              $(for a in $( tasksel --list-tasks | \
                            grep "^i" | \
                            awk '{ print $2 }' ) ; \
                do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
         <( dpkg --get-selections | grep "[[:space:]]install" | \
            awk '{print $1}' | sort)
Archimedes Trajano
źródło