Quelques trucs Unix / Linux…

Quelques trucs Unix / Linux …

Cette page vous donne accès à une série d’explications ou d’exemples vous permettant de mieux comprendre certains sujets,

ou contenant des informations peu connues qui peuvent vous faire gagner du temps.

Elle peut aussi vous servir d’aide-mémoire en présentant des exemples ciblés et pratiques.

La réalisation de cette page représentant un travail conséquent, les sujets seront traités au fur et à mesure de mes disponibilités.

Lorsque le sujet est abordé, il figure sous forme d’un lien.

* Commandes Unix / Linux

o awk

o Bourne shell

o expr

o find

o gnuplot

o grep, egrep, fgrep

o m4

o MySQL

o screen

o sed

o sort

o stty

o tput

o vi

o vim

o vmstat

* Expressions régulières

o egrep

o expr

o lex

o sed

o Shell

o vi

* Commandes réseaux

o arp

o ethtool

o ifconfig

o mii-tool

o netstat

o route

o tcpdump

* Logiciels de composition

o LaTeX

o metafont

* Programmation

o Langage C

o cscope

o ctags

o lex, yacc

o Portabilité

* Web

o apachectl

* Fonctions bibliothèques

o regexec, regcomp

* Problèmes classiques

o Détermination du type d’un filesystem

grep

grep, egrep et fgrep sont des commandes de recherche de chaînes de caractères dans des fichiers.

egrep et fgrep sont des variantes de grep :

– egrep accepte des expressions régulières étendues

– fgrep (fast grep) n’accepte que des chaines fixes (pas d’expressions régulières)

Voici quelques exemples pratiques d’utilisation de ces commandes :

1. Pour récupérer les lignes utilisées du fichier de configuration de Samba :

egrep -v ‘^(#|;|[ \t]*$)’ /etc/samba/smb.conf | more

Retour m4

m4 est un « macro-processeur ».

Il est dérivé d’un macro-processeur appelé M3 qui a été écrit par Denis M. Ritchie pour le mini-ordinateur AP-3.

Il peut être utilisé comme « front-end » pour le « C » et le « Ratfor », mais pour bien d’autres choses encore. Son rôle est de copier l’entrée standard vers la sortie standard, en effectuant au passage des modifications décrites à l’aide d’un langage simple.

Il permet, entre autres, la définition de macros, l’inclusion de fichiers, les calculs arithmétiques, les tests de conditions, l’exécution de commandes système, et la manipulation de chaînes de caractères.

Exemples :

1. Pour définir la valeur d’une macro, on utilise la directive suivante:

define(nom, valeur)

Si le fichier « html.m4 » contient les lignes suivantes :

define(jaune, `#FFFF00′)dnl

Le `jaune’ en HTML a la valeur jaune.

alors l’exécution de la commande :

m4 html.m4

produira le résultat suivant:

Le jaune en HTML a la valeur #FFFF00.

(L’ordre « dnl » sert à supprimer le caractère ‘\n’ de la ligne).

2. Pour convertir une date au format YY-MM-DD en une date au format DD-MM-20YY, on pourra utiliser la macro suivante :

define(FR_date, `substr($1,6,2)-substr($1,3,2)-20substr($1,0,2)’)

L’exécution de m4 sur la ligne :

FR_date(04-10-28)

donnera :

28-10-2004

Retour MySQL

MySQL est un serveur de bases de données relationnelles SQL.

Ci-dessous quelques exemples de commandes MySQL :

1. Pour lancer l’interface de connexion au serveur (avec saisie interactive du mot de passe) :

mysql -u root -p

2. Pour afficher les noms des bases définies :

show databases;

3. Pour utiliser une base nommée « base_1 » :

use base_1;

4. Pour lister les tables définies dans la base :

show tables;

5. Pour afficher les champs d’une table nommée « table_1 » :

desc table_1;

6. Pour afficher le contenu de table_1:

select * from table_1;

7. Pour détruire la base nommée base_1:

drop database base_1;

8. Pour donner tous les privilèges sur base_1 à un administrateur nommé « admin_base_1 », et ayant le mot de passe « passwd_base_1″:

grant all privileges on base_1.* to admin_base_1@localhost identified by ‘passwd_base_1’;

Retour screen

screen est un gestionnaire d’écran avec émulation VT100/ANSI. Il permet de multiplexer un terminal physique entre plusieurs processus (généralement des shells interactifs).

Exemples :

1. Pour créer une nouvelle instance de terminal :

screen

2. Pour détacher l’instance du terminal physique :

Ctrl-A d

3. Pour lister les instances en cours :

screen -ls

4. Pour se reconnecter à une instance donnée :

screen -r id

5. Pour afficher la liste des instances, à partir d’une instance :

Ctrl-A  »

6. Pour passer à l’instance suivante :

Ctrl-A n

7. Pour passer à l’instance précédente :

Ctrl-A p

8. Pour basculer entre les 2 dernières instances :

Ctrl-A Ctrl-A

9. Pour créer une nouvelle instance à partir d’une instance :

Ctrl-A c

Retour sed

sed est un « stream-editor », c’est-à-dire un éditeur qui travaille sur un flux : en l’occurence il lit les données à traiter sur son entrée standard (stdin) et écrit le résultat de son traitement sur sa sortie standard (stdout), chacune de ces sorties étant bien sûr redirigeable.

Exemples :

1. Pour remplacer sur chaque ligne du fichier « data1 » la 1ère occurence de la chaîne « toto » par la chaîne « titi », et mettre le résultat dans le fichier « data2 » :

sed ‘s/toto/titi/’ < data1 > data2

2. Idem, mais pour remplacer toutes les occurences :

sed ‘s/toto/titi/g’ < data1 > data2

3. Pour supprimer les caractères « ./ » en début de ligne :

sed ‘s/^\.\///’ < data1 > data2

ou plus simple :

sed ‘s:^\./::’ < data1 > data2

Explication : le caractère ‘.’ doit être précédé d’un ‘\’, sinon il joue le rôle de « joker » et désigne alors n’importe quel caractère, et le caractère « / » généralement utilisé pour séparer les deux expressions peut en fait être remplacé par un caractère quelconque :

echo mine | sed semeuse donne « usine » (s/m/us/) , et

echo victoria | sed sectorielle donne « villa » (s/ctori/ll/) .

Retour vi

vi est le premier éditeur plein-écran d’Unix. Il a été développé après « ed » (éditeur « ligne » adapté aux TTYs).

Il est très puissant, mais souvent sous-employé, car ses commandes, pas toujours très intuitives, forcent l’utilisateur à un effort de mémorisation qu’il n’est pas toujours prêt à faire.

Je vous donne ci-dessous quelques commandes utiles :

1. Pour les réfractaires à « vi », voici les commandes pour quitter « vi » :

: q <RETURN> (pour quitter s’il n’y a pas eu de modification depuis la dernière écriture sous « vi »)

: wq <RETURN> (pour quitter en enregistrant les modifications effectuées)

: x <RETURN> (idem, mais plus court)

ZZ (idem, mais encore plus court)

: q! <RETURN> (pour quitter sans enregistrer les dernières modifications)

: ! kill -9 `echo $PPID` (pour ceux qui veulent quitter violemment, sans enregistrer et salement !)

2. Pour dupliquer un bloc de lignes :

sur la première ligne du bloc :

ma

après déplacement sur la dernière ligne du bloc :

« ay’a

après positionnement sur la ligne après laquelle il faut insérer la copie du bloc :

« ap

S’il faut insérer une autre copie du bloc au même endroit :

« aP

Retour vim

vim est une version améliorée de l’éditeur « vi ». Il apporte de nouvelles fonctionnalités intéressantes.

Partage de l’écran :

1. Découpage de l’écran en deux fenêtres superposées :

:split ou Ctrl-W s

2. Découpage de l’écran en deux fenêtres juxtaposées :

:vsplit ou Ctrl-W v

3. Changement de fenêtre :

Ctrl-W suivi d’une lettre indiquant la direction, h=gauche, j=bas, k=haut, l=droite

4. Fermeture d’une fenêtre :

:q ou Ctrl-W q

Retour vmstat

vmstat est une commande qui affiche des informations sur le fonctionnement du système (processus, mémoire, pagination, entrées/sorties blocs, traps, et activité CPU).

Les informations remontées par cette commande peuvent être collectées par des shell-scripts en vue de faire des calculs statistiques ou de la supervision.

Il faut toutefois être prudent dans le traitement des informations car le format d’affichage (la position des champs) diffère d’une version à une autre. Par exemple, le champ « idle » (désignant le pourcentage d’idle-time du CPU, c’est-à-dire le pourcentage d’inactivité du CPU) peut occuper les positions suivantes :

Système Version Position

AIX

5.3

 

16

HP-UX

11.11

 

18

Tru64

5.1

 

18

et sur Linux, cela dépend de la version de la commande vmstat :

Système (indicatif) Version de vmstat Position

Linux Red Hat 9.0

2.0.11

 

16

Linux Red Hat ES 3

2.0.17

 

16

Linux Debian Sarge

3.2.1

 

15

Linux CentOS 4.4

3.2.3

 

15

Linux Server 5

3.2.7

 

15

Sur AIX 5.3 par exemple, la récupération de l’idle time dans une variable « idle » pourra s’écrire :

* idle=`vmstat 1 2 | tail -1 | awk ‘{ print $16 }’`

mais sous HP-UX 11.11, elle s’écrira :

* idle=`vmstat 1 2 | tail -1 | awk ‘{ print $18 }’`

Soyez donc prudents dans l’écriture de vos scripts pour éviter les mauvaises surprises lors des portages.

La solution la plus portable pour récupérer des informations en provenance de vmstat est d’utiliser un script (« vmstat_vars ») contenant un programme AWK qui génére des initialisations de variables SHELL :

vmstat 1 2 | awk ‘NR == 2 {

# Memorisation des noms des champs

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

for (i = 1; i <= NF; i++) {

label[i] = $(i);

}

max_fields = NF;

}

NR > 2 {

# Memorisation des valeurs des champs

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

for (i = 1; i <= max_fields; i++) {

value[i] = $(i);

}

}

END {

# Generation des initialisations de variables

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

for (i = 1; i <= max_fields; i++) {

printf(« VMSTAT_%s=%s\n », label[i], value[i]);

}

}’

Le script génère un résultat ressemblant aux lignes suivantes :

VMSTAT_r=0

VMSTAT_b=0

VMSTAT_swpd=0

VMSTAT_free=198380

VMSTAT_buff=73640

VMSTAT_cache=459616

VMSTAT_si=0

VMSTAT_so=0

VMSTAT_bi=0

VMSTAT_bo=0

VMSTAT_in=1084

VMSTAT_cs=388

VMSTAT_us=1

VMSTAT_sy=0

VMSTAT_id=99

VMSTAT_wa=0

VMSTAT_st=0

Pour initialiser les variables shell, il suffit d’exécuter le script de la façon suivante :

eval `./vmstat_vars`

 

Pour vérifier que les variables sont bien initialisées dans le shell, taper

set | grep VMSTAT_

Retour Manipulation du cache ARP

arp permet d’afficher ou de manipuler le cache ARP.

Voici quelques exemples :

# Affichage du cache ARP :

1. arp

2. arp -n

# Suppression d’une entrée :

1. arp -d 10.123.45.67

2. arp -d sirius

Retour Configuration des cartes ethernet

ethtool permet de configurer les différentes cartes ethernet, ou d’afficher leur configuration.

Voici quelques exemples :

1. ethtool eth1

# Modification de la configuration d’une interface :

1. ethtool -K eth0 tso off

2. ethtool -s eth1 speed 100 duplex full autoneg off

Retour Configuration des interfaces réseaux

ifconfig permet de configurer les différentes interfaces réseaux, ou d’afficher la configuration des interfaces.

Voici quelques exemples :

# Affichage de la configuration de toutes les interfaces :

* ifconfig -a

# Affichage de la configuration de l’interface eth0 :

* ifconfig eth0

# Modification de la configuration d’une interface :

* ifconfig eth1:0 10.132.1.200 netmask 255.255.255.0 up

Retour Gestion des routes

La commande route permet de définir ou de supprimer des routes.

Sa syntaxe diffère légèrement d’un Unix à l’autre.

Voici quelques exemples (ils ne sont donnés qu’à titre indicatif : référez-vous aux pages de manuels pour une syntaxe complète) :

# Ajouts de routes sous Linux : (route)

1. route add -net 10.123.45.00 netmask 255.255.255.0 gw 10.123.45.254 dev eth1

2. route add -net 10.123.45.00/24 gw 10.123.45.254 dev eth1

3. route add default gw 10.123.45.254

# Ajouts de routes sous AIX : (route)

1. route add 192.100.201.7 192.100.13.7

2. route add -net 192.100.201.0 192.100.13.7

3. route add -net 10.20.30.0 -netmask 255.255.255.0 10.20.30.254

4. route add 0 192.100.13.7

# Ajouts de routes sous HP-UX : (route)

1. route add 192.100.201.7 192.100.13.7

2. route add net 192.100.201.0 192.100.13.7

3. route add net 10.20.30.0 netmask 255.255.255.0 10.20.30.254

# Ajouts de routes sous Solaris : (route)

1. route add 192.0.2.32/27 somegateway

2. route add 192.0.2.32 -netmask 255.255.255.224 somegateway

3. route add 192.0.2.32 somegateway 255.255.255.224

# Suppression de routes sous Linux : (route)

1. route del -net 10.123.45.00 netmask 255.255.255.0 gw 10.123.45.254 dev eth1

2. route del -net 10.123.45.00/24 gw 10.123.45.254 dev eth1

3. route del default gw 10.123.45.254

# Suppression de routes sous AIX : (route)

1. route delete 192.100.201.7 192.100.13.7

2. route delete -net 192.100.201.0 192.100.13.7

3. route delete -net 10.20.30.0 -netmask 255.255.255.0 10.20.30.254

4. route delete 0 192.100.13.7

# Suppression de routes sous HP-UX : (route)

1. route delete 192.100.201.7 192.100.13.7

2. route delete net 192.100.201.0 192.100.13.7

3. route delete net 10.20.30.0 netmask 255.255.255.0 10.20.30.254

# Suppression de routes sous Solaris : (route)

1. route delete 192.0.2.32/27 somegateway

2. route delete 192.0.2.32 -netmask 255.255.255.224 somegateway

3. route delete 192.0.2.32 somegateway 255.255.255.224

Retour Observation de trafic réseau

tcpdump permet d’observer le trafic réseau en affichant les entêtes de paquets correspondant à des critères spécifiés.

Voici quelques exemples :

# Affichage des paquets passant sur une interface donnée :

* tcpdump -i eth1

# Affichage des paquets provenant d’une adresse donnée :

* tcpdump src host 10.123.45.67

# Affichage des paquets passant par eth0, en provenance d’une adresse donnée, et à destination d’une adresse donnée :

* tcpdump -i eth0 src host 10.20.30.44 and dst host 10.20.30.55

Retour Logiciel de composition

LaTeX est un logiciel de composition de documents, principalement utilisé dans les milieux scientifiques par des personnes exigeantes et ayant un raisonnement structuré. Je n’ai pas l’intention de le décrire, ni de faire une introduction à l’utilisation de ce formidable outil, mais uniquement de donner quelques éléments à titre d’aide-mémoire pour ceux qui le connaissent déjà, mais l’utilisent occasionnellement.

# Lancement de LaTeX pour compiler un fichier source :

* latex document.tex

# Visualisation graphique du document produit :

* xdvi document.dvi

# Production d’un fichier PostScript :

* dvips document.dvi -o

# Impression d’un document :

* dvips document.dvi

# Exemple de document avec des formules mathématiques :

\documentclass{article}

\usepackage[francais]{babel}

\begin{document}

$ M \begin{array}{| c}

\frac{R + \varepsilon r}{R + r + \varepsilon r}\cos \omega + \frac{k r}{R + r + \varepsilon r}

\cos \left[ \left(1+\frac{\varepsilon R}{r}\right)\omega – \varepsilon \frac{R \pi}{2 r} \right] \\

\frac{R + \varepsilon r}{R + r + \varepsilon r}\sin \omega + \frac{k r}{R + r + \varepsilon r}

\sin \left[ \left(1+\frac{\varepsilon R}{r}\right)\omega – \varepsilon \frac{R \pi}{2 r} \right] \\

\end{array}$

\end{document}

 

Retour Outil d’aide à l’étude des programmes C

cscope facilite l’étude des programmes C en permettant la navigation dans les fichiers à la recherche des définitions de fonctions et de variables.

Par défaut, cscope examine les fichiers C (.c et .h), lex (.l) et yacc (.y) du répertoire courant.

cscope peut trouver interactivement les définitions de fonctions, variables et macros.

# Lancement :

1. cscope

Retour Génération de cross-reference pour fichiers sources

ctags génère une cross-reference qui permet la navigation dans les fichiers sources à l’aide d’un éditeur comme « vi » par exemple.

Une fois la cross-reference produite, il est possible sous « vi » de localiser rapidement les fonctions en utilisant la séquence « Ctrl-$ » :

pour cela, positionner le curseur sur l’appel d’une fonction et presser « Ctrl-$ ».

Pour revenir à l’endroit précédent; presser « Ctrl-T ».

Retour Outil de contrôle du serveur Web Apache

apachectl permet, entre autres, de vérifier la configuration du serveur Apache contenue dans le fichier httpd.conf.

# Exemples :

1. apachectl -t

2. apachectl configtest

Retour Détermination du type d’un filesystem

Il existe plusieurs méthodes pour déterminer le type d’un filesystem :

S’il est monté, utilisez l’une des commandes suivantes :

1. df -T

2. mount

S’il n’est pas monté, utilisez l’une des commandes suivantes :

1. blkid device

2. fstyp device (sur HP-UX)

3. file -s device

viaMartial BORNET – Consultant Indépendant, Expert UNIX, Méthodes et Optimisations – Quelques trucs Unix / Linux….