$Id: Unix.txt,v 1.9 2003/05/13 16:03:01 parmentf Exp $
------------
UNIX
------------
Historique ---------------------------------------
Multics --> UNICS --> UNIX
(MULTiplexed Information and Computing Service)
(UNiplexed Information and Computing Service)
1969 / AT&T Bell Laboratories (Ken Thompson, Dennis Ritchie) / PDP7
1972 / 10 UNIX installés
1973 / ré-écrit en C / portabilité
1979 / Bourne shell
1983 / AT&T UNIX System V
1984 / TCP/IP sur 4.2BSD --> Internet
/ 100 000 UNIX installés
1987 / 750 000 UNIX installés
1991 / Linux en développement (par Linus Torvalds)
1999 / Linux 2.2
2001 / Linux 2.4
Implications:
Internet, Jurassic Park, Open Source, ...
http://www.unix-systems.org/what_is_unix/history_timeline.html
Différents UNIX:
HP-UX, Solaris (Sun), (DEC), AIX (IBM), Xenix (Microsoft, abandonné),
IRIX (SGI), BSD (Berkeley), FreeBSD, Linux, MacOS X (Apple), QNX, ...
Cas de Linux:
Le noyau est le même 2.2, 2.4 ou 2.6 (dernier numéro pair: version
stable, impair: version de développement), mais les distributions
changent (facilités d'installation, programmes fournis, facilités de
configuration, ...): RedHat, Mandrake, SuSE, UnitedLinux (SCO, SuSE,
TurboLinux, Conectiva), Slackware, Debian, ...
Gratuit et sources fournies.
http://www.linux-france.org/
http://www.linux.org/
http://lea-linux.org/intro/ (Linux Entre Amis)
http://www.delafond.org/survielinux/ (Guide de survie du débutant sous
Linux)
Caractéristiques ---------------------------------
UNIX est un système d'exploitation:
- portable (de nombreuses architectures supportées)
- réseau (on peut se connecter à une machine distante et y exécuter
des programmes, pour peu qu'on puisse s'y loguer).
- multi-tâches (plusieurs programmes peuvent tourner en même temps, ce
qui n'était pas le cas de Windows 3 - pas réellement, ni celui de de
MacOS < 10)
- multi-utilisateurs (plusieurs utilisateurs peuvent utiliser la même
machine en même temps).
Ces caractéristiques sont de plus en plus présentes dans les systèmes
d'exploitation modernes (alors que ça fait plus de 30 ans qu'UNIX les
possède).
ex: Windows NT-2000-XP, MacOS X, Linux, Amiga, ...
X Window System ----------------------------------
X Window (appelé aussi "X" ou "x11") est la couche graphique des
systèmes basés sur Unix. Elle est la même sur nombre de systèmes
d'exploitation différents, et tient compte du réseau.
X Window a une architecture client/serveur: une application graphique
est considérée comme un client d'un serveur X (c'est-à-dire le
programme qui affiche les données sur l'écran du poste de travail).
Exemple de serveurs X:
- XWin
- XFree86 (pour Linux, Cygwin, ...)
- ...
http://www.x.org/X11.html
http://www.xfree.org/
http://www.linux-kheops.com/doc/casteyde/install_guide-2.0.2/htm/c8074.htm#AEN8093
La plupart des commandes Unix se manipulent en mode texte.
Certaines des applications aussi.
D'autres ne fonctionne qu'en mode graphique (sous X).
Certaines fonctionnent dans les 2 modes (ça dépend de ce qui est
disponible): emacs est de celles-là.
Emacs --------------------------------------------
http://www.parinux.org/ressources/mini-howtos/emacs/
Window Managers ----------------------------------
Le "look-and-feel" de X est configurable: on peut utiliser plusieurs
"Window managers" (contrairement à Windows, où l'on n'a pas le choix
de l'interface graphique, même si on peut configurer un peu les
couleurs, les comportements -- avec TweakUI).
http://www.xwinman.org/
À garder en réserve.
Commandes ----------------------------------------
http://www.linux-france.org/article/debutant/
Shell --------------------------------------------
Nous ne verrons ici que le shell sh (aussi appelé Bourne Shell), avec
lequel ksh est compatible (ksh est le shell par défaut à l'INIST).
-- variables d'environnement ---
HOME
PATH
PS1
SHELL
-- exécution d'un script --
sh
#!/bin/sh
.
-- les variables d'un script --
variable=valeur
$variable
${variable}
export variable
-- les paramètres --
$0
$n
$#
$*
shift
-- variables spéciales --
$$
$?
-- caractères spéciaux --
\
"..."
'...'
`...`
-- instructions --
case
test
if
while
until
for
-- diverses commandes --
#
banner
echo
read
exit
. script
fonction()
exec arg
-- expr --
expr e1 op e2
expr e1 \| e2
expr e1 \& e2
expr e1 : regexp
http://www.shellunix.com/ (en français)
Make ---------------------------------------------
make < GNU make (GNU make est celui qu'on utilise à l'INIST)
make est un programme qui permet de gagner du temps.
Il arrive qu'on construise de gros shells qui, traitent un corpus, en
extraient des informations, et/ou en font une synthèse.
Or, dès que le corpus change, ou que les paramètre de traitement
changent (par exemple, une table de référence), quand on n'a pas make,
on relance le shell. Dans ce cas on relance un traitement qui n'aurait
pas forcément besoin d'être exécuté *depuis le début*.
Pour pallier à ce problème, on peut aussi découper ce gros shell en
plusieurs petits, mais il subsiste un écueil: il faut s'assurer qu'on
a bien exécuté tous les shells nécessaire à la prise en compte des
dernières modifications.
Make est là pour répondre à tous ces besoins: grâce aux dates de
modification des fichiers, et à une liste de dépendences entre
fichiers de départ et fichiers d'arrivée, il simplifie la regénération
de fichiers (sans qu'on aie à tenir une liste des fichiers modifiés,
et donc des shells à exécuter).
De plus, make est un programme générique, qui peut être appliqué à
bien d'autres programmes que de simples shells. On s'en sert par
exemple pour compiler de gros projets (pour avoir un programme à jour,
il faut qu'il soit recompiler dès qu'un des fichiers dont il dépend
est modifié).
--
Par défaut, make utilise le fichier makefile présent dans le
répertoire courant. Ce fichier doit contenir les règles de dépendances
entre fichiers à générer et fichiers de base (un fichier peut
appartenir aux deux catégories, mais dans des règles différentes), et
les commandes à exécuter pour obtenir les fichiers à générer.
une règle est de la forme:
cible: base
commande
Où la commande doit être précédée d'une tabulation! Il peut y avoir
plusieurs lignes de commandes, et plusieurs fichiers de base.
Pour créer le fichier cible (qui est une règle du fichier makefile),
il suffit de taper: make cible.
http://www.eng.hawaii.edu/Tutor/Make/FrenchMake/make.htm
http://www.oreillynet.com/pub/a/linux/2002/01/31/make_intro.html
http://www.gnu.org/manual/make/
http://make.paulandlesley.org/
Sed ----------------------------------------------
Sed (pour Stream EDitor) est un éditeur non interactif de texte. Il
permet d'appliquer une certain nombre de commandes à un fichier puis
d'en afficher le résultat (sans modifier le fichier de départ) sur la
sortie standard.
Substitution -------
La commande suivante lit <fichier> et affiche ses lignes sur la sortie
standard en remplaçant la chaîne Dilib par la chaîne DILIB.
sed 's/Dilib/DILIB/' fichier
Il est conseillé d'entourer les commandes par des apostrophes simples,
pour éviter que le shell n'interprète les caractères spéciaux (
.*[]^$\ ).
ATTENTION: cette commande ne remplace que la première occurrence de
"Dilib" sur chaque ligne du fichier. S'il y en a deux, la deuxième ne
sera pas remplacée, à moins d'utiliser l'option g en fin de commande:
sed 's/Dilib/DILIB/g' fichier
Si on veut faire deux remplacements sur la même ligne de commandes, on
peut utiliser:
sed -e 's/Dilib/DILIB/g' -e 's/Jacques Ducloy/Monsieur Dilib/g' fichier
ATTENTION: le -e est obligatoire pour distinguer la deuxième commande
d'un nom de fichier.
REMARQUE: les commandes sont effectuées sur chaque ligne dans leur
ordre d'apparition, ce qui veut dire que "Jacques Ducloy" sera
transformé en "Monsieur Dilib" *après* la substitution de "Dilib" par
"DILIB", il restera donc des "Dilib" sur la sortie standard.
Expression régulières:
On peut utiliser des expressions régulières dans les chaînes à
remplacer (donc, il faut banaliser les caractères spéciaux dans cette
chaîne).
Exemple:
sed -e 's/Jacques D[uU][cC][lL][oO][yY]/Monsieur Dilib/g' fichier
REMARQUE: le caractère * englobe autant de caractères qu'il peut, ce
qui veut dire que
sed 's/ré.*duction/réduction/g' fichier
transformera le fichier
do ré mi fa sol la si duction ah bon duction la suite
en
do réduction la suite
et non pas en
do réduction ah bon duction la suite
Récupération -------------------------------------
Les opérateurs \( et \) sauvent leur contenu et permettent leur
récupération par l'utilisation de \1, \2, etc.
sed -e 's/^\([A-Z][A-Za-z]*\), \([A-Z][A-Za-z]*\)/\2 \1/' fichier
Remplacera les Nom, Prénom en début de chaque ligne du fichier (quand
il en trouve) par Prénom Nom.
Commandes dans un fichier ------------------------
Si vous avez beaucoup de commandes, vous pouvez les rassembler dans un
fichier comme celui-là:
# Fichier "exemple.sed"
# Il ne peut y avoir de commentaires que dans un bloc au début du
# fichier.
s/É/É/g
s/À/À/g
s/Ç/Ç/g
Pour appeler ce fichier, il faut utiliser l'option "-f":
sed -f exemple.sed fichier
Une autre solution consiste à en faire un script exécutable (à la
manière d'un script shell):
#!/usr/bin/sed -f
# Table de transcodage de ISO-8859-1 vers HTML
s/É/É/g
s/À/À/g
s/Ç/Ç/g
http://www.shellunix.com/sed.html La commande sed
http://www.cs.hmc.edu/qref/sed.html An introduction to sed