# Script Bash : automatiser le traçage des paquets installés

**URL:** <https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258 "2016-02-20T14:57:21Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/1 "2016-02-20T14:57:21Z")

</div>

Bonjour,  
je viens de faire un script dans un fichier /.scripts/apt-i.sh, que je mets volontier ici pour d’éventuelles corréctions et suggestions, et critiques …  
Y sert à quoi ? tout est dans le titre …

Je ne l’ai testé que dans un cas pour l’instant, donc, inutile de vous dire que le lancer serait à vos risques et perils … (selon la phrase consacrée 😉 )

[code]#!/bin/bash

# Initialise les variables ------------------------------------------------

date="`date | tr " " "_"`" # date, sans les espaces  
apt="$HOME/Apt/" # nom du repertoire de trace  
fic=$date"\_" # nom du fichier de trace  
ficerr="" # nom du fichier à écraser  
com="" # la commande suivant root ou utilisateur  
err=“paramètre manquant:le nom du paquet à installer doit être fourni…:vous pouvez spécifier une release”

# test l’absence de params ----------------------------------------

if [“$#” -eq 0]; then  
echo $err | tr “:” “\n” # affiche le message d’erreur : absence de param  
exit 0 # quitte le script  
else  
fic="$fic$1" # forme le nom du fichier, concatene fic et param

# test si le repertoire Apt existe dans home de l’user -------------------

if [! -d “$apt”]; then  
echo “$apt n’existe pas. Ce repertoire va être créé"  
mkdir $apt # création  
echo `ls -l $apt` # affichage  
fic=”$apt$fic" # forme le chemin absolu vers fic  
else  
fic="$apt$fic"  
fi

# --------------------------------------------------------------------------------

# l’existence du fichier, trés improbable vu le nom de celui-ci

# # if [-e “$fic”]; then # fichier déjà existant

# # echo fichier existant, verifier … exit

# # exit 0

# # fi

# -------------------------------------------------------------------------

#----- la commande apt-i proprement dite -----------

# --------------------------------------------------------------------------

# Execute une simulation de apt-get du pkg —

# Redirige à la fois en console et dans le fichier $fic la sortie de la simulation

# Supprime les fichiers temporaires

# Ouvre fic pour aperçu ------

# A la fermeture du fichier, invite à l’installation -------

# Y procède ou non -----------

# -------------------------------------------------------------------------

# --------------------------------------------------------------------------

if [“`id -u`” -eq 0]; then # si root  
com=“apt-get -su install -t $2 $1” # affecte la commande à $com  
else # si user simple  
com=“sudo apt-get -su install -t $2 $1” # utilise sudo  
fi

# ------------------------------ lance le shell en simulation -----------

echo “$com” \> /tmp/-; `cat < /tmp/-`| tee /tmp/–; cat /tmp/- /tmp/-- \> “$fic”   
&& rm /tmp/-\* && nano “$fic”

# ---- Demande confirmation pour installer -----------------------

echo voulez vous installer ce paquet (O/n) ?  
read # attente de saisie  
case “$REPLY” in # énumère les cas de réponse  
Y | y | o | O ) # oui

# enregistre une démarquation dans le fichier $fic entre simulation et installation

```
  echo "Installation demandée ######################" >> $fic
  echo "Installation demandée ####################"
  com=${com/"-su "/""}
  echo "$com" > /tmp/-; `cat < /tmp/-`| tee /tmp/--; \
    cat /tmp/- /tmp/-- >> "$fic" && rm /tmp/-* && nano "$fic";;
N | n ) echo non installation;; # non
* ) echo pffffffff;; # autres réponses --------

```

esac  
fi  
exit 0

# -----------------------------------------------------------------------

# ------------------------------------------------------------------------------

[/code]

le but, c’est de lancer un alias d’apt get en simulant avant, du style de ce que je cherchais à faire dans mon post sur les tubes … ce qui ici pourrait me permettre de faire :  
en root - apt-i pkg unstable pour simuler/installer/garder trace de : apt-get install -t unstable pkg. (ça j’ai testé, ça marche).  
en user - ben exactement pareil, sudo est en dur dans le script … (pas encore testé).  
les alias devraient pas être un souçis, c’est la syntaxe, les opérateurs de bash et tout ça, que je voudrai améliorer, et surement l’algo … aussi …  
Merci de jeter un oeil …

---

<div class="post-metadata">

**Author:** ![BorisTheButcher](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/d6d6ee/32.png) [@BorisTheButcher](https://www.debian-fr.org/u/BorisTheButcher)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/2 "2016-02-20T14:57:34Z")

</div>

Très bonne idée de script.  
Je prefererai l’utilisation de la commande mktemp pour créer le fichier temporaire.  
et  
Est-ce qu’on garde un historique? Exemple je veux regarder ce que j’ai installé/répondu lors de ma mise à jour d’il y a 3j.

---

<div class="post-metadata">

**Author:** ![Bluenote1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ad7895/32.png) [@Bluenote1](https://www.debian-fr.org/u/Bluenote1)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/3 "2016-02-20T14:57:36Z")

</div>

Il y a aussi /var/log/aptitude 😉

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/4 "2016-02-20T14:57:36Z")

</div>

> [@](#):
>
> Il y a aussi /var/log/aptitude 😉

C’est à dire que je n’utilise pas aptitude … je vais chercher du côté d’apt pour voir quelles genres de trace il garde de ses manips (ça m’étonnerait pas qu’il existe l’équivalent de /var/log/aptitude pour apt quelquepart)…

`jcode@debian:~$ ls -l /var/log/aptitude
-rw-r--r-- 1 root root 0 2006-06-08 06:26 /var/log/aptitude
`

[quote=“BorisTheButcher”]  
Je prefererai l’utilisation de la commande mktemp pour créer le fichier temporaire.[/quote]je vais regarder avec mktemp que je connaissais pas, mais j’ai éviter le blem des fichiers temp en améliorant la commande :

`jcode@debian:~$ var="sudo apt-get -su install postfix"; echo $var > /tmp/-; $var | tee -a /tmp/-` ici simplifié, pour montrer que je n’utilise plus qu’un seul fichier, le définitif.  
C’est un truc comme ça que je vais mettre dans le script sans doute, /tmp sera le repertoire Apt de l’user, (/tmp)/- le nom du fichier tel que généré.

> [@](#):
>
> Est-ce qu’on garde un historique? Exemple je veux regarder ce que j’ai installé/répondu lors de ma mise à jour d’il y a 3j.

Le souci que j’ai eu, c’est que ma commande tout en apportant le résultat voulu(tout noter dans un fichier et afficher simultanément à l’écran) va fait peur lorsque je l’ai exécuté en vrai ( sans simuler) :  
La question voulez-vous (y/n) ne m’est pas apparu à l’écran, j’ai fait “entrer” à l’aveuglette quoi. Il faut que je travaille sur les pipes, et est ce que c’est question est dans 1& (stdout) ou dans 2& (stdin). Faut que je reteste avec une install de paquet problematique pour régler ça … mais pour le moment je lis la doc sur bash …  
Normalement, la réponse (étant stdout) doit apparaitre dans le fichier oui.  
Le probleme, c’est plus la question (je ne l’ai pas vu s’afficher, gênant).  
J’essaie de préparer un exemple de fichier ce soir .

---

<div class="post-metadata">

**Author:** ![BorisTheButcher](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/d6d6ee/32.png) [@BorisTheButcher](https://www.debian-fr.org/u/BorisTheButcher)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/5 "2016-02-20T14:57:37Z")

</div>

> [@](#):
>
> Il y a aussi /var/log/aptitude 😉

Ca garde aussi les choix de l’utilisateur? Chez moi il est vide ce fichier. En meme temps je melange apt-get et aptitude…

J’ai un script qui liste les anciens paquets installé:  
./script  
ou  
./script 100 liste les 100 derniers paquets installés

`#!/bin/sh
echo -e "\nLast $1 installed packages:\n"
match=${2:-xxxxxxxx}
cat /var/log/dpkg.log | grep \ installed\ | awk '{print $5}' | grep -v "$match" | tail -$1`

Mais moi ce que je veux c’est les questions reponses posées par apt-get.  
Comme expliqué dans la doc debian, avec screen on s’en sort; mais je l’ai jamais mis en place.

Le coup du mktemp c’est surtout pour eviter un truc comme ca:

`ln -s /etc/password /tmp/-
#./apt-i.sh
`

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/6 "2016-02-20T14:57:42Z")

</div>

bonsoir,  
je ne comprend pas bien ton dernier exemple à propos de mktemps … 😊  
J’ai trouvé un truc pas mal du tout, c’est la commande script -a -c [file]  
Je suis dessus, ça rend bien …  
Par contre, je vois que tu donne exemple de #!/bin/sh, est ce trés différent de bash,  
car j’ai des soucis pour manipuler les chaines de caractères (et dans toutes la doc que j’ai trouvé aujourd’hui,ya pas la moitié des exemples que je parviens à appliquer - souvent des erreurs de guillemets ou autres- dans les bout de code donnés).  
Par exemple, en bash, je n’arrive pas à utiliser :

- le caractère \n
- l’extraction de chaine (parvenu, mais quel galère)
- calcul arythmétique

Je suis un peu paumé du fait que les variables ne sont pas typées je pense, je cherche à faire des fonctions qui renvoie autres chose qu’une valeur numérique…  
Je crois que je vais persevérer en bash, mais je voudrais appelé des bibliothéques et fonctions java, la poo, c’est vachement plus commode je trouve …  
Je peux avoir quelques tuyaux sur l’appel de commande java au sein d’un scripts bash ? (j’ai un probleme de path sans doute et de syntaxe).  
concretement, mettons que j’ai une classe manipchaine et son fichier .java, dans le script, comment je l’appelle ?  
Où doit se trouver les .java et .class pour que bash (c’est pas le cas) si retrouve ?

---

<div class="post-metadata">

**Author:** ![stonfi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/54ee81/32.png) [@stonfi](https://www.debian-fr.org/u/stonfi)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/7 "2016-02-20T14:57:42Z")

</div>

Hello,

Pas mieux que la bible du scripting, [abs.traduc.org/abs-3.4-fr/](http://abs.traduc.org/abs-3.4-fr/) dedans tu as tout, les calculs arythmétiques, les formats d’affichage, les expressions reguliere, les itterations, les conditions, etc…

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 2:57 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/8 "2016-02-20T14:57:43Z")

</div>

bonjour,  
cii stonfi, je vais me coller sur celui-là alors, plus mieux en effet …  
Des idées pour exécuter des commandes java dans un script ? (syntaxe, paramètrage, path, Exemples, etc …).

Edit : il existe une version 3.9 du document : [http://abs.traduc.org/abs-3.9-fr/index.html](http://abs.traduc.org/abs-3.9-fr/index.html)

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 3:04 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/9 "2016-02-20T15:04:58Z")

</div>

Bon ben ça avance pas mal, j’ai un peu dérivé 😛 , me penchant en particulier sur l’upgrade (qui pose des fois problème).  
ça m’a pris du temps d’implementer des “tas” de fonctions qui vont me faciliter la tâche par la suite, mais j’ai presque fini, et tout sera bien consigné dans un fichier, avec les réponses …  
Bon ça fait surtout usage de apt, donc pas pour tout le monde …  
Des que j’ai mis au propre, je le … ben le hic, c’est qu’il y a plus de 1000 lignes, je me vois mal le poser ici, et comme j’ai mis de côté la securité, le ftp, apache (tous est fermé), où est-ce que je le met ce scripts et les fonctions qui vont avec ? Pour ceux que ça interesse bien sur …  
ps: j’en ai encore pour deux trois jours à mon avis … Autant dire que ça n’a plus rien à voir avec ce dit plus haut …

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 3:20 UTC](https://www.debian-fr.org/t/script-bash-automatiser-le-tracage-des-paquets-installes/4258/10 "2016-02-20T15:20:11Z")

</div>

[Version 4.0](http://abs.traduc.org/abs-4.0-fr/) disponible … les liens précédents ne sont plus valides.
