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)

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).


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.


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.


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


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


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/[>] //'

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

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.