Publicité

Bonjour

Vous trouverez ici diverses astuces pour vous faciliter la vie sur votre unix préféré. Mais celles-ci ne seront bientôt plus mises à jour. En effet, dadmin devient linux attitude

Un nouvelle version sur http://linux-attitude.fr/post/Cest-lhistoire-dune-bombe-dans-un-bus

Niveau
:
Résumé : mplayer -speed 1.5 -af ladspa=tap_pitch:tap_pitch:0:-33:-90:0 foo.avi

Aujourd'hui nous allons voir comment regarder deux films en moins de 2h. Vous avez plusieurs solutions, soit vous trouvez 2 films d'une heure et là vous avez un choix réduit. Soit vous passez les 2 côte à côte en multi écran, et là il vous faut un cerveau multitâches. Soit vous les passez en accéléré, et là il vous faut un cerveau plus rapide (et encore ça dépend du film).

Ètudions la dernière possibilité, l'inconvénient est que vous aurez du mal à conprendre les dialogues à cause de la voix déformée des acteurs. Heureusement, une solution existe.

Mplayer vient avec un système de plugins sonores nommé ladspa. Tom, un gentil libriste a fait quelques plugins ladspa dont un permettant de corriger le pitch d'une bande son (ce plugin est disponible dans le paquet tap-plugins chez debian).

Vous pouvez donc lancer mplayer avec ce plugin et obtenir un son normal.
$ mplayer -speed 1.5 -af ladspa=tap_pitch:tap_pitch:0:-33:-90:0 foo.avi
  • Le 0 voulant dire qu'on calcule en pourcentage.
  • Le -33 se calculant par la formule suivante : (1 - 1.5) / 1.5 * 100 : 1.5 étant le multiplicateur de vitesse
  • Le -90 veut dire qu'on supprime le son original
  • Le 0 veut dire qu'on garde le son calculé


Le problème de cette technique est que la correction du pitch ne peut pas se faire en live. Dommage, si quelqu'un veut s'amuser à coder un patch mplayer pour que ca marche, ca serait gentil.

Sinon pour les détails, le billet original se trouve ici : http://mark.santaniello.com/archives/260. Il contient un certain nombre de commentaires intéressants, lisez-les.
Recommander
Voir les commentaires
La dernière version sur http://linux-attitude.fr/post/Mir-expreeeeess

Niveau
:
Résumé : export PAGER=most ; export LESS_TERMCAP

Les pages de manuel sont bien tristes en noir et blanc. Heureusement nous allons y mettre de la couleur.

Voici une première méthode plutôt simple :
$ apt-get install most
$ export PAGER=most
$ man man
Bravo ! Mais bon il faut aimer most ses racourcis et sa présentation. Et cela nécessite de l'installer, ce qui est difficile si vous n'êtes pas root.



Je vous ai donc trouvé mieux sur http://nion.modprobe.de/blog/archives/572-less-colors-for-man-pages.html
Ajoutez tout simplement ceci dans votre .bashrc :

export LESS_TERMCAP_mb=$'E[01;31m'    # debut de blink !
export LESS_TERMCAP_md=$'E[01;31m'    # debut de gras
export LESS_TERMCAP_me=$'E[0m'        # fin
export LESS_TERMCAP_so=$'E[01;44;33m' # début de la ligne d'état
export LESS_TERMCAP_se=$'E[0m'        # fin
export LESS_TERMCAP_us=$'E[01;32m'    # début de souligné
export LESS_TERMCAP_ue=$'E[0m'        # fin
Et hop :
$ man man

En plus cela fonctionnera non seulement pour man, mais pour toutes les commandes à base de less.


Pour comprendre et personnaliser ces commandes, vous devrez comprendre les variables : man 5 termcap, (lire les capabilities). Et vous devrez aussi connaître les codes ANSI pour les numéros de couleur :  http://pueblo.sourceforge.net/doc/manual/ansi_color_codes.html (notez que le ';' sépare plusieurs codes couleurs qui vont ensemble).


Notez que vous pourrez aussi étendre un peu la chose grâce à d'autres variables. Et maintenant que vous avez tout compris, sachez que les variables TERMCAP existent pour la plupart des softs. Vous allez donc tous les personnaliser bien sûr !

Recommander
Voir les commentaires
La dernière version de cet article sur http://linux-attitude.fr/post/En-vrac-8

Niveau
:
Résumé : dd ; vcstime ; fold ; for


Pour passer d'une page à la suivant dans gv, faites un clic/déplacer/clic. Ca ressemble à un double clic avec un déplacement au milieu. Si votre déplacement est vers la gauche, vous revenez d'une page en arrière, s'il est vers la droite, vous avancez d'une page.


Vous avez un fichier à faire grossir de 10M à 100M
$ dd if=/dev/zero of=file bs=1M count=1 seek=99

Vous avez un fichier à faire grossir de 10M à 100M mais vous ne voulez pas de trou dans ce fichier
# arrondi au Ko
$ dd if=/dev/zero of=toto bs=1 count=$a seek=$b
# arrondi au Mo
$ dd if=/dev/zero of=toto bs=1k count=$a seek=$b
# remplissage
$ dd if=/dev/zero of=toto bs=1M count=$a seek=$b

Afficher l'heure dans tous les terminaux linux (dans celui en cours en fait)
$ vcstime &

Formater un texte à 80 colonnes
$ fold -w 80 < texte

Conversion de base 12 en base 10 rapide en shell
$ echo $((12#123))

Faire des boucles énumérées en bash (sisi c'est possible)
$ for ((i=0;i<=10;i++)); do echo $i; done

Recommander
Voir les commentaires
La nouvelle version sur http://linux-attitude.fr/post/Faites-une-pause

Niveau
:
Résumé : co -l ; ci -u ; rlog ; rscdiff

Avant subversion existait cvs, avant cvs existait rcs. CVS est en fait un RCS en réseau avec un dépot centralisé.

Étudions donc cet outil, qui bien que préhistorique a encore un peu d'utilité dans notre monde. En effet, il est très simple d'utilisation, local et ne nécessite aucune configuration préalable.

Prenons un exemple simple. Vous avez un fichier de configuation, et il vous arrive de le modifier. Logiquement vous voulez garder les traces de ce que vous faites. Appelons ce fichier /etc/mysql/my.cnf

$ cd /etc/mysql
# a partir de maintenant on garde les traces
$ ci -i my.cnf
# mais on ne veut pas qu'il disparaisse
$ co my.cnf
# le fichier est maintenant en lecture seule

Vous aurez remarqué que toutes les modifications (ainsi que l'initialisation) nécessitent un commentaire. Pensez à le terminer par un point sur une seule ligne ou par un ctrl-d.

Maintenant faisons une modification :
# on récupere la bonne version, et on autorise l'écriture
$ co -l my.cnf
# on fait nos petites affaires
$ vi my.cnf
# et on valide (en mettant le fichier en lecture seule)
$ ci -u my.cnf

Et voilà, c'est fini pour l'utilisation de base. Vous voyez que c'est plutôt simple et faisable n'importe où.
L'historique des versions est stocké dans un fichier my.cnf,v si vous ne voulez pas voir ces fichiers, il suffit de créer un répertoire RCS avant de faire le ci -i et ceux-ci seront automatiquement mis dedans.



Maintenant vous avez un problème, vous voulez voir ce qui s'est passé. La procédure est assez simple :
# Qui a fait quoi ? (merci les commentaires)
$ rlog my.cnf

# Qu'est-ce qui est en train d'être fait ? (avant un ci)
$ rcsdiff my.cnf

# Qu'est-ce qui a été fait entre 2 versions données ? (si le 2e -r n'est pas donné, c'est la version courante qui est utilisée)
$ rcsdiff -r1.1 -r1.2 my.cnf

# revenir à une ancienne version temporairement
$ co -r1.1 my.cnf

# revenir à une ancienne version définitivement
$ co -l my.cnf
$ co -p1.1 my.cnf > my.cnf
$ ci -u my.cnf


RCS contient d'autres fonctions, mais notez tout de même que si les fonctions présentes ne vous suffisent pas il est fort probable que vous deviez vous tourner vers un vrai gestionnaire de versions moderne comme subversion.

Notez aussi qu'avec RCS tout est local, la copie de travail est donc directement le fichier utile.
Recommander
Voir les commentaires
Restez sur http://linux-attitude.fr/post/Historique-timestampe

Niveau
:
Résumé : kill -STOP ; kill -CONT

Lorsque vous lancez un programme, vous pouvez lui faire faire une pause. Vous savez tous comment faire :
$ sleep 10
ctrl-z
# et on relance
$ fg


Super, et maintenant si le soft a été lancé en arrière plan ?
$ sleep 10 &
# on le fait refenir au premier plan
$ fg
# pause
ctrl-z
# et on relance
$ fg


Bravo, vous avez passé le premier test. Maintenant, plus difficile. Et si le soft a été lancé depuis un autre terminal ? La réponse se trouve dans l'étude des signaux. Il existe un grand nombre de signaux, pour preuve :
$ kill -l

Mais une sélection précise permet de retrouver ceux qui sont derrière ctrl-z et fg. Il s'agit de STOP (19) et CONT (18). La réponse est donc :
# on pause
$ kill -19 1234
# et on relance
$ kill -18 1234


PS : Tant qu'on est dans les signaux, notez le signal sigalarm qui permet de réveiller un sleep qui dort (attention sa valeur de retour ne sera alors plus 0).
$ kill -14 1234
Recommander
Voir les commentaires
Cet article se trouve aussi sur http://linux-attitude.fr/post/Antisynchronistiquement

Niveau
:
Résumé : PROMPT_COMMAND=

Aujourd'hui vous avez découvert un problème sur une machine.
- "Mais que s'est-il passé ?"
- "Mais qui a fait ça ?"
- "Mais il faudrait stocker les dates dans les historiques !"

Ok, faisons ça ...

Première méthode, simple, exécutons une commande à chaque ligne exécutée qui va nous stocker cette information dans un nouvel historique. Notez qu'on ne peut pas mettre cette information dans .bash_history, ca mettrait le bazar.
$ export PROMPT_COMMAND='echo `date +"%F %T"` `history 1`>> ~/.bash_timestamp'

C'est bien, mais on peut faire beaucoup mieux : pas de sous-processus (vive les perfs), pas de duplication de ligne lorsqu'on tape une ligne vide, pas de No de sequence

$ H2=0
$ export PROMPT_COMMAND='H=`history 1` ; H1=${H:0:6} ; [ $H1 -eq $H2 ] || echo `date +"%F %T"` "${H:6}" >> ~/.bash_timestamp ; H2=$H1'


C'est bien, maintenant nous voudrions avoir l'historique de tous les utilisateurs.
Mettons tout ça dans /etc/bash.bashrc, donc pour tout le monde, avec quelques adaptations :
$ H2=0
$ export PROMPT_COMMAND='H=`history 1` ; H1=${H:0:6} ; [ $H1 -eq $H2 ] || echo `date +"%F %T"` "$USER" "${H:6}" >> /var/log/bash_logs ; H2=$H1'

Pour que ça marche, il nous faut un fichier inscriptible par tout le monde.
$ touch /var/log/bash_logs
$ chmod 666 /var/log/bash_logs

Et nous allons nous préserver de la mauvaise foi des utilisateurs qui voudraient modifier ces logs a posteriori.
# en root
$ chattr +a /var/log/bash_logs

Notez qu'on ne se préserve que de leur mauvaise foi mais qu'il est impossible de se préserver de la malveillance, car il suffit de redéfinir son PROMPT_COMMAND pour que rien ne soit loggué.
Recommander
Voir les commentaires
Finalisez votre lecture sur http://linux-attitude.fr/post/Antisynchronistiquement

Niveau
:
Résumé : mysleep

Si vous gérez plusieurs serveurs, il est probable que vous ayez des crons sur un certain nombre d'entre eux. Il est aussi probable qu'un certain nombre aient des cron en commun. Lorsque ces cron impactent d'autres serveurs (serveur NFS, ftp ...) il vaut mieux éviter de lancer toutes ces crons en même temps.

Mais il et dommage de devoir gérer et envoyer des configurations différentes pour chaque serveur. D'autre part, les lancer de façon aléatoire pose le problème qu'elles peuvent encore se lancer en même temps, mais aussi qu'il sera plus difficile de débugger un éventuel problème.

Je vous propose dons un outil qui pourra être commun à toutes les machines et qui lancera ces cron à des moments presque tous différents, appelons-le mysleep.

#!/bin/sh

# choix d'une durée
DURATION=$((0x`hostid`%$1*$2))

# debug
[ "$DEBUG" == "1" ] && echo $DURATION

# et on attend
sleep $DURATION

Il s'utilise alors de la façon suivante dans vos cron :

# 5 machines, lancement séparé de 60 secondes
0 12 * * * /usr/local/bin/mysleep 5 60 && /path/to/cron/script


Attention, ce script se base sur le hostid. Rien ne garantit qu'il soit unique, il est d'abord lu comme le premier entier de 32 bits de /etc/hostid, et s'il n'existe pas comme l'ip correspondant au hostname. Et enfin s'il n'existe pas il vaut 0. En cas de problème vérifiez donc la distribution de vos hostid.

En cas de problème vous pouvez lui faire afficher la valeur de son sleep :
$ DEBUG=1 /usr/local/bin/mysleep 5 60

Ensuite ce script prend 2 paramètres le premier indique le nombre de valeurs différentes qu'on veut obtenir et le second l'écart entre ces valeurs. Le produit des 2 indique donc l'écart maximum entre la première et la dernière cron.

Si vos machines sont distribuées sur un réseau local, il est probable que les ip se suivent et donc que les valeurs de sleep soient toutes différentes.
Recommander
Voir les commentaires
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus