Alias et paramètres en ligne de commande

Written by Olivier Pons on août 6th, 2009

Voilà la solution pour faire un alias qui prenne en compte un paramètre : il faut savoir qu’un alias ne connait pas les paramètres qu’on lui passe. Un alias c’est vraiment, physiquement parlant, un « remplacer » de l’ordre que vous tapez.

Donc utiliser alias qui prendrait en compte un argument qu’on lui passe ?
C’est bien simple : c’est impossible. Mais on peut très facilement contourner cela.

Exemple : je développe en C, je veux tout le temps :

  1. reformatter le fichier C avant de l’éditer avec la ligne :
    indent -kr -nut {nom du fichier}
  2. afficher ce fichier avec vim :
    vim {nom du fichier}

La ligne de commande est donc toujours :
indent -kr -nut {nom du fichier} && vim {nom du fichier}

J’ai pensé faire un alias qui ressemblerait à cela :
alias vimi="indent -kr -nut $1 && vim $1"
Bien évidemment ça ne fonctionnera jamais.

Alors j’ai fait un tout petit script qui fonctionne très bien :
#!/bin/bash
case $# in
1) indent -kr -nut $1 && vim $1 ;;
*) echo "$0 {nom de fichier source .c / .h} ";;
esac

Et tout fonctionne !
Pour la note : indent -kr -nut {nom de fichier source .c / .h} signifie « indenter le fichier C selon les concepts de Kernighan & Ritchie, et ne pas mettre de tabulations, mais des espaces ». Pourquoi cela ? J’ai développé un module Apache, et pour le faire proprement, j’ai suivi leurs directives : Kernighan & Ritchie, et ne pas mettre de tabulations, mais des espaces, afin de me forcer à être habitué à lire du code d’une certaine façon. Ce type d’indentation n’est pas mon préféré, mais au moins, si je lis du code source C qui n’est pas fait par moi, je m’y retrouve plus facilement.

 

Détecter quelles sont toutes les machines et leurs adresses IP connectées sur le même réseau

Written by Olivier Pons on mai 31st, 2009

Voilà le cas pratique : vous avez un PC avec Linux. Et vous voulez savoir quelles sont toutes les machines et leurs adresses IP connectées sur le même réseau que ce PC.
Comment faire ?

Sur le même réseau c’est très simple : il faut envoyer un paquet ICMP à l’adresse de broadcast.

Par exemple, vous êtes sur le réseau 192.168.10.0/24. Dans ce cas précis, l’adresse de broadcast par défaut est 192.168.10.255.

Il suffit de taper dans un shell :

ping -b 192.168.10.255

Cette commande sera suivie sur toutes les machines présentes dans le réseau, et celles-ci vont répondre par un « echo reply » (sauf si un firewall, local ou non, bloque les réponses à l’ICMP ou au broadcast, dans ce cas rien ne se produira, mais essayez cette solution cela vaut la peine !).

 

Linux : utilisation de screen (mémo simple)

Written by Olivier Pons on avril 13th, 2009

screen sert à ouvrir plusieurs sessions simultanément, et le tout dans une seule « boîte » que vous pouvez « fermer » et « réouvrir » à volonté à partir de n’importe quel ordinateur. Toutes vos fenêtres de ligne de commandes seront réouvertes !
Très simple à utiliser.

Résumé des raccourcis dont je me sers en permanence dans screen (notez screen fait la différence minuscules/majuscules, donc si c’est en minuscules, il faut taper l’ordre en minuscules) :

  • <contrôle> "a" <contrôle> "a"  : revenir à la fenêtre précédente ;
  • <contrôle> "a" <contrôle> "n" , "n" signifie "next" : aller à la fenêtre suivante.
  • <contrôle> "a" <contrôle> "c" , "c" signifie "create" : créer une nouvelle session screen ;
  • <contrôle> "a" <contrôle> "?" , "?" signifie "aidez moi !!" : afficher les ordres disponibles sous screen.
  • L’aide sous screen : .

Explications simplifiées de screen

Comment le lancer ? Tapez screen dans la ligne de commande. Et là, immédiatement, une nouvelle ligne de commande s’ouvre. Ce n’est pas réellement une « nouvelle ligne de commande » ! C’est une fenêtre « dans » screen.

Vous pouvez ouvrir autant de fenêtres « dans » screen que vous voulez en tapant le raccourci clavier <contrôle> "a" <contrôle> "c" , "c" signifie "create" ("a" et "c" en minuscules, c’est important).

Vous voulez partir et garder toutes vos fenêtres en l’état pour les ré-ouvrir ailleurs ? Tapez le raccourci clavier <contrôle> "a" <contrôle> "d" , "d" signifie "detach" ("a" et "d" en minuscules, c’est important).

Une fois screen « détaché », vous changez d’ordinateur et vous voulez ré-ouvrir vos fenêtres ? Tapez en ligne de commande screen -r, "r" signifie "recover" ("r" en minuscules, c’est important).

Astuces (très) pratiques

Zut ! Internet s’est coupé et vous avez perdu toutes vos fenêtres screen. Pas de panique ! Tapez screen -r et là vous allez voir quelque chose comme ça :
There is a screen on:
4653.pts-0.nomdevotreordi (Detached)

Il vous suffit de taper l’ordre :

screen -r olivier/4653.pts-0.nomdevotreordi

Et là, miracle, tout est revenu comme avant la coupure Internet ! Notez bien que "olivier" dans l’ordre précédent, c’est le nom de l’utilisateur qui a ouvert screen. Si vous avez ouvert screen en tant que root l’ordre sera

screen -r root/4653.pts-0. nomdevotreordi.

Zut II ! Vous êtes parti de votre travail, et vous avez oublié de « détacher » screen, donc tout est toujours ouvert à votre travail, pourtant vous voulez vérifier quelque chose de chez vous. Pas de panique (bis) ! Tapez screen -D -r.
("D" signifie « forcer à détacher la session screen » où qu’elle soit, avant d’essayer de ré-ouvrir la session screen !)

NB : ce mémo est destiné à utiliser immédiatement screen pour les débutants, et les explications sont simplifiées à l’extrême, cela ne correspond pas exactement à la réalité, mais ça aide grandement ceux qui n’y connaissent rien ! Surtout n’hésitez pas à commenter et me dire ce qu’il faudrait que je change pour faciliter la compréhension de cet outil.

 

Linux : utilisation de gdb (mémo simple)

Written by Olivier Pons on mars 24th, 2009

gdb (= GNU debugger) sert à déboguer les programmes écrits avec le
compilateur gcc (= GNU C Compiler). Il se lance en ligne de commande.
Très simple à utiliser.

Comment le lancer ?

  • Syntaxe : gdb [nom du fichier exécutable]. Exemple : gdb monprog ;
  • Lancer un programme qui prend des paramètres gdb --args monprog param1 param2 ;

Lorsqu’on est sous le débogueur :

  • Exécuter le programme : run ;
  • Point d’arrêt (en général fichier main.c) : break 20 pour arrêt ligne 20 ;
  • Inspecter une variable : print nomdelavariable ;
  • Faire du pas à pas : step ;
  • Refaire la dernière commande : touche [entrée].

NB : ce mémo est destiné à utiliser immédiatement gdb. Rien d’autre.

 

Qui sommes nous ?

Written by Olivier Pons on mars 21st, 2009

Depuis la loi du premier janvier 2009 sur les auto-entrepreneurs, nous avons décidé de vous proposer nos compétences.

Dans quel domaine ? Linux, en tant que technologie de pointe.