dimanche 10 mai 2015

Renommer ses photos en fonction de la date et de l'heure

Suite à un voyage à Washington et à New-York d'une semaine, ma soeur et moi avons produits plus de 2000 photos à nous deux. Le problème étant de classer ces photos, venant de 2 APN différents, dans un ordre chronologique en les renommant au format yymmdd_hhmmss.

Rien de mieux que d'utiliser encore ExifTool grâce à cette petite commande :

exiftool "-FileName<CreateDate" -d "%Y%m%d_%H%M%S%%-c.%%e" DIR

Cette commande va renommer toutes les images dans le répertoire DIR en fonction de la date et l'heure (%Y%m%d_%H%M%S) du tag CreateDate, ajouter un nombre de copie, précédé de "-", si le fichier existe déjà (%-c), et préserver l'extension de fichier (%e). Notez les '%' supplémentaires nécessaire pour échapper aux codes de nom de fichier (%c et %e) dans la chaîne de format de date.

Pour en savoir plus :

dimanche 23 novembre 2014

abcde : ripper vos CD en ligne de commande

abcde (ou "A Better CD Encoder") est un puissant outil en console qui permet de ripper ses CD dans de multiples formats audio (Ogg/Vorbis, MP3, FLAC, Ogg/Speex et/ou MPP/MP+(Musepack)).

Installation

L'installation du paquet abcde sur CentOS/Fedora/RHEL se fait ainsi : yum install abcde

Vous pouvez installer des paquets complémentaires afin de gérer plusieurs options :

  • pour la gestion des tags ID3 : yum install id3lib id3v2
  • pour la conversion en format Ogg/Vorbis : yum install vorbis-tools libvorbis
  • pour la conversion en format FLAC : yum install flac flac-libs
  • pour la conversion en format MPEG Audio Layer III (MP3) : yum install lame
  • pour l'extraction en format WAV, AIFF ou en données brutes des pistes audio : yum install cdparanoia
  • pour l'interrogation des bases de données CDDB (Compact Disc Database) sur Internet : yum install cd-discid
  • pour la gestion des CD enregistré en format Disc-At-Once : yum install cdrdao

Configuration

La configuration de abcde se fait par le biais du fichier de configuration .abcde.conf qui doit se trouver dans votre répertoire $HOME. abcde regarde les 2 fichiers suivant au démarrage :d'abord ~/.abcde.conf et puis, s'il n'existe pas, /etc/abcde.conf.Le fichier de configuration abcde.conf est complètement commenté ce qui rend la configuration plus facile. Néanmoins, il vaut mieux en faire une copie dans son répertoire Home pour le personnaliser.

Copie du fichier abcde.conf cp /etc/abcde.conf ~/.abcde.conf

Edition du fichier abcde personnalisé nano ~/.abcde.conf

Voyons quelques options de base à renseigner :

  • Spécifier les programmes d'encodage utilisé :
    • Pour Ogg Vorbis : OGGENCODERSYNTAX=default.
    • Pour MP3 : MP3ENCODERSYNTAX=default.
    • Pour FLAC : FLACENCODERSYNTAX=default.

L'option default signifie qu'il reconnait par défauts les encodeurs suivants : oggenc, lame, flac, speexenc et mppenc.

  • Le chemin des programmes d'encodage utilisé :
    • Pour Ogg Vorbis : OGGENC=oggenc.
    • Pour MP3 : LAME=lame.
    • Pour FLAC : FLAC=flac.

Ce sont les chemins par défaut.

  • Le paramétrage des programmes d'encodage et notamment de la qualité de compression :
    • Pour Ogg Vorbis : OGGENCOPTS='-q 3' ==> encodage en qualité Q3 soit à 112kbps (voir le man de oggenc).
    • Pour MP3 : LAMEOPTS='--preset standard' ==> encodage en qualité V2 soit à 256kbps (voir le man de lame).
    • Pour FLAC : FLACOPTS='- -verify - -best' ==> encodage en haute qualité (voir le man de flac).
  • Les options de sortie :
    • Pour encoder dans les 3 formats (OGG, MP3 et FLAC) : OUTPUTTYPE="ogg,mp3,flac" sinon il suffit de mettre juste le(s) format(s) voulu(s).
    • Le répertoire de sortie des fichiers audio convertie : OUTPUTDIR="$HOME/Musique".
    • Permet de définir l'ordre des actions à exécuter : ACTIONS=cddb,playlist,read,encode,tag,move,clean. Dans ce cas, d'abord, interrogation de la CDDB pour récupérer les titres, création des playlist, lecture (extraction) des pistes, encodage/conversion des pistes en OUTPUTTYPE, taggage des fichiers créés, déplacement dans le répertoire OUTPUTDIR, nettoyage des fichiers temporaires.
      Les options sont aux choix : cddb,cue,read,normalize,encode,tag,move,playlist,clean,default avec default qui équivaut à cddb,read,encode,tag,move,clean.
    • Définitions des formats de sorties avec les variables OUTPUT, GENRE, ALBUMFILE, ARTISTFILE, TRACKFILE, and TRACKNUM :
      • pour un CD d'un artiste : OUTPUTFORMAT='${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM} - ${TRACKFILE}' par exemple : Metallica/The Black Album/01 - Enter Sandman.ogg.
      • pour un CD multi-artistes : VAOUTPUTFORMAT='Various Artists/${ALBUMFILE}/${TRACKNUM} - ${ARTISTFILE} - ${TRACKFILE}' par example : Various artists/Goin' Home A Tribute to Fats Domino/01 - John Lennon - Aint That a Shame.ogg.
      • pour un CD multi-artistes contenant 1 seule piste : ONETRACKOUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}-${ALBUMFILE}/${ALBUMFILE}'
      • pour un CD d'un artiste contenant 1 seule piste : VAONETRACKOUTPUTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${ALBUMFILE}'
    • Ejection du CD à la fin du rippage : EJECTCD=y
  • On peut aussi créer des fonctions qui seront appliquer avant, pendant ou après le rippage ou l'encodage. Je vous conseille celle-ci qui permet de renommer les noms de fichier en échangeant les '_' (underscore) par des ' ' (espace) :
bash
mungefilename ()
{
echo "$@" | sed s,:,-,g | tr / _ | tr -d \'"\?\[:cntrl:\]
}

Utilisation d'abcde

Pour utiliser abcde avec le fichier de configuation par défaut, lancer la commande : abcde

sinon, pour l'utiliser avec un autre fichier de configuration abcde -c .abcde_mp3.conf

Mes fichiers de configurations

Je vous met à disposition mes 2 fichiers de configurations :

  • le fichier (abcde.conf) par défaut qui extrait/encode un CD en OGG en Q9 (320 kbps)
  • un fichier pour extraire en FLAC et en OGG un album abcde_flac.conf

Pour en savoir plus :

vendredi 24 août 2012

Classer ses photos dans une arborescence chronologique

Si comme moi, vous venez de rentrer de vacances avec un bon milliers de photos qui sont en vrac dans un répertoire, voici un moyen simple de les classer par date de prise : le puissant outil en ligne de commande exiftool.

Admettons que vous êtes dans le répertoire Images, vous avez importé vos photos dans le répertoire vacances2012 et vous voulez les classer suivant l'arborescence ANNEE/MOIS/JOUR.

Pour classer un répertoire de photos suivant la date de prise de vue : exiftool -r -d %Y/%m/%d "-directory<datetimeoriginal" vacances2012

Pour en savoir plus :

A propos d'ExifTool : ExifTool est une application en ligne de commande (écrit en Perl) pour manipuler (lire/supprimer/éditer) les méta-données des fichiers multimédia (images, sons, vidéos). Le site officiel est très bien documenté et cet utilitaire est dispo pour Linux, Mac et Windows. Le prérequis étant l'installation de Perl.

dimanche 28 août 2011

14 façons de générer un mot de passe aléatoire en ligne de commande

Ceci est une compilation de commandes trouvées sur le site commandlinefu.com qui soit dit en passant est un très bons site pour trouver des scripts BASH tout fait.

Le but est de pouvoir générer des mots de passe complexes grâce à différentes fonctions.

Un bon moyen de comprendre le fonctionnement de chaque fonction est d’exécuter les instructions d'une méthode au fur et à mesure en la décomposant.

En utilisant la date

On calcule le MD5 grâce à la date :

date | md5sum

Pour plus de choix, on peut passer la date en nanoseconde :

date +”%N” | md5sum

Cette méthode est un peux plus complexe, car on utilise la date en seconde, avec laquelle on calcule sont SHA256 que l'on transforme en base 64 et l'on affiche que les 32 premiers caractères :

date +%s | sha256sum | base64 | head -c 32 ; echo

En utilisant la fonctionnalité /dev/urandom

Il s'agit d'utiliser une fonctionnalité intégrée au noyau Linux qui est le périphériques générateurs aléatoires du noyau.

man random (Fichiers spéciaux) - Périphériques générateurs aléatoires du noyau.
NOM : random, urandom - Périphériques générateurs aléatoires du noyau.
DESCRIPTION: Les fichiers spéciaux caractères /dev/random et /dev/urandom (existants depuis Linux 1.3.30) fournissent une interface avec le générateur de nombres aléatoires du noyau.

Le fichier /dev/random a un numéro de périphérique majeur égal à 1, et un numéro mineur égal à 8. Les numéros du périphérique /dev/urandom sont 1 pour le majeur, et 9 pour le mineur.

Le générateur de nombres aléatoires regroupe du bruit provenant de son environnement par l'intermédiaire des pilotes de périphériques et d'autres sources, et le stocke dans un réservoir d'entropie. Le générateur mémorise également une estimation du nombre de bits de bruit dans son réservoir d'entropie, et utilise son contenu pour créer des nombres aléatoires.

Lors d'une lecture, le périphérique /dev/random sera limité au nombre de bits de bruit contenus dans le réservoir d'entropie.

/dev/random est particulièrement adapté pour les cas où l'on a ponctuellement besoin de nombres hautement aléatoires (création de clés par exemple). Lorsque le réservoir d'entropie est vide, les lectures depuis le périphérique /dev/random seront bloquantes jusqu'à l'obtention de suffisamment de bruit en provenance de l'environnement.

Lors d'une lecture, /dev/urandom renverra autant d'octets qu'on en demande. Toutefois, s'il n'y a plus assez de bits disponibles dans le réservoir d'entropie, les valeurs renvoyées pourraient être théoriquement vulnérables à une cryptanalyse basée sur l'algorithme employé par le pilote. Il n'existe pas de documentation sur ce type d'attaque dans la littérature publique actuelle, mais cela n'élimine pas le risque théorique. Si ce risque est important pour votre application, utilisez plutôt /dev/random à la place.

Attention : ne pas oublier le caractère "<" devant /dev/urandom sinon cela générera une erreur "bash: /dev/urandom: Permission non accordée"

Cette méthode utilise la fonction tr pour éliminer les caractères de la fonction aléatoire qui n'appartiennent pas au groupe "_A-Z-a-z-0-9" et en affiche les 10 premiers caractères (grâce à la commande head :

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c10;echo;

ou celle ci qui affiche les 32 premiers caratères :

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;

Cette méthode reprend la fonction tr pour n'afficher que les caractères alphanumériques, sur une seul colonne de 30 caractères (grâce à la fonction fold), et affiche la première ligne (grâce à la fonction head) :

tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1

Cette méthode renvoie les 30 premiers caractères (fonction head) sous forme d'une ligne (fonction tr) de la sortie grep qui filtre les caractères alphanumériques issues de l'entrée de la fonction strings qui n'affiche que les caractères imprimables de la fonction aléatoire :

strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo

Ces 2 méthodes équivalentes permettent de créer un mot de passe de 8 caractères (fonction head) choisit parmi le motif donné à la fonction tr et qui n'est à taper qu'avec la main gauche sur un clavier QWERTY :

</dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8; echo ""

ou avec un clavier AZERTY :

</dev/urandom tr -dc '12345&é(azertAZERTqsdfgQSDFGwxcvbWXCVB' | head -c8; echo ""

En utilisant la fonction openssl

L'option rand de la fonction openssl permet de générer un mot de passe aléatoire de 32 caractères en base64.

openssl rand -base64 32

En utilisant la fonction gpg

L'option --gen-random de la fonction gpg permet de générer un mot de passe aléatoire de 30 caractères en base64 (option --armor) avec moins ou plus de qualité (argument 0|1|2) dans l'entropie.

gpg --gen-random --armor 1 30

En utilisant le dictionnaire intégré

Ces méthodes permettent de générer un mot de passe XKCD formé des 4 mots pris dans le dictionnaire partagé de Linux.

Voici ce qu'est un mot de passe XKCD :

shuf -n4 /usr/share/dict/words | tr -d '\n'
RANGE=`wc -l /usr/share/dict/words | sed 's/^\([0-9]*\) .*$/\1/'`; for i in {1..4}; do let "N = $RANDOM % $RANGE"; sed -n -e "${N}p" /usr/share/dict/words | tr -d '\n'; done; RANGE=100; let "N = $RANDOM % $RANGE"; echo $N

En utilisant le paquet pwgen

Ce paquet est disponible dans toutes les bonne distribution ou sur le site web officiel du projet http://pwgen.sourceforge.net/

Voici comment générer 1 mot de passe de 30 caractères :

pwgen 30 1

dimanche 21 août 2011

Afficher ses adresses IP dans une info bulle

<p>Depuis un moment que je voulais faire ce petit script.</p> <p>Il permet d'afficher l'adresse IP interne (via <code>ifconfig</code>) et l'adresse IP externe (via <a href="http://www.opendns.com/" hreflang="en" title="OpenDNS ">OpenDNS</a> ou <a href="http://dyn.com/dns/" hreflang="en" title="Managed DNS: Rock Solid, Scalable, Reliable - Dyn">dyndns</a>) dans une infobulle (<code>notify-send</code> de la <code>libnotify</code>).</p> <p><img src="/public/Linux/Capture_myip.png" alt="Capture infobulle my_ip" style="display:block; margin:0 auto;" title="Capture infobulle my_ip, août 2011" /></p> <h2>Le script BASH</h2> <pre class="bash bash" style="font-family:inherit"><ol><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#My IP Notify v0.1</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#2011 - Mathdabomb (mathdabomb@gmail.com)</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Commande : /path/to/my_ip.sh</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Affiche par notification l'adresse IP interne et externe de l'ordinateur</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Exemple : ./my_ip.sh</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Licence :</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># </span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># "THE BEER-WARE LICENSE" (Revision 42):</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># &lt;phk@FreeBSD.ORG&gt; wrote this file. As long as you retain this notice you</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># can do whatever you want with this stuff. If we meet some day, and you think</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># </span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#--</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Recupere l'IP interne</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#--</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Interface reseau à choisir suivant votre distribution</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #007800;">INT</span>=p10p1 <span style="color: #666666; font-style: italic;"># ou eth0</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #007800;">IPINT</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ifconfig</span> <span style="color: #007800;">$INT</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">"inet adr"</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> -d: <span style="color: #660033;">-f2</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span><span style="color: #ff0000;">' '</span> -f1<span style="color: #000000; font-weight: bold;">`</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#--</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Recupere l'IP externe</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#--</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #007800;">IPEXT</span>=<span style="color: #000000; font-weight: bold;">`</span>curl <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>myip.dnsomatic.com<span style="color: #000000; font-weight: bold;">/`</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#IPEXT=`curl http://ifconfig.me`</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Affiche l'info-bulle</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#MESSAGE="IP interne sur $INT : $IPINT\nIP externe : $IPEXT"</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#--</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#$notify-send --help</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Usage : notify-send OPTION... &lt;SUMMARY&gt; BODY - create a notification</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#Application Options:</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># -u, --urgency=LEVEL Specifies the urgency level (low, normal, critical). </span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># -t, --expire-time=TIME Specifies the timeout in milliseconds at which to expire the notification.</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># -i, --icon=ICON,ICON... Specifies an icon filename or stock icon to display.</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># -c, --category=TYPE,TYPE... Specifies the notification category.</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># -h, --hint=TYPE:NAME:VALUE Specifies basic extra data to pass. Valid types are int, double, string and byte.</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#--</span></div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li> <li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>notify-send <span style="color: #ff0000;">"Adresses IP"</span> <span style="color: #ff0000;">"IP interne sur <span style="color: #007800;">$INT</span> : <span style="color: #007800;">$IPINT</span><span style="color: #000099; font-weight: bold;">\n</span>IP externe : <span style="color: #007800;">$IPEXT</span>"</span> <span style="color: #660033;">-u</span> normal <span style="color: #660033;">-i</span> gtk-dialog-info <span style="color: #660033;">-t</span> <span style="color: #000000;">50000</span></div></li> </ol> </pre> <h2>Quelques explications</h2> <p><strong>ligne 27 :</strong> il s'agit du choix de l'interface réseaux. Depuis Fedora 15 utilise les noms des ports réseaux en interrogeant le BIOS. Pour les autres systèmes, vous pouvez toujours utiliser la dénomination "ethX". La chaine de caractère choisie ("p10p1" ou "eth0 ou autres) est affecté à la variable INT.</p> <p><strong>ligne 28 :</strong> décomposons la ligne de commande <code>IPINT=`ifconfig $INT | grep "inet adr" | cut -d: -f2 | cut -d' ' -f1`</code>&nbsp;: <img src="/public/Linux/Capture-ifconfig.png" alt="capture ifcong" style="display:block; margin:0 auto;" title="capture ifcong, août 2011" /></p> <p>La commande <code>ifconfig $INT</code> permet de voir les caractéristiques de l'adaptateur réseau $INT dont l'adresse IP à la rubrique "inet adr" (ici&nbsp;: <code>inet adr:192.168.1.14</code>).</p> <p>La commande <code>ifconfig $INT | grep "inet adr"</code> permet donc de récupérer la ligne&nbsp;: <code>inet adr:192.168.1.14 Bcast:192.168.1.255 Masque:255.255.255.0</code>.</p> <p>Or ce qui nous intéresse est l'adresse IP interne ("inet adr"). Pour cela, on découper la chaine de caractères en plusieurs morceaux avec la commande <code>cut</code>.</p> <p>Avec la commande <code>cut -d: -f2</code>, on découpe la chaine "inet adr:192.168.1.14 Bcast:192.168.1.255 Masque:255.255.255.0" au niveau des ":" (d'où l’argument <code>-d:</code>). On obtient les morceaux de chaine suivants&nbsp;:</p> <ol> <li>inet adr</li> <li>192.168.1.14 Bcast</li> <li>192.168.1.255 Masque</li> <li>255.255.255.0</li> </ol> <p>Puis grâce à l'argument <code>-f2</code> on sélectionne le deuxième morceau de la chaine soit <code>192.168.1.14 Bcast</code>.</p> <p>Il nous reste plus qu'à se débarrasser de " Bcast". On réutilise la commande <code>cut -d' ' -f1</code> mais cette fois on coupe au caractère "espace", et on sélectionne la première chaine soit <code>192.168.1.14</code> que l'on affecte à la variable IPINT.</p> <p><strong>lignes 33 et 34 :</strong> il s'agit de récupérer son adresse IP externe. Pour cela 3 choix possibles de site internet le donnant (il doit y en avoir d'autres)&nbsp;:</p> <ul> <li>utiliser le site <a href="http://myip.dnsomatic.com" hreflang="en" title="http://myip.dnsomatic.com">http://myip.dnsomatic.com</a> fournit par <a href="http://www.opendns.com" hreflang="en" title="OpenDNS - DNS-Based Web Security">OpenDNS</a></li> <li>utiliser le site <a href="http://ifconfig.me" hreflang="en" title="http://ifconfig.me">http://ifconfig.me</a> (qui peut donner plus de renseignements que seulement l'adresse IP, à visiter donc)</li> </ul> <p>Dans ces 2 cas, j'utilise la commande <code>curl</code> qui permet de récupérer les données d'une URL (cf le <a href="http://curl.haxx.se/docs/manpage.html" hreflang="en" title="cURL - How To Use">curl.1 the man page</a>). Étant donné que ces données sont directement une chaine de caractère représentant votre adresse IP, il n'y a rien d'autre à faire que de l'affecter à la variable IPEXT.</p> <strong>ligne 52 :</strong> il ne reste plus qu'à afficher le résultat dans une info-bulle. Pour cela j'utilise la commande <code>notify-send</code> fournit avec la bibliothèque <strong>libnotify</strong>. Voici comment utiliser cette commande <pre>notify-send OPTION... &lt;SUMMARY&gt; BODY</pre> <ul> <li>OPTION... : représente les différentes options (temps d'affichage, niveau de criticité, icone à utiliser, ...)</li> <li>&lt;SUMMARY&gt;&nbsp;: est le titre de l'info bulle (dans ce cas&nbsp;: "Adresses IP")</li> <li>BODY : est le message à afficher c'est-à-dire les adresses IP. Pour passer à la ligne, il faut utiliser "\n".</li> </ul>

mardi 26 juillet 2011

Différencier le compte root dans votre terminal

Si comme moi, vous voulez différencier le compte root lorsque vous êtes sur la console, il suffit de modifier la couleur du prompt de l'utilisateur root. capture compte root couleur

Le schéma du prompt d'un utilisateur est stocké dans la variable PS1 dans le fichier .bashrc. Vous pouvez interroger cette variable en tapant la commande suivant : echo $PS1. Par défaut, vous obtenez la réponse suivante : \u@\h \W\$.

Voici à quoi correspond la chaine ci-dessus :

  • \u : Nom de l'utilisateur (dans ce cas 'mathieu' ou 'root'. L'interpréteur original à aussi \h qui affiche le nom du domaine (soit 'FIXEMATH').
  • \W : désigne la position relative actuelle. Pour la position absolue actuelle, utilisez \w.
  • \$ : Le caractère de l’interpréteur ('#' pour root et '$' pour les utilisateurs standards).

Maintenant pour changer la couleur du prompt de l'utilisateur root, il suffit de suivre les instructions suivantes :

  • ouvrez le fichier .bashrc sous le compte root avec la commande : nano .bashrc
  • ajoutez la ligne suivante : PS1='[\e1;31m][\u@\h \W\$[\e[0m] '
  • enregistrez le fichier et reconnectez-vous en root pour prendre en compte les modifications.
Pour en savoir plus :

Propulsé par Dotclear

Sauf mention contraire, les contenus de ce site sont publiés selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Licence Creative Commons I love Free Software!