Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/01/2020, à 19:19

Q7frkz

Lister l'ensemble des paquets apt-get installés par l'utilisateur

Bonjour

je me fais un petit prog pour lister ma config et la reinstaller après formatage du pc.

j'ai trouvé ca sur le net: comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

C'est pas loin d'être très bien. Il y a envore beaucoup de paquets qui ne sont pas installés par moi mais les miens sont dedans quoi qu'il arrive.

Mon soucis est que je ne peux ps lancer cette ligne en python, je cherche encore pourquoi.

cmd = "comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)"
if (not subprocess.call(cmd, shell=False)):
   ...

Ca plante ...

/bin/sh: 1: Syntax error: "(" unexpected

1) aurez vous une autre ligne a me proposer si posible plus precise
2) avis aux experts du python, pourquoi ca ne marche pas ? (même s'il semble que c'est le shell qui déconne)

Voili
Merci a vous !

Q7

Dernière modification par Q7frkz (Le 14/01/2020, à 19:29)

Hors ligne

#2 Le 14/01/2020, à 20:39

lann

Re : Lister l'ensemble des paquets apt-get installés par l'utilisateur

Hors ligne

#3 Le 14/01/2020, à 20:45

kamaris

Re : Lister l'ensemble des paquets apt-get installés par l'utilisateur

Pas mal comme idée, sur une vm ça me sort pile poil ce que j'ai installé à la main smile
Dans mon cas il n'y a pas grand chose, car c'est une vm de test, donc ça n'est pas très réaliste, mais bon…

Je ne sais pas trop comment raffiner le résultat que tu obtiens, mais peut-être pourrais-tu donner la liste (ou au moins des exemples) des paquets que la commande te sort et que tu n'as pas installé à la main.
Concernant la présente commande, je l'écrirais plutôt comme ça :

grep -vf <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p') <(apt-mark showmanual)

Ça évite de recourir à sort, et on voit surtout plus immédiatement quel est le but poursuivi.
Si jamais les deux commandes ne donnent pas le même résultat chez toi, merci de donner la différence, mais normalement elles sont équivalentes.

Sinon, l'erreur que tu obtiens, c'est parce que tu utilises /bin/sh comme interpréteur, c'est-à-dire /bin/dash, qui ne connait pas les substitutions de processus : il faut que tu utilises /bin/bash comme interpréteur.

Hors ligne

#4 Le 15/01/2020, à 16:45

Q7frkz

Re : Lister l'ensemble des paquets apt-get installés par l'utilisateur

Non c'est encore moins bien que le mien ya vraiment beaucoup trop de choses pour le coup ds cette liste : ls /usr/share/applications | awk -F '.desktop' ' { print $1}' (donné sur ton lien)

kamaris a écrit :

Pas mal comme idée, sur une vm ça me sort pile poil ce que j'ai installé à la main smile
Dans mon cas il n'y a pas grand chose, car c'est une vm de test, donc ça n'est pas très réaliste, mais bon…

Je ne sais pas trop comment raffiner le résultat que tu obtiens, mais peut-être pourrais-tu donner la liste (ou au moins des exemples) des paquets que la commande te sort et que tu n'as pas installé à la main.
Concernant la présente commande, je l'écrirais plutôt comme ça :

grep -vf <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p') <(apt-mark showmanual)
Ça évite de recourir à sort, et on voit surtout plus immédiatement quel est le but poursuivi.
Si jamais les deux commandes ne donnent pas le même résultat chez toi, merci de donner la différence, mais normalement elles sont équivalentes.

Sinon, l'erreur que tu obtiens, c'est parce que tu utilises /bin/sh comme interpréteur, c'est-à-dire /bin/dash, qui ne connait pas les substitutions de processus : il faut que tu utilises /bin/bash comme interpréteur.

J'ai fini par trouver la solution pour le python en effet.
Je le fis sous cette forme ... et donc avec bash oui.

output = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, executable="/bin/bash").stdout.read().decode().split('\n')

et en re-regardant la liste, en fait elle est pas mal du tout
la seule chose que je lui reproche c'est de me donner les .deb que j'ai installé manuellement tel que "Visual code" par exemple, alors que j'aurais aimé uniquement les "aptget install"
mais la liste est bonne

Merci en tout cas pour votre aide smile

A la prochaine !

Dernière modification par Q7frkz (Le 15/01/2020, à 16:46)

Hors ligne

#5 Le 15/01/2020, à 18:53

kamaris

Re : Lister l'ensemble des paquets apt-get installés par l'utilisateur

Pour évacuer les paquets hors dépôts, tu peux utiliser apt-show-versions ou bien aptitude (cf. https://askubuntu.com/questions/98223/h … e-packages)
Donc par exemple avec apt-show-versions, pour extraire la liste des paquets hors dépôts, tu peux faire

apt-show-versions | awk -F':' '/No available version in archive/{print $1}'

Et ensuite, tu rajoutes ça dans la commande donnée plus haut comme fichier de motifs à exclure pour grep :

grep -vf <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p') -f <(apt-show-versions | awk -F':' '/No available version in archive/{print $1}') <(apt-mark showmanual)

Hors ligne

#6 Le 28/01/2020, à 15:09

LeoMajor

Re : Lister l'ensemble des paquets apt-get installés par l'utilisateur

bonjour,

aptitude search '~i' -F%p  # paquets installés
aptitude search '~i ~M'     # automatiquement
aptitude search '~i !~M'    # manuellement

Hors ligne