diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7585238 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +book diff --git a/README.md b/README.md index 5e547f0..99fadfe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ -cours-unix-shell -=============== +# cours-unix-shell + +## Introduction Reprise d'un [ancien cours UNIX/Shell](./UnixShell_cours2018/), dédié à des formations internes pour @@ -12,12 +13,23 @@ Il aborde des principes généraux, des commandes de base et une initiation à la programmation en shell UNIX. Chaque partie comprend un cours et un TP. -1. [UNIX](./unix/README.md): présentation des caractéristiques, de l'historique d'Unix et du cas +1. UNIX: présentation des caractéristiques, de l'historique d'Unix et du cas particulier de Linux, -2. [bases](./bases/README.md): redirections et commandes de base à connaître, -3. [commandes](./commandes/README.md): diverses commandes UNIX utiles, -4. [shell](./shell/README.md): initiation pour la programmation de scripts shell, -5. [sed](./sed/README.md): substitution de textes via l'éditeur de chaînes de caractères non +2. bases: redirections et commandes de base à connaître, +3. commandes: diverses commandes UNIX utiles, +4. shell: initiation pour la programmation de scripts shell, +5. sed: substitution de textes via l'éditeur de chaînes de caractères non interactif. -6. [make](./make/README.md): outil qui fait gagner du temps en ne réitérant pas des calculs qui ne +6. make: outil qui fait gagner du temps en ne réitérant pas des calculs qui ne sont plus nécessaires. + +## Rédaction + +Pour voir le résultat de vos modifications en direct dans un navigateur, lancez: + +```bash +mdbook serve --open +``` + +> Il faut auparavant avoir [installé +> `mdbook`](https://rust-lang.github.io/mdBook/guide/installation.html). diff --git a/bases/README.md b/bases/README.md deleted file mode 100644 index 015cdc1..0000000 --- a/bases/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# Redirections et Pipes - -## Redirections - -### Accès en lecture par redirection de l'entrée - -![entrée et sortie standard d'une commande Unix](image manquante) - -### Entrées sorties standard - -Toute commande Unix peut utiliser : - -- l'entrée standard (stdin) -- la sortie standard (stdout) - -Valeurs implicites (pour un poste de travail) : - -- stdin : le clavier -- stdout : l'écran - -### Redirection de l'entrée standard vers un fichier - -![redirection de l'entrée standard d'une commande unix](image manquante) - -Soit : - -- `aUnixCommand` = un programme Unix de type filtre -- `myFile` = un fichier - -La commande shell suivante : `aUnixCommand < myFile` - -appliquera le programme `aUnixCommand` au fichier `myFile` et affichera le -résultat sur l'écran. - -## Redirections et quelques commandes Unix - -### cat - -Utilisée sans paramètres, recopie le fichier en entrée sur la sortie standard : - -```bash -cat < Formation/TP1/exo.txt -``` - -recopie sur l'écran le fichier `Formation/TP1/exo.txt`. - -### cat - avec paramètres - -La commande `cat` peut s'utiliser avec une liste de fichiers en paramètres. -Ainsi : - -```bash -cat Formation/TP1/exo1.txt Formation/TP1/exo2.txt -``` - -"concatène" les fichiers sur stdout. - -> À NOTER : avec un seul fichier les commandes : -> -> ```bash -> cat Formation/TP1/exo.txt -> ``` -> -> et -> -> ```bash -> cat < Formation/TP1/exo.txt -> ``` -> -> peuvent être considérées comme équivalentes. - -### sort - -Trie les lignes d'un fichier dans l'ordre lexicographique ASCII. - -Exemple : - -```bash -sort < Formation/TP1/table.txt -``` - -### grep - -Sélectionne les lignes qui contiennent une expression donnée en paramètre. -Syntaxe simplifiée : - -```bash -grep expression < file -``` - -Exemple : - -```bash -grep 152X < Formation/TP1/issn.txt -``` - -### head - -Syntaxe simplifiée : - -```bash -head [ -number ] < file -``` - -- sans paramètre, sélectionne les 10 premières lignes -- avec paramètre, sélectionne le nombre de lignes désignées par le paramètre - -Exemple : - -```bash -head -5 < Formation/TP1/file.xml -``` - -## Redirection de la sortie standard vers un fichier - -La sortie standard peut à son tour être redirigée vers un fichier. -2 possibilités : - -```bash -commande > fichier -``` - -le résultat de la commande va servir à créer ou à remplacer (par écrasement) le -contenu du fichier donné. - -```bash -commande >> fichier -``` - -le résultat de la commande va servir à créer (la première fois) ou à rallonger -le contenu du fichier donné (concaténation). - -## Combinaison simple des redirections - -Entrée et sortie standard peuvent être rédirigées simultanément. -Ainsi : - -```bash -cat < fA > fB -``` - -copie le contenu du fichier `fA` pour créer le fichier `fB`. - -## Combinaison de fitres en cascade - le pipe - -(image manquante)pipe de deux commandes unix - -Le mécanisme appelé _pipe_ permet d'enchaîner des commandes en affectant la -sortie de l'une à l'entrée de la suivante. Sa forme générale est : - -```bash -c0 < fA | c1 | c2 | ... | cn > fB -``` - -Le fichier `fA` est lu et traité par la commande `c0`, le résultat est alors -traité par `c1`, et ainsi de suite jusqu'à la commande `cn` pour laquelle le -résultat est écrit dans le fichier `fB`. - -[Précédent](../unix/linux.md) - [Suivant](./commandes-basiques.md) diff --git a/bases/commandes-basiques.md b/bases/commandes-basiques.md deleted file mode 100644 index d228b75..0000000 --- a/bases/commandes-basiques.md +++ /dev/null @@ -1,28 +0,0 @@ -# Commandes de base UNIX - -| nom | syntaxe | définition | exemple | -| :------ | :------------------------------- | :--------------------------------------------------------------------------------------------- | :-------------------------------------------- | -| cat | `cat [file]` | Lecture du contenu de fichiers | `cat file.txt` | -| cat | `cat [file]...` `cat < ... >...` | Concaténation de fichiers | `cat file1.txt file2.txt > file3.txt` | -| cd | `cd [newWD]` | Changement de _working directory_. **À utiliser avec modération, penser aux chemins relatifs** | `cd Formation/TP1`, `cd`, `cd -` | -| cp | `cp inputFile targetFile` | Copie d'un fichier | `cp exo.sh exo1.sh` | -| date | `date` | Affichage date et heure système | `date` | -| grep | `grep expr <...` | Sélection des lignes contenant l'expression indiquée | `grep "" < file.xml` | -| head | `head [-n]` | Sélection du début d'un fichier (en nombre de lignes) | `head -1 < table.txt` | -| history | `history [-n]` | Historique des commandes | `history -50` | -| ls | `ls directory` | Listing du contenu d'un répertoire | `ls Formation`, `ls Formation/TP1` | -| mkdir | `mkdir dirName` | Création un répertoire (directory) | `mkdir Formation/TP2` | -| more | `more fileName` | Lecture à l'écran de fichiers texte (surtout longs) | `more table.txt` | -| mv | `mv inputFile targetFile` | Déplacement (ou renommage) d'un fichier | `mv table.tmp table.txt` | -| pwd | `pwd` | Affichage du working directory | `pwd` | -| rm | `rm path` | Effacement d'un fichier | `rm file.txt`, `rm Formation/TP1/table.tmp` | -| rm | `\rm path` | Effacement d'un fichier (en ignorant la confirmation avant chaque destruction) | `\rm file.txt` | -| rm | `rm -r path` | Effacement récursif d'un répertoire | `rm -r TP2/*.tmp` | -| rmdir | `rmdir path` | Effacement d'un répertoire (il doit être vide) | `rmdir TP3` | -| sort | `sort < ... >...` | Tri du flot d'entrée | `cat file1.txt file2.txt \| sort > file3.txt` | -| tail | `tail [-n]` | Sélection de la fin d'un fichier (en nombre de lignes) | `tail -1 < table.txt` | -| type | `type command` | Donne le type de la commande (alias, exécutable, etc.) et précise sa nature. | `type ll` | -| wc | `wc [fileName]` | Affichage de la taille d'un fichier (nombre de caractères, de mots, de lignes) | `wc -l < file.xml` | -| which | `which command` | Renvoie le chemin de la commande qui est exécutée quand on tape son nom dans le shell | `which ls` | - -[Précédent](./README.md) - [Suivant](./tp.md) diff --git a/bases/tp.md b/bases/tp.md deleted file mode 100644 index 976f947..0000000 --- a/bases/tp.md +++ /dev/null @@ -1,109 +0,0 @@ -# Travaux pratiques (commandes de base) - -L'objectif de cette première session de TP est de préparer votre environnement -de travail en même temps que de réviser rapidement quelques notions de base. - -## Préparation de votre environnement de travail - -- Créez les répertoires `Formation` et `Formation/UnixShell` sous votre *home - directory* (avec contrôle du contenu des répertoires à chaque étape avec `ls` ou - `ll` qui est un alias). -
- Voir la solution - - ```bash - $ mkdir Formation - $ ls - ... Formation ... - $ mkdir Formation/UnixShell - $ ls Formation - ... UnixShell ... - ``` - -
-- Déplacez-vous dans le répertoire UnixShell en une étape et vérifiez le répertoire courant. -
- Voir la solution - - ```bash - $ cd Formation/UnixShell - $ pwd - / ... /Formation/UnixShell - ``` - -
- -## Utilisation de quelques commandes Unix de base - -- Visualisez l'historique de votre session, avec affichage en sortie standard. -
- Voir la solution - - ```bash - $ history - ... - 1 mkdir Formation - 2 ls - 3 mkdir Formation/UnixShell - ... - ``` - -
-- Récupérez votre historique dans un fichier `historique.txt`. -
- Voir la solution - - ```bash - history > historique.txt - ``` - -
-- Affichez à l'écran le contenu de ce fichier `historique.txt`. -
- Voir la solution - - ```bash - more historique.txt - ``` - -
-- Comptez le nombre de lignes de ce fichier. -
- Voir la solution - - ```bash - $ wc -l historique.txt - 16 historique.txt (par exemple) - ``` - -
-- Affichez les 3 premières lignes du fichier historique de deux façons : - - avec une redirection en entrée de la commande appropriée -
- Voir la solution - - ```bash - head -3 < historique.txt - ``` - -
- - avec un pipe pour enchaîner les deux commandes appropriées -
- Voir la solution - - ```bash - cat historique.txt | head -3 - ``` - -
-- Renommez le fichier historique.txt en monHistorique.txt -
- Voir la solution - - ```bash - mv historique.txt monHistorique.txt - ``` - -
- -[Précédent](./commandes-basiques.md) - [Suivant](../commandes/README.md) diff --git a/book.toml b/book.toml new file mode 100644 index 0000000..ac5e9a7 --- /dev/null +++ b/book.toml @@ -0,0 +1,6 @@ +[book] +authors = ["François Parmentier"] +language = "fr" +multilingual = false +src = "src" +title = "Cours Unix Shell" diff --git a/commandes/README.md b/commandes/README.md deleted file mode 100644 index b97405f..0000000 --- a/commandes/README.md +++ /dev/null @@ -1,160 +0,0 @@ -# Autres commandes UNIX - -## Manuels en ligne - -### man - -Cette commande permet d'obtenir le manuel unix en ligne de toute commande unix : - -```bash -man [unixCommand] -``` - -Par exemple, on obtient l'aide en ligne (en anglais) sur la commande `ls` avec : - -```bash -man ls -``` - -L'aide qui s'affiche se décompose en plusieurs parties, généralement (mais pas exclusivement) : - -- NAME : Rappel du nom de la commande et son libellé en clair -- SYNOPSIS : Modèle générique de l'emploi de la commande -- DESCRIPTION : Explication du fonctionnement de la commande -- OPTIONS : Descriptions des différentes options supportées par la commande -- USAGE : Particularités (par exemple, comportement vis-à-vis de gros fichiers) -- EXAMPLES : Quelques exemples d'emploi, commentés -- ENVIRONMENT VARIABLES : Listing des variables d'environnement unix ayant une action sur la commande et devant éventuellement être convenablement positionnées avant emploi de la commande (les variables d'environnement seront traitées dans la partie suivante sur les shells) -- SEE ALSO : Renvois vers d'autres commandes unix ayant à voir avec la commande documentée -- NOTES : Commentaires complémentaires - -**N'oubliez jamais de consulter le man quand vous voulez en connaître plus sur une -commande, une fonction C, ou n'importe quoi d'autre** (essayez man colors (obsolète)). - -> 💡 Les _mans_ ont évolué jusqu'à ne presque plus contenir d'exemples, les -> rendant beaucoup plus hermétiques. -> Utilisez [tldr](https://tldr.sh/) pour avoir les exemples principaux pour une -> commande: - -## Commandes sur les fichiers - -### find - -Cette commande permet de rechercher un fichier ou un groupe de fichiers dans une -arborescence unix. La recherche peut porter sur le nom du fichier, son -propriétaire ou un groupe d'utilisateurs (ou bien d'autres critères, voir le -man). - -Pour retrouver un fichier par son nom ou par un masque (pattern) de celui-ci à -partir du répertoire courant : - -```bash -find . -name table* -``` - -Pour retrouver un (des) fichier(s) appartenant à un utilisateur particulier ou à -un groupe particulier : - -```bash -find . -user parmentf -find . -group dilib -``` - -Pour afficher la hiérarchie du répertoire courant : - -```bash -find . -``` - -### diff - -Cette commande permet de comparer deux fichiers `File1` et `File2` et d'afficher leurs différences éventuelles, ligne à ligne. - -```bash -diff File1 File2 -``` - -La commande `diff` signale les différences qu'elle trouve à l'aide des codes suivants : - -- `a` : ligne en ajout dans `File2` par rapport à `File1` -- `d` : ligne en suppression dans `File2` par rapport à `File1` -- `c` : lignes changées entre `File2` et `File1` -- `<` : différence constatée dans `File1` -- `>` : différence constatée dans `File2` - -À titre d'illustration, soient les fichiers `File1`, `File2` et `File3` suivants : - -| File1 | File2 | File3 | -| :---: | :---: | :---: | -| a | a | a | -| b | b | 1 | -| c | c | b | -| | d | e | - -Les commandes `diff` qui suivent donneront pour rapports : - -```bash -$ diff File1 File2 -3a4 -> d -$ diff File2 File1 -4d3 -< d -$ diff File1 File3 -1a2 -> 1 -3c4 -< c ---- -> e -``` - -| Ligne | File1 | File2 | File3 | -| :---: | :---: | :---: | :---: | -| 1 | a | a | a | -| 2 | b | b | 1 | -| 3 | c | c | b | -| 4 | | d | e | - -L'option `-c` de la commande `diff` permet d'avoir un rapport plus lisible, -notamment dans le cas de comparaison de gros fichiers. - -## Commandes sur les contenus - -### cut - -Cette commande permet de récupérer une ou plusieurs parties d'une chaîne de -caractères, par exemple en précisant le délimiteur séparant les parties à -extraire. - -Pour récupérer le numéro de département d'un code postal : - -```bash -$ echo 54500 | cut -c1-2 -54 -``` - -Pour récupérer une partie d'une ligne avec un délimiteur, avec une variable -`ligne="auteur,titre,descripteurs,id"` : - -```bash -$ echo $ligne | cut -d, -f2,4 -titre,id -``` - -À noter que si le délimiteur est un caractère spécial du shell, par exemple le pipe `|` ou le point-virgule, il faut le protéger entre guillemets. - -```bash -$ echo $ligne | cut -d"|" -f2 -titre -``` - -### 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. -Comme avec toute commande unix, il est possible de rediriger la sortie vers un fichier résultat. - -Voir [Sed](../sed/README.md). - -[Précédent](../bases/tp.md) - [Suivant](droits.md) diff --git a/commandes/compression.md b/commandes/compression.md deleted file mode 100644 index ed97d75..0000000 --- a/commandes/compression.md +++ /dev/null @@ -1,93 +0,0 @@ -# Archives, compression, décompression - -## tar - -Cette commande permet de créer un fichier archive (appelé *tarfile*) qui peut -contenir des fichiers et répertoires. -Ce fichier *tarfile* n'est pas compressé. -Cette commande peut être utile pour archiver un répertoire et tout ce qu'il -contient en un seul fichier. - -```bash -tar -cvf Archives.tar Sauvegarde -``` - -La commande ci-dessus, avec les paramètres `-cvf`, permet de créer une archive -du répertoire `Sauvegarde` dans le fichier nommé `Archives.tar`. Attention à -l'ordre des deux derniers paramètres. - -```bash -tar -xvf Archives.tar -``` - -La même commande `tar` avec les paramètres `-xvf`, permet de désarchiver le -contenu du *tarfile*. -Attention au positionnement du désarchivage : il s'opère dans le répertoire -courant. - -Pour connaître le détail du contenu d'un *tarfile*, il faut utiliser les -paramètres `-tvf`. - -## gzip - -Cette commande permet de compresser un fichier afin d'en réduire la taille, pour -stockage ou échange. -Le fichier résultat est renommé par ajout de l'extension `.gz` : - -```bash -gzip corpus.xml -``` - -Par listing du contenu du répertoire où la compression a été réalisée, on peut voir que le fichier `corpus.xml` a disparu et a été remplacé par `corpus.xml.gz`. - -Il est possible d'obtenir la taille d'un fichier non compressé à partir de son fichier compressé en gzip. - -```bash -gzip -l corpus.xml.gz -``` - -Quatre informations sont alors affichées à l'écran : - -1. la taille en octets du fichier compressé -2. la taille en octets du fichier non compressé -3. le ratio de compression -4. le nom du fichier initial, non compressé - -```txt -compressed uncompr. ratio uncompressed_name -77366 370713 79.1% corpus.xml -``` - -## gunzip - -Cette commande permet de décompresser un fichier compressé en `.gz`. -Sans paramètres, le fichier est décompressé sur disque et renommé sans -l'extension `.gz`. -Attention, la place en octets prise correspond bien au fichier décompressé. -Cette commande est équivalente à `gzip -d`. - -```bash -gunzip corpus.xml.gz -``` - -La commande ci-dessus restaure le fichier `corpus.xml`, qui remplace dans le -répertoire courant l'ancien fichier `corpus.xml.gz` de plus petite taille. - -S'il faut travailler avec un fichier compressé sans le décompresser sur disque, -il faut alors qu'il soit seulement décompressé vers la sortie standard. -Ensuite, il suffira d'enchaîner les commandes requises avec des pipes. -Par exemple : - -```bash -gunzip -c corpus.xml.gz | wc -l -``` - -## zcat - -Cette commande est équivalente à `gunzip -c`. - -```bash -zcat corpus.xml.gz | wc -l -``` - -[Précédent](./droits.md) - [Suivant](processus.md) diff --git a/commandes/droits.md b/commandes/droits.md deleted file mode 100644 index db70391..0000000 --- a/commandes/droits.md +++ /dev/null @@ -1,153 +0,0 @@ -# Gestion des droits - -## ll (alias de ls -alF) - -Cette commande permet d'obtenir la description complète d'un répertoire, y -compris les fichiers et répertoires cachés (qui commencent par un point) : - -```bash -ll -``` - -L'affichage résultant se lit ligne par ligne, par exemple : - -```bash -drwxrwxr-x 3 houdry dps 1024 Apr 28 15:28 ./ -drwxr-xr-x 16 houdry dps 512 Apr 18 16:19 ../ --rw-rw-r-- 1 parmentf dilib 2848 Apr 25 11:08 Make.gif --rw-rw-r-- 1 parmentf dilib 2631 Apr 25 11:08 Shell.gif --rw-rw-r-- 1 houdry dps 7817 Apr 25 11:44 redirPipes.html --rw-rw-r-- 1 parmentf dilib 2405 Apr 24 17:36 make.html --rwxrwxr-- 1 houdry dps 235 Apr 24 17:01 exotp.sh* -``` - -De nombreux éléments d'information sont visibles avec une commande de listing -long. Ils sont au nombre de sept, avec dans l'ordre des colonnes : - -- la liste des droits sur 10 positions (ex.: drwxrwxrwx) - - position 1 : le type d'entrée, fichier ou répertoire - - positions 2-4 : les droits de l'utilisateur (user) - - positions 5-7 : les droits du groupe de l'utilisateur - - positions 8-10: les droits des autres groupes - | | | - | --- | :------------------------------------------- | - | d | entrée répertoire | - | - | entrée fichier | - | r | lecture autorisée | - | w | écriture autorisée (et écrasement) | - | x | fichier exécutable ou répertoire parcourable | - -- la taille en blocs de l'entrée (peu utile pour nous) -- le nom du propriétaire (user unix) -- le groupe du propriétaire attaché à l'entrée -- la taille de l'entrée en octets -- les date et heure de la création ou de la dernière mise à jour -- le nom du répertoire ou du fichier - -> 💡 l'option `-h` vous donnera la taille de l'entrée dans un format plus... -> humain. - -## who, whoami, id - -Un utilisateur unix est identifié par deux choses : - -1. son code utilisateur (ex.: parmentf ou houdry) -2. son ou ses groupes (ex.: dps) - -Différentes commandes permettent de retrouver ces informations. - -Identification de l'utilisateur courant : - -```bash -whoami -``` - -Identification des utilisateurs du système : - -```bash -who -``` - -Affichage des code et groupe de l'utilisateur : - -```bash -id -``` - -## umask - -Cette commande permet de paramétrer les droits rwx qui vont servir pour la -création des nouveaux fichiers. Deux syntaxes sont possibles, celles qui suivent -sont équivalentes et standard : - -```bash -umask a=rx,ug+w -umask 002 -``` - -Les droits des 3 entités propriétaire (`u`), groupe du propriétaire (`g`) et autres groupes (`o`) doivent être précisés : - -- `a=rx` pour mettre les droits `r` et `x` seulement pour tous les groupes (`a`=`ugo`, all) -- `ug+w` pour ajouter le droit `w` aux groupes `u` et `g` seulement -- `002` est un masque en octal -- `002` est la négation de l'équivalent à `a=rx,ug+w` (=`775`) - voir tableau qui suit - -## chmod - -Cette commande permet de modifier les droits d'un fichier ou d'un répertoire. -Pour pouvoir le faire, il faut en être propriétaire. -Là aussi, il y a deux façons d'utiliser cette commande : avec les groupes `ugoa` -et les droits `rwx` ou bien avec un profil octal (directement, sans prendre sa -négation comme avec `umask`). -Le tableau suivant résume les cas possibles : - -| lettres | binaire | octal | -| :-----: | :-----: | :---: | -| `---` | 000 | 0 | -| `--x` | 001 | 1 | -| `-w-` | 010 | 2 | -| `-wx` | 011 | 3 | -| `r--` | 100 | 4 | -| `r-x` | 101 | 5 | -| `rw-` | 110 | 6 | -| `rwx` | 111 | 7 | - -Par exemple, pour positionner les droits d'un fichier `File` à `rwxr-xr--` : - -```bash -chmod 754 [File] -chmod u=rwx,g=rx,o=r [File] -``` - -Pour modifier des droits positionnés à `r--r----x` en `rwxrw-r--`, on peut aussi écrire : - -```bash -chmod ug+w,u+x,a+r,o-x [File] -``` - -## chgrp - -Cette commande permet de changer le groupe attaché à un fichier ou à un répertoire. -Par exemple, un fichier `File` est lié au groupe `dps` et il faut le changer -pour le lier au groupe `dilib` (attention, il faut que le *user* appartienne aux -deux groupes) : - -```bash -chgrp veille [File] -``` - -## newgrp - -Cette commande permet de changer le groupe d'appartenance de l'utilisateur. -Cela peut être nécessaire pour accéder à des fichiers dont l'emploi est limité à -certains groupes (par ex., `dilib` par rapport à `dps`). -Pour changer de groupe, il faut appartenir aux deux (l'ancien et le nouveau). - -À partir du moment où cette commande est lancée, les fichiers et répertoires -créés le seront sous ce nouveau groupe. - -```bash -newgrp veille -``` - -[Précédent](./README.md) - [Suivant](./compression.md) diff --git a/commandes/processus.md b/commandes/processus.md deleted file mode 100644 index 8a2c86f..0000000 --- a/commandes/processus.md +++ /dev/null @@ -1,67 +0,0 @@ -# Gestion des processus - -## ps - -Cette commande permet de voir quels sont les processus actifs pour un terminal donné. -Les processus qui sont vus ici sont par exemple le shell actif ou tout programme -en train de s'exécuter. - -```bash -ps -``` - -L'appel de cette commande affiche la liste des processus actifs avec, en particulier, leurs numéros (dits PID). - -```txt - PID TTY TIME CMD - 8073 pts/29 0:01 ksh - 12395 pts/29 0:25 xemacs -``` - -## kill - -Cette commande permet, en particulier, de détruire un processus qui ne s'est pas -normalement terminé avec l'achèvement d'un traitement et qui continue d'être -visible par un `ps` ou un `top`. -Pour faire cela, il faut utiliser le paramètre `-9` de la commande suivi du -numéro PID du processus à arrêter. - -```bash -kill -9 10256 -``` - -## nice - -Cette commande permet d'altérer délibérément la priorité d'une commande pour ne -pas gêner l'exécution de tâches plus prioritaires. -Par exemple : - -```bash -nice top -``` - -## top - -Cette commande affiche les processus les plus actifs (top CPU), avec -réactualisation fréquente des informations (par défaut, toutes les 3 secondes). - -```bash -top -``` - -Sont ainsi obtenus les noms des commandes et leur PID respectifs ainsi, entre -autres, que le nom du propriétaire de chacun de ces processus, leur priorité ou -leur charge CPU. -L'état affiché concerne l'ensemble des utilisateurs unix de la machine. - -Il y a une ligne de saisie de commandes juste au-dessus de la liste des 15 processus, à la position du curseur. Plusieurs commandes peuvent être utilisées ici, dont par exemple : - -- h : affiche l'aide sur les commandes de top -- k : avec l'option -9 termine un processus selon son PID (voir kill plus haut) -- r : renice un processus, c'est-à-dire permet d'altérer volontairement la - priorité d'un processus (celle-ci est un chiffre, par exemple 10) : - `renice [priorité] [PID]` -- u : affiche les processus d'un utilisateur donné -- q : quitte top - -[Précédent](./compression.md) - [Suivant](./tp.md) diff --git a/commandes/tp.md b/commandes/tp.md deleted file mode 100644 index de7ef74..0000000 --- a/commandes/tp.md +++ /dev/null @@ -1,302 +0,0 @@ -# Travaux pratiques (autres commandes UNIX) - -Cette seconde série de travaux pratiques se décompose en 4 parties : - -1. commandes utilisateurs, -2. gestion des droits, -3. archivage et décompression, -4. gestion des processus. - -## Commandes utilisateurs - -Identifiez-vous : quels sont votre *user id* (`uid`) et votre groupe (`gid`) ? - -
-Voir la solution - -```bash -$ whoami -[votre username] -$ id -uid=[votre username] gid=users -``` - -
- -## Gestion des droits - -- En restant dans votre répertoire de travail (UnixShell), listez complètement - le contenu de votre home directory. - Décrivez ce que vous y trouvez : - -
- Voir la solution - - UnixShell est à 2 nveaux sous votre *home directory*: - - ```bash - ll ../.. - ``` - -
- - - quels sont les fichiers et répertoires présents ? - -
- Voir la solution - - Des répertoires comme : `./ ../ Formation/` - Des fichiers comme : `.profile` - -
- - - lesquels sont cachés ? - -
- Voir la solution - - Tous ceux qui commencent par un point comme `.profile` - -
- - - quels sont leurs propriétaires et groupes attachés ? - -
- Voir la solution - - Propriétaires : surtout vous, éventuellement l'utilisateur `root` - Groupes : le vôtre, éventuellement d'autres - -
- - - quels sont les droits afférants ? - -
- Voir la solution - - Possiblement variable, mais dépendant surtout de votre `umask` (voir la suite) - -
- -- Copiez dans votre répertoire `UnixShell` le fichier - [`testUmask.txt`](../UnixShell_cours2018/testUmask.txt) (par un clic droit sur - ce lien puis "Enregistrez la cible du lien sous" ou "Save link as"). - Ses droits initiaux sont `rwxrwxr-x`. - Quel est votre `umask` ? - -
- Voir la solution - - Dépend de votre configuration, mais s'observe en faisant un `ll` pour afficher les droits pris par le fichier `testUmask.txt` lors de la copie sous votre compte. - En prenant pour exemple les droits présentés plus haut : `rwxrwxr-x` - - ```txt - user (u) : rwx, binaire 111 octal 7 - group (g) : rwx, binaire 111 octal 7 - other (o) : r-x, binaire 101 octal 5 - ``` - - Donc profil octal 775, d'où un `umask` de 002 (sa négation en octal). - On peut aussi lancer `umask` comme commande en ligne... -
- -- Modifiez les droits de ce fichier `testUmask.txt` de deux façons pour obtenir ceux qui suivent, en séquence pour les trois cas de proche en proche : - - - `rwx------` - - `rwxrwxrwx` - - `rwxr-xr--` - - La première façon de procéder utilisera un profil octal, la seconde des lettres. Contrôlez vos actions à chaque étape. - -
- Voir la solution - - - `rwx------` - - ```bash - $ chmod 700 testUmask.txt - $ chmod go-rwx testUmask.txt - $ ll - -rwx------ 1 [uid] users 36 May 5 13:04 testUmask.txt - ``` - - - `rwxrwxrwx` - - ```bash - $ chmod 777 testUmask.txt - $ chmod a+rwx testUmask.txt - $ ll - -rwxrwxrwx 1 [uid] users 36 May 5 13:05 testUmask.txt - ``` - - - `rwxr-xr--` - - ```bash - $ chmod 754 testUmask.txt - $ chmod go-w,o-x testUmask.txt - $ ll - -rwxr-xr-- 1 [uid] users 36 May 5 13:06 testUmask.txt - ``` - -
- -- Cherchez le chemin où se trouve votre fichier .profile, à partir de votre home directory, sans changer de répertoire. - -
- Voir la solution - - ```bash - find ~ -name .profile - ``` - -
- -- Copiez dans votre répertoire `UnixShell` le fichier - [`testDiff1.txt`](../UnixShell_cours2018/testDiff1.txt) (par un clic droit sur - ce lien). - Ouvrez-le dans un éditeur et modifiez-le selon les consignes qui s'y trouvent. - Ensuite, sauvegardez-le comme `testDiff2.txt`. - Comparez les deux fichiers, analysez le rapport obtenu en fonction de vos actions. - -
- Voir la solution - - ```bash - $ diff testDiff1.txt testDiff2.txt - 3a4 - > LIGNE AJOUTEE - 6d6 - < LIGNE A SUPPRIMER - 9c9 - < Modifiez-moi !!! - --- - > Modifiée - ``` - -
- -## Archivage et compression - -- Archivez en un seul *tarfile* tout le contenu de votre répertoire `UnixShell` (placez-vous au-dessus). - Contrôlez le fichier `.tar` résultat. - -
- Voir la solution - - Le plus simple est d'abord de vous déplacer dans le répertoire parent de `UnixShell` pour l'archiver : - - ```bash - $ cd .. - $ pwd - / ... /Formation - $ ll - drwxrwxr-x 4 [uid] [gid] 1024 Apr 5 13:15 ./ - drwxrwxr-x 16 [uid] [gid] 512 Apr 25 16:35 ../ - drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 UnixShell - ``` - - ```bash - $ tar -cvf Archives.tar UnixShell - $ ll - drwxrwxr-x 4 [uid] [gid] 1024 Apr 5 13:15 ./ - drwxrwxr-x 16 [uid] [gid] 512 Apr 25 16:35 ../ - drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 UnixShell - -rwxrwxr-x 1 [uid] [gid] 10240 May 5 14:23 Archives.tar - ``` - -
- -- Créez le sous-répertoire `tarzip` (sous `UnixShell` où vous revenez) et déplacez-y votre *tarfile*. - Sans vous déplacer dans ce sous-répertoire, désarchivez le *tarfile* et contrôlez le résultat. - -
- Voir la solution - - ```bash - $ cd UnixShell - $ pwd - / ... /Formation/UnixShell - ``` - - ```bash - $ mkdir tarzip - $ mv ../Archives.tar tarzip - ``` - - ```bash - $ tar -xvf tarzip/Archives.tar - UnixShell/ - UnixShell/monHistorique.txt - UnixShell/testDiff1.txt - UnixShell/testDiff2.txt - ``` - - ```bash - $ ll - drwxrwxr-x 4 [uid] [gid] 512 May 5 15:25 ./ - drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 ../ - drwxrwxr-x 4 [uid] [gid] 1024 May 5 14:23 UnixShell/ - -rwxrwxr-x 1 [uid] [gid] 212 May 5 10:10 monHistorique.txt - drwxrwxr-x 2 [uid] [gid] 512 May 5 15:18 tarzip/ - -rwxrwxr-x 1 [uid] [gid] 261 May 5 14:12 testDiff1.txt - -rwxrwxr-x 1 [uid] [gid] 249 May 5 14:13 testDiff2.txt - ``` - - Si vous avez travaillé comme cela, vous devez constater que le répertoire `UnixShell` s'est désarchivé sous lui-même... - C'est bien sûr un exemple se voulant surtout didactique. - Dans une situation plus concrète, le désarchivage doit s'opérer aux endroits les plus adéquats ! -
- -- Toujours en restant sous `UnixShell`, compressez le *tarfile* en `.gz`. - Affichez ensuite les informations relatives aux tailles de fichiers et au ratio de compression. - -
- Voir la solution - - ```bash - $ gzip tarzip/Archives.tar - $ ll tarzip - -rwxrwxr-x 1 [uid] [gid] 612 May 5 16:23 Archives.tar.gz - ``` - - ```bash - $ gzip -l tarzip/Archives.tar.gz - compressed uncompr. ratio uncompressed_name - 612 10240 94.3% tarzip/Archives.tar - ``` - -
- -- Toujours en restant sous `UnixShell`, décompressez le `tarfile.gz` sur le disque. - Puis vérifiez le résultat en listing complet. - Recompressez le *tarfile* et contrôlez de nouveau. - -
- Voir la solution - - ```bash - $ gunzip tarzip/Archives.tar - $ ll tarzip - -rwxrwxr-x 1 [uid] [gid] 10240 May 5 14:23 Archives.tar - ``` - - ```bash - $ gzip tarzip/Archives.tar - -rwxrwxr-x 1 [uid] [gid] 612 May 5 16:48 Archives.tar.gz - ``` - -
- -- Toujours en restant sous `UnixShell`, et sans décompresser le `tarfile.gz` sur - le disque, comptez le nombre de lignes non compressées qu'il renferme. - -
- Voir la solution - - ```bash - $ gunzip -c tarzip/Archives.tar | wc -l - ``` - -
- -[Précédent](./processus.md) - [Suivant](../shell/README.md) diff --git a/make/README.md b/make/README.md deleted file mode 100644 index 1564859..0000000 --- a/make/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Make - UNIX - -GNU Make est un héritier de `make`, mais sous Linux, c'est bien GNU Make qui est -installé. - -Make permet de gagner du temps par rapport aux shells: on n'exécute que ce qui -est nécessaire, en fonction des changements de source par rapport à leur cible. - -Un shell fait tous les traitements qui y sont indiqués. - -![Un shell fait tous les traitements qui y sont indiqués](../UnixShell_cours2018/Shell.gif) - -Un make ne fait que les traitements qui sont nécessaires. - -![Un make ne fait que les traitements qui sont nécessaires](../UnixShell_cours2018/Make.gif) - -## Syntaxe - -Le fichier `Makefile` contient les règles de dépendance. - -Une règle est de la forme : - -```make -cible: [fichier de départ] ... - commande -``` - -> ⚠ La commande doit être précédée d'une tabulation! - -Pour créer le fichier cible : `make cible` - -Exemple de fichier `Makefile` : - -```make -# Commentaire -compte.txt: aCompter.txt - wc -l < aCompter.txt > compte.txt -``` - -La deuxième fois qu'on lance la cible `compte.txt`, la commande `wc` n'est pas -exécutée, sauf si le fichier `aCompter.txt` a une date de modification plus -récente que celle de `compte.txt`. - -Une règle qui ne dépend d'aucun fichier de départ peut exister. -De plus, elle ne peut donner lieu à la création d'un fichier. -Une telle règle sera toujours exécutée (à condition que son nom ne soit pas -celui d'un fichier). - -## Références - -- Make Manual -- GNU Make -- Pour les spécialistes - -[Précédent](../sed/tp.md) - [Suivant](./tp.md) diff --git a/make/tp.md b/make/tp.md deleted file mode 100644 index 025ff53..0000000 --- a/make/tp.md +++ /dev/null @@ -1,160 +0,0 @@ -# Travaux pratiques - Make - UNIX - -Créer un fichier `Makefile` contenant une règle bonjour, qui affiche sur la sortie standard `Bonjour, comment ca va?` - -
-Voir la solution - -```make -bonjour: - @echo "Bonjour, comment ca va?" -``` - -> L'utilisation du `@` devant `echo` rend la commande "silencieuse", elle -> n'apparaît pas sur la sortie standard. - -
- ---- - -Ajouter une règle `bye` qui affiche `A bientot!`. - -
-Voir la solution - -```make -bye: - @echo "A bientot!" -``` - -
- ---- - -Créer une règle qui crée un fichier `modif.txt` dont le contenu vient du fichier -[`original.txt`](../UnixShell_cours2018/original.txt) (que vous pouvez -enregistrer grâce au bouton de droite) et qui remplace (grâce à `sed`) les -apparitions de `ILIB` par `DILIB`. - -
-Voir la solution - -```make -modif.txt: original.txt - sed -e 's/ILIB/DILIB/g' < original.txt > modif.txt -``` - -Le fichier `modif.txt` depend du contenu du fichier `original.txt`, c'est -pourquoi ce dernier apparaît à droite de `:`. - -
- ---- - -Créer une règle qui crée un fichier `modif2.txt` à partir de `original.txt` et -[`table.txt`](../UnixShell_cours2018/table.txt), en utilisant la table fournie -pour modifier le fichier original. - -
-Voir la solution - -```make -modif2.txt: original.txt table.txt - sed -f table.txt < original.txt > modif2.txt -``` - -Le fichier `modif2.txt` dépend des contenus des fichiers `original.txt` et -`table.txt` (si l'un des deux est modifié, la commande `sed` sera exécutée). - -
- ---- - -Ajouter une ligne à `table.txt` pour remplacer `CNRS` par `Centre National de la -Recherche Scientifique`. -Puis relancer `make modif2.txt` pour vérifier que la commande a bien été -exécutée. - ---- - -Ajouter une règle qui crée un fichier `compte.txt` contenant le nombre de lignes -du fichier `modif2.txt`. - -
-Voir la solution - -```make -compte.txt: modif2.txt - wc -l < modif2.txt > compte.txt -``` - -Le fichier `compte.txt` dépend du fichier `modif2.txt` (donc de sa règle, qui -dépend de `original.txt` et de `table.txt`). -Donc si on modifie `table.txt` et qu'on tape `make compte.txt`, ou toute autre -règle qui dépend directement ou indirectement de `table.txt`, cette règle sera -exécutée. - -
- ---- - -Créer une règle `clean` qui supprime les fichiers dont le nom se termine par -`~`. - -
-Voir la solution - -```make -clean: - rm -f *~ -``` - -> Si vous utilisez un lecteur Samba (probable à l'INIST), vous risquez une -> désynchronisation entre les fichiers enregistrés par le lecteur Samba et la -> date de lancement de `make` (il est arrivé que les fichiers aient une à deux -> minutes d'avance). -> Pour limiter de tels problèmes, on peut utiliser la commande `touch`, qui -> remet un fichier à l'heure courante du shell, mais seulement sur les fichiers -> qui viennent d'être modifiés/créés! - -
- ---- - -Créer une règle `all` qui dépende de `bonjour`, `compte.txt`, `clean`, et `bye`, -mais qui ne contient aucune commande (on peut quand même y mettre un `echo -- -Make all: exécuté --`). - -Remarques : - -- L'exécution d'une règle ne donne pas forcément lieu à l'exécution de sa - commande. - Dans le cas de la production d'un fichier, quand le fichier cible est plus - récent que le(s) fichier(s) dont il dépend, le fichier cible n'est pas recréé - (donc, la commande de sa règle n'est pas exécutée). -- Quand une règle dépend d'une autre règle qui dépend d'un autre fichier, et que - ce fichier est modifié (par exemple grâce à la commande `touch`, qui change la - date de modification du fichier qu'elle prend en paramètre), les commandes de - chacune de ces règles sont exécutées (voir le comportement de `make all` après - avoir tapé `touch original.txt`, ou après avoir ajouté du texte à - `original.txt`). - -
-Voir la solution - -```make -all: bonjour compte.txt clean bye - @echo --- Make all: exécuté --- -``` - -> On peut généraliser le `@echo --- Make exécuté ---` à toutes les -> règles, cela permet de mieux se rendre compte de ce que le `make` a effectué. - -
- ---- - -Pour ceux qui ne l'ont pas fait : modifier le fichier `original.txt`, et -relancer la règle `all`. - -[Précédent](./README.md) diff --git a/sed/README.md b/sed/README.md deleted file mode 100644 index 3f8acc4..0000000 --- a/sed/README.md +++ /dev/null @@ -1,160 +0,0 @@ -# sed - UNIX - -Sed (pour **S**tream **ED**itor) 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. -Comme avec toute commande unix, il est possible de rediriger la sortie vers un -fichier résultat. - -## Substitution - -La commande suivante lit un fichier `file.txt` et affiche ses lignes sur la -sortie standard en remplaçant la chaîne « `Dilib` » par la chaîne « `DILIB` ». - -```bash -sed 's/Dilib/DILIB/' file.txt -``` - -Il est conseillé d'entourer les commandes par des apostrophes simples, pour -éviter que le shell n'interprète les [caractères -spéciaux](../shell/parametres.md#caractères-spéciaux) (`.*[]^$\`). - -> ⚠ 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 : -> -> ```bash -> sed 's/Dilib/DILIB/g' file.txt -> ``` - -Si on veut faire deux remplacements sur la même ligne de commandes, on peut utiliser : - -```bash -sed -e 's/Dilib/DILIB/g' -e 's/Jacques Ducloy/Monsieur Dilib/g' file.txt -``` - -> ⚠ Le `-e` est obligatoire pour distinguer la deuxième commande d'un nom de -> fichier qui n'en est jamais précédé. -> -> 📗 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. - -### Rappel sur les expressions régulières - -| | | -| -------- | ------------------------------------------------------------------------------------------------------ | -| `^` | début de ligne | -| `$` | fin de ligne | -| `[]` | classe de caractères (exemples : `[A-Z]` correspond à toutes les lettres majuscules) | -| `[^...]` | classe de caractères correspondant à n'importe quels caractères sauf ceux qui suivent le caractère `^` | -| | Exemple : `[^:]` correspond à tous les caractères sauf le `:`. | -| `*` | le caractère précédant `*` répété de 0 à n fois | -| `+` | le caractère précédant `+` répété de 1 à n fois | -| `?` | le caractère précédant `?` présent de 0 à 1 fois | - -### Expressions 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). - -```bash -sed -e 's/Jacques D[uU][cC][lL][oO][yY]/Monsieur Dilib/g' fichier -``` - -> 📗 Le caractère `*` englobe autant de caractères qu'il peut, ce qui veut dire que -> -> ```bash -> sed 's/ré.*duction/réduction/g' fichier -> ``` -> -> transformera le fichier -> -> ```txt -> do ré mi fa sol la si duction ah bon duction la suite -> ``` -> -> en -> -> ```txt -> do réduction la suite -> ``` -> -> et non en -> -> ```txt -> 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. - -```bash -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` ». - -## Fichier de commandes - -Si vous avez beaucoup de commandes, vous pouvez les rassembler dans un fichier -comme celui-là : - -```bash -# 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` : - -```bash -sed -f exemple.sed fichier -``` - -Une autre solution consiste à en faire un script exécutable (à la manière d'un -script shell) : - -```bash -#!/usr/bin/sed -f -# Table de transcodage de ISO-8859-1 vers HTML -# Fichier "exemple2.sed" -s/É/É/g -s/À/À/g -s/Ç/Ç/g -``` - -Mais il ne faut pas oublier de lui donner les droits en exécution, pour pouvoir -l'appeler ainsi : - -```bash -chmod u+x exemple2.sed -./exemple2.sed fichier -``` - -> ⚠ Un fichier de commandes sed doit toujours se terminer par un passage à la -> ligne, sinon la dernière commande n'est pas prise en compte! - -> ⚠ De la même manière, toutes les lignes à traiter doivent finir par un retour -> à la ligne (en particulier la dernière)! - -## Référence - -- La commande **sed** -- **Regex 101**, pour fabriquer et comprendre vos - expressions régulières -- **Regulex**, pour visualiser la structure des - expressions régulières -- **RegexHQ** pour trouver facilement des expressions - régulières pour toutes sortes de cas d'usages - -[Précédent](../shell/tp.md) - [Suivant](./tp.md) diff --git a/sed/tp.md b/sed/tp.md deleted file mode 100644 index 06f72d5..0000000 --- a/sed/tp.md +++ /dev/null @@ -1,99 +0,0 @@ -# Travaux pratiques - Sed - UNIX - -## Utilisation simple - -Écrivez une commande `sed` transformant la chaîne « `moins` » en « `plus` ». -Appliquez-la à « `Vous aurez moins de budget` ». - -
-Voir la solution - -```bash -sed -e 's/moins/plus/g' -``` - -
- -## Utilisation d'un fichier de commandes - -Écrivez un commande `sed` transformant toutes les lettres minuscules en leur -suivante lexicographique (cas particulier : `z` se transforme en `!`). -Rappel : vous pouvez utiliser un fichier pour rassembler plusieurs commandes `sed`. - -
-Voir la solution - -```bash -sed -f decalage.sed -``` - -```bash -# fichier "decalage.sed" -s/z/!/g -s/y/z/g -s/x/y/g -s/w/x/g -s/v/w/g -s/u/v/g -s/t/u/g -s/s/t/g -s/r/s/g -s/q/r/g -s/p/q/g -s/o/p/g -s/n/o/g -s/m/n/g -s/l/m/g -s/k/l/g -s/j/k/g -s/i/j/g -s/h/i/g -s/g/h/g -s/f/g/g -s/e/f/g -s/d/e/g -s/c/d/g -s/b/c/g -s/a/b/g -``` - -> 📗 Cette solution peut sembler étrange, car les substitutions ne se font pas -> dans l'ordre alphabétique mais dans l'ordre alphabétique inverse. -> C'est nécessaire car sinon tous les `a` se transforment en `b`, puis tous les -> `b` (y compris ceux qui sont nouvellement transformés) en `c`, *etc*., pour -> finir par un texte intégralement composé de lettres `a`. - -
- -## Substitution en début de ligne - -Écrivez une commande `sed` qui affiche uniquement le début de chaque ligne du -fichier `/etc/passwd` jusqu'au premier caractère `:`. - -
-Voir la solution - -```bash -sed -e 's/^\([^:]*\).*$/\1/' /etc/passwd -``` - -> 📗 On aurait pu aussi utiliser la commande `cut`. - -
- -## Substitution dans toute la ligne - -Écrivez une commande `sed` qui remplace les couples de guillemets anglais par un -couple de guillemets français (`Ceci est un "exemple" qui doit "fonctionner".` -doit donner `Ceci est un <> qui doit <>.`). - -
-Voir la solution - -```bash -sed -e 's/"\([^"]*\)"/<<\1>>/g' -``` - -
- -[Précédent](./README.md) - [Suivant](../make/README.md) diff --git a/shell/README.md b/shell/README.md deleted file mode 100644 index be13227..0000000 --- a/shell/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Variables d'environnement - Shell - UNIX - -Le shell contient diverses variables d'environnement. -Si vous voulez les voir toutes, utilisez la commande `set` ou la commande `env` sans paramètre. - -Certaines de ces variables peuvent nous intéresser plus particulièrement (pour -visualiser leur contenu, utilisez la commande `echo`, par exemple `echo $HOME` -pour afficher le contenu de la variable `HOME`) : - -| nom | contenu | -| ----- | -------------------------------------------------------------------------------------------------------------------------- | -| HOME | chemin de votre *home directory* | -| PATH | liste des chemins parcourus par le shell pour trouver les commandes à exécuter (quand le chemin complet n'est pas précisé) | -| PS1 | "Prompt" utilisé dans le shell (on peut modifier sa valeur) | -| SHELL | indique le shell qu'on utilise | -| USER | votre nom d'utilisateur | - -Pour modifier la valeur d'une variable (ou en créer une), il suffit d'utiliser la syntaxe : - -```bash -VARIABLE=valeur -``` - -> ⚠ Il ne faut pas mettre d'espace autour du caractère `=` - -Par convention, les noms de variable sont en majuscules. -Pour accéder à la valeur d'une variable, on utilise : - -```bash -$VARIABLE -``` - -ou, pour éviter des ambiguités (si `a="var"`, `${a}b` renvoie `varb` alors que `$ab` est invalide) : - -```bash -${VARIABLE} -``` - -On peut créer des variables utilisateurs de la même manière. - -Une variable n'est disponible que dans le shell où on l'a initialisée. - -Faire précéder l'affectation d'une variable du mot-clé `export` autorise son -utilisation dans un shell différent. - -```bash -export VARIABLE=valeur -``` - -> Pour plus d'information sur les variables (en `bash`), voir [How To Use Bash -> Parameter Substitution Like A -> Pro](https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html) - -[Précédent](../commandes/tp.md) - [Suivant](./scripts.md) diff --git a/shell/commandes.md b/shell/commandes.md deleted file mode 100644 index 09adbec..0000000 --- a/shell/commandes.md +++ /dev/null @@ -1,37 +0,0 @@ -# Commandes diverses - Shell - UNIX - -## Commandes - -| | | -| ---------------- | ----------------------------------------------------------------------------------------------------- | -| `#` | commentaires (mais `#!/bin/sh` en début de fichier est le shebang) | -| `( commande )` | exécute la commande dans un sous-shell | -| `read a` | lecture d'une entrée pendant l'exécution d'un script | -| `exit num` | renvoie le statut du script au shell appelant | -| `. script` | inclusion et exécution du script dans le shell courant | -| `exec script` | exécute le script dans un nouveau shell | -| `cmd1 \|\| cmd2` | séparateur conditionnel (`cmd2` est exécutée même si `cmd1` ne s'est pas exécutée correctement) | -| `cmd1 && cmd2` | séparateur conditionnel (`cmd2` est exécutée seulement si `cmd1` s'est exécutée correctement) | -| `set` | liste de toutes les variables. | -| | Positionne les paramètres `$i` (`set a b c` positionne `$1` à `a`, `$2` à `b` et `$3` à `c`). | -| `unset var` | remise à zéro de la variable `var` | -| `type cmde` | indique la nature (et la localisaton) d'une commande | -| `alias al='cmd'` | crée une commande al équivalente à la commande `cmd` (qui peut être complexe) | -| `touch fichier` | change la date de dernière modification du fichier. Si le fichier n'existe pas, crée un fichier vide. | - -## expr - -`expr` exécute des opérations arithmétiques sur des entiers (l'opérateur peut -être `+`, `-`, `\*`, `/`, `%`, `=`, `\>`, `\<`, `\>=`, `\<=`, `!=`). - -L'expression est une commande, donc pour affecter une opération à une variable, il faut forcer son exécution avec des antiquotes (`AltGr`-`7`) : - -```bash -a=`expr $b + $c` -``` - -> Si vous utilisez `bash`, il existe une syntaxe plus facile: `$((..))` (voir -> [How to Increment and Decrement Variable in Bash -> (Counter)](https://linuxize.com/post/bash-increment-decrement-variable/)) - -[Précédent](./controle.md) - [Suivant](./tp.md) diff --git a/shell/conditions.md b/shell/conditions.md deleted file mode 100644 index 833f2e7..0000000 --- a/shell/conditions.md +++ /dev/null @@ -1,78 +0,0 @@ -# Conditions - Shell - UNIX - -Les commandes `if`, `while`, et `until` testent le statut de la commande qu'ils -ont en paramètre. - -## if - -### Syntaxe - -```bash -if commande -then - liste_commandes -[elif commande - then - liste_commandes] ... -[else liste_commandes] -fi -``` - -### Exemples - -```bash -if test -f $1 -then - cat $1 -else - echo "Le fichier \"$1\" n'existe pas" -fi -``` - -## test - -`test` est une commande qui renvoie une valeur vraie ou fausse (`0` pour vrai, -`1` pour fausse). -Elle a différentes options permettant de tester différentes conditions sur des -fichiers, des valeurs (chaînes de caractères), etc. - -Sa syntaxe est `test expr` ou `[ expr ]` (attention, il faut un espace après `[` et avant `]`). - -| expr | signification | -| ---------------- | -------------------------------------------------------------------------------- | -| `-r fichier` | vrai si le `fichier` existe et est accessible en lecture (r) | -| `-w fichier` | vrai si le `fichier` existe et est accessible en écriture (w) | -| `-x fichier` | vrai si le `fichier` existe et est exécutable (x) | -| `-f fichier` | vrai si le `fichier` existe et est un fichier "régulier" (file) | -| `-d fichier` | vrai si le `fichier` existe et est un répertoire (directory) | -| `-s fichier` | vrai si le `fichier` existe et a une taille non nulle (size) | -| `c1 = c2` | vrai si les deux expressions sont égales (des chaînes, en sh) | -| `c1 != c2` | vrai si les deux expressions sont différentes (des chaînes, en sh) | -| `c1` | vrai si `c1` n'est pas la chaîne nulle (vide) | -| `e1 -eq e2` | vrai si les deux entiers `e1` et `e2` sont algébriquement égaux (equal) | -| `e1 -ne e2` | vrai si les deux entiers `e1` et `e2` sont algébriquement différents (not equal) | -| `e1 -gt e2` | vrai si l'entier `e1` est plus grand que l'entier `e2` (greater than) | -| `e1 -lt e2` | vrai si l'entier `e1` est plus petit que `e2` (lower than) | -| `! expr` | négation de l'expression booléenne `expr` | -| `expr1 -a expr2` | et logique entre les deux expressions booléennes `expr1` et `expr2` (and) | -| `expr1 -o expr2` | ou logique entre les deux expressions booléennes `expr1` et `expr2` (or) | - -### Exemples - -Quand `script.sh` est un fichier qui existe dans le répertoire courant. - -```bash -$ test -f script.sh -$ echo $? -0 -``` - -Quand `inexistant.sh` est un fichier qui n'est pas dans le répertoire courant. - -```bash -$ test -f inexistant.sh -$ echo $? -1 -``` - -[Précédent](./parametres.md) - [Suivant](./controle.md) diff --git a/shell/controle.md b/shell/controle.md deleted file mode 100644 index c268c26..0000000 --- a/shell/controle.md +++ /dev/null @@ -1,99 +0,0 @@ -# Structures de contrôle - Shell - UNIX - -## for - -### Syntaxe - -```bash -for var [in liste] -do - liste_commandes -done -``` - -La variable `var` prend successivement les valeurs de la liste. -Si la liste est omise, `var` prend alors les valeurs passées en paramètres du script ([`$*`](./parametres.md#variables-spéciales)). - -### Exemples - -```bash -for i -do - echo $i -done -``` - -```bash -for i in `ls` -do - cp $i /dir/$i - echo "$i copié" -done -``` - -Il ne faut pas oublier les apostrophes inversées (ou quotes inverses) `` ` `` -qui forcent l'exécution du `ls`. - -## while - -### Syntaxe - -```bash -while commande -do - liste_commandes -done -``` - -### Exemple - -```bash -while read a -do - echo $a >> resultat.txt - echo Appuyez sur Ctrl-D pour arrêter. -done -``` - -## until - -### Syntaxe - -```bash -until commande -do - liste_commandes -done -``` - -### Exemple - -```bash -until ! read a -do - echo $a >> resultat.txt - echo Appuyez sur Ctrl-D pour arrêter. -done -``` - -## case - -### Syntaxe - -```bash -case para in - choix1[|choix2] ... ) liste_commandes ;; -esac -``` - -### Exemple - -```bash -case $1 in - bonjour ) echo "Bonjour aussi." ;; - A+ | a+ ) echo "À bientôt." ;; - * ) echo "Je n'ai pas bien compris le paramètre \"$1\".";; -esac -``` - -[Précédent](./conditions.md) - [Suivant](./commandes.md) diff --git a/shell/parametres.md b/shell/parametres.md deleted file mode 100644 index 494fa3b..0000000 --- a/shell/parametres.md +++ /dev/null @@ -1,41 +0,0 @@ -# Paramètres - Shell - UNIX - -## Récupération des paramètres de la ligne de commande - -| | | -| ---- | ------------------------------------ | -| `$0` | nom de la commande | -| `$n` | valeur du nième paramètre | -| `$#` | nombre de paramètres | -| `$*` | liste de tous les paramètres | - -Pour la ligne de commande `sh test.sh a b c`, `$0` vaut `test.sh`, `$#` vaut -`3`, `$*` vaut `a b c`, et `$2` vaut `b` (à l'intérieur du script). - -La commande `shift` décale les paramètres (en perdant le premier) : le deuxième -paramètre devient le premier, le troisième devient le deuxième, etc. (c'est -utile quand on utilise une boucle pour traiter les paramètres). - -## Variables spéciales - -| | | -| ---- | ------------------------------------------------------------ | -| `$$` | numéro de processus de la dernière commande | -| `$?` | statut de la dernière commande (`0` = tout s'est bien passé) | - -## Caractères spéciaux - -Comme à chaque fois qu'on a un caractère spécial (par exemple `$`), on a des -caractères d'échappement. - -| | | | | -| ------------- | ------------------------------------------------ | ---------------- | ------------------------------ | -| `\` | banalise le caractère suivant | `echo \$0 $0` | `$0 /usr/bin/ksh` | -| `" ... "` | banalise les caractères sauf `\`, `$` et `` ` `` | `echo "\$0 $0"` | `$0 /usr/bin/ksh` | -| `' ... '` | banalise tous les caractères | `echo '\$0 $0'` | `\$0 $0` | -| `` ` ... ` `` | substitution de commande | ``echo `date` `` | `Mon May 5 16:54:14 MEST 2003` | - -> 💡 En 2023, il est conseillé d'utiliser `$(commande)` pour la substitution de commande. -> L'exemple devient ainsi `echo $(date)`. - -[Précédent](./scripts.md) - [Suivant](conditions.md) diff --git a/shell/scripts.md b/shell/scripts.md deleted file mode 100644 index ba657e9..0000000 --- a/shell/scripts.md +++ /dev/null @@ -1,38 +0,0 @@ -# Scripts - Shell -UNIX - -Un fichier script contenant des commandes shell (par exemple des initialisations -de variables, une automatisation de tâches,...) peut être exécuté : - -- soit par `sh nom_fichier_shell`, -- soit par `. nom_fichier_shell` (la différence avec la manière précédente est - que c'est comme si on tapait le contenu du fichier dans le shell courant, et - non comme si on lançait un autre shell, c'est important par exemple pour les - définitions de variables), -- soit en rendant le fichier exécutable (`chmod u+x nom_fichier_shell`), puis en - tapant le nom du fichier. - Cela fonctionne uniquement quand le répertoire courant, `.`, est dans `$PATH`, - sinon il faut dire au shell que c'est le fichier qui est dans le répertoire - courant qu'on veut exécuter : `./nom_fichier_shell`. - -Pour être sûr du shell qui est en train de s'exécuter dans un fichier de script shell, il est plus prudent d'ajouter son nom en début de fichier la ligne (par exemple, ici sh) : - -```bash -#!/bin/sh -``` - -Cette ligne a la forme d'un commentaire (elle commence par `#`), on l'appelle un -*shebang*, et signale au shell appelant qu'il faut utiliser le shell `/bin/sh` -pour exécuter le fichier. -Ce *shebang*, qui est un en-tête, doit se mettre sur la première ligne. - -Une seconde ligne peut être intéressante car elle peut influer sur l'ordre de -tri avec `sort` par exemple. -Pour garantir un ordre de tri lexicographique, on peut positionner la variable -d'environnement suivante comme suit `export LC_COLLATE=C`. - -## Référence - -- [Programmation shell sous Unix/Linux - ksh, bash, sh (5e édition) | Editions - ENI](https://www.editions-eni.fr/open/mediabook.aspx?idR=71ff518ce4cda68b5004c431607616de) - -[Précédent](./README.md) - [Suivant](./parametres.md) diff --git a/shell/tp.md b/shell/tp.md deleted file mode 100644 index 9cffedf..0000000 --- a/shell/tp.md +++ /dev/null @@ -1,187 +0,0 @@ -# Travaux pratiques - Shell - UNIX - -> ⚠ Tous les shells qui seront créés par la suite devront avoir le droit -> d'exécution correctement positionné, au moins pour leur propriétaire. - -## Recherche d'information sur un utilisateur - -1. Écrivez un script shell `infouser.sh` qui permette de chercher si un - utilisateur d'un nom donné existe sur votre machine, en affichant sa - référence complète (c'est-à-dire sans aucun filtrage). - Le nom recherché sera passé comme paramètre au shell. - La recherche portera dans le fichier `/etc/passwd`. - -
- Voir la solution - - > ⚠ Comme d'habitude quand on veut traiter un fichier, il vaut mieux - > visionner son contenu, avant de vouloir l'exploiter (`more /etc/passwd`). - - ```bash - #!/bin/sh - grep $1 /etc/passwd - ``` - - - -2. Modifiez ce shell pour qu'il teste si un paramètre est bien passé en ligne. - En cas d'erreur (aucun paramètre ou plus d'un), un message sera affiché - expliquant la bonne syntaxe à suivre. - -
- Voir la solution - - ```bash - #!/bin/sh - - if test $# -ne 1 - then - echo Mauvais nombre de parametres. - echo - echo Usage: $0 uid - exit 1 - fi - - grep $1 /etc/passwd - ``` - -
- -## Quelques manipulations sur un corpus XML - -Pour cette partie du TP, il vous faut d'abord récupérer le corpus suivant : -[`francis.exodic.xml`](../UnixShell_cours2018/francis.exodic.xml) - -Ce fichier contient 20 notices en XML Exodic, dans une forme indentée, son -exploration préparatoire est conseillée. - -1. Écrivez un script shell qui compte le nombre de notices, en passant le nom de - fichier en paramètre. - L'élément racine se nomme `exodic`. - -
- Voir la solution - - ```bash - #!/bin/sh - - if test $# -ne 1 - then - echo Mauvais nombre de parametres. - echo - echo Usage: $0 fichier - exit 1 - fi - - NB_NOTICES=`cat $1 | grep " - -2. Modifiez le shell précédent pour qu'il teste en plus l'existence du fichier - demandé avant traitement, puis pour qu'il sorte les résultats dans un fichier - nommé `resultats.txt`. - -
- Voir la solution - - ```bash - #!/bin/sh - - if test $# -ne 1 - then - echo Mauvais nombre de parametres. - echo - echo Usage: $0 fichier - exit 1 - fi - - if test ! -f $1 - then - echo $1 "n'existe pas (ou n'est pas un fichier)." - exit 2 - fi - - NB_NOTICES=`cat $1 | grep " resultats.txt - ``` - - > ⚠ Cette fois, on a mis la chaîne contenant les apostrophes (caractère - > spécial) entre guillemets pour les banaliser. - -
- -3. Installer et parcourir des fichiers dublin core d'un arbre de répertoires - pour afficher le type de document des notices qui y sont présentes. - Il faut d'abord récupérer le fichier - [`data_dc.tar.gz`](../UnixShell_cours2018/data_dc.tar.gz). - - Votre shell devra décompresser puis installer l'archive du fichier tar sous - `Formation/TP_dc`. - Cela donnera un répertoire `dc` contenant 5 répertoires nommés de 1 à 5. - Ces sous-répertoires contiennent chacun un fichier `dublin_core.xml` avec - une seule notice (qu'il est conseillé d'aller regarder). - - Ces opérations réalisées, la suite du shell devra chercher le type de - document de chaque notice, identifiable avec `dcvalue element="type"`. - Cette information trouvée, les résultats seront écrits dans le fichier - `typesDC.txt`. - -
- Voir la solution - - ```bash - #!/bin/sh - - # En etant dans le repertoire Formation/TP_dc - gunzip data_dc.tar.gz - tar -xvf data_dc.tar - - for FILE in dc/*/*.xml - do - cat $FILE | grep 'dcvalue element="type"' >> typesDC.txt - done - ``` - - > ⚠ Cette fois, on a mis la chaîne contenant les guillemets (caractère spécial) - > entre apostrophes pour les banaliser. - - > ⚠ On utilise une double redirection en sortie `>>` car il faut concaténer les - > différentes opérations d'écriture dans le fichier résultat. -
- -4. Écrivez un script shell qui utilise un fichier de clés de sélection avec - `grep` sur un fichier de DOI, pour récupérer chaque sélection dans un fichier - résultat différent. - Les noms de ces fichiers résultats contiendront la valeur de la clé de sélection. - Le fichier de clés est [`listeCles.txt`](../UnixShell_cours2018/listeCles.txt). - Le fichier à filtrer est [`listeDOI.txt.gz`](../UnixShell_cours2018/listeDOI.txt.gz). - -
- Voir la solution - - ```bash - #!/bin/sh - - export LC_COLLATE=C - REP=. - - while read KEY - do - NAME=selection_$KEY - zcat listeDOI.txt.gz | grep "$KEY" > ${REP}/$NAME.txt - done < $REP/listeCles.txt - ``` - -
- - > ⚠ Il est important de noter que, surtout pour le fichier des critères de - > sélection, le traitement se déroule sous Unix/Linux. Par conséquent, il faut - > prendre garde aux fins de ligne qui doivent être de type Unix (`\n`). - > La présence de fins de ligne de type Windows (`\r\n`) perturbe les opérations - > de sélection comme avec `grep` (matching incorrect). - -[Précédent](./commandes.md) - [Suivant](../sed/README.md) diff --git a/src/SUMMARY.md b/src/SUMMARY.md new file mode 100644 index 0000000..866793f --- /dev/null +++ b/src/SUMMARY.md @@ -0,0 +1,25 @@ +# Sommaire + +- [Introduction](./index.md) +- [UNIX](./unix/README.md) + - [Historique](./unix/historique.md) + - [Linux](./unix/linux.md) +- [Bases](./bases/README.md) + - [Commandes](./bases/commandes-basiques.md) + - [TP](./bases/tp.md) +- [Commandes](./commandes/README.md) + - [Droits](./commandes/droits.md) + - [Compression](./commandes/compression.md) + - [Processus](./commandes/processus.md) + - [TP](./commandes/tp.md) +- [shell](./shell/README.md) + - [Scripts](./shell/scripts.md) + - [Paramètres](./shell/parametres.md) + - [Conditions](./shell/conditions.md) + - [Contrôles](./shell/controle.md) + - [Commandes](./shell/commandes.md) + - [TP](./shell/tp.md) +- [sed](./sed/README.md) + - [TP](./sed/tp.md) +- [make](./make/README.md) + - [TP](./make/tp.md) diff --git a/src/bases/README.md b/src/bases/README.md new file mode 100644 index 0000000..a5ea089 --- /dev/null +++ b/src/bases/README.md @@ -0,0 +1,157 @@ +# Redirections et Pipes + +## Redirections + +### Accès en lecture par redirection de l'entrée + +![entrée et sortie standard d'une commande Unix](image manquante) + +### Entrées sorties standard + +Toute commande Unix peut utiliser : + +- l'entrée standard (stdin) +- la sortie standard (stdout) + +Valeurs implicites (pour un poste de travail) : + +- stdin : le clavier +- stdout : l'écran + +### Redirection de l'entrée standard vers un fichier + +![redirection de l'entrée standard d'une commande unix](image manquante) + +Soit : + +- `aUnixCommand` = un programme Unix de type filtre +- `myFile` = un fichier + +La commande shell suivante : `aUnixCommand < myFile` + +appliquera le programme `aUnixCommand` au fichier `myFile` et affichera le +résultat sur l'écran. + +## Redirections et quelques commandes Unix + +### cat + +Utilisée sans paramètres, recopie le fichier en entrée sur la sortie standard : + +```bash +cat < Formation/TP1/exo.txt +``` + +recopie sur l'écran le fichier `Formation/TP1/exo.txt`. + +### cat - avec paramètres + +La commande `cat` peut s'utiliser avec une liste de fichiers en paramètres. +Ainsi : + +```bash +cat Formation/TP1/exo1.txt Formation/TP1/exo2.txt +``` + +"concatène" les fichiers sur stdout. + +> 📗 À NOTER : avec un seul fichier les commandes : +> +> ```bash +> cat Formation/TP1/exo.txt +> ``` +> +> et +> +> ```bash +> cat < Formation/TP1/exo.txt +> ``` +> +> peuvent être considérées comme équivalentes. + +### sort + +Trie les lignes d'un fichier dans l'ordre lexicographique ASCII. + +Exemple : + +```bash +sort < Formation/TP1/table.txt +``` + +### grep + +Sélectionne les lignes qui contiennent une expression donnée en paramètre. +Syntaxe simplifiée : + +```bash +grep expression < file +``` + +Exemple : + +```bash +grep 152X < Formation/TP1/issn.txt +``` + +### head + +Syntaxe simplifiée : + +```bash +head [ -number ] < file +``` + +- sans paramètre, sélectionne les 10 premières lignes +- avec paramètre, sélectionne le nombre de lignes désignées par le paramètre + +Exemple : + +```bash +head -5 < Formation/TP1/file.xml +``` + +## Redirection de la sortie standard vers un fichier + +La sortie standard peut à son tour être redirigée vers un fichier. +2 possibilités : + +```bash +commande > fichier +``` + +le résultat de la commande va servir à créer ou à remplacer (par écrasement) le +contenu du fichier donné. + +```bash +commande >> fichier +``` + +le résultat de la commande va servir à créer (la première fois) ou à rallonger +le contenu du fichier donné (concaténation). + +## Combinaison simple des redirections + +Entrée et sortie standard peuvent être rédirigées simultanément. +Ainsi : + +```bash +cat < fA > fB +``` + +copie le contenu du fichier `fA` pour créer le fichier `fB`. + +## Combinaison de fitres en cascade - le pipe + +(image manquante)pipe de deux commandes unix + +Le mécanisme appelé _pipe_ permet d'enchaîner des commandes en affectant la +sortie de l'une à l'entrée de la suivante. Sa forme générale est : + +```bash +c0 < fA | c1 | c2 | ... | cn > fB +``` + +Le fichier `fA` est lu et traité par la commande `c0`, le résultat est alors +traité par `c1`, et ainsi de suite jusqu'à la commande `cn` pour laquelle le +résultat est écrit dans le fichier `fB`. diff --git a/src/bases/commandes-basiques.md b/src/bases/commandes-basiques.md new file mode 100644 index 0000000..c0bd6c5 --- /dev/null +++ b/src/bases/commandes-basiques.md @@ -0,0 +1,26 @@ +# Commandes de base UNIX + +| nom | syntaxe | définition | exemple | +| :------ | :------------------------------- | :--------------------------------------------------------------------------------------------- | :-------------------------------------------- | +| cat | `cat [file]` | Lecture du contenu de fichiers | `cat file.txt` | +| cat | `cat [file]...` `cat < ... >...` | Concaténation de fichiers | `cat file1.txt file2.txt > file3.txt` | +| cd | `cd [newWD]` | Changement de _working directory_. **À utiliser avec modération, penser aux chemins relatifs** | `cd Formation/TP1`, `cd`, `cd -` | +| cp | `cp inputFile targetFile` | Copie d'un fichier | `cp exo.sh exo1.sh` | +| date | `date` | Affichage date et heure système | `date` | +| grep | `grep expr <...` | Sélection des lignes contenant l'expression indiquée | `grep "" < file.xml` | +| head | `head [-n]` | Sélection du début d'un fichier (en nombre de lignes) | `head -1 < table.txt` | +| history | `history [-n]` | Historique des commandes | `history -50` | +| ls | `ls directory` | Listing du contenu d'un répertoire | `ls Formation`, `ls Formation/TP1` | +| mkdir | `mkdir dirName` | Création un répertoire (directory) | `mkdir Formation/TP2` | +| more | `more fileName` | Lecture à l'écran de fichiers texte (surtout longs) | `more table.txt` | +| mv | `mv inputFile targetFile` | Déplacement (ou renommage) d'un fichier | `mv table.tmp table.txt` | +| pwd | `pwd` | Affichage du working directory | `pwd` | +| rm | `rm path` | Effacement d'un fichier | `rm file.txt`, `rm Formation/TP1/table.tmp` | +| \rm | `\rm path` | Effacement d'un fichier (en ignorant la confirmation avant chaque destruction) | `\rm file.txt` | +| rm | `rm -r path` | Effacement récursif d'un répertoire | `rm -r TP2/*.tmp` | +| rmdir | `rmdir path` | Effacement d'un répertoire (il doit être vide) | `rmdir TP3` | +| sort | `sort < ... >...` | Tri du flot d'entrée | `cat file1.txt file2.txt \| sort > file3.txt` | +| tail | `tail [-n]` | Sélection de la fin d'un fichier (en nombre de lignes) | `tail -1 < table.txt` | +| type | `type command` | Donne le type de la commande (alias, exécutable, etc.) et précise sa nature. | `type ll` | +| wc | `wc [fileName]` | Affichage de la taille d'un fichier (nombre de caractères, de mots, de lignes) | `wc -l < file.xml` | +| which | `which command` | Renvoie le chemin de la commande qui est exécutée quand on tape son nom dans le shell | `which ls` | diff --git a/src/bases/tp.md b/src/bases/tp.md new file mode 100644 index 0000000..19da24e --- /dev/null +++ b/src/bases/tp.md @@ -0,0 +1,107 @@ +# Travaux pratiques (commandes de base) + +L'objectif de cette première session de TP est de préparer votre environnement +de travail en même temps que de réviser rapidement quelques notions de base. + +## Préparation de votre environnement de travail + +- Créez les répertoires `Formation` et `Formation/UnixShell` sous votre *home + directory* (avec contrôle du contenu des répertoires à chaque étape avec `ls` ou + `ll` qui est un alias). +
+ Voir la solution + + ```bash + $ mkdir Formation + $ ls + ... Formation ... + $ mkdir Formation/UnixShell + $ ls Formation + ... UnixShell ... + ``` + +
+- Déplacez-vous dans le répertoire UnixShell en une étape et vérifiez le répertoire courant. +
+ Voir la solution + + ```bash + $ cd Formation/UnixShell + $ pwd + / ... /Formation/UnixShell + ``` + +
+ +## Utilisation de quelques commandes Unix de base + +- Visualisez l'historique de votre session, avec affichage en sortie standard. +
+ Voir la solution + + ```bash + $ history + ... + 1 mkdir Formation + 2 ls + 3 mkdir Formation/UnixShell + ... + ``` + +
+- Récupérez votre historique dans un fichier `historique.txt`. +
+ Voir la solution + + ```bash + history > historique.txt + ``` + +
+- Affichez à l'écran le contenu de ce fichier `historique.txt`. +
+ Voir la solution + + ```bash + more historique.txt + ``` + +
+- Comptez le nombre de lignes de ce fichier. +
+ Voir la solution + + ```bash + $ wc -l historique.txt + 16 historique.txt (par exemple) + ``` + +
+- Affichez les 3 premières lignes du fichier historique de deux façons : + - avec une redirection en entrée de la commande appropriée +
+ Voir la solution + + ```bash + head -3 < historique.txt + ``` + +
+ - avec un pipe pour enchaîner les deux commandes appropriées +
+ Voir la solution + + ```bash + cat historique.txt | head -3 + ``` + +
+- Renommez le fichier historique.txt en monHistorique.txt +
+ Voir la solution + + ```bash + mv historique.txt monHistorique.txt + ``` + +
diff --git a/src/chapter_1.md b/src/chapter_1.md new file mode 100644 index 0000000..b743fda --- /dev/null +++ b/src/chapter_1.md @@ -0,0 +1 @@ +# Chapter 1 diff --git a/src/commandes/README.md b/src/commandes/README.md new file mode 100644 index 0000000..2f24abe --- /dev/null +++ b/src/commandes/README.md @@ -0,0 +1,158 @@ +# Autres commandes UNIX + +## Manuels en ligne + +### man + +Cette commande permet d'obtenir le manuel unix en ligne de toute commande unix : + +```bash +man [unixCommand] +``` + +Par exemple, on obtient l'aide en ligne (en anglais) sur la commande `ls` avec : + +```bash +man ls +``` + +L'aide qui s'affiche se décompose en plusieurs parties, généralement (mais pas exclusivement) : + +- NAME : Rappel du nom de la commande et son libellé en clair +- SYNOPSIS : Modèle générique de l'emploi de la commande +- DESCRIPTION : Explication du fonctionnement de la commande +- OPTIONS : Descriptions des différentes options supportées par la commande +- USAGE : Particularités (par exemple, comportement vis-à-vis de gros fichiers) +- EXAMPLES : Quelques exemples d'emploi, commentés +- ENVIRONMENT VARIABLES : Listing des variables d'environnement unix ayant une action sur la commande et devant éventuellement être convenablement positionnées avant emploi de la commande (les variables d'environnement seront traitées dans la partie suivante sur les shells) +- SEE ALSO : Renvois vers d'autres commandes unix ayant à voir avec la commande documentée +- NOTES : Commentaires complémentaires + +**N'oubliez jamais de consulter le man quand vous voulez en connaître plus sur une +commande, une fonction C, ou n'importe quoi d'autre** (essayez man colors (obsolète)). + +> 💡 Les _mans_ ont évolué jusqu'à ne presque plus contenir d'exemples, les +> rendant beaucoup plus hermétiques. +> Utilisez [tldr](https://tldr.sh/) pour avoir les exemples principaux pour une +> commande: + +## Commandes sur les fichiers + +### find + +Cette commande permet de rechercher un fichier ou un groupe de fichiers dans une +arborescence unix. La recherche peut porter sur le nom du fichier, son +propriétaire ou un groupe d'utilisateurs (ou bien d'autres critères, voir le +man). + +Pour retrouver un fichier par son nom ou par un masque (pattern) de celui-ci à +partir du répertoire courant : + +```bash +find . -name table* +``` + +Pour retrouver un (des) fichier(s) appartenant à un utilisateur particulier ou à +un groupe particulier : + +```bash +find . -user parmentf +find . -group dilib +``` + +Pour afficher la hiérarchie du répertoire courant : + +```bash +find . +``` + +### diff + +Cette commande permet de comparer deux fichiers `File1` et `File2` et d'afficher leurs différences éventuelles, ligne à ligne. + +```bash +diff File1 File2 +``` + +La commande `diff` signale les différences qu'elle trouve à l'aide des codes suivants : + +- `a` : ligne en ajout dans `File2` par rapport à `File1` +- `d` : ligne en suppression dans `File2` par rapport à `File1` +- `c` : lignes changées entre `File2` et `File1` +- `<` : différence constatée dans `File1` +- `>` : différence constatée dans `File2` + +À titre d'illustration, soient les fichiers `File1`, `File2` et `File3` suivants : + +| File1 | File2 | File3 | +| :---: | :---: | :---: | +| a | a | a | +| b | b | 1 | +| c | c | b | +| | d | e | + +Les commandes `diff` qui suivent donneront pour rapports : + +```bash +$ diff File1 File2 +3a4 +> d +$ diff File2 File1 +4d3 +< d +$ diff File1 File3 +1a2 +> 1 +3c4 +< c +--- +> e +``` + +| Ligne | File1 | File2 | File3 | +| :---: | :---: | :---: | :---: | +| 1 | a | a | a | +| 2 | b | b | 1 | +| 3 | c | c | b | +| 4 | | d | e | + +L'option `-c` de la commande `diff` permet d'avoir un rapport plus lisible, +notamment dans le cas de comparaison de gros fichiers. + +## Commandes sur les contenus + +### cut + +Cette commande permet de récupérer une ou plusieurs parties d'une chaîne de +caractères, par exemple en précisant le délimiteur séparant les parties à +extraire. + +Pour récupérer le numéro de département d'un code postal : + +```bash +$ echo 54500 | cut -c1-2 +54 +``` + +Pour récupérer une partie d'une ligne avec un délimiteur, avec une variable +`ligne="auteur,titre,descripteurs,id"` : + +```bash +$ echo $ligne | cut -d, -f2,4 +titre,id +``` + +À noter que si le délimiteur est un caractère spécial du shell, par exemple le pipe `|` ou le point-virgule, il faut le protéger entre guillemets. + +```bash +$ echo $ligne | cut -d"|" -f2 +titre +``` + +### 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. +Comme avec toute commande unix, il est possible de rediriger la sortie vers un fichier résultat. + +Voir [Sed](../sed/). diff --git a/src/commandes/compression.md b/src/commandes/compression.md new file mode 100644 index 0000000..232fc44 --- /dev/null +++ b/src/commandes/compression.md @@ -0,0 +1,91 @@ +# Archives, compression, décompression + +## tar + +Cette commande permet de créer un fichier archive (appelé *tarfile*) qui peut +contenir des fichiers et répertoires. +Ce fichier *tarfile* n'est pas compressé. +Cette commande peut être utile pour archiver un répertoire et tout ce qu'il +contient en un seul fichier. + +```bash +tar -cvf Archives.tar Sauvegarde +``` + +La commande ci-dessus, avec les paramètres `-cvf`, permet de créer une archive +du répertoire `Sauvegarde` dans le fichier nommé `Archives.tar`. +Attention à l'ordre des deux derniers paramètres. + +```bash +tar -xvf Archives.tar +``` + +La même commande `tar` avec les paramètres `-xvf`, permet de désarchiver le +contenu du *tarfile*. +Attention au positionnement du désarchivage : il s'opère dans le répertoire +courant. + +Pour connaître le détail du contenu d'un *tarfile*, il faut utiliser les +paramètres `-tvf`. + +## gzip + +Cette commande permet de compresser un fichier afin d'en réduire la taille, pour +stockage ou échange. +Le fichier résultat est renommé par ajout de l'extension `.gz` : + +```bash +gzip corpus.xml +``` + +Par listing du contenu du répertoire où la compression a été réalisée, on peut voir que le fichier `corpus.xml` a disparu et a été remplacé par `corpus.xml.gz`. + +Il est possible d'obtenir la taille d'un fichier non compressé à partir de son fichier compressé en gzip. + +```bash +gzip -l corpus.xml.gz +``` + +Quatre informations sont alors affichées à l'écran : + +1. la taille en octets du fichier compressé +2. la taille en octets du fichier non compressé +3. le ratio de compression +4. le nom du fichier initial, non compressé + +```txt +compressed uncompr. ratio uncompressed_name +77366 370713 79.1% corpus.xml +``` + +## gunzip + +Cette commande permet de décompresser un fichier compressé en `.gz`. +Sans paramètres, le fichier est décompressé sur disque et renommé sans +l'extension `.gz`. +Attention, la place en octets prise correspond bien au fichier décompressé. +Cette commande est équivalente à `gzip -d`. + +```bash +gunzip corpus.xml.gz +``` + +La commande ci-dessus restaure le fichier `corpus.xml`, qui remplace dans le +répertoire courant l'ancien fichier `corpus.xml.gz` de plus petite taille. + +S'il faut travailler avec un fichier compressé sans le décompresser sur disque, +il faut alors qu'il soit seulement décompressé vers la sortie standard. +Ensuite, il suffira d'enchaîner les commandes requises avec des pipes. +Par exemple : + +```bash +gunzip -c corpus.xml.gz | wc -l +``` + +## zcat + +Cette commande est équivalente à `gunzip -c`. + +```bash +zcat corpus.xml.gz | wc -l +``` diff --git a/src/commandes/droits.md b/src/commandes/droits.md new file mode 100644 index 0000000..7baf88f --- /dev/null +++ b/src/commandes/droits.md @@ -0,0 +1,152 @@ +# Gestion des droits + +## ll (alias de ls -alF) + +Cette commande permet d'obtenir la description complète d'un répertoire, y +compris les fichiers et répertoires cachés (qui commencent par un point) : + +```bash +ll +``` + +L'affichage résultant se lit ligne par ligne, par exemple : + +```bash +drwxrwxr-x 3 houdry dps 1024 Apr 28 15:28 ./ +drwxr-xr-x 16 houdry dps 512 Apr 18 16:19 ../ +-rw-rw-r-- 1 parmentf dilib 2848 Apr 25 11:08 Make.gif +-rw-rw-r-- 1 parmentf dilib 2631 Apr 25 11:08 Shell.gif +-rw-rw-r-- 1 houdry dps 7817 Apr 25 11:44 redirPipes.html +-rw-rw-r-- 1 parmentf dilib 2405 Apr 24 17:36 make.html +-rwxrwxr-- 1 houdry dps 235 Apr 24 17:01 exotp.sh* +``` + +De nombreux éléments d'information sont visibles avec une commande de listing +long. Ils sont au nombre de sept, avec dans l'ordre des colonnes : + +- la liste des droits sur 10 positions (ex.: drwxrwxrwx) + - position 1 : le type d'entrée, fichier ou répertoire + - positions 2-4 : les droits de l'utilisateur (user) + - positions 5-7 : les droits du groupe de l'utilisateur + - positions 8-10: les droits des autres groupes + + | | | + | --- | :------------------------------------------- | + | d | entrée répertoire | + | - | entrée fichier | + | r | lecture autorisée | + | w | écriture autorisée (et écrasement) | + | x | fichier exécutable ou répertoire parcourable | + +- la taille en blocs de l'entrée (peu utile pour nous) +- le nom du propriétaire (user unix) +- le groupe du propriétaire attaché à l'entrée +- la taille de l'entrée en octets +- les date et heure de la création ou de la dernière mise à jour +- le nom du répertoire ou du fichier + +> 💡 l'option `-h` vous donnera la taille de l'entrée dans un format plus... +> humain. + +## who, whoami, id + +Un utilisateur unix est identifié par deux choses : + +1. son code utilisateur (ex.: parmentf ou houdry) +2. son ou ses groupes (ex.: dps) + +Différentes commandes permettent de retrouver ces informations. + +Identification de l'utilisateur courant : + +```bash +whoami +``` + +Identification des utilisateurs du système : + +```bash +who +``` + +Affichage des code et groupe de l'utilisateur : + +```bash +id +``` + +## umask + +Cette commande permet de paramétrer les droits rwx qui vont servir pour la +création des nouveaux fichiers. Deux syntaxes sont possibles, celles qui suivent +sont équivalentes et standard : + +```bash +umask a=rx,ug+w +umask 002 +``` + +Les droits des 3 entités propriétaire (`u`), groupe du propriétaire (`g`) et autres groupes (`o`) doivent être précisés : + +- `a=rx` pour mettre les droits `r` et `x` seulement pour tous les groupes (`a`=`ugo`, all) +- `ug+w` pour ajouter le droit `w` aux groupes `u` et `g` seulement +- `002` est un masque en octal +- `002` est la négation de l'équivalent à `a=rx,ug+w` (=`775`) - voir tableau qui suit + +## chmod + +Cette commande permet de modifier les droits d'un fichier ou d'un répertoire. +Pour pouvoir le faire, il faut en être propriétaire. +Là aussi, il y a deux façons d'utiliser cette commande : avec les groupes `ugoa` +et les droits `rwx` ou bien avec un profil octal (directement, sans prendre sa +négation comme avec `umask`). +Le tableau suivant résume les cas possibles : + +| lettres | binaire | octal | +| :-----: | :-----: | :---: | +| `---` | 000 | 0 | +| `--x` | 001 | 1 | +| `-w-` | 010 | 2 | +| `-wx` | 011 | 3 | +| `r--` | 100 | 4 | +| `r-x` | 101 | 5 | +| `rw-` | 110 | 6 | +| `rwx` | 111 | 7 | + +Par exemple, pour positionner les droits d'un fichier `File` à `rwxr-xr--` : + +```bash +chmod 754 [File] +chmod u=rwx,g=rx,o=r [File] +``` + +Pour modifier des droits positionnés à `r--r----x` en `rwxrw-r--`, on peut aussi écrire : + +```bash +chmod ug+w,u+x,a+r,o-x [File] +``` + +## chgrp + +Cette commande permet de changer le groupe attaché à un fichier ou à un répertoire. +Par exemple, un fichier `File` est lié au groupe `dps` et il faut le changer +pour le lier au groupe `dilib` (attention, il faut que le *user* appartienne aux +deux groupes) : + +```bash +chgrp veille [File] +``` + +## newgrp + +Cette commande permet de changer le groupe d'appartenance de l'utilisateur. +Cela peut être nécessaire pour accéder à des fichiers dont l'emploi est limité à +certains groupes (par ex., `dilib` par rapport à `dps`). +Pour changer de groupe, il faut appartenir aux deux (l'ancien et le nouveau). + +À partir du moment où cette commande est lancée, les fichiers et répertoires +créés le seront sous ce nouveau groupe. + +```bash +newgrp veille +``` diff --git a/src/commandes/processus.md b/src/commandes/processus.md new file mode 100644 index 0000000..b898f17 --- /dev/null +++ b/src/commandes/processus.md @@ -0,0 +1,65 @@ +# Gestion des processus + +## ps + +Cette commande permet de voir quels sont les processus actifs pour un terminal donné. +Les processus qui sont vus ici sont par exemple le shell actif ou tout programme +en train de s'exécuter. + +```bash +ps +``` + +L'appel de cette commande affiche la liste des processus actifs avec, en particulier, leurs numéros (dits PID). + +```txt + PID TTY TIME CMD + 8073 pts/29 0:01 ksh + 12395 pts/29 0:25 xemacs +``` + +## kill + +Cette commande permet, en particulier, de détruire un processus qui ne s'est pas +normalement terminé avec l'achèvement d'un traitement et qui continue d'être +visible par un `ps` ou un `top`. +Pour faire cela, il faut utiliser le paramètre `-9` de la commande suivi du +numéro PID du processus à arrêter. + +```bash +kill -9 10256 +``` + +## nice + +Cette commande permet d'altérer délibérément la priorité d'une commande pour ne +pas gêner l'exécution de tâches plus prioritaires. +Par exemple : + +```bash +nice top +``` + +## top + +Cette commande affiche les processus les plus actifs (top CPU), avec +réactualisation fréquente des informations (par défaut, toutes les 3 secondes). + +```bash +top +``` + +Sont ainsi obtenus les noms des commandes et leur PID respectifs ainsi, entre +autres, que le nom du propriétaire de chacun de ces processus, leur priorité ou +leur charge CPU. +L'état affiché concerne l'ensemble des utilisateurs unix de la machine. + +Il y a une ligne de saisie de commandes juste au-dessus de la liste des 15 processus, à la position du curseur. Plusieurs commandes peuvent être utilisées ici, dont par exemple : + +- `h` : affiche l'aide sur les commandes de top +- `k` : avec l'option -9 termine un processus selon son PID (voir kill plus haut) +- `r` : renice un processus, c'est-à-dire permet d'altérer volontairement la + priorité d'un processus (celle-ci est un chiffre, par exemple 10) : + `renice [priorité] [PID]` +- `u` : affiche les processus d'un utilisateur donné +- `q` : quitte top diff --git a/src/commandes/testDiff1.txt b/src/commandes/testDiff1.txt new file mode 100644 index 0000000..8847fe9 --- /dev/null +++ b/src/commandes/testDiff1.txt @@ -0,0 +1,9 @@ +Fichier pour tester la commande diff d'Unix. +-------------------- +Ajoutez une ligne juste en dessous : +-------------------- +Supprimez la ligne qui suit : +LIGNE A SUPPRIMER +-------------------- +Modifiez comme vous le désirez la ligne suivante : +Modifiez-moi !!! diff --git a/src/commandes/testUmask.txt b/src/commandes/testUmask.txt new file mode 100644 index 0000000..e4590b0 --- /dev/null +++ b/src/commandes/testUmask.txt @@ -0,0 +1 @@ +Pour tester votre umask. diff --git a/src/commandes/tp.md b/src/commandes/tp.md new file mode 100644 index 0000000..2d06d46 --- /dev/null +++ b/src/commandes/tp.md @@ -0,0 +1,299 @@ +# Travaux pratiques (autres commandes UNIX) + +Cette seconde série de travaux pratiques se décompose en 4 parties : + +1. commandes utilisateurs, +2. gestion des droits, +3. archivage et décompression, +4. gestion des processus. + +## Commandes utilisateurs + +Identifiez-vous : quels sont votre *user id* (`uid`) et votre groupe (`gid`) ? + +
+Voir la solution + +```bash +$ whoami +[votre username] +$ id +uid=[votre username] gid=users +``` + +
+ +## Gestion des droits + +- En restant dans votre répertoire de travail (`UnixShell`), listez complètement + le contenu de votre *home directory*. + Décrivez ce que vous y trouvez : + +
+ Voir la solution + + `UnixShell` est à 2 niveaux sous votre *home directory*: + + ```bash + ll ../.. + ``` + +
+ + - quels sont les fichiers et répertoires présents ? + +
+ Voir la solution + + Des répertoires comme : `./ ../ Formation/` + Des fichiers comme : `.profile` + +
+ + - lesquels sont cachés ? + +
+ Voir la solution + + Tous ceux qui commencent par un point comme `.profile` + +
+ + - quels sont leurs propriétaires et groupes attachés ? + +
+ Voir la solution + + Propriétaires : surtout vous, éventuellement l'utilisateur `root` + Groupes : le vôtre, éventuellement d'autres + +
+ + - quels sont les droits afférants ? + +
+ Voir la solution + + Possiblement variable, mais dépendant surtout de votre `umask` (voir la suite) + +
+ +- Copiez dans votre répertoire `UnixShell` le fichier + [`testUmask.txt`](./testUmask.txt) (par un clic droit sur ce lien puis + "*Enregistrez la cible du lien sous*" ou "*Save link as*"). + Ses droits initiaux sont `rwxrwxr-x`. + Quel est votre `umask` ? + +
+ Voir la solution + + Dépend de votre configuration, mais s'observe en faisant un `ll` pour afficher les droits pris par le fichier `testUmask.txt` lors de la copie sous votre compte. + En prenant pour exemple les droits présentés plus haut : `rwxrwxr-x` + + ```txt + user (u) : rwx, binaire 111 octal 7 + group (g) : rwx, binaire 111 octal 7 + other (o) : r-x, binaire 101 octal 5 + ``` + + Donc profil octal 775, d'où un `umask` de 002 (sa négation en octal). + On peut aussi lancer `umask` comme commande en ligne... +
+ +- Modifiez les droits de ce fichier `testUmask.txt` de deux façons pour obtenir ceux qui suivent, en séquence pour les trois cas de proche en proche : + + - `rwx------` + - `rwxrwxrwx` + - `rwxr-xr--` + + La première façon de procéder utilisera un profil octal, la seconde des lettres. Contrôlez vos actions à chaque étape. + +
+ Voir la solution + + - `rwx------` + + ```bash + $ chmod 700 testUmask.txt + $ chmod go-rwx testUmask.txt + $ ll + -rwx------ 1 [uid] users 36 May 5 13:04 testUmask.txt + ``` + + - `rwxrwxrwx` + + ```bash + $ chmod 777 testUmask.txt + $ chmod a+rwx testUmask.txt + $ ll + -rwxrwxrwx 1 [uid] users 36 May 5 13:05 testUmask.txt + ``` + + - `rwxr-xr--` + + ```bash + $ chmod 754 testUmask.txt + $ chmod go-w,o-x testUmask.txt + $ ll + -rwxr-xr-- 1 [uid] users 36 May 5 13:06 testUmask.txt + ``` + +
+ +- Cherchez le chemin où se trouve votre fichier .profile, à partir de votre home directory, sans changer de répertoire. + +
+ Voir la solution + + ```bash + find ~ -name .profile + ``` + +
+ +- Copiez dans votre répertoire `UnixShell` le fichier + [`testDiff1.txt`](./testDiff1.txt) (par un clic droit sur ce lien). + Ouvrez-le dans un éditeur et modifiez-le selon les consignes qui s'y trouvent. + Ensuite, sauvegardez-le comme `testDiff2.txt`. + Comparez les deux fichiers, analysez le rapport obtenu en fonction de vos actions. + +
+ Voir la solution + + ```bash + $ diff testDiff1.txt testDiff2.txt + 3a4 + > LIGNE AJOUTEE + 6d6 + < LIGNE A SUPPRIMER + 9c9 + < Modifiez-moi !!! + --- + > Modifiée + ``` + +
+ +## Archivage et compression + +- Archivez en un seul *tarfile* tout le contenu de votre répertoire `UnixShell` (placez-vous au-dessus). + Contrôlez le fichier `.tar` résultat. + +
+ Voir la solution + + Le plus simple est d'abord de vous déplacer dans le répertoire parent de `UnixShell` pour l'archiver : + + ```bash + $ cd .. + $ pwd + / ... /Formation + $ ll + drwxrwxr-x 4 [uid] [gid] 1024 Apr 5 13:15 ./ + drwxrwxr-x 16 [uid] [gid] 512 Apr 25 16:35 ../ + drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 UnixShell + ``` + + ```bash + $ tar -cvf Archives.tar UnixShell + $ ll + drwxrwxr-x 4 [uid] [gid] 1024 Apr 5 13:15 ./ + drwxrwxr-x 16 [uid] [gid] 512 Apr 25 16:35 ../ + drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 UnixShell + -rwxrwxr-x 1 [uid] [gid] 10240 May 5 14:23 Archives.tar + ``` + +
+ +- Créez le sous-répertoire `tarzip` (sous `UnixShell` où vous revenez) et déplacez-y votre *tarfile*. + Sans vous déplacer dans ce sous-répertoire, désarchivez le *tarfile* et contrôlez le résultat. + +
+ Voir la solution + + ```bash + $ cd UnixShell + $ pwd + / ... /Formation/UnixShell + ``` + + ```bash + $ mkdir tarzip + $ mv ../Archives.tar tarzip + ``` + + ```bash + $ tar -xvf tarzip/Archives.tar + UnixShell/ + UnixShell/monHistorique.txt + UnixShell/testDiff1.txt + UnixShell/testDiff2.txt + ``` + + ```bash + $ ll + drwxrwxr-x 4 [uid] [gid] 512 May 5 15:25 ./ + drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 ../ + drwxrwxr-x 4 [uid] [gid] 1024 May 5 14:23 UnixShell/ + -rwxrwxr-x 1 [uid] [gid] 212 May 5 10:10 monHistorique.txt + drwxrwxr-x 2 [uid] [gid] 512 May 5 15:18 tarzip/ + -rwxrwxr-x 1 [uid] [gid] 261 May 5 14:12 testDiff1.txt + -rwxrwxr-x 1 [uid] [gid] 249 May 5 14:13 testDiff2.txt + ``` + + Si vous avez travaillé comme cela, vous devez constater que le répertoire `UnixShell` s'est désarchivé sous lui-même... + C'est bien sûr un exemple se voulant surtout didactique. + Dans une situation plus concrète, le désarchivage doit s'opérer aux endroits les plus adéquats ! +
+ +- Toujours en restant sous `UnixShell`, compressez le *tarfile* en `.gz`. + Affichez ensuite les informations relatives aux tailles de fichiers et au ratio de compression. + +
+ Voir la solution + + ```bash + $ gzip tarzip/Archives.tar + $ ll tarzip + -rwxrwxr-x 1 [uid] [gid] 612 May 5 16:23 Archives.tar.gz + ``` + + ```bash + $ gzip -l tarzip/Archives.tar.gz + compressed uncompr. ratio uncompressed_name + 612 10240 94.3% tarzip/Archives.tar + ``` + +
+ +- Toujours en restant sous `UnixShell`, décompressez le `tarfile.gz` sur le disque. + Puis vérifiez le résultat en listing complet. + Recompressez le *tarfile* et contrôlez de nouveau. + +
+ Voir la solution + + ```bash + $ gunzip tarzip/Archives.tar + $ ll tarzip + -rwxrwxr-x 1 [uid] [gid] 10240 May 5 14:23 Archives.tar + ``` + + ```bash + $ gzip tarzip/Archives.tar + -rwxrwxr-x 1 [uid] [gid] 612 May 5 16:48 Archives.tar.gz + ``` + +
+ +- Toujours en restant sous `UnixShell`, et sans décompresser le `tarfile.gz` sur + le disque, comptez le nombre de lignes non compressées qu'il renferme. + +
+ Voir la solution + + ```bash + $ gunzip -c tarzip/Archives.tar | wc -l + ``` + +
diff --git a/src/index.md b/src/index.md new file mode 100644 index 0000000..236089f --- /dev/null +++ b/src/index.md @@ -0,0 +1,22 @@ +cours-unix-shell +=============== + +Reprise d'un ancien cours UNIX/Shell, dédié à des formations internes pour +l'[Inist](http://www.inist.fr/)-[CNRS](http://www.cnrs.fr/). + +Il dérive de versions plus anciennes, légèrement modifiées avec le temps, dont +l'origine remonte à 2004. Leurs auteurs sont François Parmentier et Philippe +Houdry. + +Il aborde des principes généraux, des commandes de base et une initiation à la +programmation en shell UNIX. Chaque partie comprend un cours et un TP. + +1. UNIX: présentation des caractéristiques, de l'historique d'Unix et du cas + particulier de Linux, +2. Bases: redirections et commandes de base à connaître, +3. Commandes: diverses commandes UNIX utiles, +4. Shell: initiation pour la programmation de scripts shell, +5. Sed: substitution de textes via l'éditeur de chaînes de caractères non + interactif. +6. Make: outil qui fait gagner du temps en ne réitérant pas des calculs qui ne + sont plus nécessaires. diff --git a/src/make/Make.gif b/src/make/Make.gif new file mode 100644 index 0000000..3f48c45 --- /dev/null +++ b/src/make/Make.gif Binary files differ diff --git a/src/make/README.md b/src/make/README.md new file mode 100644 index 0000000..460ad5a --- /dev/null +++ b/src/make/README.md @@ -0,0 +1,53 @@ +# Make - UNIX + +GNU Make est un héritier de `make`, mais sous Linux, c'est bien GNU Make qui est +installé. + +Make permet de gagner du temps par rapport aux shells: on n'exécute que ce qui +est nécessaire, en fonction des changements de source par rapport à leur cible. + +Un shell fait tous les traitements qui y sont indiqués. + +![Un shell fait tous les traitements qui y sont indiqués](./Shell.gif) + +Un make ne fait que les traitements qui sont nécessaires. + +![Un make ne fait que les traitements qui sont nécessaires](./Make.gif) + +## Syntaxe + +Le fichier `Makefile` contient les règles de dépendance. + +Une règle est de la forme : + +```make +cible: [fichier de départ] ... + commande +``` + +> ⚠ La commande *doit* être précédée d'une **tabulation**! + +Pour créer le fichier cible : `make cible` + +Exemple de fichier `Makefile` : + +```make +# Commentaire +compte.txt: aCompter.txt + wc -l < aCompter.txt > compte.txt +``` + +La deuxième fois qu'on lance la cible `compte.txt`, la commande `wc` n'est pas +exécutée, sauf si le fichier `aCompter.txt` a une date de modification plus +récente que celle de `compte.txt`. + +Une règle qui ne dépend d'aucun fichier de départ peut exister. +De plus, elle ne peut donner lieu à la création d'un fichier. +Une telle règle sera toujours exécutée (à condition que son nom ne soit pas +celui d'un fichier). + +## Références + +- Make Manual +- GNU Make +- Pour les spécialistes diff --git a/src/make/Shell.gif b/src/make/Shell.gif new file mode 100644 index 0000000..a5669f0 --- /dev/null +++ b/src/make/Shell.gif Binary files differ diff --git a/src/make/original.txt b/src/make/original.txt new file mode 100644 index 0000000..33fb909 --- /dev/null +++ b/src/make/original.txt @@ -0,0 +1,6 @@ + ---- + ILIB + ---- + +Où l'on devrait parler d'ILIB! +ILIB a été élaboré à l'INIST (CNRS). diff --git a/src/make/table.txt b/src/make/table.txt new file mode 100644 index 0000000..d6f55f8 --- /dev/null +++ b/src/make/table.txt @@ -0,0 +1,2 @@ +s/ILIB/DILIB/g +s/d'DILIB/de DILIB/g diff --git a/src/make/tp.md b/src/make/tp.md new file mode 100644 index 0000000..ce701ed --- /dev/null +++ b/src/make/tp.md @@ -0,0 +1,158 @@ +# Travaux pratiques - Make - UNIX + +Créer un fichier `Makefile` contenant une règle bonjour, qui affiche sur la sortie standard `Bonjour, comment ca va?` + +
+Voir la solution + +```make +bonjour: + @echo "Bonjour, comment ca va?" +``` + +> L'utilisation du `@` devant `echo` rend la commande "silencieuse", elle +> n'apparaît pas sur la sortie standard. + +
+ +--- + +Ajouter une règle `bye` qui affiche `A bientot!`. + +
+Voir la solution + +```make +bye: + @echo "A bientot!" +``` + +
+ +--- + +Créer une règle qui crée un fichier `modif.txt` dont le contenu vient du fichier +[`original.txt`](./original.txt) (que vous pouvez +enregistrer grâce au bouton de droite) et qui remplace (grâce à `sed`) les +apparitions de `ILIB` par `DILIB`. + +
+Voir la solution + +```make +modif.txt: original.txt + sed -e 's/ILIB/DILIB/g' < original.txt > modif.txt +``` + +Le fichier `modif.txt` depend du contenu du fichier `original.txt`, c'est +pourquoi ce dernier apparaît à droite de `:`. + +
+ +--- + +Créer une règle qui crée un fichier `modif2.txt` à partir de `original.txt` et +[`table.txt`](./table.txt), en utilisant la table fournie +pour modifier le fichier original. + +
+Voir la solution + +```make +modif2.txt: original.txt table.txt + sed -f table.txt < original.txt > modif2.txt +``` + +Le fichier `modif2.txt` dépend des contenus des fichiers `original.txt` et +`table.txt` (si l'un des deux est modifié, la commande `sed` sera exécutée). + +
+ +--- + +Ajouter une ligne à `table.txt` pour remplacer `CNRS` par `Centre National de la +Recherche Scientifique`. +Puis relancer `make modif2.txt` pour vérifier que la commande a bien été +exécutée. + +--- + +Ajouter une règle qui crée un fichier `compte.txt` contenant le nombre de lignes +du fichier `modif2.txt`. + +
+Voir la solution + +```make +compte.txt: modif2.txt + wc -l < modif2.txt > compte.txt +``` + +Le fichier `compte.txt` dépend du fichier `modif2.txt` (donc de sa règle, qui +dépend de `original.txt` et de `table.txt`). +Donc si on modifie `table.txt` et qu'on tape `make compte.txt`, ou toute autre +règle qui dépend directement ou indirectement de `table.txt`, cette règle sera +exécutée. + +
+ +--- + +Créer une règle `clean` qui supprime les fichiers dont le nom se termine par +`~`. + +
+Voir la solution + +```make +clean: + rm -f *~ +``` + +> Si vous utilisez un lecteur Samba (probable à l'INIST), vous risquez une +> désynchronisation entre les fichiers enregistrés par le lecteur Samba et la +> date de lancement de `make` (il est arrivé que les fichiers aient une à deux +> minutes d'avance). +> Pour limiter de tels problèmes, on peut utiliser la commande `touch`, qui +> remet un fichier à l'heure courante du shell, mais seulement sur les fichiers +> qui viennent d'être modifiés/créés! + +
+ +--- + +Créer une règle `all` qui dépende de `bonjour`, `compte.txt`, `clean`, et `bye`, +mais qui ne contient aucune commande (on peut quand même y mettre un `echo -- +Make all: exécuté --`). + +Remarques : + +- L'exécution d'une règle ne donne pas forcément lieu à l'exécution de sa + commande. + Dans le cas de la production d'un fichier, quand le fichier cible est plus + récent que le(s) fichier(s) dont il dépend, le fichier cible n'est pas recréé + (donc, la commande de sa règle n'est pas exécutée). +- Quand une règle dépend d'une autre règle qui dépend d'un autre fichier, et que + ce fichier est modifié (par exemple grâce à la commande `touch`, qui change la + date de modification du fichier qu'elle prend en paramètre), les commandes de + chacune de ces règles sont exécutées (voir le comportement de `make all` après + avoir tapé `touch original.txt`, ou après avoir ajouté du texte à + `original.txt`). + +
+Voir la solution + +```make +all: bonjour compte.txt clean bye + @echo --- Make all: exécuté --- +``` + +> On peut généraliser le `@echo --- Make exécuté ---` à toutes les +> règles, cela permet de mieux se rendre compte de ce que le `make` a effectué. + +
+ +--- + +Pour ceux qui ne l'ont pas fait : modifier le fichier `original.txt`, et +relancer la règle `all`. diff --git a/src/sed/README.md b/src/sed/README.md new file mode 100644 index 0000000..8dddd01 --- /dev/null +++ b/src/sed/README.md @@ -0,0 +1,158 @@ +# sed - UNIX + +Sed (pour **S**tream **ED**itor) 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. +Comme avec toute commande unix, il est possible de rediriger la sortie vers un +fichier résultat. + +## Substitution + +La commande suivante lit un fichier `file.txt` et affiche ses lignes sur la +sortie standard en remplaçant la chaîne « `Dilib` » par la chaîne « `DILIB` ». + +```bash +sed 's/Dilib/DILIB/' file.txt +``` + +Il est conseillé d'entourer les commandes par des apostrophes simples, pour +éviter que le shell n'interprète les [caractères +spéciaux](../shell/parametres.md#caractères-spéciaux) (`.*[]^$\`). + +> ⚠ 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 : +> +> ```bash +> sed 's/Dilib/DILIB/g' file.txt +> ``` + +Si on veut faire deux remplacements sur la même ligne de commandes, on peut utiliser : + +```bash +sed -e 's/Dilib/DILIB/g' -e 's/Jacques Ducloy/Monsieur Dilib/g' file.txt +``` + +> ⚠ Le `-e` est obligatoire pour distinguer la deuxième commande d'un nom de +> fichier qui n'en est jamais précédé. +> +> 📗 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. + +### Rappel sur les expressions régulières + +| | | +| -------- | ------------------------------------------------------------------------------------------------------ | +| `^` | début de ligne | +| `$` | fin de ligne | +| `[]` | classe de caractères (exemples : `[A-Z]` correspond à toutes les lettres majuscules) | +| `[^...]` | classe de caractères correspondant à n'importe quels caractères sauf ceux qui suivent le caractère `^` | +| | Exemple : `[^:]` correspond à tous les caractères sauf le `:`. | +| `*` | le caractère précédant `*` répété de 0 à n fois | +| `+` | le caractère précédant `+` répété de 1 à n fois | +| `?` | le caractère précédant `?` présent de 0 à 1 fois | + +### Expressions 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). + +```bash +sed -e 's/Jacques D[uU][cC][lL][oO][yY]/Monsieur Dilib/g' fichier +``` + +> 📗 Le caractère `*` englobe autant de caractères qu'il peut, ce qui veut dire que +> +> ```bash +> sed 's/ré.*duction/réduction/g' fichier +> ``` +> +> transformera le fichier +> +> ```txt +> do ré mi fa sol la si duction ah bon duction la suite +> ``` +> +> en +> +> ```txt +> do réduction la suite +> ``` +> +> et non en +> +> ```txt +> 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. + +```bash +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` ». + +## Fichier de commandes + +Si vous avez beaucoup de commandes, vous pouvez les rassembler dans un fichier +comme celui-là : + +```bash +# 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` : + +```bash +sed -f exemple.sed fichier +``` + +Une autre solution consiste à en faire un script exécutable (à la manière d'un +script shell) : + +```bash +#!/usr/bin/sed -f +# Table de transcodage de ISO-8859-1 vers HTML +# Fichier "exemple2.sed" +s/É/É/g +s/À/À/g +s/Ç/Ç/g +``` + +Mais il ne faut pas oublier de lui donner les droits en exécution, pour pouvoir +l'appeler ainsi : + +```bash +chmod u+x exemple2.sed +./exemple2.sed fichier +``` + +> ⚠ Un fichier de commandes sed doit toujours se terminer par un passage à la +> ligne, sinon la dernière commande n'est pas prise en compte! + +> ⚠ De la même manière, toutes les lignes à traiter doivent finir par un retour +> à la ligne (en particulier la dernière)! + +## Référence + +- La commande **sed** +- **Regex 101**, pour fabriquer et comprendre vos + expressions régulières +- **Regulex**, pour visualiser la structure des + expressions régulières +- **RegexHQ** pour trouver facilement des expressions + régulières pour toutes sortes de cas d'usages diff --git a/src/sed/tp.md b/src/sed/tp.md new file mode 100644 index 0000000..a0d03fc --- /dev/null +++ b/src/sed/tp.md @@ -0,0 +1,97 @@ +# Travaux pratiques - Sed - UNIX + +## Utilisation simple + +Écrivez une commande `sed` transformant la chaîne « `moins` » en « `plus` ». +Appliquez-la à « `Vous aurez moins de budget` ». + +
+Voir la solution + +```bash +sed -e 's/moins/plus/g' +``` + +
+ +## Utilisation d'un fichier de commandes + +Écrivez un commande `sed` transformant toutes les lettres minuscules en leur +suivante lexicographique (cas particulier : `z` se transforme en `!`). +Rappel : vous pouvez utiliser un fichier pour rassembler plusieurs commandes `sed`. + +
+Voir la solution + +```bash +sed -f decalage.sed +``` + +```bash +# fichier "decalage.sed" +s/z/!/g +s/y/z/g +s/x/y/g +s/w/x/g +s/v/w/g +s/u/v/g +s/t/u/g +s/s/t/g +s/r/s/g +s/q/r/g +s/p/q/g +s/o/p/g +s/n/o/g +s/m/n/g +s/l/m/g +s/k/l/g +s/j/k/g +s/i/j/g +s/h/i/g +s/g/h/g +s/f/g/g +s/e/f/g +s/d/e/g +s/c/d/g +s/b/c/g +s/a/b/g +``` + +> 📗 Cette solution peut sembler étrange, car les substitutions ne se font pas +> dans l'ordre alphabétique mais dans l'ordre alphabétique inverse. +> C'est nécessaire car sinon tous les `a` se transforment en `b`, puis tous les +> `b` (y compris ceux qui sont nouvellement transformés) en `c`, *etc*., pour +> finir par un texte intégralement composé de lettres `a`. + +
+ +## Substitution en début de ligne + +Écrivez une commande `sed` qui affiche uniquement le début de chaque ligne du +fichier `/etc/passwd` jusqu'au premier caractère `:`. + +
+Voir la solution + +```bash +sed -e 's/^\([^:]*\).*$/\1/' /etc/passwd +``` + +> 📗 On aurait pu aussi utiliser la commande `cut`. + +
+ +## Substitution dans toute la ligne + +Écrivez une commande `sed` qui remplace les couples de guillemets anglais par un +couple de guillemets français (`Ceci est un "exemple" qui doit "fonctionner".` +doit donner `Ceci est un <> qui doit <>.`). + +
+Voir la solution + +```bash +sed -e 's/"\([^"]*\)"/<<\1>>/g' +``` + +
diff --git a/src/shell/README.md b/src/shell/README.md new file mode 100644 index 0000000..71e0622 --- /dev/null +++ b/src/shell/README.md @@ -0,0 +1,52 @@ +# Variables d'environnement - Shell - UNIX + +Le shell contient diverses variables d'environnement. +Si vous voulez les voir toutes, utilisez la commande `set` ou la commande `env` sans paramètre. + +Certaines de ces variables peuvent nous intéresser plus particulièrement (pour +visualiser leur contenu, utilisez la commande `echo`, par exemple `echo $HOME` +pour afficher le contenu de la variable `HOME`) : + +| nom | contenu | +| ----- | -------------------------------------------------------------------------------------------------------------------------- | +| HOME | chemin de votre *home directory* | +| PATH | liste des chemins parcourus par le shell pour trouver les commandes à exécuter (quand le chemin complet n'est pas précisé) | +| PS1 | "Prompt" utilisé dans le shell (on peut modifier sa valeur) | +| SHELL | indique le shell qu'on utilise | +| USER | votre nom d'utilisateur | + +Pour modifier la valeur d'une variable (ou en créer une), il suffit d'utiliser la syntaxe : + +```bash +VARIABLE=valeur +``` + +> ⚠ Il ne faut pas mettre d'espace autour du caractère `=` + +Par convention, les noms de variable sont en majuscules. +Pour accéder à la valeur d'une variable, on utilise : + +```bash +$VARIABLE +``` + +ou, pour éviter des ambiguités (si `a="var"`, `${a}b` renvoie `varb` alors que `$ab` est invalide) : + +```bash +${VARIABLE} +``` + +On peut créer des variables utilisateurs de la même manière. + +Une variable n'est disponible que dans le shell où on l'a initialisée. + +Faire précéder l'affectation d'une variable du mot-clé `export` autorise son +utilisation dans un shell différent. + +```bash +export VARIABLE=valeur +``` + +> Pour plus d'information sur les variables (en `bash`), voir [How To Use Bash +> Parameter Substitution Like A +> Pro](https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html) diff --git a/src/shell/commandes.md b/src/shell/commandes.md new file mode 100644 index 0000000..f6a4af5 --- /dev/null +++ b/src/shell/commandes.md @@ -0,0 +1,35 @@ +# Commandes diverses - Shell - UNIX + +## Commandes + +| | | +| ---------------- | ----------------------------------------------------------------------------------------------------- | +| `#` | commentaires (mais `#!/bin/sh` en début de fichier est le shebang) | +| `( commande )` | exécute la commande dans un sous-shell | +| `read a` | lecture d'une entrée pendant l'exécution d'un script | +| `exit num` | renvoie le statut du script au shell appelant | +| `. script` | inclusion et exécution du script dans le shell courant | +| `exec script` | exécute le script dans un nouveau shell | +| `cmd1 \|\| cmd2` | séparateur conditionnel (`cmd2` est exécutée même si `cmd1` ne s'est pas exécutée correctement) | +| `cmd1 && cmd2` | séparateur conditionnel (`cmd2` est exécutée seulement si `cmd1` s'est exécutée correctement) | +| `set` | liste de toutes les variables. | +| | Positionne les paramètres `$i` (`set a b c` positionne `$1` à `a`, `$2` à `b` et `$3` à `c`). | +| `unset var` | remise à zéro de la variable `var` | +| `type cmde` | indique la nature (et la localisaton) d'une commande | +| `alias al='cmd'` | crée une commande al équivalente à la commande `cmd` (qui peut être complexe) | +| `touch fichier` | change la date de dernière modification du fichier. Si le fichier n'existe pas, crée un fichier vide. | + +## expr + +`expr` exécute des opérations arithmétiques sur des entiers (l'opérateur peut +être `+`, `-`, `\*`, `/`, `%`, `=`, `\>`, `\<`, `\>=`, `\<=`, `!=`). + +L'expression est une commande, donc pour affecter une opération à une variable, il faut forcer son exécution avec des antiquotes (`AltGr`-`7`) : + +```bash +a=`expr $b + $c` +``` + +> Si vous utilisez `bash`, il existe une syntaxe plus facile: `$((..))` (voir +> [How to Increment and Decrement Variable in Bash +> (Counter)](https://linuxize.com/post/bash-increment-decrement-variable/)) diff --git a/src/shell/conditions.md b/src/shell/conditions.md new file mode 100644 index 0000000..c84fcfb --- /dev/null +++ b/src/shell/conditions.md @@ -0,0 +1,76 @@ +# Conditions - Shell - UNIX + +Les commandes `if`, `while`, et `until` testent le statut de la commande qu'ils +ont en paramètre. + +## if + +### Syntaxe + +```bash +if commande +then + liste_commandes +[elif commande + then + liste_commandes] ... +[else liste_commandes] +fi +``` + +### Exemples + +```bash +if test -f $1 +then + cat $1 +else + echo "Le fichier \"$1\" n'existe pas" +fi +``` + +## test + +`test` est une commande qui renvoie une valeur vraie ou fausse (`0` pour vrai, +`1` pour fausse). +Elle a différentes options permettant de tester différentes conditions sur des +fichiers, des valeurs (chaînes de caractères), etc. + +Sa syntaxe est `test expr` ou `[ expr ]` (attention, il faut un espace après `[` et avant `]`). + +| expr | signification | +| ------------ | -------------------------------------------------------------------------------- | +| `-r fichier` | vrai si le `fichier` existe et est accessible en lecture (r) | +| `-w fichier` | vrai si le `fichier` existe et est accessible en écriture (w) | +| `-x fichier` | vrai si le `fichier` existe et est exécutable (x) | +| `-f fichier` | vrai si le `fichier` existe et est un fichier "régulier" (file) | +| `-d fichier` | vrai si le `fichier` existe et est un répertoire (directory) | +| `-s fichier` | vrai si le `fichier` existe et a une taille non nulle (size) | +| `c1 = c2` | vrai si les deux expressions sont égales (des chaînes, en sh) | +| `c1 != c2` | vrai si les deux expressions sont différentes (des chaînes, en sh) | +| `c1` | vrai si `c1` n'est pas la chaîne nulle (vide) | +| `e1 -eq e2` | vrai si les deux entiers `e1` et `e2` sont algébriquement égaux (equal) | +| `e1 -ne e2` | vrai si les deux entiers `e1` et `e2` sont algébriquement différents (not equal) | +| `e1 -gt e2` | vrai si l'entier `e1` est plus grand que l'entier `e2` (greater than) | +| `e1 -lt e2` | vrai si l'entier `e1` est plus petit que `e2` (lower than) | +| `! expr` | négation de l'expression booléenne `expr` | +| `e1 -a e2` | et logique entre les deux expressions booléennes `e1` et `e2` (and) | +| `e1 -o e2` | ou logique entre les deux expressions booléennes `e1` et `e2` (or) | + +### Exemples + +Quand `script.sh` est un fichier qui existe dans le répertoire courant. + +```bash +$ test -f script.sh +$ echo $? +0 +``` + +Quand `inexistant.sh` est un fichier qui n'est pas dans le répertoire courant. + +```bash +$ test -f inexistant.sh +$ echo $? +1 +``` diff --git a/src/shell/controle.md b/src/shell/controle.md new file mode 100644 index 0000000..2985866 --- /dev/null +++ b/src/shell/controle.md @@ -0,0 +1,97 @@ +# Structures de contrôle - Shell - UNIX + +## for + +### Syntaxe + +```bash +for var [in liste] +do + liste_commandes +done +``` + +La variable `var` prend successivement les valeurs de la liste. +Si la liste est omise, `var` prend alors les valeurs passées en paramètres du script ([`$*`](./parametres.md#variables-spéciales)). + +### Exemples + +```bash +for i +do + echo $i +done +``` + +```bash +for i in `ls` +do + cp $i /dir/$i + echo "$i copié" +done +``` + +Il ne faut pas oublier les apostrophes inversées (ou quotes inverses) `` ` `` +qui forcent l'exécution du `ls`. + +## while + +### Syntaxe + +```bash +while commande +do + liste_commandes +done +``` + +### Exemple + +```bash +while read a +do + echo $a >> resultat.txt + echo Appuyez sur Ctrl-D pour arrêter. +done +``` + +## until + +### Syntaxe + +```bash +until commande +do + liste_commandes +done +``` + +### Exemple + +```bash +until ! read a +do + echo $a >> resultat.txt + echo Appuyez sur Ctrl-D pour arrêter. +done +``` + +## case + +### Syntaxe + +```bash +case para in + choix1[|choix2] ... ) liste_commandes ;; +esac +``` + +### Exemple + +```bash +case $1 in + bonjour ) echo "Bonjour aussi." ;; + A+ | a+ ) echo "À bientôt." ;; + * ) echo "Je n'ai pas bien compris le paramètre \"$1\".";; +esac +``` diff --git a/src/shell/data_dc.tar.gz b/src/shell/data_dc.tar.gz new file mode 100644 index 0000000..5b4d77d --- /dev/null +++ b/src/shell/data_dc.tar.gz Binary files differ diff --git a/src/shell/francis.exodic.xml b/src/shell/francis.exodic.xml new file mode 100644 index 0000000..37955e4 --- /dev/null +++ b/src/shell/francis.exodic.xml @@ -0,0 +1,4408 @@ + + + <ttl type="main" lang="eng">Economy, politics and institutions: from adaptation to adaptive management in climate change</ttl> + + + + Joseph + ARVAI + Editor + Editeur scientifique + + + Tomas + KOONTZ + Editor + Editeur scientifique + + + Paul + ROBBINS + Editor + Editeur scientifique + + + Brent + SOHNGEN + Editor + Editeur scientifique + + + Alexander + THOMPSON + Editor + Editeur scientifique + + + Environmental Science and Policy Program, and Dept. of CARRS, Michigan State University + + + + + School of Natural Resources, Ohio State University + + + + + Department of Geography and Regional Development, University of Arizona + + + + + Department of Agricultural, Environmental, and Development Economics, Ohio State University + + + + + Department of Political Science, Ohio State University + + + + + Climate Change and Environmental Research Initiative (CCERI) + + + Organiser of meeting + Organisateur de congrès + + + Environmental Policy Initiative (EPI) + + + Organiser of meeting + Organisateur de congrès + + + Mershon Center + + + Organiser of meeting + Organisateur de congrès + + + Cluster for Interdisciplinary Research on International Themes (CIRIT) + + + Organiser of meeting + Organisateur de congrès + + + + + Sociologie environnementale + + + Ecologie sociale + + + Changement organisationnel + Organizational change + Cambio organizacional + + + Ecologie humaine + human ecology + Ecología humana + + + Politique environnement + Environmental policy + Política medio ambiente + + + Adaptabilité + Adaptability + Adaptabilidad + + + Adaptation + adaptation + Adaptación + + + Aspect social + Social aspect + Aspecto social + + + Aspect économique + Economic aspect + Aspecto económico + + + Impact environnement + environment impact + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + Springer + Dordrecht + + + + + + Conference on Adaptive Research and Governance in Climate Change + Columbus, OH + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 78 + 1 + + 226 + dissem. + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Human strategies for coping with El Niño related drought in Amazônia</ttl> + + + + Emilio F. + MORAN + + + Ryan + ADAMS + + + Bryn + BAKOYEMA + + + Stefano + FIORINI T + + + Bruce + BOUCEK + + + Anthropological Center for Training in Global Environmental Change (ACT), Indiana University + Bloomington + + + + + Center for the Study of Population, Institutions, and Environmental Change (CIPEC), Indiana University + Bloomington + + + + + Anthropology Department, Indiana University + Bloomington + + + + + Geography Department, Indiana University + Bloomington + + + + + + + Amérique du Sud + South America + America del sur + + + Variabilité climat + Climate variability + Variabilidad climática + + + Sociologie environnementale + + + Brésil + Brazil + Brasil + + + Amazonie + Amazonia + + + Ecologie humaine + human ecology + Ecología humana + + + Agrométéorologie + Agrometeorology + Agrometeorología + + + Prévision météorologique + Weather forecast + Previsión meteorológica + + + Adaptation + adaptation + Adaptación + + + Agriculteur + Farmer + Agricultor + + + Agriculture + agriculture + Agricultura + + + Vulnérabilité + vulnerability + + + Forêt ombrophile tropicale + Tropical rain forest + Bosque tropical húmedo + + + Incendie forêt + Forest fire + Incendio forestal + + + Sécheresse + drought + Sequedad + + + Précipitation atmosphérique + atmospheric precipitation + Precipitación atmosférica + + + El Nino + El Nino + + + Climatologie dynamique + Dynamical climatology + Climatología dinámica + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Applications météorologiques. + Meteorological applications. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + This article reports on findings of a research project examining farmers' coping strategies in the Brazilian Amazon in response to El Niiio related weather events. We examine the extent of vulnerability of small and large farmers to these events in a tropical rainforest environment. Little attention has been given to the impact of ENSO events in Amazônia, despite evidence for devastating fires during ENSOs. Although we found a range of locally developed forecasting techniques and coping mechanisms; farmers have sustained significant losses, and we suggest that increased access to scientific forecasts would greatly enhance the ability of the farmers in our study area to cope with El Niño related weather events. In Amazônia the El Niiio phase of the El Niño-Southern Oscillation (ENSO) climate pattern leads to an extended period of reduced rainfall (Hobbs et al., 1998). This period of reduced rainfall can result in significant agricultural losses for farmers and ranchers in the area and in increased forest flammability. We have found that the majority of our study population uses several methods of forecasting, coping with, and adapting to drought events - and they recognize the economic losses they can experience and the loss of forests through the accidental spread of fire. The poorest farmers in our study area experience El Niiio related drought events as a serious threat to their livelihoods. Their vulnerability is heightened during extreme climate events and our observations revealed that all of the farmers in our study would benefit from increased availability of improved forecast information relevant to their locality and their current farming strategies. This paper examines the availability and use of forecasts, the occurrence of accidental fires and techniques to prevent fire related losses, and the coping mechanisms for dealing with El Niño related drought , in the agricultural regions surrounding the cities of Altamira and Santarém, in Pará State, Brazil. Distribution of an El Niño Prediction Kit at the end of the study and a series of workshops may lead to better local information on rainfall variability and create a farmer-maintained grid of collecting stations to sensitize farmers to the variability of precipitation in the region, and on their property. + + + Springer + Dordrecht + + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 3-4 + + + 343 + 361 + + 19 + 1 p.1/2 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Learning to adapt : Organisational adaptation to climate change impacts</ttl> + + + <ttl type="main" lang="eng">Economy, politics and institutions: from adaptation to adaptive management in climate change</ttl> + + + + Frans + BERKHOUT + + + Julia + HERTIN + + + David M. + GANN + + + Joseph + ARVAI + Editor + Editeur scientifique + + + Tomas + KOONTZ + Editor + Editeur scientifique + + + Paul + ROBBINS + Editor + Editeur scientifique + + + Brent + SOHNGEN + Editor + Editeur scientifique + + + Alexander + THOMPSON + Editor + Editeur scientifique + + + Institute for Environmental Studies, Faculty of Earth and Life Sciences, Vrije Universiteit Amsterdam + + + + + SPRU-Science and Technology Policy Research, University of Sussex + + + + + Innovation Studies Centre, Tanaka Business School and Civil & Environmental Engineering, Imperial College London + + + + + Environmental Science and Policy Program, and Dept. of CARRS, Michigan State University + + + + + School of Natural Resources, Ohio State University + + + + + Department of Geography and Regional Development, University of Arizona + + + + + Department of Agricultural, Environmental, and Development Economics, Ohio State University + + + + + Department of Political Science, Ohio State University + + + + + Climate Change and Environmental Research Initiative (CCERI) + + + Organiser of meeting + Organisateur de congrès + + + Environmental Policy Initiative (EPI) + + + Organiser of meeting + Organisateur de congrès + + + Mershon Center + + + Organiser of meeting + Organisateur de congrès + + + Cluster for Interdisciplinary Research on International Themes (CIRIT) + + + Organiser of meeting + Organisateur de congrès + + + + + Sociologie environnementale + + + Protection environnement + environment protection + Protección medio ambiente + + + Ecologie humaine + human ecology + Ecología humana + + + Changement organisationnel + Organizational change + Cambio organizacional + + + Apprentissage + Learning + Aprendizaje + + + Entreprise + Firm + Empresa + + + Adaptation + adaptation + Adaptación + + + Vulnérabilité + vulnerability + + + Gestion risque + Risk management + Gestión riesgo + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + Analysis of human adaptation to climate change should be based on realistic models of adaptive behaviour at the level of organisations and individuals. The paper sets out a framework for analysing adaptation to the direct and indirect impacts of climate change in business organisations with new evidence presented from empirical research into adaptation in nine case-study companies. It argues that adaptation to climate change has many similarities with processes of organisational learning. The paper suggests that business organisations face a number of obstacles in learning how to adapt to climate change impacts, especially in relation to the weakness and ambiguity of signals about climate change and the uncertainty about benefits flowing from adaptation measures. Organisations rarely adapt 'autonomously', since their adaptive behaviour is influenced by policy and market conditions, and draws on resources external to the organisation. The paper identifies four adaptation strategies that pattern organisational adaptive behaviour. + + + Springer + Dordrecht + + + + + + Conference on Adaptive Research and Governance in Climate Change + Columbus, OH + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 78 + 1 + + + 135 + 156 + + 22 + 1 p.3/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">The generational divide in support for environmental policies : European evidence</ttl> + + + <ttl type="main" lang="eng">Global warming: The psychology of long-term risk</ttl> + + + + Joni + HERSCH + + + W. + KIP VISCUSI + + + Michael + OPPENHEIMER + Editor + Editeur scientifique + + + Alexander + TODOROV + Editor + Editeur scientifique + + + Adjunct Professor of Law, Harvard Law School + Cambridge, MA 02138 + + + + + Cogan Professor of Law & Economics, Harvard Law School + Cambridge, MA 02138 + + + + + Department of Geosciences and the Woodrow Wilson School, Princeton University + + + + + Department of Psychology and the Woodrow Wilson School, Princeton University + + + + + Cooperative Institute for Climate Science + + + Organiser of meeting + Organisateur de congrès + + + Princeton University'fs Woodrow Wilson School of Public and International Affairs. Program in Science, Technology, and Environmental Policy + + + Organiser of meeting + Organisateur de congrès + + + + + Sociologie environnementale + + + Ecologie sociale + + + Europe + Europe + Europa + + + Ecologie humaine + human ecology + Ecología humana + + + Lutte antipollution + Pollution control + Lucha anticontaminación + + + Essence + Gasoline + Gasolina + + + Taxation + Taxation + Tasación + + + Etude cas + case studies + Estudio caso + + + Effet génération + Generation effect + Efecto generación + + + Age + age + Edad + + + Enquête opinion + Opinion inquiry + Encuesta opinión + + + Opinion publique + Public opinion + Opinión pública + + + Perception sociale + Social perception + Percepción social + + + Attitude + Attitude + Actitud + + + Politique environnement + Environmental policy + Política medio ambiente + + + Protection environnement + environment protection + Protección medio ambiente + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Environnement. Ecologie. + Environment. Ecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + This article examines age variations in support for environmental protection policies that affect climate change using a sample of over 14,000 respondents to a 1999 Eurobarometer survey. There is a steady decline with age in whether respondents are willing to incur higher gasoline prices to protect the environment. This relationship remains after controlling for socioeconomic characteristics. There are age-related differences in information about environmental risks, information sources about the environment, perceived health risks from climate change, and degree of worry about climate change. However, taking these factors into account does not eliminate the age variation in willingness to pay more for gasoline to protect the environment. + + + Springer + Dordrecht + + + + + + Global warming: The psychology of long-term risk. Workshop + Princeton + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 1-2 + + + 121 + 136 + + 16 + 22 ref. + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Climate change as a predictable surprise</ttl> + + + <ttl type="main" lang="eng">Global warming: The psychology of long-term risk</ttl> + + + + Max H. + BAZERMAN + + + Michael + OPPENHEIMER + Editor + Editeur scientifique + + + Alexander + TODOROV + Editor + Editeur scientifique + + + Harvard University + + + + + Department of Geosciences and the Woodrow Wilson School, Princeton University + + + + + Department of Psychology and the Woodrow Wilson School, Princeton University + + + + + Cooperative Institute for Climate Science + + + Organiser of meeting + Organisateur de congrès + + + Princeton University'fs Woodrow Wilson School of Public and International Affairs. Program in Science, Technology, and Environmental Policy + + + Organiser of meeting + Organisateur de congrès + + + + + Perception du risque + Risk perception + Percepción del riesgo + + + Sociologie environnementale + + + Ecologie sociale + + + Ecologie humaine + human ecology + Ecología humana + + + Politique publique + Public policy + Politica pública + + + Politique environnement + Environmental policy + Política medio ambiente + + + Action politique + Political activity + Acción política + + + Echelon national + National scope + Escalón nacional + + + Analyse comportementale + Behavioral analysis + Análisis conductual + + + Adaptation + adaptation + Adaptación + + + Action préventive + preventive measures + Acción preventiva + + + Prise décision + decision making + + + Perception sociale + Social perception + Percepción social + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Environnement. Ecologie. + Environment. Ecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + In this article, I analyze climate change as a "predictable surprise," an event that leads an organization or nation to react with surprise, despite the fact that the information necessary to anticipate the event and its consequences was available (Bazerman and Watkins, 2004). I then assess the cognitive, organizational, and political reasons why society fails to implement wise strategies to prevent predictable surprises generally and climate change specifically. Finally, I conclude with an outline of a set of response strategies to overcome barriers to change. + + + Springer + Dordrecht + + + + + + Global warming: The psychology of long-term risk. Workshop + Princeton + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 1-2 + + + 179 + 193 + + 15 + 1 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Climatic change, wars and dynastic cycles in China over the last millennium</ttl> + + + + David D. + ZHANG + + + C. Y. + JIM + + + George C.-S. + LIN + + + Yuan-Qing + HE + + + James J. + WANG + + + Harry F. + LEE + + + Department of Geography, University of Hong Kong, Pokfulam Road + + + + + CAREERI, Chinese Academy of Science + Lanzhou 730000, Gansu + + + + + + + Asie + Asia + Asia + + + Extrême Orient + Far East + Extremo Oriente + + + Phanérozoïque + Phanerozoic + Fanerozoico + + + Cénozoïque + Cenozoic + Cenozoico + + + Quaternaire + Quaternary + Cuaternario + + + Quaternaire sup + upper Quaternary + Cuaternario sup + + + Climatologie dynamique + Dynamical climatology + Climatología dinámica + + + Chine + China + China + + + Variabilité spatiale + Spatial variability + Variabilidad espacial + + + Relation homme environnement + Man environment interface + Relación hombre medio ambiente + + + Changement politique + Political change + Cambio político + + + Guerre + War + Guerra + + + Fréquence apparition + Occurrence frequency + Frecuencia aparición + + + Impact social + Social impact + Impacto social + + + Analyse corrélation + Correlation analysis + Análisis correlación + + + Paléotempérature + paleotemperature + Paleotemperatura + + + Modification climat + climate modification + + + Holocène + Holocene + Holoceno + + + Paléoclimat + paleoclimate + Paleoclima + + + Paléoclimatologie + paleoclimatology + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Quaternaire marin et continental. + Marine and continental Quaternary. + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Quaternaire marin et continental. + Marine and continental Quaternary. + + + Généralités. + Generalities + + + ASIE + Asia + + + ART ET ARCHEOLOGIE + ART AND ARCHAEOLOGY + + + + In recent years, the phenomenon of global warming and its implications for the future of the human race have been intensively studied. In contrast, few quantitative studies have been attempted on the notable effects of past climatic changes upon human societies. This study explored the relationship between climatic change and war in China by comparing high-resolution paleoclimatic reconstructions with known war incidences in China in the last millennium. War frequencies showed a cyclic pattern that closely followed the global paleo-temperature changes. Strong and significant correlations were found between climatic change, war occurrence, harvest level, population size and dynastic transition. During cold phases, China suffered more often from frequent wars, population decline and dynastic changes. The quantitative analyses suggested that the reduction of thermal energy input during a cold phase would lower the land carrying capacity in the traditional agrarian society, and the population size, with significant accretions accrued in the previous warm phase, could not be sustained by the shrinking resource base. The stressed human-nature relationship generated a 'push force', leading to more frequent wars between states, regions and tribes, which could lead to the collapse of dynasties and collapses of human population size. War frequencies varied according to geographical locations (North, Central and South China) due to spatial variations in the physical environment and hence differential response to climatic change. Moreover, war occurrences demonstrated an obvious time lag after an episode of temperature fall, and the three geographical regions experienced different length of time lags. This research also shows that human population increases and collapses were correlated with the climatic phases and the social instabilities that were induced by climate changes during the last millennium. The findings proposed a new interpretation of human-nature relationship in the past, with implications for the impacts of anomalous global warming on future human conflicts. + + + Springer + Dordrecht + + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 76 + 3-4 + + + 459 + 477 + + 19 + 2 p. + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Thinking about global warming</ttl> + + + <ttl type="main" lang="eng">Global warming: The psychology of long-term risk</ttl> + + + + Jonathan + BARON + + + Michael + OPPENHEIMER + Editor + Editeur scientifique + + + Alexander + TODOROV + Editor + Editeur scientifique + + + Department of Psychology, University of Pennsylvania, 3720 Walnut St + Philadelphia, PA 19104-6241 + + + + + Department of Geosciences and the Woodrow Wilson School, Princeton University + + + + + Department of Psychology and the Woodrow Wilson School, Princeton University + + + + + Cooperative Institute for Climate Science + + + Organiser of meeting + Organisateur de congrès + + + Princeton University'fs Woodrow Wilson School of Public and International Affairs. Program in Science, Technology, and Environmental Policy + + + Organiser of meeting + Organisateur de congrès + + + + + Perception du risque + Risk perception + Percepción del riesgo + + + Sociologie environnementale + + + Ecologie sociale + + + Ecologie humaine + human ecology + Ecología humana + + + Réduction pollution + Pollution abatement + + + Lutte antipollution + Pollution control + Lucha anticontaminación + + + Politique environnement + Environmental policy + Política medio ambiente + + + Attitude + Attitude + Actitud + + + Opinion publique + Public opinion + Opinión pública + + + Perception sociale + Social perception + Percepción social + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Environnement. Ecologie. + Environment. Ecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + Attitudes toward global warming are influenced by various heuristics, which may distort policy away from what is optimal for the well-being of people. These possible distortions, or biases, include: a focus on harms that we cause, as opposed to those that we can remedy more easily; a feeling that those who cause a problem should fix it; a desire to undo a problem rather than compensate for its presence; parochial concern with one's own group (nation); and neglect of risks that are not available. Although most of these biases tend to make us attend relatively too much to global warming, other biases, such as wishful thinking, cause us to attend too little. I discuss these possible effects and illustrate some of them with an experiment conducted on the World Wide Web. + + + Springer + Dordrecht + + + + + + Global warming: The psychology of long-term risk. Workshop + Princeton + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 1-2 + + + 137 + 150 + + 14 + 1 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">The origins and consequences of democratic citizens' policy agendas : A study of popular concern about global warming</ttl> + + + <ttl type="main" lang="eng">Global warming: The psychology of long-term risk</ttl> + + + + Jon A. + KROSNICK + + + Allyson L. + HOLBROOK + + + Laura + LOWE + + + Penny S. + VISSER + + + Michael + OPPENHEIMER + Editor + Editeur scientifique + + + Alexander + TODOROV + Editor + Editeur scientifique + + + Departments of Communication, Political Science, and Psychology, Stanford University 432 McClatchy Hall, 450 Serra Mall + Stanford, CA 94305 + + + + + Departments of Public Administration and Psychology, Survey Research Laboratory, MC336, University of Illinois at Chicago, 412 S Peoria St., Sixth Floor + Chicago, IL 60607 + + + + + NFO Ad: Impact, 44 Montgomery St., Suite 2090 + San Francisco, CA 94104 + + + + + Department of Psychology, University of Chicago, 5848 S. University Avenue + Chicago, IL 60637 + + + + + Department of Geosciences and the Woodrow Wilson School, Princeton University + + + + + Department of Psychology and the Woodrow Wilson School, Princeton University + + + + + Cooperative Institute for Climate Science + + + Organiser of meeting + Organisateur de congrès + + + Princeton University'fs Woodrow Wilson School of Public and International Affairs. Program in Science, Technology, and Environmental Policy + + + Organiser of meeting + Organisateur de congrès + + + + + Amérique du Nord + North America + America del norte + + + Système alerte + Warning system + + + Perception du risque + Risk perception + Percepción del riesgo + + + Ecologie sociale + + + Sociologie environnementale + + + Etats Unis + United States + Estados Unidos + + + Ecologie humaine + human ecology + Ecología humana + + + Politique environnement + Environmental policy + Política medio ambiente + + + Modélisation + Modeling + Modelización + + + Mass media + Mass media + Medios comunicación de masas + + + Expérience personnelle + Personal experience + Experiencia personal + + + Attitude + Attitude + Actitud + + + Opinion publique + Public opinion + Opinión pública + + + Perception sociale + Social perception + Percepción social + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Environnement. Ecologie. + Environment. Ecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + This article proposes and tests a model of the causes and consequences of Americans' judgments of the national seriousness of global warming. The model proposes that seriousness judgments about global warming are a function of beliefs about the existence of global warming, attitudes toward it, the certainty with which these beliefs and attitudes are held, and beliefs about human responsibility for causing global warming and people's ability to remedy it. The model also proposes that beliefs about whether global warming is a problem are a function of relevant personal experiences (with the weather) and messages from informants (in this case, scientists), that attitudes toward global warming are a function of particular perceived consequences of global warming, and that certainty about these attitudes and beliefs is a function of knowledge and prior thought. Data from two representative sample surveys offer support for all of these propositions, document effects of national seriousness judgments on support for ameliorative efforts generally and specific ameliorative policies, and thereby point to psychological mechanisms that may be responsible for institutional and elite impact on the public's assessments of national problem importance and on public policy preferences. + + + Springer + Dordrecht + + + + + + Global warming: The psychology of long-term risk. Workshop + Princeton + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 1-2 + + + 7 + 43 + + 37 + 4 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">The perception and valuation of the risks of climate change : A rational and behavioral blend</ttl> + + + <ttl type="main" lang="eng">Global warming: The psychology of long-term risk</ttl> + + + + W. + KIP VISCUSI + + + Richard J. + ZECKHAUSER + + + Michael + OPPENHEIMER + Editor + Editeur scientifique + + + Alexander + TODOROV + Editor + Editeur scientifique + + + Harvard Law School, 1575 Massachusetts Avenue + Cambridge, MA 02138 + + + + + Kennedy School of Government, Harvard University + Cambridge, MA 02138 + + + + + Department of Geosciences and the Woodrow Wilson School, Princeton University + + + + + Department of Psychology and the Woodrow Wilson School, Princeton University + + + + + Cooperative Institute for Climate Science + + + Organiser of meeting + Organisateur de congrès + + + Princeton University'fs Woodrow Wilson School of Public and International Affairs. Program in Science, Technology, and Environmental Policy + + + Organiser of meeting + Organisateur de congrès + + + + + Amérique du Nord + North America + America del norte + + + Perception du risque + Risk perception + Percepción del riesgo + + + Ecologie sociale + + + Sociologie environnementale + + + Etats Unis + United States + Estados Unidos + + + Analyse comportementale + Behavioral analysis + Análisis conductual + + + Rationnel irrationnel + Rational irrational + Racional irracional + + + Prise décision + decision making + + + Attitude + Attitude + Actitud + + + Protection environnement + environment protection + Protección medio ambiente + + + Politique environnement + Environmental policy + Política medio ambiente + + + Enquête opinion + Opinion inquiry + Encuesta opinión + + + Opinion publique + Public opinion + Opinión pública + + + Perception sociale + Social perception + Percepción social + + + Réchauffement planétaire + global warming + + + Ecologie humaine + human ecology + Ecología humana + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Environnement. Ecologie. + Environment. Ecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + Over 250 respondents - graduate students in law and public policy - assessed the risks of climate change and valued climate-change mitigation policies. Many aspects of their behavior were consistent with rational behavior. For example, respondents successfully estimated distributions of temperature increases in Boston by 2100. The median value of best estimates was 1-3 degrees Fahrenheit. In addition, people with higher risk estimates, whether for temperature or related risks (e.g., hurricane intensities) offered more to avoid warming. Median willingness to pay (WTP) to avoid global warming was $0.50/gallon, and 3% of income. And important scope tests (e.g., respondents paid more for bigger accomplishments) were passed. However, significant behavioral propensities also emerged. For example, accessibility of neutral information on global warming boosted risk estimates. Warming projections correlated with estimates for unrelated risks, such as earthquakes and heart attacks. The implied WTP for avoidance was much greater when asked as a percent of income than as a gas tax, a percent thinking bias. Home team betting showed itself; individuals predicting a Bush victory predicted smaller temperature increases. In the climate-change arena, behavioral decision tendencies are like a fun-house mirror: They magnify some estimates and shrink others, but the contours of rational decision remain recognizable. + + + Springer + Dordrecht + + + + + + Global warming: The psychology of long-term risk. Workshop + Princeton + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 1-2 + + + 151 + 177 + + 27 + 1 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Tree-ring reconstructed maize yield in Central Mexico: 1474-2001</ttl> + + + + Matthew D. + THERRELL + + + David W. + STAHLE + + + Jose + VILLANUEVA DIAZ + + + Eladio H. + CORNEJO OVIEDO + + + Malcolm K. + CLEAVELAND + + + Department of Geosciences, University of Arkansas + Fayetteville, Arkansas 72701 + + + + + Instituto Nacional de Investigaciones Forestales y Agropecurias (INIFAP), KM 6.5, Margen Derecha Canal Sacramento + Gomez Palacio, Durango 35140 + + + + + Departamento Forestal, Universidad Autonoma Agraria Antonio Narro Buenavista + Saltillo, Coahuila 25315 + + + + + + + Amérique + America + + + Angiospermae + Angiospermae + Angiospermae + + + Monocotyledones + Monocotyledones + Monocotyledones + + + Gramineae + Gramineae + Gramineae + + + Plante céréalière + Cereal crop + Planta cerealista + + + Spermatophyta + Spermatophyta + Spermatophyta + + + Gymnospermae + Gymnospermae + Gymnospermae + + + Coniferales + Coniferales + Coniferales + + + Reconstruction historique + Historical reconstruction + Reconstrucción histórico + + + Climatologie dynamique + Dynamical climatology + Climatología dinámica + + + Mexique + Mexico + + + Siècle 19eme + Century 19th + Siglo 19 + + + Siècle 18eme + Century 18th + Siglo 18 + + + Siècle 17eme + Century 17th + Siglo 17 + + + Siècle 16eme + Century 16th + Siglo 16 + + + Siècle 15eme + Century 15th + Siglo 15 + + + Siècle 20eme + Century 20th + Siglo 20 + + + Famine + Famine + + + Gel + gels + + + Sécheresse + Drought + + + Précipitation atmosphérique + atmospheric precipitation + Precipitación atmosférica + + + Rendement + Yield + Rendimiento + + + Zea mays + Zea mays + Zea mays + + + Production agricole + Agricultural production + Producción agrícola + + + Agriculture + Agriculture + + + Pseudotsuga menziesii + Pseudotsuga menziesii + Pseudotsuga menziesii + + + Dendrochronologie + Dendrochronology + + + Dendroclimatologie + Dendroclimatology + + + Paléoclimat + paleoclimate + Paleoclima + + + Variation climat + Climate variation + Variación clima + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Economie agricole. + Agricultural economics. + + + Mexique et Amérique centrale. + Mexico and Central America + + + AMERIQUE ET REGIONS ARCTIQUES + AMERICA AND ARCTIC REGIONS + + + PREHISTOIRE ET PROTOHISTOIRE + PREHISTORY AND PROTOHISTORY + + + + Maize was domesticated more than 6,000 years ago in central Mexico, and remains a vital staple food and cultural symbol in Mesoamerica. Maize yield in the central highlands is strongly dependant on adequate rainfall early in the growing season (April-June) because late maturation of the crop may result in damage from autumn frost. Climate-induced crop failures with profound socioeconomic impacts have punctuated Mexican history. However, reliable records of maize harvest have not been available until very recently, and historical records of crop yield and price are discontinuous and can be difficult to interpret. We have developed a continuous, exactly dated, tree-ring reconstruction of maize yield variability in central Mexico from 1474 to 2001 that provides new insight into the history of climate and food availability in the heartland of the Mesoamerican cultural province. The reconstruction indicates that seven of the most severe agricultural crises in Mexican history occurred during decadal-scale episodes of reconstructed maize shortfalls. + + + Springer + Dordrecht + + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 74 + 4 + + + 493 + 504 + + 12 + 2 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Efficient DNA extraction and amplification of samples from the archeological site of Pompei (Italy)</ttl> + + + <ttl type="main" lang="eng">Macromolecules in cultural heritage (Selected contributions from the Conference in Catania(Italy), November 9-11, 2005)</ttl> + + + + Giancarlo + RANALLI + + + Claudia + BELLI + + + Giuseppe + LUSTRATO + + + Antonia + MELOSCIA + + + Massimiliano + ORSINI + + + Francesca + Cappitelli + Editor + Editeur scientifique + + + Yvonne + Shashoua + Editor + Editeur scientifique + + + Espedito + Vassallo + Editor + Editeur scientifique + + + DISTAAM, University of Molise, Via de Sanctis + 86100 Campobasso + + + + + Istituto di Igiene Università Cattolica del Sacro Cuore + 00168 Roma + + + + + + + Europe + Europe + Europa + + + Pompei + + + Etude expérimentale + Experimental study + Estudio experimental + + + Etude comparative + Comparative study + Estudio comparativo + + + Morphologie + Morphology + Morfología + + + Réaction chaîne polymérase + Polymerase chain reaction + Reacción cadena polimerasa + + + RNA 16S + 16S-RNA + ARN 16S + + + Extraction solide liquide + Solid liquid extraction + Extracción sólido líquido + + + Bactérie + Bacteria + Bacteria + + + Communauté microbienne + Microbial community + Comunidad microbiana + + + Italie + Italy + Italia + + + Site archéologique + Archaeological sites + Emplazamiento arqueológico + + + Latérite + Laterite + Laterita + + + Polymers, paint and wood industries + Polymères, industries des peintures et bois + + + Polymers, paint and wood industries + Polymères, industries des peintures et bois + + + Divers. + Miscellaneous. + + + Biodétérioration. Bioencrassement. + Biodeterioration. Biofouling. + + + BIOTECHNOLOGIES. + BIOTECHNOLOGY. + + + Analyses physiques et chimiques. + Physical and chemical analysis + + + METHODOLOGIE ET ETUDES GENERALES + METHODOLOGY AND GENERAL STUDIES + + + PREHISTOIRE ET PROTOHISTOIRE + PREHISTORY AND PROTOHISTORY + + + + Due to their growth and metabolism, microorganisms can cause severe damage to Cultural Heritage, through mechanical and chemical processes. In this paper we used molecular approaches to study bacterial communities on samples from the archeological site of Pompei (Italy). In particular four DNA extraction methods without prior cultivation of the microflora were compared. In terms of efficiency, the DNA extraction method based on the Tri-Reagent<TM> kit gave the best results. All extraction protocols coupled with 16S rDNA fragments PCR amplification were satisfactory; but the best results were obtained by Klentaq DNA LA Polymerase; this enzyme can be considered an effective tool for amplification of DNA from Cultural Heritage and possibly other environmental samples. + + + Wiley-VCH + Allemagne + + + + + + Macromolecules in cultural heritage. Conference + + + + + + + INIST-CNRS + 4111 S + + + + Macromolecular symposia + Macromol. symp. + + 2006 + 238 + + + 98 + 104 + + 7 + 17 ref. + Notes bibliogr. Index + + + 1 + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Public views on climate change : European and USA perspectives</ttl> + + + <ttl type="main" lang="eng">Global warming: The psychology of long-term risk</ttl> + + + + Irene + LORENZONI + + + Nick F. + PIDGEON + + + Michael + OPPENHEIMER + Editor + Editeur scientifique + + + Alexander + TODOROV + Editor + Editeur scientifique + + + Centre for Environmental Risk and Tyndall Centre for Climate Change Research, Zuckerman Institute for Connective Environmental Research, School of Environmental Sciences, University of East Anglia + Norwich NR4 7TJ + + + + + Department of Geosciences and the Woodrow Wilson School, Princeton University + + + + + Department of Psychology and the Woodrow Wilson School, Princeton University + + + + + Cooperative Institute for Climate Science + + + Organiser of meeting + Organisateur de congrès + + + Princeton University'fs Woodrow Wilson School of Public and International Affairs. Program in Science, Technology, and Environmental Policy + + + Organiser of meeting + Organisateur de congrès + + + + + Amérique du Nord + North America + America del norte + + + Perception du risque + Risk perception + Percepción del riesgo + + + Processus social + + + Ecologie sociale + + + Sociologie environnementale + + + Europe + Europe + Europa + + + Etats Unis + United States + Estados Unidos + + + Ecologie humaine + human ecology + Ecología humana + + + Enquête opinion + Opinion inquiry + Encuesta opinión + + + Analyse factorielle + factor analysis + Análisis factorial + + + Attitude + Attitude + Actitud + + + Etude comparative + Comparative study + Estudio comparativo + + + Perception sociale + Social perception + Percepción social + + + Opinion publique + Public opinion + Opinión pública + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Environnement. Ecologie. + Environment. Ecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + If uncontrolled, human influences on the climate system may generate changes that will endanger various aspects of life on Earth. The precise implications of the scientific claims about climate change, and the extent to which they pose dangers to various populations, are becoming intensely debated at many levels in relation to policy. How 'danger' is interpreted will ultimately affect which actions are taken. In this paper, we examine how climate change is conceptualised by publics in Europe and in the USA. Although there is widespread concern about climate change, it is of secondary importance in comparison to other issues in people's daily lives. Most individuals relate to climate change through personal experience, knowledge, the balance of benefits and costs, and trust in other societal actors. We analyse these factors through findings from various surveys and studies, which highlight both the distinctiveness and some shared perspectives at a generalised level. We reflect upon these in relation to trust and responsibility for climate change action, and risk communication, supporting the call for discourses about climate change to also be situated in people's locality, as a means of increasing its saliency. + + + Springer + Dordrecht + + + + + + Global warming: The psychology of long-term risk. Workshop + Princeton + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 77 + 1-2 + + + 73 + 95 + + 23 + 2 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Adaptive governance and climate change in the tropical highlands of Western South America</ttl> + + + <ttl type="main" lang="eng">Economy, politics and institutions: from adaptation to adaptive management in climate change</ttl> + + + + Kenneth R. + YOUNG + + + Jennifer K. + LIPTON + + + Joseph + ARVAI + Editor + Editeur scientifique + + + Tomas + KOONTZ + Editor + Editeur scientifique + + + Paul + ROBBINS + Editor + Editeur scientifique + + + Brent + SOHNGEN + Editor + Editeur scientifique + + + Alexander + THOMPSON + Editor + Editeur scientifique + + + Department of Geography and the Environment, University of Texas at Austin + Austin, TX 78712 + + + + + Environmental Science and Policy Program, and Dept. of CARRS, Michigan State University + + + + + School of Natural Resources, Ohio State University + + + + + Department of Geography and Regional Development, University of Arizona + + + + + Department of Agricultural, Environmental, and Development Economics, Ohio State University + + + + + Department of Political Science, Ohio State University + + + + + Climate Change and Environmental Research Initiative (CCERI) + + + Organiser of meeting + Organisateur de congrès + + + Environmental Policy Initiative (EPI) + + + Organiser of meeting + Organisateur de congrès + + + Mershon Center + + + Organiser of meeting + Organisateur de congrès + + + Cluster for Interdisciplinary Research on International Themes (CIRIT) + + + Organiser of meeting + Organisateur de congrès + + + + + Sociologie environnementale + + + Andes + Andes + Andes + + + Amérique du Sud + South America + America del sur + + + Ecologie humaine + human ecology + Ecología humana + + + Changement organisationnel + Organizational change + Cambio organizacional + + + Adaptabilité + Adaptability + Adaptabilidad + + + Adaptation + adaptation + Adaptación + + + Tiers Monde + Third World + + + Agriculture durable + Sustainable agriculture + Agricultura sostenible + + + Système culture + Cropping system + Sistema cultural + + + Agroécosystème + Agroecosystem + Agroecosistema + + + Occupation sol + land cover + + + Diversité espèce + species diversity + Diversidad especies + + + Ressource naturelle + natural resources + Recurso natural + + + Impact environnement + environment impact + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Agroécologie générale. + General agroecology. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + Climate changes occurring during the past several decades in the high elevations of the tropical Andes Mountains have implications for the native plant and animal species, for the ecological integrity of the affected land cover, and for the human-biophysical systems involved. Consequences are also probable for rural inhabitants and their livelihoods, especially for farmers and pastoralists. Biophysical factors have always changed in these mountainous zones; the extent and degree of alteration acting on native and agricultural biodiversity is the concern. Addressing these climate changes is probably within the adaptive capacity of many local land-use systems, unless external socioeconomic or political forces are unsupportive or antagonistic. Suitable programs to provide information, subsidies, or alternatives could be designed. We highlight some of the inherent resiliencies of natural and cultural systems in the Andes and suggest that these systems contain lessons that could be useful elsewhere, in terms of the traits that allow for the sustainable utilization of dynamic and heterogeneous landscapes. + + + Springer + Dordrecht + + + + + + Conference on Adaptive Research and Governance in Climate Change + Columbus, OH + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 78 + 1 + + + 63 + 102 + + 40 + 10 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="fre">Dans l'oeil du cyclone</ttl> + <ttl type="translated" lang="eng">In the cyclonic eye</ttl> + + + + Laurence + EYMARD + + + + + Cyclone tropical + Tropical cyclone + Ciclón tropical + + + Cataclysme + Natural disaster + Cataclismo + + + Navigation maritime + Sea navigation + Navegación maritima + + + Climatologie + Climatology + Climatología + + + Océanographie + oceanography + Oceanografía + + + Siècle 18eme + Century 18th + Siglo 18 + + + Peinture ancienne + Ancient paint + Pintura antigua + + + Art + Art + Arte + + + Multidisciplinary + Multidisciplinaire + + + Divers. + Other topics in atmospheric geophysics. + + + Géophysique. Océanographie. Art de la navigation. + Geophysics. Oceanography. Navigation + + + SCIENCES ET TECHNIQUES DE LA TERRE + EARTH SCIENCES + + + HISTOIRE DES SCIENCES ET DES TECHNIQUES. + HISTORY OF SCIENCE AND TECHNOLOGY + + + + Pour la science + Paris + + + + + + + + INIST-CNRS + 18764 + + + + Pour la science + Pour sci. + + 2006 + 348 + + + 96 + 97 + + 2 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Management under anarchy : The international politics of climate change</ttl> + + + <ttl type="main" lang="eng">Economy, politics and institutions: from adaptation to adaptive management in climate change</ttl> + + + + Alexander + THOMPSON + + + Joseph + ARVAI + Editor + Editeur scientifique + + + Tomas + KOONTZ + Editor + Editeur scientifique + + + Paul + ROBBINS + Editor + Editeur scientifique + + + Brent + SOHNGEN + Editor + Editeur scientifique + + + Alexander + THOMPSON + Editor + Editeur scientifique + + + Department of Political Science, Ohio State University, 2140 Derby Hall, 154 North Oval Mall + Columbus, OH 43210 + + + + + Environmental Science and Policy Program, and Dept. of CARRS, Michigan State University + + + + + School of Natural Resources, Ohio State University + + + + + Department of Geography and Regional Development, University of Arizona + + + + + Department of Agricultural, Environmental, and Development Economics, Ohio State University + + + + + Department of Political Science, Ohio State University + + + + + Climate Change and Environmental Research Initiative (CCERI) + + + Organiser of meeting + Organisateur de congrès + + + Environmental Policy Initiative (EPI) + + + Organiser of meeting + Organisateur de congrès + + + Mershon Center + + + Organiser of meeting + Organisateur de congrès + + + Cluster for Interdisciplinary Research on International Themes (CIRIT) + + + Organiser of meeting + Organisateur de congrès + + + + + Sociologie environnementale + + + Ecologie humaine + human ecology + Ecología humana + + + Efficacité + efficiency + + + Implémentation + Implementation + Implementación + + + Méthode adaptative + Adaptive method + Método adaptativo + + + Adaptation + adaptation + Adaptación + + + Coopération internationale + international cooperation + Cooperación internacional + + + Accord international + International agreements + + + Politique environnement + Environmental policy + Política medio ambiente + + + Gestion risque + Risk management + Gestión riesgo + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Pollution globale de l'environnement. + Global environmental pollution. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + This article analyzes climate change from the perspective of international politics. In the anarchy of the international system, various cooperation problems have stalled the formation of an effective climate regime at the international level. Obstacles occur at three stages of regime formation: the bargaining stage, the transition stage, and the implementation stage. The importance of the transition stage of cooperation, which takes place between the signing of an agreement and its entry into force, has been overlooked by international relations scholars and is particularly important in the climate case. The article assesses the possibility of applying 'adaptive management' principles to climate change as a partial response to these political obstacles. While such an approach has significant appeal given the uncertainty surrounding the human-climate interface, its experimental, top-down characteristics are not politically feasible at the international level. I recommend certain modifications of existing institutions and practices to improve international information sharing and facilitate efficient learning. These changes would serve to promote a decentralized and passive - and thus politically viable - version of adaptive management, an effective approach to dealing with climate change at the global level. + + + Springer + Dordrecht + + + + + + Conference on Adaptive Research and Governance in Climate Change + Columbus, OH + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 78 + 1 + + + 7 + 29 + + 23 + 2 p.1/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Institutional adaptation of water resource infrastructures to climate change in Eastern Ontario</ttl> + + + <ttl type="main" lang="eng">Economy, politics and institutions: from adaptation to adaptive management in climate change</ttl> + + + + P. + CRABBE + + + M. + ROBIN + + + Joseph + ARVAI + Editor + Editeur scientifique + + + Tomas + KOONTZ + Editor + Editeur scientifique + + + Paul + ROBBINS + Editor + Editeur scientifique + + + Brent + SOHNGEN + Editor + Editeur scientifique + + + Alexander + THOMPSON + Editor + Editeur scientifique + + + Department of Economics, University of Ottawa, P.O. box 450, Stn A + Ottawa KIN 6N5 + + + + + Department of Earth Sciences, University of Ottawa, P.O. box 450, Stn A + Ottawa KIN 6N5 + + + + + Environmental Science and Policy Program, and Dept. of CARRS, Michigan State University + + + + + School of Natural Resources, Ohio State University + + + + + Department of Geography and Regional Development, University of Arizona + + + + + Department of Agricultural, Environmental, and Development Economics, Ohio State University + + + + + Department of Political Science, Ohio State University + + + + + Climate Change and Environmental Research Initiative (CCERI) + + + Organiser of meeting + Organisateur de congrès + + + Environmental Policy Initiative (EPI) + + + Organiser of meeting + Organisateur de congrès + + + Mershon Center + + + Organiser of meeting + Organisateur de congrès + + + Cluster for Interdisciplinary Research on International Themes (CIRIT) + + + Organiser of meeting + Organisateur de congrès + + + + + Amérique du Nord + North America + America del norte + + + Canada + Canada + Canada + + + Canada Est + Eastern Canada + Canadá Este + + + Sociologie environnementale + + + Ontario + Ontario + Ontario + + + Ecologie humaine + human ecology + Ecología humana + + + Changement organisationnel + Organizational change + Cambio organizacional + + + Politique environnement + Environmental policy + Política medio ambiente + + + Eau souterraine + ground water + Agua subterránea + + + Qualité eau + water quality + Calidad agua + + + Adaptabilité + Adaptability + Adaptabilidad + + + Participation communautaire + Community participation + Participación comunitaria + + + Echelon municipal + Municipal scope + Escalón municipal + + + Echelon local + Local scope + Escala local + + + Adaptation + adaptation + Adaptación + + + Infrastructure + Infrastructure + Infraestructura + + + Gestion ressource eau + water resource management + Gestión recurso agua + + + Etude cas + case studies + Estudio caso + + + Impact environnement + environment impact + + + Réchauffement planétaire + global warming + + + Modification climat + climate modification + + + Changement planétaire + global change + Cambio planetario + + + Meteorology + Météorologie + + + Environment + Environnement + + + Geology + Géologie + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Climatologie. Bioclimatologie. Changement climatique. + Climatology. Bioclimatology. Climate change. + + + Ressources en eau. + Water resources. + + + Ressources en eau. + Water resources. + + + Problèmes de l'environnement. + Environmental Problems. + + + ECOLOGIE HUMAINE ET DEMOGRAPHIE + HUMAN ECOLOGY AND DEMOGRAPHY + + + SOCIOLOGIE + SOCIOLOGY + + + + Institutional barriers and bridges to local climate change impacts adaptation affecting small rural municipalities and Conservation Authorities (CAs are watershed agencies) in Eastern Ontario (Canada) are examined, and elements of a community-based adaptation strategy related to water infrastructures are proposed as a case-study in community adaptation to climate change. No general water scarcity is expected for the region even under unusually dry weather scenarios. Localized quantity and quality problems are likely to occur especially in groundwater recharge areas. Some existing institutions can be relied on by municipalities to build an effective adaptation strategy based on a watershed/region perspective, on their credibility, and on their expertise. Windows of opportunity or framing issues are offered at the provincial level, the most relevant one in a federal state, by municipal emergency plan requirements and pending watershed source water protection legislation. Voluntary and soon to be mandated climate change mitigation programs at the federal level are other ones. + + + Springer + Dordrecht + + + + + + Conference on Adaptive Research and Governance in Climate Change + Columbus, OH + + + + + + + INIST-CNRS + 17218 + + + + Climatic change + Clim. change + + 2006 + 78 + 1 + + + 103 + 133 + + 31 + 2 p. + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="fre">La dynamique des couleurs, des images et des sons (l'ingénieur et l'art, deuxième symposium international)</ttl> + + + + Ecole Nationale Supérieure des Arts et Métiers + Aix en Provence + + + Organiser of meeting + Organisateur de congrès + + + + + Peinture + Painting + + + Oeuvre art + Cultural artefact + Obra arte + + + Son musical + Musical sound + Sonido musical + + + Traitement signal acoustique + Acoustic signal processing + + + Vision couleur + Color vision + Vision color + + + Rendu couleur + Color rendering + Fatiga color + + + Analyse image + Image analysis + Análisis imagen + + + Traitement signal + Signal processing + Procesamiento señal + + + Traitement image + Image processing + Procesamiento imagen + + + Telecommunications + Télécommunications + + + Divers. + Miscellaneous. + + + Analyse du document, informatique et mathématiques. + Document analysis, computing, mathematics + + + GENERALITES + GENERALITIES + + + ART ET ARCHEOLOGIE + ART AND ARCHAEOLOGY + + + + ENSAM + Aix en Provence + + + + + + L' ingénieur et l'art. Symposium international + 2 + Aix en Provence + + + + + + + INIST-CNRS + Y 38371 + + + + 163 + Illustration + Illustration + Notes bibliogr + + + 1 + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">From the micro-to the macro- : Managing the conservation of the warship, Vasa</ttl> + + + <ttl type="main" lang="eng">Macromolecules in cultural heritage (Selected contributions from the Conference in Catania(Italy), November 9-11, 2005)</ttl> + + + + Emma + HOCKER + + + Francesca + Cappitelli + Editor + Editeur scientifique + + + Yvonne + Shashoua + Editor + Editeur scientifique + + + Espedito + Vassallo + Editor + Editeur scientifique + + + The Vasa Museum, National Maritime Museums of Sweden + Stockholm + + + + + + + Europe + Europe + Europa + + + Siècle 17 + + + Conservation + Conservation + Conservación + + + Dépôt sel + Salt deposits + + + Formation dépôt + Deposit formation + Formación depósito + + + Ethylène oxyde polymère + Ethylene oxide polymer + Etileno óxido polímero + + + Bois ancien + Ancient wood + Madera antigua + + + Bois amélioré + Modified wood + Madera mejorada + + + Suède + Sweden + Suecia + + + Patrimoine historique + Historical heritage + Patrimonio histórico + + + Navire guerre + Warship + Buque guerra + + + Polymers, paint and wood industries + Polymères, industries des peintures et bois + + + Polymers, paint and wood industries + Polymères, industries des peintures et bois + + + Dégradation et protection. + Degradation and preservation. + + + Conservation. + Conservation + + + METHODOLOGIE ET ETUDES GENERALES + METHODOLOGY AND GENERAL STUDIES + + + PREHISTOIRE ET PROTOHISTOIRE + PREHISTORY AND PROTOHISTORY + + + + Sweden's famous warship, Vasa, sank on her maiden voyage in August 1628, and remained on the bottom of Stockholm harbour for 333 years. Raised in 1961, she became the first large-scale wooden object to be treated with polyethylene glycol (PEG). In the summer of 2000 a number of acidic salt precipitations were noticed on the surface of the ship and on wooden artefacts in the storerooms. An international research project has been established to look into the causes of this problem and suggest possible re-treatments. Meanwhile projects are underway to monitor movements in the ship, to build a better support system, and to replace the thousands of iron bolts holding the structure together, while a sophisticated new climate system has recently been installed in the museum. + + + Wiley-VCH + Allemagne + + + + + + Macromolecules in cultural heritage. Conference + + + + + + + INIST-CNRS + 4111 S + + + + Macromolecular symposia + Macromol. symp. + + 2006 + 238 + + + 16 + 21 + + 6 + 10 ref. + Notes bibliogr. Index + + + 1 + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="eng">Soil resources of the ancient maya at Piedras Negras, Guatemala</ttl> + + + + Fabian G. + FERNA'NDEZ + + + Kristofer D. + JOHNSON + + + Richard E. + TERRY + + + Sheldon + NELSON + + + David + WEBSTER + + + Dep. of Plant and Animal Sciences, Brigham Young Univ + Provo, UT 84602 + + + + + Dep. of Archaeology, Penn sylvania State Univ + State College, PA 16802 + + + + + + + Amérique Latine + Latin America + America latina + + + Forêt tropicale + Tropical forest + Bosque tropical + + + Relation homme environnement + Man environment interface + Relación hombre medio ambiente + + + Epoque préhistorique + Prehistory + Epoca prehistórica + + + Archéologie + Archaeology + + + Anthropologie + Anthropology + + + Pédologie + Pedology + + + Science terre + Earth science + Ciencia tierra + + + Science du sol + Soil science + Ciencia del suelo + + + Sol + soils + Suelo + + + Spermatophyta + Spermatophyta + Spermatophyta + + + Angiospermae + Angiospermae + Angiospermae + + + Monocotyledones + Monocotyledones + Monocotyledones + + + Gramineae + Gramineae + Gramineae + + + Plantae + Plantae + + + Spermatophyta + Spermatophyta + Spermatophyta + + + Angiospermae + angiosperms + Angiospermae + + + Monocotyledoneae + Monocotyledoneae + + + Terre agricole + Farmland + Tierra agrícola + + + Période précolombienne + Pre-columbian period + + + Epoque précolombienne + Precolumbian period + Época precolombina + + + Mayas + Mayas + Mayas + + + Carbone 13 + + + Sol forestier + forest soils + + + Forêt ombrophile tropicale + Tropical rain forest + Bosque tropical húmedo + + + Matière organique + + + Carbone Isotope + + + Zea mays + Zea mays + Zea mays + + + Gramineae + Gramineae + Gramineae + + + Plante céréalière + Cereal crop + Planta cerealista + + + Type C4 + + + Type C3 + + + Relation sol plante + + + Occupation sol + land cover + + + Erosion sol + + + Déboisement + + + Composition isotopique + + + Reconnaissance sol + + + Mollisol + + + Sol tropical + Tropical soil + Suelo tropical + + + Sol cultivé + Cultivated soil + Suelo cultivado + + + Site archéologique + Archaeological site + + + Guatemala + Guatemala + + + Propriété physique + + + Propriété chimique + + + Pédogenèse + + + Caractéristique sol + + + Ressource naturelle + natural resources + Recurso natural + + + Ressource agricole + Agricultural resources + Recurso agrícola + + + Activité humaine + Human activity + Actividad humana + + + Culture tropicale + Tropical crop + Cultivo tropical + + + Agriculture traditionnelle + Traditional farming + Agricultura tradicional + + + Agriculture plant pathology + Agriculture, phytopathologie + + + Geology + Géologie + + + Sols. + Soils. + + + Inventaire et classification des sols. Cartographie. + Soil surveys, classification and mapping. + + + Pédogenèse. + Soil genesis. + + + Sols. + Soils. + + + Mayas. + Mayas + + + CIVILISATIONS AMERICAINES + American civilisations + + + ART ET ARCHEOLOGIE + ART AND ARCHAEOLOGY + + + + The ancient Maya thrived for centuries in the Petén rain forest of Guatemala. Their impressive architecture and the evidence of highly populated centers attest that the Maya farmers were capable of producing food surpluses. In the eighth to ninth centuries CE the Classic Maya civilization collapsed. The processes leading to its decline are still debated, but unsustainable agricultural practices and exhaustion of natural resources may have contributed. This paper reports on soil formation rates, soil taxonomy, phytolith analysis, and δ13C values of soil organic matter in a rural area near the ancient city of Piedras Negras. Our objective was to understand ancient Maya rural life by linking soil characteristics to ancient agricultural resources and anthropogenic activites. We found that these soils formed at a rate of approximately 0.09 mm yr-1. All 15 soil profiles belonged to the order Mollisols. The soils of the back-slope locations were shallow (<25 cm) and were probably severely eroded at the time of abandonment (ninth century CE). The soils located at the valley's floor were deep, well developed, and potentially good for sustainable agriculture. Phytolith analysis indicated that in ancient times panacoid grasses were dominant in these soils and provided evidence that the forest was cleared for maize (Zea mays L.) agriculture. Stable C isotopes provided evidence that the vegetation shifted from forest (C3) to C4 vegetation during the time of Maya occupation. The toe-slope soils were observed to be less enriched in 13C in profiles closer to Piedras Negras than in those farther away. + + + Soil Science Society of America + Madison, WI + + + + + + + + INIST-CNRS + 6109 + + + + Soil Science Society of America journal + Soil Sci. Soc. Am. j. + + 2005 + 69 + 6 + + + 2020 + 2032 + + 13 + 1 p.3/4 + + + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + + + + <ttl type="main" lang="fre">La science au service de l'art : Transcription automatique de musique ancienne</ttl> + + + <ttl type="main" lang="fre">La dynamique des couleurs, des images et des sons (l'ingénieur et l'art, deuxième symposium international)</ttl> + + + + Michel + WALLET + + + Laboratoire d'Informatique, Université Blaise PASCAL + + + + + Equipe ERATTO, CNRS, IVRY/Seine Institut Universitaire de Technologie, BP 408 + 03107 Montlucon + + + + + Ecole Nationale Supérieure des Arts et Métiers + Aix en Provence + + + Organiser of meeting + Organisateur de congrès + + + + + Musique ancienne + + + Traitement signal acoustique + Acoustic signal processing + + + Instrument musique + Musical instrument + Instrumento musical + + + Son musical + Musical sound + Sonido musical + + + Traitement signal audio + Audio signal processing + + + Transcription automatique + Automatic transcription + Transcripción automática + + + Traitement signal + Signal processing + Procesamiento señal + + + Telecommunications + Télécommunications + + + Divers. + Miscellaneous. + + + Analyse du document, informatique et mathématiques. + Document analysis, computing, mathematics + + + GENERALITES + GENERALITIES + + + ART ET ARCHEOLOGIE + ART AND ARCHAEOLOGY + + + + Science at the service of art : automatic transcription of ancient music + + + ENSAM + Aix en Provence + + + + + + L' ingénieur et l'art. Symposium international + 2 + Aix en Provence + + + + + + + INIST-CNRS + Y 38371 + + + + + 105 + 110 + + 6 + Notes bibliogr + + + 1 + + + + + Copyright 2006 INIST-CNRS. All rights reserved. + INIST + + diff --git a/src/shell/listeCles.txt b/src/shell/listeCles.txt new file mode 100644 index 0000000..9967db8 --- /dev/null +++ b/src/shell/listeCles.txt @@ -0,0 +1,4 @@ +10.1007 +10.1098 +10.1148 +BF02478894 diff --git a/src/shell/listeDOI.txt.gz b/src/shell/listeDOI.txt.gz new file mode 100644 index 0000000..dbac64e --- /dev/null +++ b/src/shell/listeDOI.txt.gz Binary files differ diff --git a/src/shell/parametres.md b/src/shell/parametres.md new file mode 100644 index 0000000..32564be --- /dev/null +++ b/src/shell/parametres.md @@ -0,0 +1,39 @@ +# Paramètres - Shell - UNIX + +## Récupération des paramètres de la ligne de commande + +| | | +| ---- | ------------------------------------ | +| `$0` | nom de la commande | +| `$n` | valeur du nième paramètre | +| `$#` | nombre de paramètres | +| `$*` | liste de tous les paramètres | + +Pour la ligne de commande `sh test.sh a b c`, `$0` vaut `test.sh`, `$#` vaut +`3`, `$*` vaut `a b c`, et `$2` vaut `b` (à l'intérieur du script). + +La commande `shift` décale les paramètres (en perdant le premier) : le deuxième +paramètre devient le premier, le troisième devient le deuxième, etc. (c'est +utile quand on utilise une boucle pour traiter les paramètres). + +## Variables spéciales + +| | | +| ---- | ------------------------------------------------------------ | +| `$$` | numéro de processus de la dernière commande | +| `$?` | statut de la dernière commande (`0` = tout s'est bien passé) | + +## Caractères spéciaux + +Comme à chaque fois qu'on a un caractère spécial (par exemple `$`), on a des +caractères d'échappement. + +| | | | | +| ----------- | ------------------------------------------------ | ---------------- | ------------------------------ | +| `\` | banalise le caractère suivant | `echo \$0 $0` | `$0 /usr/bin/ksh` | +| `"..."` | banalise les caractères sauf `\`, `$` et `` ` `` | `echo "\$0 $0"` | `$0 /usr/bin/ksh` | +| `'...'` | banalise tous les caractères | `echo '\$0 $0'` | `\$0 $0` | +| `` `...` `` | substitution de commande | ``echo `date` `` | `Mon May 5 16:54:14 MEST 2003` | + +> 💡 En 2023, il est conseillé d'utiliser `$(commande)` pour la substitution de commande. +> L'exemple devient ainsi `echo $(date)`. diff --git a/src/shell/scripts.md b/src/shell/scripts.md new file mode 100644 index 0000000..cb3dc46 --- /dev/null +++ b/src/shell/scripts.md @@ -0,0 +1,36 @@ +# Scripts - Shell -UNIX + +Un fichier script contenant des commandes shell (par exemple des initialisations +de variables, une automatisation de tâches,...) peut être exécuté : + +- soit par `sh nom_fichier_shell`, +- soit par `. nom_fichier_shell` (la différence avec la manière précédente est + que c'est comme si on tapait le contenu du fichier dans le shell courant, et + non comme si on lançait un autre shell, c'est important par exemple pour les + définitions de variables), +- soit en rendant le fichier exécutable (`chmod u+x nom_fichier_shell`), puis en + tapant le nom du fichier. + Cela fonctionne uniquement quand le répertoire courant, `.`, est dans `$PATH`, + sinon il faut dire au shell que c'est le fichier qui est dans le répertoire + courant qu'on veut exécuter : `./nom_fichier_shell`. + +Pour être sûr du shell qui est en train de s'exécuter dans un fichier de script shell, il est plus prudent d'ajouter son nom en début de fichier la ligne (par exemple, ici sh) : + +```bash +#!/bin/sh +``` + +Cette ligne a la forme d'un commentaire (elle commence par `#`), on l'appelle un +*shebang*, et signale au shell appelant qu'il faut utiliser le shell `/bin/sh` +pour exécuter le fichier. +Ce *shebang*, qui est un en-tête, doit se mettre sur la première ligne. + +Une seconde ligne peut être intéressante car elle peut influer sur l'ordre de +tri avec `sort` par exemple. +Pour garantir un ordre de tri lexicographique, on peut positionner la variable +d'environnement suivante comme suit `export LC_COLLATE=C`. + +## Référence + +- [Programmation shell sous Unix/Linux - ksh, bash, sh (5e édition) | Editions + ENI](https://www.editions-eni.fr/open/mediabook.aspx?idR=71ff518ce4cda68b5004c431607616de) diff --git a/src/shell/tp.md b/src/shell/tp.md new file mode 100644 index 0000000..e3c37a5 --- /dev/null +++ b/src/shell/tp.md @@ -0,0 +1,184 @@ +# Travaux pratiques - Shell - UNIX + +> ⚠ Tous les shells qui seront créés par la suite devront avoir le droit +> d'exécution correctement positionné, au moins pour leur propriétaire. + +## Recherche d'information sur un utilisateur + +1. Écrivez un script shell `infouser.sh` qui permette de chercher si un + utilisateur d'un nom donné existe sur votre machine, en affichant sa + référence complète (c'est-à-dire sans aucun filtrage). + Le nom recherché sera passé comme paramètre au shell. + La recherche portera dans le fichier `/etc/passwd`. + +
+ Voir la solution + + > ⚠ Comme d'habitude quand on veut traiter un fichier, il vaut mieux + > visionner son contenu, avant de vouloir l'exploiter (`more /etc/passwd`). + + ```bash + #!/bin/sh + grep $1 /etc/passwd + ``` + + + +2. Modifiez ce shell pour qu'il teste si un paramètre est bien passé en ligne. + En cas d'erreur (aucun paramètre ou plus d'un), un message sera affiché + expliquant la bonne syntaxe à suivre. + +
+ Voir la solution + + ```bash + #!/bin/sh + + if test $# -ne 1 + then + echo Mauvais nombre de parametres. + echo + echo Usage: $0 uid + exit 1 + fi + + grep $1 /etc/passwd + ``` + +
+ +## Quelques manipulations sur un corpus XML + +Pour cette partie du TP, il vous faut d'abord récupérer le corpus suivant : +[`francis.exodic.xml`](./francis.exodic.xml) + +Ce fichier contient 20 notices en XML Exodic, dans une forme indentée, son +exploration préparatoire est conseillée. + +1. Écrivez un script shell qui compte le nombre de notices, en passant le nom de + fichier en paramètre. + L'élément racine se nomme `exodic`. + +
+ Voir la solution + + ```bash + #!/bin/sh + + if test $# -ne 1 + then + echo Mauvais nombre de parametres. + echo + echo Usage: $0 fichier + exit 1 + fi + + NB_NOTICES=`cat $1 | grep " + +2. Modifiez le shell précédent pour qu'il teste en plus l'existence du fichier + demandé avant traitement, puis pour qu'il sorte les résultats dans un fichier + nommé `resultats.txt`. + +
+ Voir la solution + + ```bash + #!/bin/sh + + if test $# -ne 1 + then + echo Mauvais nombre de parametres. + echo + echo Usage: $0 fichier + exit 1 + fi + + if test ! -f $1 + then + echo $1 "n'existe pas (ou n'est pas un fichier)." + exit 2 + fi + + NB_NOTICES=`cat $1 | grep " resultats.txt + ``` + + > ⚠ Cette fois, on a mis la chaîne contenant les apostrophes (caractère + > spécial) entre guillemets pour les banaliser. + +
+ +3. Installer et parcourir des fichiers dublin core d'un arbre de répertoires + pour afficher le type de document des notices qui y sont présentes. + Il faut d'abord récupérer le fichier [`data_dc.tar.gz`](./data_dc.tar.gz). + + Votre shell devra décompresser puis installer l'archive du fichier tar sous + `Formation/TP_dc`. + Cela donnera un répertoire `dc` contenant 5 répertoires nommés de 1 à 5. + Ces sous-répertoires contiennent chacun un fichier `dublin_core.xml` avec + une seule notice (qu'il est conseillé d'aller regarder). + + Ces opérations réalisées, la suite du shell devra chercher le type de + document de chaque notice, identifiable avec `dcvalue element="type"`. + Cette information trouvée, les résultats seront écrits dans le fichier + `typesDC.txt`. + +
+ Voir la solution + + ```bash + #!/bin/sh + + # En etant dans le repertoire Formation/TP_dc + gunzip data_dc.tar.gz + tar -xvf data_dc.tar + + for FILE in dc/*/*.xml + do + cat $FILE | grep 'dcvalue element="type"' >> typesDC.txt + done + ``` + + > ⚠ Cette fois, on a mis la chaîne contenant les guillemets (caractère spécial) + > entre apostrophes pour les banaliser. + + > ⚠ On utilise une double redirection en sortie `>>` car il faut concaténer les + > différentes opérations d'écriture dans le fichier résultat. +
+ +4. Écrivez un script shell qui utilise un fichier de clés de sélection avec + `grep` sur un fichier de DOI, pour récupérer chaque sélection dans un fichier + résultat différent. + Les noms de ces fichiers résultats contiendront la valeur de la clé de sélection. + Le fichier de clés est [`listeCles.txt`](./listeCles.txt). + Le fichier à filtrer est [`listeDOI.txt.gz`](./listeDOI.txt.gz). + +
+ Voir la solution + + ```bash + #!/bin/sh + + export LC_COLLATE=C + REP=. + + while read KEY + do + NAME=selection_$KEY + zcat listeDOI.txt.gz | grep "$KEY" > ${REP}/$NAME.txt + done < $REP/listeCles.txt + ``` + +
+ + > ⚠ Il est important de noter que, surtout pour le fichier des critères de + > sélection, le traitement se déroule sous Unix/Linux. Par conséquent, il faut + > prendre garde aux fins de ligne qui doivent être de type Unix (`\n`). + > La présence de fins de ligne de type Windows (`\r\n`) perturbe les opérations + > de sélection comme avec `grep` (matching incorrect). diff --git a/src/unix/README.md b/src/unix/README.md new file mode 100644 index 0000000..2c436ec --- /dev/null +++ b/src/unix/README.md @@ -0,0 +1,17 @@ +# UNIX + +UNIX est un système d'exploitation (au même titre que Windows, MS-DOS, MacOS, +etc.) + +Ses principales caractéristiques sont les suivantes : + +- *portabilité* (de nombreuses architectures supportées) +- *réseau* (on peut se connecter à une machine distante et y exécuter des + programmes) +- *multi-tâches* (plusieurs programmes peuvent tourner en même temps, ce qui + n'était pas le cas d'anciens Windows ni celui des MacOS < 10) +- *multi-utilisateurs* (plusieurs utilisateurs peuvent utiliser la même machine + en même temps) + +Ces caractéristiques ont été de plus en plus présentes dans les systèmes +d'exploitation modernes (alors que ça fait 50 ans qu'UNIX les possède). diff --git a/src/unix/historique.md b/src/unix/historique.md new file mode 100644 index 0000000..f1db54f --- /dev/null +++ b/src/unix/historique.md @@ -0,0 +1,40 @@ +# Historique + +## Année + +| Année | | +| ----- | :---------------------------------------------------------- | +| 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.2 BSD → Internet, 100 000 UNIX installés | +| 1987 | 750 000 UNIX installés | +| 1991 | Linux en développement (par Linus Torvalds) | +| 1993 | Novell rachète UNIX à AT&T | +| 1995 | SCO rachète UNIX à Novell | +| 1999 | Linux 2.2 | +| 2001 | Linux 2.4 | +| 2003 | 18 millions de Linux installés (estimation du linuxcounter) | + +## Implications + +- Internet +- Jurassic Park +- Open Source +- ... + +## Versions + +- HP-UX (Hewlett-Packard) - osiris, polaris, ... +- Solaris (Sun) - r2d2 +- AIX (IBM) +- Xenix (Microsoft, abandonné) +- IRIX (SGI, Silicon Graphics) +- BSD (Université de Berkeley) +- FreeBSD (Open Source et gratuit) +- Linux (Open Source et gratuit) +- MacOS X (Apple) +- QNX +- ... diff --git a/src/unix/linux.md b/src/unix/linux.md new file mode 100644 index 0000000..5e59c11 --- /dev/null +++ b/src/unix/linux.md @@ -0,0 +1,25 @@ +# Linux + +Toutes les distributions de Linux, basé sur UNIX, utilisent le noyau Linux qui a +été créé en 1991 par Linus Torvalds (essentiellement développé en langage C). +Voir pour plus de détails le +[Noyau Linux sur Wikipedia](https://fr.wikipedia.org/wiki/Noyau_Linux). + +Ce qui change dans les distributions, c'est la facilité d'installation, les +programmes fournis, la facilité de configuration, les architectures visées, ... + +Voici une liste des distributions les plus célèbres : + +- Ubuntu +- RedHat +- Mandrake +- SuSE +- UnitedLinux (regroupement de SCO, SuSE, TurboLinux, Conectiva) +- Slackware +- Debian + +## Références + +- +- (en anglais) +- Guide de survie du débutant sous Linux diff --git a/unix/README.md b/unix/README.md deleted file mode 100644 index 34922a4..0000000 --- a/unix/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# UNIX - -UNIX est un système d'exploitation (au même titre que Windows, MS-DOS, MacOS, -etc.) - -Ses principales caractéristiques sont les suivantes : - -- *portabilité* (de nombreuses architectures supportées) -- *réseau* (on peut se connecter à une machine distante et y exécuter des - programmes) -- *multi-tâches* (plusieurs programmes peuvent tourner en même temps, ce qui - n'était pas le cas d'anciens Windows ni celui des MacOS < 10) -- *multi-utilisateurs* (plusieurs utilisateurs peuvent utiliser la même machine - en même temps) - -Ces caractéristiques ont été de plus en plus présentes dans les systèmes -d'exploitation modernes (alors que ça fait 50 ans qu'UNIX les possède). - -Précédent - [Suivant](./historique.md) diff --git a/unix/historique.md b/unix/historique.md deleted file mode 100644 index 6cd10d0..0000000 --- a/unix/historique.md +++ /dev/null @@ -1,42 +0,0 @@ -# Historique - -## Année - -| Année | | -| ----- | :---------------------------------------------------------- | -| 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.2 BSD → Internet, 100 000 UNIX installés | -| 1987 | 750 000 UNIX installés | -| 1991 | Linux en développement (par Linus Torvalds) | -| 1993 | Novell rachète UNIX à AT&T | -| 1995 | SCO rachète UNIX à Novell | -| 1999 | Linux 2.2 | -| 2001 | Linux 2.4 | -| 2003 | 18 millions de Linux installés (estimation du linuxcounter) | - -## Implications - -- Internet -- Jurassic Park -- Open Source -- ... - -## Versions - -- HP-UX (Hewlett-Packard) - osiris, polaris, ... -- Solaris (Sun) - r2d2 -- AIX (IBM) -- Xenix (Microsoft, abandonné) -- IRIX (SGI, Silicon Graphics) -- BSD (Université de Berkeley) -- FreeBSD (Open Source et gratuit) -- Linux (Open Source et gratuit) -- MacOS X (Apple) -- QNX -- ... - -[Précédent](./README.md) - [Suivant](linux.md) diff --git a/unix/linux.md b/unix/linux.md deleted file mode 100644 index 0329688..0000000 --- a/unix/linux.md +++ /dev/null @@ -1,27 +0,0 @@ -# Linux - -Toutes les distributions de Linux, basé sur UNIX, utilisent le noyau Linux qui a -été créé en 1991 par Linus Torvalds (essentiellement développé en langage C). -Voir pour plus de détails le -[Noyau Linux sur Wikipedia](https://fr.wikipedia.org/wiki/Noyau_Linux). - -Ce qui change dans les distributions, c'est la facilité d'installation, les -programmes fournis, la facilité de configuration, les architectures visées, ... - -Voici une liste des distributions les plus célèbres : - -- Ubuntu -- RedHat -- Mandrake -- SuSE -- UnitedLinux (regroupement de SCO, SuSE, TurboLinux, Conectiva) -- Slackware -- Debian - -## Références - -- -- (en anglais) -- Guide de survie du débutant sous Linux - -[Précédent](./historique.md) - [Suivant](../bases/README.md)