Zenity, pour rendre ses scripts plus interactifs

Le contexte est le suivant : Ma belle-mère, que j\’ai converti à Ubuntu il y a maintenant un peu plus d\’un an, s\’est offert il y a quelques jours un lecteur multimédia Archos 3cam Vision. Bien que l\’appareil ne casse pas trois pattes à un canard, il reste raisonnable vu son prix (70€). Bref, Belle-maman étant fan d\’opéras en tous genre, elle a donc extrait plusieurs CD en MP3 (merci Sound Juicer!) et les a transférés sur son Archos. Problème : Un opéra, ça s\’écoute dans l\’ordre et malgré des noms de fichiers suivant l\’ordre alphabétique, les MP3 se retrouvaient complètement mélangés quand on les parcourait depuis le lecteur.

Après quelques recherches, j\’ai appris que chez Archos, ils n\’ont rien trouvé de mieux que de classer les fichiers non pas par ordre alphabétique comme la logique le voudrait, mais par date de transfert… Je ne sais pas quelle est la raison de ce choix mais j\’imagine que Windows doit copier les fichiers d\’un emplacement à un autre par ordre alphabétique et que, comme la majorité des PC tournent sous Windows, blablabla, on connaît la chanson. Il s\’agit d\’une simple supposition mais je ne vois pas vraiment d\’autres explications rationnelles…

Quoi qu\’il en soit c\’est un problème connu et en cherchant un peu sur le Net, j\’ai trouvé une ligne de commande permettant de copier le contenu d\’un dossier vers un autre emplacement en transférant les fichiers un par un dans l\’ordre alphabétique. La ligne provient de et ressemble à ça :

find . -type f -print0 | sort -z -n  | xargs -0 cp --target-directory=\'/media/A3cam/Music/mon_album\'

Seulement voilà! Je me voyais mal expliquer à Belle-maman que pour transférer un album, il fallait qu\’elle crée préalablement dans /media/A3cam/Music un dossier de destination pour l\’album en question, qu\’elle se rende en ligne de commande dans le dossier contenant les MP3 qu\’elle souhaitait transférer et qu\’elle exécute cette ligne de commande tout en modifiant le chemin de destination en conséquence… Dieu sait si j\’aime la ligne de commande mais, même moi, ça me gênerait de devoir faire ça pour mettre correctement de la musique sur mon lecteur MP3. Bref, c\’est là qu\’intervient Zenity et j\’ai envie de dire qu\’après une intro comme ça, il était temps 😉

Zenity, qu\’est-ce que c\’est? Zenity, installé de base sur Ubuntu (et sur Arch avec Gnome?), permet de créer des boîtes de dialogue simples en GTK+ depuis le shell. Ce n\’est pas fait pour créer une interface complète mais ça permet quand même de donner une peu d\’interactivité à ses scripts. Le principe est très simple. La commande zenity suivie d\’une option (–file-selection, –info, –calendar, …) permet de générer une boîte de dialogue. Chaque boîte possède ensuite ses propres options de façon à la personnaliser. Ainsi, j\’ai pu adapter la ligne de commande précédente de la façon suivante :

#!/bin/sh

ARCHOS=\'/media/A3cam/Music\'

if [ ! -d $ARCHOS ]
        zenity --error --text=\"Le lecteur MP3 ne semble pas branché\\!\"
        exit
fi
FILE=`zenity --file-selection --filename=/home/user/Musique/ --directory --title=\"Sélectionnez un dossier à transférer\"`
case $? in

0)

FOLDER=${ARCHOS}/`basename $FILE`

mkdir $FOLDER

find $FILE -type f -print0 | sort -z -n | xargs -0 cp -v --target-directory=\"$FOLDER\"

zenity --info --text=\"Transfert effectué avec Succès\\!\";;

1|-1)

zenity --error --text=\"Impossible d\'effectuer de transfert. Le lecteur MP3 est-il bien branché et allumé? Avez-vous bien sélectionné le dossier à transférer?\";;

esac

Détaillons rapidement tout ça :

  • La première ligne spécifie le chemin vers le dossier Music de l\’Archos. La suite teste l\’existence de ce chemin et renvoie une pop-up d\’erreur le cas échéant.\"Erreur\"
  • On récupère ensuite dans la variable FILE le chemin choisi dans la fenêtre de sélection de dossier créée par Zenity. À noter le paramètre –filename qui permet de présélectionner un dossier, le paramètre –directory qui oblige à ne sélectionner que des dossiers, et le paramètre –title afin de donner un titre à la boîte de dialogue.\"Selection
  • Zenity retourne également un code de sortie qui est égal à 0 si tout s\’est bien passé, 1 ou -1 sinon (erreur, annulation). En bash, la variable $? permet de récupérer le code de sortie de la dernière commande exécutée. Un switch/case classique permet alors de trier ces codes de retour.
    • Si un dossier a bien été sélectionné, on crée un dossier de même nom sur le lecteur MP3 (on notera l\’utilisation de basename qui, entre autres, pour un chemin quelconque renvoie le nom du dossier courant). On exécute la commande qui va faire la copie élément par élément par ordre alphabétique et on génère une pop-up quand cette copie est terminée.\"Transfert
    • Dans le cas où la sélection de dossier retourne un code d\’erreur, on génère une pop-up en conséquence.\"Erreur\"

Ce script est encore perfectible mais il permet de proposer l\’exécution d\’une commande spécifique de manière un tant soit peu interactive. Zenity est au bout du compte très basique mais suffisant pour beaucoup de choses. On notera par exemple le calendrier ou la barre de progression. Enfin de la personnalisation de contenu est possible grâce à des balises type HTML. Une documentation est disponible sur le site de Gnome et sur Ubuntu-fr.

NB : Si quelqu\’un possède un Archos 3cam Vision ou équivalent, a-t-il une idée de comment sont organisés les dossiers? Les fichiers, maintenant c\’est assez clair, mais les dossiers ont l\’air de suivre encore une autre logique… Les gars de chez Archos ont-ils choisi de trier les dossier en fonction de la taille moyenne des noms de fichiers qu\’ils contiennent?!…

Réparer l\’erreur MySQL : Table \’./ma_base/ma_table\’ is marked as crashed and last (automatic?) repair failed

\"MySQLJ\’ai sur mon serveur une tâche Cron qui met à jour mes flux RSS toutes les 15 minutes dans la base de données MySQL de RssLounge. Or, après une mise à jour de certains paquets de ma Ubuntu Server 10.04 (dont MySQL), plus moyen d\’accéder à la table dans laquelle sont stockés ces flux. Que ce soit depuis l\’application RssLounge ou depuis la ligne de commande, MySQL me renvoie l\’erreur suivante :

Table \’./ma_base/ma_table\’ is marked as crashed and last (automatic?) repair failed

Ceci est tout simplement dû au fait que des opérations d\’insertion sur cette table étaient en cours d\’exécution au moment où la procédure de mise à jour a arrêté le service MySQL. Le fichier contenant les enregistrements, ma_table.MYI, est donc corrompu. Il existe cependant une procédure de réparation assez simple grâce à l\’outil myisamchk présent avec l\’installation de MySQL. Comme vous l\’aurez compris, cette procédure n\’est valable que pour les tables de type MyISAM.

Dans un premier temps, nous allons couper les services d\’Apache et MySQL de façon à ne pas créer de nouveaux conflits durant la procédure de réparation.

$ sudo /etc/init.d/apache2 stop
$ sudo /etc/init.d/mysql stop

Nous allons ensuite vérifier que le fichier que nous souhaitons réparer contient bien des erreurs (en gros, qu\’on a bien choisi le fichier corrompu) :

$ sudo myisamchk /var/lib/mysql/ma_base/ma_table.MYI
Data records:    4945   Deleted blocks:       0
myisamchk: warning: Table is marked as crashed and last repair failed
- check file-size
myisamchk: warning: Size of indexfile is: 602112        Should be: 53248
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
myisamchk: error: Found 4943 keys of 4945
- check record links
myisamchk: error: Record-count is not ok; is 4943         Should be: 4945
myisamchk: warning: Found 1870736 deleted space.   Should be 0
myisamchk: warning: Found        971 deleted blocks       Should be: 0
myisamchk: warning: Found       9665 key parts. Should be: 4943
MyISAM-table \'/var/lib/mysql/ma_base/ma_table.MYI\' is corrupted
Fix it using switch \"-r\" or \"-o\"

Maintenant que nous sommes sûr qu\’il s\’agit de ce fichier, nous allons tout simplement tenter la procédure de réparation. La première chose à essayer (qui a fonctionné pour moi) est l\’option \ »-r\ » ou \ »–recover\ ». Il s\’agit d\’une méthode de réparation efficace qui corrige à priori la majorité des problèmes de corruption dans une table. Dans le cas où cette méthode échouerai, l\’option \ »-o\ » ou \ »–safe-recover\ » peut être tentée. On a donc :

$ sudo myisamchk -r /var/lib/mysql/ma_base/ma_table.MYI
- recovering (with sort) MyISAM-table \'/var/lib/mysql/ma_base/ma_table.MYI\'
Data records: 4945
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
- Fixing index 6
Data records: 4943

Et on vérifie :

sudo myisamchk /var/lib/mysql/ma_base/ma_table.MYI
Checking MyISAM file: /var/lib/mysql/ma_base/ma_table.MYI
Data records:    4943   Deleted blocks:       0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check data record references index: 4
- check data record references index: 5
- check data record references index: 6
- check record links

Enfin, on relance Apache et MySQL :

$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/apache2 start

Et si tout va bien, tout refonctionne comme si de rien n\’était!

Trier et supprimer les doublons d\’un fichier sous Linux

\"Terminal\"Dans le cadre du débuggage d\’un programme C, j\’ai été amené à écrire dans un fichier plus de 5 millions de valeurs numériques dans le but de les trier ensuite et de supprimer les doublons (\ »Ah le mec qui debug avec des printf()!\ » – Ouai ben des fois y\’a que ça d\’efficace!) . Une fois ce fichier généré, soit environ 40Mo, je me suis posé la question de l\’outil à utiliser pour effectuer les opérations dont j\’avais besoin. J\’ai pensé à plusieurs choses :

  • Ouvrir le fichier avec LibreOffice Calc mais il se trouve que celui-ci est limité à un peu plus de 100 000 lignes et ne permet donc pas d\’exploiter mon fichier.
  • Insérer en base de données les valeurs et effectuer les opérations en SQL. Problème : Il faut une base de données à disposition d\’une part et si c\’est le cas, MySQL via PhpMyAdmin refuse d\’importer le fichier car il est, semble-t-il, trop volumineux.
  • Écrire un programme qui lit le fichier, stocke toutes la valeurs dans un tableau et effectue les opérations nécessaires. Seulement voilà, on n\’a pas forcément l\’envie ni le temps d\’écrire un programme pour un traitement aussi commun.

Bref, c\’est là qu\’intervient Linux et la puissance des outils qui lui sont associés. Dans un terminal :

$ sort -g mon_fichier | uniq > mon_nouveau_fichier

C\’est aussi simple que ça! Et le temps d\’exécution est très raisonnable :

$ time sort -g mon_fichier | uniq > mon_nouveau_fichier 

real	0m8.013s
user	1m0.326s
sys	0m0.403s

Quelques brèves explications :

  • sort -g permet le tri en prenant l\’ordre des valeurs numériques et pas l\’ordre alphanumérique classique. Sans cette option, on aurait un résultat de ce type : 1, 10, 100, 1000, 11, 110, 1110, …
  • uniq permet de supprimer les doublons et de renvoyer les valeurs uniques.

Certes ce n\’est pas quelque chose dont on a besoin tous les jours mais ça permet de montrer encore une fois la diversité et la puissance des outils fournis sous Linux. Et ça encourage à chercher du côté de ces petits utilitaires avant de tenter des choses improbables ou de réinventer la roue…

Manuel de sort
Manuel de uniq

EDIT : Il est aussi possible d\’effectuer le tout (tri + suppression des doublons) en ajoutant -u au sort. On aura donc sort -gu mon_fichier > mon_nouveau_fichier. Au niveau du temps d\’exécution il n\’y a aucune différence et le résultat est identique. Merci AP pour l\’info!

Fortune et Kaamelott

La commande fortune permet d\’afficher dans son terminal des citations en tout genre (extraits de livres, théorèmes, citations d\’hommes politiques, etc…). Bien que ce ne soit pas d\’une utilité flagrante, voire même carrément chronophage, une petite citation à chaque ouverture de terminal, par exemple, ajoute un peu de gaîté à une journée de travail pas toujours reluisante.

Pour l\’installer et ajouter des citations françaises :

$ sudo apt-get install fortune fortunes-fr

Ensuite l\’exécution se fait simplement en tapant la commande fortune éventuellement suivie d\’un des thèmes présent dans la liste issue de fortune -f.

Seulement voilà… Les citations incluses dans le paquet ne sont pas toujours fantastiques et parfois même incompréhensibles. Bref, suite à un journal posté sur LinuxFr concernant une fortune sur La Classe Américaine, je me suis lancé dans l\’écriture d\’un fichier contenant des citations de Kaamelott. Pour avoir une bonne base, je suis parti sur celles proposées sur Wikiquote. Après avoir ajoutées les extraits de la page principale et des pages dérivées (Arthur, Léodagan, Perceval, Karadoc, etc…) j\’arrive à un total de 505 entrées ce qui commence à être suffisamment correct pour le partager! Le fichier texte se trouve ici. Une fois que vous l\’aurez enregistrer, ouvrez un terminal et allez dans le répertoire contenant ce fichier texte puis :

$ mv kaamelott.txt kaamelott
$ strfile kaamelott
\"kaamelott.dat\" created
There were 505 strings
Longest string: 2166 bytes
Shortest string: 50 bytes

La comamnde strfile va générer un fichier .dat lisible par fortune. Il suffit ensuite de copier ces deux fichier dans le répertoire approprié :

$sudo cp kaamelott kaamelott.dat /usr/share/games/fortunes/

Le tour est joué! La preuve :

$ fortune kaamelott
Un village assailli de brigands, une femme qui se fait tabasser, une poule qui boîte,
c est pas les opprimés qui manquent ! Et là au moins, j aurais l impression de servir
à quelque chose.
[Lancelot, Livre III, 1 : Le chevalier errant]
$

Enfin, pour avoir une citation au lancement de son terminal il suffit d\’ajouter cette commande dans son fichier ~/.bashrc.

Le manuel de la commande fortune se trouve . Un explication détaillé est également disponible ici.

Si vous avez des suggestions de citations à ajouter, ce sera avec plaisir! Postez les dans les commentaires et je me chargerai du reste. Si vous pouvez en plus fournir le nom et le numéro de l\’épisode, alors là c\’est parfait!

Rappel: Rediriger les entrées/sorties sous UNIX

Un article comme celui-là a déjà été écrit maintes et maintes fois mais une piqûre de rappel n\’est jamais de trop! Et ça me permettra de bien (re)intégrer ces notions de redirection d\’entrées/sorties.

Premier point : vu que sous un système UNIX tout est fichier, les entrées et sorties ne dérogent pas à cette règle. De même, chaque fichier possède un \ »descripteur de fichier\ » qui est un numéro unique permettant d\’identifier un fichier. Les fichiers d\’entrée/sortie ont un numéro fixe particulier permettant d\’y accéder facilement :

  • 0 : entrée standard
  • 1 : sortie standard
  • 2 : sortie d\’erreur

Ces numéros peuvent s\’avérer très utiles couplés aux caractères de redirection basiques. Ainsi, on peut facilement écrire dans un fichier les erreurs que provoque une commande ou encore en supprimer l\’affichage lors de l’exécution. Bref, il est possible de faire énormément de choses et le tableau suivant se veut en être un résumé (non exhaustif) :

[table id=1 /]

Quelques modestes exemples d\’utilisation (que je complèterai plus tard…) :

$ find -name test > ~/find_result
# recherche les fichiers nommés \"test\" depuis le repertoire courant récursivement
# dans tous les sous-répertoires et met le résultat dans le fichier find_result à la
# racine de son répertoire utilisateur
$ rgrep -n biscotte * 2> /dev/null
# recherche le mot \"biscotte\" depuis le répertoire courant récursivement dans
# tous les fichiers et supprime l\'affichage des erreurs (notamment les fameuses
# \"permission denied\" sur certains fichiers)

Planifier une execution avec at

\"Clock\"Lorsque l\’on souhaite planifier de façon régulière l\’exécution d\’une commande ou d\’un script, le plus efficace reste l\’utilisation de cron. En revanche, lorsqu\’il s\’agit d\’une action unique, il existe une commande linux très pratique : at. L\’utilisation de base pour une planification dans la journée est assez simple. Il suffit de faire suivre at de l\’heure à laquelle on souhaite exécuter la commande ou le script en concaténant les heures et les minutes. Après avoir pressé la touche <entrée> un prompt s\’ouvre pour y tapper la ou les commandes souhaitées chacune suivie d\'<entrée>. Après la dernière commande, un Ctrl+D validera la planification. Par exemple, pour lancer le script synchro.sh aujourd\’hui à 23h30 :

$ at 2330
warning: commands will be executed using /bin/sh
at> sh ~/synchro.sh
at> 
job 7 at Tue Jun 29 23:30:00 2010
$

Plusieurs options sont proposées pour personnaliser un peu plus l\’exécution. On peut citer en particulier le paramètre -l permettant de lister les planifications en cours :

$ at -l
7	Tue Jun 29 23:30:00 2010 a username
$

ou encore la commande atrm suivie de l\’id de la tâche pour la supprimer.

$ at -l
7	Tue Jun 29 23:30:00 2010 a username
$ atrm 7
$ at -l
$

Pour le manuel de la commande, c\’est par là.

Notifications depuis le shell

Voilà déjà un moment que les bulles de notification ont fait leur apparation sur des distributions linux (je pense en particulier à Ubuntu ou Kubuntu). Je les trouve personnellement très pratiques et bien intégrées. Du coup, pourquoi ne pas s\’en servir pour une utilisation plus personnelle depuis un terminal?

Prenons un exemple concret dans le cadre du développement d\’un site web avec le framework PHP Symfony (comme ça je commence un peu à en parler…). La tâche Symfony doctrine:build-all-reload permet de reconstruire la base de données, regénérer les classes d\’abstraction et remplir la base avec les données qu\’on lui fournit. Bref, dans le cadre d\’un projet qui devient important, cette tâche peut prendre facilement une dizaine de minutes. Il peut alors être intéressant d\’être alerté une fois ceci terminé plutôt que de surveiller régulièrement son terminal. C\’est là que la commande notify-send intervient. Pour pouvoir l\’utiliser :

sudo apt-get install libnotify-bin

Puis pour faire apparaitre un premier message :

notify-send \"Test notification\"
\"Test

Pour le moment c\’est assez simple. Mais bien entendu, comme toujours, il existe un certain nombre de paramètres pour personnaliser tout ça. Les deux principaux selon moi sont :

  • -t <temps_en_millisecondes> qui permet de spécifier le temps (en millisecondes) au bout duquel le message expirera.
  • -i <chemin_vers_icone> qui permet d\’ajouter une icone dans la bulle de notification. Très pratique pour que l\’avertissement soit plus visuel.

Revenons à notre exemple. Dans un premier temps, j\’ai créé à la racine de mon répertoire personnel un dossier .notify dans lequel j\’ai copié une icone représentant le logo de Symfony. J\’ai ensuite rajouté un alias pour ma commande dans mon .bashrc. La commande qui doit être executée comprend la commande Symfony suivi d\’une notification (d\’où le && entre). Ce qui donne ceci :

alias sf-doctrine-build-all-reload=\'sf doctrine:build-all-reload --no-confirmation && notify-send -i ~/.notify/sf.png \"doctrine:build-all-reload done\"\'

On obtient tout de suite quelque chose de plus sympa!

\"Sf

Et voilà! C\’est facilement adaptable à d\’autres alias ou scripts en tout genre et ça a quand même de la gueule! Pour la manuel, c\’est par là. Pour les spécifications complètes de la commande, c\’est par ici.

sl ou comment s\’auto-flageller

Tous les utilisateurs de linux familiers avec la ligne de commande se sont retrouvés un jour avec cette faute de frappe :

user@server:~# sl
-bash: sl: command not found
user@server:~#

De façon à se punir de cette coquille, il existe une commande dont la description est plutôt claire :

sl – display animations aimed to correct users who accidentally enter sl instead of ls.

Cette commande fait passer un train en ASCII dans le terminal. Pour couronner le tout, on ne peut d\’une part pas tuer le processus (à moins de spécifier le paramètre -e mais là c\’est clairement plus une faute de frappe !!!) et d\’autre part les principaux paramètres à la commande ls, à savoir le -l et le -a, sont également implémentés dans sl. Le premier affichera un train plus petit et le second fera appeler au secours les passagers avec des \ »help!\ ».

\"Commande

Bref, c\’est inutile, énervant et relève du masochisme : autant dire indispensable! Donc pour l\’installer c\’est comme d\’habitude :

sudo apt-get install sl

Et le manuel est là : manuel sl.

Connaître la place prise sur le disque par un paquet

J\’ai eu besoin il y a quelques jours de connaître la taille utilisée sur le disque par un paquet installé. Sur une version desktop d\’Ubuntu (ou autre) il suffit d\’ouvrir le gestionnaire de paquet et de regarder les propriétés du programme installé. En revanche, sur une version serveur sans interface graphique, ça demande évidemment un peu plus de travail. A ma connaissance, deux solutions pour y parvenir : aptitude ou dpkg-query.

Exemple concret : on souhaite connaître la place utilisée sur le disque par l\’éditeur de texte vim.

1 – via aptitude

aptitude show vim

Cette commande fournit en sortie un certain nombre d\’informations concernant le paquet en question. La ligne qui nous intéresse est celle intitulée \ »Taille décompressée\ » :

Paquet : vim
État: installé
Automatiquement installé: non
Version : 2:7.2.245-2ubuntu2
Priorité : optionnel
Section : editors
Responsable : Ubuntu Developers
Taille décompressée : 1 937k
Dépend: vim-common (= 2:7.2.245-2ubuntu2), vim-runtime (= 2:7.2.245-2ubuntu2), libacl1 (>= 2.2.11-1), libc6 (>= 2.7), libgpm2 (>= 1.20.4), libncurses5 (>=
5.6+20071006-3), libpython2.6 (>= 2.6), libselinux1 (>= 2.0.85)
Suggère: ctags, vim-doc, vim-scripts
Est en conflit: vim-common (< 1:7.1-175+1)
Remplace: vim-common (< 1:7.1-175+1)
Fournit: editor
Fourni par: vim-gnome, vim-gtk, vim-nox
Description : Vi IMproved – enhanced vi editor
Vim is an almost compatible version of the UNIX editor Vi.

Many new features have been added: multi level undo, syntax highlighting, command line history, on-line help, filename completion, block operations, folding, Unicode
support, etc.

This package contains a version of vim compiled with a rather standard set of features. This package does not provide a GUI version of Vim. See the other vim-*
packages if you need more (or less).
Site : http://www.vim.org/

2 – via dpkg-query

dpkg-query -s vim

Dans ce cas, c\’est la ligne \ »Installed size\ » qui va nous importer (la valeur affichée est en kilo-octet) :

Package: vim
Status: install ok installed
Priority: optional
Section: editors
Installed-Size: 1892
Maintainer: Ubuntu Developers
Architecture: amd64
Version: 2:7.2.245-2ubuntu2
Replaces: vim-common (<< 1:7.1-175+1) Provides: editor Depends: vim-common (= 2:7.2.245-2ubuntu2), vim-runtime (= 2:7.2.245-2ubuntu2), libacl1 (>= 2.2.11-1), libc6 (>= 2.7), libgpm2 (>= 1.20.4), libncurses5 (>= 5.6+20071006-3), libpython2.6 (>= 2.6), libselinux1 (>= 2.0.85)
Suggests: ctags, vim-doc, vim-scripts
Conflicts: vim-common (<< 1:7.1-175+1)
Description: Vi IMproved – enhanced vi editor
Vim is an almost compatible version of the UNIX editor Vi.
.
Many new features have been added: multi level undo, syntax
highlighting, command line history, on-line help, filename
completion, block operations, folding, Unicode support, etc.
.
This package contains a version of vim compiled with a rather
standard set of features. This package does not provide a GUI
version of Vim. See the other vim-* packages if you need more
(or less).
Homepage: http://www.vim.org/
Original-Maintainer: Debian VIM Maintainers

L\’avantage selon moi de dpkg-query est le grand nombre d\’options permettant notamment de spécialiser l\’affichage en le limitant à l\’information que l\’on cherche. Ainsi pour n\’afficher que le nom du paquet et la place qu\’il prend sur le disque :

dpkg-query --show --showformat=\'${Package}\\t${Installed-Size}\\n\' vim

On aura alors en sortie :

vim 1892

Cependant, comme on peut le voir sur cet exemple les informations donnée par chacune des commandes ne sont pas toujours les mêmes (par exemple 1937ko pour aptitude contre 1892ko pour dpkg-query). Cette différence ne se constate que sur certains paquets et je dois dire que je n\’ai pas encore trouvé quelle en est la raison…
Pour plus d\’informations sur ces commandes : manuel d\’aptitude et manuel de dpkg-query.