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 fichier.bin fichier.cue nouveau_fichier.iso
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 +short domaine.com
ou avec nslookup
$ nslookup www.domaine.com | tail -2 | head -1 | awk '{print $2}'
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 -o newfile.wav oldfile.m4a
$ fc-list | grep "Verdana"
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
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
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
Déplacement
Généralités
Recherche
une recherche de terme ASCII se fait depuis la colonne ASCII et inversement
$ iconv -f "iso-8859-1" -t "utf-8" -o fichier-utf8.txt fichier.txt
$ java -jar application.jar
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 input.wav output.mp3
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 -An -N1 -tu1 /dev/random
# 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();'
é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
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"
}
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
$ 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
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
Un outil graphique pour vos bases de données SqLite
# apt-get install sqlitebrowser
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
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"
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;'
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 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 |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.
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