Ubuntu'da “apt-get install” geçmişini nasıl alabilirim?


85

Bir sunucuyu bir Ubuntu kutusundan diğerine taşımak üzereyim. Eski kutuyu yeniye kopyalamıyorum; Yeni bir sistem oluşturuyorum ve verileri gerektiği gibi taşıyacağım. Sahip olduğum tüm yazılımları eski kutuya yenisini yüklemek istiyorum.

Zaman içinde verdiğim tüm "sudo apt-get install" komutlarının geçmişini bulmanın basit bir yolu var mı? Yani, dpkg -l bana kurulmuş tüm paketleri gösterir, ancak hangi üst seviye paketleri yüklememiştir. Dpkg'ın yükleme paketini bana vermesinin bir yolu varsa, orada benzersiz olanları bulabilirim; Aksi takdirde, "Bu 24 paketi yüklediniz" demekten başka bir şey istiyorum.



Aşağıdan bir cevap kabul edebilir misiniz? Cevap verenlere minnettar olmak.
m-ric,


Bu çözümler yalnızca son günlük dönüşünden sonra ne olduğunu kontrol eder. Bütün tarihi kontrol etmiyorlar.
Kraang Prime

Bu cevabın basit ve hızlı bir yolu verilmiştir, askubuntu.com/a/250530/197730 , bu soruya Kurulan tüm paketlerin nasıl listeleneceği .
TooTone

Yanıtlar:


68

aptTarih yazılıyor /var/log/apt/history.logyukarıdaki gibi bir yorumda söyledi. Bununla birlikte, bu, manuel olarak yüklenen paketleri dpkgveya bunun gibi GUI'leri listelemez gdebi. Olan tüm paketleri görmek dpkgiçin bakabilirsiniz /var/log/dpkg.log.


8

5
İlk bağlantıdaki prosedür, otomatik olarak kurulan paketler ile elle kurulan paketler arasında ayrım yapmaz. /var/log/apt/history.log(yer yanlış btw var) birkaç ay sonra geri dönmüş olacak.
Gilles,

Gilles her iki konuda da haklı. Bu günlüklerin sadece bir aylık değerine sahibim ve günlük silme oranının nasıl ayarlandığını bile göremiyorum (FreeBSD'de 'newsyslog' ile yapılır). Bu yüzden hala bir çözümüm yok ama bazı işaretçilerim var. En azından çıktıyı klonlama makalesindeki komuttan alıp, "yüksek seviye" isimleri arayabilir, onları yenisine yükleyebilir, yeni kutuda aynı şeyi yapabilir, iki sonucu ayırabilir ve tatmin olana kadar tekrarlayabilirim. Hala daha fazla fikir duymak zorunda kalacağım.
Paul Hoffman

7

Kurulumunun açıkça talep edildiği paketleri listeleyebilirsiniz apt-mark.

apt-mark showmanual

Eski bir Debian sürümü yayınlıyorsanız, işte size manuel bir yol.

Aşağıdaki komut, ister manuel ister otomatik olsun, kurulumu istenen paketlerin listesini verir. Paketleri kurmanın tam ortasında olmadıkça, kurulu paketlerin listesi budur.

dpkg --get-selections | sed -n 's/\t\+install$//p'

Aşağıdaki komut, otomatik olarak kurulan paketlerin bir üstünü verir:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

Hepsini bir araya koyarak, aşağıdaki komut el ile kurulmuş paketleri listeler:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

1
--- çok farklı sonuçcomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

Debian'da, apt-mark showmanualson emrinize eşdeğer olan var .
maxschlepzig

3
grep -i "Commandline" /var/log/apt/history.log

Kullandığınız yüklediğiniz paketleri gösterir: sudo apt-get install xxxxx


Bu @ inkaphink'in cevabından yeterince farklı değildir ve bu konuda bir yorum olmalıdır.
Karl Richter

2

Taç / baş kombinasyonu yerine kuyruk kullanmak daha iyidir (son 25 satır için):

tail -n 25 /var/log/apt/history.log

Bu @ inkaphink'in cevabından yeterince farklı değildir ve bu konuda bir yorum olmalıdır.
Karl Richter

Ayrıca, aynı değil. tail, dosyadaki son satırları, içinde bulundukları sırayla listeler. tac, sırayı tersine çevirecek, böylece son satır şimdi birinci, ikinci sondan ikinci olacak, vb. Yine, bir şeyi nedenini açıklamaksızın "daha iyi" derken yanlış olma riskiniz gibi görünüyor. Yani, kime göre "daha iyi"? Hangi gereksinim için? Kendine güveniyor gibi görünüyor.
Todd Walton

0

Diğer cevaplar yardımcı oldu ama bana çok fazla çıktı verdi. Çıktıyı kesmek için, bu cevaptakiapt-mark showmanual gibi başladım ve daha sonra orjinal olarak kurulan paketleri filtreledim (orjinal olarak kurulmuş paketlerin bir listesini nasıl alacağınız için bu cevaba bakınız ; .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

Komut, orijinal sürümdeki paketleri, sürüm bağımsız bir karşılaştırma yaparak filtreler, böylece yükseltilmiş paketler listede görünmez. Yaklaşık 60 paket listesi ile sona erdi.

Sevdiğim diğer yol, tüm apt log'larını arayan bu cevap .


-1

En son kurulan paketlerin listesini azalan sırayla almak için kullanmayı seviyorum (örneğin 25 satır):

tac /var/log/apt/history.log |head --lines=25

1
Daha verimli (ve alliteratif): tail -25 /var/log/apt/history.log | tac
agc

Bu @ inkaphink'in cevabından yeterince farklı değildir ve bu konuda bir yorum olmalıdır.
Karl Richter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.