Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for December, 2008

Niveau :      
Résumé : .vimrc

Le retour du Jedi ! Les vacances sont finites, il est temps de de reprendre le dur cheminement dans le monde libre.

Après le vif succès du bashrc collaboratif, je vous propose de participer à un vimrc collaboratif. Le principe est le même, j'amorce le contenu d'un vimrc avec plein de petites choses utiles pour tous les jours, et vous complétez par des commentaires. Ceux-ci seront réintégrés avec votre nom dans l'article au fur et à mesure.

Attention, un guillemet double commence un commentaire :


continue reading...

Niveau :      
Résumé : tar ; par2

Comme vous les savez, les disquettes risquent de perdre facilement leurs données. Les CD aussi. Basons-nous sur un article précédent qui explique comment utiliser par2 pour éviter de perdre des données.

Nous allons nous intéresser au cas pratique de l'envoi de 25Go de données par DVD. Voici les contraintes :

  • Nombreux fichiers dans de nombreux répertoires
  • Tailles inégales des fichiers
  • Taille totale supérieure à celle d'un seul support
  • On ne veut pas perdre de données pendant le transfert
  • Un seul envoi (on ne peut pas corriger les erreurs à postériori)
  • Espace disque disponible pour la copie des données à la destination

Création des DVD

Choix du système d'archive

Puisqu'on ne veut pas de perte et un seul envoi, on va utiliser par2 pour créer une grande quantité de redondance. Par2 ne fonctionne bien que pour une liste de fichiers à plat, donc nous utiliserons un système d'archive (tar, zip ar). Puis qu'il y a de la place disque sur la destination cela ne posera pas de problème.

Puisqu'il faut répartir les données sur plusieurs supports et que les données sont de tailles inégales nous utiliserons une archive découpée en morceau.

Quelle archive utiliser ?

  • tar : gère difficilement les split d'archive
  • ar : peu pratique pour ce genre de chose
  • shar : fichiers texte, grosse perte de place
  • zip : il a beaucoup de mal a splitter ses propres fichier
  • 7zip : ne gère pas les droits sur les fichier, mais pratique
  • rar : pas libre

Calcul de la taille des fichiers

Un DVD fait environ 4482Mio (base 1024). On veut faire environ 20% de redondance (voyons large). Avec une petite marge d'erreur cela nous donne 4482/1.21 = 3700Mio par archive (soit 3788800kio pour tar). Quantité qu'on complétera par de la redondance part2 pour faire un DVD complet.


continue reading...

Niveau :      
Résumé : perl

Quelques trucs et astuces de perlistes en vrac. Pour des vrais astuces de pro régulières, n'hésitez pas à visiter le site des moines de perl.

Initialiser un tableau de chaînes sans avec une syntaxe légère, très lisible quand on n'a que des mots, le séparateur étant les caractères blancs, incluant le retour à la ligne :

@tableau = qw( mot1 mot2 mot3 );

Passer du mode script de quelques lignes au mode développement long. Cela vous oblige à déclarer et initialiser toutes vos variables entre autre :

use strict;

Le debug facile :

use Data::Dumper;
# variable peut être n'importe quoi, toutes les sous-sous parties sont écrites :
print Dumper($variable,\@variable);
print Dumper(\%variable);

L'aide en ligne facile, ça fait tout de suite classe dans un script (format) :

use Pod::Usage;
# imprime le contenu de SYNOPSIS et termine le programme avec un code d'erreur 1
pod2usage(1);
# attention, pod est chatouilleux sur les retours à la ligne avant et après les =

=head1 SYNOPSIS

commande  [-o|--option=<valeur>]

=cut

La page de manuel facile (pas seulement le SYNOPSIS comme précédemment) :

# où fichier.pl est le code précédent
$ pod2man fichier.pl > fichier.1
$ man ./fichier.1

Et le dernier pour la route, le parsing d'options facile, très classe, surtout en combinaison avec pod2usage (format) :

use Getopt::Long;
my $options = {
        option => 'defaut'
};
GetOptions( $options, qw(
        option|o=s
));

Niveau :      
Résumé : !(*.gz) ; grub e ; sort rev ; diff -y ; diff <() ; man2html

Lister tous les fichiers de /var/log/apache2 sauf les fichiers compressés (bash) :

$ ls /var/log/ntpstats/!(*.gz)

Arrêter une machine pendant le boot grub :

e
halt

Trier un fichier par la dernière lettre de chaque ligne :

$ rev fichier | sort | rev

Diff presque lisible sur 2 colonnes (quand on n'a que ça) :

$ diff -y fichier1 fichier2

Diff distant :

$ diff fichier1 <(ssh -n "cat fichier2")

Pour lire les manuels dans firefox :

# À faire une fois
$ apt-get install man2html

# À mettre dans bashrc
$ mkfifo /tmp/manfifo
$ htman() { (man2html $(man -w $1) | sed -n '/<!DOCTYPE HTML/,//p' > /tmp/manfifo &) &&  firefox /tmp/manfifo; }

# Et on lit le man de grub
$ htman grub

Niveau :      
Résumé : ed

Un autre petit voyage dans le passé nous amène à regarder l'un des tout premiers éditeurs de texte. Écrit à une époque ou les terminaux étaient constitué d'un clavier et d'un imprimante, ed est le seul, l'unique éditeur standard.

Dans la droite ligne des produits unix, ed a un nom de 2 lettres, fait une chose et le fait bien. Il est minimaliste, mais plein de fonctionnalités. Les habitués de vi et de sed ne seront pas dépaysés puisque ceux-ci sont les enfants légitimes de ed.

Une fois lancé, ed prend les commandes une par une, sur une ligne, et imprime une réponse qu'il y a lieu. C'est tout ! Reste à connaître les commandes. Ed comprend les commentaires et dispose de commandes d'une lettre a pour append, i pour insert, p pour print ... Bien qu'il ne se voit pas, ed dispose d'un curseur interne lui indiquant où il se trouve dans un fichier, celui-ci étant positionné à la fin du fichier au début de la session.

$ ed test.txt
# on ajoute une ligne à la fin du fichier (à la vi)
# l'entrée texte se termine par un point seul sur une ligne (ou ctrl-d)
a
Ligne de test
Ligne tout court
.
#on imprime tout (% à la vi, p à la sed)
%p
# on change la première ligne
1c
Ligne de retest
.
# modification à la sed
1s/Ligne/Droite/
# on sauvegarde
w
# on quitte
q

Une session d'édition est finalement très simple, surtout quand on connaît vi. Mais Pourquoi parler des ancêtres s'ils ne servent plus ? Tout simplement parce qu'il est installé partout, sur toutes vos machines. Et il se peut que certains scripts soient écrits en ed, même s'il ne fait rien qu'un bon sed -i ne puisse faire.

Niveau :      
Résumé : write ; mesg ; wall ; talk

Une petite explication sur une commande du passé. A l'époque où la messagerie instantanée n'était pas encore née, où l'irc n'était qu'une vague idée, beaucoup de gens utilisaient déjà des unix. Généralement sur de gros système d'université où on trouvaient de très nombreux comptes et donc beaucoup de personnes connectées simultanément.

Write

On a alors trouvé une grande utilité à un petit utilitaire nommé write. Le concept est très simple, il permet d'écrire un message à une autre personne personne connectée à la même machine.

$ write peck
Coucou peck !
<ctrl -d>

Le système de communication est très basique, le message est directement écrit sur le terminal de la personne connectée. Comme cela peut devenir très gênant de se retrouver avec un message en plein millieu de son écran, il est possible d'interdire à un autre utilisateur de vous écrire :

# y pour réactiver
$ mesg n

Bien sur la personne peut être connectée sur plusieurs terminaux. Il est alors possible de choisir un terminal en particulier, la commande who peut vous aider à savoir qui est connecté à quel terminal :

$ who
$ write peck pts/3

continue reading...