====== Initiation Linux ====== ===== L'identification d'un utilisateur ===== Un utilisateur sous LINUX est reconnu du système par son User-Id, son numéro d'utilisateur. Chaque utilisateur appartient à un ou plusieurs groupes. Son groupe d'appartenance est repéré par le //Group-Id//. user@machine: id <- IDentité utilisateur uid=223(dupont) gid=212(cicrp) groups=1(staff) A un instant donné un utilisateur n'appartient qu'à un seul groupe. C'est son groupe "actif". Tous les fichiers qui dès lors sont créés, possèdent comme groupe propriétaire le groupe courant à l'instant de la création. Un utilisateur appartenant à plusieurs groupes peut à tout instant changer son groupe courant, ce qui modifie alors le groupe propriétaire des fichiers créés par la suite. user@machine: newgrp staff <- Changement de groupe courant user@machine: id uid=223(dupont) gid=1(staff) groups=1(staff) user@machine: ===== La Hiérarchie ==== ==== Les répertoires de travail ==== Lorsque vous êtes connecté sous LINUX, vous vous retrouvez chez vous à savoir votre //home directory// qui a été assigné par l'administrateur système. Par exemple /home/cicrp/dupont Tous les fichiers ou répertoires que vous allez créer, le seront sous votre home directory. 1) La racine (root) est représentée par le symbole "/". C'est sous la racine que se situent tous les répertoires de LINUX. 2) Chaque sous-répertoire contient deux éléments appelés "." et".." qui assurent le lien entre les différentes branches de l'arborescence. Le point(.) désigne le répertoire courant, le ".." est un pseudonyme pour désigner le répertoire parent (parent directory) du répertoire courant. 3) Le répertoire de travail courant, le //working directory//, est le répertoire sous lequel vous êtes; vous pouvez vous déplacer dans la hiérarchie et il peut changer, il est représenté par le symbole "." ==== Les chemins relatifs et absolus ==== Lorsque vous utilisez une commande qui agit sur un fichier par exemple, vous devez spécifier le chemin d'accès à ce fichier s'il n'est pas dans votre répertoire de travail; ce chemin d'accès est le //path// ou //pathname//; il consiste en une série de composants : des noms de répertoires, séparés par le symbole "/" === chemin absolu === La référence absolue d'un objet (fichier ou répertoire) se fait par la liste des répertoires traversés pour atteindre cet objet, en commençant par la racine. Par exemple /home/cicrp/dupont/toto référence le fichier toto qui est sous le répertoire dupont lui même sous cicrp lui même sous home qui lui est sous la racine ce qui est indiqué par le premier "/". === chemin relatif === La référence relative d'un objet (fichier ou répertoire) se fait par la liste des répertoires traversés pour atteindre cet objet, relativement au répertoire courant de travail (working directory). Par exemple essai/fic1.p indique qu'à partir du répertoire de travail, on doit trouver un sous-répertoire essai contenant un fichier fic1.p ===== Les commandes courantes de manipulation ===== ==== Commandes de manipulation de fichiers et de répertoires ==== Quelques commandes de manipulation des fichiers et des répertoires. | ||Commande pour fichier||Commande pour répertoire|| |Afficher le contenu||cat (ou more)||ls|| |Copier||cp||cp -r|| |Changer de nom||mv||mv|| |Se déplacer dans|| ||cd|| |Supprimer||rm||rmdir ou rm -r|| |Créer|| ||mkdir|| |Nom rép. courant|| ||pwd|| |Déplacer||mv||mv|| La syntaxe générale d'une commande sous LINUX est la suivante : **cmd -options arg1 arg2 arg...** où * **cmd** est la commande * **-options** les options de cette commande * **arg1 arg2 .....** Les arguments de la commande par exemple **ls -ail rep1** ==== Exemples ==== Pour savoir dans quelle répertoire on se trouve, utiliser la commande pwd : user@machine: pwd <- répertoire courant /home/cicrp/dupont Pour créer un répertoire, utiliser mkdir user@machine: mkdir rep1 <- création rep1 user@machine: cd rep1 <- déplacement rep1 user@machine: ls <- liste , mais rep1 vide user@machine: ls -ail <- list All Inodes Long total 8 89131 drwx------ 2 dupont cicrp 512 Dec 11 16:38 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. Lorsque l'on fait une erreur dans la syntaxe de la commande alors linux affiche le "mode d'emploi" de la commande : user@machine: cp ../t* <- erreur de syntaxe Usage: cp [-i] [-p] [-] SourceFile... {TargetDirectory|File} cp [-i] [-p] [-r] [-] SourceDirectory... TargetDirectory user@machine: cp ../t* . <- copie tous les fichiers du répertoiree précédent (..) commençant par t dans le répertoire courant (.) La commande ls permet de lister le contenu d'un répertoire : user@machine: ls terminfo.doc tessai1.p trace tessai titi trtr user@machine: ls -ail total 104 89131 drwx------ 2 dupont cicrp 512 Dec 11 16:39 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 89132 -rw------- 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rw------- 1 dupont cicrp 130 Dec 11 16:39 tessai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 tessai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 titi 89136 -rw------- 1 dupont cicrp 27505 Dec 11 16:39 trace 89137 -rws------ 1 dupont cicrp 0 Dec 11 16:39 trtr ^ | +---------- dans cette colonne "d" = directory "-" = fichier La commande cp permet de faire une copie d'un fichier ou d'un répertoire. L'option -r permet de faire une copie d'un répertoire et de son contenu. user@machine: cp -r ../info info <- Copie Récursive du rep info user@machine: ls -ail total 108 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:40 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90114 drwx------ 3 dupont cicrp 512 Dec 11 16:40 info 89132 -rw------- 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rw------- 1 dupont cicrp 130 Dec 11 16:39 tessai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 tessai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 titi 89136 -rw------- 1 dupont cicrp 27505 Dec 11 16:39 trace 89137 -rws------ 1 dupont cicrp 0 Dec 11 16:39 trtr La commande rm (remove) permet de supprimer un fichier ou un répertoire (avec l'option -r) : user@machine: rm trtr <- destruction fichier trtr user@machine: del trace <- destruction avec confirmation del: Remove trace? y yes user@machine: ls info notes user@machine: ls -ail info total 12 90114 drwx------ 3 dupont cicrp 512 Dec 11 16:40 . 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:40 .. 90115 drwxr-x--- 3 dupont cicrp 512 Dec 11 16:40 notes user@machine: cd info/notes <- descente dans sous-rep notes du rep info user@machine: ls user@machine: ls -ail total 12 90115 drwxr-x--- 3 dupont cicrp 512 Dec 11 16:40 . 90114 drwx------ 3 dupont cicrp 512 Dec 11 16:40 .. 90116 drwxr----- 2 dupont cicrp 512 Dec 11 16:40 .lost user@machine: cd ../.. <- remonte de 2 niveaux user@machine: pwd /home/cicrp/dupont/rep1 user@machine: cd info user@machine: pwd /home/cicrp/dupont/rep1/info user@machine: ls -ail total 12 90114 drwx------ 3 dupont cicrp 512 Dec 11 16:40 . 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:40 .. 90115 drwxr-x--- 3 dupont cicrp 512 Dec 11 16:40 notes user@machine: cd .. user@machine: ls info terminfo.doc tessai tessai1.p titi user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:40 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90114 drwx------ 3 dupont cicrp 512 Dec 11 16:40 info 89132 -rw------- 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rw------- 1 dupont cicrp 130 Dec 11 16:39 tessai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 tessai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 titi user@machine: mv titi tyty <- changement de nom user@machine: ls t* terminfo.doc tessai tessai1.p tyty user@machine: cp -r info info.new <- copie de répertoire, copie récursive user@machine: ls -ail in* info: total 12 90114 drwx------ 3 dupont cicrp 512 Dec 11 16:40 . 89131 drwx------ 4 dupont cicrp 512 Dec 11 16:42 .. 90115 drwxr-x--- 3 dupont cicrp 512 Dec 11 16:40 notes info.new: total 12 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 . 89131 drwx------ 4 dupont cicrp 512 Dec 11 16:42 .. 90135 drwxr-x--- 3 dupont cicrp 512 Dec 11 16:42 notes user@machine: rmdir info <- destruction répertoire si vide rmdir: 0653-611 Directory info is not empty. user@machine: rm -r info <- destruction récursive user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:42 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.new 89132 -rw------- 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rw------- 1 dupont cicrp 130 Dec 11 16:39 tessai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 tessai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty user@machine: mv info.new info.nouveau user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:43 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.nouveau 89132 -rw------- 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rw------- 1 dupont cicrp 130 Dec 11 16:39 tessai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 tessai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty user@machine: cat tessai1.p <- affiche contenu fichier program tessai (input,output); begin writeln ('coucou'); end. La commande lshw permet de lister tous les éléments matériels de l'ordinateur (cpu, mémoire, cartes etc...) : user@machine: lshw <- affiche la liste du matériel user-virtualbox description: Computer width: 64 bits capabilities: vsyscall32 *-core description: Motherboard physical id: 0 *-memory description: System memory physical id: 0 size: 4GiB *-cpu product: Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz vendor: Intel Corp. physical id: 1 bus info: cpu@0 width: 64 bits capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp x86-64 constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase avx2 invpcid md_clear flush_l1d *-pci description: Host bridge product: 440FX - 82441FX PMC [Natoma] vendor: Intel Corporation physical id: 100 bus info: pci@0000:00:00.0 version: 02 width: 32 bits clock: 33MHz *-isa description: ISA bridge product: 82371SB PIIX3 ISA [Natoma/Triton II] vendor: Intel Corporation physical id: 1 bus info: pci@0000:00:01.0 version: 00 width: 32 bits clock: 33MHz capabilities: isa bus_master configuration: latency=0 *-ide description: IDE interface product: 82371AB/EB/MB PIIX4 IDE vendor: Intel Corporation physical id: 1.1 bus info: pci@0000:00:01.1 logical name: scsi1 version: 01 width: 32 bits clock: 33MHz capabilities: ide isa_compat_mode pci_native_mode bus_master emulated configuration: driver=ata_piix latency=64 resources: irq:0 ioport:1f0(size=8) ioport:3f6 ioport:170(size=8) ioport:376 ioport:d000(size=16) *-cdrom description: DVD reader product: CD-ROM vendor: VBOX physical id: 0.0.0 bus info: scsi@1:0.0.0 logical name: /dev/cdrom logical name: /dev/dvd logical name: /dev/sr0 version: 1.0 capabilities: removable audio dvd configuration: ansiversion=5 status=nodisc *-display description: VGA compatible controller product: SVGA II Adapter vendor: VMware physical id: 2 bus info: pci@0000:00:02.0 version: 00 width: 32 bits clock: 33MHz capabilities: vga_controller bus_master rom configuration: driver=vmwgfx latency=64 resources: irq:18 ioport:d010(size=16) memory:e0000000-e0ffffff memory:f0000000-f01fffff memory:c0000-dffff *-network description: Ethernet interface product: 82540EM Gigabit Ethernet Controller vendor: Intel Corporation physical id: 3 bus info: pci@0000:00:03.0 logical name: enp0s3 version: 02 serial: 08:00:27:2e:c0:b0 size: 1Gbit/s capacity: 1Gbit/s width: 32 bits clock: 66MHz capabilities: bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.21-k8-NAPI duplex=full ip=10.0.2.15 latency=64 link=yes mingnt=255 multicast=yes port=twisted pair speed=1Gbit/s resources: irq:19 memory:f0200000-f021ffff ioport:d020(size=8) *-generic description: System peripheral product: VirtualBox Guest Service vendor: InnoTek Systemberatung GmbH physical id: 4 bus info: pci@0000:00:04.0 version: 00 width: 32 bits clock: 33MHz configuration: driver=vboxguest latency=0 resources: irq:20 ioport:d040(size=32) memory:f0400000-f07fffff memory:f0800000-f0803fff *-multimedia description: Multimedia audio controller product: 82801AA AC'97 Audio Controller vendor: Intel Corporation physical id: 5 bus info: pci@0000:00:05.0 version: 01 width: 32 bits clock: 33MHz capabilities: bus_master configuration: driver=snd_intel8x0 latency=64 resources: irq:21 ioport:d100(size=256) ioport:d200(size=64) *-usb description: USB controller product: KeyLargo/Intrepid USB vendor: Apple Inc. physical id: 6 bus info: pci@0000:00:06.0 version: 00 width: 32 bits clock: 33MHz capabilities: ohci bus_master cap_list configuration: driver=ohci-pci latency=64 resources: irq:22 memory:f0804000-f0804fff *-bridge description: Bridge product: 82371AB/EB/MB PIIX4 ACPI vendor: Intel Corporation physical id: 7 bus info: pci@0000:00:07.0 version: 08 width: 32 bits clock: 33MHz capabilities: bridge configuration: driver=piix4_smbus latency=0 resources: irq:9 *-sata description: SATA controller product: 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] vendor: Intel Corporation physical id: d bus info: pci@0000:00:0d.0 version: 02 width: 32 bits clock: 33MHz capabilities: sata ahci_1.0 bus_master cap_list configuration: driver=ahci latency=64 resources: irq:21 ioport:d240(size=8) ioport:d248(size=4) ioport:d250(size=8) ioport:d258(size=4) ioport:d260(size=16) memory:f0806000-f0807fff *-pnp00:00 product: PnP device PNP0303 physical id: 2 capabilities: pnp configuration: driver=i8042 kbd *-pnp00:01 product: PnP device PNP0f03 physical id: 3 capabilities: pnp configuration: driver=i8042 aux Si le fichier est long et qu’on veut ajouter des pauses lors du défilement il faut ajouter « | more » à la commande : user@machine: lshw | more Autre commande utile : lspci. user@machine: lspci <- affiche la liste du matériel sur slot PCI 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:02.0 VGA compatible controller: VMware SVGA II Adapter 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) 00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service 00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01) 00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02) Enfin lscpu permet de récupérer les infos sur le processeur : user@machine: lscpu <- affiche les infos sur le(s) processeur(s) Architecture : x86_64 Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit Boutisme : Little Endian Address sizes: 39 bits physical, 48 bits virtual Processeur(s) : 1 Liste de processeur(s) en ligne : 0 Thread(s) par cœur : 1 Cœur(s) par socket : 1 Socket(s) : 1 Nœud(s) NUMA : 1 Identifiant constructeur : GenuineIntel Famille de processeur : 6 Modèle : 60 Nom de modèle : Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz Révision : 3 Vitesse du processeur en MHz : 2494.236 BogoMIPS : 4988.47 Constructeur d'hyperviseur : KVM Type de virtualisation : complet Cache L1d : 32 KiB Cache L1i : 32 KiB Cache L2 : 256 KiB Cache L3 : 6 MiB Nœud NUMA 0 de processeur(s) : 0 Vulnerability Itlb multihit: KVM: Vulnerable Vulnerability L1tf: Mitigation; PTE Inversion Vulnerability Mds: Mitigation; Clear CPU buffers; SMT Host state unknown Vulnerability Meltdown: Mitigation; PTI Vulnerability Spec store bypass: Vulnerable Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Full generic retpoline, STIBP disabled, RSB filling Vulnerability Tsx async abort: Not affected Drapaux : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase avx2 invpcid md_clear flush_l1d Pour voir l'historique des commandes passées on peut utiliser cat .bash_history depuis le répertoire de l'utilisateur (/home/user). Plus simplement on peut utiliser la commande history qui donne le même résultat. user@machine: cat .bash_history <- affiche le contenu du fichier caché .bash_history ftp 127.0.0.1 ifconfig sudo apt-get install proftpd gadmin-proftpd ftp 10.0.2.15 D’autres commandes ls* sont disponibles : lsmem (pour lister les informations sur la mémoire) et lsusb (pour lister les périphériques connectés par usb). ===== Les fichiers ===== ==== Les principaux dossiers de LINUX ==== A côté de la hiérarchie utilisateur (/home), LINUX est constitué du plusieurs répertoires importants sous lesquels existe toute une hiérarchie. |**Répertoire**||**Signification**|| ||**Contenu**|| | ||**Français**||**Anglais**|| || |/||Racine du système|| ||hiérarchie primaire|| |/bin||binaires, utilitaires binaires||binaries, binary utilities (binutils)||Exécutables des commandes essentielles disponibles pour tous les utilisateurs (ex: cd, cat, ls…)|| |/boot||initialisation||bootstrap||Fichiers statiques du chargeur d’amorçage (noyaux, images ramdisk, fichiers de configuration du chargeur d'amorçage…)|| |/dev||périphérique||device||Fichiers spéciaux des périphériques|| |/etc||configuration éditable en mode texte||editing text config||Fichiers de configuration au format textuel de plusieurs programmes et services du système|| |/home||maison||home directory||Répertoires personnels des utilisateurs|| |/lib||bibliothèques||librairies||Bibliothèques partagées essentielles et modules du noyau|| |/media|| || ||Contient les points de montages pour les médias amovibles|| |/mnt||montage||mount||Point de montage pour monter temporairement un système de fichiers|| |/opt||optionnel||optional||Emplacement pour des applications installées hors gestionnaire de paquets (logiciels optionnels)|| |/proc||processus||processes||Répertoire virtuel pour les informations système (états du noyau et des processus système)|| |/root||racine||root||Répertoire personnel du super-utilisateur|| |/run||exécution système||runtime system||Informations relatives au système depuis son dernier démarrage (ex : utilisateurs actifs, services en cours d'exécution, etc.)|| |/sbin||binaires système||super binaries, super binary utilities (super binutils)||Exécutables système essentiels|| |/srv||services||services||Données pour les services du système|| |/tmp||temporaire||temporary||Fichiers temporaires des applications|| |/usr||ressources système Linux||Linux system resources||Hiérarchie secondaire, pour des données en lecture seule par les utilisateurs. Ce répertoire contient la vaste majorité des applications usuelles des utilisateurs et leurs fichiers|< |/usr/bin|| || ||Exécutables des programmes additionnels disponibles pour tous les utilisateurs (ex : le gestionnaire de fichiers, le lecteur de musique, le navigateur Web…)|| |/usr/lib|| || ||Bibliothèques partagées par les applications additionnelles de /usr/bin et /usr/sbin|| |/usr/local|| || ||Hiérarchie tertiaire. Emplacement où les utilisateurs doivent installer les applications qu'ils compilent.|| |/usr/share|| || ||Fichiers non reliés à l'architecture partagés par les applications de /usr/bin et /usr/sbin (ex : les icônes, les thèmes, la documentation…)|| |/var||variable||variable||Données variables et diverses. On y trouve deux sous-répertoires importants : www qui sert de racine au serveur web apache et log qui contient tous les logs du système|| ==== Les fichiers et les permissions ==== A chaque fichier est associé un ensemble d'attributs fournissant des informations sur sa taille, sa date de création mais spécifiant également qui est autorisé à utiliser ce fichier et de quelle manière. Un fichier possède un propriétaire qui est en général le créateur du fichier. Il possède également un groupe propriétaire qui est le groupe du créateur lors de la création. Parmi les attributs on trouve donc des informations sur l'objet, et une liste d'accès se rapportant à l'utilisateur, son groupe , et les autres groupes. Vous pouvez changer les protections des fichiers dont vous êtes propriétaires par la commande **chmod**. Ces permissions peuvent être visualisées par la commande **ls -l** Vous avez différents champs: drwxr-xr-x 1 dupont cicrp 512 Dec 31 1989 rep1 -rwxr-xr-x 1 dupont cicrp 423 Oct 27 1989 toto Le **d** indique un répertoire (directory) , le **-** indique un fichier Le **r** indique read pour lecture Le **w** indique write pour écriture Le **x** indique execute pour exécution Le **-** indique l'absence du droit read, write ou execute Hormis le premier caractère (**d** ou **-**) , les permissions sont présentées sous forme de trois groupes **rwx** , avec à chaque fois la présence ou l'absence du droit correspondant. Le premier groupe de **rwx** indique les permissions que possède le propriétaire sur son fichier : droits du **u(ser)** Le deuxième groupe indique les permissions pour les utilisateurs membres du groupe propriétaire du fichier: droit du **g(roup)** Le troisième groupe indique les permissions pour les autres utilisateurs: droit des **o(ther)** ==== Modification des attributs des fichiers ==== === Les permissions de base, la commande chmod === Les droits d'accès ou permissions positionnés sur des fichiers peuvent être visualisées par la commande **ls -l**. Ces droits peuvent être changés au moyen de la commande **chmod** La syntaxe est : **chmod mode fichier** **mode** est constitué de trois entités : * à qui (le propriétaire, le groupe propriétaire, les autres) * l'opérateur (ajout, retrait, affectation) * les permissions (lecture, écriture, exécution) à qui * **u** <- utilisateur * **g** <- groupe * **o** <- autres groupes * **a** <- tous (u+g+o) opérateur * **-** <- Retire une permission de celles existantes * **+** <- Ajoute une permission à celles existantes * **=** <- Assigne une permission particulière Permissions * **r** <- Lecture * **w** <- Ecriture * **x** <- Exécution === exemples === Le premier exemple enlève la permission écriture pour les autres (pour other)\\ **chmod o-w fichier** Le deuxième exemple rend le fichier exécutable\\ **chmod +x fichier** <- Si "**u**" "**g**" "**o**" non précisé alors en fonction des LINUX le changement est soit pour "**u**" soit pour "**a**" user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:43 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.nouveau 89132 -rw------- 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rwx------ 1 dupont cicrp 130 Dec 11 16:39 essai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 essai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty user@machine: chmod u+x terminfo.doc <- ajout eXécution à User pour terminfo.doc user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:43 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.nouveau 89132 -rwx------ 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rwx------ 1 dupont cicrp 130 Dec 11 16:39 essai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 essai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty user@machine: chmod <- erreur de syntaxe Usage: chmod [-R] [-f] {u|g|o|a ...} {+|-|=} {r|w|x|s|t ...} File ... chmod [-R] [-f] OctalNumber File ... Changes the permission codes for files or directories. user@machine: chmod g+rwx essai user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:43 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.nouveau 89132 -rwx------ 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rwxrwx--- 1 dupont cicrp 130 Dec 11 16:39 essai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 essai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty Il existe une deuxième syntaxe possible pour la commande **chmod**. Dans cette deuxième syntaxe le mode (droits d'accès) est spécifié directement par un nombre octal de trois chiffres. par exemple 740 : * Le 1er chiffre (7) donne les accès pour User * Le 2eme chiffre (4) donne les accès pour Group * Le 3eme chiffre (0) donne les accès pour Other Chaque chiffre octal représente une valeur binaire sur trois bits. * Le 1er bit indique le droit pour Read (1 lecture autorisée, 0 non autorisée) * Le 2e bit indique le droit pour Write (1 écriture autorisée, 0 non autorisée) * Le 3e bit indique le droit pour eXecute (1 exécution autorisée, 0 non autorisée) Ce qui donne: octal r w x droits 7 1 1 1 rwx 6 1 1 0 rw- 5 1 0 1 r-x 4 1 0 0 r-- 3 0 1 1 -wx 2 0 1 0 -w- 1 0 0 1 --x 0 0 0 0 --- La commande user@machine: chmod 740 essai donne les accès suivants sur le fichier essai : * 7 --> rwx pour User * 4 --> r-- pour Group * 0 --> --- pour Other === le groupe propriétaire, la commande chgrp === Cette commande permet de changer le groupe propriétaire (change group) du fichier. La syntaxe est la suivante: **chgrp newgroup fichier** user@machine: chgrp staff essai <- remplace le groupe propriétaire du fichier essai par le groupe staff user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:43 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.nouveau 89132 -rwx------ 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rwxrwx--- 1 dupont staff 130 Dec 11 16:39 essai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 essai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty Dans cet exemple "cicrp" était le groupe propriétaire et les utilisateurs de ce groupe avaient alors les droits **rwx** sur le fichier "essai". La commande de changement de groupe propriétaire provoque pour les utilisateurs du groupe "cicrp" leur passage dans le champs **other**. Ils ne possèdent maintenant plus aucun droit sur le fichier "essai" ! === le propriétaire, la commande chown === Cette commande permet de changer le propriétaire (change owner) du fichier. La syntaxe est la suivante: **chown newowner fichier** user@machine: chown durand essai user@machine: ls -ail total 80 89131 drwx------ 3 dupont cicrp 512 Dec 11 16:43 . 17422 drwxr-x--- 10 dupont staff 1536 Dec 11 16:38 .. 90134 drwx------ 3 dupont cicrp 512 Dec 11 16:42 info.nouveau 89132 -rwx------ 1 dupont cicrp 54199 Dec 11 16:39 terminfo.doc 89133 -rwxrwx--- 1 durand staff 130 Dec 11 16:39 essai 89134 -rw-r-xr-- 1 dupont cicrp 64 Dec 11 16:39 essai1.p 89135 -rwx------ 1 dupont cicrp 425 Dec 11 16:39 tyty "dupont" n'est plus le propriétaire, il ne peut plus modifier le fichier "essai" avec les droits dédiés au **user** mais soit avec ceux du **group** s'il appartient au groupe "staff" soit avec les droits **other** s'il n'appartient pas à ce groupe. ==== Les permissions par défaut, la commande umask ==== Il est possible de préciser un masque de permissions (pour les accès **rwx**) utilisé lors de la création de tout nouveau fichier. On peut ainsi protéger ses fichiers de manière automatique dès leur création, sans avoir besoin d'utiliser la commande chmod pour avoir de "bonnes permissions" à posteriori. Le masque est constitué par un nombre de trois chiffres octaux (par exemple 027), où chaque chiffre octal représente le MASQUAGE BINAIRE sur trois bits. Dans le cas de 027 cela correspond à 000 010 111 . Chaque valeur 0 laisse passer la permission (donne le droit), le 1 ne laisse pas passer (filtre le droit) * Le 1er groupe de trois bits masque les droits pour **(u)ser** * Le 2e groupe masque l'accès pour **(g)roup** * Le 3e groupe masque l'accès pour **(o)ther** //ATTENTION ! Le masque à définir est l'inverse des droits à donner => c'est donc l'inverse de ce qui est fourni pour la commande **chmod**.// octal r w x donne accès en 7 1 1 1 --- 6 1 1 0 --x 5 1 0 1 -w- 4 1 0 0 -wx 3 0 1 1 r-- 2 0 1 0 r-x 1 0 0 1 rw- 0 0 0 0 rwx La commande **umask** positionne les trois masques (**user group other**) user@machine: umask 027 <- rwx pour user, r-x pour group, rien pour other user@machine: umask 027 user@machine: xlp -o essai1 essai1.pas <- création d'un fichier user@machine: ls -ail essai1* 89305 -rwxr-x--- 1 dupont cicrp 5038 Dec 15 15:49 essai1 89294 -rw-r-xr-- 1 dupont cicrp 64 Dec 15 15:42 essai1.pas user@machine: umask 002 user@machine: umask 002 user@machine: xlp -o essai2 essai1.pas user@machine: ls -ail essai* 89305 -rwxr-x--- 1 dupont cicrp 5038 Dec 15 15:49 essai1 89294 -rw-r-xr-- 1 dupont cicrp 64 Dec 15 15:42 essai1.pas 89307 -rwxrwxr-x 1 dupont cicrp 5038 Dec 15 15:50 essai2 les masques usuels sont: * 077 <- Seul l'utilisateur a tous les droits lors de la création d'un nouveau fichier * 027 <- L'utilisateur a tous les droits, le groupe a Read et eXecute * 022 <- L'utilisateur a tous les droits, le groupe et les autres (other) ont Read, eXecute ==== Les permissions sur un répertoire ==== Les mêmes permissions sont affectées aux répertoires. Les mêmes commandes sont utilisées. Cependant le sens à donner aux droits **r w x** sur un répertoire est différent. * ** {r)ead** <- droit de lire le contenu du répertoire (commande ls) * **(w)rite** <- droit d'écrire un nouveau fichier dans un répertoire (commande cp) * **e(x)ecute** <- droit de traverser un répertoire (commande cd) Pour accéder à un fichier non seulement vous devez avoir le droit de lecture sur ce fichier, mais également le droit d'exécution sur tous les répertoires qui permettent d'atteindre ce fichier. ==== Sudo ==== **sudo** permet d’exécuter une commande avec les droits du super-administrateur appelé **root**.\\ //Ce mécanisme est à la fois souple et DANGEREUX !// ===== Quelques commandes élémentaires ===== ==== Manipulation des fichiers et des répertoires ==== **cat**\\ Permet d'afficher à l'écran le contenu du fichier spécifié ou de concaténer des fichiers.\\ **cat essai.f** <- Affiche le contenu du fichier "essai.f". **cp**\\ Permet de copier un ou plusieurs fichiers soit sur un autre fichier soit sur un autre répertoire. Si le fichier de destination existe le contenu initial sera perdu. L'option **-r** permet de copier (récursivement) des répertoires.\\ **cp essai.f essai.f.save** <- Copie "essai.f" dans "essai.f.save". **mv**\\ Déplace ou renomme un fichier ou un répertoire.\\ **mv a.out prog** <- Change le nom du fichier (ou répertoire) "a.out" en "prog". **rm**\\ Détruit un ou plusieurs fichiers, ou des répertoires avec l'option **-r**(récursisf), attention, très dangereux s'il existe des liens symboliques.\\ **rm essai.f.save** <- Destruction du fichier "essai.f.save". **ls**\\ Affiche le contenu d'un répertoire donné (répertoire courant par défaut) en fournissant des informations sur les fichiers.\\ **ls -ail** * option **a** <- tous les fichiers, même ceux cachés * option **i** <- affiche les numéros d'i-node * option **l** <- version longue : modes, propriétaire, etc.. **mkdir**\\ Crée un répertoire.\\ **mkdir $HOME/rep1** <- Création de "rep1" dans le répertoire principal. **rmdir**\\ Détruit un répertoire, celui ci doit être vide.\\ **rmdir $HOME/rep1** **cd**\\ Change le répertoire courant. Si aucun répertoire n'est précisé, ce sera par défaut la valeur de la variable $HOME. Sinon ce sera le répertoire spécifié qui deviendra le répertoire courant.\\ **cd ..** <- Permet de remonter d'un niveau. **pwd**\\ Affiche le nom du répertoire courant. **more**\\ Visualise un fichier sur l'ecran, page par page (avec l'option **-l**).\\ **more essai.f** <- Affichage page à page\\ **cat essai.f | more** <- Idem **chmod**\\ Permet de changer les permissions d'un fichier.\\ **chmod a+r essai.f** <- Autorise tout le monde à lire le fichier "essai.f". **umask**\\ Positionne les droits par défaut. **chown**\\ Permet de changer le propriétaire d'un fichier.\\ **chown dupont essai.f** <- "dupont" est le nouveau propriétaire du fichier "essai.f". **chgrp**\\ Permet de changer le groupe propriétaire d'un fichier.\\ **chgrp cicrp essai.f** <- cicrp est le nouveau groupe propriétaire du fichier "essai.f". ==== Impression, courrier, outils usuels ==== **lpstat**\\ Fournit l'état des impressions par imprimante. Donc fournit la liste des imprimantes reconnues, ainsi que le numéro du travail d'impression (Job-ID)\\ **lpstat** ou **lstat -a** **lpr**\\ Permet l'impression des fichiers sur imprimante (par ex. sous AIX)\\ **lpr -Pauto fic1** <- Pour imprimer "fic1" sur l'imprimante dont le nom est "auto". **lprm**\\ Permet d'annuler une impression demandée par la commande lpr\\ **lprm -Pauto 275** <- Pour annuler le Job 275 sur l'imprimante auto (Job-ID) **lp**\\ Permet l'impression des fichiers sur imprimante (par ex sous SYSTEM V)\\ **lp -dauto fic1** <- Pour imprimer "fic1" sur l'imprimante dont le nom est "auto". **cancel**\\ Permet d'annuler une impression demandée par la commande **lp**.\\ **cancel auto-275** <- Pour annuler le Job 275 sur l'imprimante "auto" (Job-ID) **pr**\\ Pagine un fichier pour pouvoir l'imprimer. **mail**\\ Commande de lecture de votre boite aux lettres électronique, ou envoi immédiat d'un courrier avec précision du sujet et du texte.\\ **mail** <- Lecture boite aux lettres\\ **mail dupont -s cours** <- Envoi du texte suivant à "dupont" :\\ sujet = cours\\ ceci est le texte à envoyer\\ . <- "." fin de texte **elm**\\ Commande de lecture de votre boite aux lettres électronique, en mode pleine page avec aide en ligne. N'est pas présent sur tous les systèmes LINUX. **date**\\ Affiche la date et l'heure . **who**\\ Affiche les utilisateurs connectés en précisant leur moyen de connexion. **w**\\ Affiche les utilisateurs connectés en précisant ce qu'ils font. **passwd**\\ Modification du mot de passe utilisé au login. ==== Commandes réseau ==== **ssh**\\ Demande de connexion sur une machine distante. Ouverture d'une nouvelle session. **ftp**\\ Outil de transfert de fichier **File Tansfert Protocol** entre machines possédant ce protocol ==== Commandes diverses ==== **df**\\ Liste l'état des filesystems **wc**\\ Compte le nombre de lignes de mots et de caractères du fichier donné.\\ **who | wc -l** <- Compte le nombre d'utilisateurs connectés **tee**\\ Produit à partir d'un fichier d'entrée, deux fichiers de sortie. **file**\\ Indique le type du fichier. **sort**\\ Trie suivant les critères donnés par les options, les fichiers ou données fournis en entrée. **find**\\ Parcourt la hiérarchie des fichiers, pour chaque chemin d'accès donné, à la recherche des fichiers dont les noms sont précisés en argument dans la commande. Certains critères de recherche peuvent être spécifiés.\\ **find /home/dupont -name *.f -print** <- Liste le nom des fichiers "*.f" se trouvant sous "/home/dupont" **grep**\\ Recherche dans le fichier spécifié les lignes contenant une chaîne de caractères identique à celle donnée en argument. Chaque ligne trouvée est affichée sur la sortie standard.\\ **grep "SUBROUTINE" pgm.f** <- Donne toutes les lignes de "pgm.f" contenant "SUBROUTINE". **xargs**\\ Construit, à partir d'une liste, une liste d'arguments.\\ **find /home/dupont -name *.f -print | xargs grep "SUBROUTINE"** <- Recherche toutes les occurrences de -"SUBROUTINE" dans les fichiers "*.f" sous "/home/dupont". **compress**\\ Stocke les fichiers sous une forme compressée. **uncompress**\\ Décompacte un fichier crée par la commande compress. **tar**\\ Archive une liste de fichiers et produit un fichier résultat ou une écriture sur bande magnétique. **banner**\\ Imprime chaque argument en lettres larges sur la sortie standard. **echo**\\ Impose aux arguments d'être affichés. **tail**\\ Affiche la fin d'un fichier. ==== Commandes pour les processus ==== **ps**\\ Est utilisé pour obtenir des informations sur l'état des processus de l'utilisateur. **kill**\\ Provoque l'arrêt de l'exécution des processus spécifiés. === Exemples === user@machine: ps -l <- donne la liste des process utilisateur avec leur numéro PID process id, et le numéro du processus père PPID F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 240801 S 223 23896 47959 0 60 20 bb0b 128 pts/1 0:00 ksh 200001 R 223 44642 23896 80 100 20 133d3 296 pts/1 0:00 ps user@machine: ps -udupont <- liste les process liés a "dupont" user@machine: ps -t pts/35 <- liste les process liés au "terminal" pts/35 user@machine: kill -9 23896 <- tue le process 23896 (qui est le ksh de login => provoque un logout) ==== L'aide "en ligne" ==== L'aide standard de linux s'obtient par la commande **man**. Vous disposez d'un grand nombre de commandes qui sont sous **/bin** et **/usr/bin**.\\ Pour vous aider à les utiliser le système possède une documentation interne. Cette documentation est située sous **/usr/man**. Elle n'est pas lisible directement mais à l'aide de la commande **man**.\\ Pour avoir toute l'information sur une commande particulière il suffit de taper **man **. Pour arrêter l'affichage de l'aide, il suffit de taper la lettre **q** qui provoque l'arrêt de la page courante de documentation, ou **^C** qui arrête tout. user@machine:man man <- aide pour l'utilisation de la commande man man Command Purpose Displays manual entries online. Syntax man [ -k Keyword | -f Command] [-] [ -MPath ] [ Section ] Title Description The man command provides information on various reference arti- cles, such as commands, subroutines and files.The man command can provide one line descriptions of commands that are specified by name, or it can provide information for all commands whose descriptions contain a specified keyword......... user@machine: man ls <- demande d'aide sur la commande ls ls Command Purpose Displays the contents of a directory. Syntax ls [ -A a d i L N R r s] [ - F | - | - x | - m | - x | - 1 ] [ - cl | -ct | -clt | -ul | -ut | -utl] [ - n| - l] [ [ - g| - n| - l| - o| - e] - t] [File ...] [Directory ...] Description The ls command writes to standard output ...... Autre possibilité : utiliser l’option **--help** de la commande concernée (deux fois le tiret avant "help"). ==== Redirection des entrées/sorties et Tubes (pipes) ==== === Redirection des entrées/sorties === La redirection des entrées/sorties standard est une des caractéristiques du système Linux.\| L'interpréteur shell reçoit ses commandes à partir d'une entrée standard qui est le clavier et affiche les résultats sur la sortie standard qui est l'écran et sort éventuellement les erreurs sur l'écran aussi. Vous avez la possibilité de modifier l'affectation de ces fichiers standards sous le shell, pendant la durée de l'exécution de la commande. Par exemple la commande **ls** vous donne sur écran la liste des fichiers, mais vous pouvez rediriger la sortie dans un fichier. Cette redirection se fait au moyen du signe supérieur **>**. **ls > monfichier**\\ Vous ne verrez rien à l'écran, le résultat de la commande **ls** sera écrit dans le fichier "monfichier", dont vous pourrez visualiser le contenu au moyen de la commande **cat**. De même, à l'aide du signe inférieur **<**, on peut changer l'entrée standard pour que la commande prenne ses données un le fichier d'entrée. **wc < fic**\\ Va afficher le nombre de lignes,de mots,de caractères se trouvant dans le fichier d'entrée "fic". Si on utilise la redirection de la sortie standard (**>**) sur un fichier existant, alors le contenu de ce fichier est écrasé par le résultat de la commande redirigée.\| Si vous voulez ajouter des informations à la suite il faut alors taper deux fois le caractère **>** : **ls >> monfichier** === Tubes ou Pipes === Il existe une autre méthode de redirection appelée "pipe" ou "tube". Elle permet d'affecter la sortie standard d'une commande sur l'entrée standard d'une autre commande.\\ Le symbole du shell est la barre verticale **|**. exemple : **ls -l | grep "^d"**\\ Donne la liste des sous répertoires contenus dans le répertoire courant et a le même effet que la suite des deux commandes suivantes:\\ **ls -l > fichier**\\ **grep "^d" < fichier** Les "pipes" permettent d'éviter la création de fichiers temporaires. exemples :\\ **cat | more nomfichier**\\ **man cmd | lpr** ===== Création de nouvelles commandes, les "scripts" ===== Vous pouvez combiner des commandes dans des fichiers, des "scripts shell", de façon à vous créer vos propres commandes. exemple : user@machine: cat > nbuser <- saisie de texte directement dans nbuser who|wc -l ^D <- fin de fichier user@machine: cat nbuser <- vérification who|wc -l user@machine: nbuser <- exécution mais problème ksh: nbuser: Permission denied. user@machine: ls -ail nbuser <- droit à exécution non positionné 18040 -rw------- 1 dupont cicrp 10 Dec 15 17:46 nbuser user@machine: chmod +x nbuser <- rend exécutable user@machine: ls -ail nbuser 18040 -rwx------ 1 dupont cicrp 10 Dec 15 17:46 nbuser user@machine: nbuser <- exécution 11 L'option **-l** de **wc** spécifie que le nombre de lignes du résultat de la commande who doit être pris en compte. Vous pouvez aussi combiner les commandes **who** et **wc** en ajoutant un message : user@machine:cat > nbuser echo 'who | wc -l' utilisateurs sur le système ^D autre exemple : Pour afficher la liste des sous-répertoires du répertoire courant. user@machine:cat > listd ls -l $1 | grep '^d ' ^D Pour grep la recherche de la chaîne **'^d'** revient à rechercher le caractère **d** en début de ligne. Or la commande **ls -l** fournit les modes et les types (**d** pour répertoires, **-** pour fichiers). La syntaxe **$1** dans un fichier de commande permet de dire qu'à cet endroit on doit mettre l'argument numéro 1 passé sur la ligne de commande. Dans le cas où on exécute : **listd /home/dupont** alors **$1** sera remplacé par **/home/dupont** lors de l'exécution. Si aucun argument n'est donné, le répertoire courant sera pris. **listd /** donnera les répertoires de la racine. L'exécution de votre fichier **listd** est soumise au positionnement du droit **x** sur ce fichier. En effet par défaut lors de la création de fichiers de texte (c'est le cas ici) le droit d'exécution n'est pas mis. La commande **find** permet de rechercher les fichiers. **find . -print** Va afficher la liste de tous les fichiers du sous arbre courant. Vous pouvez entrer la commande dans un fichier "liste" et taper le nom de ce fichier liste à chaque fois, comme si il s'agissait d'une commande. Idem pour les répertoires car **find** a un argument **-type** pour rechercher certains types de fichiers, ici **d** : **find . -type d -print.** ===== Processus (ou tâche) ===== ==== Hiérarchie de processus ==== Lorsque vous êtes entré sous LINUX, vous avez lancé un processus, c'est à dire l'exécution d'un programme particulier, le shell de login (interpréteur de commande). Ce processus a un numéro d'identification appelé Process-Id (PID). Chaque nouvelle commande lancée par la suite crée un nouveau processus. Ce nouveau processus est alors rattaché au processus à partir duquel il a été créé, par défaut le shell de login. Ainsi ce nouveau processus possède un processus père ou Parent Process-Id (PPID). Cette commande peut elle-même lancer une nouvelle commande, son processus devient le père du nouveau processus créé, et ainsi de suite.... L'ensemble des processus de la machine est donc organisé en une hierarchie "de père en fils". Les processus possèdent tous le même "ancêtre", le processus numéro 1. La commande **ps -f** (f pour full) permet de visualiser la hiérarchie de vos propres processus. La colonne PID est le numéro du processus, la colonne PPID est le numéro du père de ce processus. user@machine: ps -f | more USER PID PPID C STIME TTY TIME CMD dupont 14423 76374 1 17:37:54 pts/11 0:00 -ksh dupont 46089 14423 4 17:38:52 pst/11 0:00 more dupont 92168 14423 14 17:38:52 pts/11 0:00 ps -f Ici les deux commandes **more** et **ps** possèdent le même père, le process de login (-ksh) ==== Processus en arrière-plan et avant-plan ==== === Lancement des processus d'arrière-plan === Lorsque vous lancez une commande vous "perdez la main", c'est à dire que vous devez attendre la fin de cette exécution pour pouvoir taper une autre commande. Le processus généré se déroule alors en avant-plan (ou foreground) et bloque le lancement de tout nouveau processus. Ceci est normal pour les sytèmes d'exploitation mono-tâche tels que MSDOS, mais LINUX est multi-tâches et permet donc de lancer plusieurs processus simultanément. Cependant un seul se déroulera en avant-plan, les autres devront se dérouler en arrière-plan (ou background) . Les processus d'arrière-plan se déroulent en parallèle du processus interactif courant. Il sont actifs en même temps mais vous avez toujours "la main" pour taper de nouvelles commandes. Cependant tout affichage d'un processus d'arrière-plan se fera sur l'écran et viendra donc se mélanger avec l'affichage du processus interactif en avant-plan. Le lancement d'une commande en arrière-plan se fait par la frappe de la commande suivie par le caractère **&**. Le numéro du processus créé est alors retourné. user@machine:who& <- lancement de la commande [1] 39328 <- numéro du process user@machine: dupont pts/1 Mar 31 11:53 (plex_sb.cicrp.ju) <- résultat who durand pts/2 Mar 31 12:01 (plex_sa.cicrp.ju) p6ip10 pts/3 Mar 31 12:50 (ippc48.cicrp.jus) p6e2a3 pts/4 Mar 31 12:12 (134.157.15.117) p7mgeo10 pts/5 Mar 31 13:20 (plex_sb.cicrp.ju) === Contrôle des processus === Une fois la commande lancée en arrière-plan vous pouvez toujours contrôler son déroulement. Les actions possibles et les commandes ou frappes de touches associées sont : * Tuer un processus d'avant ou d'arrière plan **kill -9 ** * Suspendre le processus d'avant plan **CTRL-Z** * Passer en arrière plan le processus suspendu **bg** (pour background) * Passer en avant plan le processus d'arrière plan **fg** (pour foreground) ATTENTION, le caractère de suspension (frappe de **CTRL** et de **×Z** simultanément) peut varié. En effet c'est un paramètre de communication du terminal, et en tant que tel il est modifiable grâce à la commande **stty**. la commande **stty -a** permet de connaître le caractère de suspension. Cet exemple montre ce fonctionnement à partir d'un programme fortran qui boucle. user@machine: cat boucle.f program boucle 10 write(6,*) 'ca boucle' goto 10 end user@machine: stty -a speed 9600 baud; 0 rows; 0 columns; intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ^@ eol2 = ^@; start = ^Q; stop = ^S; susp = ^Z; dsusp ; reprint=^R <- ^Z est bien le caractère de suspension user@machine: boucle <- lancement de la commande en avant plan ca boucle ca boucle <- messages ca boucle ..... ^Z [1] + 19385 Stopped boucle <- frappe CTRL-Z | +---------------------------- numéro du process user@machine: bg <- passage en arrière plan [1] boucle& ca boucle <- exécution se poursuit en arrière plan ca boucle ca boucle ..... ls <- on peut taper des commandes ca boucle | (mélange des deux ...) a.out boucle.f fort.10 rfic wfic.f <--+ ca boucle | (... affichages) boucle fort.1 fort.3 rfic.f ca boucle ca boucle .... user@machine: kill -9 19385 <- on peut tuer le process d'arrière plan ou le passer en avant plan avec la commande fg [1] + 19385 Killed boucle