samedi 11 juillet 2015

Gardez la doc en local avec Zeal et Dash

Si vous partez en vacances avec votre ordinateur portable loin du réseau Internet, mais que vous souhaitez continuer à coder, une solution existe pour avoir sa doc toujours avec soi en local sur le PC.

Pour MacOS, c'est Dash.
Pour Windows et Linux, c'est Zeal, sachant qu'il est sous licence GPL et qu'il utilise les packages de Dash pour télécharger la doc.

Ce sont 2 programmes jumeaux, qui sont intégrables dans votre éditeur favoris grâce à des plugins et qui vous donnent accès à plus de 150 documentations offline, parmi les documentations les plus utilisées (voir la liste des docs Dash) :

Pour installer Zeal sur CentOs/Fedora

Prérequis :

Les prérequis sont :

  • Qt version 5.2.0 ou plus
  • libarchive
  • Seulement pour Linux : xcb-util-keysyms
  • Seulement pour Ubuntu Unity : libappindicator

Installer les paquets Qt5 prérequis pour construire Zeal: $ sudo yum install qt5-qtwebkit-devel qt5-qtbase-devel xcb-util-keysyms-devel bsdtar

Vous pourriez aussi avoir besoin de : $ sudo yum install libarchive-devel qt5-qtx11extras-devel

Ensuite, il suffit de cloner les sources depuis le dépot officiel, et de construire Zeal depuis les sources:
$ git clone https://github.com/jkozera/zeal.git
$ cd zeal
$ qmake-qt5
$ make
$ sudo make install

Et voilà, c'est installé !

Ouvrir Zeal et télécharger les documentations

Pour lancer Zeal, tapez simplement: $ zeal ou Cliquez sur Menu Applications > Programmation > Zeal

La première chose à faire est de télécharger des documentations via l'API, qui ira les récupérer sur le project Dash. Pour cela, allez dans le menu File > Options, choisissez l'onglet "Docsets" et cliquez sur le bouton Download pour télécharger la liste de docs disponibles.

Capture_zeal_options_docset.png

Ensuite, vous pouvez naviguer parmi la doc, ouvrir plusieurs onglets avec des docs différentes, faire des recherches, ... Capture_dash_doc.png

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 30 mars 2014

Structure de répertoire Linux

Sous *Nux, l'arborescence des principaux répertoires et leur contenus sont normés suivant la Filesystem Hierarchy Standard pour une meilleure compréhension de tous. Donc voici en image sa structure :

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.

mardi 10 janvier 2012

Mettre le cache de Firefox en RAM

Cette astuce n'est pas récente, mais est toujours utile, surtout que maintenant beaucoup d'ordinateurs fixes sont fournit avec 4 Go de mémoire vive (RAM) par défaut.

La mise en cache de tout partie du profil de Firefox vers la RAM en utilisant le système de fichiers tmpfs offre des avantages significatifs. Même si en optant pour la voie d'une amélioration partielle est par elle-même, ce dernier peut rendre Firefox encore plus réactif par rapport à sa configuration d'origine. Les avantages comprennent, entre autres:

  • un accès aux disques réduits en lecture/écriture (idéal pour les SSD)
  • une réaction plus rapide du navigateur
  • de nombreuses opérations au sein de Firefox, comme la recherche rapide et requêtes histoire, deviennent presque instantanées

Le principe est d'utiliser le périphérique /dev/shm, un répertoire qui se comporte exactement comme un systèmes de fichiers montés, à l'exception notable que tout son contenu est stocké dans la RAM.

Vérifier que /dev/shm est monté

Dans un terminal, lancé la commande df -h : df -h

La commande df (disk free) affiche la quantité d'espace occupé des systèmes de fichiers. L'option -h ajoute à chaque valeur une lettre comme M pour méga-octet, afin d'améliorer la lisibilité.

Sur mon système, on peut voir que /dev/shm est bien monté et que c'est un système de fichier en mémoire virtuelle (tmpfs).

Modifier la configuration de Firefox

Pour changer la destination du répertoire de cache disque de Firefox, il faut modifier la configuration. Pour cela, saisissez dans la barre d'adresse la commande about:config.

Une fois dans l'éditeur de configuration, recherchez la clé browser.cache.disk.parent_directory grâce au champ filtre

Si elle n'existe pas, créez la en faisant un clic droit dans la fenêtre. Un menu contextuel s'affiche, sélectionnez Nouvelle puis Chaînes de caractère. Remplissez les 2 fenêtres suivantes avec ces paramètres :

  • Nom de l'option : browser.cache.disk.parent_directory
  • Valeur de l'option : /dev/shm/firefox-cache

Lors du redémarrage de Firefox, il va commencer l'utilisation de /dev/shm/firefox-cache comme le répertoire de cache.

Ayez à l'esprit que le répertoire et son contenu ne seront pas sauvegarder après un redémarrage en utilisant cette méthode.

Vérifier la prise en compte

Pour contrôler que l'option à bien été prise en compte, saisissez dans la barre d'adresse de Firefox la commande about:cache. Dans la section Disk cache device, vous deviez retrouver le répertoire de cache ainsi défini à la ligne Cache Directory:.

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 :

dimanche 11 avril 2010

Diskstation - Modifier le prompt de la console SSH

Si vous voulez accéder à votre Disktation depuis une console SSH pour pouvoir modifier des paramètres dans le cœur du serveur (ex : installation de packages, modification de cron, ...), il vous suffit d'activer le service SSH (voir plus bas). Pour vous connecter depuis un terminal, exécuter la commande ssh root@ip_du_disktation (pour se loguer directement sur le compte root). Le mot de passe est le même que celui de l'utilisateur admin.

Lorsque vous accéder au Diskstation via la console SSH, vous vous trouvez sur le shell Ash (très minimaliste mais léger).

Le problème est lorsque vous vous déplacer dans les dossiers via la commande cd (Change Directory), le prompt de base étant Diskstation > (dans mon cas) ou nom_du_serveur >, vous ne voyez pas dans quel dossier vous vous trouvez.

En effet le modèle du prompt est stockée dans la variable PS1, qui est définie au démarrage dans le fichier /etc/profile et qui n'est pas actualisée. Le prompt par défaut est définie comme PS1="`hostname` > ".

En voici l'exemple : disktation_console_ssh_prompt_initial

Modifier le modèle du prompt

En fait nous allons redéfinir la fonction cd (Change Directory). Pour cela :

  1. Editez le fichier /etc/profile via la commande vi /etc/profile.
  2. Commentez la ligne PS1="`hostname` > " en ajoutant devant un "#"; cela donnera #PS1="`hostname` > ". Pour cela, déplacer vous avec le touche de direction sur le début de la ligne, puis passer en mode insertion en appuyant sur "i".
  3. Ajoutez la ligne suivante à la fin du fichier : cd() { chdir "$@" ; PS1="`whoami` @ `hostname` `pwd`$ " ;} pour avoir un prompt identique à bash (avec whoami : le nom d'utilisateur en cours, hostname : le nom du serveur et pwd : le chemin du répertoire courant). Pour cela, mettez vous sur la dernière ligne et taper sur la touche Entrée, puis insérer la commande.
  4. Enregistrez et fermez le fichier via la commande ":qw" (à taper directement).
  5. Déconnectez vous de ssh en tapant exit et reconnectez vous.

Et voici le résultat : diskstation_console_ssh_prompt_modifie

RAPPEL : Activer le service SSH

Pour accéder au serveur Synology via SSH, il faut activer le service. Connecter vous à l'interface web Diskstation Manager puis accéder au menu Services Réseau > Terminal pour activer le service terminal. diskstation_activer_ssh Puis cocher Activer le service SSH.

Pour en savoir plus

samedi 20 mars 2010

Le cubes des astuces

Voici une très bonne initiative : le "cube des astuces". C'est un cube sur lequel vous trouverez les principales commandes de votre système et leurs explications. Elles sont classées en 5 catégories : Fichiers et répertoires, Système et affichage, Privilèges, Réseaux et Gestion des paquets.

cube_astuces_fedora

Cette nouvelle est parue sur Tux-Planet pour la distribution Fedora et pour la distribution Ubuntu. On en trouve aussi pour Debian et peut-être bientôt pour d'autres distributions.

Le projet étant publié sous la licence Creative Commons SA et vous pouvez télécharger des patrons aux formats suivants : svg, png et pdf.

Attention à l'impression, ne pas utiliser le redimensionnement ou l'ajustement aux marges d'impression, sinon votre cube sera déformé.

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!