Introduction à l’environnement Unix
1 Introduction au système UNIX 13
1.1 Système d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 Historique et développement d’unix et linux . . . . . . . . . . . . . . 14
1.3 Principales caractéristiques du système UNIX . . . . . . . . . . . . 15
1.4 Compte utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5 Sessions unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.6 Exemples de commandes élémentaires d’affichage . . . . . . . . . . 17
2 Le shell : introduction 19
2.1 Syntaxe de la ligne de commandes . . . . . . . . . . . . . . . . . . 19
2.2 Aides à l’interactivité du shell . . . . . . . . . . . . . . . . . . . . . 20
2.3 Générateurs de noms de fichiers . . . . . . . . . . . . . . . . . . . 21
2.4 Documentation en ligne . . . . . . . . . . . . . . . . . . . . . . . 23
3 Hiérarchie des fichiers unix 24
3.1 Arborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Chemins d’accès (path) d’un fichier . . . . . . . . . . . . . . . . . . 27
3.2.1 Affichage du répertoire courant avec pwd . . . . . . . . . . . 28
3.2.2 Changement de répertoire courant avec cd . . . . . . . . . . 28
3.3 Raccourcis pour les répertoires d’accueil . . . . . . . . . . . . . . . 33
4 Commandes de base 34
4.1 Commandes de gestion de fichiers . . . . . . . . . . . . . . . . . . 34
4.1.1 Affichage de liste de noms de fichiers avec ls . . . . . . . . 34
4.1.2 Copie de fichiers avec cp . . . . . . . . . . . . . . . . . . . 36
4.1.3 Déplacement et renommage de fichiers avec mv . . . . . . . 37
4.1.4 Suppression de fichiers avec rm . . . . . . . . . . . . . . . 38
4.1.5 Compression de fichiers avec gzip ou bzip2 . . . . . . . 39
4.2 Commandes de gestion de répertoires . . . . . . . . . . . . . . . . 40
4.2.1 Création de répertoire avec mkdir . . . . . . . . . . . . . . 40
4.2.2 Suppression de répertoire (vide) avec rmdir . . . . . . . . 40
5 Commandes pour fichiers textes 41
5.1 Fichiers binaires et fichiers texte, codage . . . . . . . . . . . . . . . 41
5.2 Codage des fichiers textes . . . . . . . . . . . . . . . . . . . . . . 41
5.2.1 Transcodage de fichiers textes avec recode ou iconv . . . 42
5.3 Accès au contenu des fichiers . . . . . . . . . . . . . . . . . . . . 44
5.3.1 Identification des fichiers avec file . . . . . . . . . . . . . 44
5.3.2 Comptage des mots d’un fichier texte avec wc . . . . . . . . 45
5.3.3 Affichage du contenu de fichiers texte avec cat . . . . . . . 46
5.3.4 Affichage paginé du contenu d’un fichier texte avec more/less 47
5.3.5 Début et fin d’un fichier texte avec head et tail . . . . . . 48
5.3.6 Repliement des lignes d’un fichier texte avec fold . . . . . . 48
5.3.7 Affichage des différences entre deux fichiers texte avec diff . 49
5.3.8 Affichage de la partie texte d’un fichier binaire avec strings 49
5.3.9 Affichage d’un fichier binaire avec od . . . . . . . . . . . . . 49
6 Environnement réseau 50
6.1 Connexion à distance via slogin . . . . . . . . . . . . . . . . . 50
6.2 Transfert de fichiers à distance : scp, sftp . . . . . . . . . . . . . 51
6.3 Explorateurs et téléchargement . . . . . . . . . . . . . . . . . . . . 52
7 Commandes avancées de gestion des fichiers 53
7.1 Recherche de fichiers dans une arborescence avec find . . . . . . 53
7.2 Archivage d’arborescence avec tar . . . . . . . . . . . . . . . . . 59
8 Droits d’accès aux fichiers 66
8.1 Affichage des droits d’accès avec ls -l . . . . . . . . . . . . . 67
8.2 Changement des droits d’accès avec chmod . . . . . . . . . . . . 68
9 Édition de fichiers textes 69
9.1 Les éditeurs sous unix et leurs modes . . . . . . . . . . . . . . . . 69
9.1.1 Éditeurs sous unix . . . . . . . . . . . . . . . . . . . . . . 69
9.1.2 Les modes des éditeurs . . . . . . . . . . . . . . . . . . . . 70
9.2 Principes de l’éditeur vi . . . . . . . . . . . . . . . . . . . . . . . 71
10 Redirections et tubes 73
10.1 Flux standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
10.2 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
10.2.1 Redirection de sortie vers un fichier (> et >>) . . . . . . . . . 75
10.2.2 Redirection de l’entrée depuis un fichier (<) . . . . . . . . . . 77
10.3 Tubes ou pipes (|) . . . . . . . . . . . . . . . . . . . . . . . . . . 78
10.4 Compléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
10.4.1 Redirection de la sortie d’erreurs vers un fichier (2> et 2>>) . 81
10.4.3 Les fichiers spéciaux : exemple /dev/null . . . . . . . . 84
10.4.4 Duplication de flux : tee . . . . . . . . . . . . . . . . . . . 85
11 Filtres élémentaires 87
11.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.2 Classement avec sort . . . . . . . . . . . . . . . . . . . . . . . 87
11.3 Transcription avec tr . . . . . . . . . . . . . . . . . . . . . . . . 90
11.4 Autres filtres élémentaires . . . . . . . . . . . . . . . . . . . . . . 91
12 Expressions régulières ou rationnelles 92
12.1 Signification des caractères spéciaux . . . . . . . . . . . . . . . . . 92
12.2 Ancres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.3 Ensembles de caractères . . . . . . . . . . . . . . . . . . . . . . . 96
13 Le filtregrep 98
14 Le filtresed 100
15 Le filtreawk 102
15.1 Structure des données pour awk . . . . . . . . . . . . . . . . . . . 102
15.2 Structure d’un programme awk . . . . . . . . . . . . . . . . . . . 103
15.3 Exemples de programmes awk . . . . . . . . . . . . . . . . . . . 104
15.4 Mise en garde sur les caractères non-imprimables . . . . . . . . . . 106
16.2 Caractères de contrôle et signaux . . . . . . . . . . . . . . . . . . 112
16.3 Commande kill . . . . . . . . . . . . . . . . . . . . . . . . . . 113 16.4 Processus en arrière plan . . . . . . . . . . . . . . . . . . . . . . 113
17.1 Code de retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
17.2 Combinaison de commandes && . . . . . . . . . . . . . . . . . . . 115
18.1 Affectation et référence . . . . . . . . . . . . . . . . . . . . . . . . 117
18.3 Variables de localisation (langue, ) . . . . . . . . . . . . . . . . . 121
19.1 Substitution de commande . . . . . . . . . . . . . . . . . . . . . . 122
19.2 Métacaractères du shell . . . . . . . . . . . . . . . . . . . . . . . 124
20.1 Fichiers de commandes ou shell-scripts . . . . . . . . . . . . . . . 127
20.3 Utilisation de la commande set . . . . . . . . . . . . . . . . . . . 133
21.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
21.2 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
21.2.1 Structure if fi . . . . . . . . . . . . . . . . . . . 135
21.2.2 Structures if imbriquées : elif . . . . . . . . . . . . . . . 137
21.2.3 Énumération de motifs (cas) : case esac . . . . . . . . . 139
21.3 Les structures itératives . . . . . . . . . . . . . . . . . . . . . . . 142
21.3.1 La structure for do done . . . . . . . . . . 142
21.3.2 La structure until do done (jusqu’à ce que) 146
21.3.3 La structure while do done (tant que) . . . 148
21.4.1 La commande exit . . . . . . . . . . . . . . . . . . . . . 150
21.4.2 La commande break . . . . . . . . . . . . . . . . . . . . 150
21.4.3 La commande continue . . . . . . . . . . . . . . . . . . 153 21.4.4 Redirections et boucles . . . . . . . . . . . . . . . . . . . . 155
22.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
22.2 Le cœur de script . . . . . . . . . . . . . . . . . . . . . . . . . . 157
22.3 Version minimale du script . . . . . . . . . . . . . . . . . . . . . . 159
22.4 Version élémentaire du script . . . . . . . . . . . . . . . . . . . . . 161
22.6 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
23.1 Commandes internes . . . . . . . . . . . . . . . . . . . . . . . . 169
23.2 Exécution dans le shell courant . . . . . . . . . . . . . . . . . . . . 169
23.3 Exécution avec les droits admin via sudo . . . . . . . . . . . . . . 169
23.4 Autres commandes internes . . . . . . . . . . . . . . . . . . . . . 170
23.4.1 La commande eval . . . . . . . . . . . . . . . . . . . . . 170
23.4.2 La commande exec . . . . . . . . . . . . . . . . . . . . . 171
23.5 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
23.5.2 Identifier une commande type . . . . . . . . . . . . . . . . 172
23.5.3 Affichage d’une progression arithmétique seq . . . . . . . . 172
23.5.4 Récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . 173
23.5.5 Fichiers d’initialisation du shell . . . . . . . . . . . . . . . . 174
23.6 Automatisation des tâches avec la commande make . . . . . . . . . 175
— ensemble de programmes d’un ordinateur servant d’interface entre le matériel et les logiciels applicatifs
— abrégé S.E. (en anglais operating system O.S.)
— exemples : MS-DOS, Windows (XP, 7, ,10), famille Unix (linux, Mac-OS, )
Linux aujourd’hui dominant dans le calcul intensif :
plus de 97% des calculateurs du TOP 500
N.-B. : machine virtuelle = application qui émule un système d’exploitation
⇒ ex. : linux émulé sous virtualbox ou VMware dans une fenêtre windows
— depuis les années 1970, plusieurs branches de développement
⇒ quelques différences dans les commandes surtout au niveau administration
— système ouvert : implémentations du téléphone portable au super-calculateur
– propriétaires (aix, hp-ux, solaris, os-X, )
– libres (linux depuis 1991, net-bsd, free-bsd, ) : linux est (presque) un unix!
nombreuses distributions linux, principales branches :
◦ debian 7→ ubuntu 7→ mint
◦ Red-Hat 7→ Mandrake 7→ mandriva 7→ mageia,
7→ CentOS (serveur sappli1)
7→ scientific-linux, 7→ Fedora,
— multi-tâches (concurrentes et indépendantes)
— multi-utilisateurs (dont l’administrateur ou root)
⇒ système d’identification et droits d’accès aux fichiers
— chaînage des processus par les tubes (pipes)
⇒ assemblage d’outils élémentaires pour accomplir des tâches complexes
— Le shell est l’interface utilisateur du système d’exploitation. bash : Bourne Again SHell (sh : shell historique de Bourne) l’ interpréteur de commandes (shell) intègre un langage de programmation avec variables, structures de contrôle, fonctions
⇒ programmes interprétés en shell = fichiers de commandes = shell-scripts
⇒ création de commandes par l’utilisateur
identifiant |
— un(ou login) (unique)
mot de passe |
— un(ou password) confidentiel
— un répertoire d’accueil personnel (ou home directory) où stocker ses fichiers
— un « interpréteur de commandes » (ou shell) : bash
Ces informations sont stockées dans un fichier système (souvent /etc/passwd)
Le mot de passe est crypté
B ⇒ l’administrateur ne peut pas retrouver un mot de passe oublié
Ressources limitées, par exemple par quota sur le disque
B ⇒ problème de connexion en mode graphique si quota atteint.
— point commun : une session commence par
– identification (login)
– authentification (password) la même invite (prompt) apparaît après la fin de session
— deux types de sessions de travail :
– mode texte (console, accès distant (slogin), ) : ligne de commande avantage : conservation de l’historique des commandes
– mode graphique (multi-fenêtres) : icônes et menus pour lancer les applications (dont les consoles konsole, xfce4-terminal et xterm par ex.) environnements de bureau : kde, gnome, xfce , mate, lxde gestionnaires de fenêtres : fvwm, icewm
la commande |
affiche |
date |
la date |
whoami |
le login |
hostname |
le nom de la machine |
who |
la liste des utilisateurs connectés |
echo "chaine de caracteres" |
la chaîne saisie |
id |
le numéro d’utilisateur |
uname |
le nom du système d’exploitation |
Le shell est un programme qui interprète les commandes saisies dans un terminal.
Le shell découpe la ligne de commande enmots séparés par des blancs
(1) premier mot = la commande l’action
(2) mots suivants = les paramètres ou arguments les objets
(rôle déterminé par leur position dans la ligne de commande)
(3) paramètres optionnels introduits par « - » les modalités
cp -p fich1 fich2
copie en gardant la date source cible
— Le shell distingue les majuscules (rares) des minuscules
— il interprète certains caractères dits spéciaux : blancs, " , ', \, *, ?,
avant de d’exécuter la commande
B ⇒ éviter les blancs dans les noms de fichiers
↑ et ↓ |
permettent de parcourir l’historique des commandes |
← et → |
déplacements pour éditer la ligne de commande |
^E ou ^A |
déplacement en fin (End) ou début de ligne (^B est déjà pris pour Back) |
TAB |
demande au système de compléter le nom de commande ou de fichier |
TAB |
TAB |
⇒ évite les fautes de saisie et valide les chemins affiche les différentes possibilités de complétion
plus beaucoup d’autres (voir chapitres suivants)
Caractères jokers interprétés par le shell pour désigner des fichiers selon des motifs génériques
* une chaîne de caractères quelconque dans le nom d’un fichier
(y compris la chaîne vide)
? |
un caractère quelconque et un seul dans un nom de fichier |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[] |
un caractère quelconque pris dans la liste exhaustive entre crochets |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[c1-c2] |
un caractère quelconque entre c1 et c2 dans l’ordre lexicographique |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[!] |
un caractère quelconque pris hors de la liste Exemples de motifs de noms de fichiers* tous les fichiers du répertoire courant (sauf ceux commençant par .) *.f90 tous les fichiers dont le nom finit par .f90 *.* tous les fichiers dont le nom comporte un point (au moins) data?? tous les fichiers dont le nom est data suivi de deux caractères f.[abc] les fichiers f.a, f.b, et f.c s’ils existent f.[0-9] les fichiers dont le nom s’écrit f. suivi d’un chiffre NB. : f.[25-70] (maladroit, mais) les fichiers f.0, f.2, f.5, f.6 et f.7 f.[!0-9] les fichiers dont le nom s’écrit f. suivi d’un caractère qui n’est pas un chiffre *.[ch] les fichiers source en C (*.c) et les fichiers d’entête (header : *.h) Tester ces motifs avec par exemple la commande echo : echo *.[ch] 2.4 Documentation en ligne— mancmd : affichage du manuel de la commande cmd page par page grâce au filtre more ou less
– se déplacer dans le manuel :, page suivante/précédente – rechercher un motif : /motif, l’occurrence suivante n (next)
– sortir du manuel : touchequit Préciser parfois la section du manuel (1 = commandes, 3 = bibliothèques) man3printf (⇒ la fonction C) au lieu de man printf (⇒ section 1 commande) — cmd--help : affiche un bref aide-mémoire de la commande Rechercher quelle commande utiliser pour une opération : man-kmotclef 3 Hiérarchie des fichiers unix3.1 ArborescenceL’ensemble des fichiers est structuré hiérarchiquement en un arbre unique constitué de — nœuds : répertoires (directories, dossiers (folders) sous windows), les répertoires contiennent d’autres fichiers — feuilles : fichiers (files) ordinaires en général. ? le séparateur de niveaux est la barre oblique / (slash) ? le répertoire / est la racine (root), qui contient tous les autres fichiers. FIGURE 1 – Arborescence des fichiers UNIX Montage de branchesL’arbre unique d’unix est purement logique. Plusieurs périphériques peuvent être « montés » sur le système de fichiers → greffe temporaire d’une branche sur un «point de montage» de cet arbre. Par exemple, un CDROM, un disque amovible ou une clef USB peuvent être « montés » dans les répertoires /media/cdrom ou /media/removable. Après utilisation, il faut «démonter» ces branches (pour achever les transferts de données) avant de déconnecter physiquement ces périphériques. Partage via le réseau : divers protocoles (ssh via sshfs, nfs) réalisent des montages pour partager des répertoires hébergés par d’autres ordinateurs (serveurs) via le réseau. Sous windows séparateur = contre-oblique \ (antislash) périphériques désignés par une lettre suivie de «:» ex. C:\ ou D:\ B pas de distinction minuscule/majuscule ⇒ problème si montage linux 3.2 Chemins d’accès (path) d’un fichier
—: commence toujours par / et comporte la liste complète des répertoires traversés depuis la racine, Exemples : /usr/man/man1/ls.1, /home/group_a/user_a1
—: comporte la liste des répertoires à parcourir depuis le répertoire courant jusqu’au fichier ou répertoire choisi. Il ne commence jamais par / et doit passer par un nœud commun à la branche de départ (répertoire courant) et la branche d’arrivée. B Des fichiers de même nom ne peuvent exister que dans des répertoires différents NB : tree rep permet de représenter la branche qui part du répertoire rep 3.2.1 Affichage du répertoire courant avec pwdpwd (print working directory) affiche le chemin absolu du répertoire courant commande interne (builtin) du shell 3.2.2 Changement de répertoire courant avec cdcd [répertoire] (change directory) commande interne (builtin) du shell cd (sans paramètre) retour au répertoire d’accueil ~/. cd - retour au précédent répertoire (dans le temps) cd .. retour au répertoire père (dans la hiérarchie) Exemples en supposant que pwd affiche /home/group_a/user_a1 FIGURE 2 – La commande cd . laisse dans le répertoire courant /home/group_a/user_a1. FIGURE 3 – La commande cd .. déplace dans le répertoire père group_a. FIGURE 4 – cd ../user_a2 déplace dans le répertoire user_a2 FIGURE 5 – cd ../../group_b/user_b1 déplace dans le répertoire user_b1. 3.3 Raccourcis pour les répertoires d’accueilChemins en fait absolus : ~user répertoire d’accueil de l’utilisateur nommé user ~ son propre répertoire d’accueil Exemples : ~/.bash_profile est le chemin absolu de votre fichier d’initialisation personnel. ~lefrere/M1/Doc/unix/poly-unix/est le chemin absolu du répertoire du polycopié UNIX, situé sous le compte de l’utilisateur lefrere. B Ne pas confondre ~lefrere et ~/lefrere 4 Commandes de baseB Les arguments fichier des commandes pourront comporter un chemin d’accès . 4.1 Commandes de gestion de fichiers4.1.1 Affichage de liste de noms de fichiers avecls (list) ls [-options] [liste_de_fichiers]Quelques options : -a (all) liste aussi les fichiers cachés (de nom commençant par .) -l (long) affiche les attributs (droits, taille, date, ) des fichiers -R (Recursive) affiche la liste des fichiers contenus dans tous les sous répertoires éventuels -d (directory) affiche le nom des répertoires mais pas leur contenu Exemples
B cas des répertoires : par défaut le contenuls -l rep liste détaillée des fichiers du répertoire rep (contenu) ls -dl rep nom et attributs du répertoire rep (contenant) ls -l fic1 fic2 rep liste détaillée des fichiers ordinaires fic1, fic2 et du contenu du répertoire rep ls -R /tmp liste des fichiers de toute la branche /tmp 4.1.2 Copie de fichiers avec cp (copy)— copie avec changement de nom et de chemin éventuels deux arguments seulement cp [-options] fichier_origine fichier_cible— copie d’un ou plusieurs fichiers sans changement de nom vers un même répertoire cp [-options] liste_de_fichiersrépertoire_cible cp *.c rep2/ copie les fichiers source C vers le répertoire rep2 Principales options : -r (recursive) copie d’une branche (si le premier argument est un répertoire) -p (permissions) sans changer les droits ni la date -i (interactive) demande de confirmation si la cible existe déjà Confirmation en cas d’écrasement : répondre y (o si francisé) 4.1.3 Déplacement et renommage de fichiers avecmv (move) Trois syntaxes possibles 1. mvfichier_originefichier_cible mv fic1 fic2 renomme fic1 en fic2 mv /tmp/fic1 fic2 idem mais prend fic1 dans /tmp 2. mv liste_de_fichiersrépertoire_cibledéplacement des fichiers de la liste vers le répertoire cible (qui doit exister) mv fic1 fic2 /tmp/ déplace fic1 et fic2 dans /tmp 3. mv répertoire_sourcerépertoire_cible renommage ou déplacement de branche Principale option : -i (interactive) demande de confirmation interactive si écrasement de fichier 4.1.4 Suppression de fichiers avecrm en anglais remove rm [-options] liste_de_fichiersPrincipales options : -i (interactive) demande de confirmation interactive -r ou -R (recursive) destruction d’une branche (puissant mais dangereux) -f (force) sans demande de confirmation ni erreur si fichier inexistant B Attention : pas toujours de confirmation (sauf alias en rm -i) destruction immédiate irréversible (pas de corbeille) — Compression → fichier de suffixe .gz gzip [-options] liste_de_fichiers — Décompression d’un fichier de suffixe .gz gunzip [-options] liste_de_fichiers_compressésB Ne pas confondre avec zip de windows : gzip n’archive pas ⇒ voir tar. Autre outil, plus efficace : bzip2 / bunzip2 (suffixe .bz2) 4.2 Commandes de gestion de répertoires4.2.1 Création de répertoire avecmkdir mkdir répertoire (makedirectory)option -p (parent) : crée les répertoires parents si nécessaire exemple : mkdir -p dir/subdir 4.2.2 Suppression de répertoire (vide) avec rmdirrmdirrépertoire (removedirectory) refus de suppression si le répertoire contient des fichiers B ⇒ utiliser rm -R répertoire, mais dangereux! 5 Commandes traitant le contenu des fichiers texte5.1 Fichiers binaires et fichiers texte, codageUn fichier (ordinaire) = lot d’informations, conservé dans une mémoire permanente (disque, CD, clef USB, ) et auquel on donne un nom. Deux aspects du fichier : bas niveau : suite de bits groupés (par 8) en octets haut niveau : représentation de texte, d’image, de code machine, selon un certain codage qui permet d’interpréter la suite de bits. Préférer nommer les fichiers avec des suffixes rappelant le type de codage utilisé : — fichiers texte .c source C, .f90 source fortran, .txt texte, .html hypertexte, — fichiers binaires .pdf pour du PDF, .jpg pour une image JPEG .o pour un objet binaire, .a pour une bibliothèque, 5.2 Codage des fichiers textesPlusieurs codages pour les caractères : — ASCII sur 7 bits (27 =128 caractères) => non accentués — codages sur 1 octet = 8 bits (28 =256 caractères) avec caractères accentués : – propriétaires : CP852, CP1252 sous windows, MacRoman sous MacOS – ISO-8859 avec les variantes locales ISO-8859-1 ou latin1 pour le français par exemple — évolution en cours vers standard unicode pour représenter toutes les langues : nécessiterait jusqu’à 4 octets par caractère : UTF-32! implémentation UTF-8 : taille variable des caractères : de 1 à 4 octets – sur-ensemble de l’ASCII (donc sur 1 octet pour les non-accentués) – les caractères non-ascii de latin1 sur 2 octets B– les codes binaires (sur 1 octet) des caractères accentués de latin1 sont invalides en UTF-8! 5.2.1 Transcodage de fichiers textes avecrecode ouiconv — iconv-fcode_initial-tcode_final fichier B la conversion s’arrête à la première combinaison invalide — recode code_initial..code_final fichierB par défaut recode travaille « en place » (modifie le fichier initial). Exemples de transcodage de latin 1 vers utf-8 : iconv-fISO-8859-1-tUTF-8 < > recode 'ISO-8859-1..UTF-8' < > De nombreux éditeurs (vim, emacs ) peuvent faire de la conversion au vol pour la phase d’édition, puis sauvegarder dans le codage initial. B Ne pas mélanger deux codages dans un fichier (via par ex. copier/coller) 5.3 Accès au contenu des fichiers5.3.1 Identification des fichiers avecfile file liste_de fichiersaffiche une indication sur la nature du fichier (texte, binaire, ) ⇒ l’utiliser pour savoir avec quelles commandes manipuler un fichier
Affiche par défaut le nombre de lignes, de mots et d’octets, sauf si options cumulables pour sélectionner : -l compte les lignes (lines) -w compte les mots (words) -m compte les caractères (multibytes, c est pris!) : utile en UTF-8 seulement -c compte les octets (characters au sens historique!) comme ls -l B ordre d’affichage fixel, w, m, c, c’est-à-dire du plus gros ensemble au plus petit affiche aussi les totaux si plusieurs fichiers 5.3.3 Affichage du contenu de fichiers texte aveccat cat [liste_de fichiers]affiche ( concatène ) le contenu des fichiers de la liste B pas de contrôle du défilement (voir more ou less) ex : cat fic1 fic2 fic3 concatène et affiche le contenu des trois fichiers cat = filtre identité : recopie l’entrée standard (clavier) sur la sortie standard (écran) cat-n affiche les lignes avec leur numéro en tête, suivi d’une tabulation B Ne pas confondre cat fichier avec echo chaine 5.3.4 Affichage paginé du contenu d’un fichier texte avecmore/less more liste_de fichiersaffiche le contenu des fichiers de la liste (avec contrôle du défilement) lessliste_de fichiers préférable sous linux (défilement arrière possible) Requêtes sous le pagineur
Rappel : less = pagineur utilisé par la commande man 5.3.5 Début et fin d’un fichier texte avec head et tailhead/tail [options] [liste_de fichiers] head -n nb fichier affiche les nb premières lignes de fichier tail -n nb fichier affiche les nb dernières lignes de fichier tail -n+11 fichier affiche à partir de la ligne 11 5.3.6 Repliement des lignes d’un fichier texte avecfold fold [options] [liste_de fichiers]-w width : longueur (80 caractères par défaut) -s ne coupe pas les mots (repliement sur les espaces) 5.3.7 Affichage des différences entre deux fichiers texte avecdiff diff fichier_1 fichier_2vimdiff pour éditer 2 fichiers en parallèle (changer de fenêtre : ^W w) 5.3.8 Affichage de la partie texte d’un fichier binaire avecstrings strings [options] fichier5.3.9 Affichage d’un fichier binaire avecod od [options] [liste_de fichiers]octal dump formats d’affichage introduits par -t 6 Environnement réseau6.1 Connexion à distance via sloginConnexion sur une machine distante grâce à la commande sécurisée slogin. Authentification sur la machine distante par mot de passe ou échange de clefs ssh. slogin user@dist_host.domain sloginB ne pas oublier le login, sauf si identique sur la machine locale Option -X pour autoriser les applications graphiques (fenêtres X11) via ssh Lancement de commandes sur la machine distante : 6.2 Transfert de fichiers à distance via scp et sftpCopie de fichiers personnels entre deux machines, sans ouvrir de session sur la machine distante, via scp (mot de passe à chaque commande ou clef ssh) Syntaxe de cp mais préfixer le chemin d’accès des fichiers distants par user@dist_host.domain:
Sessionsftp (secure file tranfert protocol) pour plusieurs transferts sftp user@dist_host.domain— Après authentification sur le serveur distant, — navigation distante : cd — navigation locale : lcd (local change directory) — importation de fichiers distants : getdist_file, — exportation de fichiers vers la machine distante : putlocal_file — exit ou quit pour terminer la session sftp. 6.3 Explorateurs et téléchargement Navigateurs Web (lynx, firefox, opera, safari, chrome )Protocoles : ftp (File Transfer Protocol), http (Hypertext Transport Protocol), ou https (sécurisé par cryptage). Ressources localisées grâce à une URL (Universal Resource Locator). Exemples d’URL : file:/home/lefrere/M1/Doc/unix/ sur la machine localeEn ligne de commande : wget ou curl pour télécharger des fichiers par exemple : wget "" 7 Commandes avancées de gestion des fichiers7.1 Recherche de fichiers dans une arborescence avec findfindrépertoirecritère(s)action Recherche récursive dans toute la branche sous répertoire Commande très puissante : critères de sélection nombreux pouvant être combinés pour former une expression évaluée à vrai ou faux. -namemotif nom selon un motif (à protéger du shell) -inamemotif version de -name ignorant la casse -sizeentier[ckM] taille en octets (c), kiloctets (k), mégaoctets (M) -typeT de type donné (f=ordinaire, d=répertoire) Actions les plus usitées : -print affiche la liste des chemins des fichiers (un par ligne) -ls affiche la liste des fichiers avec leurs attributs (comme ls -dils) Exemples find . -name a.out -print affiche la liste des fichiers nommés a.out sous le répertoire courant (dans toute la hiérarchie en dessous de ce répertoire) find ~/ -name"*.c"-print affiche le chemin absolu des fichiers C de la branche sous le répertoire d’accueil (le shell interprète le ~, mais pas le caractère *) find /tmp-size+1000c-size-2000c-print affiche la liste des fichiers de taille entre 1000 et 2000 octets sous /tmp B Ne pas oublier le premier argument de find : le noeud (répertoire) de départ B Ne pas confondre avec ls -R find . -namex.c-print si dir est le répertoire de travail part de . donc de dir⇒ trois fichiers find repA -namex.c-print à partir de repA ⇒ deux fichiers B find . -name*.c-print ( * interprété par le shell ) ⇒z.c FIGURE 6 – find . -name’*.c’-print ⇒ cinq fichiers tar options -f archive [répertoire]Une option et une seule spécifiant l’action parmi : -c (create) création de l’archive à partir de l’arborescence (⇒ argument répertoire) -t (list) liste des fichiers archivés (tels qu’ils seront extraits) -x (extract) extraction des fichiers pour restaurer l’arborescence Une option obligatoire à argument : -farchive (file) précise le nom du fichier d’archive (toujours nécessaire) Autres options combinables : -v (verbose) affiche des informations complémentaires -z ou -j avec dé/compression (gzip ou bzip2) du fichier .tar FIGURE 7 – Transfert de branche via tar : création de l’archive f.tar, transfert de l’archive entre les machines, puis extraction sous repB FIGURE 8 – Création (sous /tmp) de l’archive f.tar de la branche de l’utilisateur ua1 : 1) se placer au dessus de ua1 cd ~/.. 2) archiver ua1 tar -cf ua1 3) vérifier le contenu de l’archive tar -tf FIGURE 9 – Restauration de branche à partir de l’archive : 1) cd ~/repB/ on restaure juste en dessous 2) tar -xfExemplescd ~/.. ; tar-cvf user archive toute l’arborescence de l’utilisateur user dans (se placer un niveau au-dessus de la branche à archiver) tar-tf affiche la liste des fichiers archivés dans tar -xvfrestaure toujours l’arborescence dans le répertoire courant (à partir de l’archive) (se placer au niveau où « greffer » la branche à restaurer) B éviter les chemins absolus dans les sauvegardes, sinon les fichiers seront obligatoirement restaurés au même endroit. 7.3 Copies et synchronisation de fichiers avec rsync 7.3 Copies et synchronisation de fichiers avec rsyncrsync[options] source [[email protected]:]destrsync[options] [[email protected]:]source dest outil de copie plus puissant que scp⇒ synchronisation de répertoires — sur une même machine ou à distance — très rapide car ne transmet que les différences et compression possible — nombreuses options pour les sauvegardes et les miroirs -u (update) mise à jour : ne transmet que les fichiers plus récents côté source -t, -p conserve la date (time), les droits (permissions) --exclude=motif sauf les fichiers répondant au motif indiqué -n essai à vide avant d’activer 7.3 Copies et synchronisation de fichiers avec rsync Remarque : rôle des / terminaux rsync -r rep1 [email protected]:/tmp crée le répertoire/tmp/rep1/ sur la machine distante et y recopie récursivement le contenu de rep1 rsync -r rep1/ [email protected]:/tmp recopie récursivement le contenu de rep1/ dans /tmp/ sur la machine distante sans y créer de niveau rep1 rsync -r rep1 [email protected]:/tmp est donc équivalent à rsync -r rep1/ [email protected]:/tmp/rep1/ Exemple 8 Droits d’accès aux fichiersChaque fichier a ses permissions propres :
— trois types de permissions
— pour trois «publics» — donc 3x3 = 9 caractères + un caractère à gauche pour le type du fichier - = fichier ordinaire, d = répertoire, l = lien symbolique 8.1 Affichage des droits d’accès avec ls -lExemple : ls -l ~lefrere/M1/Config/ drwxr-xr-x 2 lefrere ens 1024 sep 17 2018 lisp -rwxr-xr-x 1 lefrere ens 1076 oct 7 2018 MNI.bash_profile -rwxr-xr-x 1 lefrere ens 3101 oct 22 2018 MNI.bashrc lrwxrwxrwx 1 lefrere ens 15 sep 15 17:40 motd -> motd.16sept -rw-r--r-- 1 lefrere ens 434 sep 15 21:18 motd.16sept Première colonne : — d si répertoire : signification particulière des droits — l si lien (link) symbolique (raccourci vers ->) : c’est la cible qui porte les restrictions d’accès B La permission w pour quelqu’un d’autre que le propriétaire est à éviter. 8.2 Changement des droits d’accès avec chmodchmoddroitsliste_de_fichiers où droits représente~: — la portée : u, (user), g, (group), o, (others) ou a (all), — suivie de = (définit les droits), + (ajoute un droit), ou - (enlève un droit), — suivi de la permission r, w, ou x. Exemple 1 : chmod go-r fichier1 fichier2 supprime les droits de lecture au groupe et aux autres Exemple 2 avec deux droits séparés par une virgule sans espace : chmod u+w,go-w fichier1 fichier2 donne le droit d’écriture au propriétaire et le supprime au groupe et aux autres Application : restaurer des droits raisonnables sur des fichiers issus de systèmes de fichiers non unix (clefs USB formatées sous windows) 9 Édition de fichiers textes9.1 Les éditeurs sous unix et leurs modes9.1.1 Éditeurs sous unix— en mode texte : (nécessitent une connaissance du terminal utilisé) – vi sur-couche de ex, très puissant, présent sur tous les unix, version vim sous linux, éditeur sensible au langage (C, fortran, latex, ) avec mise en valeur de la syntaxe par des couleurs – emacs encore plus puissant, mais plus gourmand en ressources — en environnement graphique multifenêtres, avec menus, gestion de la souris, xemacs, gvim, gedit, kwrite B attention au codage des fichiers texte : ASCII / ISO-8859-1 / UTF-8 9.1.2 Les modes des éditeursDeux modes principaux : — commande : les caractères saisis sont interprétés comme des ordres (requêtes) ⇒ immédiatement exécutés — insertion : les caractères saisis sont directement insérés dans le fichier. Le mode par défaut est : B — le mode commande sous vi⇒ déroutant au premier abord passage en mode insertion par une requête — le mode insertion sous emacs requêtes introduites par des caractères de contrôle : Ctrl , Échap exemple : ^X^C pour terminer l’édition emacs 9.2 Principes de l’éditeur vii, I (insert) FIGURE 10 – Modes de fonctionnement de vi — plusieurs requêtes pour passer en mode saisie : – a et A (append) ajout, – i et I (insert) insertion, – o et O (open) ouverture de ligne. — une seule méthode pour revenir au mode commande : touche d’échappement Échap (escape) Un troisième mode, le mode dialogue est accessible de façon temporaire (affichage sur la ligne d’état en bas du terminal) depuis le mode commande de vi pour : — passer des requêtes ex via : — rechercher de motifs dans le texte (via / ou ?) Requête activée par Entrée , puis retour immédiat en mode commande. 10 Redirections et tubes10.1 Flux standardCommande UNIX ⇒ trois flux standard de données : 10.2 Redirections— Au lieu d’une saisie au clavier et d’un affichage à l’écran, stocker de façon permanente l’information d’entrée ou de sortie ⇒ rediriger les flux standards à partir ou vers des fichiers — Combiner des commandes de base pour effectuer des traitements complexes ⇒ rediriger les flux standards vers les entrées/sorties d’autres commandes. (mécanisme des tubes ou pipe-lines ) ⇒ grande souplesse et puissance du système UNIX 10.2.1 Redirection de sortie vers un fichier (> et>>) |
commande>>fichier |
Le fichier de sortie est créé. pour ajouter la sortie à la fin du fichier
Exemples
|
|
||
|
Attention : le shell interprète très tôt les redirections ⇒ ne pas rediriger la sortie vers le fichier d’entrée cat -n fic1>fic1 efface le contenu du fichier fic1 Solution : cat -n fic1 > tmp ; mv tmp fic1 |
B
syntaxe Exemple : lecture des données d’en-
commande< |
fichier |
trée d’un exécutable sur un fichier au lieu de la saisie au clavier
Appliquer deux traitements successifs à un flux de données :
— Méthode séquentielle avec fichier intermédiaire :
commande_1> fichier commande_2< fichier rm fichier |
=> attente éventuelle |
— Traitement à la chaîne en connectant les deux processus par un tube ou pipe = zone mémoire ⇒ communication synchronisée entre les 2 processus
plus rapide que le traitement séquentiel
Exemple 1 : affichage paginé de la liste des fichiers du répertoire courant
Méthode séquentielle (à éviter) ls -l > liste more liste |
Chaînage avec tube (à préférer) ls -l | more |
Exemple 2 : affichage de la 12e ligne du fichier toto
Méthode séquentielle (à éviter) Chaînage avec tube (à préférer)
Avec une seule commande, l’ordre des redirections sur la ligne est indifférent.
commande<entree>sortie commande>sortie<entree
B Avec un tube, ne pas détourner le flux : pas de redirection sur des fichiers en sortie de la première commande ni en entrée de la seconde
commande2>fichier |
commande2>>fichier |
B Attention : pas d’espace entre 2 et > pour ajouter les erreurs à la fin du fichier.
Exemple : stockage des diagnostics d’une compilation dans un fichier pour éviter le défilement à l’écran (afin de localiser d’abord la première erreur)
FIGURE 11 – Redirection de l’erreur
10.4.2 Redirection de l’erreur standard vers la sortie standard (2>&1)
Regroupement dans un même flux de la sortie standard et de la sortie d’erreur :
syntaxe
Exemple (on suppose que /etc/motd est accessible) :
cat /etc/motd /fichier_inexistant
affiche le mot du jour et un message d'erreur
Répertoire /dev : fichiers spéciaux gérant des flux de données entre le calculateur et les périphériques (devices) : terminaux, imprimantes, disques,
la commande tty affiche le nom du fichier spécial particulier attribué à un terminal le fichier spécial /dev/tty désigne de façon générique le terminal attaché à la connexion.
/dev/null = fichier spécial « poubelle » (vide) ou trou noir!
⇒ utilisé pour se débarrasser de certaines sorties inutiles.
commande2>/dev/null
empêche le flux d’erreur de s’afficher à l’écran.
évite l’affichage des messages d’erreur quand on tente d’accéder à des fichiers non autorisés.
tee (T en anglais) duplique le flux de son entrée standard vers (a) le fichier passé en argument et (b) sa sortie standard.
Application : conserver une trace du résultat intermédiaire d’un tube :
filtre = commande qui lit l’entrée standard , effectue des transformations sur ces données et affiche le résultat sur la sortie standard .
Exemples de filtres : cat, wc, tail, head, tr, sort, grep, sed, awk
mais ls, date, vi ne sont pas des filtres.
— filtre<fic lit dans un fichier par redirection d’entrée
— mais beaucoup de filtres (sauf tr) admettent aussi comme paramètres un nom de fichier ou une liste de fichiers d’entrée : filtrefic1 fic2 équivaut (presque car on perd ici les noms des fichiers) à :
sort trie , regroupe ou compare toutes les lignes des fichiers passés en paramètre
Par défaut : ordre lexicographique sur tous les champs de la ligne
⇒ sensible aux variables de langue (LANG et LC_ )
Options :
-r (reverse) pour trier selon l’ordre inverse
-f pour ignorer la casse (majuscule/minuscule)
-n (numeric) pour trier selon l’ordre numérique croissant séparateur décimal . ou , selon LC_NUMERIC
-kdébut[,fin] classement selon les champs (key) de numéros à partir de début [jusqu’à fin]
-tdélim choisit le séparateur de champs délim (blanc par défaut)
-b (blank) pour ignorer les blancs en tête de champ (cas de blancs multiples)
-u (unique) pour fusionner les lignes ex-æquo
Exemples |
|
sort /etc/passwd |
classe les lignes du fichier /etc/passwd par ordre lexicographique |
ls -l | sort -k8,8† |
classe les fichiers par ordre lexicographique de nom |
ls -l | sort -k8,8†r |
classe les fichiers par ordre lexicographique inverse |
†
: suppose que date et heure sont formatées en deux champs (ce qui dépend des systèmes)
ls -l | sort -k5,5n |
classe les fichiers par ordre de taille croissante |
ls -l | sort -k5,5n-u |
idem, mais n’affiche qu’un exemplaire pour une taille donnée (fusion des ex-æquo) |
wc -l * | sort -k1,1n |
classe les fichiers par nombre de lignes croissant |
sort -t:-k3,3n /etc/passwd |
classe les lignes du fichier passwd (séparateur |
de champ :) par numéro d’id croissant (champ 3)
trjeu1 jeu2 substitue à chaque caractère de l’ensemble fourni en premier paramètre son correspondant pris dans le deuxième ensemble. tr '123' 'abc' change les 1 en a, les 2 en b et les 3 en c.
tr -djeu pour supprimer (delete) les caractères d’un ensemble tr -sjeu1 jeu2 (squeeze-repeats) pour supprimer les répétitions de caractères de l’ensemble d’arrivée (après substitution)
B Filtre pur : n’admet pas de nom de fichier en paramètre ⇒ redirections. Travaille octet par octet ⇒ pas compatible UTF-8
⇒ ne tient pas compte du contexte (ne traite pas des motifs)
⇒ séquentiel sans mémoire (avantage!)
Peut utiliser les séquences de contrôle de l’ascii (\r =CR, \n= NL) tr -d '\r' supprime les « retour chariot » des fins de lignes (issus de windows)
Peut utiliser des intervalles (ascii)
tr a-z A-Z pour passer en majuscule
ou mieux des classes de caractères (avec les accentués selon LC_COLLATE)
tr '[:lower:]' '[:upper:]' (en iso-latin, pas en UTF)
head / tail affiche les lignes du début (entête) / de la fin du fichier expand / unexpand -a traduit les tabulations en espaces et inversement cut sélectionne des colonnes (champs) dans un flux
Recherche de chaînes de caractères qui satisfont à un certain motif (pattern) ⇒ syntaxe particulière pour décrire des motifs génériques : une expression rationnelle
Expressions rationnelles utilisées par les éditeurs ex, vi et sed, les filtres grep et awk, ainsi que perl, python, php, JavaScript
Deux versions exclusives de la syntaxe :
— expressions rationnelles de base BRE: Basic Regular Expressions
(ex, vi, sed, grep)
— expressions rationnelles étendues ERE: Extended Regular Expressions
. (point) représente un caractère quelconque et un seul
\ (contre-oblique : backslash) sert à protéger le caractère qui le suit
pour empêcher qu’il ne soit interprété
* (étoile) représente un nombre d’occurrences quelconque
(zéro, une ou plusieurs occurrences) du caractère ou de la sous-expression qui précède
B Ne pas confondre ces caractères spéciaux des expressions rationnelles avec les caractères génériques (wildcards) pour les noms de fichiers, * et ? qui sont, eux, interprétés par le shell.
a* |
un nombre quelconque de fois le caractère a (y compris une chaîne vide) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
aa* |
une ou plusieurs fois le caractère a |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.* |
un nombre quelconque de caractères quelconques (y compris une chaîne vide) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
..* |
au moins un caractère |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\.. |
un point suivi d’un caractère quelconque |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\\* |
un nombre quelconque (y compris zéro) de contre-obliques 12.2 AncresLes ancres (anchor) ne représentent aucune chaîne, mais permettent de spécifier qu’un motif est situé en début ou en fin de ligne : ^ (accent circonflexe : caret) spécial en début de motif, représente le début de ligne
|