Cours
Transcription
Cours
Système d’Exploitation D. Lazure et G. Dequen Agenda • Charte UPJV : • Confidentialité du password • Usage limité aux enseignements • Sauvegardes • • • Stations de travail sous Linux Comptes nominatifs individuels Adresse mail : login@etudsc.upicardie.fr • Accès possible de l’extérieur … Interface graphique optionnelle Agenda • Quelques conseils et informations • Présence en Cours/TD/TP très fortement conseillée • Travail de TP en Binôme • ni monôme, ni trinôme, … • PC (ou autre) personnel ? • Estil sous OS UNIX ? Si NON : le faire !! • Examen et Partiel • Sans documents Plan • • Qu’estce qu’un système d’exploitation ? Le point de vue utilisateur : • Linux : Commandes et principes de base • Shellscript • • Maîtrise des expressions régulières Programmation système Operating System (Système d’exploitation) ? • • “An operating system is the software that provides the interface between the hardware of a computer system and the applications programs that are used on it.” Rôle : • Gestion et partage des ressources matérielles • CPU, Mémoire, Disques, périphériques, cartes graphiques, cartes son, … • Support des services • Édition, compilation, exécution, interfaçage graphique, gestion des services réseau, … OS : Caractéristiques … • • Mono ou Multiutilisateurs Mono tâche ou Multitâches • Multitâches • Préemptif • Un processus change de contexte sur « ordre » de l’OS • L’OS décide de la « gestion » des processus • Ex: UNIX, Windows NT/2K/XP • Non Préemptif • Un processus décide seul son changement de contexte selon certaines règles (ex: quand il a utilisé suffisamment de ressources CPU) • Ex: Windows (< NT) Quelques exemples … • • • • MS/DR DOS MS Windows 9*/CE/2k/XP/Vista/7/Mobile Palm OS UNIX • AIX • HPUX • Linux • Mac OS X 10.* • • • • Mac OS Be OS Androïd Symbian, ... Operating Systems • • Large, complex programs Typically • Longlived • Frequently extended and updated • Worked on by a number of developers • Used and, maybe abused by a variety of users with varying expertise and expectations • Essential to create an acceptable computing environment to create and execute other programs that achieve business or personal goals MS Windows • • • Windows is a series of operating systems developed by Microsoft Object oriented and easy-to-use Graphical User Interface (GUI) Multitasking Operating systems • allowing multiple software processes to be run at the same time • Multiprocessing • allowing multiple processors to be utilized • Multithreading • allowing different parts of a software program to run concurrently • Abundant in development tools and applications • • Visual Basic, Visual C, Visual FoxPro, Delphi, Power Builder, ……. Microsoft Office, Microsoft Visio, Internet Explorer, …… MS Windows kernel • Windows 9X kernel • Windows 3.X/95/98/ME • In 2001, Microsoft announced ceasing the development of Windows 9X kernel. • Windows NT kernel • Windows NT/2000/XP/Vista/7 Unix • • • • Developed at Bell Laboratories in 1969 Written with the highlevel programming language C Initially designed for mediumsized minicomputers, and then moved to mainframe computers and personal computers For different hardware platforms, there are many different Unix versions • AIX, Digital Unix, Hp Unix, ... • Sco Unix, which is a PCbased Unix operating system • Posix (start 1981) defines standard Unix system calls Features of Unix • • • • • • Mature and stable operating system Graphical User Interface operating system Multitasking capability Multiprocessing Multithreading Multiuser capability • allowing multiple users to utilize the computer and run programs at the same time. • System portability • Capable of moving from one brand of computer to another with a minimum of code changes • The operating system could be upgraded without having all the user's data inputted again • Containing many tools and applications Unix functionally organized at three levels - Surrounding the kernel and acting as a user interface offering additional functionality to the operating system to the Unix operating system - Command language interpreter - Interprets the command users enter - Selects and runs the command or program - Provides the results to the screen or file as directed by the command - C shell, Bourne shell, Korn shell Tools and applications shell kernel The main part of operating system, and responsible for controlling system resources. - Loaded into memory when the system boots - Process control and scheduling - Memory management - Device I/O - System error handling - User programs requesting services from the kernel through system calls - Hardware devices getting kernel response through interrupts User interface • Providing two methods for user to interact with the operating system • GUI, for users of workstations or intelligent terminals with bit-mapped displays • Command line interface, for users of a character cell terminal or terminal emulator UNIX File system • A hierarchical file system • • • • • a root filesystem: /bin, /lib, /etc, /dev, ... a /usr filesystem: programs and unchanging data a /var filesystem: changing data (such as log files) a /home filesystem: user’s files Types of files • Ordinary disk files • Special files • Each physical device on a Unix system is treated as a special file • Located in the /dev directory • Directory files File system • Naming files and directories • File and directory names can include letters, numbers, periods(.), underscores(_), and some other printable characters • Avoid characters with special programming or system meanings, such as /, *?[]<>$’”&! • Generally, a name of file and directory can contain up to 255 characters • Accessing directories and files • • • • Accessing directories: cd , ls, pwd Finding files: find Viewing files: more, cat, tail, head, less Editing files: vi, vim, ed Online documentation • • Unix commands are documented on line in the man pages The man command provides online access to the system's reference pages What is Linux ? • • • A free Unix-type operating system originally created by Linus Torvalds with the assistance of developers around the world The source code for Linux is freely available to everyone GUI operating system, including many of the tools that Windows users are familiar with such as, • • • • • A file manager A Window manager A help system A configuration … What is Linux ? • • Requiring less system resources. A Linux based system can operate smoothly on a 386 or 486 Application software support • Office applications: Corel WordPerfect Office 2000 for Linux Deluxe, Open Office • Graphics tool: Gimp, ImageMagick, ... • Browsers: Firefox, Opera, ... • MPEG Decoder/Encoder: mplayer, mencode, … Where did it come from? • Linus Torvalds created it • with assistance from programmers around the world • first posted on Internet in 1991 • • Linux 1.0 in 1994; 2.2 in 1999 Today used on 710 million computers • with 1000’s of programmers working to enhance it How do you get it? • • Download it from the Internet From a “Distribution” (e.g. RedHat) • Linux kernel • X Windows system and GUI • Web, email, FTP servers • Installation & configuration support • 3rd party apps • Hardware support Why is it significant? • • Growing popularity Powerful • Runs on multiple hardware platforms • Users like its speed and stability • No requirement for latest hardware • It’s “free” • Licensed under GPL • Vendors are distributors who package Linux Utilisateur UNIX ➢ ➢ Chaque utilisateur est connu login/passwd : ➢ ➢ ➢ ➢ Individuel : responsabilité Confidentiel : sécurité Changer de motdepasse : passwd (yppasswd) Interne : UID/GID ➢ ➢ User Identifier Group Identifier Security Guidelines • Take Care With Passwords • Use good ones (motherhood statement) • Don't Use Real Words • Make Sure They Are Not Easily Guessed • Use Combinations Of Upper and Lower Case, Numbers, Punctuation • One Method: Take first letter of a sentence or book title, insert numbers and punctuation Choisir son passwd ➢ Faux passwd : ➢ ➢ ➢ ➢ ➢ ➢ ➢ Login Nom Prénom azerty mlkjhgf 1234567 N° téléphone, date de naissance Mot du dictionnaire F/GB ... ... Crack et sniff : strictly prohibited (see Charte) Utilisateur UNIX ➢ ➢ Connexion ou login ➢ Mode texte ➢ Mode graphique Après le login : shell ➢ interpréteur de commandes % ➢ Déconnexion en quittant le shell : % logout % exit % ControlD ^D Dieu existe ➢ ➢ ➢ ➢ ➢ ➢ UID = 0 Login : root Sur etudsc.upicardie.fr : interdit Administrateur système Le droit de tout faire (et n'importe quoi) À la maison (ou en MASTER 2) Additional Resources • UNIX Systems Administrator Resources • • Linux/390 Observations and Notes • • • • • http://penguinvm.princeton.edu Introduction to Linux Introduction to UNIX Linux/390 Installation Linux Administration Made Easy • • http://www.ugu.com/ http://www.linuxninja.com/linuxadmin/book1.html Conceptual software architecture of the Linux kernel Additional Resources • • • • • • http://www.linux.org http://www.tux.org http://www.ubuntu.org http://www.li.org http://lealinux.org http://www.freenix.org Linux File System Basics • Linux files are stored in a single rooted, hierarchical file system Directories root • Data files are stored in directories (folders) User home directories • Directories may be nested as deep as needed Data files Naming Files • Files are named by • naming each containing directory • starting at the root • This is known as the pathname /etc/passwd /home/neale/b The Current Directory • One directory is designated the current working directory • if you omit the leading / then path name is relative to the current working directory • Use pwd to find out where you are Current working directory doc/letter ./doc/letter /home/neale/doc/letter Some Special File Names • Some file names are special: • / The root directory (not to be confused with the root user) • . The current directory • .. The parent (previous) directory • ~ My home directory • Examples: • ./a same as a • ../jane/x go up one level then look in directory jane for x Special Files • /home all users’ home directories are stored here • • /bin, /usr/bin system commands /sbin, /usr/sbin commands used by admins • /etc all sorts of configuration files • /var logs, spool directories etc. • /dev device files • /proc special system files Standard Files • UNIX concept of “standard files” • standard input (where a command gets its input) default is the keyboard • standard output (where a command writes it output) default is the terminal • standard error (where a command writes error messages) default is the terminal Interpréteur de commandes ➢ ➢ ➢ Interface utilisateur pour lancer des commandes Exécution de scripts (= programmes shells) Nombreuses déclinaisons : ➢ ➢ ➢ ➢ ➢ Bourne shell : sh (ou bash) Korn shell : ksh Cshell : csh, tcsh Command.exe (MS – ligne de commande) Caractéristiques différentes : ➢ ➢ ➢ ➢ Contrôle des processus Substitution de variables Langage de contrôle Divers services Syntaxe générale d'une commande % nom [option]... [arguments]... ➢ ➢ Premier mot : la commande à lancer Puis les options (...) ➢ ➢ Puis les arguments ➢ ➢ Concaténation généralement possible (la pour l a) Séparés par un ou plusieurs espaces Mode intéractif : chaîne de prompt % Documentation en ligne % man [section] commande Sections : 1) Users commands (man 1 ls) 2) System calls (man 2 chmod) 3) Subroutines (man 3 printf) 4) Devices (man 4 NFS) 5) File formats (man 5 passwd) 6) Games (man 6 chess) 7) Miscellaneous (man 7 man) 8) AdminSys (man 8 mkfs) 9) Kernel (man 9 ext2) Interface graphique % xman Commande % info plus complète Les parties d'un man ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ NAME SYNOPSIS AVAILIBILITY DESCRIPTION OPTIONS DEFAULTS EXAMPLES OVERVIEW ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ENVIRONMENT EXIT STATUS WARNINGS FILES SEE ALSO DIAGNOSTICS BUGS HISTORY Fichier Unix ➢ ➢ ➢ ➢ Toute donnée écrite fait partie d'un fichier Format : séquence d'octets / de caractères Hiérarchisé dans une arborescence unique Contenus types : ➢ ➢ ➢ ➢ Programmes exécutables, shellscripts, textes ... Répertoires Périphériques (/dev) Fichiers spéciaux Chemins d'accès à un fichier ➢ Chemin absolu : à partir de la racine /home/fmi/linfo/dushmol/CUnix/tp1/toto.c ➢ Chemin relatif : à partir du répertoire courant % pwd /home/fmi/linfo/dushmol/CUnix % ls tp1/toto.* toto.c ➢ Certains shells (csh, tcsh, bash): ~ ~dushmol répertoire de l'utilisateur qui exécute le shell répertoire de dushmol Remonter une arborescence ➢ ➢ Répertoire courant : . Répertoire père : .. % ls . toto.c % ls .. tp1 ➢ Liens symboliques : rupture de l'arborescence Syntaxe d'un nom de fichier ➢ Suite de caractères sauf /, terminée par \0. ➢ Longueur limitée par le FileSystem (partition) ➢ ➢ Pas de propriétés héritées des noms ni des extensions (à l'exception des fichiers cachés) Des conventions : .s assembleur .c, .h programme C (et include) .java, .class Java .o Binaire objet .a librairie de binaires objets Diverses extensions habituelles Documentations : .html HTML .1 à .9 man .texi info .ps postscript .pdf portable doc. format .tex tex ou latex Versions antérieures : .old .bak .sav ~ Compressions : .Z compress .gz gzip .bz2 bzip2 .tar archive tar .tgz tarball .tar.gz idem .rpm RPM Package Manager .uu uuencode Métascaractères ➢ ➢ ➢ Substitutions effectuées par le shell Avant l'appel de la commande Expressions régulières : ? caractère quelconque [a,b,c] a b ou c [DL] D <= ? <=L * tout motif (y compris vide) ➢ Protection d'un caractère : \ Commandes sur les répertoires % pwd • print working directory % cd [rep] ➢ change directory % mkdir [p] dirname... ➢ make directory [parents] % rmdir dirname... ➢ remove directory (must be empty, cf rm r) Type de contenu de fichier % file /etc/a* /etc/adduser.conf: ASCII English text /etc/adjtime: ASCII text /etc/aliases: ASCII text /etc/aliases.db: Berkeley DB (Hash, version 7, ...) /etc/alternatives: directory /etc/apm: directory /etc/apt: directory /etc/at.deny: can't read `/etc/at.deny' (Permission denied). Inspecte les contenus des fichiers Inoeud d'un fichier ➢ Informations sur un fichier du FileSystem ➢ ➢ ➢ ➢ ➢ ➢ ➢ Type de fichier : ordinaire, répertoire, lien, tube... Propriétaire : UID Groupe : GID Dates : création, modification, accès, effacement Droits d'accès Pour toute taille de fichier (meme vide) Inombre : indice dans la table des inoeuds (cf TD7) ls l % ls l vm* rwrr 1 root root 834366 Sep 30 12:06 vmlinuz2.2.20 ➢ Premier caractère : type du fichier fichier d répertoire l lien symbolique ➢ ➢ ➢ Caractères 2 à 4 : droits d'accès pour le propriétaire Caractères 5 à 7 : droits d'accès pour le groupe Caractères 8 à 10 :droits d'accès pour les autres Droits sur un fichier / un répertoire ➢ Droits sur un fichier : r lecture w écriture x exécution s setUID, setGID, stickybit ➢ Droits sur un répertoire : r lecture (ls) w modification (création, effacement) x passage t droit de suppression réservé au propriétaire ls l (2) % ls l vm* rwrr 1 root root 834366 Sep 30 12:06 vmlinuz 2.2.20 Entier : nombre de liens physiques ➢ Login du propriétaire ➢ Nom du groupe ➢ Taille (en octets) du fichier ➢ Date de modification ➢ Nom du fichier ➢ Fichiers (répertoires) cachés Nom commençant par . % ls % ls a . .. .data % ls al total 4 drwxrxrx 2 dequen dequen 1024 Sep 30 21:48 . drwx 25 lazure lazure 2048 Sep 30 21:48 .. rwrr 1 dequen dequen 6 Sep 30 21:48 .data Contenu d'un répertoire ls [aliARF...] [name]... ➢ Options : a all (meme cachés) A idem a, sauf . et .. l format long i inode d répertoire (ne descend pas) t time R récursif ➢ Noms de fichiers ou de répertoires facultatifs ( % ls * ) Déplacement ou renommage mv [] [fi] fichier1 fichier 2 Renomme fichier1 en fichier2 mv [] [fi] rep1 rep2 Renomme rep1 en rep2 mv [] [fi] fichier... repname Déplace les fichiers dans le répertoire repname Options : les arguments suivants sont des fichiers ( toto ) i interactif f force Copies cp [ip] fichier1 fichier2 Recopie fichier1 dans fichier2 cp rR [ip] rep1 rep2 Copie récursive de rep1 dans rep2 cp [diprR] fichier... rep Copie des fichiers dans rep (doit exister) Options : i Mode interactif d pas de déréférencement des liens symboliques p Duplique les droits et la date de modification r R copie récursive Effacement de fichier rm [] [fir] fichier... Remove Destruction définitive (sauf FS journalisés) Options : les noms qui suivent ne sont pas (plus) des options r destruction récursive f force i mode interactif Monsieur propre : # rm rf / Visualisation de contenu cat [] [bnv...] [fichier]... Filtre élémentaire : • Affiche l'entrée standard sur la sortie standard Ou le contenu des fichiers concaténés si spécifiés Options : b n v numérotation des lignes filtre les caractères nonimprimables Visualisation paginée more [options] fichier... less [options] fichier... ➢ ➢ Affiche page/page le contenu des fichiers Less plus puissant : ➢ ➢ ➢ Retour arrière Ne lit pas tout le fichier avant de commencer S'utilise en filtre (entrée standard) Premières/dernières lignes ➢ head [number] [fichier]... tail [+|number] [fichier]... Options : number +number ➢ number premières/dernières lignes commence à la ligne number S'utilise aussi en filtre Edition de fichiers ➢ ➢ Editeurs de fichiers de type texte Historique : vi éditeur pleine page ➢ à savoir manipuler un minimum ➢ ➢ ➢ ➢ ➢ ➢ x i ESC ESC:q! ESC:wq suppression de caractères insertion retour au mode précédent quitte sans sauvegarder Quitte en sauvegardant Courants : ➢ Textedit, kedit, gedit, emacs, ... Droits par défaut ➢ ➢ ➢ ➢ umask [nnn] Affiche (pas d'argument) le masque de création Fixe le masque à nnn (chiffres octaux) Définit les droits d'un fichier lors de sa création Jamais de x (sauf éditeur de liens) % umask 027 % mkdir bar ; touch foo % ls ld bar foo drwxrx 2 lazure ens 1024 Sep 30 22:53 bar rwr 1 lazure ens 0 Sep 30 22:53 foo Changer les droits (symbolique) chmod [R] [ugoa][+=][rwxstugo]fichier... Récursivité par l'option R ugoa user group others all += ajout retrait positionnement rwx read write execute st {setuid,setgid} sticky ugo recopie des droits user group others ➢ Changer les droits (octal) ➢ ➢ ➢ ➢ ➢ ➢ ➢ chmod [R] octal fichier... 3 ou 4 chiffres octaux à ajouter et à concaténer 4000 setuid bit 2000 setgid bit 1000 stickybit (fichier : antiswap, rep: rm) 400 lisible prop 40 groupe 4 autres 200 modif prop 20 groupe 2 autres 100 exec prop 10 groupe 1 autres Changer le propriétaire / le groupe chown [R] username fichier... chgrp [R] groupname fichier... ➢ ➢ ➢ Doit être root ou propriétaire (system V) Doit être root (BSD) Retirent les bits s Créer un lien physique ➢ ➢ ln fichier fichierbis fichier et fichierbis partagent le même inoeud fichier et fichierbis sont indifférenciables % ln toto titi % date > toto % cat titi Mon Sep 30 23:28:47 CEST 2002 % rm toto % cat titi Mon Sep 30 23:28:47 CEST 2002 Créer un lien symbolique ➢ ➢ ➢ ➢ ➢ ln s fichier lien Lien par le nom Alias : accès à fichier > accès à lien Utilisation courante Pas de droits sur le lien (droits sur le fichier) Passe les frontières physiques Espace disque libre ➢ ➢ ➢ ➢ df [i] [partition]... df [i] [fichiers]... Affiche des informations sur l'espace libre Par partition (FS) Blocs / Inodes Cf TD5 Usage disque ➢ ➢ ➢ ➢ du [s] fichier... Taille disque utilisée par un fichier Taille totale d'un répertoire (récursif) En kilooctets s pour n'afficher que la somme Quotas disques quota v ➢ ➢ ➢ ➢ Affiche la position des quotas par partition Limite soft Limite hard Grace period Commandes déjà vues • • • • • • • • • • • cat cd chmod chown cp date df du echo expr file Affiche un flot sur stdout Change de répertoire courant Change les droits d'une entrée Change le propriétaire d'une entrée Copie des entrées Affiche la date et l'heure Espace libre Usage disque Affiche ses arguments sur stdout Evalue une expression entière Type le contenu des arguments Commandes déjà vues • • • • • • • • • • • • head kill less ls man mkdir more mv rm rmdir tail test Affiche le début d'un flot Envoie un signal vers un processus Visualisation paginée Liste le contenu d'un répertoire Affiche l'aide en ligne d'une commande Crée un répertoire Visualisation paginée Renomme ou déplace des entrées Efface des entrées Efface un répertoire Affiche la fin d'un flot Evalue des conditions basename - strip directory and suffix from filenames • % basename /home/fmi/linfo/toto/Projet/parse.c parse.c % basename /home/fmi/linfo/toto/Projet/parse.c .c parse • Utilisation courante : • • • • Vérification des arguments d'un shell script • Permet une syntaxe plus tolérante lors de l'appel : % script toto.c % script toto dirname - strip non-directory suffix from file name • % dirname /home/fmi/linfo/toto/Projet/parse.c /home/fmi/linfo/toto/Projet • Traitement de chaine de caractères • Pas de vérification de l'existence du chemin • À compléter avec le test de l'existence du chemin diff - find differences between two files • • • • • • • • • • • % diff fork.c fork2.c 17a18 > sleep(60); % diff fork2.c fork3.c 18c18,21 < sleep(60); > wait(); > // waitpid(pid); > printf("J'ai attendu la fin de mon fils\n"); > sleep(30); patch - apply a diff file to an original • Applique un patch produit par diff à un source • • • • % diff fork2.c fork3.c > fork.diff % patch fork2.c fork.diff % diff fork2.c fork3.c % find - search for files in a directory hierarchy • Critères de recherche multiples : • Nom de fichier • Expression régulière • Sensible à la casse ou non • Dates • Valeur absolue • Comparaison avec un autre fichier • Taille • Valeur minimale, maximale • Comparaison avec un autre fichier • Propriétaire, groupe, droits, inode • Très utile en administration système find - search for files in a directory hierarchy • • • • • • • • % find / nouser % find /home name '*.jpg' % find /var type p print % find / perm +4000 exec 'echo {} >> /var/secure' % find /tmp ctime +3 exec 'echo {} >> / var/dump' % find / newer /etc/lastdump % find / inum 634881 % find / empty cut - remove sections from each line of files •% head 3 /etc/passwd •root:x:0:0:root:/root:/bin/bash •daemon:x:1:1:daemon:/usr/sbin:/bin/sh •bin:x:2:2:bin:/bin:/bin/sh •% head 3 /etc/passwd | cut d: f1,57 •root:root:/root:/bin/bash •daemon:daemon:/usr/sbin:/bin/sh •bin:bin:/bin:/bin/sh •% head 3 /etc/passwd | cut c36,21 •ot:xt:/bin/bash •emon/usr/sbin:/bin/sh •n:x:bin/sh grep - print lines matching a pattern • Recherche les lignes matchant une expression régulière : . ^ $ \. * + ? \{n\} [] caractère quelconque caractère de début de ligne caractère de fin de ligne caractère point réplicateur (0 fois ou n fois) réplicateur non nul (au moins une fois) réplicateur d'option (au plus 1 fois) réplicateur n fois ensemble de caractères [0123456789] [09] [[:digit:]] ^ en début d'ensemble : exclusion de caractères [^xyz] [aw] grep - print lines matching a pattern • • • • • • • • Recherche des comptes sans passwd % cat /etc/passwd | grep '::' % cat /etc/passwd | grep '^.*::' % cat /etc/passwd | grep '^[^:]*::' Recherche des logins trop long % cat /etc/passwd | grep '^[^:]\ {9,\}:' Recherche des lignes nonvides % grep v '^$' sed - a Stream EDitor • • Comporte un langage de programmation rudimentaire Utilisé principalement pour le remplacement de regexp % sed 's/regexp/remplacement/' regexp est une expression régulière à la grep • Comportant des sousexpressions entre \( \) • Référencées dans remplacement par \1 \2 ... • % echo Abcdef | sed 's/\(.*\)\(b.*\)\ (e.*\)/\2\1\3/' • bcdAef • % sed 's/^\([^:]\)::/\1:x:/' • Autres actions possibles : • d • t • g delete translate plusieurs fois par ligne seq - prints a sequence of numbers • • • • • • • • • • % seq 1 5 1 2 3 4 5 % seq s' ' 1 5 1 2 3 4 5 % seq s' ' w 30 10 80 30 20 10 000 010 020 030 040 050 060 070 080 join - join lines of two files on a common field • Effectue une jointure sur des fichiers textes • % seq 1 10 100 > selection ; cat n /etc/passwd > liste % join selection liste 1 root:x:0:0:root:/root:/bin/bash 11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh 21 lazure:x:1000:1000:D. Lazure:/home_loc/lazure:/bin/bash • • • • uniq - remove duplicate lines from a sorted file • Suppression des lignes consécutives identiques : % cat toto | uniq u • Affichage d'un exemplaire de chaque ligne dupliquée % cat toto | uniq d • Affichage de toutes les lignes dupliquées % cat toto | unid D • Préfixe les lignes par le nombre d'occurrences % cat toto | uniq c • Autres possibilités : • Comparer un nombre de caractères spécifiques • Spécifier si la casse est sensible ou pas • Donner un séparateur particulier sort - sort lines of text files • • • Trie les ligne du flot standard Par défaut, par ordre lexicographique croissant Nombreuses options disponibles : • Numérique % cat /etc/passwd | cut d: f3 | sort n • Reverse • % sort r • Sur une partie de la ligne • % sort k 10,20 • Fusion (merge) de deux fichiers • % sort m toto titi gzip, gunzip - compress or expand files • • Compression / décompression sans destruction Niveau de compression : • Compromis Temps de compression vs. Espace disque • 1 à 9 (défaut=6) • Décompression par gunzip ou gzip d • % wc toto; i=1; while [ $i le 9 ]; do echo n niveau $i : ; gzip $i toto; wc c toto.gz; gzip d toto.gz; let i=$i+2; done 166 1109 891264 toto niveau 1 : 38524 toto.gz niveau 3 : 34345 toto.gz niveau 5 : 28596 toto.gz niveau 7 : 26479 toto.gz niveau 9 : 23662 toto.gz • • • • • • tar - The GNU version of the tar archiving utility •SYNOPSIS tar [] A catenate concatenate | c create | d diff compare | r append | t • list | u update | x extract get [ atimepreserve ] [ b, blocksize N ] [ B, • readfullblocks ] [ C, directory DIR ] [ checkpoint ] [ f, file [HOST • NAME:]F ] [ forcelocal ] [ F, infoscript F newvolumescript F ] [ G, • incremental ] [ g, listedincremental F ] [ h, dereference ] [ i, ignorezeros • ] [ j, bzip2 ] [ ignorefailedread ] [ k, keepoldfiles ] [ K, startingfile • F ] [ l, onefilesystem ] [ L, tapelength N ] [ m, modificationtime ] [ M, • multivolume ] [ N, afterdate DATE, newer DATE ] [ o, oldarchive, portabil • ity ] [ O, tostdout ] [ p, samepermissions, preservepermissions ] [ P, • absolutenames ] [ preserve ] [ R, recordnumber ] [ removefiles ] [ s, • sameorder, preserveorder ] [ sameowner ] [ numericowner ] [ S, sparse ] [ • T, filesfrom F ] [ null ] [ totals ] [ v, verbose ] [ V, label NAME ] • [ version ] [ w, interactive, confirmation ] [ W, verify ] [ exclude=FILE • ] [ X, excludefrom FILE ] [ Z, compress, uncompress ] [ z, gzip, • ungzip ] [ usecompressprogram PROG ] [ blockcompress ] [ rshcommand=CMD • ] [ [07][lmh] ] • filename1 [ filename2, ... filenameN ] • directory1 [ directory2, ...directoryN ] tar - The GNU version of the tar archiving utility • Crée une archive contenant un ou plusieurs fichiers % tar cvf Projet.tar *.c *.h Makefile README • Attention à ne pas oublier le nom du fichier créé ! % tar cvf *.c *.h Makefile README • Permet la compression en entrée (tarball): % tar cvfz Projet.tar.gz *.c *.h Makefile README % tar cvfz Projet.tgz *.c *.h Makefile README • Extraction : % tar xzf Projet.tgz • Liste des fichiers inclus : % tar tzf Projet.tgz tee - read from standard input and write to standard output and files • Permet de sauvegarder un flot entre deux commandes tubées : % seq 1 10 | tee tempo | sort r n • Sans écrasement (append) : % seq 1 10 | tee a tempo | sort r n tr - translate or delete characters • Simple traduction : % tr abcd ABCDEF % tr [:lower:] [:upper:] • Ajustement des longueurs des 2 arguments : % tr c $S1 $S2 % tr t $S1 $S2 • Suppression de caractères : % tr d $S1 • Suppression des répétitions (utile avec cut d ) % ls l | tr s ' ' | cut d' ' f5 • Possibilités de donner des ensembles prédéfinis ou de spécifier des constructeurs d'ensembles wc - print the number of bytes, words, and lines in files • Par défaut, un filtre (sinon affiche le nom de fichier à la suite) : % cat toto | wc 166 1109 891264 % wc toto 166 1109 891264 toto % cat toto | wc c 891264 % cat toto | wc w 1109 % cat toto | wc l 166 % cat toto | wc L 28031 Source • % man bash Shellscript • Fichier texte exécutable, interprété par un shell : % emacs toto & % head 1 toto #!/bin/sh u % chmod +x toto % toto Voici mon premier shell script % Variables • • • • • Toute variable est stockée sous forme de chaîne Peut contenir des séparateurs (liste de mots) Pas de déclaration nécessaire (interprétation) Affectation : MYVAR=”hello world !” Référencement : echo $MYVAR Variables positionnelles (paramètres) • Dans le programme principal : • arguments d'appel : % mesargs ABC 123 “x y z” $0=”mesargs” $1=”ABC” $2=”123” $3=”x y z” % • Dans une fonction : arguments de la fonction • Cf fonctions Variables spéciales • • IFS séparateurs $* liste des paramètres (avec les séparateurs) • “$*” équivaut à “$1c$2c...” avec c premier carac de $IFS • $@ liste des paramètres sans séparateurs • “$@” équivaut à “$1” “$2” ... • • • $# nombre de variables positionnelles (au sens de $*) $? code retour de la dernière commande exécutée $$ PID du shell Quelques variables du shell • • • • • • • USER SHELL PPID PWD RANDOM HOSTNAME IFS • • • • • • • PATH HOME PS1 PS2 PS3 PS4 ... Les différentes façons de quoter • “ ... “ • Paramètre unique • Contenant éventuellement des séparateurs • Expansion des variables • '...' • Paramètre unique • Contenant éventuellement des séparateurs • Sans expansion des variables • ` ... ` • Exécution d'une commande • Expansion par le résultat de la commande Séquences • ; séquence • Évaluée de gauche à droite • Résultat : la dernière évaluation • | tube • Séquence potentiellement évaluée en // • Redirection stdout (gauche) sur stdin (droite) • Résultat : la dernière évaluation • ( )concatène les flux de sorties • Le flux d'entrée est consommé par la 1ère commande Séquences conditionnelles • && séquence si VRAI • Évalue la commande droite si retour de gauche = 0 • Arrêt si échec de la commande gauche • || séquence si FAUX • Évalue la commande droite si retour gauche != 0 • Arrêt dès qu'une commande retourne 0 Redirections d'entrées/sorties • • En entrée d'une commande : En sortie d'une commande : • Forcer l'écrasement (noclobber) : • • • • En sortie avec concaténation : En sortie erreur d'une commande : Redirection de stderr vers stdout : Redirection des 2 sorties : < filename > filename >| filename >> filename 2> filename 2>&1 &> filename >& filename Shellscripts intéractifs : read • • Lecture d'une ligne en entrée standard Affectation dans une variable Inclusion d'un script : source ou . • Inclusion d'un script exécuté par le même processus • source filename • . filename Redirection enplace • Redirection du flux du shellscript vers l'entrée standard • cmd << MOT_CLEF ... MOT_CLEF • Le motclef est seul en début de ligne • Sans expansion du texte en place : quoter le motclef (par exemple : \MOT_CLEF) • Délimiteur non forcément en début de ligne (indentation) : • cmd << MOT_CLEF ... MOT_CLEF Opérations arithmétiques • Les variables sont des chaînes de caractères. • % x=12 % x=$x+1 % echo $x 12+1 • Au choix : • Un outil historique : expr • Une builtin commande : let • Une construction syntaxique : $(( )) Code de retour • Entier retourné par le processus • int main(); • Convention : 0 si succès • • Retour de la précédente commande : $? Commande test • évalue une expression booléenne • Renvoie le résultat • Équivalent syntaxique : • test expr [ expr ] Exemple de tests (% man test) • Arithmétiques : ne eq le lt ge gt • Comparaisons : = != chaines vides • Fichiers : type : liens durs ou symboliques, répertoires, pipe, socket... dates : accès, modification droits : lecture, écriture, xeq, setUID, stickybit taille, bloc device, character device Alternative : if / elif / else / fi if expr then instructions elif expr then instructions else instructions fi • if expr ; then instructions elif expr ; then instructions else instructions fi Boucles canoniques : while / until • while expr • until expr • do instructions • do instructions • • done done Retour : dernière instruction ou 0 si aucune • Itérateur de liste : for • • • for ID in list do instructions • for ID • do instructions • done done Sortie de boucle : break, continue • break [n] • continue [n] • builtin commands • sort ou resume de n boucles imbriquées • n>=1 • Si n > #boucles imbriquées • fin du script (retour 0) pour break • Resume de la dernière boucle pour continue Alternative multiple : case / esac • case ID in motif) instructions ;; • • • • esac Plusieurs entrées possibles : la première sélectionnée Motifs avec métacaractères (au sens du pathname) Code de retour 0 si aucun motif sélectionné Fonctions • function toto () • { instructions • } Paramètres formels sans déclaration : • • variables positionnelles ($1...) • Masquage des variables positionnelles d'appel du script • Variables locales précédées du qualifieur local Faire un menu facile : select • select name [ in word ] ; do list ; done • The list of words following in is expanded, generating a list of items. The set of expanded words is printed on the standard error, each preceded by a number. If the “in” word is omitted, the positional parameters are printed (see PARAMETERS below). The PS3 prompt is then displayed and a line read from the standard input. If the line consists of a number corresponding to one of the displayed words, then the value of name is set to that word. If the line is empty, the words and prompt are displayed again. If EOF is read, the command completes. Any other value read causes name to be set to null. The line read is saved in the variable REPLY. The list is executed after each selection until a break or return command is executed. The exit status of select is the exit status of the last command executed in list, or zero if no commands were executed. Exercices • Sauvegarde d'une liste de fichiers • Soit un répertoire source • Soit dans source un fichier MANIFEST contenant une liste (relative par rapport à source) de fichiers et répertoires. Écrire un script bash permettant de générer une archive source.tgz contenant les fichiers et répertoires listés dans MANIFEST • Remarque : la création de l'archive peut passer par la création d'un répertoire intermédiaire Exercices • Modifiez l’exercice précédent en tenant compte que chaque répertoire contient obligatoirement un fichier manifest. Ainsi, chaque répertoire contient sa propre liste de fichiers et de répertoire à sauvegarder. Exercices • Génération de vignettes • Soit un répertoire d'images rep. • On souhaite automatiser la génération de vignettes pour les images contenues dans rep • L'outil convert permet d'obtenir une vignette à partir d'une image jpeg en exécutant la ligne de commande suivante : • convert size 120x120 source.jpg resize 12x12 +profile " " vignette.jpg • Écrire un script permettant d'exécuter cette ligne pour chaque fichier *source.jpeg** du répertoire rep de sorte que les noms des vignettes aient la forme sourcethumb.jpeg Exercices • Publipostage • Soit une base de données stockée dans 4 fichiers texte nom.txt, adr.txt, cp.txt, ville.txt • Chacune des lignes de chacun des fichiers texte mises en correspondance représente les données d’une personne • Soit un fichier texte contenant entre autres choses les chaines suivantes : • __NOM__, __ADRESSE__, __CP__, __VILLE__ • Pour chaque contact : extraire son nom, son adresse, son code postal, sa ville. Créer un publipostage de telle sorte que dans les différentes copies du fichier source, les chaînes __X__ aient été remplacées par leur valeurs correspondantes à une ligne de la base de données. Exercices • Surveillance d'URLs • Soit un fichier urls.list contenant une liste d'URLs à surveiller • La commande md5sum permet d'obtenir une 'empreinte' d'un fichier donné • La commande wget permet de télécharger une URL • En utilisant ces deux commandes, écrire un script en bash permettant d'afficher la listes des URLS contenues dans urls.list qui ont été modifiées (ie. dont l'empreinte de la version téléchargée est différente de la dernière empreinte enregistrée). • On s'arrangera pour maintenir à jour le fichier urls.list avec les nouvelles empreintes. Notion de processus • • Un processus est un programme en cours d'exécution Il est caractérisé par : • Un numéro unique : le PID (Process Identifier) • Un contexte propre • Un espace d'adressage • Une entrée dans la table des processus : • Un état • Une priorité • Deux modes d'exécution possibles : • Mode utilisateur • Mode noyau (lors d'appels système) PID et PPID • PID: Process Identifier • Numéro (entier positif) unique • attribué définitivement • PPID: Parent Process Identifier • PID du processus père • Tout processus a un père • Par défaut, c'est le processus qui l'a créé • Init • Processus d'initialisation du système • PID=1 Arborescence des processus init (PID=1) Création Création Démons Démons Démons Démons getty klogd Mutation login syslogd inetd Mutation atd shell crond ... myp2p Création soffice Création pstree Création et détachement Création et mutation • Création d'un processus par clonage • À partir d'init • Nouveau PID attribué par le système • Arborescence • Mutation : • Chargement d'un nouvel exécutable • PID conservé (espace mémoire et contexte aussi) • Détacher un processus de son père (shell) : • Le processus est adopté par init % nohup <commande args> États possibles d'un processus Actif utilisateur Mode utilisateur Mode noyau Nouveau Fork() Prêt Scheduler Actif noyau Signal Suspendu Fin Zombi E/S Endormi Gestionnaire VM Prêt swappé Endormi swappé Fin d'un processus • Un processus peut terminer : • Quand il a fini son exécution • Quand il reçoit un signal • De fin (INT...) • D'erreur (FPE...) • La fin d'un processus est signalée à son père • Libération des ressources • Envoi d'un signal SIGCHLD au père • Passage à l'état zombie (defunct) • Disparition totale à l'accusé de réception du père • Propagation des signaux d'arrêts aux processus fils Commandes Unix • Liste des processus courants : % ps [options] • Même commande, réactualisée à intervalles réguliers % top • Arbre des processus : % pstree • Envoi d'un signal : % kill SIG PID Envoi de signaux • Différents signaux dont les plus utilisés (man kill): • • • • HUP ABRT KILL 1 6 9 INT FPE STOP 2 8 15 Permettent de • changer l'état d'un processus (STOP, CONT) • Mettre fin à un processus (INT, ABRT, KILL) • Réinitialiser un processus (HUP) • Récupérer des erreurs graves (FPE...) • Communiquer les fins de processus (HLD) • ... Cas particuliers du shell • Création d'un processus pour chaque commande simple • Par défaut : en foreground • Attend la fin de l'exécution pour relire une commande % commande arguments % • Lancement en background (tache de fond) : % commande arguments & [1] commande arguments % • PID : $$ PPID: $PPID Gestion des jobs (bash) • Liste des jobs (applications lancées par le shell) : % jobs [1] Running simpress Processus.sxi & [2] Running myp2p % • Relancement en foreground ou en background : % fg %2 myp2p ^Z [2] Stopped myp2P % bg [2] myp2p & % Processus et librairie standard #include <unistd.h> • pid_t getpid(void); Retourne le PID du processus courant pid_t dépend de l'implémentation (unsigned int) • pid_t getppid(void); Retourne le PPID du processus appelant • • • • • • char * getcwd(char *buf, size_t taille); Affecte buf au répertoire de travail du processus appelant UID / real UID #include <unistd.h> • uid_t getuid(void); retourne le UID du processus : • • • celui qui a lancé la commande uid_t geteuid(void); retourne l'UID effectif du processus : • • • celui avec les droits duquel s'exécute le processus • Consécutif à un setUID bit positionné Groupe d'un processus • • #include <unistd.h> int setpgid(pid_t pid, pid_t pgid); pid_t getpgid(pid_t pid); int setpgrp(void); pid_t getpgrp(void); • Par défaut, le groupe d'un processus est le groupe de celui qui a lancé le processus. • Utilisés pour définir des ensembles de processus afin de • contrôler un groupe entier grâce à des signaux (exemple : les shell comme CSH) Envoyer un signal int raise(int signal); Envoie le signal signal au processus courant void abort(void); équivalent à raise(ABRT); • int kill(pid_t pid, int sig); • • • • • • • Si pid > 0 : Envoie le signal sig à pid Si pid == 0 : Envoie le signal sig au groupe courant Si pid == 1 : Envoie le signal sig à tous les processus (sauf init) Si pid < 1 : Envoie le signal à tous les processus du groupe de pid Quelques outils orientés signaux • unsigned int alarm(unsigned int seconds); • Un signal ALARM sera envoyé au processus appelant dans seconds secondes. • Retourne l'ancien décompte (d'un précédent appel) • int pause(void); • Bloque le processus courant en attendant le retour d'un handler déclenché à la réception d'un signal catché. Redirection (capture) des signaux • • • • #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); ou • void (*signal( int sig, void (* handler) (int) ))(int); • Redirige le signal sig sur le nouveau handler • Des signaux non redirigeables : KILL STOP • Retourne l'ancien handler (pour rétablissement) Exécution d'une redirection • Prochain signal sig au processus : • (SysV, pas forcément Linux) rétablissement du comportement par défaut (nécessite de réarmer) • Appel de (*handler)(sig) • Au retour de (*handler), reprise au point d'appel • Handler possibles : • • • • • Fonction C SIG_DFL (implementation dependant) SIG_IGN Signaux non redirigeables : KILL et STOP Signaux sont pendants (pending) en attente de prise en compte (par exemple, si le processus est endormi) Mutation : execve() • int execve (const char *filename, char *const argv [], char *const envp[]); • Charge et lance l'exécution de filename : • Exécutable ou Shell script (avec directive #! ) • Hérite du PID et des fichiers ouverts • Ne retourne pas • argv[] représente les arguments • Tableau de chaînes de caractères • Fini par NULL • envp[] représente l'environnement • Chaque élément de la forme clef=val (PATH=...) • Fini par NULL Mutation : autres fonctions • #include <unistd.h> • extern char **environ; • int execl( const char *path, const char *arg, ...); • int execlp( const char *file, const char *arg, ...); • int execle( const char *path, const char *arg , ..., char * const envp[]); • int execv( const char *path, char *const argv[]); • int execvp( const char *file, char *const argv[]); • Frontales à execve() • cf man execl Création de processus : fork() pid_t fork(void) ; Clonage du processus appelant : • • • Allocation d'une entrée dans la table des processus • Allocation d'un nouveau PID • Duplication de l'espace mémoire du processus : • • • • • Pile d'appels de fonction (STACK) Variables globales (DATAS) Tas des variables dynamiques (HEAP) Code exécutable Retour : • Processus fils : 0 • Processus père : PID du fils Exemple de fork() • • main(){ pid_t pid; pid=fork(); if (pid==0){ printf(“Je suis %d, fils de %d\n”, getpid(),getppid()); } else { printf(“Je suis %d, père de %d\n”, getpid(),pid); } } Optimisation du fork() • Rappels (?) sur la gestion de la mémoire virtuelle : • L'espace mémoire est divisé en pages • Sur intel x86, chaque page fait 4Ko • Les montées et descentes de pages entre RAM et DD se font par pages entières • Les << réservations >> de pages aussi • Optimisation courante : Copy On Write • Les copies de page ne sont effectuées qu'aux premières modifications • Évite un surcoût de copies inutiles • Partage des pages du code objet de l'exécutable Création pour mutation : vfork() • • • Même principe que fork(), mais à usage réservé pour l'appel à une mutation Evite les copies de l'espace mémoire Comportement garanti uniquement • pour l'appel à une des fonctions de la famille des execve() • Pas de retour de la fonction appelante (pas de copie de la pile d'appels de fonction) • Bloque le processus père avant l'appel à execve() (pseudo)Parallélisme • Les deux tâches issues d'un fork() s'exécutent en parallèle • Même priorité • Sur une machine multiprocesseurs : • Parallélisme : chaque tâche est associée à un processeur • Partage des pages mémoires • Problèmes de synchronisation de processus... • Sur une machine monoprocesseur : • Pseudoparallélisme : ordonnancement des processus • Timesharing • Problèmes de synchronisation et de partage de données Synchronisation avec wait() #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); • • • Appel bloquant tant qu'aucun processus fils n'a fini Information sur la fin du fils affectée dans *status (si !=NULL) Macros disponibles pour tester cette information • WIFEXITED(status) vrai si fin normale du fils • WEXITSTATUS(status) code de retour (8bits) si WIFEXITED • WIFSIGNALED(status) vrai si fin sur un signal non trappé • WTERMSIG(status) numéro du signal de fin • WIFSTOPPED(status) vrai si le fils est stoppé • WSTOPSIG(status) numéro du signal Synchronisation avec waitpid() pid_t waitpid(pid_t pid, int *status, int options); • • • • • Si pid < 1 : attendre un fils du groupe pid Si pid == 1 : équivalent à wait() Si pid == 0 : attendre un fils du groupe courant Si pid > 0 : attendre la fin du fils de PID pid Options possibles : • WNOHANG non bloquant • WUNTRACED retour aussi pour un fils stoppé Communications par tube (pipe) • • • File FIFO unidirectionnelle #include <unistd.h> int pipe(int filedes[2]); Retourne un couple de descripteurs : • filedes[0] pour les lectures • filedes[1] pour les écritures • Souvent associé à un fork() : • Création d'un tube • Clonage : duplication des descripteurs et partage du tube • Nécessite la fermeture du canal << inverse >> Exemple de tube • Deux processus vont échanger une chaîne de caractères. • Création d'un tube • Clonage du processus principal • Père : écriture de la longueur puis de la chaine • Fils : lecture de la longueur puis de la chaine • À faire … Appels systèmes : read() write() • • Problème : pas de bibliothèque standard pour les tubes Solutions : • Définition et développement d'une bibliothèque • Utilisation des appels systèmes d'entrée/sortie • Entrées/sorties par appels systèmes : • Pas de buffers utilisateurs, moins d'efficacité • Plus que des appels systèmes • Il existe quand même des buffers systèmes • TP facultatif : • Mesurer la différence sur une application importante en IO Appels systèmes : read() write() • #include <unistd.h> • int open(const char *pathname, int flags, mode_t mode); • ssize_t read(int fd, void *buf, size_t count); • ssize_t write(int fd, const void *buf, size_t count); • int close(int fd); • Descripteur entier : numéro dans la table des descripteurs (propre à l'espace du processus appelant) • • • • • 0 : stdin 1 : stdout 2 : stderr Ouverture d'un fichier : premier descripteur libre Fermeture d'un fichier : libération du descripteur Exercice • Écrivez un programme C qui génère les n premiers nombres entiers (n est un paramètre de la ligne de commande), les « injecte » dans un tube ou un second processus affiche uniquement les nombres pairs. Duplication de descripteur : dup() • int dup(int oldfd); • Duplique oldfd sur le premier descripteur libre • Les deux descripteurs partagent la même entrée : • Un accès sur l'un fait avancer le pointeur de l'autre • int dup2(int oldfd, int newfd); • Duplique oldfd sur newfd Exercice: réécrire “cat” qui consomme l’entrée standard ou s’il existe, le fichier dont le nom est passé en paramètre