UNIX 1. 2. 3. 4. 5. 6. 7. 8. Introduction 1. Unités 2. Unix et Linux Concepts fondamentaux d'Unix 1. Architecture du noyau Linux (Unix) 2. Système d'exploitation 3. Fichiers et répertoires 4. Système de fichiers 5. Interpréteur de commandes : shell Les commandes de base 1. Fichiers 2. Répertoires 3. Affichage Commandes avancées 1. Filtres 2. Droits d'accès aux fichiers 3. Les caractères génériques 4. Les redirections (>, >> et <) 5. Pipes : tubes de communication 6. Contrôle de processus 7. Réseau Le Shell : personnaliser l'environnement TD 1 TD 2 TD 3 1 sur 30 Introduction Unités Un bit est une unité de mesure en informatique. Un octet est composé de 8 bits. En français, l'octet est souvent noté « o » ou « B » de l'anglais Byte. L'octet est aussi parfois noté « b », mais en général le « b » minuscule est utilisé pour noter le bit. L'octet est l'unité qui sert à mesurer les éléments relatifs à la mémoire d'un ordinateur (capacité en mémoire vive) et de manière plus générale la mémoire informatique, la taille des bus de données (également mesurées en bits), mais aussi la capacité de stockage des éléments périphériques (cartes graphiques, disques durs...). Un octet peut prendre 256 valeurs différentes (28), entre 00000000 et 11111111. Par exemple : 11000100 ou 00000001 sont des représentations binaires d'octets, C4 et 01 étant leurs valeurs hexadécimales. Pour représenter un nombre, ses valeurs vont de 0 à 255 lorsqu'il représente un entier non signé (donc toujours positif), et -128 à 127 pour un entier signé. 1 kilo-octet (ko ou Ko) = 210 octets = 1024 octets. 1 méga-octet (Mo) = 220 octets = 1024 ko = 1 048 576 octets. 1 giga-octet (Go) = 230 octets = 1024 Mo = 1 073 741 824 octets. 1 téra-octet (To) = 240 octets = 1024 Go = 1 099 511 627 776 octets. 1 péta-octet (Po) = 250 octets = 1024 To = 1 125 899 906 842 624 octets. 1 exa-octet (Eo) = 260 octets = 1024 Po = 1 152 921 504 606 846 976 octets. 1 zetta-octet (Zo) = 270 octets = 1024 Eo = 1 180 591 620 717 411 303 424 octets. 1 yotta-octet (Yo) = 280 octets = 1024 Zo = 1 208 925 819 614 629 174 706 176 octets. source http://www.pcinpact.com/ Unix et Linux Unix est un système d'exploitation qui a vu le jour dans les laboratoires Bell en 1969. Son succès tient au fait qu'il est portable sur une large gamme d'ordinateur, que les sources du système sont disponibles, il est donc adaptable et que c'est un bon système d'exploitation. Sa philosophie est basée sur la force que donnent les relations entre programmes. Beaucoup de programmes Unix font des traitements simples, mais leur combinaison permet des traitements généraux et performants. multics 1969 : Unix naît dans les Bell Telephone Laboratories (AT&T) Ken Thompson et Dennis Ritchie 1973 : réécrit en C pour être portable 1974 : Une version est donnée à l'Université de Berkeley (BSD) 1980 : AT&T commercialise Unix System V 1978 : Première version d'Unix à l'université Berkeley par Software Distribution : Unix BSD 2 sur 30 1984 : Création du groupe X/Open norme XWindows indépendante d'Unix X Window : environnement graphique puissant, développé au MIT à l'origine, porté sur Linux (XFree86) naissance du projet GNU (is Not Unix), avènement du logiciel libre licence logicielle libre : la GNU GPL (General Public Licence) FSF Free Software Fundation1987 rapprochement AT&T BSD 1988 : OSF Open Software Fundation (DEC, HP, IBM) normalisation OSF1 1991 : Linux Intel x86 Linus Torwalds Le système d'exploitation Linux est calqué sur Unix et minix, clone d'Unix mais gratuit (Andrew Tannenbaum). Linux est la première version du système d'exploitation Unix, version complète, compatible, fonctionnant en mode 32 bits sur des processeurs de la famille Intel, gratuite et facile à installer. Linux permet de transformer un PC en station de travail Unix 1992 DEC/OSF1 1993 FreeBSD AFUU, AFULLinux est compatible POSIX (Portable Open System Interface eXchange), system V et BSD Qu'est ce que Linux (gratuit, sources) Linux reprend les principales caractéristiques d'Unix : Multi-utilisateurs, Multi-tâches, Système ouvert : structure modulaire du noyau qui garantit une relative, extensibilité, Gestion de la mémoire virtuelle, Gestion des processus, Gestion des fichiers et des Entrées/Sorties, Langage de commande écrit en C : le shell. Distribution LINUX = noyau Linux + composants GNU + logiciel de réseau BSD Unix + Xwindow, système de multifenêtrage du MIT et son portage Xfree pour Intel + LateX + Xemacs … Avantages et désavantages Avantages Les logiciels libres, projets nés dans le cadre de la FSF Free Software Foundation Par exemple : Bash, LiLo (LInux LOader) GNU Linux, « l'OS libre pour Monsieur Tout Le Monde » Free BSD, dérivé du système d'exploitation de la Berkeley Standard Distribution d'Unix. Fonctionne sur PC. Xfree, gcc, f77, xemacs … Le code source est gratuit, mais de plus l'utilisateur : - peut le modifier, l'améliorer sans rien devoir à personne ; par contre il doit distribuer gratuitement ses sources (son code). - peut distribuer le logiciel gratuitement ou le vendre. 3 sur 30 Désavantages de Linux Faiblesses du système : Installations délicates Instabilité de certains logiciels Complexité des lignes de commandes Complexité de l'administration système Réglage des paramètres sécurité Les différentes distributions Le nom Linux désigne le noyau du système. Les distributions Linux varient dans leur contenu en fonction des paquetages intégrés (packages) et des modes d'installation retenus par les développeurs. Un paquetage est un ensemble de fichiers (scripts, config, sources, binaires, …) qui permet l'ajout de fonctionnalités, l'installation de logiciels (rpm). Il existe un grand nombre de distributions, dont une dizaine un peu plus connues. RedHat http://www.redhat.com/ Mandriva http://www.mandriva.com/fr/ SuSE http://fr.opensuse.org/ Debian/GNU-Linux http://www.debian.org/ Caldera http://www.caldera.com/ Slackware http://www.slackware.com/ Gentoo http://www.gentoo.org/ Ubuntu http://www.ubuntu.com/ DemoLinux, essayez Linux sans installation : http://www.demolinux.org FreeBSD, http://www.freebsd.org/ Xfree86, http://www.Xfree86.org/ Quelques adresses ... Sites français http://www.linux-center.org/fr http://www.linux-kheops.com/doc/rootard/guid-r.htm (le guide du ROOTard pour Linux) http://lea-linux.org/ http://www.guidelinux.org/ http://www.linuxpourlesnuls.org/ Les associations http://www.april.org/ http://www.aful.org/ http://www.epi.asso.fr/ Les interfaces de multi-fenêtrage http://www.kde.org/ http://www.gnome.org/ Sites anglais http://www.linux.org/ 4 sur 30 Sites Linux et l'éducation http://www.linuxedu.org/ http://drgeo.seul.org/ Téléchargement, http://ftp.lip6.fr/ miroir en France http://tuxfinder.com/ http://www.guidelinux.org/wiki/doku.php?id=telechargements http://webb.ens-cachan.fr/ Les revues http://www.gnulinuxmag.com/ (Linux France Magazine) http://www.linux-pratique.com/ http://www.unixgarden.com/ http://linuxfr.org/ 5 sur 30 Concepts fondamentaux d'Unix Unix est un système d'exploitation multi-utilisateur et multitâche. Chaque station Unix possède un nom de machine (hostname) ce qui permet les communications réseaux. hostname.domainname master0.obspm.fr <--> 145.238.199.130 Connexion Chaque utilisateur s'identifie auprès du système par une procédure de login (username et password). login: dupond password: ******* Déconnection exit, quit, logout. Noyau Unix = c'est le coeur du système d'exploitation. Shell = interpréteur de commandes, c'est aussi un vrai langage de programmation Architecture du noyau Linux (Unix) 6 sur 30 Système d'exploitation Le système d'exploitation est l'interface entre la machine (hardware) et l'utilisateur. Il est chargé au démarrage de l'ordinateur et gère : les ressources du système (processeur, mémoire), les périphériques, et le système de fichiers. C'est lui qui charge les logiciels demandés par l'utilisateur en mémoire vive (RAM) et attribue les ressources nécessaires à leur utilisation. Il présente aux autres programmes et aux utilisateurs une machine plus facile à comprendre. Le système d'exploitation est un ensemble de programmes qui réalisent les fonctions essentielles de l'ordinateur : Gestion de processus : synchroniser les opérations des différents composants qui le constituent. Gestion de la mémoire : administrer les ressources du système Gestion du disque et des fichiers : - démarrer un programme ou stocker des données dans un fichier. - gèrer les interactions entre les logiciels et le matériel. Chaque programme d'application doit résoudre des problèmes particuliers soumis par l'utilisateur, mais il se repose sur le système d'exploitation pour gérer les interactions avec les périphériques. Gestion réseau Interface homme /machine, gestion du clavier et de l'écran. Modèle en couche UTILISATEURS Programmes systèmes, applications NOYAU Organisation des processus et des fichiers Mémoire virtuelle, pagination des tâches Gestion des tâches réseau Pilotes de terminaux de disques Gestion mémoire vive Pilotes réseau MATERIEL 7 sur 30 Fichiers et répertoires Majuscules et minuscules sont des caractères différents pour les noms de commandes, de répertoires et de fichiers. Il est pratique (mais pas obligatoire) d'utiliser des extensions précisant le format des fichiers (.ps .pdf .html) Un fichier est un ensemble de données stockées sur le disque, ensemble qui est identifié par un nom. Ce nom ne doit pas comprendre de blanc, d'accents ni de caractère /. Tous les autres caractères sont acceptés et la longueur maximale est de 256 caractères. Un répertoire est un ensemble de fichiers et peut contenir d'autres répertoires. Les répertoires s'imbriquant les uns dans les autres, on arrive à la notion d'arborescence où un répertoire père, ou racine, contient d'autres répertoires qui eux mêmes ... Le chemin d'accès à un fichier est le parcours que l'on doit faire dans l'arborescence pour trouver ce fichier : depuis la racine : chemin absolu (commence par /) /home/marie/histoires_droles/toto.txt depuis le dossier où l'on se trouve (répertoire courant) : chemin relatif. histoires_droles/toto.txt ou ./ histoires_droles/ toto.txt . est le répertoire courant .. le répertoire père du répertoire courant Système de fichiers / est le répertoire racine. C'est à partir de là que s'organise le système de fichier, sous forme d'arborescence de répertoires et de fichiers. Ses sous répertoires classiques sont : /bin fichiers binaires systèmes exécutables d'usage courant /sbin programmes essentiels du système ou de l'administrateur /dev pilotes des périphériques (device) /etc fichiers de configuration du système /home le père des répertoires des utilisateurs /lib bibliothèques partagées (library) /mnt /opt /proc processus en cours d'exécution /root /tmp fichiers temporaires /usr fichiers de configuration du système /var répertoire contenant des répertoires ou fichiers dont la taille varie souvent (fichier temporaire, spool, ...). 8 sur 30 Chaque utilisateur possède son propre répertoire principal qui sera la racine de son arborescence : c'est son home directory ou répertoire d'accueil. Par exemple pour Marie, ce sera : /home/marie/ C'est à partir de là que l'utilisateur Marie rangera ses fichiers dans une arborescence qui lui est propre. C'est le répertoire courant au moment de la connexion de Marie sur le système. C'est aussi le seul endroit à partir duquel Marie est autorisée à créer des fichiers (le reste appartient au système ou à d'autres utilisateurs et devrait être protégé par l'administrateur). ($HOME est une variable d'environnement et ~ un raccourci reconnus par le shell) Interpréteur de commandes : shell C'est une interface avec le système. Chaque instruction du shell entrée par l'utilisateur sur le clavier, sera lue, recopiée sur l'écran (echo) et interprétée par le système. Il y a plusieurs shells, mais la plupart des commandes de bases sont communes. Ce n'est qu'au niveau des scripts que des différences importantes surgissent. Bourne-Shell sh : Le shell de base, utilisé depuis les plus anciennes versions d'Unix. Il a été créé par Steve Bourne dans les laboratoires A&AT Bell(/bin/sh) ksh : Korn Shell bash : Bourne Again Shell (/bin/bash) zsh : le petit dernier C-Shell csh : le C-Shell créé à Berkeley. (/bin/csh) tcsh : amélioration du C-Shell echo $SHELL pour savoir quel est le shell utilisé. Ce shell est défini dans le fichier /etc/passwd, /etc/shadows On peut en changer Le prompt master0 > est affiché par l'interpréteur de commande dès la connexion pour vous inviter à entrer une commande. Historique des commandes pavé fléché et fichier caché .bash_history Complétion automatique touche tabulation 9 sur 30 Les commandes de base commande [-options] [arguments] Codes de retour : * Pas d'erreur : 0 * Opération interrompue pour cause d'erreur : > 0 man manual whatis info commande --help which : affiche le chemin d'accès à la commande type : indique si la commade est de type alias, mot-clé, fonction ou built-in Fichiers ls list ls : Liste les fichiers et les répertoires. syntaxe : ls [-option] ls [-option] [nom_fichier] ls [-option] [nom_répertoire] options : -l long : détaille les propriétés des fichiers et répertoires : statut(- : fichier, d : répertoire, l : lien symbolique), droits user, droits group, droits other, nombres de liens, nom du user, nom du group, taille en octets, date d'écriture, nom. exemple : ls -l cours_1.tex -rwxrwxrwx 1 marie dess 8078 Sep 13 17:04 cours_1.tex -a all : liste tous les fichiers, y compris ceux commençant par «.», en temps normal non considérés. -F classiFy : fait suivre le nom du fichier d'un caractère symbolisant son statut, «/» : répertoire, «*» : exécutable, «@» lien symbolique. -R recursive : liste les contenus des répertoires en parcourant l'arborescence de manière récursive. -t time : classe les fichiers par date de dernière modification (du fichier le plus récent au plus ancien). -r reverse : inverse l'ordre de classement cp copy Copie un ou plusieurs fichiers. syntaxe : cp [-option] nom_base nom_copie mv move Déplace ou renomme un ou plusieurs fichier syntaxe : mv [-option] nom_fichier_base nom_fichier_sortie 10 sur 30 rm remove Supprime un ou plusieurs fichiers syntaxe : rm [-option] nom_fichier options : -i : demande confirmation avant de supprimer les fichiers. -f : supprime les fichiers sans tenir compte des protections en écriture. -r : efface fichiers et répertoires de manière récursive. Attention à utiliser avec précaution ! touch Modifie l'horodatage d'un fichier (si le fichier n'existe pas, crée un fichier vide avec l'horodatage actuel) touch nom_fichier dd copier et convertir un fichier ln crée des liens entre fichiers (liens matériels ou liens symboliques) ln -s cible nom_du_lien find recherche récursivement un fichier dans l'arborescence à partit d'un répertoire donné. syntaxe : find repertoire_de_base -name "nom_fichier" ex : find ../ -name "cours.tex" locate recherche de fichiers dont chemin absolu contient une chaîne de caractères donnée. locate bash_ alias : définit un alias pour une commande alias dir='ls -alF' unalias dir Répertoires mkdir make directory Crée un nouveau répertoire. syntaxe : mkdir nom_répertoire rmdir remove directory Supprime un ou plusieurs répertoires. syntaxe : rmdir [-option] nom_répertoire options : -i : demande confirmation avant de supprimer les répertoires. -f : supprime les répertoires sans tenir compte des protections en écriture. cd change directory Change le répertoire courant. syntaxe : cd chemin_absolu_du_nouveau_répertoire cd chemin_relatif_du_nouveau_repertoire cd .. revient au repertoire précédent cd ~ revient dans votre home (= cd $HOME ou cd ) 11 sur 30 pwd print working directory Donne le chemin absolu du répertoire courant. syntaxe : pwd df taille du système de fichiers du disk use Liste récursivement les répertoires tout en précisant leur taille en blocks (~1/2 kilo-octets) syntaxe : du [-option] [fichier] options : -k : affiche les tailles en kilo-octets -h : human-readable -s : sumarize (donne seulement le total de chaque élément) Archive et compression tar création d'archive tar cvf monarchive.tar dossier cvf : pour créer(c) dans un fichier(f) en affichant les noms(v) xvf : pour extraire d'un fichier en affichant les noms z : compression tar czvf monarchive.tar.gz dossier gzip compression gzip fichier compresse fichier et le remplace par fichier.gz gunzip décompression gunzip fichier.gz décompresse fichier.gz et remplace fichier.gz par fichier (ou tgz par tar) 12 sur 30 Affichage clear efface la console echo réécrit à l'écran cat affiche une concaténation de fichiers, à l'écran par défaut more visualisation page écran par page écran less visualisation page par page (écran, et flèches) date affiche la date à l'écran date +"%H%M%S" pr pagine un fichier pour l'impression lpq liste des queues d'impression lpr imprime sur imprimante lprm supprime un travail d'impression lp imprime des fichiers cancel supprime un travail d'impression Editeurs de texte En mode console vi : son intérêt principal est d'exister sur toutes les machines sous Unix pico Interface graphique nedit emacs 13 sur 30 Les commandes de base : résumé man, whatis, info which, type Fichiers ls list cp copy mv move rm remove touch dd copier et convertir un fichier ln crée des liens entre fichiers find recherche récursivement un fichier dans l'arborescence locate recherche de fichiers alias Répertoires mkdir make directory rmdir remove directory cd change directory pwd print working directory df taille du système de fichiers du directory use Archive et compression tar création et extraction d'archives gzip compression gunzip décompression Affichage clear echo réécrit à l'écran cat affiche une concaténation de fichiers, à l'écran par défaut more visualisation page écran par page écran less visualisation page par page (écran, et flèches) date affiche la date à l'écran pr pagination lpr imprime sur imprimante lprm supprime un travail d'impression lpq liste des queues d'impression lp cancel Editeurs vi, vim, pico nedit, emacs 14 sur 30 Commandes avancées Filtres cat : concatène affiche (à l'écran) la concaténation des fichiers passés en paramètres cat toto.txt titi.txt utilisation particulière : cat > fichier CTRL D pour sortir ou cat > fichier << FIN paste : colle Réuni deux (ou plusieurs) fichiers en un seul, en accolant les lignes deux à deux. syntaxe : paste fichier_1 fichier_2 cut : coupe une partie de chaque ligne d'un fichier. cut -c3-8 texte cut -f2 -d: texte head : affiche les (10) premières lignes d'un fichier tail : affiche les (10) dernières lignes d'un fichier grep affiche les lignes contenant une chaîne de caractères recherchée dans des fichiers grep chaine fichier -i : indifférent aux majuscules/minuscules -n : numéro de ligne -l : liste uniquement les fichiers contenant la chaîne -e : expression régulière -f : liste d'expression dans un fichier sort trie Classe les lignes d'un fichier par ordre de caractères ASCII syntaxe : sort [-option] nom_fichier option : -n : utilisée pour classer des nombres. Ne tient pas compte des espaces. exemple : sort gamma beta alpha donne comme résultat la liste de paramètres triés : alpha beta gamma wc word count Compte les lignes, le nombre de mots et le nombre de caractères wc fichier cmp imprime la première différence entre deux fichiers comm comparer ligne à ligne 2 fichiers triés diff donne la différence entre deux fichiers 15 sur 30 sed : éditeur de flot. Substitution de texte dans un flot ou un fichier. ls -al | sed 's/m1/master1/g' awk : langage de traitement ls -al | awk '{ print $1 $9 }' 16 sur 30 Droits d'accès aux fichiers Propriétaires et droits Un fichier peut être lu (read), écrit (write) ou exécuté (execute) par le propriétaire (user), les membres de son groupe (group) ou tous les autres (others) Ceci s'applique également aux répertoires et se résume en 10 caractères : x xxx xxx xxx - rwx rwx rwx tous les droits sont ouverts pour ce fichier ordinaire d pour un répertoire l pour un lien (cf ln) Masque utilisateur Le masque des utilisateurs est définit par défaut par l'administrateur (root) mais peut être modifié par chaque utilisateur dans son répertoire. Il définit les permissions par défaut des fichiers qui seront ensuite créés. un umask 027 correspond à des fichiers rwx r-x --Valeur binaire 000 001 010 011 100 101 110 111 Droits ----x -w-wx r-r-x rw rwx Valeur octale 0 1 2 3 4 5 6 7 Mask 7 6 5 4 3 2 1 0 umask 077 suid, guid, sticky bit Valeur binaire 000 001 010 011 100 101 110 111 suid off off off off on on on on guid off off on on off off on on sticky off on off on off on off on Valeur octale 0 1 2 3 4 5 6 7 Le suid permet a un fichier d'être exécuté par un utilisateur avec les droits du propriétaire (héritage) (ex : /usr/bin/passwd) Le guid permet a un fichier d'être exécuté par un utilisateur avec les droits du groupe du propriétaire Le sticky bit protège un fichier contre une suppression par un autre utilisateur que le propriétaire (ex : /tmp) Ces attributs doivent être manipulés avec précaution. 17 sur 30 chmod change mode chmod : Modifie les droits d'accès aux fichiers et répertoires syntaxe : chmod classe_a_modifier symbole_booléen droits nom_fichier classe_a_modifier : ugo symbole_booléen : +droits : rwx exemples : chmod ugo+rwx cours.csh, donne le droit en lecture (r), en écriture (w), en exécution (x) à l'utilisateur (u) au groupe (g) et à l'ensemble des utilisateurs de l'ordinateur (o) sur le fichier cours.csh équivalent en notation octale à : chmod 777 cours.csh chgrp change group chgrp : Modifie le groupe d'un fichier ou d'un répertoire. syntaxe : chgrp nom_groupe nom_fichier chown change owner chown : Modifie l'utilisateur principal d'un fichier ou d'un répertoire. syntaxe : chown nom_utilisateur nom_fichier id identifiant afficher les identifiant d'Utilisateur et de Groupe (UIDs et GIDs) umask masque utilisateur définit les droits sur les répertoires et fichiers qui seront créés ultérieurement syntaxe : umask 0077 18 sur 30 Les caractères génériques * remplace toute chaîne de caractères ls -alF *.txt ? remplace un caractère quelconque ls -alF cours?.txt [...] intervalles de caractères ASCII [a-zA-Z] intervalle de caractères de a à z et de A à Z La suite de symboles [1-5], permet de représenter tous les caractères de la table ASCII compris entre 1 et 5. Si un répertoire contient 4 fichiers cours1.txt, cours2.txt, cours3.txt et cours4.txt et que l'on ne désire faire référence qu'aux trois derniers on écrira : ls -alF cours[2-4].txt ls a[!0-9]t liste tous les fichiers de 3 caractères commençant par un a suivi d'un caractère qui n'est pas un chiffre et se terminant par un t Les redirections (>, >> et <) /dev/stdin 0 /dev/stdout 1 /dev/stderr 2 Redirection de la sortie standard (écran) ls > liste.txt la liste des éléments du répertoire au lieu de s'afficher à l'écran est redirigée vers un fichier liste.txt. Si le fichier liste.txt n'existait pas il est créé, s'il existait il est écrasé (destructive). Redirection non destructive ls >> liste.txt Si le fichier liste.txt n'existait pas il est créé, s'il existait le résultat de la commande ls est écrit à la suite du dernier caractère du fichier liste.txt. Redirection de l'entrée standard (clavier) sort < liste.txt > liste_triee.txt Redirection de la sortie d'erreur standard find ./ -name fichier1 -print 2>erreurs.txt Rappel de l'utilisation particulière de cat cat > fichier << FIN 19 sur 30 Pipes : tubes de communication L'idée de base est de rediriger la sortie d'une commande vers l'entrée d'une autre (caractère pipe |) Processus1 | Processus2 | Processus3 le flux d'entrée du Processus1 est le stdin le flux de sortie du Processus1 est raccordé au flux d'entrée du Processus2 le flux de sortie du Processus2 est raccordé au flux d'entrée du Processus3 le flux de sortie du Processus3 est le stdout Exemples : ls | sort ls donne la liste des éléments d'un directory qui seront ensuite triés par la commandes sort La sortie de la commande ls correspond à l'entrée de la commande sort ls -al | more vous permet de visualiser les éléments d'un répertoire, page écran par page écran Contrôle de processus Chaque fois que l'on lance un programme, on crée un processus. Celui-ci est caractérisé par son PID (Process IDentity) ou numéro de processus. La commande ps donne la liste des processus en cours. Une tâche est un processus lancé par l'utilisateur. (bash n'est pas une tâche) La commande jobs donne la liste des tâches en cours. Un processus est composé : d'un programme en cours exécution. d'un environnement de processus permettant l'échange d'informations entre le système et le programme. A chaque programme (y compris les commandes shell) correspond un processus. Par son intermédiaire, on va pouvoir influer sur l'exécution du programme. Un processus est principalement caractérisé par : Un numéro de processus (PID) Un numéro de processus parent (PPID) Un numéro d'utilisateur (UID) Un numéro de groupe (GID) Le temps de calcul utilisé (CPU) Le répertoire de travail courant La liste des fichiers ouverts. 20 sur 30 On interagit avec les processus par un ensemble de commandes shell : top Liste tous les processus en cours ps : Liste les processus existants. syntaxe : ps [-option] options : -l : format long -e : liste tous les processus. -a affiche aussi les processus des autres utilisateurs jobs : Liste les programmes s'exécutant en tâche de fond. syntaxe : jobs -l kill : Supprime un processus et arrête le programme ou la commande en cours d'exécution. syntaxe : kill -9 numéro_de_processus kill %numéro_de_job (à utiliser après jobs) nice modifie la priorité d'un programme 1-19 nice +15 programme yes processus infini Premier/Arrière plan (foreground/background) Les commandes sont lancées à partir d'une fenêtre de dialogue. Linux propose deux façons d'exécuter un processus. Le processus peut mobiliser les ressources de la fenêtre de dialogue, auquel cas il est dit de premier ou d'avant plan. Il peut également «rendre la main», permettant de taper d'autres commandes. Dans ce cas, on dira que le processus est en arrière plan ou en tâche de fond. & : Lance directement un processus en tâche de fond. syntaxe : nom_commande & exemple : firefox& Si le processus est lancé en premier plan il mobilise les ressources de la fenêtre de dialogue exemple : firefox ^z : Suspend l'exécution d'un processus de premier plan. fg : Reprend l'exécution, en premier plan, d'un processus interrompu par ^z. bg : Reprend l'exécution, en tâche de fond, d'un processus interrompu par ^z. ^c : Supprime un processus de premier plan. ^s : Arrête le défilement des caractères dans une fenêtre de dialogue. ^q : Reprend le défilement des caractères dans une fenêtre de dialogue. 21 sur 30 Réseau Les commandes actuelles : ssh syntaxe : ssh -X user@host ssh -X [email protected] sftp version sécurisée de ftp syntaxe : sftp user@host get put ls cd bye scp : copie sécurisée entre machines. syntaxe : scp user@host1:file1 user@host2:file2 scp -r user@host1:dossier [user@host2:]dossier2 Les commandes moins utilisées : xhost hostnames autorisés à créer une connection avec le serveur x syntaxe : xhost [[+-]name ...] ping permet de tester si une machine host est sur le reseau syntaxe : ping host ping master0.obspm.fr traceroute donne le chemin suivi sur le réseau pour atteindre la machine host syntaxe : traceroute host telnet connection à une machine à travers le réseau syntaxe : telnet [-l user] host ftp connection à une machine pour un transfert de fichiers syntaxe : ftp [user@]host mail active le courrier électronique write talk who whoami finger 22 sur 30 Le Shell : personnaliser l'environnement Les fichiers cachés .bashrc, .bash_profile, .bash_logout, .bash_history définissent des variables d'environnement du shell qui seront utilisables tout au long de la session ouverte. .bash_profile est exécuté quand l'utilisateur se connecte (login shell ou shell de connexion) L'environnement est défini par l'administrateur dans /etc/profile puis par l'utilisateur dans ~/.bash_profile .bashrc exécuté chaque fois que le shell bash est exécuté (shell interactif ; ouverture d'une fenêtre de terminal ou commande xterm) .bash_logout est exécuté à la fermeture de la session. .bash_history contient l'historique des commandes exécutées Paramètres d'environnement : printenv : Liste les paramètres d'environnement, aux nombres desquels : le répertoire de base, le nom de l'écran, le shell utilisé. echo $HOME echo $PATH echo $PS1 echo $HISTSIZE echo $HISTFILE On peut modifier l'environnement pendant la durée de l'exécution de la console : PS1='[\t-\u]\$' ou de façon systématique en modifiant le .bashrc : export PS1 = '[\u@\h:\w]\$' On peut rajouter au .bashrc des alias qui seront ainsi automatiquement définis pour toute console ouverte : alias rm='rm -i' On active le .bashrc par la commande source .bashrc ou en redémarrant une session. 23 sur 30 En résumé : En bash : .bash_profile : login shell .bashrc : interactive .bash_history .bash_logout sont définis par l'utilisateur /etc/profile /etc/bashrc sont définis par l'administrateur Autres shells : .profile .cshrc .kshrc 24 sur 30 TD 1 Exercice 1 1. Quelle commande permet de changer votre mot de passe ? 2. Utiliser ls (ls -alF) et cd ( cd . cd .. cd ~ cd /) pour vous promenez dans l'arborescence des fichiers 3. Utiliser la commande man pour avoir des explications sur son propre fonctionnement, puis sur la signification de : rm -i rm -r ls -alFrt 4. Créer plusieurs répertoires en une seule ligne de commande avec mkdir Exercice 2 Notez les options intéressantes des commandes suivantes et les actions correspondantes : Commande Option Action Exemple -a -l ls -F -t -d -i rm -r -i cp -p -r -i mv touch 25 sur 30 -s ln find cvf xvf tar czvf -sk du Exercice 3 1. 2. 3. 4. 5. Quel est votre répertoire courant ? Quel est votre répertoire principal ? Afficher le contenu du répertoire principal Affichage récursif du contenu du répertoire .mozilla/ ou de .gnome2/ Afficher la taille du votre répertoire principal en Ko Exercice 4 1. Lire le fichier .bash_history avec les commandes cat, puis more et less. Conclusion ? 2. Lire un fichier html dans la documentation de gfortran-4.1-doc située dans /usr/share/doc/ avec cat, more et less. 3. Faire lire le même fichier par l'application firefox en le lançant depuis la console. 4. Trouvez les fichiers cookies.txt, install.log, bookmarks dans le dossier .mozilla/firefox/ 5. Créer un fichier texte quelconque avec nedit, emacs et vi manuel vi http://w3.uqah.uquebec.ca/DOC/unx_vi.html 6. Imprimer un fichier (pas trop gros) sur l'imprimante atlas. 7. Faire afficher le jour et la date sous la forme Jour/Mois/Année-H:M:S ex: 22/09/2005-11:37:25 26 sur 30 Exercice 5 Créer depuis votre home des répertoires et fichiers afin de créer une arborescence à quatre niveaux : Créer un répertoire Programmes dans projet1 et déplacer les répertoires C, Fortran et Java dedans. Changer le nom du fichier planning.pdf en planning-2005.pdf Effacer le fichier reunion1.txt Dupliquer l'arborescence du projet1 en projet2 Créer un nouveau dossier projets-2006 dans nom y déplacer les arborescences des projet1 et projet2 faire une archive de nom la compresser la relire Ecrire la succession de toutes les commandes dans un fichier script-exo5 27 sur 30 TD 2 Exercice 1 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Quel est votre umask ? Quels sont vos identifiants de groupe et d'utilisateur ? Lister tous les fichiers de votre home directory avec les informations sur les droits d'accès. Regarder les droits des différents fichiers et répertoires Créer un fichier vide, quels sont ses droits d'accès ? Editer le fichier pour qu'il contienne la seule ligne suivante echo Bonjour Modifier ses droits pour que tout le monde (user, group et other) puisse le lire, le modifier et l'exécuter. Modifier ses droits pour que group puisse seulement le lire. Modifier ses droits pour que other ne puisse ni le lire, ni le modifier, ni l'exécuter. Exécuter le fichier Supprimer le fichier Exercice 2 1. 2. 3. 4. Lister tous les fichiers commençant par . dans votre répertoire d'accueil. Lister tous les fichiers contenant la chaîne de caractères host dans le répertoire /etc Lister tous les fichiers du répertoire /etc se terminant par .conf Lister tous les fichiers du répertoire /etc se terminant par .conf et contenant un chiffre dans leur nom. 5. Lister tous les fichiers du répertoire /dev dont le nom a trois caractères et commence par hd. Exercice 3 1. Lister votre directory récursivement dans un fichier liste.txt Lire le fichier ainsi créé avec more ou less 2. Rechercher dans /usr tous les fichiers dont le nom est man. 3. Rediriger la sortie écran vers un fichier s.txt 4. Rediriger la sortie d'erreur vers un fichier e.txt 28 sur 30 Exercice 4 1. Créer un répertoire travail. 2. A l'aide des commandes cat et echo, y créer deux fichiers fic1 et fic2 contenant quelques lignes. 3. Créer un fichier fic3 en accolant les lignes des deux fichiers précédents. 4. Créer un fichier fic4 en disposant les deux fichiers précédents à la file. 5. Combien les 4 fichiers contiennent-ils de lignes, mots et caractères ? 6. Trouvez et affichez les lignes contenant une chaîne de caractères choisie (par exemple "est") 7. Afficher que les 2 premières lignes de fic4 8. Afficher que les 2 dernières lignes de fic4 Exercice 5 A l'aide de la commande cat, créer le fichier test.num contenant les lignes (ici les blancs soulignés symbolisent des espaces) : __99 01 11 45 ___1000 1 Comparez les résultats obtenus avec sort et sort -n 29 sur 30 TD 3 Exercice 1 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Afficher la liste de tous les processus qui vous appartiennent. Afficher la liste de vos jobs. Lancer l'application firefox depuis le terminal : firefox Interrompre ce processus Le relancer en arrière plan Réafficher les processus et les jobs Repasser le job concernant firefox en premier plan Le tuer Réafficher les processus et les jobs Lancer directement firefox en arrière plan Exercice 2 1. Définir un alias lsm qui affiche la liste de tous les fichiers du répertoire courant page écran par page écran 2. Définir un alias cp qui impose une confirmation avant l'écrasement de fichiers par copie 3. Définir un alias psm qui affiche tous les processus qui vous appartiennent 4. A l'aide de who, cut et sort faire afficher la liste des login des personnes connectées sur m2dsg-pro classée par ordre alphabétique sans doublon. Exercice 3 1. Afficher l'environnement 2. Modifier le prompt PS1 pour qu'il affiche l'utilisateur(u), le host(h), le répertoire courant(w) et l'heure(t) 3. Modifier le fichier .bashrc, afin de transformer la commande ls par ls -alF 4. Ajouter un alias qui impose une confirmation avant la suppression, copie ou déplacement de fichiers Exercice 4 1. 2. 3. 4. 5. 6. 7. 8. Transférer un de vos fichiers de master0 sur siolino par sftp Faire la liste de tous vos fichiers fortran sur master0 dans un fichier liste Faire une archive compressée contenant tous ces fichiers fortran Copier cette archive sur siolino par scp Se connecter en ssh sur siolino Vérifier que 1 et 4 ont fonctionné correctement Dé-compresser et dé-archiver sur siolino Effacer sur siolino les fichiers fortran nouvellement créés. 30 sur 30