Des programmes bien pratiques

Les programmes exposés ci-dessous ne sont pas systématiquement installés par défaut mais devraient êtres disponibles dans les dépôts ou en téléchargement avec un lien fourni.

On s'étonnera peut-être de trouver quelques lignes à propos de programmes tel que "ffmpeg" ou "rsync" qui mériteraient plusieurs pages à eux seuls.

Bchunk : Convertir un fichier image bin/cue vers le format iso

$ bchunk fichier.bin fichier.cue nouveau_fichier.iso

Curlftpfs : Monter un répertoire ftp dans un répertoire local

Installer curlftpfs

# apt-get install curlftpfs

Syntaxe:

$ curlftpfs ftp://serveur-ftp.com/dossier /home/user/dossierlocal -o user=login:mot_de_passe

démonter le répertoire

$ fusermount -u /home/user/dossierlocal

Dig : Obtenir l'adresse ip d'un domaine

$ dig +short domaine.com

ou avec nslookup

$ nslookup www.domaine.com | tail -2 | head -1 | awk '{print $2}'

Exiftool et Exiv2 : Manipuler les données exif

Deux programmes de lecture de données exif

$ exiftool image.jpg

ou

$ exiv2 image.jpg

D'ici à ce que j'ai l'occasion de tester exiftool voici quelques exemples avec exiv2.

Supprimer les informations d'une image

$ exiv2 rm image.jpg

Récupérer des information exif d'une image

L'option -g attend qu'une clé propre à l'information souhaitée soit indiquée. Dans l'exemple ci-dessous on demande la largeur puis la hauteur de l'image en pixel.

$ exiv2 -g Exif.Photo.PixelXDimension DSC48.JPG 
Exif.Photo.PixelXDimension                   Long        1  2848
$ exiv2 -g Exif.Photo.PixelYDimension DSC48.JPG 
Exif.Photo.PixelYDimension                   Long        1  4288

pour connaitre les clés disponibles pour exiv2 voyez ici

Pour connaitre les clés utilisées dans les données exif d'une image on procédera éventuellement ainsi.

$ exiv2 -p t DSC48.JPG

L'option "-p" propose une bonne poignée d'arguments disponibles dans les man pages que je conseille vivement de regarder.

Cette commande retournera quelque chose comme ça:

Exif.Image.Make                              Ascii      18  NIKON CORPORATION
Exif.Image.Model                             Ascii      10  NIKON D2X
Exif.Image.Orientation                       Short       1  top, left
Exif.Image.XResolution                       Rational    1  300
Exif.Image.YResolution                       Rational    1  300
Exif.Image.ResolutionUnit                    Short       1  inch
Exif.Image.Software                          Ascii      28  Adobe Photoshop CS4 Windows
Exif.Image.DateTime                          Ascii      20  2011:04:25 17:48:11
Exif.Image.YCbCrPositioning                  Short       1  Co-sited
Exif.Image.ExifTag                           Long        1  240
Exif.Photo.ExposureTime                      Rational    1  1/60 s
Exif.Photo.FNumber                           Rational    1  F2.8
Exif.Photo.ExposureProgram                   Short       1  Shutter priority
Exif.Photo.ISOSpeedRatings                   Short       1  320
Exif.Photo.ExifVersion                       Undefined   4  2.21
Exif.Photo.DateTimeOriginal                  Ascii      20  2007:01:09 06:29:00
Exif.Photo.DateTimeDigitized                 Ascii      20  2007:01:09 06:29:00
Exif.Photo.ComponentsConfiguration           Undefined   4  YCbCr
Exif.Photo.CompressedBitsPerPixel            Rational    1  4
Exif.Photo.ExposureBiasValue                 SRational   1  0 EV
Exif.Photo.MaxApertureValue                  Rational    1  F2.8
Exif.Photo.MeteringMode                      Short       1  Multi-segment
Exif.Photo.LightSource                       Short       1  Unknown
Exif.Photo.Flash                             Short       1  No flash
Exif.Photo.FocalLength                       Rational    1  200.0 mm
Exif.Photo.UserComment                       Undefined  44                                      
Exif.Photo.SubSecTime                        Ascii       3  72
Exif.Photo.SubSecTimeOriginal                Ascii       3  72
Exif.Photo.SubSecTimeDigitized               Ascii       3  72
Exif.Photo.FlashpixVersion                   Undefined   4  1.00
Exif.Photo.ColorSpace                        Short       1  sRGB
Exif.Photo.PixelXDimension                   Long        1  2848
Exif.Photo.PixelYDimension                   Long        1  4288
Exif.Photo.InteroperabilityTag               Long        1  864
Exif.Iop.InteroperabilityIndex               Ascii       4  R98
Exif.Iop.InteroperabilityVersion             Undefined   4  1.00
Exif.Photo.SensingMethod                     Short       1  One-chip color area
Exif.Photo.FileSource                        Undefined   1  Digital still camera
Exif.Photo.SceneType                         Undefined   1  Directly photographed
Exif.Photo.CFAPattern                        Undefined   8  0 2 0 2 0 1 1 2
Exif.Photo.CustomRendered                    Short       1  Normal process
Exif.Photo.ExposureMode                      Short       1  Auto
Exif.Photo.WhiteBalance                      Short       1  Auto
Exif.Photo.DigitalZoomRatio                  Rational    1  1.0
Exif.Photo.FocalLengthIn35mmFilm             Short       1  300.0 mm
Exif.Photo.SceneCaptureType                  Short       1  Standard
Exif.Photo.GainControl                       Short       1  None
Exif.Photo.Contrast                          Short       1  Normal
Exif.Photo.Saturation                        Short       1  Normal
Exif.Photo.Sharpness                         Short       1  Normal
Exif.Photo.SubjectDistanceRange              Short       1  Unknown
Exif.Image.GPSTag                            Long        1  896
Exif.GPSInfo.GPSVersionID                    Byte        4  2.2.0.0
Exif.Thumbnail.Compression                   Short       1  JPEG (old-style)
Exif.Thumbnail.XResolution                   Rational    1  72
Exif.Thumbnail.YResolution                   Rational    1  72
Exif.Thumbnail.ResolutionUnit                Short       1  inch
Exif.Thumbnail.JPEGInterchangeFormat         Long        1  1010
Exif.Thumbnail.JPEGInterchangeFormatLength   Long        1  6328

SET, ajouter ou modifier la valeur d'une clé

Pour l'exemple nous allons ajouter une information de copyright dans les données exif.

$ exiv2 -M "set Exif.Image.Copyright Copyright © gogolplex.org" IMG_0320.JPG

Si une information était déjà présente elle sera remplacé par la nouvelle.

ADD, ajouter une clé et sa valeur

Reprenons l'exemple ci-dessus et créons une nouvelle clé pour le copyright sur la même image.

$ exiv2 -M "add Exif.Image.Copyright Reproduction interdite" IMG_0320.JPG

Si l'on affiche les informations exif avec une simple commande "exiv2 IMG_0320.JPG" on ne se rend pas compte du résultat, il semble même que la commande se soit comportée comme celle ci-dessus. Il faudra utiliser une option supplémentaire pour afficher un résultat plus complet.

$ exiv2 -P E IMG_0320.JPG

Affichera pour les lignes qui nous concernent

Exif.Image.Copyright                         Ascii      23  Reproduction interdite
Exif.Image.Copyright                         Ascii      23  Copyright © gogolplex.org

On vois clairement ici qu'il y a 2 clés Exif.Image.Copyright.

Appliquer une suite d'informations depuis un fichier

L'option "-m" attend un fichier (ici fichier.tag) en paramètre. les clés entrées dans ce fichier s'appliqueront à limage.jpg

exiv2 -m fichier.tag image.jpg

Contenu du fichier.tag

set Exif.Image.Copyright Reproduction interdite
add Exif.Image.Copyright Copyright © gogolplex.org
set Exif.Image.Artist moi même

Faad : m4a (entre autre) vers wav

 $ faad -o newfile.wav oldfile.m4a

File : tout savoir sur un fichier

type d'encodage d'un fichier

$ file -i fichier.txt 
fichier.txt: text/plain; charset=iso-8859-1

type mime d'un fichier

$ file --mime-type image.iso 
image.iso: application/octet-stream

Ffmpeg : manipuler les fichiers audio / vidéo

Un programme qui mériterait plus que ces quelques lignes

Convertir un fichier m4a vers mp3

$ ffmpeg -v 5 -y -i input.m4a -acodec libmp3lame -ac 2 -ab 192k output.mp3

Convertir un fichier mp3 vers ogg

$ ffmpeg -i input.mp3 -acodec libvorbis -aq 50 output.ogg

si le résultat est plus lourd que l'original

$ ffmpeg -i input.mp3 -acodec libvorbis -ar 48000 output.ogg

Screencast avec ffmpeg

$ ffmpeg -f x11grab -s `xdpyinfo | grep 'dimensions:'| awk '{print $2}'` -r 40 -i :0.0 -sameq /home/user/video.avi

Encoder une vidéo en h264 et AAC

$ ffmpeg -i video_origine.mkv -b 2496k -bt 1024k -acodec libfaac -ar 44100 -ab 128k -ac 2 -vcodec libx264 -r 24 -s 640x360 video_finale.avi

Convertir un fichier avi vers mp4

$ ffmpeg -i ./input.avi -vcodec libx264 -s 480x320 -b 300k -r 23.98 -acodec libfaac ./output.mp4

Encoder tous les fichiers.ape d'un répertoire vers le format FLAC

 for i in *ape; do ffmpeg -i "$i" -compression_level 12 "${i%.ape}.flac"; done

Le niveau de compression varie de 0 à 12


quelques exemples

encore quelques exemples

Ftp .netrc en ligne de commande

Syntaxe pour une connexion

$ ftp domaine.com

ou

$ ftp ip.ip.ip.ip

Si la connexion aboutit, le serveur demandera alors un login et mot de passe avant de donner la main

Connected to domaine.com.
220 FTP Server ready.
Name (domaine.com:manu): nom_utilisateur
331 Password required for nom_utilisateur
Password:
230 User nom_utilisateur logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

login automatique avec .netrc

Extrait du man

Si la connexion aboutit, ftp recherche le fichier
$HOME/.netrc local dans le répertoire en cours ou dans votre
répertoire personnel. Lorsque ce fichier existe, ftp
recherche les données permettant de lancer le processus de
connexion ...

Syntaxe d'un fichier .netrc

machine domaine.com
login nom_utilisateur
password xxxxxx

le fichier .netrc doit avoir des droits restreint à 600

Si le fichier est correctement rempli, il n'y aura pas de demande de login/password et la connexion sera établie directement
Si toute fois on trouve "dangereux" de laisser les mots de passe dans ce fichier il suffira de supprimer la totalité de la ligne password et le serveur le demandera avant de passer la main.

get : récupérer un fichier

ftp> get /dossier/fichier.distant /home/user/copiede_fichier.distant

put : envoyer un fichier sur le serveur

ftp> put fichier.local copiede_fichier.locale

voir aussi : le man en français et exemples de commandes

Hexedit: éditeur hexadécimal

Déplacement

Généralités

Recherche

une recherche de terme ASCII se fait depuis la colonne ASCII et inversement

Iconv : iso-8859-1 vers utf-8

 $ iconv -f "iso-8859-1" -t "utf-8" -o fichier-utf8.txt fichier.txt

Java : lancer une application .jar depuis une console

$ java -jar application.jar 

jsawk un parseur json

Pour que le script jsawk fonctionne il est nécessaire de disposer d'un interpréteur javascript

# apt-get install spidermonkey-bin

récupérer le script jsawk

$ curl -L http://github.com/micha/jsawk/raw/master/jsawk > jsawk.sh

rendre exécutable

$ chmod 755 jsawk.sh

Récupérer une entrée d'un fichier json

$ cat test.json | ./jsawk.sh 'return this.movie.title'

Documentation et téléchargement micha/jsawk

exemple

$ curl -s "http://api.allocine.fr/rest/v3/movie?partner=YW5kcm9pZC12M3M&profile=medium&format=json&filter=movie&striptags=synopsis,synopsisshort&code=14178" | ./jsawk.sh 'return this.movie.title'

Lame : wav vers mp3

$ lame input.wav output.mp3

LxSplit : découper rassembler de gros fichiers

Obtenir LxSplit

Télécharger la dernière version de LxSplit: sourceforge LxSplit

Décompresser l'archive et se placer dans le répertoire que l'extraction aura créé:

$ tar -zxvf lxsplit-0.2.4.tar.gz
$ cd lxsplit-0.2.4/

Installer

# make
...
# make install

Découper

en supposant le fichier video.mkv de 750mo je souhaite le spliter en partie de 25 mo

$ lxsplit -s video.mkv 25M

ceci va créer 30 fichiers de 25mo

Rassembler

$ lxsplit -j video.mkv.001

Od : Un nombre aléatoire entre 1 et 256

$ od -An -N1 -tu1 /dev/random

Php5-cli : utiliser php en ligne de commande

# apt-get install php5-cli

exécuter un script.php

$ php chemin/de/mon/script.php

exécuter directement une commande

$ php -r 'echo time();'

 exécuter un script comme un script bash:

écrire le fichier date.php

#!/usr/bin/php
<?php
echo date("d/m/Y")."\n";

Donner les droits et exécuter

$ chmod a+x date.php 
$ ./date.php

Passer des variables de bash vers php

Le script bash:

#!/bin/bash
php /chemin/vers/mon/script.php var1 var2 var3

Le script.php

<?php
   var_dump($argv);

L'exécution de ce script bash affichera quelque chose comme ça:

array(4) {
  [0]=>
  string(27) "/chemin/vers/mon/script.php"
  [1]=>
  string(4) "var1"
  [2]=>
  string(4) "var2"
  [3]=>
  string(4) "var3"
}

Ppmtowinicon : faire des favicon

Convertir une image en favicon.
Sous Gimp, créer une image de 16x16 px.
L'enregistrer en .pnm (favicon.pnm)
En ligne de commande: (paquet netpbm requis)

$ ppmtowinicon -output favicon.ico favicon.pnm

ROT13 : coder / décoder

$ echo "Chiffre moi" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Puvsser zbv
$ echo "Puvsser zbv" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Chiffre moi

Rsync : copie et progression

En local:

$ rsync -P /path/source /path/cible

Sur le réseau:

$ rsync -Haurov /path/source user@100.50.40.30:/home/user/

Quelques options

SqliteBrowser : Éditeur graphique

Un outil graphique pour vos bases de données SqLite

# apt-get install sqlitebrowser

sqlite browser

Transcode-utils : utilitaire pour .avi

Transcode-utils est une suite d'utilitaires en console pour manipuler les fichiers vidéo .avi

La suite comprend:
* avifix : Fixe le header d'un fichier .avi * aviindex : lit et écrit la description d'un index de fichier .avi * avimerge : fusionne plusieurs fichiers avi en 1 seul * avisplit : scinde un fichier avi en plusieurs morceaux selon une taille maximale * avisync : Ajuste la synchronisation audio

exemple:

$ avimerge -o output.avi -i input1.avi input2.avi input3.avi

Paquets manquants sur Debian Squeeze
Ajouter le dépôt suivant dans /etc/apt/sources.list:
deb http://www.debian-multimedia.org squeeze main
Update du package index:
# apt-get update
Installer la clé du dépôt:
# apt-get install debian-multimedia-keyring
Enfin installation du package:
# apt-get install transcode-utils

Tune2fs : date d'installation du système

Entre les mises à jour, les mises à niveau et bien d'autres événements, il parait impossible d'identifier un fichier dont la date de création soit identique à celle de l'installation du système.

Selon une discution à ce propos sur le forum ubuntu il en ressort que la solution la plus probable consiste à connaitre la date de création du système de fichier de la partition ou est installé l'os. On obtient cette information grâce à cette commande:

# tune2fs -l /dev/sdaX

X représente le numéro de partition

Pour un résultat plus court

# tune2fs -l /dev/sda1 | grep "Filesystem created"

Watch : Afficher l'utilisation des fichiers

A l'image de la commande top pour les processus, celle-ci affiche l'utilisation des fichiers dans le répertoire d'où elle a été lancé.

$ watch -d -n 2 'df; ls -FlAt;'

Wget : télécharger

Télécharger un fichier dans l'emplacement courant

$ wget http://www.domaine.com/fichier.tar.bz2

Télécharger un fichier dans un répertoire cible

$ wget http://www.domaine.com/fichier.tar.bz2 -P /home/user/folder

Télécharger une liste de fichiers (liste.txt) d'un seul coup

$ wget -i liste.txt

le fichier liste.txt

http://www.domaine.com/fichier1.tar.bz2
http://www.domaine.com/fichier2.tar.bz2
http://www.domaine.com/fichier3.tar.bz2

Télécharger un répertoire et ses sous répertoires en ftp

$ wget -r ftp://login:passwd@domaine.com/folder/*

Le tout sera sauvegarder en locale dans un répertoire portant le nom du domaine (domaine.com/)
Ajouter l'option "-nH" si l'on souhaite sauvegarder sans le nom d'hôte.

Aspirateur de site. ex: aspirer la page en cours

$ wget -kE -np -l1 http://adresse/chemin

Les options à connaitre

Xev : retour clavier souris

Xev est un utilitaire peu connu qui capture et affiche en console les interactions du clavier et de la souris.

$ xev
...
charabia
...
FocusOut event, serial 33, synthetic NO, window 0x3c00001,
    mode NotifyNormal, detail NotifyNonlinear

Je presse maintenant sur la touche [SUPER]

KeyPress event, serial 41, synthetic NO, window 0x2c00001,
    root 0x130, subw 0x0, time 21830771, (89,89), root:(2705,665),
    state 0x10, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2c00001,
    root 0x130, subw 0x0, time 21830926, (89,89), root:(2705,665),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

La partie intéressante est entre parenthèse (keysym 0xffeb, Super_L) et plus exactement Super_L.
Pour illustrer son fonctionnement nous allons configurer les touches "mute" "vol+" et "vol-" d'un clavier multimédia sur Openbox.

$ xev
...
KeyPress event, ...
    ... XF86AudioMute
    ... XF86AudioRaiseVolume
    ... XF86AudioLowerVolume

Puis dans le fichier de configuration rc.xml

<keybind key="XF86AudioMute">
       <action name="Execute">
       <name>Mute</name>
       <command>amixer -q set Master playback 0%</command>
       </action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
       <action name="Execute">
       <name>PlusFort</name>
       <command>amixer -q set Master playback 3dB+</command>
       </action>
</keybind>
<keybind key="XF86AudioLowerVolume">
       <action name="Execute">
       <name>MoinsFort</name>
       <command>amixer -q set Master playback 3dB-</command>
       </action>
</keybind>

Xprop : trouver le PID d'une fenêtre

$ xprop |grep PID

A ce stade le programme attend que vous cliquiez sur une fenêtre ....

_NET_WM_PID(CARDINAL) = 19140

visiblement ne fonctionne pas avec la fenêtre d'un programme java.

Zdump : horloge mondiale

Afficher l'heure selon une région

$ zdump Japan America/New_York Australia/Canberra Europe/Paris Africa/Ouagadougou
Japan               Tue Jan  1 06:19:28 2013 JST
America/New_York    Mon Dec  31 16:19:28 2012 EST
Australia/Canberra  Tue Jan  1 08:19:28 2013 EST
Europe/Paris        Mon Dec  31 22:19:28 2012 CET
Africa/Ouagadougou  Mon Dec  31 21:19:28 2012 GMT
17-Jan-2024
^