Apt-get kurulumunun geçmişi nasıl görüntülenir?


18

apt-get installManuel olarak yürüttüğüm komutların geçmişini nasıl görüntüleyebilirim ?

Bana öyle geliyor ki, mevcut tüm yöntemler Ubuntu kurulumunun başlangıcından itibaren kurulmuş olan her şeyi gösteriyor.

apt-get installSistem kurulum sürecimin tamamlanışından bu yana nasıl bir geçmişe bakabilirim ?


İyi evet. Senden başka ne beklenir? Bir GUI veya başka bir şey tarafından çalıştırılanları değil, yalnızca terminalden koştuğunuzları göstermek ister misiniz? Lütfen sorunuzu düzenleyin ve açıklığa kavuşturun.
terdon

@terdon Okay yeni bir düzenleme yaptı
TellMeWhy

1
Ait günlükleri vardır dpkgiçinde /var/log/dpkg.log*.
Velkan

1
@ParanoidPanda Bu çeşitli şekillerde başarısız oluyor. Tarih kısaltmaları, diğer kabuklarda işler, tarihten çıkarılan şeyler ya da ilk etapta asla yerleştirilmez, senaryolardan yüklenen şeyler, diğer kullanıcılar tarafından çalıştırılan şeyler vb.
Squidly

1
@MrBones: Ben biliyorum ve bu yüzden belirttiğimiz Cevabıma (ve bunun altındaki yorumlarda). Ancak OP apt-get install, bir paketi yükleme komutunu el ile yürüttüklerinde tüm örnekleri görüntülemenin bir yolunu istedi ve geçmiş dosyası belirli şekillerde değiştirilmedikçe bu bilgileri veren bir çözüm sağladım (örn: girdiler kaldırıldı).

Yanıtlar:


20

Bence burada kos tarafından verilen cevap şimdiye kadar gördüğüm en iyi yol. Yazılım Merkezi kullandığı apthalde, yüklediği her şey de listelenir.

Komut:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Eve geldiğimde bunu test edip çalışırsa kabul
edeceğim

Değil! güncellemeyi kontrol et: askubuntu.com/a/680405/320386
kos

Bunu kullanın, bu görev için çok daha güvenli zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d':: grep -Po '^Commandline:(?=.* install ) \K.*'yalnızca ön ve arka boşluk apt-getiçeren komutları filtreleyecek , belirli yüklemeye bağlı olabilir ; benimkinde Ubiquity'den gelen, kaldırmak istediğiniz girişlerin sayısını siler. Sayı yükleme sırasında aynı olup olmadığını bana bildirin, en azından bir taban çizgisi var: | installsed '1,4d' 1,4
kos

@kos apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericYeni komut gibi ekstra satırlar alıyorum . Bunlar Ubiquity çizgileri mi?
Arronical

Hayır, bunlar Software Updater'dan gelmiş gibi görünüyor; apt-getyalnızca bir kez çalışan Ubiquity dışında , kullanıcı tarafından çalıştırılan komutları ve bazı ön uç tarafından çalıştırılan komutları ayırt etmenin bir yolu yoktur (örneğin, aptdaemongirişler bu komut tarafından da gösterilecektir). Yine de en iyi bahis, en azından Ubiquity girişlerini hariç tutan bu komutu kullanmaktır.
kos

9

Tüm yükleme günlüklerini görüntülemek için terminalinize aşağıdaki komutu yazmanız yeterlidir.

grep " install " /var/log/dpkg.log

3

@Arronical yanıtı basitleştirmek için, Son zamanlarda öğrendiğim düzgün bir numara, zcat -qfhem txt hem de txt gzip edilmiş dosyaları kedi için kullanabilirsiniz .

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

olur

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Adam zcat Gönderen:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

Burada yalnızca şu anda yüklü olan üst düzey paketleri yazdıran komut dosyasıdır , burada "üst düzey paketler", başka hiçbir atp paketinin bağımlı olmadığı atp paketleri olarak tanımlanır. Bu üst düzey programlar atp veya sinaptik gibi bir paket yöneticisi tarafından yüklendiyse, kullanıcı tarafından manuel olarak seçildiler.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

Paketler, kullanıcının daha yeni bilgileri daha erken istemesi ve programın yavaş olması nedeniyle ters sırada yazdırılır.

Program akışı:

  • Program önce altındaki tüm dosyaları okuyarak kurulu tüm paketleri bir liste halinde toplar /var/lib/dpkg/info/. Dosya mod süreleri kurulum süreleridir.
  • Bu liste ters sırada sıralanır.
  • Yüklü her paket için $Pkg, apt-cache rdepends $Pkg ters bağımlılıklarını isteyen bir çağrı $Pkg. Bağımlılık yoksa, üst düzey bir pakettir ve paket bilgisi yazdırılır: tarih saat paketgeniş adı

Notlar:

  • Senaryo, çıktı biçimi apt-cache rdepends $Pkginsan gözü için tasarlanmıştır ve apt'in gelecekteki sürümlerinde değişebilir.
  • / Var / lib / dpkg / info / altındaki dosya adlarını toplayan parçanın kodu bu unix.stackexchange gönderisinden geldi . O 'mikel' posterinin işaret ettiği gibi,dpgk tarih günlükleri güvenilir değildir, çünkü belirli bir hacme ulaştıktan sonra döndürüleceklerdir.
  • İçin sayfa apt-chache
  • Çağrı apt-cache rdepends ...her çağrı tüm bağımlılıkları ile iterating hesaplanır çünkü çok yavaş muhtemelen olduğunu. Bu nedenle, yukarıdaki komut dosyası, kullanıcıya mümkün olan en hızlı memnuniyeti sunmak için en yeni yüklemelerden başlar.
  • --installedSonra bayrak apt-cachedpkg yüklenmiş paketleri de apt yüklenmiş olan çekler. Kullanıcı veya başka bir yükleme yazılımı apt'yi atladı ve doğrudan dpkg kullandıysa, bu mümkün olurdu. BU DURUM TEST EDİLMEDİ, ancak standart veya hata çıktısında fark edilebilir bir şey basılacağını düşünüyorum
  • Çıktı, daha sonra daha yüksek bir pakete bağlı olan manuel olarak seçilen paketleri içermez. Çıktı, diğer üçüncü taraf yükleme yazılımları tarafından uygun şekilde kurulan paketleri de içerebilir ve bu nedenle gerçekten elle yüklenmez. Bununla birlikte, çıktının amacı, /homebahsedilen üçüncü taraf yazılımını içeren bir yedekleme dizininden geri yüklenen bir linux kurmak için bir temel ise , bu çıktı uygun olacaktır.
  • Paket adlarından bazıları sürüm numaraları içerir, bazıları içermez. Sadece gerçeğe farkındalık getirmek için bahsedildi.

1

Yükleyerek yüklediğiniz tüm şeyleri çalıştırarak görmek istiyorsanız:

sudo apt-get install [package]

Ve bash geçmişiyle uğraşmadınız veya başka bir kullanıcı (veya tüm kullanıcılar) için bu tür kurulum türünün geçmişini görüntülemek istemiyorsunuz:

history | grep "apt-get install"

Bu da çoğunlukla alakalı sonuçlar almanızı sağlayacaktır.


1
Bununla tüm tarihi anlatacak mıyım ?
TellMeWhy

@DevRobot: el ile girdileri değişmiş sürece apt-get installde onları .bash_historydosyaya veya bu dosyayı silindi Eğer dizeyle bir komut yürütüldüğünde ne zaman, komut size tüm örneklerini gösterecektir apt-get install(hatta eğer kullanıcı hesabına içindeki komutu root olarak çalıştırın ve bu nedenle tam olarak kullanıcı hesabınız olarak çalıştırmayın sudo.

2
Yine de 200'den fazla komut girdiyseniz bir sorun olabilir
Arronical

2
@ Hak iddia ederken elektronik kanıt bekleniyor ;-)
Rinzwind

1
Kendim 500 varsayılan olarak kabul ediyorum ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind

1

apt-get installKomutların geçmişini istiyorsanız aşağıdaki komutu kullanın:

grep "apt-get install" .bash_history

Çıktı:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

Diğer bilgiler için Ek bilgi bölümüne bakınız .

Daha ayrıntılı kurulum bilgileri de bulunmaktadır /var/log/apt/içinde history.logve history.log.X.gzdosya ve term.logve term.log.X.gzdosyalar

Yalnızca apt-getdahil edilen komutların geçmişini istiyorsanız , o zaman

history | grep apt-get


apt-mark showmanualyalnızca elle yüklenenler yerine işletim sistemi yüklendiğinde yüklenen tüm paketleri gösterir. Davranması tuhaf bir yol!
Arronik

1
Bu, tarihle ilgili belirli ayrıntılar vermek zorunda değildir. İnsanların bakması gereken şey /var/log/apt/history.logbenzer dosyalar. Yalnızca manuel olarak seçilen ve otomatik olarak seçilen paketlerin listesini alırsınız. Sen vermeyin herhangi Bu yanıt vb yükseltildi Ne çıkarıldı Ne yüklü şeyin kronolojik tarihini,,.
Thomas Ward

@Arronical - Man sayfası ne için apt -mark showmanual? apt< Manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html > için Ubuntu 16.04 LTS kılavuz sayfasında göremiyorum .
Craig Hicks


0

Neleri yükleyip neleri kaldırdığınızı, yeniden yüklediğiniz, vb. Görmek için . Apt-get yüklemelerinin yolculuğu hakkında daha fazla bilgi .

Cevap bir takma ad olarak değiştirilebilir:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

Bazı argümanların kurulumdan önce ayarlanabileceğini unutmayın, örneğin kurulum sırasında virtualmin betiği yapıyor: apt-get -y install packagegename.

Bu nedenle, tüm yükleme komutlarını yakalamak istiyorsanız, normal ifade sorgusunu değiştirmeniz gerekir.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
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.