Les commandes pratiques sous Linux

Pour éviter de les conserver trop longtemps dans un historique et risquer de les perdre et par là même en faire profiter les autres.

APT

Faire un peu de nettoyage

Via "dpkg -l"

dpkg --purge $(COLUMNS=200 dpkg -l | grep "^rc" | tr -s ' ' | cut -d ' ' -f 2)

Via "dpkg --get-selections"

aptitude purge $(dpkg --get-selections | grep deinstall | awk '{print $1}')

source

Divers

On peut aimer aussi :

aptitude clean
aptitude autoclean
apt-get autoremove
aptitude remove `deborphan`

Forcer le fonctionnement de dpkg

Parfois, les outils traditionnels de gestion de paquets ne fonctionnent plus à cause de paquets problématiques. Les options force de dpkg sont alors les bienvenues. En premier lieu, prendre un peu de temps pour lire le manuel.

dpkg --force-help

Puis on peut essayer graduellement :

dpkg --force-remove-reinstreq -P nom_du_paquet
dpkg --force-overwrite -i emplacement_du_paquet.deb
dpkg --force-all -P nom_du_paquet
dpkg --force-all -i emplacement_du_paquet.deb

Aptitude : Motifs de recherche

Après avoir installé le paquet aptitude-doc-fr, tout se trouve ici : /usr/share/doc/aptitude/html/fr/ch02s03.html

Toutes les spécificités du format d'affichage se trouvent ici /usr/share/doc/aptitude/html/fr/ch02s04s01.html#secDisplayFormat

Application 1 : Revenir à Ubuntu après avoir voulu tester Kubuntu

L'intersection entre les dépendances des méta-paquets ubuntu-desktop et kubuntu-desktop n'étant pas nulle.

aptitude search ~i~R"kubuntu-desktop"!~R"^ubuntu-desktop"

En fonction du shell utilisé, il faut déspécialiser le point d'exclamation et le tilde avec un anti-slash.

Ensuite on purge avec :

sudo aptitute purge `filtre_ci_dessus`

Application 2 : Faire du ménage

aptitude purge ~c

Application 3 : mettre à jour coûte que coûte

parfois, lors de gros bug comme celui-ci #192992 qui a tout de même 50 duplicates et qui paralyse complètement APT, on aime

sudo aptitude clean                        # vider le cache d'APT
sudo aptitude -d safe-upgarde              # -d seulement télécharger
sudo dpkg -i /var/cache/apt/archives/*.deb # installer à la main

C'est sensé être une application aux motifs de recherche mais la commande initiale aptitude download "~U" ne fonctionne pas.

Mail

Retraiter une mbox avec procmail

Il faut utiliser formail pour découper la mbox en mails individuels et les renvoyer dans procmail avec la commande :

cat /ta/mbox | formail -s procmail
  • ou encore :

formail -s procmail < /ta/mbox

Envoyer des mails

avec exim4

Sur debian/ubuntu, il vous faut les paquets exim4 et mailx. A l'installation d'exim4, il faut spécifier qu'on veut juste envoyer des mails sans serveur de mail en local, puis préciser son nom de machine et le serveur smtp à utliser.

Pour reconfigurer exim4 si nécessaire :

dpkg-reconfigure -plow exim4-config

Ensuite, il suffit de taper :

mail -s titre_du_message adresse_email < corps_du_message

corps_du_message est un fichier texte enregistré dans votre home.

Si un mail reste dans la file d'attente mailq, on peut taper pour en savoir plus:

exim4 -Mvl <msgid>

avec ssmtp

/!\ sSmtp n'a plus l'air maintenu depuis longtemps, et a plein de limitations désagréables.

Sur debian/ubuntu, il vous faut les paquets ssmtp et mailx. A l'installation, rien n'est demandé mais il faut éditer le fichier /etc/ssmtp/ssmtp.conf et renseigner les champs :

#Spécifie a quelle adresse doit être envoyé les mails destiné à root 
root=nom@domaine.qqch
mailhub=smtp.crans.org
# rewriteDomain=toto.net
hostname=nom_de_machine
FromLineOverride=YES

Une option est en commentaire (pour les décommenter, enlever le dièse en début de ligne). L'option rewriteDomain permet de spécifier le nom de domaine par défaut des expéditeurs. Par exemple, s'il est mis à crans.org, les mails générés par le système sembleront venir de root@crans.org. De même, si un mail est envoyé à "machin", sans spécifié le domaine, ssmtp écrira automatiquement le domaine par celui spécifié par rewriteDomain : machin@toto.net. Donc si le tout ne donne pas une adresse mail valide, le mail n'arrivera jamais...

A priori, cela n'a pas besoin d'être un vrai nom de domaine, mais la plupart des "vrais" serveurs smtp demandent un nom de domaine valide s'il s'agit de relayer du courrier vers d'autres domaines. La valeur par défaut est la valeur de hostname (ce qui est tout à fait convenable). L'option FromLineOverride=YES sert à utiliser les options comme 'From:' dans la commande mail (je crois, je suis presque sur)

Il faut aussi éditer le fichier /etc/ssmtp/revaliases, qui permet de personnaliser le champ From: d'un mail suivant l'utilisateur.

root:toto@toto.net:smtp.toto.net

Ici, tous les mails de l'utilisateur root seront en fait envoyés avec From: toto@toto.net en utilisant le serveur smtp.toto.net.

Pour envoyer les mails, les mêmes commandes qu'avec exim4 marchent.
Exemples :

echo "Mail simple"|mail -s "Test 1" adresse_mail

echo "Mail avec From"|mail -s "Test 2" adresse_mail -a 'From:adresse_mail@expediteur.org'

echo "Mail avec Reply"|mail -s "Test 3" adresse_mail -a 'From: On_peut_mettre_un_nom <adresse_mail@expediteur.org>' -a 'Reply-To: Un_Nom <adresse_mail@reply.org>'

Supprimer le contenu d'un fichier

Pour supprimer le contenu d'un fichier, par exemple un fichier de journal, on peut au choix :

  • effacer le fichier avec rm file-to-be-cleared puis le recréer

  • taper la commande :>file-to-be-cleared

La deuxième solution est préférable, car dans le premier cas, si un programme tente d'accéder au fichier avant qu'on l'ait recréé, ça peut aller mal.

GNU Privacy Guard

Générer son graph de confiance

gpg --list-sigs | sig2dot | neato -Tpng | display

Si on veut n'avoir que les gens qui nous ont signé (ça fait un peu de ménage) :

gpg --list-sigs $( gpg --list-sigs mon_login@mon_domaine.com | grep ^sig | cut -b 14-22 | sort | uniq | tr '\n' ' ' ) | sig2dot | neato -Tpng | display
  • le 1er script donne la liste des signatures
  • le 2eme le transforme en texte schématique
  • le 3eme tranforme un texte schématique en image
  • le 4eme affiche l'image

et ça donne ça :

 * [graph.png 1]

Nécéssite les paquets sig2dot & springgraph (pour l'utilitaire neato)

manipulation image

Renommer des photos en masse

Une fois dans le bon dossier, taper :

format="nom_%0$(($(/bin/ls | wc -l | wc -c)-1))i.extension"
I=1
for f in *.extension
do
  mv "$f" "$(printf $format $I)"
  I=$((I+1))
done

Tous les fichiers du dossier seront de la forme nom_XXX.extension où XXX varie entre 0[..]01 et le nombre total de fichiers.

réduire images en masse

Les appareils photos actuels ont de grandes résolutions, pas forcément très utiles. Pour réduire un ensemble de photos, utilisez ce petit script. Il faut installer le package imagemagick.

  • On peut utiliser une boucle for dans un script

COMMAND="convert -quality 60 -size 1024x768"
mkdir dest
for i in *.JPG *.jpg; do
  ${COMMAND} "$i" "dest/$i"
done
  • C'est aussi faisable simplement avec find dont la syntaxe générale est

find [Répertoire à rechercher] -name [Fichiers à rechercher] -exec [Commande] {} \;

On peut d'ailleurs avoir un script avec deux arguments : mettez le contenu ci-dessous dans un fichier exécutable appelé redimensionne (dans votre path, /usr/local/bin par exemple), et si vous tapez redimensionne /chemin/de/source /chemin/de/destination, cela fera ce à quoi vous vous attendez. Si vous avez des espaces dans vos noms de répertoires, pensez à les entourer de guillemets.

COMMAND="convert -quality 60 -size 1024x768"
# (syntaxe bash) Si on a moins de deux arguments, on quitte
[ $# -ne 2 ] && echo 'J'\''ai besoin de deux arguments !' && exit 1
# (syntaxe bash) Si le répertoire source n'existe pas, on quitte
[ ! -d "$1" ] && echo 'J'\''ai besoin d'un répertoire de source valide !' && exit 1
SOURCE="$1"
DEST="$2"
# (syntaxe bash) Si et seulement si le répertoire de destination existe, on le crée
# avec éventuellement les répertoires parents qui vont bien
[ ! -d "$DEST" ] && mkdir -p "$DEST"
# Ça marche avec les .jpg .jpeg .png .JPG .JPEG .PNG 
# - les ( ) entourent l'ensemble des conditions pour que -exec s'applique à toutes
# - execdir renvoie "./fichier.jpg" plutôt que "/chemin/vers/fichier.jpg" et
# exécute la commande dans le répertoire où se trouve le fichier
find "$SOURCE" \( -iname "*.jpg" -o iname "*.jpeg" -o iname "*.png" \) -execdir $COMMAND {} "$DEST"/{} \;

Dans tous les cas décrits ici, les images réduites sont dans le répertoire dest, créé dans le répertoire où sont les photos.

manipulation vidéo

On peut aller voir ici WikiInformatique/AviDemux

Convertir un .mov en .avi

mencoder fichieroriginal.mov -oac mp3lame -lameopts cbr:br=128 -ovc xvid -xvidencopts bitrate=800:pass=2 -vop scale -zoom -xy 512 -sws 2 -o fichierdesortie.avi

Convertir un .wma en .wav .mp3 ou .ogg

On utilise mplayer. Ensuite, on pourra convertir le .wav en .ogg ou mp3

mplayer file.wma -ao pcm -aofile file.wav

Plus simple, une ligne de commande qui convertit vos .wma en .ogg

for i in *.wma ;do mplayer -ao pcm -aofile "${i%.wma}.wav" "$i"; oggenc "${i%.wma}.wav"; rm "${i%.wma}.wav"; done

Manipulation des PostScript et des pdf

Sélection de pages dans un fichier postscript

On utilise psselect :

psselect -p 3,5,9,12 fichier.ps fichier_sortie.ps

Fusionner des pdf

Il y a plusieurs utilitaires différents:

pdftk

On utilise la fonction cat de pdftk:

pdftk fichier1.pdf fichier2.pdf fichier3.pdf cat output fichier.pdf

Ou si on veut prendre que certaines pages des différents pdf

pdftk A=fichier1.pdf B=fichier2.pdf C=fichier3.pdf cat A1-2 B5 C output fichier.pdf

Dans cet exemple, on prend les pages 1 à 2 du pdf A la 5eme du pdf B et tout le pdf C

pdfjam

On peut aussi utiliser l'utilitaire pdfjoin du toolkit pdfjam

pdfjoin --outfile output.pdf pdf1.pdf pdf2.pdf ...

Extraire certaines pages d'un pdf

Avec pdftk

pdftk A=fichier1.pdf cat A1-2 output fichier.pdf

Dans cet exemple, on prend les pages 1 à 2 du pdf A.

Changer le nombre de pages par feuilles de papier

Pour cela, pdfnup du toolkit pdfjam est très agréable

pdfnup --nup 3x3 --outfile merged.pdf to_merge.pdf

Pivoter des pdf

On utilise la fonction cat de pdftk.

pdftk A=entree.pdf cat A-W output sortie.pdf

Pour désigner la rotation a effectuer on utilise la première lettre du point cardinal en anglais:

  • North : 0°
  • East : 90°
  • South : 180°
  • West : 270°

source

Extraire les images d'un fichier pdf

Avec pdfimages compris dans le paquet xpdf : les images sont stockées dans MesImages-000.jpg etc :

pdfimages -j MonFichier.pdf MesImages

Convertir un pdf en png

convert Monfichier.pdf Monfichier.png

Cela fonctionne également dans l'autre sens, mais dans certains cas, les résultats sont inacceptables et l'on a meilleur compte à utiliser alors gimp.

Faire un pdf à partir de jpgs

Le script suivant, basé sur les packages ImageMagik et pdftk permet de créer un unique pdf à partir d'une série de jpg (des feuilles scannées). inline:jpgs2pdf.sh]

Si on a deux pages fichier1.jpg et fichier2.jpg, on crée fichier.pdf avec

./jpgs2pdf.sh fichier

dans le bon répertoire

Remarques :

  • -resize 50x50% divise la résolution par 4, à adapter

  • -quality 50 augmente la compression jpg qui est de 75% par défaut

  • -page A4+0+0 n'est pas documenté dans le cas de la conversion pdf, mais c'est cela qui fait que le pdf s'imprimera avec une feuille sur une page A4. Si vous faite un pdf de pochettes cd, je ne sais pas ce que ça donnera lors de l'impression.

Changer le fuseau horaire de l'horloge de sa machine

Ça peut être utile par exemple lors de stages à l'étranger :) .

On peut utiliser, en root, l'utilitaire en ligne de commandes tzconfig.

Sed

Retirer la Nième ligne d'un fichier.

sed -i 'Nd' fichier

Racheter de la RAM

Pour en savoir plus sur le modèle de votre RAM

sudo dmidecode -t memory  

Plus généralement dmidecode permet d'afficher les informations du Desktop_Management_Interface