$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 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