Yanıtlar:
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Bu sorunu düşünmenin bir yolu, bunu üç bölüme ayırmaktır:
Aşağıdaki komut sistemimde çalışıyor gibi görünüyor:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Benzer yaklaşımlar, Gilles'un soruya yorum olarak gönderdiği bağlantılarda da bulunabilir. Bazı kaynaklar, bunun yalnızca paketleri yüklemek için bir yetenek kullanmanız durumunda çalışacağını iddia eder; Ancak, paketleri yüklemek için neredeyse hiçbir zaman yetenek kullanmıyorum ve bunun hala işe yaradığını buldum. Özelliğin --disable-columns
, paket isimlerinin satırlarının aşağıdaki karşılaştırmayı engelleyebilecek boşluklarla dolmasını önler. | sort -u
Sıralar dosya ve çiftleri kaldırır. Bu, son adımı çok daha kolay hale getirir.
Not: Bu bölüm açıklayıcı olduğunu düşündüğüm bir 'yanlış yol' ile başlamaktadır. İkinci kod ise işe yarayan koddur.
Bu biraz daha zorlu. Başlangıçta iyi bir yaklaşımın ubuntu-minimal, ubuntu-standart, ubuntu-masaüstünün ve çeşitli linux çekirdeği ile ilgili paketlerin meta paketlerine bağımlı olan paketlerin tümü olacağını düşündüm. Google aramalarındaki birkaç sonuç bu yaklaşımı kullanıyor gibiydi. Bu bağımlılıkların bir listesini almak için önce aşağıdakileri denedim (işe yaramadı):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Bu varsayılan olarak gelmek zorunda olduğumu bildiğim bazı paketleri dışarıda bırakıyor gibi görünüyor. Meta paketlemelerin doğru listesini oluşturursa, bu yöntemin işe yarayacağını düşünüyorum.
Ancak, Ubuntu aynalarının varsayılan kurulumda tüm paketleri içeren bir "manifest" dosyası içerdiği anlaşılmaktadır. Ubuntu 12.04.3 için bildirim burada:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Bu sayfayı (veya size daha yakın olan bir aynanın sayfasını) ararsanız:
http://mirror.pnl.gov/releases/precise/
Kullandığınız sürüme ve mimariye karşılık gelen ".manifest" dosyasını bulabilmelisiniz. Sadece paket isimlerini çıkarmak için şunu yaptım:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Liste muhtemelen zaten sıralı ve benzersizdi, ancak bir sonraki adımı kolaylaştırmak için doğru sıralandığından emin olmak istedim. Daha sonra çıkışı koydum defaultinstalled.txt
.
Unix benzeri sistemlerin çoğunun bunu yapmak için birçok aracı olduğundan, bu en kolay bölümdür. comm
Aracı Bunu yapmak için birçok yollardan biridir:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Bu, ilk dosyaya özgü satırların listesini yazdırmalıdır. Bu nedenle, varsayılan kurulumda olmayan yüklü paketlerin bir listesini yazdırmalıdır.
http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
ve ek | sed "s/ *$//"
ama hala zar yok.
apt-mark showmanual | sort -u
diğer cevaplarda gösterildiği gibi değiştirilebilir . Daha basit ve aptitude
varsayılan olarak kurulmadığına güvenmez .
Bu iki tek gömleklerden birini kullanabilirsiniz. Her ikisi de makinemde aynı çıktıyı veriyor ve bu soruda şimdiye kadar (Temmuz 2014) önerilen tüm çözümlerden daha kesin. İki cevap (1) ve (2) ' nin bir birleşimidir . Bu cevabı başlangıçta buraya gönderdiğimi unutmayın .
Kullanarak apt-mark
:
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Kullanarak aptitude
:
comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Bunları şüpheli rağmen çok az paketler hala çatlaklardan düşme vardır aslında kullanıcı tarafından yüklenmiş, ya doğru dil lokalizasyonu kurulum sayesinde kurulumdan sonra veya totem codec'i yükleyici üzerinden örneğin. Ayrıca, linux başlık sürümleri de, yalnızca sürüme özgü olmayan bir meta paketi yüklememe rağmen, birikmiş görünüyor. Örnekler:
libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29
O nasıl çalışır
sed
, sıranın sonunda kalan boşlukları çıkarır.Diğer olasılıklar da işe yaramaz:
ubuntu-14.04-desktop-amd64.manifest
dosya ( burada yerine Ubuntu 14.04 için) /var/log/installer/initial-status.gz
. Daha fazla paket, olmasalar bile elle yüklenmiş olarak gösterilir.apt-mark showauto
yerine /var/log/installer/initial-status.gz
. apt-mark
diğer dosya ise, örneğin xserver-xorg paketini içermez.Her ikisi de yukarıdaki çözümden daha fazla paket listeler.
İşte bazı örnek çıktı cat /var/log/apt/history.log
:
Start-Date: 2011-01-22 00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22 00:43:48
Start-Date: 2011-01-23 01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23 01:16:31
Sorunuz gelince, maddeleri grep ( cat /var/log/apt/history.log | grep Commandline
) ile filtreleyin .
Bu dosyaların döndürüldüğünü unutmayın, bu nedenle başkalarını kontrol edin;
$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz
NOT :
Commandline
, bu yüzden grep
hile onlarla çalışmaz.aptitude
ve diğer paket yöneticilerini hesaba katmak için grep komutunu biraz ayarlamanız gerekir . Tomruklarınız uzağa döndüyse, şansınız yaver gitmez.
Bu sorguyu ararken bu güzel oneliner ile karşılaştım
Bir astar
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) \
)`
Bu oneliner, sistem tarafından yüklenen paketleri günlüklerden /var/log/installer/initial-status.gz
Bağlantıyı bulduğumda orijinal konuya göndereceğim, çünkü bu oneliner benim değil ve nerede gördüğümü hatırlamıyorum.
Bu makaleye bir göz atmak istersiniz .
Makalenin sonunda istediğinizi yapması gereken bir python betiği var.
(K) ubuntu için yazılmıştır . ama Ubuntu için de çalışmalı .
Aşağıda Steven D'nin cevabına bir ektir .
Aşağıdaki satır 32 karakterde paket adlarını kısaltıyor gibi görünüyor:
aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt
Bu iş gibi görünüyor:
aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt
bkz Bu yanıtı
Ayrıca dosyaya da bakabilirsiniz /var/lib/apt/extended_states
.
cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'
Eski bir bölüme nelerin yüklendiğini bilmek istiyorsanız, bu kullanışlıdır.
Bir betiğin cevheri ile gelenlere çok teşekkürler ve tebrikler !!!
Ben 2 add eklemek istedim ve $ info adresinden çıkardığım kurulum tarihini takip ettim.
$ İnfo dosyalarının neden güncellenip güncellenmediği ve ne zaman güncellenmediği konusunda ustalaşmadım, ancak pratikte çalışıyor.
Komut dosyam, kurulumdan sonra eklenen bağımlılık olmayan paketlerin en son güncellemelerini listeler.
Periyodik bir kontrol yaparak, tek bir bayan olmadan el ile ne giriş yapmış olacağımı görüyordum.
Yani, aynı sebepten ötürü paket paketleri kuruldu. Maalesef, güncellemeler bu siparişi bozuyor.
Bir sistem güncellemesinden sonra, güncellemenin güncellemediği ve eklediği paketlerin bir listesini ekledim.
Temiz! Keyfini çıkarın.
info='/var/lib/dpkg/info/'
comm -13 > /tmp/packages \
<(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) \
)
while read n; do
echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
| tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
aptitude search '~i!~M' -F %p
yapmaz?