FormationUNIX / LINUXBases Unix / Linux et utilisation avancée
LDVINCI Rev4 2004
LDVINCI Rev4 2004
INTRODUCTION
1 UNIXINT - Rev4 LDVINCI 2004
UNIX / LINUXINTRODUCTION
INTRODUCTION
2 UNIXINT - Rev4 LDVINCI 2004
BASES UNIX / LINUX et UTILISATION AVANCEE
OBJECTIFS :Découvrir et manipuler l'interface utilisateur (le shell) avec son langage de commandeet son langage de programmation.Etre capable d'utiliser les outils de manipulation des données dans l'environnement UNIX / LINUX.Reconnaitre les différents fichiers constituant l'arbre UNIX / LINUX et savoir les exploiter enterme de navigation, copie, sauvegarde et restauration.Elaborer des scripts shell dans un contexte d'exploitation.
PROGRAMME :- Présentation d'UNIX / LINUX.- Prise en main d' UNIX / LINUX et du shell.- Etude de l'éditeur vi.- Manipulation des fichiers.- Protection des fichiers.- Copier, déplacer des fichiers.- Communiquer entre utilisateurs.- Imprimer des fichiers.- Redirection des entrées/sorties.- Notion de processus.- Le langage de programmation shell :
.les variables
.les mécanismes de substitution
.les structures conditionnelles et les boucles.- Sauvegarde/restauration des données utilisateurs.- Les signaux.- Approfondissement du Korn-Shell.- Personnalisation de l'environnement utilisateur.- Les outils de manipulation des données.- Les utilitaires GREP et SED.
MÉTHODES PÉDAGOGIQUES :Les différents thèmes abordés font l'objet de travaux pratiques concrets pourune assimilation optimale.
DURÉE :6 jours.
EVALUATION :De nombreux exercices permettront de situer l'acquisition des connaissances.De plus, une évaluation sous forme de QCM aura lieu en fin de ce module.
INTRODUCTION
3 UNIXINT - Rev4 LDVINCI 2004
SOMMAIRE
1 PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
2 MANIPULER LES FICHIERS
3 PROTEGER SES FICHIERS
4 COPIES, DEPLACEMENTS, LIENS, RECHERCHE DEFICHIERS, SAUVEGARDE RESTAURATION DE FICHIERS
5 COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ETIMPRIMER
6 FONCTIONS DE BASE DE VI, FONCTIONS AVANCEES DEVI ET EXPRESSIONS REGULIERES
7 LES PROCEDURES SHELL, LES REDIRECTIONS ET LESMECANISMES DE SUBSTITUTION DU SHELL
8 PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ETD'UNE BOUCLE
9 ENVIRONNNEMENT, SIGNAUX ET SYNCHRONISATION
10 UNIX / LINUX AVANCE : COMPLEMENTS
11 MEMO
INTRODUCTION
4 UNIXINT - Rev4 LDVINCI 2004
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 1 UNIXPRES
UNIX / LINUXPRESENTATION
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 2 UNIXPRES
SOMMAIRE
SECTION PAGE
HISTORIQUE 1 - 3
UNIX : QU'EST-CE QUE C'EST ? 2 - 4
LES LANGAGES SHELL SOUS UNIX / LINUX 1 -5
CONNEXION D'UN TERMINAL UTILISATEUR 1 - 7
Ouverture d'une session utilisateur 1 - 7Mot de passe utilisateur 1 - 7Terminer une session utilisateur 1 - 7
LANCEMENT D'UNE COMMANDE 1 - 8
ARRET DE L'AFFICHAGE 1 - 9
LES MESSAGES D'ERREUR 1 - 9
EXERCICES 1 - 10
Prise en main d'UNIX / LINUX 1 - 10
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 3 UNIXPRES
HISTORIQUE
UNIX est un système d'exploitation développé par AT & T.Les premières licences ont été délivrées en 1975 (UNIX version 6).
Il existe 3 versions de base :
AT & T SYSTEM V (version 3, 4 et 5)
BERKELEY 4.3 BSD
SUN SCO
La plupart des systèmes serveurs UNIX sont des implémentationsd'UNIX SYSTEM V avec des extensions d'origine BERKELEY.
La plupart des grands constructeurs informatiques ont à leur catalogue une offreUNIX fonctionnant sur des plates-formes matérielles spécifiques ou mixtes( multi O.S.) et leur ont donné une appellation commerciale :
IBM et Bull : AIXHewlett Packard : HP-UXSun : Solaris et SunOSSiemens Nixdorf : SINIXSGI : IRIXIntel : DYNIX
etc ....
LINUX, lui a été développé au début des années 90 par Linuz Torvalds avecpour objectif principal d'offrir une visibilité type UNIX sur un équipement PC.
.... mais à la différence d'UNIX qui est sous licence, LINUX est un FreeWare etrentre dans le cadre des "Open Source" ayant entraîné de nombreux éditeursà offrir sur le marché leur LINUX personnalisé dont les plus célèbres sont :
RedHatMandrakeSuSeDebianSlackWare etc .....
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 4 UNIXPRES
langage decommande
interpréteur decommandes
COMMANDESLANGAGESOUTILS
SHELL(ksh sh csh bash)
MATERIEL
UNIX / LINUX EST UN SYSTÈME TEMPS PARTAGE,MULTI-UTILISATEURS,
MULTI-TÂCHES.
APPLICATIONS
noyauUNIX / LINUX
UNIX / LINUX
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 5 UNIXPRES
LES LANGAGES SHELL SOUS UNIX / LINUX
Sous UNIX
On trouve principalement les 3 suivants :
le csh d'origine Berkeley BSDle sh d'origine AT&T, Bourne-shellle ksh d'origine AT&T, Korn-shell
Le ksh utilisé dans ce cours sur le serveur est un sur-ensemble du sh, il combineles avantages du csh avec la syntaxe du sh.Le csh a une syntaxe proche du langage C, mais les procédures csh nes'exécutent pas sous sh et ksh.
Les principales autres différences :
- historique des commandes dans csh et ksh- éditeur de ligne dans ksh- les syntaxes des boucles diffèrent entre csh, ksh et sh :
csh : while end ksh, sh : while do done
- goto n'existe qu'en csh- le mécanisme de substitution des variables ksh est plus élaboré.
- l'arithmétique entière n'existe qu'en csh et ksh- le mécanisme d'alias (abréviation de commandes) pous csh et ksh.
Nota :Sur les serveurs UNIX (type AIX ) le Bourne-shell s'appelle bsh.
Sous LINUX
Suivant les éditeurs et le type d'installation logicielle réalisée, on peut retrouver lesmêmes interpréteurs en plus du shell "dit standard" sous LINUX :
le bash.
Le bash offre les mêmes fonctionnalités qu'un ksh avec une gestion d'historiquedes commandes plus ergonomique qu'en ksh (utilisation du pavé des touchescurseur à la place de séquences de contrôle).
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 6 UNIXPRES
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 7 UNIXPRES
CONNEXION D' UN TERMINAL UTILISATEUR
. En mode CONSOLE ( dit TTY )
Ouverture d'une session utilisateur
L'invite de connexionest affiché sur l'écran
Entrer un nom d'utilisateur(en minuscule)
Eventuellementdemande de mot de passe
Entrer le mot de passe
Mot de passe utilisateurPour des raisons de sécurité, l'ouverture d'une session utilisateur doit êtreprotégée par un mot de passe.La saisie du mot de passe se fait sans écho.La commande passwd permet de positionner ou de changer un mot depasse avec certaines restrictions.
Terminer une session utilisateurLa déconnexion se fait en appuyant sur les touches <Ctrl> <d>ou avec la commande exit .
. En mode GRAPHIQUE
Après une bannière proposant de remplir les champs "utilisateur" et "mot depasse", l'environnement graphique bureau permet d'ouvrir n fenêtres.Ce fonctionnement utilise le mécanisme dit de pseudo-TTY .
La connexion est établieUn prompt [.....] $ est affiché
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 8 UNIXPRES
Login: user1 saisie du nom d'utilisateur$ invite du shell (prompt)
$ passwdChanging password for user1New password :Re-enter new password :
appui sur touches <Ctrl> <d> ou commande exit
Login: user1Password : xxxxxxxx
$ dateThu Apr 25 14:13:11 MET 2003
$ whouser1 tty12 Apr 25 09:07 *user2 tty13 Apr 25 10:50 *user5 tty23 Apr 25 14:12 *user7 pts/0 Apr 25 11:15user12 pts/1 Apr 25 11:06
$ tty/dev/tty12 * ttynn ou vc/nn
LANCEMENT D'UNE COMMANDE
commande [-options] [argument1] . . . [argumentn]
- Un ou plusieurs espaces ou tabulations sont utilisés comme séparateur.
Exemples :wc (word count) affiche le nombre de lignes, de mots, de caractères
d'un fichier.
$ wc /etc/passwd32 37 1139 /etc/passwd
$ wc -l /etc/passwd32 /etc/passwd
$ wc -lc /etc/passwd /etc/group32 1139 /etc/passwd15 337 /etc/group47 1476 total
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 9 UNIXPRES
ARRÊT DE L'AFFICHAGE
Deux possibilités :- Par le clavier :
- Arrêt du défilement de l'affichage <Ctrl> <s>- Reprise de l'affichage <Ctrl> <q>
- Au lancement de la commande en utilisant | (pipe) et une des commandes de filtrage page par page more, pg, less.
$ commande | pgh liste des commandes de pg<entrée> avance d'une page-1 une page en arrière+1l avance d'une ligneq quitter
Exemple avec cal qui affiche le calendrier d'une année :
$ cal 2000 | pg
Dans ce cas, la commande cal envoie ses informations à la commande pg par lemécanisme du pipe ou tube de communication (sera vu dans le module "redirections".)
LES MESSAGES D'ERREURS
Si la commande n'existe pas ou si elle n'est pas trouvée :
$ dataksh : data: not found
Si la syntaxe d'appel est erronée :- Chaque commande vérifie ses propres arguments et affiche son propre
message d'erreur.- Dans de nombreux cas, le message d'erreur donne la syntaxe de la
commande.
Exemple :$ wc -? /etc/groupusage: wc [-kclw] [name ...]
Les crochets signifient non obligatoire.
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 10 UNIXPRES
EXERCICES
Prise en main d’UNIX / LINUX
1/ Se connecter avec un nom d’utilisateur.
ex: user1<Entrée>
Si le système vous demande un mot de passe, demandez de l'aide.
2/ Attendre l’invite système $, vous avez la main. Tapez :
$ date<Entrée>
3/ Je vais mettre un mot de passe à mon identité :
$ passwd<Entrée>
suivre les indications...
4/ Quels sont les autres utilisateurs connectés ?
$ who<Entrée>
5/ Qui suis-je ?
$ who am i<Entrée>$ whoami<Entrée>
6/ Quel est le nom de mon terminal ?
$ tty<Entrée>
7/ Message sur ma console :
$ echo "Bonjour les Copains "<Entrée>$ echo "Salut \c"<Entrée> (echo -n "Salut " en Linux)$ echo "le prompt $ se trouve après Salut"<Entrée>$ echo "Aujourd’hui nous sommes le : " ; date<Entrée>$ echo <Entrée>$ echo "Deux commandes sur une ligne sont séparées par un ;"<entrée>
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 11 UNIXPRES
EXERCICES (suite)
8/ Essayer cal avec ou sans arguments :
$ cal 01 2001<Entrée>$ cal 01<Entrée>$ cal 2001<Entrée>$ cal 2001 | more<Entrée>
9/ Se déconnecter :
Taper simplement <Ctrl> <d>
10/ Se reconnecter ; le système devrait vous demander un mot de passeIl vaudrait mieux se souvenir de celui que vous avez donné !!
11/ Commandes supplémentaires :
$ logname<Entrée>$ uname< Entrée>$ uname -a<Entrée>$ uname -n<Entrée>$ who | wc -l<Entrée>
12/ Utilisation de la documentation en ligne :
$ man passwd<Entrée>$ man who<Entrée>
PRESENTATION ET PRISE EN MAIN D'UNIX / LINUX
LDVINCI Rev3 1 - 12 UNIXPRES
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 1 UNIXFIC
UNIX / LINUX
MANIPULER LES FICHIERS
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 2 UNIXFIC
SOMMAIRESection Page
ORGANISATION DES FICHIERS 2 - 3Les types de fichiers 2 - 3Organisation des fichiers 2 - 5Exemple d'une arborescence UNIX / LINUX 2 - 5
LE DEPLACEMENT DANS LE SYSTEME DE FICHIERS 2 - 6
OPERATIONS DE BASE SUR LES REPERTOIRES 2 - 7Lister le contenu d'un répertoire 2 - 7Repérer le type des fichiers 2 - 7Créer un répertoire 2 - 7
OPERATIONS DE BASE SUR LES FICHIERS ORDINAIRES 2 - 8Reconnaître un fichier ordinaire 2 - 8Lire un fichier ordinaire ASCII 2 - 8Créer un fichier ordinaire ASCII 2 - 8
LES NOMS DE FICHIERS 2 - 10Donner un nom à la création du fichier 2 - 10Génération de noms par substitution de caractères génériques 2 - 10
DESTRUCTION DE FICHIERS 2 - 11Destruction d'un fichier ordinaire 2 - 11Destruction d'un répertoire 2 - 11
HISTORIQUE DES COMMANDES 2 - 13
EXERCICES 2 - 14Manipuler des fichiers 2 - 14
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 3 UNIXFIC
ORGANISATION DES FICHIERS
Les types de fichiers
Fichier ordinaire
Ensemble d'informations (texte ASCII ou binaire).
Les fichiers ordinaires n'ont pas de structure associée.C'est simplement une suite d'octets enregistrés sur le disque.
Un découpage logique en lignes d'un fichier permet son utilisation parcertaines commandes (vi, grep ...).
Fichier répertoire (ou directory)
Contient un ensemble de noms de fichiers.Chaque nom de fichier est associé à un numéro qui permet l'accès au fichier.
Fichier spécial
Nom de fichier associé à un périphérique ou à un mécanisme decommunication.Ce type de fichier sera étudié dans la partie administration.
Exemples:
- Le clavier est un fichier en entrée.- L'écran est un fichier en sortie.- L'imprimante est un fichier en sortie.
Fichier lien symbolique
Nom de fichier faisant référence à un autre fichier.
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 4 UNIXFIC
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 5 UNIXFIC
Organisation des fichiers
Les fichiers UNIX / LINUX sont organisés en arborescence.
La racine (root) est le nom donné au répertoire qui se trouve au sommet del'arborescence.Ce répertoire est représenté par /
L'ensemble des fichiers est vu par l'utilisateur dans une seule arborescence.Il n'est donc pas nécessaire d'indiquer sur quel périphérique se trouve un fichier pourl'utiliser.Le 1er "/" signifie le répertoire racine.Les autres "/" sont des séparateurs entre les noms de répertoires.
user3
/
sbin dev home
user2user1
entrées sorties
bin
usr
stock
u--> /home
etc tmp
var
fichier ordinaire
fichier répertoire
fichier spécial
Le répertoire /usr/bin contient les commandesutilisateur,le répertoire /etc contient lescommandes et les fichiers de l'administrateur.
bin--> /usr/bin
root
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 6 UNIXFIC
LE DEPLACEMENT DANS LE SYSTEME DE FICHIERSDeux commandes importantes de la navigation dans l'arborescence :
pwd qui affiche le répertoire courant (print working directory)cd qui permet de se déplacer (change directory)
A la connexion, l'utilisateur est automatiquement positionné dans un répertoire ditrépertoire d'accueil ( ou HOME directory) que l'on peut connaître simplement :
$ pwd
Ensuite l'utilisateur peut se déplacer dans l'arborescence et se positionner sur lerépertoire de son choix en utilisant cd avec un chemin d'accès en paramètre.
- chemin d'accès par le nom absolu du fichier, c'est-à-dire en partant de /$ pwd/usr/bin$ cd /home/user1/stock$ pwd/home/user1/stock
- chemin d'accès par le nom relatif du fichier, rapport au répertoire courant$ pwd/home$ cd user1/stock$ pwd/home/user1/stock
Il est aussi possible de remonter dans l'arborescence grâce au nom de fichier
.. (point-point) qui représente le répertoire père du répertoire courant.
$ pwd/home/user1$ cd ..$ pwd/home
Pour revenir sous son répertoire de connexion, il suffit de saisir cd$ cd /$ pwd/$ cd$ pwd/home/user1
Pour revenir sous le répertoire précédent cd - (tiret)
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 7 UNIXFIC
OPERATIONS DE BASES SUR LES REPERTOIRES
Lister le contenu d'un répertoire
La commande ls (list content of directory) permet d'afficher le nom des fichierscontenus dans un répertoire.
- Afficher le contenu du répertoire courant :$ ls
- Afficher le contenu d'un autre répertoire :$ ls /usr/bin$ Is /usr/bin | pg
- Obtenir des informations supplémentaires sur les fichiers listés :$ ls -l
Repérer le type des fichiers
L'affichage de la commande ls -l permet de repérer le type des fichiers :- la ligne commence par un d : fichier répertoire (directory)- la ligne commence par un - : fichier ordinaire- la ligne commence par b, c : fichier spécial- la ligne commence par l : fichier lien symbolique
Créer un répertoire
La création d'un répertoire se fait par la commande mkdir.$ mkdir stock$ cd stock$ Is -a.. .
la commande mkdir créant 1 répertoire avec 2 entrées :- le répertoire . lié au répertoire créé.
- le répertoire . . lié au répertoire père.
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 8 UNIXFIC
OPERATIONS DE BASES SUR LES FICHIERS ORDINAIRES
Reconnaître un fichier ordinaire ASCII
La commande file analyse le contenu du fichier passé en paramètre et affiche lanature de ses informations.
$ file /etc/passwd/etc/passwd : ascii text
$ file /usr/bin/ls/usr/bin/ls : 680x0 R3.1executable page aligned stripped
Lire un fichier ordinaire ASCII
cat affiche le contenu d'un ou plusieurs fichiers.pg, more (unix) permettent d'afficher les gros fichiers page par page.less (linux)
$ pg fichier +3l avance de 3 lignes<entrée> avance d'une page-1 une page en arrièreh help q quitter
$ more fichier <entrée> avance d'une ligneespace avance d'une pageh help q quitter
Créer un fichier ordinaire ASCII
Il n'existe pas de commandes spécialisées pour créer des fichiers ordinaires.Chaque utilitaire (copies, éditeurs de texte, etc ...) crée ses fichiers si besoin.Voici un moyen simple de créer un fichier de texte :
$ cat > entreesligne 1 saisie au clavierligne 2 saisie au clavier<Ctrl> <d>
- Le ">" permet de rediriger la sortie standard d'une commande.- "cat" sans arguments prend en entrée le standard input, c'est-à-dire le
clavier.- Tout le texte frappé est copié dans le fichier de sortie qui est créé par la
redirection (> fichier crée un fichier vide).- <Ctrl> <d> en début de ligne indique la fin d'entrée des données.
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 9 UNIXFIC
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 10 UNIXFIC
LES NOMS DE FICHIERS
Donner un nom à la création du fichier
Longueur des noms :- Pour UNIX sysV les noms de fichiers sont limités à 14 caractères.- Pour les systèmes de fichiers FFS, BERKELEY, depuis la version
BSD4.2 et les systèmes de fichiers type JFS, Ext2 les noms sontextensibles jusqu'à 255 caractères.
Il n'y a pas de restriction quant à l'orthographe des noms mais voici quelques conseilsà respecter :
- Excepté . (point) et _ (souligné), il ne faut pas utiliser les caractèresspéciaux, car la plupart ont une interprétation possible par le shell.- Un fichier dont le nom commence par point est caché à l'utilisateur.- Les minuscules et les majuscules sont interprétées différemment.
$ > .fic$ Is$ Is -la
Génération de noms par substitution de caractères génériques
Le shell permet l'emploi de caractères génériques qui sont utilisés pourconstruire des noms de fichiers à partir des fichiers sous le répertoire cou-rant ou le répertoire cité.
* remplace n'importe quelle chaîne de caractères par rapportaux noms des objets du répertoire courant ou du répertoirecité.
? remplace un caractère quelconque.[ ] remplace un des caractères contenus entre les crochets.[! ] remplace un des caractères non contenus entre les crochets.
Exemples :$ ls -l /usr/bin/c*$ ls -l /usr/bin/c?
Annulation de la substitution des caractères génériques avec \ (antislash).
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 11 UNIXFIC
DESTRUCTION DE FICHIERS
Destruction d'un fichier ordinaire
rm destruction d'un fichier ordinaire.
Voici deux options à connaître :
-i interactif, une question de validation est posée.-f ne tient pas compte des protections des fichiers.
$ rm entrees$ rm -i fichier
Destruction d'un répertoire
Si le répertoire est vide, la destruction peut se faire avec rmdir.
$ rmdir stock
Si le répertoire contient des fichiers, il faut utiliser la commande rm avecl'option -r.
$ rm -ri stock
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 12 UNIXFIC
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 13 UNIXFIC
HISTORIQUE DES COMMANDESSous BASH (LINUX)
Emacs étant en standard l'éditeur de texte naturel de LINUX, rappel etmodification de commande sont réalisables par l'emploi des touches "flèches":
flèche montante : rappel de la dernière commandeflèche droite et gauche : navigation dans la ligne affichée pour
insérer ou supprimer (touche backspace)
Visualisation des commandes déjà effectuées :$ history extrait le contenu du fichier .bash_history$ history 5 donne les 5 dernières lignes saisies au clavier.
Autres possibilités de réexécution d'une commande :. de la dernière $ !!.de la nième commande $ !n.de l'avant dernière $ !-2.de la dernière commande commençant par find $ !find
Sous KSH (serveur UNIX)
Visualisation des commandes déjà effectuées comme sous bash par :$ history
Réexécution d'une commande :. de la dernière $ r.de la nième commande $ r n.de l'avant dernière $ r -2.de la dernière commande commençant par ls $ r ls
Modification d'une commande déjà exécutée :Nécessite la déclaration de vi dans son environnement de travail par :
$ set -o vi<Echap> entre dans l'éditeur de ligne
k ou - remonte de ligne en ligne
j ou + descend de ligne en ligne
l ou espace avance d'un caractère
h ou backspace recule d'un caractère
x efface le caractère courant
a - - -<Echap> insère du texte à droite du curseur
l - - - <Echap> insère du texte à gauche du curseur
/hist recherche la ligne comprenant la chaîne "hist"r remplace le caractère sous le curseur
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 14 UNIXFIC
EXERCICES
Manipuler des fichiers
1/ Se connecter.
2/ Où êtes-vous dans la hiérarchie ?
$ pwd<Entrée>
3/ Y-a-t-il des fichiers et des répertoires ?
$ ls -l<Entrée>
Pour tout effacer de manière interactive :
$ rm -ri *<Entrée>
4/ Je vais entrer du texte dans le fichier tintin :
$ cat > tintin<Entrée> blabla<Entrée> BLABLA<Entrée> blablabla<Entrée> fin<Entrée>
Taper <Ctrl><d> pour terminer l’entrée du texte.
5/ Lister le contenu de tintin :
$ cat tintin<Entrée>
6/ Lister le contenu de votre répertoire :
$ ls -l<Entrée>
7/ Lister les répertoires /usr/bin /dev :
$ ls -l /usr/bin<Entrée> ou ls -C /usr/binou ls -l /usr/bin | pg
8/ Créer les répertoires src et bin :$ mkdir src bin
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 15 UNIXFIC
9/ Se positionner sous src
10/ Créer un fichier de nom * (astérisque)
11/ Revenir sous le répertoire de connexion
12/ Lister votre répertoire courant :$ ls -l$ ls$ ls -Rl (-R est récursif : liste une sous-arborescence)
13/ Détruire le répertoire src :$ rm src/*$ rmdir srcou$ rm -ri src
14/ Rechercher et modifier les commandes :<Echap>k n fois jusqu'au lsou/lsA insère au bout de la ligneajouter / /usr
MANIPULER LES FICHIERS
LDVINCI Rev3 2 - 16 UNIXFIC
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 1 UNIXPRO
UNIX / LINUX
PROTEGER SES FICHIERS
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 2 UNIXPRO
SOMMAIRE
Section Page
DESCRIPTION D'UN UTILISATEUR 3 - 3
Notion d'utilisateur 3 - 3
DESCRIPTION D'UN GROUPE 3 - 3
Notion de groupe 3 - 3
PROTECTIONS DES FICHIERS ET REPERTOIRES 3 - 4
Les droits d'accès d'un fichier 3 - 4Inode 3 - 4Les droits au niveau d'un fichier ordinaire 3 - 5Les droits au niveau du répertoire 3 - 5
LA COMMANDE ls -l 3 - 7
Fichiers ordinaires 3 - 7Fichiers répertoires 3 - 7
CHANGEMENT DES DROITS D'ACCES 3 - 8
Changer les droits : la commande chmod 3 - 8Changement de propriétaire et de groupe 3 - 11
EXERCICES 3 - 12
Protéger ses fichiers 3 - 12
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 3 UNIXPRO
DESCRIPTION D'UN UTILISATEUR
Notion d'utilisateur
Un utilisateur est représenté par les champs suivants du fichier /etc/passwd :
- nom- ["mot de passe"] (dépendant du système d'exploitation)- numéro (uid) - "user identifier number"- numéro de groupe (gid) - "group identifier number"- [commentaire]- répertoire d'accueil- [programme à lancer]
Lors de la connexion, un programme désigné est lancé :généralement il s'agit du shell.
NOTA : Les informations entre crochets sont facultatives.
DESCRIPTION D'UN GROUPE
Notion de groupe
Un groupe d'utilisateurs rassemble un certain nombre d'utilisateurs pouvantpartager les mêmes fichiers.
Il est constitué par les champs suivants du fichier /etc/group :
- nom du groupe- inutilisé ou dépendant du système d'exploitation- numéro du groupe (gid)- [liste des utilisateurs]
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 4 UNIXPRO
PROTECTIONS DES FICHIERS ET REPERTOIRES
Les droits d'accès d'un fichier
A la création du fichier :
- Enregistrement de l' uid (user identifier) du propriétaire
- Enregistrement du gid (group identifier) du propriétaire
- Définition et enregistrement des droits d'accès
....
Un fichier est protégé par un ensemble de bits définissant les droits d'accès.
r w x r w x r w x suid sgid
propriétaire groupe autres
Inode
Les caractéristiques d'un fichier (protection, type, adresses des données) sontcontenues dans une suite d'octets appelée l'inode.
Les inodes (un par fichier) forment une liste, la i-list, qui rassemble l'ensemble descaractéristiques des fichiers.
Le numéro d'inode, le i-num, est donné par la commande :
$ ls -li
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 5 UNIXPRO
Les droits au niveau d'un fichier ordinaire
r droit d'accès en lecture.
w droit d'accès en écriture.
x droit d'exécution.
suid : set user-idsgid : set group-id
Ces deux informations permettent d'autoriser l'accès à un fichier parl'intermédiaire d'un programme.
L'utilisateur prend temporairement, durant l'exécution du programme,l'identité du propriétaire ou du groupe et donc leurs droits.
Ainsi, les fichiers /etc/passwd et/ou /etc/security/passwd(UNIX),/etc/shadow(LINUX) sont interdits d'accès en écriture mais, parl'intermédiaire de la commande passwd, l'utilisateur peut écrire son mot depasse dans /etc/passwd (système non sécurisé) ou dans-/etc/security/passwd (UNIX)- /etc/shadow (LINUX) -(système sécurisé).
$ ls -l /usr/bin/passwd
$ ls -l /etc/passwd
$ ls -l /etc/security/passwd
Les droits au niveau du répertoire
r autorise la lecture du contenu du répertoire (liste des fichiers).
w autorise la création ou la suppression d'un fichier sous lerépertoire.
x droit d'accès au contenu du répertoire.
nota : Les droits ne sont valables qu'à un seul niveau :Un sous-répertoire peut être protégé, alors que le répertoire nel'est pas et vice-versa.
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 6 UNIXPRO
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 7 UNIXPRO
LA COMMANDE ls -lFichiers ordinaires
$ ls -l /usr/bintotal 6993-rwxrwxr-x 1 bin bin 16336 Mar 8 2002 cat-rwxrwxr-x 3 root bin 16124 Mar 8 2002 cp-rwxrwxr-x 1 bin bin 18760 Mar 8 2002 date-rwxrwxr-x 1 bin bin 13320 Mar 8 2002 echo-rwxrwxr-x 2 bin bin 33896 Mar 9 2002 ed-rwxrwxr-x 1 bin bin 28928 Mar 8 2002 file-rwxrwxr-x 3 root bin 16124 Mar 8 2002 ln-rwxrwxr-x 8 bin bin 60152 Mar 8 2002 ls-rwxr-sr-x 1 bin mail 63264 Apr 2 2002 mail-rwxrwxr-x 1 bin bin 15276 Mar 8 2002 mesg-rwxr-xr-x 1 root bin 13180 Mar 8 2002 mkdir-rwxrwxr-x 3 root bin 16124 Mar 8 2002 mv-rwsr-sr-x 1 root sys 23600 Mar 8 2002 passwd-rwxrwxr-x 1 bin bin 14300 Mar 8 2002 pwd-rwxrwxr-x 1 bin bin 16384 Mar 8 2002 rm-rwxr-xr-x 1 root bin 13176 Mar 8 2002 rmdir-rwxrwxr-x 2 bin bin 52504 Mar 9 2002 sh-rwxrwxr-x 1 bin bin 14672 Mar 8 2002 wc-rwxrwxr-x 1 bin bin 56144 Mar 8 2002 who
nombrede liens
type etdroitsd'accès
nomdate de dernièremodification
taillepropriétaire groupe
nota : Pour l'affichage, le bit s est représenté à l' endroit du bit x :- s (minuscule) signifie que le bit x est également positionné.- S (majuscule) signifie que le bit x n'est pas positionné.
Fichiers répertoires$ ls -l /utotal 89drwxr-xr-x 2 user1 stagiair 512 Mar 18 11:13 user1drwxr-xr-x 2 user2 stagiair 512 Mar 25 09:15 user2drwxr-xr-x 2 user3 stagiair 512 Mar 25 09:27 user3drwxr-xr-x 2 user4 stagiair 1024Mar 25 16:30 user4
nota : . est un lien sur le nom de répertoire.. est un lien sur le nom du répertoire père
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 8 UNIXPRO
CHANGEMENT DES DROITS D'ACCÈS
Changer les droits : la commande chmod
La commande chmod permet de modifier les droits sur les fichiers et répertoires.
Deux syntaxes possibles :
- En absolu : chmod "valeur octale" fichier
r w x r - x r - - 1 1 1 1 0 1 1 0 0 7 5 4
$ chmod 754 fichier
- En symbolique : chmod [ qui ] operation [ permission ] fichier
qui : u userg groupo othera all
opérations : + ajoute des droits- enlève des droits= met des droits,enlève les autres
permissions : r lecturew écriturex exécutions met suid ou guid (fonction de qui)
$ chmod g-w,o=r fichier
nota : Seul le propriétaire d'un fichier et l'administrateur peut enchanger les droits.
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 9 UNIXPRO
$ cat >fichierecho "fichier d’essai des droits d’accès"<Ctrl> <d>
$ ls -l fichier-rw-rw-r-- 1 user1 base 42 Apr 5 13:44 fichier
$ chmod 754 fichier$ ls -l fichier-rwxr-xr-- 1 user1 base 42 Apr 5 13:44 fichier
$ chmod g+w,o=x fichier$ ls -l fichier-rwxrwx--x 1 user1 base 42 Apr 5 13:44 fichier
$ cat fichierecho "fichier d’essai des droits d’accès"$ fichierfichier d’essai des droits d’accès
$ chmod 000 fichier$ ls -l fichier---------- 1 user1 base 42 Apr 5 13:44 fichier
$ cat fichiercat: cannot open fichier$ fichierksh : fichier : cannot execute$ echo fin >fichierksh : fichier : cannot create
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 10 UNIXPRO
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 11 UNIXPRO
Changement de propriétaire et de groupe(uniquement sous super-user dans la plupart des versions)
La commande chgrp permet de changer le groupe d'un fichier.
La commande chown permet de changer le propriétaire d'un fichier.
$ echo bonjour >fichier$ chmod 700 fichier$ ls -l fichier-rwx------ 1 user1 base 8 Apr 5 14:06 fichier
$ cat fichierbonjour
$ chgrp public fichier$ ls -l fichier-rwx------ 1 user1 public 8 Apr 5 14:06 fichier
$ chown phil fichier$ ls -l fichier-rwx------ 1 phil public 8 Apr 5 14:06 fichier
$ cat fichiercat: cannot open fichier
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 12 UNIXPRO
EXERCICESProtéger ses fichiers
1/ Ecrire les procédures suivantes dans votre répertoire d’accueil.
bonjour est le nom du fichier contenant les commandes qui suivent:
$ cat > bonjourecho "BONJOUR"echo "Comment ca va?"<Ctrl> <d>
reponse est le nom du fichier contenant les commandes qui suivent:
$ cat > reponseecho "BONJOUR"echo "Tres bien.Et toi?"<Ctrl> <d>
2/ Quelles sont les autorisations d’accès sur les objets que vous avez créés?
$ ls -l -R
3/ Exécuter bonjour et reponse.Positionner les droits d’accès en exécution sur les deux fichiers.Re-exécuter bonjour et reponse.
$ bonjour$ chmod u+x bonjour$ bonjour
4/ Enlever les accès pour bonjour et reponse aux utilisateursde votre groupe mais aussi à tous les autres utilisateurs.
$ chmod go= fichier
Aurait-on pu utiliser chmod différemment? Essayer les possibilités surd’autres fichiers (g-rwx, ou o-rwx, ou 700 .....).
5/ Modifier les accès de bonjour et reponse afin de permettre l’accèsuniquement à votre groupe en lecture et exécution. L’accès à votre fichierest évidemment autorisé à l’utilisateur "root".
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 13 UNIXPRO
6/ Essayer la commande chgrp sur un fichier inutile, si vous avez la per-mission de le faire :
$ chgrp groupe fichier
7/ Ecrire le script suivant :
$ cat >rmecho "SALUT"<Ctrl> <d>
Le fichier rm est créé; Modifiez le fichier pour le rendre exécutable,
$ chmod u+x rm
et ensuite essai d’exécution de rm puis essai de suppression d’un fichierexistant.
$ rm fic
Que se passe-t-il?
NE JAMAIS DONNER COMME NOM DE FICHIER LE NOM D’UNECOMMANDE SYSTEME DEJA EXISTANTE
PROTEGER SES FICHIERS
LDVINCI Rev4 3 - 14 UNIXPRO
LDVINCI Rev4 4 - 1 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
UNIX / LINUX
COPIES, DEPLACEMENTS,LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE
FICHIERS
LDVINCI Rev4 4 - 2 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
LDVINCI Rev4 4 - 3 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
SOMMAIRE
Section Page
COPIER DES FICHIERS 4 - 4
DEPLACER , RENOMMER UN FICHIER 4 - 5
CREER UN LIEN SUR UN FICHIER 4 - 7
RECHERCHER UN FICHIER 4 - 8
SAUVEGARDER DES FICHIERS 4 - 10
RESTAURER DES FICHIERS 4 - 11
EXERCICES 4 - 12
Copies, déplacements, liens, recherche de fichiers 4 - 12sauvegarde restauration de fichiers
LDVINCI Rev4 4 - 4 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
COPIER DES FICHIERSLa commande cp (copy) permet de copier des fichiers.
- Copie d'un fichier :cp source destination
- Copie d'un ensemble de fichiers vers un répertoire :cp fichier1 fichier2 . . . repertoire
- Copie de tout un répertoire :cp * repertoire
- Copie de toute une arborescence :cp -r ...... repertoire
$ pwd/home/user2
$ ls -ltotal 2drwxrwxr-x 2 user2 base 512 Apr 5 16:31 copiedrwxrwxr-x 2 user2 base 512 Apr 5 16:32 source
$ cd source$ ls -ltotal 3-rw-rw-r-- 1 user2 base 16 Apr 5 16:25 original1-rw-rw-r-- 1 user2 base 17 Apr 5 16:26 original2-rw-rw-r-- 1 user2 base 18 Apr 5 16:26 original3
$ ls -l ../copietotal 0
$ cp original1 ../copie/original1.copie$ ls -l ../copietotal 1-rw-rw-r-- 1 user2 base 16 Apr 5 16:33 original1.copie
$ cp * ../copie$ cd ../copie$ ls -ltotal 4-rw-rw-r-- 1 user2 base 16 Apr 5 16:34 original1-rw-rw-r-- 1 user2 base 16 Apr 5 16:33 original1.copie-rw-rw-r-- 1 user2 base 17 Apr 5 16:34 original2-rw-rw-r-- 1 user2 base 18 Apr 5 16:34 original3
LDVINCI Rev4 4 - 5 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
DEPLACER , RENOMMER UN FICHIER
La commande mv (move) permet de déplacer, renommer un fichier.
- Déplacement d'un fichier : mv source destination
- Déplacement de plusieurs fichiers vers un répertoire : mv fichier1 fichier2 . . repertoire mv * repertoire
- Déplacement d'un répertoire : mv repertoire1 repertoire2
$ pwd/home/user2/source$ ls -l-rw-rw-r-- 1 user2 base 16 Apr 5 16:25 original1-rw-rw-r-- 1 user2 base 17 Apr 5 16:26 original2-rw-rw-r-- 1 user2 base 18 Apr 5 16:26 original3
$ mv original1 original1.bis$ ls -l-rw-rw-r-- 1 user2 base 16 Apr 5 16:25 original1.bis-rw-rw-r-- 1 user2 base 17 Apr 5 16:26 original2-rw-rw-r-- 1 user2 base 18 Apr 5 16:26 original3
$ cd ..$ pwd/home/user2$ ls -ldrwxrwxr-x 2 user2 base 512 Apr 5 16:34 copiedrwxrwxr-x 2 user2 base 512 Apr 5 16:36 source
$ mv source deplace$ ls -ldrwxrwxr-x 2 user2 base 512 Apr 5 16:34 copiedrwxrwxr-x 2 user2 base 512 Apr 5 16:36 deplace$ ls -l deplace-rw-rw-r-- 1 user2 base 16 Apr 5 16:25 original1.bis-rw-rw-r-- 1 user2 base 17 Apr 5 16:26 original2-rw-rw-r-- 1 user2 base 18 Apr 5 16:26 original3
LDVINCI Rev4 4 - 6 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
LDVINCI Rev4 4 - 7 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
CREER UN LIEN SUR UN FICHIER
La création de lien sur un fichier consiste à donner plusieurs noms et donc plusieurschemins d'accès à un fichier.
La commande ln (link) permet de créer des liens.
- Création d'un lien : ln source destination
La commande ls -l donne le nombre de liens d'un fichier.La commande rm permet d'effacer un lien.Pour supprimer un fichier il faut enlever tous les liens.
$ pwd/home/user2$ ls -ltotal 2drwxrwxr-x 2 user2 base 512 Apr 5 17:05 applidrwxrwxr-x 2 user2 base 512 Apr 5 16:36 source$ ls -li applitotal 17404 -rw-rw-r-- 1 user2 base 72 Apr 5 17:05 fichier1
$ ln appli/fichier1 fichier.lien$ ls -li applitotal 17404 -rw-rw-r-- 2 user2 base 72 Apr 5 17:05 fichier1$ ls -li fichier.lien7404 -rw-rw-r-- 2 user2 base 72 Apr 5 1 fichier.lien
$ rm appli/fichier1$ ls -li applitotal 0$ ls -li fichier.lien7404 -rw-rw-r-- 1 user2 base 72 Apr 5 17:05 fichier.lien
LDVINCI Rev4 4 - 8 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
RECHERCHER UN FICHIER
La commande find permet de retrouver des fichers dans l'arborescence.
- Recherche par nom de fichier :$ find / -name fichier -print ( -print non obligatoire )
- Recherche par numéro (i-num) de fichier :$ find /home -inum numero -print
- Recherche par nom de propriétaire de fichier :$ find / -user nom -print
- Recherche des fichiers modifiés il y a n jours :$ find /home -mtime n -print
- Recherche des fichiers modifiés à une date plus récente que le fichier cité dans la commande :
$ find /home/user1 -newer ficref -print
- Recherche des fichiers suivant leur type (f=ordinaire, d=répertoire) :$ find /usr/bin -type d -print
- Recherche suivant les droits des fichiers :$ find /home -perm 764 -print
- Recherche des fichiers à n liens :$ find /usr/bin -links n -print
Pour éviter l'édition des messages d'erreurs à l'écran, utiliser la redirection dustandard erreur sur le fichier poubelle /dev/null.
$ find / -name fichier -print 2>/dev/null
LDVINCI Rev4 4 - 9 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
$ cd /
$ find . -name core -print
$ cd /usr/bin
$ ls -li rm2228 -r-xr-xr-x 2 bin bin 7826 09 avril 2002 rm
$ find /usr/bin -inun 2228 -print/usr/bin/rm/usr/bin/rmdir
$ pwd/home/user1
$ find /home -user user1 -print/home/user1/home/user1/res1/home/user1/res/home/user1/fic/home/user1/fic1
$ Is -ltotal 4-rw-r--r-- 1 user1 base 75 Oct 18 11:41 fic-rw-r--r-- 1 user1 base 169 Oct 18 11:42 fic1-rw-r--r-- 1 user1 base 344 Oct 18 11:46 res-rw-r--r-- 1 user1 base 68 Oct 18 11:28 res1
LDVINCI Rev4 4 - 10 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
SAUVEGARDER DES FICHIERS
Construction d'un fichier d'archive
La commande cpio -o prend sur l'entrée standard les noms de fichiers àsauvegarder dans le fichier d'archive.
Principe
a) Positionnement sur l'arborescence contenant les fichiers à archiver
b) find . -print | cpio -o[autres options]>fichier archive
Quelques autres options :
-a maintient la date de dernier accès effectué sur les fichiers.
-c écrit un en_tête ASCII (archive portable sur d'autres systèmes).
-v affiche le nom des fichiers archivés à l'écran.
Nota :Le fichier archive peut être :
. 1 fichier ordinaire fic
. 1 fichier spécial /dev/xxxx
LDVINCI Rev4 4 - 11 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
RESTAURER DES FICHIERS
Gestion d'un fichier d'archive
La commande cpio -i reconstruit une arborescence à partir d'un fichierd'archive.
Principe
a) Positionnement sur l'arborescence devant recevoir les fichiers àrestaurer.
b) cpio -i[autres options] [arguments de sélection]<fichier archive
- Utilisation possible des caractères génériques ? * [ ] pourconstruire les arguments de sélection.Si pas d'arguments de sélection, restauration de tous les fichiersde l'archive.
- Les fichiers restaurés auront les droits d'accès enregistrés parcpio -o, auront même propriétaire/groupe que l'utilisateur exécutantcpio -i.
Quelques autres options :
-c si utilisées lors de cpio -o.
-d crée des fichiers de type répertoire si nécessaire.
-m conserve la date de dernière mise à jour pour les fichiers restaurés.
-u copie inconditionnelle des fichiers de même nom.
-v affiche à l'écran le nom des fichiers restaurés.
-f restaure les fichiers ne répondant pas aux arguments de sélection.
-t extrait les caractéristiques des fichiers archivés (droits d'accès, uid,nom ...).
-r change les noms des fichiers restaurés par dialogue avec l'utilisateur.
LDVINCI Rev4 4 - 12 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
EXERCICESASSUREZ VOUS D’ETRE TOUJOURS DANS LE BON REPERTOIRE (pwd)
1/ Créer les fichiers de texte fic1 et fic2 dans votre répertoire d’accueil
2/ Copier chaque fichier dans un fichier de nom fichier.old$ cp fic1 fic1.old
3/ Créer les répertoires src et bin$ mkdir src bin
4/ Copier les fichiers fic1 et fic2 dans src, les *.old dans bin.$ cp fic1 src/fic1ou$ cd src ; cp ../fic1 fic1ou$ cd src ; cp ../fic1 .
5/ Détruire les fichiers du répertoire d’accueil.$ cd$ rm fic1 etc...ou$ rm -i fic1 fic2 ...
6/ On aurait pu choisir une solution plus élégante ? Laquelle ?L’essayer en mettant les fichiers fic1 fic2 fic1.old fic2.old dans votrerépertoire d’accueil.
7/ Pour la suite de l’exercice il faut que vous ayez les fichiersfic1 et fic2 dans bin fic1.old et fic2.old dans srcet qu’ils n’existent pas dans votre répertoire d’accueil (HOME).
Créer un lien de nom fic3 sous votre répertoire d'accueil équivalent à fic1.$ cd$ ln bin/fic1 fic3
LDVINCI Rev4 4 - 13 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
EXERCICES (suite)
8/ Lister les deux fichiers fic1 et fic3.$ ls -il bin/fic1 fic3
Que remarquez-vous ?
9/ Essayer d’annuler fic3. A-t-il disparu ? Et fic1 ? Pourquoi ?$ rm fic3
10/ mv permet de renommer un fichier. Renommer fic2.old dans le répertoiresrc en lui donnant comme nom fic4.$ cd src$ mv fic2.old fic4
ou $ mv src/fic2.old src/fic4
11/ Rechercher le fichier vi.$ find /usr/bin -name vi -print 2> /dev/null
12/ Trouver l'inode du fichier vi.$ Is -il du ficher vi.
13/ Rechercher tous les fichiers ayant le même i-num que vi.$ find /usr/bin -inum "inode-de-vi" -print 2>/dev/null
14/ A partir des fichiers de votre répertoire d'accueil créer un fichier d'archivesous /tmp suffixé par votre nom utilisateur.$ cd$ find . -print | cpio -ocv >/tmp/archi.userx
15/ Vérifier le contenu de l'archive créée.$ cpio -itcv</tmp/archi.userx
16/ Détruire le contenu de votre répertoire d'accueil et le restaurer à partir del'archive.$ cd$ rm -r *$ rm .*$ cpio -icvdm </tmp/archi.userx
LDVINCI Rev4 4 - 14 UNIXCOP
COPIES, DEPLACEMENTS, LIENS, RECHERCHE DE FICHIERS,SAUVEGARDE RESTAURATION DE FICHIERS
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 1 UNIXCOM
UNIX / LINUX
COMMUNIQUER ENTRES UTILISATEURS
AFFICHERET
IMPRIMER
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 2 UNIXCOM
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 3 UNIXCOM
SOMMAIRE
Section Page
COMMUNICATION PAR MAILX 5 - 4Envoi d'un message par mailx 5 - 4Réception d'un message par mailx 5 - 4
COMMUNICATION PAR WRITE 5 - 7Envoi d'un message par write 5 - 7Protéger son écran 5 - 7
GESTION LOGICIELLE DES IMPRESSIONS : LE SPOOL 5 - 9
COMMANDES DE GESTION DES IMPRESSIONS 5 - 9
LES IMPRESSIONS UNIX 5 - 11Présentation de l'affichage 5 - 11La commande lp 5 - 11
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 4 UNIXCOM
COMMUNICATION PAR MAIL OU MAILX
Le service de messagerie est un service système devant être activé explicitement.
Envoi d'un message par mailx (serveur UNIX)
La commande mailx permet d'envoyer des messages à un autre utilisateur,connecté ou non.
$ mailx user1Subject : objet du messagesaisie du message
<Ctrl><d>Cc: user2, user3
Réception d'un message par mailx
Si l'utilisateur est connecté, un message lui indiquera qu'il a reçu un courrier,sinon ce message sera affiché lors de la prochaine connexion.
Le retrait des messages se fait par mailx.
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 5 UNIXCOM
$ whoamiagou$$ mail rootSubject: présentation de mailxMessage envoyé à l'utilisateur rootCc:$
# whoamiroot# mailxCourrier [5.2 UCB] [AIX 4.1] Entrez ? pour afficher l'aide."/var/spool/mail/root": 1 message 1 nouveau(x)>N 1 agou Fri Dec 18 17:14 11/312 "présentation de mailx"? ?Commandes de contrôle:
q Abandon - application des commandes de la session en cours.x Abandon - restauration de l'état initial de la boîte aux lettres! <cmd> Lancement d'un shell, exécution de la commande <cmd>
et retour à la session.cd [<rép>] Passage dans le répertoire <rép> ou dans le répertoire de connexion
($HOME).Commandes d'affichage:
t [<liste_msg>] Affichage des messages de <liste_msg> ou du message en cours.n Affichage du message suivant.f [<liste msg> Affichage des en-têtes de message.h [<num>] Affichage des en-têtes du groupe comportant le message <num>.
Gestion des messages :e [<num>] Edition du message <n°> (éditeur par défaut: ex).d [<liste_msg>] Suppression des messages de <liste_msg> ou du message en cours.u [<liste_msg>] Rappel des messages supprimés.s [<liste_msg>] <fich>Adjonction des messages (en-têtes compris) dans le fichier <fich>.w [<liste_msg>]<fich> Adjonction des messages (texte seulement) dans le fichier <fich>.pre [<liste_msg>] Conservation des messages dans la boîte aux lettres.
Création de courrier :m <liste_adr> Création et envoi d'un nouveau message aux adresses de la <liste_adr>.r [<liste_msg>] Envoi d'une réponse aux expéditeurs et destinataires des messages.R [<liste_msg>] Envoi d'une réponse aux expéditeurs des messages.
a Affichage de la liste des alias et de leurs adresses.========================Commandes de boîte aux lettres=========================? e 1Message 1:From agou Fri Mar 18 17:14:18 2002Date: Fri, 18 Mar 2002 17:14:18 + 0200From: agou (alain gourmel)To: rootSubject: présentation de mailxEtat: 0Message envoyé a l'utilisateur root? q#
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 6 UNIXCOM
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 7 UNIXCOM
COMMUNICATION PAR WRITE
Envoi d'un message par write
La commande write permet de transmettre immédiatement un message à unautre utilisateur connecté.
$ write jeantextedumessage<Ctrl><d>
L'utilisateur destinataire reçoit les lignes au fur et à mesure qu'elles sont écrites.
Il y a donc possibilité d'effectuer un dialogue.
Protéger son écran
la commande mesg inhibe ou non les messages pouvant arriver (ceci évited'avoir des écrans perturbés).
$ mesgis y$ mesg n$ mesgis n
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 8 UNIXCOM
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 9 UNIXCOM
GESTION LOGICIELLE DES IMPRESSIONS : LE SPOOL
Les impressions sont organisées en file d'attente pour éviter les mélanges defichiers sur la ou les imprimante(s).
Ceci est pris en charge par un ensemble de programmes et de fichiers : spool(shared Peripheral Output On Line)
(fic1) (fic2)
impression de fic1
SPOOLimpression de fic2
pr1
COMMANDES DE GESTION DES IMPRESSIONS
Suivant les systèmes UNIX, les commandes de gestion des impressions changent.
Mettre un fichier dans la file d'attente lp lpr enq, qprt
Connaître l'état de la file d'attente lpstat lpq enq, qchk
Supprimer un fichier de la file d'attente cancel lprm enq, qcan
<------------------ L I N U X ---------->
<--------------------------- A I X ----------------------------->
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 10 UNIXCOM
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 11 UNIXCOM
LES COMMANDES UTILES D'IMPRESSIONS
La commande pr permet de mettre en forme la sortie de l'état d'un fichier.pr [-options] fichier
Options :-n permet la numérotation des lignes du fichier.-l définit la longueur de la page en lignes (66 par défaut).-h définit un en-tête de page.-ox décale chaque ligne de x caractères vers la droite.
La commande lp notifie l'édition à la file d'attente.lp [-options] fichier
Options :-t imprime un titre sur l'état de sortie.-n spécifie le nombre d'exemplaires.-d définit l'imprimante de destination.-c copie du fichier à imprimer, modification possible du fichier origine
avant l'impression.
La commande lpstat montre le contenu des files d'attente.lpstat [-t]
La commande cancel permet de supprimer un état en file d'attente ou en coursd'édition.
cancel nom-file-d'attente ou n°-de-l'état
Exemple:
$ cat edition | pr -o8 -l22 | lprequest id is pr1-345 (standard input)
$ cat /etc/group | pr -o8 -h "group_$LOGNAME" | lp -dpr1request id is pr1-356 (standard input)
$ cat /etc/group |pr -o8 | lp -t"group_$LOGNAME" -dpr1request id is pr1-359 (standard input)
$ lpstatpr1-356 yvon 7388 Jul 3 17:10 on pr1pr1-359 yvon 7395 Jul 3 17:10 on pr1
$ cancel pr1-356 pr1-359request "pr1-356" cancelledrequest "pr1-359" cancelled
COMMUNIQUER ENTRE UTILISATEURS, AFFICHER ET IMPRIMER
LDVINCI Rev3 5 - 12 UNIXCOM
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 1 UNIXVI
UNIX / LINUX
FONCTIONS DE BASEET
FONCTIONS AVANCEESDE VI
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 2 UNIXVI
SOMMAIRE
Section Page
MISE EN OEUVRE DE VI 6 - 4Présentation de vi 6 - 4Spécification du type de terminal 6 - 4Entrée dans vi 6 - 5Sortie de vi 6 - 5
CREATION ET INSERTION DE TEXTE 6 - 6Insertion de texte dans une ligne 6 - 6Insertion de lignes 6 - 6Regroupement de lignes 6 - 6
DEPLACEMENT DU CURSEUR DANS UN FICHIER 6 - 7Sur caractères 6 - 7Sur mots 6 - 7Sur lignes 6 - 7
CHANGEMENT DE FENETRE 6 - 7
OPTIONS DE vi POSITIONNEES PAR LA COMMANDE set 6 - 9
RECHERCHES DANS LE FICHIER 6 - 10Positionnement sur numéro de ligne 6 - 10Recherche de chaîne de caractères 6 - 10
DESTRUCTION DE TEXTE 6 - 10Détruire des caractères 6 - 10Détruire des mots 6 - 10Détruire des lignes 6 - 10
REMPLACEMENT DE TEXTE 6 - 11Remplacement de caractères 6 - 11Remplacement de mots 6 - 11Remplacement de lignes 6 - 11
ANNULATION OU REPETITION D'UNE COMMANDE 6 - 11Annulation d'une commande 6 - 11Répétition d'une commande 6 - 11Compte-rendu 6 - 11
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 3 UNIXVI
SOMMAIRE (suite)
Section Page
DEPLACEMENT ET COPIE DE TEXTE 6 - 12Déplacement de texte 6 - 12Copie de texte 6 - 12
RECUPERATION D'UN FICHIER APRES ARRET BRUSQUE 6 - 12
EXERCICES 6 - 13Les bases de vi 6 - 13Le fichier "edition" 6 - 13
FONCTIONS AVANCÉES DE VI 6 - 16
COPIES ET DEPLACEMENT DE TEXTE (COMPLEMENTS) 6 - 16Insérer le contenu d'un autre fichier dans le tampon 6 - 16Insérer le résultat d'une commande dans le fichier 6 - 16Copie d'une partie du tampon dans un autre fichier 6 - 16Copie et déplacement de texte 6 - 17Echanges de tampons nommés entre fichiers 6 - 17
SUBSTITUTIONS 6 - 19Substituer des chaînes de caractères 6 - 19
LES EXPRESSIONS REGULIERES 6 - 20Les caractères spéciaux 6 - 20Quelques exemples d'expressions régulières 6 - 21
RECHERCHE D'UNE EXPRESSION REGULIERE 6 - 22
EXERCICES 6 - 23Utilisation avancée de vi 6 - 23
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 4 UNIXVI
MISE EN OEUVRE DE VI
Présentation de vi
vi est un éditeur de texte pleine page :
- L'écran est une fenêtre ouverte sur le fichier.
- Accès à l'ensemble de la fenêtre par déplacement du curseur.
- Possibilité de déplacer la fenêtre dans le fichier à sa guise.
Spécification du type de terminal
vi doit connaître le type de terminal utilisé.
Ceci se fait grâce à la variable TERM de l'environnement.
Sous LINUX, 2 grands cas se présentent :
. mode console :$ TERM=linux
. mode graphique X11 : $ TERM=xterm
Sur serveur UNIX de nombreuses possiblités se présentent suivant laconnexion :
. terminal écran/clavier ASCII : $ TERM=vt320-8
. terminal graphique : $ TERM=hft0
. fenêtre graphique : $ TERM=xterm
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 5 UNIXVI
Entrée dans vi
Appel :$ vi fichier
- la fenêtre est au début du fichier.- si le fichier n'existe pas, il sera créé par les directives de sorties.- vi est construit à partir de l'éditeur ex, la dernière ligne sert aux :
- directives en mode éditeur ligne précédées de : et terminées par <Entrée>- statistiques- messages d'erreurs.
Lecture seule :
$ view fichier
- cet appel ouvre le fichier en lecture seule, ce qui permet de consulter unfichier sans risquer de le modifier.
Sortie de vi
Avec sauvegarde :ZZ ou :x<Entrée>date de modification impactée
si modifications dans le fichierou encore
:w<Entrée> suivi de :q<Entrée>ou :wq<Entrée> date de modification
impactée à chaque réécriture
Sans sauvegarde ::q (s'il n'y a pas eu de modifications)
ou:q! (s'il y a eu modifications)
Vers le shell ::! commande
ou:sh$ commandes$ <Ctrl> <d>
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 6 UNIXVI
CREATION ET INSERTION DE TEXTE
Insertion de texte dans une ligne
a<texte><Echap> Insertion de texte derrière le curseur.La directive n'est pas affichée.<Echap> : sortie du mode insertion.
i<texte><Echap> Insertion de texte avant le curseur.
A<texte><Echap> Insertion de texte en fin de ligne.
I<texte><Echap> Insertion de texte en début de ligne.
Insertion de lignes
o<texte><Echap> Insertion d'une ligne après la lignecourante.
O<texte><Echap> Insertion d'une ligne avant la lignecourante.
Regroupement de lignes
La directive J permet de regrouper la ligne courante et la suivante.
nota : Pour insérer des caractères non imprimables, les faireprécéder du caractère <Ctrl><v>.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 7 UNIXVI
DEPLACEMENT DU CURSEUR DANS UN FICHIER
Sur caractères
ou h ou backspace
ou j ou <Entrée>
ou l ou espace
ou k
Sur mots
w W Début du mot suivant
La lettre majuscule ne tient compte que des espaces ou des tabulations.La lettre minuscule tient compte des signes de ponctuation.
Sur lignes
^ Début de ligne$ Fin de ligneCR Début de ligne suivante0 (zéro) Début de ligne physique(pour les lignes
commençant par des espaces ou des tabulations)
CHANGEMENT DE FENÊTRE<Ctrl><d> Un demi écran vers le bas (down)
<Ctrl><u> Un demi écran vers le haut (up)
<Ctrl><f> Un écran moins 2 lignes vers le bas (forward)
<Ctrl><b> Un écran moins 2 lignes vers le haut (backward)
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 8 UNIXVI
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 9 UNIXVI
OPTIONS DE vi POSITIONNEESPAR LA COMMANDE set
:set option1 [option 2] ... [option n]
nu Fait apparaître la numérotation des lignes.
nonu Enlève la numérotation des lignes.
showmode Affiche un message en bas d'écran lors d'unesaisie de texte.
list Fait apparaître les caractères non affichables(<Entrées>, Tabulation, ...).
nolist Enlève le signalement des caractères nonaffichables.
ai Automatise l'indentation lors d'une saisie de texte.La ligne saisie a automatiquement la mêmeindentation que la ligne précédente.
NOTA : La variable d'environnement EXINIT, si elle est renseignéeavec la commande set automatisera les options de vi.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 10 UNIXVI
RECHERCHES DANS LE FICHIER
Positionnement sur numéro de ligne
:n<Entrée>ou n G Le curseur se place sur la ligne n.Au besoin il y a déplacement de la fenêtre.
:$<Entrée> ou G Le curseur se place sur la dernière ligne du fichier
Recherche de chaîne de caractères
Elle se fait par : / (en avant)? (en arrière)
/chaîne<Entrée> Echo sur la dernière ligne.Curseur positionné sur la ligne contenant chaîne.
?chaîne<Entrée> Idem en remontant.n Répétition dans le même sens.N Répétition dans le sens inverse.
DESTRUCTION DE TEXTE
Détruire des caractèresx Détruit le caractère courant.3x Détruit 3 caractères.X Détruit le caractère précédent.
Détruire des motsdw Détruit le mot courant (à partir du curseur
jusqu'à la fin du mot).3dw ou d3w Détruit 3 mots.d/chaîne Détruit jusqu'à chaîne non comprise.
Détruire des lignesdd ou :d<Entrée> Détruit la ligne courante.3dd Détruit 3 lignes.d$ ou D Détruit la fin de ligne.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 11 UNIXVI
REMPLACEMENT DE TEXTE
Remplacement de caractèresrb Remplace le caractère courant par "b".R<texte><Echap> Remplace le nombre de caractères voulu par
"texte".s<texte><Echap> Remplace le caractère courant par "texte".
Remplacement de motscw<texte><Echap> Remplace 1 mot par "texte".
Le mot à remplacer est délimité par lecurseur et un $.
c2w<texte><Echap> Remplace les 2 mots qui suivent.C ou c$ Remplace la fin de ligne.c/chaîne Remplace jusqu'à chaîne non comprise.
Remplacement de lignesS<texte><Echap> Détruit la ligne courante et la remplace par
"texte".
ANNULATION OU REPETITION D' UNE COMMANDE
Annulation d'une commandeu Annule l'effet de la dernière directive de changement
(même pour elle).U Annule tous les changements faits dans la ligne
courante.
Répétition d'une commande. Effectue à nouveau la dernière commande de
modification de texte.
Compte-rendu<Ctrl><g> Donne le nom, l'état du fichier le numéro de ligne, où
est le curseur, et le % de texte au-dessus ducurseur.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 12 UNIXVI
DEPLACEMENT ET COPIE DE TEXTE
Déplacement de textePour chaque directive de destruction (x ou d ), vi mémorise la partie dé-truite jusqu'à la prochaine destruction, dans un tampon dit tampon sans nom.
Les directives p et P (put) permettent de récupérer la partie mémorisée.
Il faut au préalable positionner le curseur à l'endroit choisi sur un objet du mêmetype que l'objet détruit, c'est-à-dire :
- caractère, mot, ligne, fin de ligne
p Copie la dernière destruction après l'objet du même type.P Idem avant l'objet du même type.
Un autre moyen de déplacer des lignes :
:5,10m20 Les lignes 5 à 10 sont déplacées après la ligne 20.
Copie de texte
La directive y (yank) copie sans le détruire l'objet désigné du texte dans letampon sans nom.Il suffit ensuite de se positionner à l'endroit choisi et de récupérer le contenu dutampon sans nom par les directives p ou P.
Y3w Met les 3 mots suivants dans le tampon.Y ou yy Met la ligne courante dans le tampon.5yy Met 5 lignes dans le tampon.
Un autre moyen de copier des lignes :
:5,8t25 Les lignes 5 à 8 sont copiées après la ligne 25.
Récupération d'un fichier après arrêt brusque
Si un arrêt brutal de la machine survient (incident système, coupuresecteur), possibilité de récupérer le fichier temporaire.
- Message de la commande mail.- Récupération du fichier par :
$ vi -r fichier
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 13 UNIXVI
EXERCICESLes bases de vi
1/ Copier le fichier des noms dans votre répertoire courant$ cp /tmp/edition .
2/ Toutes les manipulations devront être effectuées sous éditeur vi$ vi edition
contenu du fichier "edition"
Aboaf Maurice 244748Adda Jen 239234Allo Jean-Pierre 255398Ben Raf 238899Bernard Jean-Paul 234567ChasserAt Paul 245678Cousin Pascal 222222Froideceaux Michel 252423Gros Lucien 212121Cayrol Patrice 123456Beux Leon 567891Dupont Jean 111111Dupont Jean 111111Dupont Patrice 222222Dupont Jojo 999999Dupont Pierre 222222Pavageau Andre 222222Serpinet RolandHolka Tadeusz 333333Senechal Yves 245646Gross Parcal 245367Fiquet Paul 265746Firon Pascale 123456Pecheur Francois 223456Grosbois Anne 123456Fiancet Henri 098765Couteau Jean 456378Causse ClaudeBlanche Michele
3/ Se déplacer à la fin du fichier puis revenir sur la première ligneUtiliser les flèchesou <Ctrl><d> et <Ctrl> <u>ou <Ctrl><f> et <Ctrl> <b>ou G et :1 Il y a de multiples manières de se déplacer.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 14 UNIXVI
EXERCICES (suite)4/ Le premier Dupont Jean se prénomme en fait Jean-Jacques.
Le premier Dupont Pierre se prénomme en fait Jean-Pierre.Faire les modifications. /Dupont Jean/ y-a-t’il un Dupont Jean?
( la recherche par critère est très utilisée ) se déplacer sur le nde Jean
a-Jacques<Echap>/Dupont Pierre/se déplacer sur le P de PierrerpiJean<Echap>
5/ Entrer votre nom et prénom avant la ligne du premier Dupont:1/Dupont/Onom prénom<Echap>
6/ Entrer le nom et prénom de votre binôme après la ligne du dernier DupontG?Dupont?onom prenom<Echap>
7/ Ecriture du fichier et sortie de l’éditeur:q Je ne peux pas sortir sans que le tampon modifié ne soit réécrit, sinon :q!:wqouZZ
8/ Entrer à nouveau dans l’éditeur, positionner puis enlever la numérotationvi edition:set nu:set nonu
9/ Dupont Jean s’appelle en fait Martin Jean. Faire la modificationpositionner le curseur sur le D de Dupontxxxxxx puis iMartin<Echap>
U annule les modifications de la ligneoudw puis iMartin<Echap>oucwMartin<Echap>
Quelle solution préférez-vous?
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 15 UNIXVI
EXERCICES (suite)
10/ Détruire la ligne Couteau Jean/Couteau Jean/dd
11/ Changer tous les Dupont en Durand/Dupont/cwDurand<Echap>n.
12/ Déplacer tous les Durand en fin de fichier4ddGp
13/ Il faut inscrire un deuxième Martin JeanDupliquer la ligneyyp
14/ Vous êtes sous l’éditeur et vous voulez connaître les utilisateurs connectés, le contenude tout le répertoire /etc, sous quel répertoire vous vous trouvez ....:! who:! ls -lR /etc:! pwd
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 16 UNIXVI
COPIES ET DEPLACEMENT DE TEXTE( COMPLEMENTS)
Insérer le contenu d'un autre fichier dans le tampon
La directive :r permet l'insertion d'un autre fichier dans le tampon.
$ vi fic1... positionner le curseur à l'endroit de l'insertion
:r fic2 Le contenu de fic2 est inséré dans fic1.
Insérer le résultat d'une commande dans le fichier
:r! commande
:r! date La date est insérée à partir de laposition courante du curseur.
Copie d'une partie du tampon dans un autre fichier
:adresse1,adresse2w fic
adresse : numéro de ligne ou chaîne de caractères.
:3,12w fic.save Copie les lignes 3 à 12 du tampondans le fichier fic.save.
:/chaîne1/,/chaîne2/w fic Copie les lignes contenues entrechaîne1 et chaîne2 dans le fichierfic.
:w>> fic Copie de tout le tampon en fin dufichier fic.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 17 UNIXVI
Copie et déplacement de texte
Les directives y (yank), d (destruction), p (put) permettent de copier ou de dépla-cer du texte dans le fichier .
Autre possibilité : utiliser plusieurs tampons avec la directive " suivie d'un nomde tampon choisi par l'utilisateur (ce nom doit être une lettre minuscule ou majus-cule).C'est ce qu'on appelle : LES "TAMPONS NOMMES".
Ainsi :
"a5yy Met 5 lignes dans le tampon a.
"f3yy Met 3 lignes dans le tampon f.
"ap Insertion du tampon a après le curseur.
"Add Détruit la ligne courante et l'ajoute au tampon a.a minuscule : remplace le tampon.A majuscule : ajoute au bout.
Echanges de "tampons nommés" entre fichiers
Il est possible de modifier un nouveau fichier sans sortir de vi.Dans ce cas, les tampons restent mémorisés.
:w"u5yy Mémorisation de 5 lignes.
:e fic.new Edition d'un nouveau fichier.
"up Récupération des 5 lignes.:w:e# Retour au fichier de départ.
Attention::q! Force la sortie:w! Force l'écriture:e! fic.new Force l'écriture de fic.new dans le tampon
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 18 UNIXVI
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 19 UNIXVI
SUBSTITUTIONS
Substituer des chaînes de caractères
Les directives de vi ne permettent pas de faire de substitutions multiples sur tout lefichier.Dans ce cas il faut utiliser la directive de ex :s .
Substitution de la première occurence de "chaîne1" par "chaîne2" pour leslignes d'adresse1 à adresse2 :
:[adresse1[,adresse2]]s/chaîne1/chaîne2/
Substitution de la première occurence de "chaîne1" par "chaîne2", dans laprochaine ligne contenant "chaîne1" :
:/chaîne1/s//chaîne2/
Substitution de toutes les occurences de "chaîne1" par "chaîne2", dans laprochaine ligne contenant "chaîne1" :
:/chaîne1/s//chaîne2/g
Substitution de toutes les occurences de "chaîne1" par "chaîne2" dans tout letampon :
:g/chaîne1/s//chaîne2/g
Ajout d'une chaîne à une autre :
:g/chaîne1/s//chaîne1 et chaîne2/g ou
:g/chaîne1/s//& et chaîne2/g
Substitution de "chaîne2" par "chaîne3" sur toutes les lignes ne contenant pas"chaîne1" :
:v/chaîne1/s/chaîne2/chaîne3/g
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 20 UNIXVI
LES EXPRESSIONS RÉGULIÈRES
Les caractères spéciaux
Un certain nombre de caractères ont une signification spéciale. La combinaison deces caractères permet de composer des critères de sélection pour construire deschaînes de caractères. C'est ce qu'on appelle : LES EXPRESSIONS REGULIERES.
Ces caractères spéciaux sont utilisés dans de nombreux utilitaires et en particulierdans les éditeurs de texte vi, ex et ed, et dans les outils grep, sed, awk, nawk.
$ Fin de ligne.
^ Début de ligne.
. Remplace n'importe quel caractère.
* Remplace n'importe quel nombre de fois lecaractère qui précède.
.* N'importe quelle chaîne de caractères y compris lachaîne vide.
[] Remplace un des caractères situés entre lescrochets.
[^] Remplace un caractère non situé entre lescrochets.
\ Annule la signification spéciale du caractèrequi suit.
EXEMPLE :
:g/ *$/s/// Retire tous les blancs en fin de ligne sur tout le texte.
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 21 UNIXVI
Quelques exemples d'expressions régulières
a.
a.c
aa ou ab ou ac ....
aac ou abc ou acc .....
ligne commençant par le chiffre 3
ligne se terminant par le caractère A
x xy xyy xyyy ...................
ligne commençant et terminant par unchiffre
Expressions régulières Interprétation pour la recherche
^3
A$
xy*
^[0-9].*[0-9]$
un caractère différent de a, b, c ou d[^abcd] ou [^a-d]
a, b, c ou d
une lettre minuscule ou majuscule
1, 2, 3 ou 7
[abcd] ou [a-d]
[a-zA-Z]
[1-37]
a.ca\.c
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 22 UNIXVI
RECHERCHE D'UNE EXPRESSION REGULIÈRE
La commande grep permet la recherche de chaîne de caractères construite à partird'une expression régulière, dans une liste de fichiers.
grep [-options] 'expr' [fichier1] .... [fichier n]
Options :-c rend le nombre de lignes correspondant à l'expression.
-n fait précéder chaque ligne par son rang dans le fichier.
-i minuscules et majuscules identiques pour la recherche.
-s annule les messages d'erreurs.
-v rend les lignes ne correspondant pas à l'expression.
$ grep '^user[1-7]:' /etc/passwduser1:!:2001:200::/home/user1:/usr/bin/kshuser2:!:2002:200::/home/user2:/usr/bin/kshuser3:!:2003:200::/home/user3:/usr/bin/kshuser4:!:2004:200::/home/user4:/usr/bin/kshuser5:!:2005:200::/home/user5:/usr/bin/kshuser6:!:2006:200::/home/user6:/usr/bin/kshuser7:!:2007:200::/home/user7:/usr/bin/ksh
$ grep '^[AG].*[6-8]$' editionAboaf Maurice 244748Allo Jean-Pierre 255398Gross Pascal 245367Grosbois Anne 122456
$ grep -s '[^fe]grep' /etc/*
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 23 UNIXVI
EXERCICES d'utilisation avancée de vi1/ A partir du fichier "edition ( refaire si besoin le cp ... edition), copier toutes les
lignes contenant Dupont dans un fichier DUPONTPuis détruire les lignes contenant Dupont:set nu:adresse1,adresse2w DUPONT
2/ Insérer le contenu du fichier DUPONT après Allo Jean-Pierre:r DUPONT
3/ Copier les trois premières lignes et les trois dernières lignes dans le fichierDUPONT en utilisant les tampons nommés:1:w Exemple pour les 3 premières lignes"a3yy:e DUPONT"ap
4/ Revenir dans le fichier édition et changer tous les Dupont en Durand:g/Dupont/s/Dupont/Durand/
5/ Nous allons faire des substitutions/Jean/ Substitution de Jean par Jean Paul:s/Jean/Jean Paul/:g/Jean/s//JEAN Substitution des Jean par JEAN/Jean/ A-t-on substitué tous les Jean ?
Substitution de JEAN par Jean en modifiant le séparateur de l'expression régulière:g:JEAN:s:JEAN:Jean:gp:g,Jean,s,,&-&,p Subsitution de Jean en Jean-Jean sur tout le texte
6/ Ajouter (16) devant chaque numéro commençant par 1,2 ou 3:g/ [1-3]/s// (16)&/
7/ Ajouter 0 à la fin de toutes les lignes qui commencent par F.:g/^F/s/$/0/
8/ Trouver dans edition les lignes dont les prénoms commencent par J et P$ grep ' [JP]' edition
9/ Trouver les lignes se terminant par un chiffre impair dans edition$ grep '[13579]$' edition
10/ Trouver dans le fichier edition, les lignes contenant un prénom de quatrelettres commençant par J ou j :$ grep -i ' j[a-z][a-z][a-z] ' edition
FONCTIONS DE BASE ET FONCTIONS AVANCÉES DE VI
LDVINCI Rev3 6 - 24 UNIXVI
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 1 UNIXSH
UNIX / LINUX
LES PROCEDURES SHELLLES REDIRECTIONSLES MECANISMESDE SUBSTITUTION
DU SHELL
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 2 UNIXSH
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 3 UNIXSH
SOMMAIRESection Page
GESTION DES PROCESSUS ET RÔLE DU SHELL 7 - 4
COMMANDES INTERNES / COMMANDES EXTERNES 7 - 4
LE MECANISME DU LANCEMENT D'UNE COMMANDE EXTERNE 7 - 5Création de processus et liste des processus 7 - 7
LES PROCEDURES ET LEUR MISE AU POINT 7 - 8
LISIBILITE DES PROCEDURES ET UTILISATION DE VI DANS 7 - 10L'HISTORIQUE DES COMMANDES
LES ENTREES/SORTIES STANDARDS 7 - 11
LA REDIRECTION EN SORTIE 7 - 12Redirection des données en sortie et redirection des erreurs en sortie 7 - 12Caractères génériques après une redirection 7 - 12
LA REDIRECTION EN ENTREE 7 - 13Redirection des données en entrée et redirection de commandes en entrée 7 - 13
COMMUNICATION ENTRE PROCESSUS 7 - 14
LA REDIRECTION DOUBLE EN SORTIE 7 - 14
EXERCICES D'UTILISATION DES REDIRECTIONS 7 - 15
TRANSMETTRE DES PARAMÈTRES 7 - 16Transmettre des paramètres à une procédure et décalage des paramètres 7 - 16
LES VARIABLES SHELL 7 - 18Affectation d'une variable en interactif 7 - 21Protection d'une variable et substitution de variables 7 - 21
LES CARACTÈRES SPÉCIAUX 7 - 25Générer des noms avec les caractères génériques 7 - 25
RECUPERER LE RESULTAT D'UNE COMMANDE 7 - 26Récupérer le résultat dans une variable 7 - 26Récupérer les champs du résultat d'une commande 7 - 26
LES REGLES DE SUBSTITUTION DU SHELL 7 - 27
EXERCICES SUR PARAMETRES ET VARIABLES 7 - 29
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 4 UNIXSH
GESTION DES PROCESSUS
Le rôle du shellQuel que soit le type de shell, un shell est un interpréteur de commandes.
COMMANDES INTERNES/COMMANDES EXTERNES
Un shell dispose de deux types de commandes :- les commandes internes : leur code fait partie du code du shell.- les commandes externes : leur code est séparé du code du shell.
$ type cdcd est une commande interne au shell$ type findfind est /usr/bin/find
On appelle processus un programme en exécution.Un processus est crée par un autre processus.Les commandes internes sont exécutées par le shell lui-même.Pour les commandes externes, le shell crée un processus fils qui se charge del'exécution.
lecture commande
création de processus
attente de finde processus
affichage du prompt [....] $
affichage du prompt [....] $
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 5 UNIXSH
LE MECANISME DU LANCEMENTD'UNE COMMANDE EXTERNE
duplication du 'ksh' (fork)
code de retour
B à O B à O
Boîte à outilspère
Boîte à outilsfils
duplication
NOYAU
processusFils
processusPère
exécutionde cmd(exec)
$ cmd
ksh kshcmd
kshattend lafin de cmd
déroulementduprocessusfils
processuspèreattend lafin duprocessus fils(wait)
exécutionde cmd
le processus Pèrereprend sondéroulement
fin de cmd(exit)
$ kshreprendle contrôledu terminal
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 6 UNIXSH
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 7 UNIXSH
Création de processus
Les processus sont organisés en arborescence : père----->fils.
Pour l'utilisateur, le processus père est le shell créé lors de la connexion.
Liste des processus de l'utilisateur
La commande ps sans paramètre affiche la liste des processus de l'utilisateur.
On appelle PID le "Process Identifier"du process lui-même
On appelle PPID le "Process Identifier" du processus père.
Avec des options de la commande ps on obtiendra des renseignements plus internes.
$ ps -fUID PID PPID C STIME TTY TIME COMMANDuser5 4582 1 0 17:04:45 tty23 0:01 -kshuser5 4792 4582 36 17:07:04 tty23 0:04 ps -f
$ ps -lF S CPU UID PID PPID C PRI NI SIZE WCHAN TTY TIME CMD10 S 1 2001 4582 1 0 30 20 35 322160 tty23 0:01 -ksh10 0 1 2001 4819 4582 5 62 20 39 tty23 0:00 ps -l
Liste des processus de l'ensemble des utilisateurs
$ ps -e$ ps -ef$ ps -el
Le processus n° 1 est le processus init qui surveille entre autre les terminaux réels(pas les pseudos), et dans ce cas il devient le père des shells de login.
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 8 UNIXSH
LES PROCÉDURES
Le shell peut lire un fichier contenant un ensemble de commandes àexécuter.Il s'agit d'une procédure ou shell-script.
Exécution d'une procédure :
$ chmod u+x procedure$ procedureou$ ksh procedure
MISE AU POINT D'UNE PROCÉDURE
La commande set permet de positionner des options pour la mise au point d'uneprocédure.
$ set -x Impression de chaque commande après expansion.
$ set -v Impression de chaque commande avant expansion.
$ set -e Sortie immédiate sur erreur.
La mise au point ne concerne que la procédure en cours.
Les options -x et -v peuvent être demandées au moment de l'appel :
$ ksh -v procedure
$ ksh -x procedure
Nota:Pour invalider une option : set +optionExemple :
$ set +x
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 9 UNIXSH
Soit le script-shell de nom " liste" suivant :
set -xecho "Le repertoire courant est :"pwdecho "Voici la liste des fichiers :"echo *
$ liste+ echo Le repertoire courant est :Le repertoire courant est :+ pwd/home/user8+ echo Voici la liste des fichiers :Voici la liste des fichiers :+ echo liste londres monaco paris romeliste londres monaco paris rome
Soit le script-shell de nom "liste" suivant :
set -vecho " Le repertoire courant est :"pwdecho "Voici la liste des fichiers :"echo *
$ listeecho "Le repertoire courant est :"Le repertoire courant est :pwd/home/user8echo "Voici la liste des fichiers :"Voici la liste des fichiers :echo *liste londres monaco paris rome
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 10 UNIXSH
LISIBILITÉ DES PROCÉDURES
Le caractère # permet de mettre des commentaires dans une procédure.
Si le commentaire est à la suite d'une ligne de commande, il doit y avoir un espace devantle #.
UTILISATION DE VI DANS L'HISTORIQUEDES COMMANDES
La commande fc (fix command)
- Editer la dernière commande dans vi :$ fc
- Editer une suite de commande, puis les exécuter :$ fc m n
- Lister les 16 dernières commandes :$ fc -l ou history
Dans l'ordre inverse :$ fc -lr
- Lister sans les numéros d'ordre :$ fc -nl n1 n2 > fichier
fichier devient une procédure comprenant les commandes del'historique depuis la ligne n1 jusqu'à la ligne n2.
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 11 UNIXSH
LES ENTREES/SORTIES STANDARDS
Lorsqu'une commande est lancée, trois fichiers sont ouverts dans le shell.
Un numéro est associé à chaque fichier : le file descriptor.
Standard Input fd = 0
Standard Output fd = 1
Standard Error fd = 2
COMMANDE
stdout
stderr
stdin
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 12 UNIXSH
LA REDIRECTION EN SORTIE
Redirection des données en sortieCréation d'un fichier :
commande > fichier
Si le fichier n'existe pas, il est automatiquement créé; s'il existe avec lapermission d'écriture, il est écrasé.
commande >> fichier
Les données sont ajoutées en fin de fichier.
Exemples :$ ls -C /bin > liste$ ls -C /etc >> liste
Redirection des erreurs en sortieRedirection dans un fichier :
commande 2> fichier
Redirection en fin de fichier :commande 2>> fichier
Redirection des erreurs dans le même fichier que les données :commande > fichier 2>&1
Caractères génériques après une redirectionLes caractères génériques ne sont valables que dans la partie commande, et non pasdans la partie des redirections (sauf si génération d'un seul nom de fichier).
Exemple:$ echo Bonjour > *.c crée le fichier *.c sauf si présence sous le
répertoire courant d'un seul fichier dont le nomse termine par .c
$ ls *.c liste tous les fichiers dont le nom se terminepar .c
$ ls \*.c liste le fichier de nom *.c
nota : Il existe un fichier poubelle : /dev/null
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 13 UNIXSH
LA REDIRECTION EN ENTRÉE
Redirection des données en entrée
commande < fichier
Exemple :$ mailx user1 < fichier_message
Redirection de commandes en entrée
Cette redirection spéciale permet de donner des directives à une commande dansune procédure.
commande <<CHAÎNEdonnées ou directivesà lire par lacommandeCHAÎNE
Exemple :
Création d'un fichier avec cat dans une procédure :
cat > fichier <<OKligne1ligne2ligne3OK
Standard Input pour la commande cat
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 14 UNIXSH
COMMUNICATION ENTRE PROCESSUS
L'écriture suivante :commande1 > tempcommande2 < temprm temp
est avantageusement remplacée parcommande1 | commande2
- Le symbole | s'appelle pipe ou tube de communication.- Pas besoin de fichier temporaire (gain de temps et d'espace disque).- Tout octet sorti de la commande1 est immédiatement octet d'entrée de la commande2.
Exemple :$ ls -l | pg
LA REDIRECTION DOUBLE EN SORTIELa commande tee permet de rediriger le résultat d'une commande tout enconservant la sortie standard.
commande | tee fichier
commande stdout
fichier
tee
stdin
stdout
exemple :$ ps -ef | tee ficps | grep $LOGNAME
Dans le cas de tee -a on ajoute à la fin du fichier ficps.
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 15 UNIXSH
EXERCICES
Utilisation des redirections
COMMANDE : qui
ENONCE :
Afficher le nombre d’utilisateurs ainsi que leurs caractéristiques (résultat de lacommande who).
Utiliser un fichier temporaire et le supprimer en fin de programme.
REMARQUE : Utilisation de who,tee,wc.
COMMANDE : IId
ENONCE :
Editer la liste des sous-répertoires du répertoire courant.
REMARQUE : Utilisation de Is -l et grep.
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 16 UNIXSH
TRANSMETTRE DES PARAMÈTRES
Transmettre des paramètres à une procédure
Une procédure shell peut travailler avec des paramètres positionnels (ou arguments)qui lui sont transmis lors de son appel via la ligne de commande.
proc par1 par2 par3
$0 $1 $2 $3
Dans la procédure appelée, les paramètres positionnels sont référencés par :
$0 Nom de la procédure$1 Premier paramètre$2 Deuxième paramètre${n} Enième paramètre
$# Nombre des paramètres$* Tous les paramètres en ligne$$ PID de la procédure
Exemple :$ echo $0$ print $$
Soit le script-shell de nom "ville" suivant :
echo nom de la procedure : $0echo le premier parametre est : $1echo le troisieme parametre est : $3echo nombre de parametres : $#echo voici tous les parametres : $*
$ ville Londres Paris New-York Bruxellesnom de la procedure : villele premier parametre est : Londresle troisieme parametre est : New-Yorknombre de parametres : 4voici tous les parametres : Londres Paris New-York Bruxelles
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 17 UNIXSH
Décalage des paramètres
Le décalage des paramètres positionnels se fait par la commande :
shift [n]
Aprés shift :
- $0 ne bouge pas.- $1 est perdu.- Deuxième paramètre devient premier paramètre ($1).- Troisième paramètre devient deuxième paramètre ($2).- ............- Dixième paramètre devient neuvième paramètre ($9).
- Paramètre n devient paramètre n-1.-$#, $* sont remis à jour
Possibilité de décaler de n positions par :shift n
Soit le script-shell de nom "decalage" suivant :
echo le premier parametre est : $1echo le neuvieme parametre est : $9echo nombre de parametres : $#echo " ATTENTION DECALAGE"shiftecho le premier parametre est : $1echo le neuvieme parametre est : $9echo nombre de parametres : $#
$ decalage A B C D E F G H I J Kle premier parametre est : Ale neuvieme parametre est : Inombre de parametres : 11 ATTENTION DECALAGEle premier parametre est : Ble neuvieme parametre est : Jnombre de parametres : 10
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 18 UNIXSH
LES VARIABLES SHELL
Un shell accepte 4 types de variables :
- entiers
- chaînes de caractères
- tableaux de chaînes de caractères
- tableaux d'entiers.
Variables chaînes de caractères :
$ chaine="suite de caracteres"
$ echo $chainesuite de caracteres
le nom d'une variable se différencie de son contenu par un $ au début de lavariable.
L'affectation = ne prend pas d'espace à droite et à gauche.
Variables entières :
$ integer var=2
$ typeset -i var1=23
$ echo $var $var12 23
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 19 UNIXSH
Les tableaux de chaînes de caractères :
$ chaine[1]="encore des caracteres"
$ echo ${chaine[1]}encore des caracteres
Il est à noter que chaîne [0] existe déjà :
$ echo ${chaine[0]}suite de caracteres
Une affectation d'une variable simple est en réalité l'affectation du 1er élémentdu tableau de même nom.
Les tableaux d'entiers :
$ typeset -i i tabint
$ tabint[0]=13
$ tabint[1]="toto"ksh : toto : bad number
$ i=1$ tabint[i]=45$ echo ${tabint[1]}45
Les indices des tableaux doivent exprimer des entiers de 0 à n
liste des valeurs d'un tableau :$ echo ${tab[*]}
liste du nombre d'éléments d'un tableau :$ echo ${#tab[*]}
Liste de toutes les variables :
$ set
Suppression de variable :
$ unset i chaine tabint
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 20 UNIXSH
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 21 UNIXSH
Affectation d'une variable en interactif
La commande read permet de positionner une variable en interactif.
Soit le script-shell de nom "menu" suivant :
echo ceci est un exemple de menuecho "Quel est votre choix : 1, 2, ou 3 ? \c"read reponseecho vous avez choisi $reponse
$ menuceci est un exemple de menuQuel est votre choix : 1, 2, ou 3 ? 2 réponse de l'utilisateurvous avez choisi 2
La syntaxe read var?"invite" permet de mettre directement une invite.
$ read var?"votre choix 1, 2, 3 ? "votre choix 1, 2, 3 ? 3$ echo $var3
Protection d'une variable
La commande readonly protège une variable en écriture.$ var=45$ readonly var
Autre possibilité :$ typeset -r var1=68
$ var=22ksh: var: is read only$ echo $var45
$ typeset +r var déprotège la variable var (si le shell l'accepte)$ var=22$ echo $var22
$ readonly donne la liste des variables protégées
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 22 UNIXSH
Substitution des variables :
$ echo ${var-val1} si var non définie, substitue val1 sinonvar rend sa valeur.
$ echo ${var=val2} si var non définie, crée var avec lavaleur val2.
Exemple :
La commande imp1 édite un exemplaire par défaut du fichier dont le nom estdonné en premier paramètre.
Soit le script-shell de nom "imp1" suivant :
nb=${2-1}pr -o8 $1 | lp -n$nbecho Il a été édité $nb exemplaire(s) du fichier $1
$ imp1 /etc/passwdIl a été édité 1 exemplaire (s) du fichier /etc/passwd
$ imp1 /etc/passwd 2Il a été édité 2 exemplaire(s) du fichier /etc/passwd
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 23 UNIXSH
Substitution des variables (suite) :
$ echo ${var:-val3} si var non définie ou vide,substitue val3 sinon var rend sa valeur.
$ echo ${var:=val4} si var non définie ou vide,crée var avec la valeur val4.
Exemple :La commande imp2 fait le même traitement que la commande imp1 mais enposant des questions à l'utilisateur.
Soit le script-shell de nom "imp2" suivant :
echo "donnez le nom du fichier à éditer :\c"read ficecho "Donnez le nombre d'exemplaire(s) à éditer :\c"read nbpr -o8 $fic | lp -n${nb:=1}echo Il a été édité $nb exemplaire(s) du fichier $fic
$ imp2Donnez le nom du fichier à éditer : /etc/passwdDonnez le nombre d'exemplaire(s) du fichier à éditer :Il a été édité 1 exemplaire(s) du fichier /etc/passwd
$ imp2Donnez le nom du fichier à éditer : /etc/passwdDonnez le nombre d'exemplaire(s) à éditer : 2Il a été édité 2 exemplaire(s) du fichier /etc/passwd
$ var=chaine$ echo ${#var} rend la longueur de var.6
$ typeset -i tab$ tab[0]=1; tab[1]=2; tab[2]=7$ echo ${tab[*]} liste des valeurs du tableau1 2 7
$ echo ${#tab[*]} nombre d'éléments du tableau3
$ echo ${var?"message"} si var n'est pas définie affiche "message"
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 24 UNIXSH
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 25 UNIXSH
LES CARACTÈRES SPÉCIAUX
Générer des noms avec les caractères génériques
Quelques caractères ont une signification spéciale dans une commande shell.
Ils sont appelés : les caractères génériques
Ils permettent de générer des noms de fichiers par rapport aux objets du répertoirecourant.
* Remplace n'importe quelle chaîne de caractères (même vide)en fonction des noms de fichiers sous le répertoire courant oule répertoire cité.L'étoile seule est remplacée par la liste de tous les noms defichiers sous le répertoire courant.
? Remplace un caractère.
[] Remplace un des caractères contenus entre les crochets.
[!] Remplace un des caractères non contenus entre les crochets.
L'annulation de l'effet spécial est obtenue en faisant précéder le caractère spécialpar l'antislash : \
ATTENTION : Les caractères génériques du shell n'ont pas la même significationque les caractères spéciaux utilisés dans les expressionsrégulières des éditeurs.
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 26 UNIXSH
RECUPERER LE RÉSULTAT D'UNE COMMANDE
Récupérer le résultat dans une variable
$(commande) ou `commande`
Provoque la substitution par le résultat de la commande
Ce mécanisme est utilisé dans les procédures shell pour récupérer le résultat decommandes dans des variables.
Exemple :
$ pwd/home/user1
$ yy=$(pwd)$ echo $yy/home/user1
Récupérer les champs du résultat d'une commande
La commande set permet de récupérer les champs du résultat d'une commandesous la forme des paramètres : $1 $2 $3 ...... ${n}
Exemple :$ datemer 20 mar 17:12:40 DFT 2003
$ set $(date)
$ echo $3mar
$ echo $62003
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 27 UNIXSH
LES RÈGLES DE SUBSTITUTION DU SHELL
L'utilisation des apostrophes
'......' Le shell prend les caractères à l'intérieur des apostrophes(quotes) sans faire de substitutions.
"......" Le shell prend les caractères à l'intérieur des guillemets(double quotes) avec la substitution des : $ \ ̀
Exemples :
$ nom=jean
$ echo nom = $nomnom = jean Interprétation de la variable
$ echo 'nom = $nom'nom = $nom Affichage sans substitution
$ echo "nom = $nom"nom = jean Interprétation de la variable
$ echo *fic1 fic2 essai Interprétation de *
$ echo "*"* Affichage sans substitution
Les guillemets ou les apostrophes permettent aussi de conserver tousles espaces :
$ nom=jean
$ echo nom = $nomnom = jean Concaténation des espaces
$ echo "nom = $nom"nom = jean Les espaces sont conservés
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 28 UNIXSH
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 29 UNIXSH
EXERCICES
Utilisation des paramètres et des variables
COMMANDE : copier fichier répertoire suffixe
ENONCE :
Copier un fichier du répertoire courant vers un répertoire de sauvegarde en ajou-tant au nom un suffixe (exemple : .save).Modifier les droits sur le fichier sauvegardé afin que seul le propriétaire ait lesdroits de lecture (et rien d'autre).
REMARQUE : Utilisation de cp, chmod et des paramètres.
COMMANDE : dupliquer
ENONCE :
Refaire la procédure précédente pour entrer le nom du fichier, du répertoire et lesuffixe d’une manière interactive.
REMARQUE : Utilisation de read et des variables.
COMMANDE : repaccueil utilisateur
ENONCE :
Afficher le répertoire d'accueil d'un utilisateur dont le nom est donné en argument(=6 ème champ du fichier /etc/passwd).
REMARQUE : Utilisation de IFS, grep et set.
PROCEDURES SHELL, REDIRECTIONS ET MECANISMES DE SUBSTITUTION DU SHELL
LDVINCI Rev3 7 - 30 UNIXSH
LDVINCI Rev3 8 - 1 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
UNIX / LINUXPROGRAMMATION D'UNE
STRUCTURE CONDITIONNELLEET D'UNE BOUCLE
LDVINCI Rev3 8 - 2 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LDVINCI Rev3 8 - 3 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
SOMMAIRE
Section Page
LES TESTS DANS LE SHELL 8 - 5Le code de retour d'une commande 8 - 5Utilisation des tests 8 - 5Syntaxe de la commande test 8 - 5Tests sur les fichiers 8 - 6Tests numériques 8 - 6Tests sur les chaînes de caractères 8 - 7Les conditions composées 8 - 7
LES STRUCTURES CONDITIONNELLES 8 - 8If then else fi 8 - 8Les structures imbriquées 8 - 8Les opérateurs || et && 8 - 9
BRANCHEMENT A CHOIX MULTIPLE 8 - 10case in esac 8 - 10
EXERCICES 8 - 10Utilisation des structures et des branchements 8 - 10
LA BOUCLE FOR 8 - 13For in do done 8 - 13For do done 8 - 13
LES BOUCLES WHILE ET UNTIL 8 - 14while do done 8 - 14Until do done 8 - 15Arithmétique entière 8 - 16Programmation d'un compteur 8 - 17
SORTIE DE BOUCLE 8 - 18
SORTIE DE BOUCLES IMBRIQUEES 8 - 18
SUPPRIMER UN PASSAGE DANS LA BOUCLE 8 - 19
EXERCICES 8 - 21Utilisation des boucles 8 - 21
LDVINCI Rev3 8 - 4 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LDVINCI Rev3 8 - 5 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LES TESTS DANS LE SHELL
Le code de retour d'une commandeA la fin de l'exécution d'une commande, un code de retour est toujours positionné.Le code de retour d'une commande peut être vérifié en affichant sa valeur contenuedans $?
si la commande a répondu vrai, il vaut 0si la commande a répondu faux, il est différent de 0.
Exemple : $ cat faccat: cannot open fac$ echo $?1
$ cat ficJe suis fic$ echo $?0
nota : La commande exit n provoque la sortie d'une procédure shell avecpositionnement du code de retour à la valeur n.
Soit le script-shell de nom "proc" suivant :........exit 3
$ proc$ echo $?3
Utilisation des testsLa commande test est utilisée dans les structures ou les boucles pourprogrammer une condition.
Il existe trois sortes de tests :- Tests sur les caractéristiques des fichiers.- Tests de comparaisons sur des valeurs numériques.- Tests sur les chaînes de caractères alphanumériques.
Syntaxe de la commande testLa commande test peut se faire avec deux syntaxes différentes :
test expressionou [ expression ] Les espaces sont obligatoires après le
crochet ouvrant et avant le crochet fermant.
LDVINCI Rev3 8 - 6 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
Tests sur les fichiers
test -f fichier Vrai si fichier est ordinaire.
[ -d fichier ] Vrai si fichier est répertoire.
[ -r fichier ] Vrai si fichier est autorisé en lecture.
test -w fichier Vrai si fichier est autorisé en écriture.
test -x fichier Vrai si fichier est exécutable.
test -s fichier Vrai si fichier n'est pas vide.
[ fichier1 -ef fichier2 ] Vrai si fichier1 et fichier2 sont liés physiquement.
test -L fichier Vrai si fichier est un lien symbolique
[ fichier1 -nt fichier2 ] Vrai si fichier1 plus récent que fichier2.
[ fichier1 -ot fichier2 ] Vrai si fichier1 plus ancien que fichier2.
Tests numériques
test valeur1 opérateur valeur2
Opérateurs possibles :
-eq égal à-ne différent de-gt plus grand que-ge plus grand ou égal-lt plus petit que-le plus petit ou égal
Exemples :
$ test "$a" -eq 36 Vrai si le contenu de la variable a est égalà 36.
$ [ "$a" -lt 42 ] Vrai si le contenu de la variable a estplus petit que 42.
LDVINCI Rev3 8 - 7 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
Tests sur les chaînes de caractères
[ "chaîne1" = "chaîne2" ] Vrai si chaîne1 est égale à chaîne2.
test "chaîne1" != "chaîne2" Vrai si chaîne1 différente de chaîne2.
test -z "$a" Vrai si la chaîne $a est vide.
test -n "$a" Vrai si la chaîne $a n'est pas vide.
Exemple :
$ test "$LOGNAME" = "user1"
Les conditions composées
Les opérateurs peuvent être combinés avec :
-a et-o ou! négation\(...\) groupement
Exemple :
$ test \( -r fichier1 -o -r fichier2 \) -a -w fichier3
Vrai si fichier1 ou fichier2 accessible en lecture et fichier3 accessible enécriture.
LDVINCI Rev3 8 - 8 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LES STRUCTURES CONDITIONNELLES
If then else fiif commande1then commande2[else commande3]fi Si le code de retour de l'exécution de commande1
est égal à 0,alors exécuter commande2,sinon exécuter commande3,fin
Exemple :if test -f fichierthen echo " fichier existe"else echo " fichier n'existe pas"fi
nota : Le else n'est pas obligatoire.if [ -w fic ]then echo "message" >>ficfi
Les structures imbriquées
Il est possible d'imbriquer des structures conditionnelles.Dans ce cas : else if devient elif
Exemple :If test -f ficthen echo "fic est un fichier ordinaire"
elif test -d ficthen echo "fic est un répertoire"
fi Le fi est commun.
nota : La syntaxe suivante est aussi possible :if then else if
then elsefi
fi Attention: ne pas oublier de fi.
LDVINCI Rev3 8 - 9 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
Les opérateurs && et ||
Les opérateurs && et || permettent de programmer les mêmes structures que le ifdans des cas plus simples.
commande1 && commande2
Exécution de la commande1puis exécution de la commande2si commande1 a renvoyé un coderetour égal à 0.
commande1 || commande2
Exécution de la commande1puis exécution de la commande2si commande1 a envoyé un coderetour différent de 0.
Exemples :
test -d demo && echo "demo est un répertoire"
test -d demo || echo "demo n'est pas un répertoire"
test -d demo && ls -l demo || echo "demo non ok"
LDVINCI Rev3 8 - 10 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
BRANCHEMENT A CHOIX MULTIPLE
Case in esac
La construction case in esac permet de choisir une chaîne de caractères parmiplusieurs et d'exécuter une liste de commandes pour cette chaîne.
case $variable inchaîne1 ) commandes ;;chaîne2 ) commandes ;;chaîne3 | chaîne4 ) commandes ;;esac
Si la variable peut être engendrée parchaîne1, sinon chaîne2, sinon chaîne3 ouchaîne4, alors exécuter la liste de comman-des correspondantes.
nota : Les caractères génériques du shell * ? [ ]peuvent être utilisés pour composer les chaînes de caractères.| signifie l'opérateur logique ou.
Exemple :Extrait d'une procédure d'installation
echo "POUR DIALOGUER EN FRANCAIS TAPER : f"echo "FOR AN ENGLISH DIALOGUE TYPE : e"echoecho "VOTRE REPONSE - YOUR CHOICE : \c"read reponseechocase "$reponse" in[fF]* ) LANG=fr_FR ;; # francais[aAeE]* ) LANG=en-US ;; # english* ) echo "\n ERREUR : LANGUE NON PRISE EN COMPTE" echo " ERROR : WRONG LANGUAGE \n" ;;esac
LDVINCI Rev3 8 - 11 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
EXERCICESUtilisation des structures et des branchements
Commande : writemail message utilisateur
Enoncé :- Envoyer un message à un utilisateur.- Si celui-ci n’est pas connecté, envoi d’une lettre.
Remarque : Utilisation de write, mailx, ||.
Commande : ficlec argument
Enoncé :- Tester si l’argument communiqué est un fichier ordinaire.- Dans l’affirmative, vérifier si ce fichier est en lecture.- Sortir les messages correspondants.
Remarque : Faire cet exercice avec les deux formes de "et" ( -a de test et && de commandes ).
Commande : tri fichier1 fichier2
Enoncé :-Tester le nombre d’arguments de la commande :- Si le nombre d’arguments est différent de 2, alors sortir le message "commande : tri fichier1 fichier2"
-Ensuite, la procédure lit une ligne sur l’entrée standard et range cette ligne dans un fichier d'après les règles suivantes :
. la ligne est introduite en fin de fichier1 si elle contient au moins une lettre.. elle est introduite en fin de fichier2 si elle contient au moins un chiffre et pas de lettres.. le reste est redirigé vers le fichier poubelle.
Remarque : Utilisation de case, read et des caractères génériques.
LDVINCI Rev3 8 - 12 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LDVINCI Rev3 8 - 13 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LA BOUCLE FORFor in do done
Cette forme de la boucle for permet d'effectuer la même séquence de commandes surchaque valeur d'une liste et il y a autant de boucles que de valeurs dans la liste.
for variable in val1 val2 val3 ...do commande1
commande2 ....done Pour la variable prenant successivement les différentes
valeurs val1 val2 val3 ... exécuter les commandes.
Exemple : La procédure suivante "ecrire" envoie un message à trois utilisateurs.
for nom in jean alex pauldo write $nom < fichier_messagedone
For do doneCette deuxième forme de la boucle for permet d'effectuer la même séquence decommandes sur tous les paramètres ($1 $2 .... ) passés à l'appel de la procédure.
for variabledo commande1
commande2 ....done Pour la variable prenant successivement les différentes
valeurs passées en arguments, exécuter les commandes.
Exemple: Soit le script-shell de nom "copie" suivant :
for ficdo if [ -f $fic ]
then cp $fic /home/user8chmod 600 /home/user8/$ficelse echo "$fic n’est pas un fichier"
fidone
$ ls -l-rw-r--r-- 1 phil anim 56 May 31 14:22 fic1-rw-r--r-- 1 phil anim 22 May 31 14:21 fic2
$ copie fic1 fic2 totototo n’est pas un fichier$ ls -l /home/user8-rw------ 1 user8 base 56 Jun 1 11:57 fic1-rw------ 1 user8 base 22 Jun 1 11:57 fic2
LDVINCI Rev3 8 - 14 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LES BOUCLES WHILE ET UNTIL
while do done
La boucle while exécute une séquence de commandes tant qu'unecondition est vraie.
while commande1do commande2
commande3 commande4 .........
done Tant que le code de retour de l'exécutionde commande1 est vraialors exécuter les commandesdu bloc do ... done.
Deux commandes sont fréquemment employées dans les boucles while :
true ou : Rend une valeur vraie (code de retour = 0)sleep n Temporisation de n secondes
Exemples :
Le script-shell de nom "param" suivant édite tous les arguments passés àl'appel :
while test $# -ne 0do echo $1 shiftdone
Le script-shell de nom "temps" suivant affiche la date à l'écran toutes les 30secondes :
while true ou while :do date sleep 30done
LDVINCI Rev3 8 - 15 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
Until do done
La boucle until fonctionne à l'inverse de la boucle while.
until commande1do commande2
commande3 .....
done
Exécuter les commandes du bloc do ...done jusqu'à ce quele code retour de l'exécution de commande1 soit vrai.
false Cette commande rend une valeur fausse
Exemple :Le script-shell "param" écrit différemment :
until test $# -eq 0do echo $1 shiftdone
LDVINCI Rev3 8 - 16 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
Arithmétique entière
La commande let est utilisée pour les opérations arithmétiques.
$ integer i=10 j=2 k l$ let "k=i+j" ou syntaxe équivalente : ((k=i+j))
$ echo $k12
$ ((l=k*j)) ; echo $l24
Les opérateurs sont :
+ - * / % (reste de la division)
La commande let est utilisée aussi avec les opérateurs de comparaison dans cecas c'est $? qui est testé.
$ ((i<j)) ; echo $?1
Les opérateurs sont :
<= >= < > == !=
La commande let accepte les opérateurs logiques : ! && ||
$ ((k==i+j && l==k*2))
$ echo $?0
LDVINCI Rev3 8 - 17 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
Programmation d'un compteur
La commande expr permet aussi de faire des opérations courantes.
expr terme1 opérateur terme2
Les opérateurs :
addition soustraction multiplication division modulo(reste) + - \* / %
Exemple de boucle :
Le script-shell de nom " creat_fic" suivant crée les fichiers fic1 fic2 fic3 ......fic10
En shell de Bourne:
count=1while test $count -le 10do >fic$count
count=`expr $count + 1`done
En Bash ou Korn shell:
typeset -i count=1while let "count <=10"do >fic$count
((count=count+1))done
LDVINCI Rev3 8 - 18 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
SORTIE DE BOUCLE
La commande break permet de sortir d'une boucle for while ou until.
Exemple :La procédure stocke1 mémorise les lignes entrées au clavier dans le fichier lignesjusqu'à ce qu'on tape le mot FIN :
while truedo echo "Entrez votre ligne:" read reponse if test "$reponse" = "FIN" then break # Sortie de la boucle else echo $reponse >>lignes fidone
SORTIE DE BOUCLES IMBRIQUEESLa commande break n permet de sauter n niveaux de boucles imbriquées.
Exemple :La procédure stocke2 reprend la procédure stocke1 en rajoutant une boucle quiinsère un message à chaque fin de page (toutes les 66 lignes).
typeset -i ligwhile truedo
lig=1while ((lig <= 65))do
echo "Saisissez une ligne :"read reponseif test "$reponse" = FINthen break 2 # Sortie de deux niveaux de boucleselse echo $reponse >>lignefi
((lig=lig+1))doneecho "######## Fin de page ######" >>ligne
done
LDVINCI Rev3 8 - 19 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
SUPPRIMER UN PASSAGE DANS LA BOUCLE
La commande continue permet de supprimer un des passages dans une boucle for,while ou until.
Exemple :
La procédure "supprime" efface tous les fichiers sauf les fichiers save et source :
set -xfor ido if test "$i" = source -o "$i" = save
then continuefi
echo $irm $idone
$ cd appli$ ls -Cfic save source toto
$ supprime *+ test fic = source -o fic = save+ echo ficfic+ rm fic+ test save = source -o save = save+ continue+ test source = source -o source = save+ continue+ test toto = source -o toto = save+ echo totototo+ rm toto
$ ls -Csave source
LDVINCI Rev3 8 - 20 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
LDVINCI Rev3 8 - 21 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
EXERCICES
Utilisation des boucles
Commande : testdir
Enoncé :Afficher la liste des répertoires du répertoire courant.
Remarque : Utilisation de for et test.
Commande : mkfiles prefixe n
Enoncé :
1/ Créer n fichiers vides (par défaut = 5) ayant pour nom prefixe.n (exemple : ess.1 ess.2 ess.3 ont pour prefixe = ess et n = 3).
2/ Ajouter dans la boucle une question permettant de valider ou d’invalider la création du fichier "prefixe.n".
Remarque : Utilisation de if, while, test, read, let.
LDVINCI Rev3 8 - 22 UNIXPROG
PROGRAMMATION D'UNE STRUCTURE CONDITIONNELLE ET D'UNE BOUCLE
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 1 UNIXENV
UNIX / LINUX
ENVIRONNEMENTSIGNAUX
ETSYNCHRONISATION
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 2 UNIXENV
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 3 UNIXENV
SOMMAIRE
Section Page
LES VARIABLES PREDEFINIES DU SHELL 9 - 4Environnement 9 - 4Les variables prédéfinies 9 - 4
LES VARIABLES COMMUNES 9 - 5Exportation de variables 9 - 5
LES ALIAS 9 - 7Définition 9 - 7Principe 9 - 7Utilisation 9 - 7
GESTION DES SIGNAUX 9 - 9Les signaux 9 - 9Programmation du signal "INTERRUPT" 9 - 9
GESTION DES PROCESSUS 9 - 10Lancement d'un processus en arrière-plan 9 - 10Contrôle des tâches en arrière-plan (job control) 9 - 10Maintien d'exécution en arrière-plan après déconnexion 9 - 11Attente de la fin d'un processus 9 - 11Meurtre d'un processus 9 - 11Meurtre d'un processus sous job control 9 - 11
EXERCICES 9 - 13Utilisation du trap 9 - 13
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 4 UNIXENV
LES VARIABLES PRÉDÉFINIES DU SHELL
Environnement
L'environnement d'un shell contient un certain nombre de variables prédéfinies.
La liste de toutes les variables (prédéfinies ou initialisées pendant la session)peut s'obtenir par la commande :
$ set
Les variables prédéfinies
Voici les variables prédéfinies les plus courantes :
FCEDIT EDITOR (*) Editeur pour l'historique
HOME Répertoire d'accueil
IFS Liste des séparateurs
LANG Langue des messages système
LOGNAME Nom de l'utilisateur
OLDPWD (*) Répertoire de travail précédent
PATH Chemins d'accès aux commandes
PPID (*) Numéro du processus père du shell
PS1 Prompt primaire
PS2 Prompt secondaire
PWD (*) Répertoire de travail actuel
SECONDS (*) Durée de la connexion en secondes
SHELL Nom du shell
TERM Type du terminal
TMOUT (*) Délai de déconnexion entre deux commandes
(*) spécifique ksh
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 5 UNIXENV
LES VARIABLES COMMUNES
Exportation de variables
Le shell n'exécute pas lui-même les commandes qui lui sont soumises, mais crée unautre shell qui se charge de l'exécution.
De ce fait, les variables du shell père ne sont pas systèmatiquement connues desprocessus fils.
Pour qu'une variable soit commune à tous les processus fils d'un processus,elle doit être exportée.
$ var=18 ou $ typeset -x var=18$ export var
NOTA : - Il n'y a pas d'inverse (import).- Une variable, même mise en export, modifiée dans une
procédure appelée, n'a pas sa valeur modifiée dans laprocédure appelante.
La liste des variables transmises s'obtient par la commande :
$ env
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 6 UNIXENV
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 7 UNIXENV
LES ALIAS
Définition
La commande alias permet la définition d'abréviations de commandesou la création de pseudo-commandes.
Exemple :
$ alias ll="ls -l"
Principe
Le premier mot de la ligne de commande est remplacé par le textecorrespondant si ce mot est un alias.
$ ll est équivalent à ls -l
Utilisation
alias liste la définition de tous les aliasalias nom liste la définition de l'alias nomalias nom=cde définit l'alias nomalias -x nom exporte l'alias nomunalias nom supprime l'alias nom
Plusieurs alias peuvent se suivre sur une ligne de commande à condi-tion de l'avoir prévu lors de la définition. La définition d'un alias suscep-tible d'être suivi d'un autre alias doit se terminer par un espace.
Exemple :L'alias r réexécute la dernière commande de l'historique.
alias -x r="fc -e - "
Permet à ksh de regarder si le mot suivant, dans la ligne de com-mande, est un alias et dans ce cas là de le substituer.
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 8 UNIXENV
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 9 UNIXENV
GESTION DES SIGNAUX
Les signaux
Durant l'exécution d'une procédure, des signaux matérialisant l'arrivée d'événementspeuvent apparaître :
Signal 0 Sortie du shellSignal 1 Décrochement du terminalSignal 2 InterruptionSignal 3 QuitSignal 9 Meurtre de processusSignal 15 Fin logicielle d'un processus
Un programme utilisateur peut définir un traitement spécifique à réaliserlorsque survient le signal.Pour cela il faut utiliser la commande trap qui permet d'associer un traitement àn'importe quel signal.
Programmation du signal "INTERRUPT"
trap sans paramètres donne la liste de ce qui a été enregistré.$ trap
Positionnement d'un traitement associé à l'arrivée d'un signal "INTERRUPT" :$ trap 'commandes' 2
Inhibition du signal "INTERRUPT" :$ trap ' ' 2
Rétablissement des valeurs par défaut :$ trap 2
Exemple : La procédure decompte affiche 5 puis 4, 3, 2, 1.Si arrivée du signal "INTERRUPT", la temporisation est supprimée.
trap ' continue' 2for i in 5 4 3 2 1do echo $i sleep 5done
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 10 UNIXENV
GESTION DES PROCESSUS
Lancement d'un processus en arrière-plan
Pour lancer une commande en arrière-plan, il faut terminer la ligne par &.Le numéro du PID est retourné.
Exemple : Lancement de la procédure decompte en arrière-plan :$ decompte &[1] 467
nota : La main est aussitôt rendue.Possibilité de récupérer le PID du dernier processus lancé enarrière-plan dans la variable $!Il est recommandé de rediriger systématiquement lessorties pour ne pas perturber l'écran.
Contrôle des tâches en arrière-plan (job control)
L'option monitor validée à la connexion permet de contrôler les tâches lancées enarrière-plan.
$ temps >> date_temps &[1] 478$ ecrire &[2] 481$ decompte &[3] 490
$ jobs -l[3] + 490 En cours d'exécution decompte &[2] - 481 Terminé ecrire &[1] 478 En cours d'exécution temps>> date_temps &
indique l'état des commandes lancées en arrière-plan sous la forme :- n° de job- + dernier job manipulé, - avant-dernier job manipulé.- n° de PID.- indique l'état de la tâche ( "en cours d'exécution", "terminé" )- la commande lancée
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 11 UNIXENV
Maintien d'exécution en arrière-plan après déconnexion
Il est possible de se déconnecter sans interrompre le déroulement des processuslancés en arrière-plan.Pour cela faire précéder la commande par nohup.Les sorties stdout et stderr se font alors sur le fichier nohup.out.
Exemple :$ nohup decompte &[1] 478sending output to nohup.out$ exityou have running jobs$ exit (ce deuxième exit provoque la déconnexion)
Attente de la fin d'un processus
Elle se fait par la commande wait.Il faut préciser le numéro du processus à attendre.La variable $! contient le PID du dernier processus lancé en arrière-plan, si ceprocessus n'est pas terminé, la commande wait sera bloquante.
$ wait $!
Meurtre d'un processus
Il se fait par la commande kill.Il faut préciser le numéro du processus à tuer.
$ kill 467 Par défaut, envoi du signal 15.$ kill -9 467 Envoi du signal de meurtre.
Meurtre d'un processus sous job control
$ kill %1 numéro de tâche en arrière-plan
$ jobs[1] + Terminé (143) temps >> date_temps &[3] + En cours d'exécution decompte &
$ kill -9 %+[3] + Terminé decompte &
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 12 UNIXENV
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 13 UNIXENV
EXERCICES
Utilisation du trap
Commande : lisficdel fichier1 fichier2
Enoncé :
Lister le contenu des fichiers dont les noms ont été donnés en paramètres.
- Possibilité d’abandon de l’édition en cours si envoi du signal "INTERRUPT".
- En fin de travail, revenir au traitement implicite du signal "INTERRUPT".
Remarque : Utilisation de trap, continue, signal "INTERRUPT".
Commande : $HOME/.profile (sous UNIX)ou $HOME/.bashrc (sous LINUX)
Enoncé :
Modifier votre fichier "profile" de sorte à exécuter les opérations suivantes aumoment de la déconnexion :
- Effacement de l'écran,
- Affichage d'une bannière ou d'un message "il est : ",suivi de la date,
- Puis quelques secondes d'attente.
Remarque : Utilisation de trap, banner, ou echo, sleep et date.
ENVIRONNEMENT, SIGNAUX ET SYNCHRONISATION
LDVINCI Rev3 9 - 14 UNIXENV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 1 UNIXAV
UNIX / LINUXAVANCE
COMPLEMENTS
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 2 UNIXAV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 3 UNIXAV
SOMMAIRESection Page
COMPLEMENTS SUR LE SHELL 10 - 4
LES ALIAS 10 - 5Définition et utilisation 10 - 5Les alias pistés 10 - 5
SELECTION : LA BOUCLE SELECT 10 - 7Reply 10 - 7Read 10 - 7Print 10 - 7
SESSION UTILISATEUR 10 - 9Les variables Lxxx 10 - 9Changement de session utilisateur 10 - 9Définition d'une fonction 10 - 11
DEFINITION DES DROITS SUR LES FICHIERS 10 - 13umask 10 - 13
GESTION DES NEWS 10 - 14Fichiers des news 10 - 14Logique d'analyse des news 10 - 15
AUTRES COMMANDES D'AIDE AU DEROULEMENT D'UNE SESSION 10 - 16
EXERCICES DE PERSONNALISATION DE L'ENVIRONNEMENT 10 - 17UTILISATEUR
LES FILTRES D'EDITION TR, SORT ... 10 - 19
L'EDITEUR NON INTERACTIF : SED 10 - 20Adressage des lignes à éditer 10 - 20Modification et remplacement dans les chaînes de caractères 10 - 21Les expressions parenthésées 10 - 23Exemples de SED 10 - 24
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 4 UNIXAV
COMPLEMENTS SUR LE KSH
Il y a appel du Korn shell lors de la connexion, si l’administrateur du site a modifiéle fichier /etc/passwd pour y inclure, dans le dernier champ de votre entréeutilisateur, le chemin /bin/ksh (valeur par défaut sur de nombreux serveursUNIX).
Au moyen de la commande ksh (création d’un shell fils du shell courant).
Au moyen de la commande exec ksh (recouvrement du shell courant).
Lors de la connexion, ksh exécute /etc/profile, puis le fichier$HOME/.profile s’il existe dans le répertoire d’accueil de l’utilisateur et enfin ilexécute le fichier référencé par la variable ENV si elle existe dans le fichier$HOME/.profile.
Chaque fois qu’un nouveau processus shell sera créé à un niveau inférieur, le kshcommencera à exécuter le fichier référencé par la variable ENV (par exemple$HOME/.kshrc), si elle existe et si elle est exportée (ce fichier contiendravraisemblablement les spécificités du Korn shell).
Sortie du ksh
Par la commande :
$ exit
ou
$ <Ctrl><d>
si l’option ignoreeof a été positionnée (set -o ignoreeof), alors la sortie se faitobligatoirement par exit.
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 5 UNIXAV
LES ALIASDéfinition
Abréviation de commandes ou création de pseudo-commandes.Le 1er mot de chaque ligne de commande est remplacé par le texte correspon-dant si ce mot est un alias.
Utilisation
alias liste de tous les aliasalias nom imprime le contenu de nom, si trouvéalias nom=cde affecte nom à une ou plusieurs commandesunalias nom suppression de l’alias nomalias -x nom exporte l’alias nom
Si la définition d'un alias se termine par un espace, le shell vérifiera si le motsuivant est un alias.Cela permet d'utiliser plusieurs alias consécutifs dans une même ligne decommande.
Alias pistés, définition
Les alias pistés permettent d'améliorer les performances, car ils évitent au Kornshell de faire appel à la variable "PATH".
Utilisation
alias -t liste des alias pistésalias -t commande commande devient un aliasset -h toutes les commandesset -o trackall sont pistées
Note :Les alias pistés sont automatiquement annulés dès que le contenude la variable PATH change.Ils seront recréés au prochain appel de la commande.Les alias doivent être exportés pour être utilisés dans un sous-shellpar la commande :
alias -x nomalias=cde
Le fichier cité dans la variable ENV (lu et exécuté à chaque appel duksh) contiendra les alias.Quelques alias exportés sont déjà définis dans le ksh.
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 6 UNIXAV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 7 UNIXAV
Sélection, la boucle select
select identifieur [in mot ...]; do commandes ;done
Visualisation des mots de la liste (ou de $*) précédés par leur numéro positionnel,suivi de ")". Il est ensuite envoyé le prompt PS3 (par défaut #?) et il y a alorsattente de lecture, au terminal, d’un chiffre.
Si la réponse est un des chiffres affichés, identificateur sera affecté du motcorrespondant, les commandes entre do et done seront exécutées. Sinonidentificateur sera "null" et PS3 sera reproposé.
La réponse chiffrée entrée au terminal sera sauvegardée dans la variableREPLY.
Exemple :$ cat selselect cde in ls pwd ps exitdo$cdedone$ sel1) ls2) pwd3) ps4) exit#?4$
read
read [options] Nom_variables (Utilisation de la variable IFS).
-r n’interprète pas les "\" comme un caractère spécial(continuation de ligne)
print [options] chaine_de_caractères
- ignorer toutes les options qui suivent-n ne met pas un new-line en fin de ligne-r ignorer les séquences (\b, \c, \f, \n, \r, \t)-R équivalent à -r et ignore toutes les options excepté -n
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 8 UNIXAV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 9 UNIXAV
SESSION UTILISATEUR
- Tout terminal en connexion directe est surveillé par un processus : /usr/bin/getty (voir /etc/inittab).
- L’acceptation d’une session utilisateur (nom+mot de passe cor-rect) déclenche (si les fichiers existent) :
. L’exécution de /etc/profile
. L’exécution, s'il existe, de $HOME/.profile
.L'exécution, s'il existe, de $HOME/.kshrc
- Il est possible de conditionner la dernière séquence par :
Login : nom_utilisateur paramètres
La récupération de ces valeurs se fait sur test des paramètres définis explicite-ment, ou des valeurs positionnelles L0, L1,...
Exemple :
Login: alain revision=B projet=70054 CNRS
$ echo $L0 $projet $revision
CNRS 70054 B
- La fin de session (exit ou <CTRL><d>) déclenche l’exécution descommandes attachées au signal 0 par le trap de même numéro.
trap 'cmd1;cmd2;...' 0
positionné dans $HOME/.profile ou durant le déroulement de lasession.
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 10 UNIXAV
Changement de session utilisateur
Obtenue par la commande :
su .... . .finie par <CTRL><d> ou exit
su nom_utilisateur
permet de changer d’identité (uid, gid) tout en conservantl’environnement de la session suspendue dépendant des variablesexportées.Les alias ne sont pas exportés au travers de su. (Sauf si les alias sontspécifiés dans le fichier référencé par la variable ENV)
su - nom_utilisateur
permet de changer d’identité et d’environnement par exécution des"profile" comme lors d’une connexion de 1er niveau.
su [-] [ nom_utilisateur -c "commande (s) [arguments]"]
exécute la(les) commande(s) citée(s) avec l’identité et les droits(plusl'environnement) de l’utilisateur désigné.Il y a retour automatique à la session suspendue immédiatement aprèsl’exécution.
Il est souhaitable après "su" de vérifier son identité par la commande : id
Environnement d’une session
$ env
L’environnement d’une session (variables exportées) est l’un deséléments de base de gestion utlisateur.La commande env en donne le contenu.
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 11 UNIXAV
Définition d’une fonction
Ensemble de commandes regroupées sous un nom quelconque, exécutablesdans le shell courant par référence à ce nom.
Création d’une fonction
function nom
{
liste de commandes
}
ou
nom()
{
liste de commandes
}
Les fonctions peuvent récupérer des paramètres comme les procédures.
Une fonction peut définir des variables locales en utilisant la commande :typeset.
return [n]permet de spécifier le code de retour n (par défaut celui de la dernièrecommande exécutée).
Liste des fonctions :
functions ou typeset -f
Une fonction peut être exportée :
typeset -fx nom
Annulation d’une fonction :
unset -f nom
Les fonctions définies durant une session ne sont valables que pour la session.Pour les conserver, il faut les mettre dans le fichier référencé par ENV.
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 12 UNIXAV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 13 UNIXAV
DEFINITION DES DROITS SUR LES FICHIERS
Les droits d’accès à un fichier peuvent être positionnés par un masque decréation en octal et en complément binaire à 2, grâce à l’instruction :
umask nnn
Liste des droits :
$ umask
022 # soit : rwx r-x r-x
Seules les chaînes de production de programmes créent directement desfichiers exécutables.
Positionnement des droits durant la session :
Exemple pour un fichier ordinaire :
rw- pour le propriétaire
r-- pour le groupe
--- aucun droit pour les autres
$ umask 027
Positionnement des droits sur un fichier par chmod :
$ chmod u=rw,g=r,o= fic
Le propriétaire peut changer le groupe
chgrp gid|nom_groupe fichier(s)
Il peut aussi donner un fichier à un autre propriétaire
chown uid|nom_user fichier(s)
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 14 UNIXAV
GESTION DES NEWS
(SUR SERVEUR PRINCIPALEMENT)
Fichiers d’information : news
Fichiers de structure quelconque contenant des informations d’ordre généralconsultables avec la commande news.
Deux types de fichiers :
-Les fichiers d’informations :Ce sont des fichiers textes écrit par tout utilisateur ayant les droits enécriture sur le répertoire /var/news dans lequel ils seront créés.Les informations stockées dans ces fichiers seront consultables par lacommande news.
-Le fichier de contrôle d’accès :C'est un fichier dont la date de modification servira comme référencepour visualiser les fichiers d'informations (les news) les plus récents,par rapport à cette date référence.Ce fichier, $HOME/.news_time, sera créé à la première utilisation dela commande news, ensuite seule sa date de modification sera remiseà jour.Il aura la même date que celle du fichier d'information le plus récent.
Exemple :
$ ls -l /var/newstotal 1-rw-r--r-- 1 c700541 avance 59 20 fév 14:35 info1
$ cat /var/news/info1L'utilisation des news est très simple et pas compliquée!!!
$ ls -l $HOME/.news_timels: 0653-341 Le fichier /home/c700541/.news_time n'existe pas.
$ newsinfo1 (c700541) jeu 20 fév 14:35:21 NFT 2001 L'utilisation des news est très simple et pas compliquée!!!
$ ls -l $HOME/.news_time-rw-r--r-- 1 c700541 avance 0 20 fév 14:35 /home/c700541/.news_time
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 15 UNIXAV
Logique d’analyse des news
Nombre de news à examiner (plus récents que .news_time)
$ news -s --> n item(s)
Noms des news à examiner (plus récents que .news_time)
$ news -n --> nom(s) de(s) news
Visualisation des news
- Sans mise à jour de .news_time
nom(s) de(s) news --> contenu des nom(s)
$ news
-a --> contenu de toutes les news
- Avec mise à jour de .news_time
(fichier vide, date/heure modifiées par celles du news le plus récent).
$ news --> contenu de(s) news de date postérieure au dernier .news_timeactuel (... puis mise à jour de .news_time)
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 16 UNIXAV
AUTRES COMMANDES D’AIDE AUDÉROULEMENT D’UNE SESSION
Contrôle de déroulement
whoami identité actuelle de l’utilisateur de la session en cours.
who [am i] identité de connexion sur la ligne au 1er niveau.
who -option
-u événements de connexion : heure, n° de processshell.
-T autorisations d'écriture sur les terminaux.
ps [-options] liste les processus associés au terminal.
-e liste de tous les processus actifs.
-f de leur dépendance.
-t terminal liste des processus réduite à ceux associés à unterminal.
-p pid liste des processus associés à un n° de processus.
-u utilisateur liste des processus associés à un nom d’utilisateur.
leave [hhmm]
Spécification d’une échéance à partir de laquelle unmessage préviendra de l’atteinte de cette heure.
(message répétitif jusqu’au meurtre du processus leave).
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 17 UNIXAV
EXERCICES DE PERSONNALISATION DE L'ENVIRONNEMENT UTILISATEUR
1 - Ecrire un fichier ".profile" permettant lors d’une connexion login :
- d’écrire dans un fichier .journal les dates de connexion- de définir le prompt primaire PS1 identifiant le nom de la machine, le répertoire courant et le n° historique d’instruction
exemple : moka /home/user1 (35)
- de définir le prompt secondaire comme suit: (suite)>- de définir le prompt tertiaire PS3 comme suit: (choix):- de protéger l'écran contre toute messagerie immédiate- de consulter les "news" et de programmer l'avertissement de l’heure de fin de travail de la journée.- de proposer un choix vous permettant de vous placer sous un répertoire projet_1, projet_2 ou projet_3; (ces répertoires ayant été créés au préalable), ou sous le répertoire d’accueil.
2 - Lors de la déconnexion :
- effacement de l’écran,- envoi d’un message de fin (avec le nom de l’utilisateur se déconnectant sur quelle machine),- écrire dans .journal la date et l’heure de déconnexion
3 - Vous associerez à votre .profile un fichier ENV (.kshrc):
- dans lequel vous invaliderez la fin de session par <CTRL><d>.- vous imposerez un "timeout" (TMOUT) de 5 minutes sur votre terminal.- vous définirez deux fonctions,
. l’une permettant d’obtenir l’heure courante,
. l’autre une liste des sous répertoires
4 - Si vous êtes sur un système AIX, vous créerez en plus :
- dans le fichier . profile. une variable EDITOR=/usr/bin/vi en l'exportant
- dans le fichier ENV. un alias ll équivalent à "ls -l" en l'exportant.
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 18 UNIXAV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 19 UNIXAV
FILTRES D’EDITIONFiltres d’édition par ligne
tr substitution, traduction, destruction de caractères précisésdans une ligne.
exemple :
$ tr '[a-z]' '[A-Z]' </etc/passwd convertit toutes les minusculesen majuscules.
$tr -d : </etc/passwd suppression du caractère : (2pts)
Filtres d’édition par page
more filtre d’édition par écran d’un texte continu. Un certain nombred’options sont utilisables (commande h sous more).
pg même commande que more (des différences suivant lessystèmes d'exploitation)
Filtre d’édition triée
La commande sort trie le contenu d’un fichier en fonction d’une ou plusieurs clés.- La ligne entière peut constituer 1 clé unique.- 1 clé = 1 champ (ou une partie de champ).- 1 champ = chaîne de caractères encadrée d’espaces ou
d’un autre séparateur explicite (option -t).
Un certain nombre d’options permettent :- De préciser l’environnement de travail de sort : -o.- De préciser les règles du tri: -d, -f, -i, -n, -r, -u, -t.- De préciser la ou les clés de tri +pos1 -pos2 par clé de tri.
Exemples :$ ls -l | sort +7 -8
Trie suivant le 8ème champ du format de sortie de lacommande ls -l.
$ sort -r -o sortie +1.1 -1.2 fic1 fic2Trie dans l’ordre inverse de l’ordre lexicographique les2 fichiers "fic1" et "fic2" avec le premier caractère dusecond champ comme clé ; résultat du tri dans le fichier"sortie".
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 20 UNIXAV
ÉDITEUR NON INTERACTIF : SEDGénéralités
- pour des fichiers de taille importante.- pour des commandes de mise à jour compliquées.- pour des fonctions de mise à jour à effet global en un seul parcours
des données.
Appel de sedsed [-n] 'commande' fichierssed [-n] [-e 'commande'] ..... [-f ficcde] ...... [fichiers ...]
Options-n : supprime toutes les sorties par défaut (seules les
lignes affectées par la fonction p iront versla sortie standard).
-e commande : commande est une commande de mise à jour.-f ficcde : ficcde est un fichier de commandes de mise à jour.
Syntaxe d’une commande de mise à jour
[adr1[,adr2] ] fonction [arguments]
Adressage des lignes à éditer
. adressage par numéro de ligne.
. utilisation des expressions régulières.
. pas d’adressage relatif.
/exp.reg/ adresse toutes les lignes qui contiennent "exp.reg"
/exp.reg1/, /exp.reg2/ adresse toutes les lignes à partir de celle quicontient "exp.reg1" jusqu'à celle qui contient "exp. reg2".
Exemples :12 ligne numéro 12/toto/ toutes les lignes contenant "toto"/toto/,/titi/ toutes les lignes, de la ligne de "toto"
à la ligne "titi"
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 21 UNIXAV
Les fonctions de mise à jour
Action sur des lignes entièresd : Suppression de lignes.a\<texte> : Ajouter le texte.c\<texte> : Substituer le texte.i\<texte> : Insérer le texte.
Modification, remplacement dans les chaînes de caractères.
y : Remplacement de plusieurs caractères.s : Substitution, modification de partie(s) de ligne(s)
Forme générale d'écriture de l'action "y"
[adr1[,adr2]] y <liste1> <liste2>
Remplace toutes les occurences des caractères de <liste1> par les caractèrescorrespondant de <liste2> (le caractère <NL> est représenté par \n). <liste1>et <liste2> doivent être de même longueur.
Exemple :$ echo $PATH | sed 'y;/:; \n;'
Forme générale d'écriture de l'action "s"
[adr1[,adr2]] s <expression> <remplacement> <options>
<expression> est une expression régulière délimitée par n’importequel caractère sauf "espace" et "new-line".
<remplacement> est une expression qui n’utilise pas la syntaxe desexpressions régulières mais les conventions :& chaîne avec laquelle <expression> coïncide.\n nième expression parenthèsée.
<option> prend sa valeur dans :g toutes les occurences sur la ligne sont traitées.n seulement la nième occurence est traitée.p impression du résultat.w fic écriture du résultat dans "fic".
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 22 UNIXAV
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 23 UNIXAV
Les expressions parenthésées
L'action s permet de remplacer les chaînes de caractères à l'endroit souhaitédans la ligne.Les expressions parenthésées donnent la possibilité de regrouper des chaînes decaractères.
s/.....\(exp1\).....\(expn\)/\n.....\1/
exp1 Première expression parenthésée.expn Nième expression parenthésée.\n et \1 Représentent respectivement les expressions
numéro n et 1 parenthésées (leur ordre de placementdépend de la réorganisation souhaitée en sortie).
Exemple :
Dans le fichier edition , il y a 4 champs par enregistrement :
Nom Prénom Numéro1 Numéro2
En sortie nous voulons obtenir :
Prénom Nom
Commande à passer :
$ sed 's/\(.*\) \(.*\) .* .*/\2 \1/' edition
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 24 UNIXAV
Exemple 1
Soit le fichier de nom "texte" suivant :1 Le systeme UNIX comprend le Noyau, le Shell, les programmes2 utilitaires et les langages :3 - le noyau planifie les taches ; gere la memoire, la4 structure et les acces aux fichiers.5 - le Shell est un langage de commande. Il interprete6 les commandes et les execute.7 - les programmes utilitaires, encore appeles outils,8 representent le logiciel utilisateur de base.9 N’est-ce pas tout un programme?...
Par un fichier de directives envoyant sur la sortie standard le contenu du fichier"texte" on veut faire les actions suivante :- insertion de "bonjour" avant la 1ère ligne- changement de la 2ème ligne en "bonsoir"- insertion de "au revoir" après la quatrième ligne- destruction de la 6ème ligne
$ sed -f actli texte
contenu de actli1i\bonjour2c\bonsoir4a\au revoir6d
Résultat :
bonjour1 Le systeme UNIX comprend le Noyau, le Shell, les programmesbonsoir3 - le noyau planifie les taches ; gere la memoire, la4 structure et les acces aux fichiers.au revoir5 - le Shell est un langage de commande. Il interprete7 - les programmes utilitaires, encore appeles outils,8 representent le logiciel utilisateur de base.9 N’est-ce pas tout un programme?...
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 25 UNIXAV
Exemple 2
Dans le fichier "edition" remplacement à la ligne 4 de "Dupont" par "Durand" aumoyen d’une ligne de commande.
Sans option -n
$ sed '4s/Dupont/Durand/p' edition
Avec option -n
$ sed -n '4s/Dupont/Durand/p' edition
Résultat :
Sans option -n
Aboaf Maurice 244 748Adda Jen 539 234Allo Jean-Pierre 255 98Durand Jean 111 112Durand Jean 111 112Bernard Jean-Paul 234 567Chasserat Paul 245 178Cousin Pascal 222 222Froideceaux Michel 252 423Gros Lucien 212 121
Avec option -n
Durand Jean 111 112
UNIX AVANCE : COMPLEMENTS
LDVINCI Rev3 10 - 26 UNIXAV
LDVINCI Rev2 11 - 1 UNIXMEMO
MEMO
UNIX / LINUXMEMO
LDVINCI Rev2 11 - 2 UNIXMEMO
MEMO
LDVINCI Rev2 11 - 3 UNIXMEMO
MEMO
MEMO VIvi fichier Appel de vi
a<texte><Echap> Insère le texte après le curseur
i<texte><Echap> Insère le texte avant le curseur
o<texte><Echap> Insère une ligne après la ligne courante
O<texte><Echap> Insère une ligne avant la ligne courante
A<texte><Echap> Insère le texte à la fin de la ligne courante
ZZ Sort avec sauvegarde
:w Sauvegarde
:q! Sort sans sauvegarde
:!commande Exécute une commande shell
:sh Sort avec un shell fils
:set nu Numérote les lignes
:set nonu Supprime la numérotation des lignes
Les quatres fléches Déplace le curseur dans le buffer
^F Déplace le curseur un écran vers le bas
^B Déplace le curseur un écran vers le haut
/chaîne Déplace le curseur sur la chaîne
n ou N Répète la recherche dans le même sens ou dans le sens
inverse
33G Déplace le curseur sur la ligne 33
x Détruit le caractère courant La dernière
dd Détruit la ligne courante destruction est
3dd Détruit trois lignes contenue dans le
dw Détruit un mot buffer sans nom
r<caractère> Remplace le caractère courant par un autre caractère
cw<texte><Echap> Remplace un mot par texte
3s<texte><Echap> Remplace 3 caractères par texte
R<texte><Echap> Remplace plusieurs caractères par texte
u Annule le dernier changement
. Répète la dernière commande
p Copie le buffer sans nom après le curseur
P(majuscule) Copie le buffer sans nom avant le curseur
5yy Place 5 lignes dans le buffer sans nom
LDVINCI Rev2 11 - 4 UNIXMEMO
MEMO
(*) Spécifique ksh
MEMO COMMANDES
alias Définit ou affiche une abréviation de commande (unixenv)
banner texte Affiche le "texte en bannière (unixenv)
break Sort d'un niveau de boucle (unixprog)
cal Affiche le calendrier (unixpres)
cancel Stoppe l'impression d'un fichier (Syst.V) (unixcom)
cat fic Concatène le contenu du fichier sur la sortie standard (unixfic)
cd /users Déplace vers le répertoire /users (unixfic)
cd .. Déplace vers le répertoire père (unixfic)
cd Retourne au répertoire de connexion (unixfic)
chmod Change les droits d'accès (unixpro)
chown Change de propriétaire (unixpro)
chgrp Change de groupe (unixpro)
continue Supprime un passage dans une boucle (unixprog)
cpio -i Reconstruit une arborescence à partir d'un fichier d'archive
(unixcop)
cpio -o Crée une archive avec le contenu des fichiers dont le nom
est passé sur l'entrée standard (unixcop)
cp source destination Copie d'un fichier (unixcop)
date Affiche la date (unixpres)
echo "texte" Affiche texte sur la console (unixpres)
enq Gère les impressions (AIX) (unixcom)
env Liste les variables d'environnement (unixenv)
exit Sort du shell (unixsh)
export var Exporte la variable var (unixenv)
expr 4 + 2 Calcul arithmétique (unixprog)
fc Edite des commandes de l'historique(*) (unixsh)
file fic Donne la nature du fichier fic (unixfic)
find Recherche d'un fichier (unixcop)
fold Plie les lignes avant édition (unixcom)
for do done Programme une boucle (unixprog)
grep Recherche une expression régulière dans une liste de fichiers
(unixvi)
history Affiche les 16 dernières commandes(*) (unixfic)
if then else fi Structure conditionnelle (unixprog)
integer var Définit var comme variable entière (unixsh)
jobs Contrôle les tâches en arrière-plan(*) (unixenv)
kill -9 14759 Tue le processus 14759 (unixenv)
LDVINCI Rev2 11 - 5 UNIXMEMO
MEMO
let a+b ou ((a+b))etlet a<b ou ((a<b)) Calcul arithmétique et tests sur les variables entières
(unixprog)
lpq Affiche le contenu d'une file d'attente (BSD) (unixcom)
lpr Imprime un fichier (BSD) (unixcom)
lprn Arrête une impression (BSD) (unixcom)
lpstat Affiche le contenu d'une file d'attente (Syst V) (unixcom)
ls -C Liste en colonne (unixfic)
ls -l Liste les fichiers avec leurs caractéristiques
(unixpro)
ln source destination Lie un fichier (unixcop)
logname Affiche le nom de login (unixpres)
lp Imprime un fichier (Syst. V) (unixcom)
ls Liste les fichiers du répertoire courant (unixfic)
mailx userx Envoie d'un message à userx (unixcom)
man commande Affiche la documentation de la commande (unixpres)
mesg n Interdit l'affichage des messages (unixcom)
mkdir fic_rep Crée le répertoire fic_rep (unixfic)
more fic Affiche le contenu du fichier fic paginé (unixfic)
mv source destination Renomme un fichier (unixcop)
nohup commande & Protège la commande en arrière-plan d'une déconnexion
(unixenv)
passwd Positionne ou change un mot de passe (unixpres)
pg fic Affiche le contenu du fichier fic paginé (unixfic)
pr Affiche un fichier présenté (unixcom)
print "texte" Affiche un texte sur le terminal (*) (unixsh)
ps -f Liste les process en cours (unixsh)
pwd Affiche le répertoire courant (unixfic)
qcan Arrête une impression (AIX) (unixcom)
qchk Affiche le contenu d'une file d'attente (AIX) (unixcom)
qprt Imprime un fichier (AIX) (unixcom)
r Réexécute une commande (*) (unixfic)
read var Affecte la valeur entrée au clavier à la variable var
(unixsh)
readonly var Protège une variable (unixsh)
rmdir fic_rep Détruit un répertoire vide (unixfic)
rm fic Détruit un fichier ordinaire (unixfic)
rm -ri fic_rep Détruit un répertoire et son contenu (unixfic)
set Liste les variables du shell (unixenv)
LDVINCI Rev2 11 - 6 UNIXMEMO
MEMO
(*) Spécifique ksh
shift Décale les paramètres (unixsh)
sleep n Temporise n secondes (unixprog)
tee Redirige dans un fichier (unixsh)
test ou Teste les caractéristiques de fichiers,les valeurs num., les
[ expression ] chaînes de caract. (unixprog)
trap Synchronise un signal (unixenv)
true ou : Toujours vrai (unixprog)
tty Donne le nom du fichier spécial de votre terminal (unixpres)
type fic Affiche le type des données de fic (unixsh)
typeset-i var ou
integer var Définit var comme variable entière (unixsh)
unalias Supprime un alias (unixenv)
uname Affiche le nom de la machine (unixpres)
unset var Efface une variable (unixsh)
until do done Programme une boucle (unixprog)
wait n Le processus attend la fin du processus n (unixenv)
wc fichier Affiche le nombre de lignes, de mots,
de caractères d'un fichier (unixpres)
while do done Programme une boucle (unixprog)
who Liste les utilisateurs connectés (unixpres)
write userx Envoie un message à un utilisateur connecté (unixcom)
LDVINCI Rev2 11 - 7 UNIXMEMO
MEMO
(*) Spécifique ksh
MEMO (SUITE)
>fichier Redirige la sortie standard dans fichier (unixsh)
>>fichier Redirige la sortie standard en fin de fichier (unixsh)
2>fichier Redirige la sortie d'erreurs dans fichier (unixsh)
2>>fichier Redirige la sortie d'erreurs en fin de fichier (unixsh)
<fichier Redirige l'entrée standard à partir de fichier (unixsh)
commande<<FIN Utilise les directives d'une commande
dans une procédure (unixsh)
com1 | com2 La sortie de com1 est mise sur l'entrée de com2 (unixsh)
com | tee fichier Double la redirection de la sortie (unixsh)
$0 Nom de la procédure appelante (unixsh)
$1 à ${n} Paramètres 1à n (unixsh)
$# Nombre de paramètres (unixsh)
$* Tous les paramètres (unixsh)
$? Code de retour d'une commande (unixprog)
$! PID du dernier processus lancé en arrière-plan (unixenv)
alpha=100 Affecte la valeur 100 à la variable alpha (unixsh)
print $alpha Affiche le contenu de la variable alpha(*) (unixsh)
LDVINCI Rev2 11 - 8 UNIXMEMO
MEMO
* Dans une commande SHELL :
remplace n'importe quelle chaîne de caractères
pour générer des noms de fichiers
Dans les cas de CASE IN ESAC :
remplace n'importe quelle chaîne de caractère
(unixfic)
? Remplace 1 caractère (unixfic)
[] Remplace 1 des caractères contenus entre les crochets
(unixfic)
\ Annule l'effet spécial du caractère qui suit
(unixfic)
$(commande) Provoque la substitution par le résultat de la commande (*)
ou `commande` (unixsh)
'......' Ne provoque pas de substitutions à l'intérieur des quotes
(unixsh)
"......." Accepte la substitution des caractères $ \ `
et conserve les espaces (unixsh)
; Sépare les commandes sur une ligne (unixpres)
# Délimite un commentaire (unixpres)
commande& Lance une commande en arrière-plan (unixenv)
com1 || com2 Commande1 ou commande2 (unixprog)
com1&& com2 Commande1 et commande2 (unixprog)
(*) Spécifique ksh