Comment afficher l'historique de l'installation d'apt-get?

18

Comment afficher l'historique des apt-get installcommandes que j'ai exécutées manuellement?

Il me semble que toutes les méthodes disponibles montrent tout ce qui a été installé dès le début de l'installation d'Ubuntu.

Comment puis-je consulter l'historique apt-get installdepuis la fin de mon processus d'installation du système?

Dis moi pourquoi
la source
Hé bien oui. Qu'attendriez-vous d'autre? Voulez-vous afficher uniquement ceux que vous avez exécutés à partir du terminal et non ceux qui ont été exécutés par une interface graphique ou quelque chose? Veuillez modifier votre question et clarifier.
terdon
@terdon Okay a fait une nouvelle modification
TellMeWhy
1
Il y a des journaux de dpkgdans /var/log/dpkg.log*.
Velkan
1
@ParanoidPanda Cela échoue de diverses manières. Troncatures d'historique, choses exécutées dans d'autres shells, choses supprimées de l'histoire, ou jamais placées en premier lieu, choses installées à partir de scripts, choses exécutées par d'autres utilisateurs, etc., etc.
Squidly
1
@MrBones: Je sais, et je l'ai dit dans ma réponse (et dans les commentaires ci-dessous). Cependant, l'OP a demandé un moyen d'afficher toutes les instances lorsqu'ils ont exécuté manuellement la apt-get installcommande pour installer un package, et j'ai fourni une solution qui donne ces informations à moins que le fichier historique n'ait été modifié de certaines manières (par exemple: les entrées ont été supprimé).

Réponses:

20

Je pense que la réponse donnée ici par kos est la meilleure façon que j'ai vue jusqu'à présent. Bien que le Software Center l'utilise apt, tout ce qu'il a installé serait également répertorié.

La commande est:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'
Arronical
la source
Je testerai cela quand je rentrerai à la maison et l'accepterai si cela fonctionne :)
TellMeWhy
Ce n'est pas! consultez la mise à jour: askubuntu.com/a/680405/320386
kos
Utilisez ce, est beaucoup plus sûr pour cette tâche: 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.*'ne filtre que les apt-getcommandes contenant installun espace avant et arrière, sed '1,4d' pourrait dépendre de l'installation spécifique; in mine 1,4supprime exactement le nombre d'entrées provenant d'Ubiquity, qui sont celles que vous souhaitez supprimer. Faites-moi savoir si le nombre est le même sur votre installation, de cette façon au moins nous avons une base de référence: |
kos
@kos J'obtiens des lignes supplémentaires comme apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericavec la nouvelle commande. S'agit-il des lignes Ubiquity?
Arronical
Non, ceux-ci semblent provenir de Software Updater; il n'y a aucun moyen de faire la distinction entre les commandes exécutées à partir de l'utilisateur et les commandes exécutées par un apt-getfrontal, à part Ubiquity qui ne s'exécute qu'une seule fois (par exemple, les aptdaemonentrées seront également affichées par cette commande). Le meilleur pari est cependant d'utiliser cette commande, qui exclut au moins les entrées Ubiquity.
kos
9

Tapez simplement la commande suivante dans votre terminal pour afficher tous les journaux d'installation.

grep " install " /var/log/dpkg.log
Vikas Chaudhary
la source
3

Pour simplifier la réponse @Arronical, une astuce intéressante que j'ai apprise récemment est que vous pouvez utiliser zcat -qfpour capturer les fichiers txt et txt gzippés.

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

devient

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

De l'homme zcat:

   -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.
jjcf89
la source
2

Voici un script qui imprime uniquement les packages de niveau supérieur actuellement installés , où les "packages de niveau supérieur" sont définis comme des packages atp dont aucun autre package atp ne dépend. Si ces programmes de haut niveau ont été installés par atp ou un gestionnaire de packages tel que synaptic, ils ont été choisis manuellement par l'utilisateur.

#!/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"

Les packages sont imprimés dans l'ordre inverse en supposant que l'utilisateur est plus susceptible de vouloir les informations les plus récentes plus tôt et parce que le programme est lent.

Flux du programme:

  • Le programme rassemble d'abord dans une liste tous les packages installés en lisant les noms de fichiers sous /var/lib/dpkg/info/. Les heures de modification des fichiers sont les heures d'installation.
  • Cette liste est triée dans l'ordre inverse.
  • Pour chaque package installé $Pkg, un appel à apt-cache rdepends $Pkg demande les dépendances inverses de $Pkg. S'il n'y a pas de dépendances, il s'agit d'un package de niveau supérieur et les informations sur le package sont imprimées: date time packagename

Remarques:

  • Le script dépend du format de sortie apt-cache rdepends $Pkgqui était destiné aux yeux humains et pourrait changer dans les futures versions d'apt.
  • Le code de la partie regroupant les noms de fichiers sous / var / lib / dpkg / info / provient de ce message unix.stackexchange . Comme l'a souligné cette affiche «mikel» , les dpgkfichiers journaux d'historique ne sont pas fiables car ils seront pivotés après avoir atteint un certain volume.
  • Page de manuel pour apt-chache
  • L'appel apt-cache rdepends ...est très lent probablement parce que chaque appel est calculé en itérant à travers toutes les dépendances. Par conséquent, le script ci-dessus commence à partir des installations les plus récentes pour offrir à l'utilisateur autant de gratification instantanée que possible.
  • L' --installedindicateur après apt-cachevérifie que les packages installés par dpkg sont également apt-installés. Si l'utilisateur ou un autre logiciel d'installation contournait apt et utilisait directement dpkg, ce serait possible. CE CAS N'A PAS ÉTÉ TESTÉ, mais je pense que quelque chose de notable serait imprimé dans la sortie standard ou d'erreur
  • La sortie n'inclut pas les packages choisis manuellement qui sont devenus plus tard dépendants d'un package supérieur. La sortie peut également inclure des packages qui ont été installés via apt par d'autres logiciels d'installation tiers et qui ne sont donc pas réellement installés manuellement. Cependant, si l'objectif de la sortie est de servir de base à la configuration d'un Linux restauré à partir d'un /homerépertoire de sauvegarde qui comprenait ledit logiciel tiers, cette sortie conviendrait.
  • Certains des noms de packages incluent des numéros de version, d'autres non. Mentionné juste pour faire prendre conscience du fait.
Craig Hicks
la source
1

Si vous voulez voir toutes les choses que vous avez installées en exécutant:

sudo apt-get install [package]

Et vous n'avez pas gâché l'historique de bash, et vous ne souhaitez pas afficher l'historique de ce type de type d'installation pour un autre utilisateur (ou tous les utilisateurs), vous pouvez simplement exécuter:

history | grep "apt-get install"

Et cela devrait vous donner des résultats principalement pertinents.


la source
1
Vais-je avoir toute l'histoire avec ça?
TellMeWhy
@DevRobot: à moins que vous n'ayez modifié manuellement les entrées avec le apt-get installdans le .bash_historyfichier ou supprimé ce fichier, la commande vous montrera toutes les instances lorsque vous avez exécuté une commande avec la chaîne apt-get installqu'il contient sur votre compte d'utilisateur (même si vous exécutez la commande en tant que root et donc pas exactement comme votre compte d'utilisateur - c'est-à-dire en exécutant une commande avec sudo).
2
Cela pourrait avoir un problème si vous avez entré plus de 200 commandes
Arronical
2
Une preuve @Arronical est attendue lors des réclamations ;-)
Rinzwind
1
Je suppose moi-même que 500 est la valeur par défaut ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind du
1

Si vous voulez l'historique des apt-get installcommandes, utilisez la commande suivante:

grep "apt-get install" .bash_history

Production:

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" 

Pour plus d'informations, reportez-vous à Informations supplémentaires .

Il y a aussi des informations plus détaillées dans /var/log/apt/les history.loget les history.log.X.gzfichiers et term.loget term.log.X.gzfichiers

Si vous souhaitez uniquement l'historique des apt-getcommandes incluses,

history | grep apt-get

Ravan
la source
apt-mark showmanualaffiche également tous les packages installés lorsque le système d'exploitation a été installé, plutôt que ceux réellement installés manuellement. C'est une drôle de façon de se comporter!
Arronical
1
Cela ne donne pas nécessairement des détails spécifiques sur l'histoire. Ce que les gens doivent regarder, ce sont /var/log/apt/history.logdes fichiers similaires. Vous obtenez uniquement la liste des packages sélectionnés et sélectionnés automatiquement. Vous ne donnez aucun historique chronologique de ce qui a été installé, ce qui a été supprimé, ce qui a été mis à niveau, etc. à partir de cette réponse.
Thomas Ward
@Arronical - Où est la page de manuel apt -mark showmanual? Je ne le vois pas sur la page de manuel Ubuntu 16.04 LTS pour apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks
0

Afin de voir ce que vous avez installé et supprimé, réinstallé, etc. Plus d'informations sur le parcours des installations apt-get.

La réponse peut être modifiée en un alias:

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

Notez que certains arguments peuvent être définis avant l'installation, comme le fait le script virtualmin pendant l'installation: apt-get -y install packagename.

Donc, si vous souhaitez capturer toutes les commandes d'installation, vous devez modifier la requête d'expression régulière.

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