diff --git a/README.md b/README.md index d9851c2..8237101 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ 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 +1. [UNIX](./unix/README.md): 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, diff --git a/bases/README.md b/bases/README.md new file mode 100644 index 0000000..00ed4e3 --- /dev/null +++ b/bases/README.md @@ -0,0 +1,159 @@ +# Redirections et Pipes + +## Redirections + +### Accès en lecture par redirection de l'entrée + +(image manquante)entrée et sortie standard d'une commande Unix + +### 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 + +(image manquante)redirection de l'entrée standard d'une commande unix + +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 new file mode 100644 index 0000000..d228b75 --- /dev/null +++ b/bases/commandes-basiques.md @@ -0,0 +1,28 @@ +# 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 new file mode 100644 index 0000000..976f947 --- /dev/null +++ b/bases/tp.md @@ -0,0 +1,109 @@ +# 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/commandes/README.md b/commandes/README.md new file mode 100644 index 0000000..531dfb9 --- /dev/null +++ b/commandes/README.md @@ -0,0 +1,155 @@ +# 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)). + +## 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 new file mode 100644 index 0000000..ed97d75 --- /dev/null +++ b/commandes/compression.md @@ -0,0 +1,93 @@ +# 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 new file mode 100644 index 0000000..e6dd6a6 --- /dev/null +++ b/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 +``` + +[Précédent](./README.md) - [Suivant](./compression.md) diff --git a/commandes/processus.md b/commandes/processus.md new file mode 100644 index 0000000..8a2c86f --- /dev/null +++ b/commandes/processus.md @@ -0,0 +1,67 @@ +# 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 new file mode 100644 index 0000000..7cc544d --- /dev/null +++ b/commandes/tp.md @@ -0,0 +1,302 @@ +# 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/unix/README.md b/unix/README.md new file mode 100644 index 0000000..34922a4 --- /dev/null +++ b/unix/README.md @@ -0,0 +1,19 @@ +# 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 new file mode 100644 index 0000000..6cd10d0 --- /dev/null +++ b/unix/historique.md @@ -0,0 +1,42 @@ +# 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 new file mode 100644 index 0000000..f73270b --- /dev/null +++ b/unix/linux.md @@ -0,0 +1,27 @@ +# 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)