Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
elearning:workbooks:lpic:11:500:l103 [2023/06/09 05:15] – created admin | elearning:workbooks:lpic:11:500:l103 [2024/04/05 07:59] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
- | Version : **2023.01** | + | Version : **2024.01** |
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
Ligne 11: | Ligne 11: | ||
* **Topic 3 : GNU and Unix Commands** | * **Topic 3 : GNU and Unix Commands** | ||
* Contenu du Module | * Contenu du Module | ||
- | * Présentation | + | * Présentation |
- | * LAB #1 - Créer, ouvrir et fermer des fichiers | + | * LAB #1 - Créer, ouvrir et fermer des fichiers |
* 1.1 - Commandes | * 1.1 - Commandes | ||
* 1.2 - Créer un nouveau fichier avec VI | * 1.2 - Créer un nouveau fichier avec VI | ||
Ligne 201: | Ligne 201: | ||
* La Commande pkill | * La Commande pkill | ||
- | =====Présentation===== | + | =====Présentation |
VI est un éditeur de texte puissant qui dispose de trois modes : | VI est un éditeur de texte puissant qui dispose de trois modes : | ||
Ligne 930: | Ligne 930: | ||
25 This is line 24Linux is wonderful$ | 25 This is line 24Linux is wonderful$ | ||
" | " | ||
+ | </ | ||
+ | |||
+ | =====LAB #9 - 38 Commandes de Base===== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** - Vous êtes actuellement connecté(e) en tant que root dans votre terminal. Avant de procéder plus loin, tapez la commande exit et appuyez sur la touch < | ||
+ | </ | ||
+ | |||
+ | ====9.1 - La commande stty===== | ||
+ | |||
+ | Dès votre connexion à un système Linux, Il est conseillé de lancer la commande suivante | ||
+ | |||
+ | $ stty –a [Entrée] | ||
+ | |||
+ | Faites attention à utiliser des minuscules. En effet Linux différencie les minuscules et les majuscules. | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ stty -a | ||
+ | speed 38400 baud; rows 26; columns 80; line = 0; | ||
+ | intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = < | ||
+ | eol2 = < | ||
+ | werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; | ||
+ | -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts | ||
+ | -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff | ||
+ | -iuclc -ixany -imaxbel -iutf8 | ||
+ | opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 | ||
+ | isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt | ||
+ | echoctl echoke | ||
+ | </ | ||
+ | |||
+ | Dans l’information qui s’affiche à l’écran, cherchez la chaîne intr =. Si la valeur est «Del», il faut utiliser la touche **Suppr** au lieu de la commande **^C** pour interrompre un programme en cours d’exécution dans un terminal. | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.2 - La commande date==== | ||
+ | |||
+ | Cette commande affiche la date et l’heure de la machine. La commande peut aussi être utilisée pour régler la date du système : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ date | ||
+ | Thu 29 Sep 04:53:58 CEST 2016 | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.3 - La commande who==== | ||
+ | |||
+ | Cette commande affiche les utilisateurs connectés au système: | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ who | ||
+ | trainee | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.4 - La commande df==== | ||
+ | |||
+ | Cette commande affiche l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ df | ||
+ | Filesystem | ||
+ | / | ||
+ | devtmpfs | ||
+ | tmpfs | ||
+ | tmpfs | ||
+ | tmpfs | ||
+ | tmpfs | ||
+ | / | ||
+ | tmpfs 50080 | ||
+ | </ | ||
+ | |||
+ | Les unités sont en blocs. Afin d'// | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ df -h | ||
+ | Filesystem | ||
+ | / | ||
+ | devtmpfs | ||
+ | tmpfs | ||
+ | tmpfs | ||
+ | tmpfs | ||
+ | tmpfs | ||
+ | / | ||
+ | tmpfs 49M | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.5 - La commande free==== | ||
+ | |||
+ | Cette commande affiche les détails de la mémoire disponible : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ free | ||
+ | total used free shared | ||
+ | Mem: | ||
+ | Swap: | ||
+ | </ | ||
+ | |||
+ | Les unités sont en blocs. Afin d'// | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ free -h | ||
+ | total used free shared | ||
+ | Mem: | ||
+ | Swap: 2.0G 3.8M 2.0G | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.6 - La commande whoami==== | ||
+ | |||
+ | Cette commande affiche le nom associé à l'UID courant effectif, autrement dit, le nom de votre compte courant : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ whoami | ||
+ | trainee | ||
+ | </ | ||
+ | |||
+ | Devenez maintenant l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ su - | ||
+ | Password: fenestros | ||
+ | Last login: Wed Sep 28 12:08:28 CEST 2016 on pts/0 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le mot de passe saisi ne sera PAS visible. | ||
+ | </ | ||
+ | |||
+ | Saisissez maintenant la commande **whoami** de nouveau : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# whoami | ||
+ | root | ||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez maintenant que vous êtes root. | ||
+ | </ | ||
+ | |||
+ | Saisissiez en suite la commande **exit** pour redevenir l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# exit | ||
+ | logout | ||
+ | [trainee@centos7 ~]$ | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.7 - La commande pwd==== | ||
+ | |||
+ | Cette commande affiche le répertoire courant de travail : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ pwd | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez la commande **help** avec l' | ||
+ | </ | ||
+ | |||
+ | ====9.8 - La commande cd==== | ||
+ | |||
+ | Cette commande permet de changer de répertoire courant pour le répertoire passé en argument à la commande : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cd /tmp | ||
+ | [trainee@centos7 tmp]$ pwd | ||
+ | /tmp | ||
+ | [trainee@centos7 tmp]$ | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez la commande **help** avec l' | ||
+ | </ | ||
+ | |||
+ | ====9.9 - La commande ls==== | ||
+ | |||
+ | Cette commande permet de lister le contenu d'un répertoire passé en argument à la commande. Si aucun argument n'est spécifié, la commande liste le contenu du répertoire courant : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ ls | ||
+ | hsperfdata_root | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.10 - La commande lsof==== | ||
+ | |||
+ | La commande **lsof** affiche des informations sur les fichiers ouverts par des processus : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ su - | ||
+ | Password: fenestros | ||
+ | Last login: Thu Sep 29 06:24:28 CEST 2016 on pts/0 | ||
+ | [root@centos7 ~]# lsof | more | ||
+ | COMMAND | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | systemd | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.11 - La commande touch==== | ||
+ | |||
+ | Cette commande sert à modifier l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# exit | ||
+ | logout | ||
+ | [trainee@centos7 tmp]$ touch test | ||
+ | [trainee@centos7 tmp]$ ls | ||
+ | hsperfdata_root | ||
+ | inode test | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.12 - La commande echo==== | ||
+ | |||
+ | Cette commande écrit les arguments vers la sortie standard (autrement dit à l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ echo fenestros | ||
+ | fenestros | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez la commande **help** avec l' | ||
+ | </ | ||
+ | |||
+ | ====9.13 - La commande cp==== | ||
+ | |||
+ | La commande cp permet de copier une source vers une destination ou de multiples sources vers un répertoire : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ cp test ~ | ||
+ | [trainee@centos7 tmp]$ ls -l ~ | ||
+ | total 4 | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee 442 Sep 29 00:53 vitext | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.14 - La commande file==== | ||
+ | |||
+ | Cette commande permet de connaître le type d'un fichier: | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ file ~/test | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que la commande vous indique le type de fichier en fonction de son contenu. Dans l' | ||
+ | </ | ||
+ | |||
+ | Redirigez, en utilisant le caractère **>**, la sortie de la commande **echo** vers le fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ echo " | ||
+ | </ | ||
+ | |||
+ | En utilisant de nouveau la commande **file**, celle-ci est capable de vous indiquer le type de fichier : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ file ~/test | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.15 - La commande cat==== | ||
+ | |||
+ | La commande **cat** permet de concaténer les fichiers passés en argument, ou de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ cat ~/test | ||
+ | fenestros | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.16 - La commande mv==== | ||
+ | |||
+ | La commande **mv** permet déplacer ou de renommer un fichier ou répertoire. | ||
+ | |||
+ | Utilisez la commande **mv** pour déplacer le fichier **test** de votre répertoire personnel vers le répertoire courant : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ mv ~/test . | ||
+ | [trainee@centos7 tmp]$ ls -l ~ | ||
+ | total 4 | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee 442 Sep 29 00:53 vitext | ||
+ | [trainee@centos7 tmp]$ mv test TeSt | ||
+ | [trainee@centos7 tmp]$ ls -l | ||
+ | total 4 | ||
+ | drwxr-xr-x. 2 root root 80 Sep 28 10:52 hsperfdata_root | ||
+ | drwxr-xr-x. 2 root root 100 Sep 28 12:30 inode | ||
+ | drwx------. 3 root root 60 Sep 28 10:49 systemd-private-45071248a58f4fd2a4de940a5734c8ec-cups.service-ODc5L6 | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.17 - La commande mkdir==== | ||
+ | |||
+ | La commande **mkdir** permet de créer un répertoire. | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 tmp]$ cd ~ | ||
+ | [trainee@centos7 ~]$ mkdir testdir | ||
+ | [trainee@centos7 ~]$ ls | ||
+ | Desktop | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.18 - La commande rmdir==== | ||
+ | |||
+ | La commande **rmdir** permet de supprimer un répertoire **vide** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ rmdir testdir | ||
+ | [trainee@centos7 ~]$ ls | ||
+ | Desktop | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.19 - La commande rm==== | ||
+ | |||
+ | La commande rm permet de supprimer un répertoire **vide ou non** ou un fichier : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ mkdir testdir1 | ||
+ | [trainee@centos7 ~]$ cd /tmp | ||
+ | [trainee@centos7 tmp]$ echo " | ||
+ | [trainee@centos7 tmp]$ cd ~ | ||
+ | [trainee@centos7 ~]$ mv /tmp/TeSt ~/testdir1 | ||
+ | [trainee@centos7 ~]$ ls -lR testdir1/ | ||
+ | testdir1/: | ||
+ | total 4 | ||
+ | -rw-rw-r--. 1 trainee trainee 10 Sep 29 18:13 TeSt | ||
+ | [trainee@centos7 ~]$ rmdir testdir1/ | ||
+ | rmdir: failed to remove ‘testdir1/ | ||
+ | [trainee@centos7 ~]$ rm -rf testdir1/ | ||
+ | [trainee@centos7 ~]$ ls | ||
+ | Desktop | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.20 - La commande sort==== | ||
+ | |||
+ | Cette commande trie dans le canal d’entrée et retourne à l’écran une liste triée. | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ touch aac abc bca xyz | ||
+ | [trainee@centos7 ~]$ ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | [trainee@centos7 ~]$ ls | sort | ||
+ | aac | ||
+ | abc | ||
+ | bca | ||
+ | Desktop | ||
+ | Documents | ||
+ | Downloads | ||
+ | Music | ||
+ | Pictures | ||
+ | Public | ||
+ | Templates | ||
+ | Videos | ||
+ | vitext | ||
+ | xyz | ||
+ | [trainee@centos7 ~]$ ls | sort -r | ||
+ | xyz | ||
+ | vitext | ||
+ | Videos | ||
+ | Templates | ||
+ | Public | ||
+ | Pictures | ||
+ | Music | ||
+ | Downloads | ||
+ | Documents | ||
+ | Desktop | ||
+ | bca | ||
+ | abc | ||
+ | aac | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.21 - La commande more==== | ||
+ | |||
+ | Cette commande affiche le contenu d’un fichier texte et l’envoi page par page au canal de sortie à l'aide de la touche < | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ more / | ||
+ | # / | ||
+ | # $Id: services,v 1.55 2013/04/14 ovasik Exp $ | ||
+ | # | ||
+ | # Network services, Internet style | ||
+ | # IANA services version: last updated 2013-04-10 | ||
+ | # | ||
+ | # Note that it is presently the policy of IANA to assign a single well-known | ||
+ | # port number for both TCP and UDP; hence, most entries here have two entries | ||
+ | # even if the protocol doesn' | ||
+ | # Updated from RFC 1700, ``Assigned Numbers'' | ||
+ | # are included, only the more common ones. | ||
+ | # | ||
+ | # The latest IANA port assignments can be gotten from | ||
+ | # | ||
+ | # The Well Known Ports are those from 0 through 1023. | ||
+ | # The Registered Ports are those from 1024 through 49151 | ||
+ | # The Dynamic and/or Private Ports are those from 49152 through 65535 | ||
+ | # | ||
+ | # Each line describes one service, and is of the form: | ||
+ | # | ||
+ | # service-name | ||
+ | |||
+ | tcpmux | ||
+ | --More--(0%) | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : L' | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.22 - La commande less==== | ||
+ | |||
+ | La commande **less** produit un résultat similaire à la commande **more**. Utilisez la commande **less** en vous référant à l'aide de la commande avec **less - -help**. Laquelle des deux commandes vous semble la plus puissante ? | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ less / | ||
+ | # / | ||
+ | # $Id: services,v 1.55 2013/04/14 ovasik Exp $ | ||
+ | # | ||
+ | # Network services, Internet style | ||
+ | # IANA services version: last updated 2013-04-10 | ||
+ | # | ||
+ | # Note that it is presently the policy of IANA to assign a single well-known | ||
+ | # port number for both TCP and UDP; hence, most entries here have two entries | ||
+ | # even if the protocol doesn' | ||
+ | # Updated from RFC 1700, ``Assigned Numbers'' | ||
+ | # are included, only the more common ones. | ||
+ | # | ||
+ | # The latest IANA port assignments can be gotten from | ||
+ | # | ||
+ | # The Well Known Ports are those from 0 through 1023. | ||
+ | # The Registered Ports are those from 1024 through 49151 | ||
+ | # The Dynamic and/or Private Ports are those from 49152 through 65535 | ||
+ | # | ||
+ | # Each line describes one service, and is of the form: | ||
+ | # | ||
+ | # service-name | ||
+ | |||
+ | tcpmux | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.23 - La commande find==== | ||
+ | |||
+ | Cette commande sert à rechercher un ou des fichiers dans le répertoire courant ou le répertoire spécifié en argument : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ find acc | ||
+ | find: ‘acc’: No such file or directory | ||
+ | [trainee@centos7 ~]$ find aac | ||
+ | aac | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que si le fichier n' | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.24 - La commande su==== | ||
+ | |||
+ | La commande su permet d' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ su - | ||
+ | Password: fenestros | ||
+ | Last login: Thu Sep 29 17:08:56 CEST 2016 on pts/0 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le mot de passe saisi ne sera PAS visible. | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.25 - Les commandes locate et updatedb==== | ||
+ | |||
+ | La commande **locate** sert à rechercher un ou des fichiers dans l' | ||
+ | |||
+ | La commande **updatedb** peut être configurée en éditant son fichier de configuration **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat / | ||
+ | PRUNE_BIND_MOUNTS = " | ||
+ | PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs" | ||
+ | PRUNENAMES = ".git .hg .svn" | ||
+ | PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev / | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# updatedb | ||
+ | [root@centos7 ~]# locate aac | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | La base de données par défaut est **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ls -l / | ||
+ | -rw-r-----. 1 root slocate 3887117 Sep 29 03:46 / | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Pour plus d' | ||
+ | </ | ||
+ | |||
+ | ===Options des commandes=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.26 - La commande whereis==== | ||
+ | |||
+ | La commande **whereis** permet une recherche de l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# whereis passwd | ||
+ | passwd: / | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.27 - La commande which==== | ||
+ | |||
+ | La commande **which** permet une recherche de l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# which passwd | ||
+ | /bin/passwd | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.28 - La commande uptime==== | ||
+ | |||
+ | Cette commande nous indique l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# uptime | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.29 - La commande w==== | ||
+ | |||
+ | Cette commande reprend les informations de la commande **uptime** et y ajoute des détails sur les utilisateurs connectés via un terminal : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# w | ||
+ | | ||
+ | USER | ||
+ | trainee | ||
+ | </ | ||
+ | |||
+ | La valeur JCPU indique le temps processeur utilisé par tous les processus attachés au terminal de la connexion. Cette valeur n' | ||
+ | |||
+ | La valeur PCPU indique le temps processeur utilisé par les processus attachés au terminal de la connexion et actuellement en cours (autrement dit le processus identifié dans la colonne **WHAT**). | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.30 - La commande uname==== | ||
+ | |||
+ | Cette commande affiche des informations sur le système : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# uname -a | ||
+ | Linux centos7.fenestros.loc 3.10.0-327.13.1.el7.x86_64 #1 SMP Thu Mar 31 16:04:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux | ||
+ | [root@centos7 ~]# uname -s | ||
+ | Linux | ||
+ | [root@centos7 ~]# uname -n | ||
+ | centos7.fenestros.loc | ||
+ | [root@centos7 ~]# uname -r | ||
+ | 3.10.0-327.13.1.el7.x86_64 | ||
+ | [root@centos7 ~]# uname -v | ||
+ | #1 SMP Thu Mar 31 16:04:38 UTC 2016 | ||
+ | [root@centos7 ~]# uname -m | ||
+ | x86_64 | ||
+ | [root@centos7 ~]# uname -p | ||
+ | x86_64 | ||
+ | [root@centos7 ~]# uname -i | ||
+ | x86_64 | ||
+ | [root@centos7 ~]# uname -o | ||
+ | GNU/Linux | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.31 - La commande du==== | ||
+ | |||
+ | La commande du peut être utilisée pour afficher la taille des fichiers contenus dans les répertoires passés en arguments. L' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# du -sh /* 2>/ | ||
+ | 0 /bin | ||
+ | 187M /boot | ||
+ | 0 /dev | ||
+ | 33M /etc | ||
+ | 20M /home | ||
+ | 0 /lib | ||
+ | 0 /lib64 | ||
+ | 0 / | ||
+ | 0 /media | ||
+ | 0 /mnt | ||
+ | 173M /opt | ||
+ | 0 /proc | ||
+ | 43M /root | ||
+ | 8.7M /run | ||
+ | 0 /sbin | ||
+ | 0 /srv | ||
+ | 0 /sys | ||
+ | 64K /tmp | ||
+ | 3.6G /usr | ||
+ | 228M /var | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.32 - La commande clear==== | ||
+ | |||
+ | Cette commande est utilisée pour effacer le contenu de l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# clear | ||
+ | |||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | ====9.33 - La commande exit==== | ||
+ | |||
+ | Cette commande ferme le terminal courant : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# exit | ||
+ | logout | ||
+ | [trainee@centos7 ~]$ | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez la commande **help** avec l' | ||
+ | </ | ||
+ | |||
+ | ====9.34 - La commande logout==== | ||
+ | |||
+ | Cette commande est utilisée pour se déconnecter d'un terminal de connexion en écrivant les données umtp et wmtp dans les fichiers de journalisation. | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez la commande **help** avec l' | ||
+ | </ | ||
+ | |||
+ | ====9.35 - La commande sleep==== | ||
+ | |||
+ | Cette commande pause le terminal pour le nombre de secondes passé en argument. | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.36 - La Commande wall==== | ||
+ | |||
+ | La commande **wall** | ||
+ | |||
+ | Ouvrez donc un deuxième terminal via ssh en tant que trainee puis dans le premier envoyez un message : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ su - | ||
+ | Password: fenestros | ||
+ | [root@centos7 ~]# wall this is a message from root | ||
+ | [root@centos7 ~]# | ||
+ | Broadcast message from root@centos7.fenestros.loc (pts/0) (Fri Sep 30 05:35:26 2016): | ||
+ | |||
+ | this is a message from root | ||
+ | [Enter] | ||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | Constatez que le message est affiché dans le deuxième terminal : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ | ||
+ | Broadcast message from root@centos7.fenestros.loc (pts/0) (Fri Sep 30 05:35:26 2016): | ||
+ | |||
+ | this is a message from root | ||
+ | </ | ||
+ | |||
+ | Consultez maintenant la fin du fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail / | ||
+ | Sep 30 05:31:08 centos7 sh: Sleeping '' | ||
+ | Sep 30 05:34:16 centos7 sh: Sleeping '' | ||
+ | Sep 30 05:35:13 centos7 systemd: Started Session 311 of user trainee. | ||
+ | Sep 30 05:35:13 centos7 systemd-logind: | ||
+ | Sep 30 05:35:13 centos7 systemd: Starting Session 311 of user trainee. | ||
+ | Sep 30 05:35:13 centos7 dbus[515]: [system] Activating service name=' | ||
+ | Sep 30 05:35:13 centos7 dbus-daemon: | ||
+ | Sep 30 05:35:13 centos7 dbus[515]: [system] Successfully activated service ' | ||
+ | Sep 30 05:35:13 centos7 dbus-daemon: | ||
+ | Sep 30 05:35:26 centos7 wall[27550]: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : La commande wall ignore la variable d’environnement TZ. L’heure affichée dans la première page est basée sur les paramètres de régionalisation du système. | ||
+ | </ | ||
+ | |||
+ | ====9.37 - La Commande seq==== | ||
+ | |||
+ | La commande **seq** affiche une séquence de nombres du PREMIER au DERNIER par pas d'un INCREMENT. La commande prend la forme suivante : | ||
+ | |||
+ | * **seq** [options] PREMIER | ||
+ | * **seq** [options] PREMIER DERNIER | ||
+ | * **seq** [options] PREMIER INCREMENT DERNIER | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# seq 10 | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | 4 | ||
+ | 5 | ||
+ | 6 | ||
+ | 7 | ||
+ | 8 | ||
+ | 9 | ||
+ | 10 | ||
+ | [root@centos7 ~]# seq 20 30 | ||
+ | 20 | ||
+ | 21 | ||
+ | 22 | ||
+ | 23 | ||
+ | 24 | ||
+ | 25 | ||
+ | 26 | ||
+ | 27 | ||
+ | 28 | ||
+ | 29 | ||
+ | 30 | ||
+ | [root@centos7 ~]# seq 20 10 90 | ||
+ | 20 | ||
+ | 30 | ||
+ | 40 | ||
+ | 50 | ||
+ | 60 | ||
+ | 70 | ||
+ | 80 | ||
+ | 90 | ||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====9.38 - La Commande screen==== | ||
+ | |||
+ | La commande **screen** est un « multiplexeur de terminaux » permettant d' | ||
+ | |||
+ | La commande **screen** n'est pas installée par défaut sous RHEL/CentOS 7. Installez donc le paquet du même nom que la commande : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# which screen | ||
+ | / | ||
+ | [root@centos7 ~]# yum install screen | ||
+ | Loaded plugins: fastestmirror, | ||
+ | Loading mirror speeds from cached hostfile | ||
+ | * base: ftp.rezopole.net | ||
+ | * extras: centos.mirror.ate.info | ||
+ | * updates: centos.mirror.fr.planethoster.net | ||
+ | Resolving Dependencies | ||
+ | --> Running transaction check | ||
+ | ---> Package screen.x86_64 0: | ||
+ | --> Finished Dependency Resolution | ||
+ | |||
+ | Dependencies Resolved | ||
+ | |||
+ | ================================================================================= | ||
+ | | ||
+ | ================================================================================= | ||
+ | Installing: | ||
+ | | ||
+ | |||
+ | Transaction Summary | ||
+ | ================================================================================= | ||
+ | Install | ||
+ | |||
+ | Total download size: 552 k | ||
+ | Installed size: 914 k | ||
+ | Is this ok [y/d/N]: y | ||
+ | Downloading packages: | ||
+ | screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm | ||
+ | Running transaction check | ||
+ | Running transaction test | ||
+ | Transaction test succeeded | ||
+ | Running transaction | ||
+ | Installing : screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64 | ||
+ | Verifying | ||
+ | |||
+ | Installed: | ||
+ | screen.x86_64 0: | ||
+ | |||
+ | Complete! | ||
+ | [root@centos7 ~]# which screen | ||
+ | /bin/screen | ||
+ | </ | ||
+ | |||
+ | Créez maintenant une session avec screen : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -S mysession | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** - Vous verrez en tant que titre de votre terminal la chaîne **[screen 0: root@centos7: | ||
+ | </ | ||
+ | |||
+ | Appuyez maintenant sur < | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** - Vous verrez en tant que titre de votre terminal la chaîne **[screen 1: root@centos7: | ||
+ | </ | ||
+ | |||
+ | Pour repasser au premier screen, appuyez sur < | ||
+ | |||
+ | Pour voir les screens actifs, utilisez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -ls | ||
+ | There is a screen on: | ||
+ | 25812.mysession (Attached) | ||
+ | 1 Socket in / | ||
+ | </ | ||
+ | |||
+ | Dans votre screen, saisissez les commandes suivantes : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sleep 9999 & | ||
+ | [1] 2272 | ||
+ | [root@centos7 ~]# jobs | ||
+ | [1]+ Running | ||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | Pour détacher le screen, appuyez sur < | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -S mysession | ||
+ | [detached from 25812.mysession] | ||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | Pour rattacher le screen, saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -r | ||
+ | </ | ||
+ | |||
+ | Utilisez la commande jobs pour vérifier si le processus créé par la commande sleep est toujours en cours de fonctionnement : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# jobs | ||
+ | [1]+ Running | ||
+ | </ | ||
+ | |||
+ | Pour naviguer entre les screens il convient d' | ||
+ | |||
+ | Détachez de nouveau le screen actuel en appuyant sur < | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -S mysession | ||
+ | [detached from 25812.mysession] | ||
+ | [root@centos7 ~]# | ||
+ | </ | ||
+ | |||
+ | Créez maintenant un autre screen, cette fois-ci, non imbriqué : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -S mysession1 | ||
+ | </ | ||
+ | |||
+ | Constatez le résultat : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -ls | ||
+ | There are screens on: | ||
+ | 14942.mysession1 | ||
+ | 25812.mysession (Detached) | ||
+ | 2 Sockets in / | ||
+ | </ | ||
+ | |||
+ | Ratachez maintenant le screen **mysession** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# screen -r 25812 | ||
+ | </ | ||
+ | |||
+ | Constatez de nouveau le résultat : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sleep 9999 & | ||
+ | [1] 2272 | ||
+ | [root@centos7 ~]# jobs | ||
+ | [1]+ Running | ||
+ | [root@centos7 ~]# jobs | ||
+ | [1]+ Running | ||
+ | [root@centos7 ~]# screen -ls | ||
+ | There is a screen on: | ||
+ | 25812.mysession (Attached) | ||
+ | 1 Socket in / | ||
+ | |||
+ | [root@centos7 ~]# screen -ls | ||
+ | There are screens on: | ||
+ | 14942.mysession1 | ||
+ | 25812.mysession (Attached) | ||
+ | 2 Sockets in / | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | =====LAB #10 - Options et Arguments===== | ||
+ | |||
+ | Les options sous Linux peuvent être exprimées au format court ou au format long. Plusieurs différences sont importantes à noter. | ||
+ | |||
+ | Premièrement les options courtes sont précédées par un simple tiré **-**, tandis que les options longues sont précédées par deux tirés **--**. | ||
+ | |||
+ | Un exemple est l' | ||
+ | |||
+ | * -h | ||
+ | * --help | ||
+ | |||
+ | Deuxièmement les options courtes peuvent être combinées tandis que les options longues ne peuvent pas l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ls -lai /tmp | ||
+ | total 244 | ||
+ | 11071 drwxrwxrwt. 10 root root 260 Sep 30 06:24 . | ||
+ | 128 dr-xr-xr-x. 18 root root 4096 Dec 10 2015 .. | ||
+ | 13635 drwxrwxrwt. | ||
+ | 24858 drwxr-xr-x. | ||
+ | 13597 drwxrwxrwt. | ||
+ | | ||
+ | 24861 srw-------. | ||
+ | 25344 srw-------. | ||
+ | 16615 drwx------. | ||
+ | 13595 drwxrwxrwt. | ||
+ | 13590 drwxrwxrwt. | ||
+ | 13629 drwxrwxrwt. | ||
+ | 8098838 -rw-------. | ||
+ | [root@centos7 ~]# ls -ali /tmp | ||
+ | total 244 | ||
+ | 11071 drwxrwxrwt. 10 root root 260 Sep 30 06:24 . | ||
+ | 128 dr-xr-xr-x. 18 root root 4096 Dec 10 2015 .. | ||
+ | 13635 drwxrwxrwt. | ||
+ | 24858 drwxr-xr-x. | ||
+ | 13597 drwxrwxrwt. | ||
+ | | ||
+ | 24861 srw-------. | ||
+ | 25344 srw-------. | ||
+ | 16615 drwx------. | ||
+ | 13595 drwxrwxrwt. | ||
+ | 13590 drwxrwxrwt. | ||
+ | 13629 drwxrwxrwt. | ||
+ | 8098838 -rw-------. | ||
+ | </ | ||
+ | |||
+ | La commande **ls -l --all --inode** ne peut pas être écrite **ls -l --allinode** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ls -l --all --inode /tmp | ||
+ | total 244 | ||
+ | 11071 drwxrwxrwt. 10 root root 260 Sep 30 06:24 . | ||
+ | 128 dr-xr-xr-x. 18 root root 4096 Dec 10 2015 .. | ||
+ | 13635 drwxrwxrwt. | ||
+ | 24858 drwxr-xr-x. | ||
+ | 13597 drwxrwxrwt. | ||
+ | | ||
+ | 24861 srw-------. | ||
+ | 25344 srw-------. | ||
+ | 16615 drwx------. | ||
+ | 13595 drwxrwxrwt. | ||
+ | 13590 drwxrwxrwt. | ||
+ | 13629 drwxrwxrwt. | ||
+ | 8098838 -rw-------. | ||
+ | |||
+ | [root@centos7 ~]# ls -l --allinode /tmp | ||
+ | ls: unrecognized option ' | ||
+ | Try 'ls --help' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Les options prenant un argument ne sont pas combinées avec les autres options. | ||
+ | </ | ||
+ | |||
+ | =====LAB #11 - Expressions Régulières===== | ||
+ | |||
+ | La manipulation de fichiers textes utilise des **expressions régulières**. Sous Linux il existe deux types d' | ||
+ | |||
+ | * expressions régulières basiques - IEEE POSIX Basic Regular Expressions, | ||
+ | * utilisées par les commandes **vi**, **grep**, **expr** et **sed**, | ||
+ | * expressions régulières étendues - IEEE POSIX Extended Regular Expressions, | ||
+ | * utilisées par les commandes **egrep** ( grep -E ) et **awk**. | ||
+ | |||
+ | Les expressions régulières utilisent des caractères spéciaux. Certains caractères sont communs aux Erb et aux Ere : | ||
+ | |||
+ | ^Caractère spécial ^ Description ^ | ||
+ | | %%^%% | Trouver la chaîne au début de la ligne | | ||
+ | | $ | Trouver la chaîne à la fin de la ligne | | ||
+ | | \ | Annuler l' | ||
+ | | [ ] | Trouver n' | ||
+ | | [%%^%%] | Exclure les caractères entre crochets | | ||
+ | | . | Trouver n' | ||
+ | | * | Trouver 0 ou plus du caractère qui précède | | ||
+ | | \< | Trouver la chaîne au début d'un mot | | ||
+ | | \> | Trouver la chaîne à la fin d'un mot | | ||
+ | |||
+ | ====ERb==== | ||
+ | |||
+ | Certains caractères spéciaux sont spécifiques aux ERb : | ||
+ | |||
+ | ^Caractère spécial ^ Description ^ | ||
+ | | \{x,y\} | Trouver de **x** à **y** occurrences de ce qui précède | | ||
+ | | \{x\} | Trouver exactement le nombre **x** d' | ||
+ | | \{x,\} | Trouver le nombre **x** ou plus d' | ||
+ | | \(ERb) | Mémoriser une ERb | | ||
+ | | \1 | Rappeler la première ERb mémorisée | | ||
+ | | \2, \3 ... | Rappeler la deuxième ERb mémorisée, | ||
+ | |||
+ | ====ERe==== | ||
+ | |||
+ | Certains caractères spéciaux sont spécifiques aux ERe : | ||
+ | |||
+ | ^Caractère spécial ^ Description ^ | ||
+ | | ? | Trouver 0 ou 1 occurrence de ce qui précède | | ||
+ | | + | Trouver 1 ou **n** d' | ||
+ | | {x,y} | Trouver de **x** à **y** occurrences de ce qui précède | | ||
+ | | {x} | Trouver exactement le nombre **x** d' | ||
+ | | {x,} | Trouver le nombre **x** ou plus d' | ||
+ | | () | Faire un **ET** des expressions régulières entre les paranthèses | | ||
+ | | %%|%% | Faire un **OU** des expressions régulières se trouvant de chaque côté du pipe | | ||
+ | |||
+ | =====Outils de Manipulation de Fichiers Texte===== | ||
+ | |||
+ | ====Présentation des Commandes grep, egrep et fgrep==== | ||
+ | |||
+ | ===La commande grep=== | ||
+ | |||
+ | La commande grep peut être utilisée pour rechercher des lignes contenant une chaîne de caractères dans un jeu de fichiers. | ||
+ | |||
+ | Par défaut, la commande grep est sensible à la casse. Pour rendre cette commande insensible à la casse, il faut utiliser l' | ||
+ | |||
+ | La commande grep peut être aussi utilisée pour faire l' | ||
+ | |||
+ | La commande grep peut être utilisée avec des **Expressions Régulières basiques**. Ceci est utile pour rechercher dans le contenu de fichiers. | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===La Commande egrep=== | ||
+ | |||
+ | La commande **egrep** est identique à la commande **grep -E**. Dans les deux cas, l' | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===La Commande fgrep=== | ||
+ | |||
+ | La commande **fgrep** est identique à la commande **grep -F**. Dans les deux cas et par défaut la recherche concerne une chaîne de caractères interprétés dans un sens littéral sans utilisation de caractères spéciaux ni d' | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===LAB #12 - Utiliser grep, egrep et fgrep=== | ||
+ | |||
+ | Téléchargez le fichier **greptest** vers votre machine virtuelle en double-cliquant sur le titre ci-dessous : | ||
+ | |||
+ | <file - greptest> | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | Placez ce fichier dans le répertoire **/tmp** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# mv / | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne du fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne contenant au moins une lettre ou un chiffre : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez la présence de la ligne 555-5555. | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne contenant un numéro de téléphone au format NNN-NNNN : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | 555-5555 | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne contenant exactement un caractère : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | f | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne commençant par un point : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | .fenestros | ||
+ | .fe | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | La commande grep peut aussi être utilisée pour rechercher une chaîne dans tous les fichiers d'un répertoire spécifié : **grep -rnw ' | ||
+ | </ | ||
+ | |||
+ | Téléchargez le fichier **greptest** modifié vers votre machine virtuelle en double-cliquant sur le titre ci-dessous : | ||
+ | |||
+ | <file - greptest> | ||
+ | # Starting comment | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Another comment | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # End comment | ||
+ | </ | ||
+ | |||
+ | Placez ce fichier dans le répertoire **/tmp** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# mv / | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **grep** avec l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep -E -v ' | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **egrep** pour envoyer le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# egrep -v ' | ||
+ | [root@centos7 ~]# cat / | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Cette commande est particulièrement utile face à un fichier de configuration de plusieurs centaines de lignes dont certaines contiennent des directives activées d' | ||
+ | </ | ||
+ | |||
+ | Téléchargez le fichier **greptest** modifié vers votre machine virtuelle en double-cliquant sur le titre ci-dessous : | ||
+ | |||
+ | <file text greptest> | ||
+ | # Starting comment | ||
+ | ^ This line will be used to demonstrate the use of fgrep | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Another comment | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # End comment | ||
+ | </ | ||
+ | |||
+ | Placez ce fichier dans le répertoire **/tmp** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# mv / | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **fgrep** pour rechercher la ligne commençant par le caractère **^** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# fgrep ' | ||
+ | ^ voici une ligne pour la recherche fgrep | ||
+ | </ | ||
+ | |||
+ | Comparez le résultat ci-dessus avec celui de la commande grep : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | # Commentaire du début | ||
+ | ^ voici une ligne pour la recherche fgrep | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Un autre commentaire | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # Commentaire de la fin | ||
+ | </ | ||
+ | |||
+ | En effet, la ligne de commande en utilisant la commande grep devrait être : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# grep ' | ||
+ | ^ voici une ligne pour la recherche fgrep | ||
+ | </ | ||
+ | |||
+ | ====Présentation de la Commande sed==== | ||
+ | |||
+ | La commande **sed** ou //Stream EDitor// est un éditeur de texte non-intéractif. Les actions spécifiées par la commande sed sont exécutées par défaut sur chaque ligne du fichier. La commande sed ne modifie pas le fichier d' | ||
+ | |||
+ | Si plusieurs actions sont spécifiées dans la ligne de commande, chacune doit être précédée par l' | ||
+ | |||
+ | La syntaxe de la commande sed est la suivante : | ||
+ | |||
+ | < | ||
+ | sed [adresse] commande [arguments] | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | La syntaxe d'une adresse peut être : | ||
+ | |||
+ | ^adresse ^ Lignes concernées ^ | ||
+ | | a | La ligne numéro **a** | | ||
+ | | $ | La dernière ligne | | ||
+ | | /ERb/ | Les lignes qui correspondent à l'ERb | | ||
+ | | a,b | De la ligne numéro **a** jusqu' | ||
+ | | /ERb1/, /ERb2/ | Toutes les lignes entre la première occurrence correspondant à l'ERb1 jusqu' | ||
+ | |||
+ | Le commandes de sed sont : | ||
+ | |||
+ | ^commande ^ Description ^ | ||
+ | | d | Ne pas afficher la ou les ligne(s) | | ||
+ | | p | Afficher la ou les ligne(s) | | ||
+ | | s | Effectuer une substitution | | ||
+ | | w | Ecrire le ou les ligne(s) dans un fichier | | ||
+ | | = | Afficher le numéro de la ligne spécifiée | | ||
+ | | ! | Exécuter la commande ci-dessus sur toutes les lignes sauf celle spécifiées dans l' | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===LAB #13 - Utiliser la Commande sed=== | ||
+ | |||
+ | La commande **d** de sed permet de ne pas afficher certaines lignes à l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sed ' | ||
+ | # are included, only the more common ones. | ||
+ | # | ||
+ | # The latest IANA port assignments can be gotten from | ||
+ | # | ||
+ | # The Well Known Ports are those from 0 through 1023. | ||
+ | # The Registered Ports are those from 1024 through 49151 | ||
+ | # The Dynamic and/or Private Ports are those from 49152 through 65535 | ||
+ | # | ||
+ | # Each line describes one service, and is of the form: | ||
+ | # | ||
+ | # service-name | ||
+ | |||
+ | tcpmux | ||
+ | tcpmux | ||
+ | rje | ||
+ | rje | ||
+ | echo 7/tcp | ||
+ | echo 7/udp | ||
+ | discard | ||
+ | discard | ||
+ | systat | ||
+ | systat | ||
+ | daytime | ||
+ | --Plus-- | ||
+ | </ | ||
+ | |||
+ | Dans l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sed '/ | ||
+ | |||
+ | tcpmux | ||
+ | tcpmux | ||
+ | rje | ||
+ | rje | ||
+ | echo 7/tcp | ||
+ | echo 7/udp | ||
+ | discard | ||
+ | discard | ||
+ | systat | ||
+ | systat | ||
+ | daytime | ||
+ | daytime | ||
+ | qotd 17/ | ||
+ | qotd 17/ | ||
+ | msp | ||
+ | msp | ||
+ | chargen | ||
+ | chargen | ||
+ | ftp-data | ||
+ | ftp-data | ||
+ | ftp | ||
+ | ftp | ||
+ | --Plus-- | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que l'ERb est entourée des caractères / et /. | ||
+ | </ | ||
+ | |||
+ | La commande sed vous permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sed ' | ||
+ | root: | ||
+ | root: | ||
+ | bin: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que sed affiche également tout le contenu du fichier. Ceci implique que les lignes 1 et 2 s' | ||
+ | </ | ||
+ | |||
+ | Pour n' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sed -n ' | ||
+ | root: | ||
+ | bin: | ||
+ | </ | ||
+ | |||
+ | La commande **w** permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# sed -n '/ | ||
+ | [root@centos7 ~]# more / | ||
+ | |||
+ | tcpmux | ||
+ | tcpmux | ||
+ | rje | ||
+ | rje | ||
+ | echo 7/tcp | ||
+ | echo 7/udp | ||
+ | discard | ||
+ | discard | ||
+ | systat | ||
+ | systat | ||
+ | daytime | ||
+ | daytime | ||
+ | qotd 17/ | ||
+ | qotd 17/ | ||
+ | msp | ||
+ | msp | ||
+ | chargen | ||
+ | chargen | ||
+ | ftp-data | ||
+ | ftp-data | ||
+ | ftp | ||
+ | ftp | ||
+ | --Plus--(0%) | ||
+ | </ | ||
+ | |||
+ | La commande **s** permet de procéder à une substitution : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# echo " | ||
+ | [root@centos7 ~]# cat / | ||
+ | user1 user2 user3 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que dans cet exemple, la commande s est suivi par un argument qui prend la forme /ce qui est à remplacer (caractère, | ||
+ | </ | ||
+ | |||
+ | ====Présentation de La Commande awk==== | ||
+ | |||
+ | Le processeur de texte **awk** est un **filtre**. Une **action** awk est fournie sur la ligne de commande entourée de ' ou de " : | ||
+ | |||
+ | < | ||
+ | awk [-F séparateur] ' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Le couple critère {action} s' | ||
+ | </ | ||
+ | |||
+ | Dans le cas de l' | ||
+ | |||
+ | < | ||
+ | awk [-F séparateur] -f script [fichier1 ... fichiern] | ||
+ | </ | ||
+ | |||
+ | ===Découpage en champs=== | ||
+ | |||
+ | awk sait identifier les champs de la ligne soit parce que ceux-ci sont séparés par un espace ou par une tabulation soit parce que la ligne de commande lui a identifié le séparateur grâce à l' | ||
+ | |||
+ | awk stocke les informations de la ligne dans des variables : | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | $0 | Contient toute la ligne | | ||
+ | | $1, $2 ... | Contient le premier champ de la ligne, contient le deuxième champ de la ligne ... | | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ls -l | awk ' | ||
+ | |||
+ | 2015rootroot | ||
+ | 19: | ||
+ | 2015rootroot | ||
+ | 2015rootroot | ||
+ | </ | ||
+ | |||
+ | Comme vous pouvez constater, awk a extrait du résultat de la commande **ls -l** les champs **nom de l' | ||
+ | |||
+ | Afin de le rendre un peu plus lisible, saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ls -l | awk ' | ||
+ | | ||
+ | 2015 root root | ||
+ | 19:09 270 users | ||
+ | 2015 root root | ||
+ | 2015 root root | ||
+ | </ | ||
+ | |||
+ | ===Critères=== | ||
+ | |||
+ | Les **critères** conditionnent l' | ||
+ | |||
+ | Plusieurs types de critères sont possibles. Les plus utilisées sont les suivantes : | ||
+ | |||
+ | == Une expression régulière valide pour la ligne== | ||
+ | |||
+ | * Format: | ||
+ | * /expression régulière/ | ||
+ | * Exemple: | ||
+ | * /ERe/ {print $0} | ||
+ | |||
+ | ==Une expression régulière valide pour un champ== | ||
+ | |||
+ | * Format: | ||
+ | * $n ~/ | ||
+ | * $n!~/ | ||
+ | * Exemple: | ||
+ | * $1 ~/ERe/ {print $0} | ||
+ | * $1!~/ERe/ {print $0} | ||
+ | |||
+ | awk sélectionne des lignes en utilisant un opérateur de correspondance ou de non-correspondance : | ||
+ | |||
+ | ^ Opérateur ^ Condition ^ | ||
+ | | ~ | Correspondance | | ||
+ | | !~ | Non-correspondance | | ||
+ | |||
+ | ==Une comparaison== | ||
+ | |||
+ | * Format: | ||
+ | * $n opérateur critère de comparaison {action} | ||
+ | * Exemple: | ||
+ | * $1 > 20 {print $0} | ||
+ | |||
+ | Les opérateurs sont : | ||
+ | |||
+ | ^ Opérateur ^ Condition ^ | ||
+ | | < | Inférieur | | ||
+ | | %%<=%% | Inférieur ou égal | | ||
+ | | == | Egal | | ||
+ | | != | Différent | | ||
+ | | > | Supérieur | | ||
+ | | >= | Supérieur ou égal | | ||
+ | |||
+ | |||
+ | == Un opérateur logique== | ||
+ | |||
+ | * Format: | ||
+ | * test1 opérateur logique test2 {action} | ||
+ | * Exemple: | ||
+ | * $1 ~/ERe/ && $2 > 20 {print $0} | ||
+ | |||
+ | Les opérateurs sont : | ||
+ | |||
+ | ^ Opérateur logique ^ Condition ^ | ||
+ | | %%||%% | OU | | ||
+ | | && | ET | | ||
+ | | ! | NON | | ||
+ | |||
+ | ==Une variable interne== | ||
+ | |||
+ | * Format: | ||
+ | * expression1, | ||
+ | * Exemple: | ||
+ | * NR==7, NR==10 {print $0} | ||
+ | |||
+ | Les variables sont : | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | NR | Nombre total de lignes | | ||
+ | | NF | Nombre total de champs | | ||
+ | | FILENAME | Le nom du fichier en entrée | | ||
+ | | FS | Le séparateur de champs en entrée. Par défaut un **espace** ou une **tabulation** | | ||
+ | | RS | Le séparateur de lignes en entrée. Par défaut une **nouvelle ligne** | | ||
+ | | OFS | Le séparateur de champs en sortie. Par défaut un **espace** | | ||
+ | | ORS | Le séparateur de lignes en sortie. Par défaut une **nouvelle ligne** | | ||
+ | | OFMT | Le format numérique. Par défaut " | ||
+ | |||
+ | ===Scripts awk=== | ||
+ | |||
+ | Quand un programme awk comporte plusieurs **clauses** composées de **critères** et d' | ||
+ | |||
+ | * La section **BEGIN** | ||
+ | * Cette section est exécutée avant la lecture du script | ||
+ | * La section **principale** | ||
+ | * Cette section contient les clauses | ||
+ | * La section **END** | ||
+ | * Cette sectione est exécutée une fois à la fin du script | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cd /tmp | ||
+ | [root@centos7 tmp]# cat > scriptawk | ||
+ | BEGIN { | ||
+ | print "Liste des systèmes de fichiers montés" | ||
+ | {print $0} | ||
+ | END { | ||
+ | print " | ||
+ | [^D] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Dans l' | ||
+ | </ | ||
+ | |||
+ | Ensuite saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [root@centos7 tmp]# awk -f scriptawk /etc/fstab | ||
+ | Liste des systèmes de fichiers montés | ||
+ | |||
+ | # | ||
+ | # /etc/fstab | ||
+ | # Created by anaconda on Sun Mar 8 12:38:10 2015 | ||
+ | # | ||
+ | # Accessible filesystems, | ||
+ | # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info | ||
+ | # | ||
+ | UUID=b35de665-5ec8-4226-a533-58a1b567ac91 / | ||
+ | UUID=e8d3bd48-1386-411c-9675-41c3f8f1a309 /boot | ||
+ | UUID=11a4d11d-81e4-46a7-82e0-7796cd597dc9 swap swap defaults | ||
+ | ===================================== | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ===La Fonction printf=== | ||
+ | |||
+ | La fonction intégrée **printf** permet de formater des affichages. Elle a la syntaxe suivante : | ||
+ | |||
+ | < | ||
+ | printf (" | ||
+ | </ | ||
+ | |||
+ | **chaine** contient autant de formats qu'il y a d' | ||
+ | |||
+ | Les formats de printf sont, par exemple : | ||
+ | |||
+ | ^ Format ^ Description ^ | ||
+ | | %30s | Affichage d'une chaîne (s=string) sur 30 positions avec cadrage à droite | | ||
+ | | %-30s | Affichage d'une chaîne (s=string) sur 30 positions avec cadrage à gauche | | ||
+ | | %4d | Affichage d'un entier sur 4 positions avec cadrage à droite | | ||
+ | | %-4d | Affichage d'un entier sur 4 positions avec cadrage à gauche | | ||
+ | |||
+ | ===Structures de Contrôle=== | ||
+ | |||
+ | awk peut utiliser des structures de contrôle. | ||
+ | |||
+ | ==if== | ||
+ | |||
+ | La syntaxe de la commande if est la suivante : | ||
+ | |||
+ | < | ||
+ | if condition { | ||
+ | |||
+ | commande | ||
+ | commande | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | else { | ||
+ | |||
+ | commande | ||
+ | commande | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ou dans le cas d'une seule commande : | ||
+ | |||
+ | < | ||
+ | if condition | ||
+ | |||
+ | commande | ||
+ | |||
+ | else | ||
+ | |||
+ | commande | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==for== | ||
+ | |||
+ | La syntaxe de la structure de contrôle **for** est la suivante : | ||
+ | |||
+ | < | ||
+ | for variable in liste_variables { | ||
+ | |||
+ | commande | ||
+ | commande | ||
+ | ... | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ou dans le cas d'une seule commande : | ||
+ | |||
+ | < | ||
+ | for variable in liste_variables | ||
+ | |||
+ | commande | ||
+ | |||
+ | </ | ||
+ | |||
+ | ou dans le cas d'un tableau : | ||
+ | |||
+ | < | ||
+ | for clef dans tableau { | ||
+ | |||
+ | print clef , tableau[clef] | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==while== | ||
+ | |||
+ | La syntaxe de la structure de contrôle **while** est la suivante : | ||
+ | |||
+ | < | ||
+ | while condition { | ||
+ | |||
+ | | ||
+ | | ||
+ | ... | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==do-while== | ||
+ | |||
+ | La syntaxe de la structure de contrôle **do-while** est la suivante : | ||
+ | |||
+ | < | ||
+ | do { | ||
+ | |||
+ | | ||
+ | | ||
+ | ... | ||
+ | |||
+ | } while condition | ||
+ | </ | ||
+ | |||
+ | ===Options de la commande=== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===LAB #14 - Utiliser la Commande awk=== | ||
+ | |||
+ | Pour illustrer l' | ||
+ | |||
+ | <file text sales.txt> | ||
+ | # FenestrOs.com | ||
+ | # Annual sales by French department | ||
+ | # 83 | ||
+ | Desktops§100 | ||
+ | Portables§50 | ||
+ | Servers§21 | ||
+ | Ipads§4 | ||
+ | |||
+ | # 06 | ||
+ | Desktops§99 | ||
+ | Portables§60 | ||
+ | Servers§8 | ||
+ | Ipads§16 | ||
+ | |||
+ | # 13 | ||
+ | Desktops§130 | ||
+ | Portables§65 | ||
+ | Servers§12 | ||
+ | Ipads§56 | ||
+ | </ | ||
+ | |||
+ | Ce fichier contient des statistiques de vente par type de PC et par département. | ||
+ | |||
+ | Téléchargez maintenant le script awk **sales.awk** en cliquant sur le titre du fichier exemple ci-dessous : | ||
+ | |||
+ | <file text sales.awk> | ||
+ | # BEGIN | ||
+ | BEGIN { | ||
+ | FS=" | ||
+ | } | ||
+ | # TABLE | ||
+ | $1 !~ /^#/ && $1 !~ /^$/ { | ||
+ | sales[$1]+=$2 | ||
+ | } | ||
+ | # END | ||
+ | END { | ||
+ | for (pc in sales) | ||
+ | printf(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ce script comporte 13 lignes et a pour but de calculer le nombre total de PC vendus dans les trois départements cités dans le fichier **sales.txt** : | ||
+ | |||
+ | < | ||
+ | 1 # BEGIN | ||
+ | | ||
+ | | ||
+ | 4 } | ||
+ | 5 # TABLE | ||
+ | 6 $1 !~ /^#/ && $1 !~ /^$/ { | ||
+ | | ||
+ | 8 } | ||
+ | 9 # END | ||
+ | 10 END { | ||
+ | 11 for (pc in sales) | ||
+ | 12 printf(" | ||
+ | 13 } | ||
+ | </ | ||
+ | |||
+ | Dans ce script vous noterez : | ||
+ | |||
+ | * La ligne **3**, | ||
+ | * Cette ligne se trouve dans la section **BEGIN**. Elle spécifie le séparateur de champs. | ||
+ | * La ligne **6**, | ||
+ | * Cette ligne évite le traitement de toute ligne commençant par le caractère **#** ainsi que toute ligne vide. | ||
+ | * La ligne **7**, | ||
+ | * Ce tableau a pour clef la valeur de **$1**, c' | ||
+ | * La ligne **11**, | ||
+ | * Cette ligne démarre une boucle **for**.7 | ||
+ | * La ligne **12**, | ||
+ | * Cette ligne utilise **printf** afin d' | ||
+ | |||
+ | Appliquez maintenant votre script awk au fichier **sales.txt** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# awk -f / | ||
+ | PC Type : Portables Sales (06+13+83) : 175 | ||
+ | PC Type : Ipads Sales (06+13+83) : 76 | ||
+ | PC Type : Desktops Sales (06+13+83) : 329 | ||
+ | PC Type : Servers Sales (06+13+83) : 41 | ||
+ | </ | ||
+ | |||
+ | ====LAB #15 -Autres Commandes Utiles==== | ||
+ | |||
+ | ===15.1 - La Commande expand=== | ||
+ | |||
+ | La commande **expand** convertit des tabulations dans un fichier en espaces et envoie le résultat à la sortie standard. Sans fichier en argument ou avec le caractère **-**, la commande prend son entrée de l' | ||
+ | |||
+ | Téléchargez le fichier suivant : | ||
+ | |||
+ | <file text expand.txt> | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | </ | ||
+ | |||
+ | Déplacez le fichier vers /root : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# mv / | ||
+ | </ | ||
+ | |||
+ | Visualisez le fichier avec la commande cat : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat expand | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | un deux trois quatre cinq | ||
+ | </ | ||
+ | |||
+ | Utilisez les option **-vet** de la commande cat pour visualiser les caractères invisibles : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat -vet expand | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Comme vous pouvez constater, les tabulations sont représentées par ^I et les fins de lignes par $. | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **expand** pour convertir les tabulations en espaces en envoyant le résultat dans le fichier **expand1** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# expand expand > expand1 | ||
+ | </ | ||
+ | |||
+ | Visualisez le fichier avec la commande cat et les options **-vet** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat -vet expand1 | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Comme vous pouvez constater, les tabulations ont été converties en espaces. | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.2 - La Commande unexpand=== | ||
+ | |||
+ | La commande **unexpand** convertit des espaces dans un fichier en tabulations et envoie le résultat à la sortie standard. Sans fichier en argument ou avec le caractère **-**, la commande prend son entrée de l' | ||
+ | |||
+ | Utilisez la commande **unexpand** sur le fichier **expand1** et envoyez le résultat dans le fichier **expand2** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat -vet expand1 | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | un deux trois | ||
+ | [root@centos7 ~]# unexpand -a expand1 > expand2 | ||
+ | [root@centos7 ~]# cat -vet expand2 | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | un^Ideux^Itrois^Iquatre^Icinq$ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que les espaces ont été remplacés par des tabulations. | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.3 - La Commande cut=== | ||
+ | |||
+ | Chaque ligne est divisée en colonnes. Dans une ligne le premier caractère est dans la colonne numéro **un**, le deuxième dans la colonne deux et ainsi de suite. Dans une ligne il peut y avoir des champs séparés par des tabulations. | ||
+ | |||
+ | La commande **cut** permet de sélectionner des colonnes et des champs dans un fichier. La commande permet aussi d' | ||
+ | |||
+ | Par exemple, pour sélectionner les 7 premières colonnes du fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cut -c1-7 /etc/passwd | ||
+ | root:x: | ||
+ | bin:x:1 | ||
+ | daemon: | ||
+ | adm:x:3 | ||
+ | lp:x:4: | ||
+ | sync:x: | ||
+ | shutdow | ||
+ | halt:x: | ||
+ | mail:x: | ||
+ | operato | ||
+ | games:x | ||
+ | ftp:x:1 | ||
+ | nobody: | ||
+ | dbus:x: | ||
+ | polkitd | ||
+ | unbound | ||
+ | colord: | ||
+ | usbmuxd | ||
+ | avahi:x | ||
+ | avahi-a | ||
+ | saslaut | ||
+ | qemu:x: | ||
+ | libstor | ||
+ | rpc:x:3 | ||
+ | rpcuser | ||
+ | nfsnobo | ||
+ | rtkit:x | ||
+ | radvd:x | ||
+ | ntp:x:3 | ||
+ | chrony: | ||
+ | abrt:x: | ||
+ | pulse:x | ||
+ | gdm:x:4 | ||
+ | gnome-i | ||
+ | postfix | ||
+ | sshd:x: | ||
+ | tcpdump | ||
+ | trainee | ||
+ | vboxadd | ||
+ | tss:x:5 | ||
+ | </ | ||
+ | |||
+ | Pour sélectionner les colonnes 1 à 5, les colonnes 10 à 15 et les colonnes 30 et après, il convient d’utiliser la commande suivante : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cut -c1-5, | ||
+ | root: | ||
+ | bin: | ||
+ | daemo2: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdx: | ||
+ | halt: | ||
+ | mail: | ||
+ | operax: | ||
+ | games2: | ||
+ | ftp: | ||
+ | nobod99: | ||
+ | dbus:: | ||
+ | polki: | ||
+ | unbou:998:9 resolver:/ | ||
+ | color997: | ||
+ | usbmu: | ||
+ | avahi0: | ||
+ | avahioipd:x IPv4LL Stack:/ | ||
+ | saslax: | ||
+ | qemu: | ||
+ | libstemgmt: | ||
+ | rpc: | ||
+ | rpcus: | ||
+ | nfsno: | ||
+ | rtkit72: | ||
+ | radvd5: | ||
+ | ntp: | ||
+ | chron994: | ||
+ | abrt: | ||
+ | pulse71: | ||
+ | gdm: | ||
+ | gnometial-s::/ | ||
+ | postf: | ||
+ | sshd:: | ||
+ | tcpdu: | ||
+ | train: | ||
+ | vboxa: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | Pour sélectionner les champs 2, 4 et 6 du fichier, il convient d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cut -d: -f2,4,6 /etc/passwd | ||
+ | x:0:/root | ||
+ | x:1:/bin | ||
+ | x:2:/sbin | ||
+ | x: | ||
+ | x: | ||
+ | x:0:/sbin | ||
+ | x:0:/sbin | ||
+ | x:0:/sbin | ||
+ | x: | ||
+ | x:0:/root | ||
+ | x: | ||
+ | x: | ||
+ | x:99:/ | ||
+ | x:81:/ | ||
+ | x:998:/ | ||
+ | x: | ||
+ | x: | ||
+ | x:113:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:107:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:172:/proc | ||
+ | x:75:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:72:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.4 - La Commande uniq=== | ||
+ | |||
+ | La commande suivante permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cut -d: -f4 /etc/passwd | sort -n | uniq | ||
+ | 0 | ||
+ | 1 | ||
+ | 2 | ||
+ | 4 | ||
+ | 7 | ||
+ | 12 | ||
+ | 29 | ||
+ | 32 | ||
+ | 38 | ||
+ | 42 | ||
+ | 50 | ||
+ | 59 | ||
+ | 70 | ||
+ | 72 | ||
+ | 74 | ||
+ | 75 | ||
+ | 76 | ||
+ | 81 | ||
+ | 89 | ||
+ | 99 | ||
+ | 100 | ||
+ | 107 | ||
+ | 113 | ||
+ | 170 | ||
+ | 171 | ||
+ | 172 | ||
+ | 173 | ||
+ | 991 | ||
+ | 993 | ||
+ | 994 | ||
+ | 996 | ||
+ | 997 | ||
+ | 998 | ||
+ | 1000 | ||
+ | 65534 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.5 - La Commande tr=== | ||
+ | |||
+ | La commande **tr** permet de substituer des caractères pour d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat /etc/passwd | tr " | ||
+ | ROOT: | ||
+ | BIN: | ||
+ | DAEMON: | ||
+ | ADM: | ||
+ | LP: | ||
+ | SYNC: | ||
+ | SHUTDOWN: | ||
+ | HALT: | ||
+ | MAIL: | ||
+ | OPERATOR: | ||
+ | GAMES: | ||
+ | FTP: | ||
+ | NOBODY: | ||
+ | DBUS: | ||
+ | POLKITD: | ||
+ | UNBOUND: | ||
+ | COLORD: | ||
+ | USBMUXD: | ||
+ | AVAHI: | ||
+ | AVAHI-AUTOIPD: | ||
+ | SASLAUTH: | ||
+ | QEMU: | ||
+ | LIBSTORAGEMGMT: | ||
+ | RPC: | ||
+ | RPCUSER: | ||
+ | NFSNOBODY: | ||
+ | RTKIT: | ||
+ | RADVD: | ||
+ | NTP: | ||
+ | CHRONY: | ||
+ | ABRT: | ||
+ | PULSE: | ||
+ | GDM: | ||
+ | GNOME-INITIAL-SETUP: | ||
+ | POSTFIX: | ||
+ | SSHD: | ||
+ | TCPDUMP: | ||
+ | TRAINEE: | ||
+ | VBOXADD: | ||
+ | TSS: | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.6 - La Commande paste=== | ||
+ | |||
+ | La commande **paste** concatène les lignes de n fichiers. Par exemple : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# paste -d: /etc/passwd /etc/shadow | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | colord: | ||
+ | usbmuxd: | ||
+ | avahi: | ||
+ | avahi-autoipd: | ||
+ | saslauth: | ||
+ | qemu: | ||
+ | libstoragemgmt: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | rtkit: | ||
+ | radvd: | ||
+ | ntp: | ||
+ | chrony: | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.7 - La Commande split=== | ||
+ | |||
+ | La commande **split** est utilisée pour découper de grands fichiers en petit morceaux d'une taille fixe ou d'un nombre de lignes fixe. | ||
+ | |||
+ | Créez d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# dd if=/ | ||
+ | 250+0 records in | ||
+ | 250+0 records out | ||
+ | 262144000 bytes (262 MB) copied, 0.215447 s, 1.2 GB/s | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **split** pour diviser ce fichier en morceaux de 50 Mo : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# split -b 50m /file filepart | ||
+ | [root@centos7 ~]# ls -l | grep filepart | ||
+ | -rw-r--r--. | ||
+ | -rw-r--r--. | ||
+ | -rw-r--r--. | ||
+ | -rw-r--r--. | ||
+ | -rw-r--r--. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que cinq morceaux ont été créés dans le répertoire courant. Si aucune taille n'est spécifiée, | ||
+ | </ | ||
+ | |||
+ | Reconstruisez simplement le fichier avec la commande cat : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat fileparta* > newfile | ||
+ | [root@centos7 ~]# ls -l | grep newf | ||
+ | -rw-r--r--. | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.8 - La Commande diff=== | ||
+ | |||
+ | La commande **diff** indique les modifications à apporter à deux fichiers pour que ceux-ci soient identique. | ||
+ | |||
+ | Pour commencer, copiez le fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cp /etc/passwd /root | ||
+ | </ | ||
+ | |||
+ | Modifiez ensuite le fichier la ligne **trainee** du fichier / | ||
+ | |||
+ | < | ||
+ | ... | ||
+ | trainee10: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Supprimez la ligne **tcpdump** dans le fichier / | ||
+ | |||
+ | < | ||
+ | ... | ||
+ | Linux est super! | ||
+ | </ | ||
+ | |||
+ | Comparez maintenant les deux fichiers : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# diff /etc/passwd / | ||
+ | 38,39c38 | ||
+ | < trainee: | ||
+ | < vboxadd: | ||
+ | --- | ||
+ | > trainee10: | ||
+ | 40a40 | ||
+ | > Linux est super! | ||
+ | </ | ||
+ | |||
+ | Dans cette sortie on constate le caractère **<** et le caractère **>**. Le premier indique le premier fichier qui a suivi la commande **diff** tandis que le deuxième indique le deuxième fichier. | ||
+ | |||
+ | Le message **38, | ||
+ | |||
+ | Le message **40a40** indique qu'à la ligne 40 dans /etc/passwd il faut ajouter la ligne 40 de / | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.9 - La Commande cmp=== | ||
+ | |||
+ | La commande **cmp** compare les fichiers caractère par caractère. Par défaut la commande s' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cmp / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cmp -l / | ||
+ | cmp: EOF on / | ||
+ | 1873 61 72 | ||
+ | 1874 60 170 | ||
+ | 1876 170 61 | ||
+ | 1877 72 60 | ||
+ | 1878 61 60 | ||
+ | 1880 60 72 | ||
+ | 1881 60 61 | ||
+ | 1882 72 60 | ||
+ | 1883 61 60 | ||
+ | 1885 60 72 | ||
+ | 1886 60 164 | ||
+ | 1887 72 162 | ||
+ | 1888 164 141 | ||
+ | 1889 162 151 | ||
+ | 1890 141 156 | ||
+ | 1891 151 145 | ||
+ | 1892 156 145 | ||
+ | 1893 145 72 | ||
+ | 1894 145 57 | ||
+ | 1895 72 150 | ||
+ | 1896 57 157 | ||
+ | 1897 150 155 | ||
+ | 1898 157 145 | ||
+ | 1899 155 57 | ||
+ | 1900 145 164 | ||
+ | 1901 57 162 | ||
+ | 1902 164 141 | ||
+ | 1903 162 151 | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | La première colonne représente le numéro de caractère, la deuxième la valeur octale ASCII du caractère dans le fichier / | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.10 - La commande patch=== | ||
+ | |||
+ | La commande **patch** est utilisée pour appliquer des modifications à un fichier à partir d'un fichier patch qui contient les différences entre le contenu de l' | ||
+ | |||
+ | La commande patch n'est pas installée par défaut sous RHEL/CentOS 7 : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# yum install patch | ||
+ | Loaded plugins: fastestmirror, | ||
+ | Loading mirror speeds from cached hostfile | ||
+ | * base: mirror.ibcp.fr | ||
+ | * extras: mirrors.atosworldline.com | ||
+ | * updates: mirror.ibcp.fr | ||
+ | Resolving Dependencies | ||
+ | --> Running transaction check | ||
+ | ---> Package patch.x86_64 0: | ||
+ | --> Finished Dependency Resolution | ||
+ | |||
+ | Dependencies Resolved | ||
+ | |||
+ | ====================================================================================================================================================== | ||
+ | | ||
+ | ====================================================================================================================================================== | ||
+ | Installing: | ||
+ | | ||
+ | |||
+ | Transaction Summary | ||
+ | ====================================================================================================================================================== | ||
+ | Install | ||
+ | |||
+ | Total download size: 110 k | ||
+ | Installed size: 210 k | ||
+ | Is this ok [y/d/N]: y | ||
+ | Downloading packages: | ||
+ | patch-2.7.1-8.el7.x86_64.rpm | ||
+ | Running transaction check | ||
+ | Running transaction test | ||
+ | Transaction test succeeded | ||
+ | Running transaction | ||
+ | Installing : patch-2.7.1-8.el7.x86_64 | ||
+ | Verifying | ||
+ | |||
+ | Installed: | ||
+ | patch.x86_64 0: | ||
+ | |||
+ | Complete! | ||
+ | </ | ||
+ | |||
+ | Rappelez-vous maintenant des modifications apportées au fichier / | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat / | ||
+ | # Commentaire du début | ||
+ | ^ voici une ligne pour la recherche fgrep | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Un autre commentaire | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # Commentaire de la fin | ||
+ | [root@centos ~]# cat / | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | Afin de créer un fichier de patch, il convient d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cd /tmp | ||
+ | [root@centos7 tmp]# diff -u greptest greptest1 > greptest.patch | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos7 tmp]# cat greptest.patch | ||
+ | --- greptest 2012-05-13 15: | ||
+ | +++ greptest1 2012-05-13 15: | ||
+ | @@ -1,14 +1,7 @@ | ||
+ | -# Commentaire du début | ||
+ | -^ voici une ligne pour la recherche fgrep | ||
+ | | ||
+ | | ||
+ | -# Un autre commentaire | ||
+ | | ||
+ | f | ||
+ | - | ||
+ | | ||
+ | - | ||
+ | .fe | ||
+ | - | ||
+ | £ | ||
+ | -# Commentaire de la fin | ||
+ | </ | ||
+ | |||
+ | Procédez maintenant à l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 tmp]# patch < greptest.patch | ||
+ | patching file greptest | ||
+ | </ | ||
+ | |||
+ | Contrôlez maintenant le contenu du fichier **greptest** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 tmp]# cat greptest | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.11 - La commande strings=== | ||
+ | |||
+ | La commande **strings** est utilisée pour trouver toutes les chaînes de caractères qui peuvent être imprimés dans un ou plusieurs fichiers objets ou exécutables passés en argument. Un fichier objet est un fichier intermédiaire intervenant dans le processus de compilation. | ||
+ | |||
+ | Sous Linux et Unix, le format d'un fichier objet est le format **ELF**, (// | ||
+ | |||
+ | * les exécutables, | ||
+ | * les bibliothèques partagés, | ||
+ | * les core dumps. | ||
+ | |||
+ | Sans option, la commande **strings** trouve toutes les chaînes d'une longueur de 4 caractères ou plus suivies par un caractère non-imprimable : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# strings / | ||
+ | / | ||
+ | {1~` | ||
+ | libuser.so.1 | ||
+ | g_value_get_int64 | ||
+ | is_selinux_enabled | ||
+ | _ITM_deregisterTMCloneTable | ||
+ | g_free | ||
+ | g_value_array_get_nth | ||
+ | __gmon_start__ | ||
+ | g_value_get_string | ||
+ | g_type_check_value_holds | ||
+ | g_value_get_long | ||
+ | _Jv_RegisterClasses | ||
+ | freecon | ||
+ | _ITM_registerTMCloneTable | ||
+ | lu_ent_set_string | ||
+ | lu_ent_get_first_value_strdup | ||
+ | lu_error_free | ||
+ | lu_user_lock | ||
+ | _fini | ||
+ | _init | ||
+ | lu_strerror | ||
+ | lu_ent_free | ||
+ | lu_ent_new | ||
+ | lu_user_modify | ||
+ | lu_prompt_console | ||
+ | lu_start | ||
+ | lu_user_lookup_name | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# strings -t d / | ||
+ | 568 / | ||
+ | 648 {1~` | ||
+ | 2833 libuser.so.1 | ||
+ | 2846 g_value_get_int64 | ||
+ | 2864 is_selinux_enabled | ||
+ | 2883 _ITM_deregisterTMCloneTable | ||
+ | 2911 g_free | ||
+ | 2918 g_value_array_get_nth | ||
+ | 2940 __gmon_start__ | ||
+ | 2955 g_value_get_string | ||
+ | 2974 g_type_check_value_holds | ||
+ | 2999 g_value_get_long | ||
+ | 3016 _Jv_RegisterClasses | ||
+ | 3036 freecon | ||
+ | 3044 _ITM_registerTMCloneTable | ||
+ | 3070 lu_ent_set_string | ||
+ | 3088 lu_ent_get_first_value_strdup | ||
+ | 3118 lu_error_free | ||
+ | 3132 lu_user_lock | ||
+ | 3145 _fini | ||
+ | 3151 _init | ||
+ | 3157 lu_strerror | ||
+ | 3169 lu_ent_free | ||
+ | 3181 lu_ent_new | ||
+ | 3192 lu_user_modify | ||
+ | 3207 lu_prompt_console | ||
+ | 3225 lu_start | ||
+ | 3234 lu_user_lookup_name | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ^ Argument ^ Système de Numérotation ^ | ||
+ | | d | Décimal | | ||
+ | | o | Octal | | ||
+ | | x | Héxadécimal | | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# strings -t d -n 15 / | ||
+ | 568 / | ||
+ | 2846 g_value_get_int64 | ||
+ | 2864 is_selinux_enabled | ||
+ | 2883 _ITM_deregisterTMCloneTable | ||
+ | 2918 g_value_array_get_nth | ||
+ | 2955 g_value_get_string | ||
+ | 2974 g_type_check_value_holds | ||
+ | 2999 g_value_get_long | ||
+ | 3016 _Jv_RegisterClasses | ||
+ | 3044 _ITM_registerTMCloneTable | ||
+ | 3070 lu_ent_set_string | ||
+ | 3088 lu_ent_get_first_value_strdup | ||
+ | 3207 lu_prompt_console | ||
+ | 3234 lu_user_lookup_name | ||
+ | 3261 lu_ent_set_long | ||
+ | 3303 lu_user_removepass | ||
+ | 3322 libgobject-2.0.so.0 | ||
+ | 3342 libglib-2.0.so.0 | ||
+ | 3372 poptSetOtherOptionHelp | ||
+ | 3464 poptHelpOptions | ||
+ | 3503 audit_log_acct_message | ||
+ | 3599 libpam_misc.so.0 | ||
+ | 3640 audit_log_user_avc_message | ||
+ | 3667 audit_log_user_message | ||
+ | 3690 libselinux.so.1 | ||
+ | 3706 selinux_set_callback | ||
+ | 3727 selinux_check_access | ||
+ | 3759 libpthread.so.0 | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | Dans le cas de l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# strings -f /bin/* | grep " | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/csh: @(#) Copyright (c) 1991 The Regents of the University of California. | ||
+ | / | ||
+ | /bin/drill: Copyright (c) 2004-2008 NLnet Labs. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/gprof: @(#) Copyright (c) 1983 Regents of the University of California. | ||
+ | /bin/hpijs: Copyright (c) 2001-2004, Hewlett-Packard Co. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/orca: __copyright__ = " | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/ping: @(#) Copyright (c) 1989 The Regents of the University of California. | ||
+ | /bin/ping6: @(#) Copyright (c) 1989 The Regents of the University of California. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/tcsh: @(#) Copyright (c) 1991 The Regents of the University of California. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/zip: ight (c)H | ||
+ | /bin/zip: Copyright (c) 1990-2008 Info-ZIP. | ||
+ | /bin/zip: Copyright (c) 1990-2008 Info-ZIP - Type '%s " | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que l' | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.12 - La commande comm=== | ||
+ | |||
+ | La commande **comm** est utilisée pour comparer deux fichiers texte. La sortie de la commande sépare les lignes en trois catégories : | ||
+ | |||
+ | * Les lignes présentes seulement dans le premier fichier, | ||
+ | * Les lignes présentes seulement dans le deuxième fichier, | ||
+ | * Les lignes présentes dans la deux fichiers. | ||
+ | |||
+ | Utilisez la commande **comm** pour comparer les fichiers **/ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# comm /etc/passwd / | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | colord: | ||
+ | usbmuxd: | ||
+ | avahi: | ||
+ | avahi-autoipd: | ||
+ | saslauth: | ||
+ | qemu: | ||
+ | libstoragemgmt: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | rtkit: | ||
+ | radvd: | ||
+ | ntp: | ||
+ | chrony: | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee10: | ||
+ | trainee: | ||
+ | tss: | ||
+ | comm: file 2 is not in sorted order | ||
+ | Linux est super! | ||
+ | vboxadd: | ||
+ | comm: file 1 is not in sorted order | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | Pour afficher uniquement les lignes présentes dans les deux fichiers, il convient d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# comm -12 /etc/passwd / | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | colord: | ||
+ | usbmuxd: | ||
+ | avahi: | ||
+ | avahi-autoipd: | ||
+ | saslauth: | ||
+ | qemu: | ||
+ | libstoragemgmt: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | rtkit: | ||
+ | radvd: | ||
+ | ntp: | ||
+ | chrony: | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | comm: file 2 is not in sorted order | ||
+ | comm: file 1 is not in sorted order | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.13 - La commande head=== | ||
+ | |||
+ | La commande **head** permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# head /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | </ | ||
+ | |||
+ | Avec l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# head -n 15 /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | </ | ||
+ | |||
+ | La commande **head** peut également être utilisée pour afficher les premiers **y** octets en utilisant l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# head -c 150 /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | </ | ||
+ | |||
+ | Dans le cas où le **y** est négatif, la commande **head** affiche tous les octets du fichier sauf les derniers **y** octets : | ||
+ | |||
+ | < | ||
+ | lp: | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | colord: | ||
+ | usbmuxd: | ||
+ | avahi: | ||
+ | avahi-autoipd: | ||
+ | saslauth: | ||
+ | qemu: | ||
+ | libstoragemgmt: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | rtkit: | ||
+ | radvd: | ||
+ | ntp: | ||
+ | chrony: | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | </ | ||
+ | |||
+ | Les valeurs **x** et **y** acceptent des multiplicateurs : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# head -c 1b /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | [root@centos7 ~]# head -c 512 /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | </ | ||
+ | |||
+ | Les multiplicateurs les plus utilisés sont : | ||
+ | |||
+ | ^ Multiplicateur ^ Valeur en octets ^ | ||
+ | | b | 512 | | ||
+ | | KB | 1000 | | ||
+ | | K | 1024 | | ||
+ | | MB | 1000*1000 | | ||
+ | | M | 1024*1024 | | ||
+ | | GB | 1000*1000*1000 | | ||
+ | | G | 1024*1024*1024 | | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===15.14 - La commande tail=== | ||
+ | |||
+ | La commande **tail** permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail /etc/passwd | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | Avec l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail -n 15 /etc/passwd | ||
+ | nfsnobody: | ||
+ | rtkit: | ||
+ | radvd: | ||
+ | ntp: | ||
+ | chrony: | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | La commande **tail** peut également être utilisée pour afficher les derniers **y** octets en utilisant l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail -c 150 /etc/passwd | ||
+ | bash | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | Dans le cas où le **y** est positif, la commande **tail** affiche tous les octets du fichier à partir de la position de **y**ième octet : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail -c +150 /etc/passwd | ||
+ | 7: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | colord: | ||
+ | usbmuxd: | ||
+ | avahi: | ||
+ | avahi-autoipd: | ||
+ | saslauth: | ||
+ | qemu: | ||
+ | libstoragemgmt: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | rtkit: | ||
+ | radvd: | ||
+ | ntp: | ||
+ | chrony: | ||
+ | abrt: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | Les valeurs **x** et **y** acceptent des multiplicateurs : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail -c 1b /etc/passwd | ||
+ | PulseAudio System Daemon:/ | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | [root@centos7 ~]# tail -c 512 /etc/passwd | ||
+ | PulseAudio System Daemon:/ | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | tss: | ||
+ | </ | ||
+ | |||
+ | Les multiplicateurs les plus utilisés sont : | ||
+ | |||
+ | ^ Multiplicateur ^ Valeur en octets ^ | ||
+ | | b | 512 | | ||
+ | | KB | 1000 | | ||
+ | | K | 1024 | | ||
+ | | MB | 1000*1000 | | ||
+ | | M | 1024*1024 | | ||
+ | | GB | 1000*1000*1000 | | ||
+ | | G | 1024*1024*1024 | | ||
+ | |||
+ | Une option intéressante pour la surveillance des fichiers de journalisation est **-f**. Cette option met à jour l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# tail -f / | ||
+ | Oct 19 15:58:06 centos7 dbus-daemon: | ||
+ | Oct 19 15:58:06 centos7 dbus[542]: [system] Activating service name=' | ||
+ | Oct 19 15:58:06 centos7 dbus-daemon: | ||
+ | Oct 19 15:58:06 centos7 dbus[542]: [system] Successfully activated service ' | ||
+ | Oct 19 16:00:01 centos7 systemd: Created slice user-0.slice. | ||
+ | Oct 19 16:00:01 centos7 systemd: Starting Session 17 of user root. | ||
+ | Oct 19 16:00:01 centos7 systemd: Started Session 17 of user root. | ||
+ | Oct 19 16:01:01 centos7 systemd: Created slice user-0.slice. | ||
+ | Oct 19 16:01:01 centos7 systemd: Starting Session 18 of user root. | ||
+ | Oct 19 16:01:01 centos7 systemd: Started Session 18 of user root. | ||
+ | ^C | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====LAB #16 - Utiliser les commandes ifconfig, grep, tr et cut pour isoler l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ifconfig enp0s3 | ||
+ | enp0s3: flags=4163< | ||
+ | inet 10.0.2.15 | ||
+ | inet6 fe80:: | ||
+ | ether 08: | ||
+ | RX packets 7462 bytes 6158140 (5.8 MiB) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 4130 bytes 555287 (542.2 KiB) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | |||
+ | [root@centos7 ~]# ifconfig enp0s3 | grep " | ||
+ | inet 10.0.2.15 | ||
+ | inet6 fe80:: | ||
+ | |||
+ | [root@centos7 ~]# ifconfig enp0s3 | grep " | ||
+ | inet 10.0.2.15 | ||
+ | |||
+ | [root@centos7 ~]# ifconfig enp0s3 | grep " | ||
+ | : | ||
+ | |||
+ | [root@centos7 ~]# ifconfig enp0s3 | grep " | ||
+ | 10.0.2.15 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ====LAB #17 - Utiliser les commandes ip, grep, awk et sed pour isoler l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ip addr show enp0s3 | ||
+ | 2: enp0s3: < | ||
+ | link/ether 08: | ||
+ | inet 10.0.2.15/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | |||
+ | [root@centos7 ~]# ip addr show enp0s3 | grep " | ||
+ | inet 10.0.2.15/ | ||
+ | inet6 fe80:: | ||
+ | |||
+ | [root@centos7 ~]# ip addr show enp0s3 | grep " | ||
+ | inet 10.0.2.15/ | ||
+ | |||
+ | [root@centos7 ~]# ip addr show enp0s3 | grep " | ||
+ | 10.0.2.15/ | ||
+ | |||
+ | [root@centos7 ~]# ip addr show enp0s3 | grep " | ||
+ | 10.0.2.15 | ||
+ | </ | ||
+ | |||
+ | =====Le Shell===== | ||
+ | |||
+ | Un shell est un **interpréteur de commandes** ou en anglais un** Command Line Interpreter (C.L.I)**. Il est utilisé comme interface pour donner des instructions ou **commandes** au système d' | ||
+ | |||
+ | Le mot shell est générique. Il existe de nombreux shells dans le monde Unix, par exemple : | ||
+ | |||
+ | ^ Shell ^ Nom ^ Date de Sortie ^ Inventeur ^ Commande ^ Commentaires ^ | ||
+ | | tsh | Thompson Shell | 1971 | Ken Thompson | sh | Le premier shell | | ||
+ | | sh | Bourne Shell | 1977 | Stephen Bourne | sh | Le shell commun à tous les Unix. Sous RHEL/CentOS 7 : /usr/bin/sh | | ||
+ | | csh | C-Shell | 1978 | Bill Joy | csh | Le shell BSD. Sous RHEL/CentOS 7 : / | ||
+ | | tcsh | Tenex C-Shell | 1979 | Ken Greer | tcsh | Un dérivé du shell csh. Sous RHEL/CentOS 7 : / | ||
+ | | ksh | Korn Shell | 1980 | David Korn | ksh | Uniquement libre depuis 2005. Sous RHEL/CentOS 7 : / | ||
+ | | bash | Bourne Again Shell | 1987 | Brian Fox | bash | Le shell par défaut de Linux et de MacOS X. Sous RHEL/CentOS 7 : / | ||
+ | | zsh | Z Shell | 1990 | Paul Falstad | zsh | Zsh est plutôt orienté pour l' | ||
+ | |||
+ | Sous RHEL/CentOS 7 le shell **/bin/sh** est un lien symbolique vers **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls -l /bin/sh | ||
+ | lrwxrwxrwx. 1 root root 4 30 sept. 06:01 /bin/sh -> bash | ||
+ | </ | ||
+ | |||
+ | =====Le Shell / | ||
+ | |||
+ | Ce module concerne l' | ||
+ | |||
+ | * Rappeler des commandes | ||
+ | * Générer la fin de noms de fichiers | ||
+ | * Utiliser des alias | ||
+ | * Utiliser les variables tableaux | ||
+ | * Utiliser les variables numériques et l' | ||
+ | * Gérer des chaînes de caractères | ||
+ | * Utiliser les fonctions | ||
+ | |||
+ | Une commande commence toujours par un mot clef. Ce mot clef est interprété par le shell selon le type de commande et dans l' | ||
+ | |||
+ | - Les alias | ||
+ | - Les fonctions | ||
+ | - Les commandes internes au shell | ||
+ | - Les commandes externes au shell | ||
+ | |||
+ | ====Les Commandes Internes et Externes au shell==== | ||
+ | |||
+ | Les commandes internes au shell sont des commandes telles **cd**. Pour vérifier le type de commande, il faut utiliser la commande **type** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ type cd | ||
+ | cd is a shell builtin | ||
+ | </ | ||
+ | |||
+ | Les commandes externes au shell sont des binaires exécutables ou des scripts, généralement situés dans /bin, /sbin, /usr/bin ou /usr/sbin : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ type passwd | ||
+ | passwd is / | ||
+ | </ | ||
+ | |||
+ | ====Les alias==== | ||
+ | |||
+ | Les alias sont des noms permettant de désigner une commande ou une suite de commandes et ne sont spécifiques qu'au shell qui les a créés ainsi qu'à l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ type ls | ||
+ | ls is aliased to `ls --color=auto' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que dans ce cas l' | ||
+ | </ | ||
+ | |||
+ | Un alias se définit en utilisant la commande **alias** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ alias dir=' | ||
+ | [trainee@centos7 ~]$ dir | ||
+ | total 4 | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee 442 29 sept. 00:53 vitext | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que la commande **dir** existe vraiment. Le fait de créer un alias qui s' | ||
+ | </ | ||
+ | |||
+ | La liste des alias définis peut être visualisée en utilisant la commande **alias** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ alias | ||
+ | alias dir=' | ||
+ | alias egrep=' | ||
+ | alias fgrep=' | ||
+ | alias grep=' | ||
+ | alias l.='ls -d .* --color=auto' | ||
+ | alias ll='ls -l --color=auto' | ||
+ | alias ls='ls --color=auto' | ||
+ | alias vi=' | ||
+ | alias which=' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que cette liste contient, sans distinction, | ||
+ | </ | ||
+ | |||
+ | Pour forcer l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ \dir | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Pour supprimer un alias, il convient d' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ unalias dir | ||
+ | [trainee@centos7 ~]$ dir | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Le shell des utilisateurs est défini par **root** dans le dernier champs du fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | avahi-autoipd: | ||
+ | systemd-bus-proxy: | ||
+ | systemd-network: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | abrt: | ||
+ | usbmuxd: | ||
+ | colord: | ||
+ | libstoragemgmt: | ||
+ | setroubleshoot: | ||
+ | rpc: | ||
+ | rtkit: | ||
+ | chrony: | ||
+ | unbound: | ||
+ | tss: | ||
+ | geoclue: | ||
+ | ntp: | ||
+ | sssd: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | avahi: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | named: | ||
+ | </ | ||
+ | |||
+ | Cependant l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat /etc/shells | ||
+ | /bin/sh | ||
+ | /bin/bash | ||
+ | / | ||
+ | /usr/bin/sh | ||
+ | / | ||
+ | / | ||
+ | /bin/tcsh | ||
+ | /bin/csh | ||
+ | </ | ||
+ | |||
+ | Ensuite utilisez la commande **echo** pour afficher le shell actuel de **trainee** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo $SHELL | ||
+ | /bin/bash | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez sous RHEL/CentOS 7 que le système nous informe que le shell courant de l' | ||
+ | </ | ||
+ | |||
+ | Changez ensuite le shell de **trainee** en utilisant la commande **chsh** en indiquant la valeur de **/bin/sh** pour le nouveau shell : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ chsh | ||
+ | Changing shell for trainee. | ||
+ | New shell [/ | ||
+ | Password: trainee | ||
+ | Shell changed. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le mot de passe saisi ne sera **pas** visible. | ||
+ | </ | ||
+ | |||
+ | Vérifiez ensuite le shell actif pour **trainee** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo $SHELL | ||
+ | /bin/bash | ||
+ | </ | ||
+ | |||
+ | Dernièrement contrôlez le shell stipulé dans le fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat /etc/passwd | grep trainee | ||
+ | trainee: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Vous noterez que le shell actif est toujours **/ | ||
+ | </ | ||
+ | |||
+ | Modifiez votre shell à **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ chsh | ||
+ | Changing shell for trainee. | ||
+ | New shell [/bin/sh]: /bin/bash | ||
+ | Password: trainee | ||
+ | Shell changed. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le mot de passe saisi ne sera **pas** visible. | ||
+ | </ | ||
+ | |||
+ | ====Le Prompt==== | ||
+ | |||
+ | Le prompt d'un utilisateur dépend de son statut : | ||
+ | |||
+ | * **$** pour un utilisateur normal, | ||
+ | * **#** pour root. | ||
+ | |||
+ | ==== Rappeler des Commandes ==== | ||
+ | |||
+ | Le shell **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ history | more | ||
+ | 1 su - | ||
+ | 2 df -h | ||
+ | 3 su - | ||
+ | 4 exit | ||
+ | 5 su - | ||
+ | 6 su - | ||
+ | 7 vi vitext | ||
+ | 8 view vitext | ||
+ | 9 vi vitext | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important**: | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ^ Caractère de Contrôle | ||
+ | | [CTRL]-[P] (= flèche vers le haut) | Rappelle la commande précédente | ||
+ | | [CTRL]-[N] (= flèche vers le bas) | Rappelle la commande suivante | ||
+ | |||
+ | Pour se déplacer dans la ligne de l' | ||
+ | |||
+ | ^ Caractère de Contrôle | ||
+ | | [CTRL]-[A] | Se déplacer au début de la ligne | | ||
+ | | [CTRL]-[E] | Se déplacer à la fin de la ligne | | ||
+ | | [CTRL]-[B] | Se déplacer un caractère à gauche | | ||
+ | | [CTRL]-[F] | Se déplacer un caractère à droite | | ||
+ | | [CTRL]-[D] | Supprimer le caractère sous le curseur | | ||
+ | |||
+ | Pour rechercher dans l' | ||
+ | |||
+ | ^ Caractère de Contrôle | ||
+ | | [CTRL]-[R] // | ||
+ | | [CTRL]-[S] // | ||
+ | | [CTRL]-[G] | Sortir du mode recherche | | ||
+ | |||
+ | Il est aussi possible de rappeler la dernière commande de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | [trainee@centos7 ~]$ !! | ||
+ | ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Vous pouvez rappeler une commande spécifique de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ !123 | ||
+ | ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Le paramétrage de la fonction du rappel des commandes est fait pour tous les utilisateurs dans le fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat / | ||
+ | HISTSIZE=1000 | ||
+ | export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL | ||
+ | </ | ||
+ | |||
+ | Vous noterez que dans le cas précédent, | ||
+ | |||
+ | Les commandes mémorisées sont stockées dans le fichier **~/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ nl .bash_history | more | ||
+ | 1 su - | ||
+ | 2 df -h | ||
+ | 3 su - | ||
+ | | ||
+ | 5 su - | ||
+ | 6 su - | ||
+ | 7 vi vitext | ||
+ | | ||
+ | 9 vi vitext | ||
+ | 10 locale | ||
+ | 11 LANG=en_GB.UTF-8 | ||
+ | 12 export LANG | ||
+ | 13 locale | ||
+ | 14 vi vitext | ||
+ | 15 vi .exrc | ||
+ | 16 vi vitext | ||
+ | 17 clear | ||
+ | 18 stty -a | ||
+ | 19 date | ||
+ | 20 locale | ||
+ | 21 who | ||
+ | 22 df | ||
+ | 23 df -h | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ====Générer les fins de noms de fichiers==== | ||
+ | |||
+ | Le shell /bin/bash permet la génération des fins de noms de fichiers. Celle-ci est accomplie grâce à l' | ||
+ | |||
+ | $ ls .b [Tab][Tab][Tab] | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls .bash | ||
+ | .bash_history | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez qu'en appuyant sur la touche < | ||
+ | </ | ||
+ | |||
+ | La même possibilité existe pour la génération des fins de noms de commandes. Dans ce cas saisissez la commande suivante : | ||
+ | |||
+ | $ mo [Tab][Tab] | ||
+ | |||
+ | Appuyez sur la touche < | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ mo | ||
+ | mobj_dump | ||
+ | modifyrepo | ||
+ | modinfo | ||
+ | modprobe | ||
+ | </ | ||
+ | |||
+ | ==== Le shell interactif ==== | ||
+ | |||
+ | Lors de l' | ||
+ | |||
+ | ^ Caractère Spéciaux ^ Description ^ | ||
+ | | ***** | Représente 0 ou plus de caractères | | ||
+ | | **?** | Représente un caractère | | ||
+ | | **[abc]** | Représente un caractère parmi ceux entre crochets | | ||
+ | | **[!abc]** | Représente un caractère ne trouvant pas parmi ceux entre crochets | | ||
+ | | **? | ||
+ | | ***(expression1|expression2| ...)** | Représente 0 à x fois l' | ||
+ | | **+(expression1|expression2| ...)** | Représente 1 à x fois l' | ||
+ | | **@(expression1|expression2| ...)** | Représente 1 fois l' | ||
+ | | **!(expression1|expression2| ...)** | Représente 0 fois l' | ||
+ | |||
+ | ===Caractère *=== | ||
+ | |||
+ | Dans votre répertoire individuel, créez un répertoire **training**. Ensuite créez dans ce répertoire 5 fichiers nommés respectivement f1, f2, f3, f4 et f5 : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ mkdir training | ||
+ | [trainee@centos7 ~]$ cd training | ||
+ | [trainee@centos7 training]$ touch f1 f2 f3 f4 f5 | ||
+ | </ | ||
+ | |||
+ | Afin de démontrer l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo f* | ||
+ | f1 f2 f3 f4 f5 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le caractère ***** remplace un caractère ou une suite de caractères. | ||
+ | </ | ||
+ | |||
+ | ===Caractère ?=== | ||
+ | |||
+ | Créez maintenant les fichiers f52 et f62 : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ touch f52 f62 | ||
+ | </ | ||
+ | |||
+ | Saisissez ensuite la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo f?2 | ||
+ | f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le caractère **?** remplace **un seul** caractère. | ||
+ | </ | ||
+ | |||
+ | ===Caractères [ ]=== | ||
+ | |||
+ | L' | ||
+ | |||
+ | ^ Joker ^ Description ^ | ||
+ | | [xyz] | Représente le caractère x ou y ou z | | ||
+ | | [m-t] | Représente le caractère m ou n .... t | | ||
+ | | [!xyz] | Représente un caractère autre que x ou y ou z | | ||
+ | | [!m-t] | Représente un caractère autre que m ou n .... t | | ||
+ | |||
+ | Afin de démontrer l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ touch a100 | ||
+ | </ | ||
+ | |||
+ | Ensuite saisissez les commandes suivantes et notez le résultat : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [a-f]* | ||
+ | a100 f1 f2 f3 f4 f5 f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que tous les fichiers commençant par les lettres **a**, **b**, **c**, **d**, **e** ou **f** sont affichés à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [af]* | ||
+ | a100 f1 f2 f3 f4 f5 f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que tous les fichiers commençant par les lettres **a** ou **f** sont affichés à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [!a]* | ||
+ | f1 f2 f3 f4 f5 f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que tous les fichiers sont affichés à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [a-b]* | ||
+ | a100 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que seul le fichier commençant par la lettre **a** est affiché à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [a-f] | ||
+ | [a-f] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que dans ce cas, il n' | ||
+ | </ | ||
+ | |||
+ | ====L' | ||
+ | |||
+ | Activez l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ shopt -s extglob | ||
+ | </ | ||
+ | |||
+ | La commande **shopt** est utilisée pour activer ou désactiver les options du comportement optional du shell. La liste des options peut être visualisée en exécutant la commande **shopt** sans options : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ shopt | ||
+ | autocd | ||
+ | cdable_vars | ||
+ | cdspell | ||
+ | checkhash | ||
+ | checkjobs | ||
+ | checkwinsize | ||
+ | cmdhist | ||
+ | compat31 | ||
+ | compat32 | ||
+ | compat40 | ||
+ | compat41 | ||
+ | direxpand | ||
+ | dirspell | ||
+ | dotglob | ||
+ | execfail | ||
+ | expand_aliases on | ||
+ | extdebug | ||
+ | extglob | ||
+ | extquote | ||
+ | failglob | ||
+ | force_fignore | ||
+ | globstar | ||
+ | gnu_errfmt | ||
+ | histappend | ||
+ | histreedit | ||
+ | histverify | ||
+ | hostcomplete | ||
+ | huponexit | ||
+ | interactive_comments on | ||
+ | lastpipe | ||
+ | lithist | ||
+ | login_shell | ||
+ | mailwarn | ||
+ | no_empty_cmd_completion off | ||
+ | nocaseglob | ||
+ | nocasematch | ||
+ | nullglob | ||
+ | progcomp | ||
+ | promptvars | ||
+ | restricted_shell off | ||
+ | shift_verbose | ||
+ | sourcepath | ||
+ | xpg_echo | ||
+ | </ | ||
+ | |||
+ | ===? | ||
+ | |||
+ | Créez les fichiers f, f.txt, f123.txt, f123123.txt, | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ touch f f.txt f123.txt f123123.txt f123123123.txt | ||
+ | </ | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f?(123).txt | ||
+ | f123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant 0 ou 1 occurence de la chaîne **123**. | ||
+ | </ | ||
+ | |||
+ | ===*(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f*(123).txt | ||
+ | f123123123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant de 0 jusqu' | ||
+ | </ | ||
+ | |||
+ | ===+(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f+(123).txt | ||
+ | f123123123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant entre 1 et x occurences de la chaîne **123**. | ||
+ | </ | ||
+ | |||
+ | ===@(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f@(123).txt | ||
+ | f123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant 1 seule occurence de la chaîne **123**. | ||
+ | </ | ||
+ | |||
+ | ===!(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f!(123).txt | ||
+ | f123123123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande n' | ||
+ | </ | ||
+ | |||
+ | ===Caractères d' | ||
+ | |||
+ | Afin d' | ||
+ | |||
+ | ^ Caractère ^ Description ^ | ||
+ | | \ | Protège le caractère qui le suit | | ||
+ | | ' ' | Protège tout caractère, à l' | ||
+ | | " " | Protège tout caractère, à l' | ||
+ | |||
+ | Afin d' | ||
+ | |||
+ | $ echo * est un caractère spécial [Entrée] | ||
+ | |||
+ | Lors de la saisie de cette commande dans votre répertoire **training**, | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo * est un caractère spécial | ||
+ | a100 f f1 f123123123.txt f123123.txt f123.txt f2 f3 f4 f5 f52 f62 f.txt est un caractère spécial | ||
+ | |||
+ | [trainee@centos7 training]$ echo \* est un caractère spécial | ||
+ | * est un caractère spécial | ||
+ | |||
+ | [trainee@centos7 training]$ echo "* est un caractère spécial" | ||
+ | * est un caractère spécial | ||
+ | |||
+ | [trainee@centos7 training]$ echo '* est un caractère spécial' | ||
+ | * est un caractère spécial | ||
+ | </ | ||
+ | |||
+ | ====Codes Retour==== | ||
+ | |||
+ | Chaque commande retourne un code à la fin de son exécution. La variable spéciale **$?** sert à stocker le code retour de la dernière commande exécutée. | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ cd .. | ||
+ | [trainee@centos7 ~]$ mkdir codes | ||
+ | [trainee@centos7 ~]$ echo $? | ||
+ | 0 | ||
+ | [trainee@centos7 ~]$ touch codes/ | ||
+ | [trainee@centos7 ~]$ rmdir codes | ||
+ | rmdir: failed to remove ‘codes’: | ||
+ | [trainee@centos7 ~]$ echo $? | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | Dans cette exemple la création du répertoire **codes** s'est bien déroulée. Le code retour stocké dans la variable $? est un zéro. | ||
+ | |||
+ | La suppression du répertoire a rencontré une erreur car **codes** contenait le fichier **retour**. Le code retour stocké dans la variable $? est un **un**. | ||
+ | |||
+ | Si le code retour est **zéro** la dernière commande s'est déroulée sans erreur. | ||
+ | |||
+ | Si le code retour est **autre que zéro** la dernière commande s'est déroulée avec une erreur. | ||
+ | |||
+ | ====Redirections==== | ||
+ | |||
+ | Votre dialogue avec le système Linux utilise des canaux d’entrée et de sortie. On appelle le clavier, le **canal d’entrée standard** et l’écran, le **canal de sortie standard** : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Autrement dit, en tapant une commande sur le clavier, vous voyez le résultat de cette commande à l’écran. | ||
+ | |||
+ | Parfois, cependant il est utile de re-diriger le canal de sortie standard vers un fichier. De cette façon, le résultat d’une commande telle **free** peut être stocké dans un fichier pour une consultation ultérieure : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Cet effet est obtenu en utilisant une **redirection** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ pwd | ||
+ | / | ||
+ | [trainee@centos7 ~]$ cd training | ||
+ | [trainee@centos7 training]$ free > file | ||
+ | [trainee@centos7 training]$ cat file | ||
+ | total used free shared | ||
+ | Mem: | ||
+ | Swap: | ||
+ | </ | ||
+ | |||
+ | Si le fichier cible n’existe pas, il est créé et son contenu sera le résultat de la commande free. | ||
+ | |||
+ | Par contre si le fichier existe déjà, il sera écrasé : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ date > file | ||
+ | [trainee@centos7 training]$ cat file | ||
+ | Mon 28 Nov 15:48:09 CET 2016 | ||
+ | </ | ||
+ | |||
+ | Pour ajouter des données supplémentaires au même fichier cible, il faut utiliser une **double redirection** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ free >> file | ||
+ | [trainee@centos7 training]$ cat file | ||
+ | Mon 28 Nov 15:48:09 CET 2016 | ||
+ | total used free shared | ||
+ | Mem: | ||
+ | Swap: | ||
+ | </ | ||
+ | |||
+ | De cette façon, la date du jour sera rajoutée à la fin de votre fichier après les informations de la commande free. | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que la sortie standard ne peut être redirigée que dans **une seule direction**. | ||
+ | </ | ||
+ | |||
+ | Les canaux d’entrées et de sorties sont numérotés : | ||
+ | |||
+ | * 0 = Le Canal d’entrée Standard | ||
+ | * 1 = Le Canal de Sortie Standard | ||
+ | * 2 = Le Canal d’erreur | ||
+ | |||
+ | La commande suivante créera un fichier nommé **errorlog** qui contient les messages d’erreur de l’exécution de la commande **rmdir** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ cd .. | ||
+ | [trainee@centos7 ~]$ rmdir training/ 2> | ||
+ | [trainee@centos7 ~]$ cat errorlog | ||
+ | rmdir: failed to remove ‘training/ | ||
+ | </ | ||
+ | |||
+ | En effet l' | ||
+ | |||
+ | Nous pouvons également réunir des canaux. Pour mettre en application ceci, il faut comprendre que le shell traite les commandes de **gauche à droite**. | ||
+ | |||
+ | Dans l’exemple suivant, nous réunissons le canal de sortie et le canal d’erreurs : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ free > file 2>&1 | ||
+ | </ | ||
+ | |||
+ | La syntaxe **2>& | ||
+ | |||
+ | Il est possible de modifier le canal d' | ||
+ | |||
+ | $ wc -w < errorlog [Entrée] | ||
+ | |||
+ | Dans cet exemple la commande wc compte le nombre de mots ( -w ) dans le fichier errorlog et l’affiche à l’écran : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ wc -w < errorlog | ||
+ | 8 | ||
+ | </ | ||
+ | |||
+ | D' | ||
+ | |||
+ | ^ Caractères | ||
+ | | %%&> | ||
+ | | %%<< | ||
+ | | %%<> | ||
+ | |||
+ | ====Pipes==== | ||
+ | |||
+ | Il est aussi possible de relier des commandes avec un pipe **|** . | ||
+ | |||
+ | Dans ce cas, le canal de sortie de la commande à gauche du tube est envoyé au canal d’entrée de la commande à droite du pipe : | ||
+ | |||
+ | $ ls | wc -w [Entrée] | ||
+ | |||
+ | Cette commande, lancée dans votre répertoire personnel, prend la sortie de la commande **ls** et demande à la commande **wc** de compter le nombre de mots inclus dans la sortie de ls : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls | wc -w | ||
+ | 17 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Il est à noter qu'il est possible de relier plusieurs tubes dans la même commande. | ||
+ | </ | ||
+ | |||
+ | Rappelez-vous que la sortie standard ne peut être redirigée que dans une seule direction. Afin de pouvoir rediriger la sortie standard vers un fichier **et** la visualiser à l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ date | tee file1 | ||
+ | Mon 28 Nov 16:14:24 CET 2016 | ||
+ | [trainee@centos7 ~]$ cat file1 | ||
+ | Mon 28 Nov 16:14:24 CET 2016 | ||
+ | </ | ||
+ | |||
+ | Cette même technique nous permet de créer **deux fichiers** : | ||
+ | |||
+ | $ date | tee file1 > file2 [Entrée] | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ date | tee file1 > file2 | ||
+ | [trainee@centos7 ~]$ cat file1 | ||
+ | Mon 28 Nov 16:15:57 CET 2016 | ||
+ | [trainee@centos7 ~]$ cat file2 | ||
+ | Mon 28 Nov 16:15:57 CET 2016 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Par défaut la commande tee écrase le fichier de destination. Pour ajouter des données supplémentaires au même fichier cible, il convient d' | ||
+ | </ | ||
+ | |||
+ | ====Substitutions de Commandes==== | ||
+ | |||
+ | Il est parfois intéressant, | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo date | ||
+ | date | ||
+ | [trainee@centos7 ~]$ echo $(date) | ||
+ | Mon 28 Nov 16:19:35 CET 2016 | ||
+ | [trainee@centos7 ~]$ echo `date` | ||
+ | Mon 28 Nov 16:19:35 CET 2016 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez le format de chaque substitution **$(commande)** ou **`commande`**. Sur un clavier français, l' | ||
+ | </ | ||
+ | |||
+ | ====Chainage de Commandes==== | ||
+ | |||
+ | Il est possible de regrouper des commandes à l’aide d’un sous-shell : | ||
+ | |||
+ | $ (ls -l; ps; who) > list [Entrée] | ||
+ | |||
+ | Cet exemple envoie le résultat des trois commandes vers le fichier **list** en les traitant en tâches de fond. | ||
+ | |||
+ | Les commandes peuvent être aussi chainées en fonction du code retour de la commande précédente. | ||
+ | |||
+ | **&& | ||
+ | |||
+ | **||** est utilisé afin de s’assurer de l’inverse. | ||
+ | |||
+ | Le syntaxe de cette commande est : | ||
+ | |||
+ | Commande1 && Commande2 | ||
+ | |||
+ | Dans ce cas, Commande 2 est exécutée uniquement dans le cas où Commande1 s’est exécuté sans erreur | ||
+ | |||
+ | Ou : | ||
+ | |||
+ | Commande1 || Commande2 | ||
+ | |||
+ | Dans ce cas, Commande2 est exécuté si Commande1 a rencontré une erreur. | ||
+ | |||
+ | |||
+ | ==== Affichage des variables du shell==== | ||
+ | |||
+ | Une variable du shell peut être affichée grâce à la commande : | ||
+ | |||
+ | $ echo $VARIABLE [Entrée] | ||
+ | |||
+ | === Les variables principales === | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | BASH | Le chemin complet du shell. | | ||
+ | | BASH_VERSION | La version du shell. | | ||
+ | | EUID | EUID de l' | ||
+ | | UID | UID de l' | ||
+ | | PPID | Le PID du processus père. | | ||
+ | | PWD | Le répertoire courant. | | ||
+ | | OLDPWD | Le répertoire avant la dernière commande cd. Même chose que la commande **cd -**.| | ||
+ | | RANDOM | Un nombre aléatoire entre 0 et 32767 | | ||
+ | | SECONDS | Le nombre de scondes écoules depuis le lancement du shell | | ||
+ | | LINES | Le nombre de lignes de l' | ||
+ | | COLUMNS | La largeur de l' | ||
+ | | HISTFILE | Le fichier historique | | ||
+ | | HISTFILESIZE | La taille du fichier historique | | ||
+ | | HISTSIZE | Le nombre de commandes mémorisées dans le fichier historique | | ||
+ | | HISTCMD | Le numéro de la commande courante dans l' | ||
+ | | HISTCONTROL | **ignorespace** ou **ignoredups** ou **ignoreboth** | | ||
+ | | HOME | Le répertoire de connexion. | | ||
+ | | HOSTTYPE | Le type de machine. | | ||
+ | | OSTYPE | Le système d' | ||
+ | | MAIL | Le fichier contenant le courrier. | | ||
+ | | MAILCHECK | La fréquence de vérification du courrier en secondes. | | ||
+ | | PATH | Le chemin de recherche des commandes. | | ||
+ | | PROMPT_COMMAND | La commande exécutée avant chaque affichage du prompt. | | ||
+ | | PS1 | Le prompt par défaut. | | ||
+ | | PS2| Le deuxième prompt par défaut | | ||
+ | | PS3 | Le troisième prompt par défaut | ||
+ | | PS4 | Le quatrième prompt par défaut | ||
+ | | SHELL | Le shell de préférence. | | ||
+ | | SHLVL | Le nombre d' | ||
+ | | TMOUT | Le nombre de secondes moins 60 d' | ||
+ | |||
+ | === Les Variables de Régionalisation et d' | ||
+ | |||
+ | L' | ||
+ | |||
+ | * longueur des mots, | ||
+ | * accents, | ||
+ | * écriture de gauche à droite ou de droite à gauche, | ||
+ | * unité monétaire, | ||
+ | * styles typographiques et modèles rédactionnels, | ||
+ | * unités de mesures, | ||
+ | * affichage des dates et des heures, | ||
+ | * formats d' | ||
+ | * format du clavier, | ||
+ | * etc ... | ||
+ | |||
+ | Le **Régionalisation**, | ||
+ | |||
+ | Le code pays complet prend la forme suivante : **langue-PAYS.jeu_de_caractères**. Par exemple, pour la langue anglaise les valeurs de langue-PAYS sont : | ||
+ | |||
+ | * en_GB = Great Britain, | ||
+ | * en_US = USA, | ||
+ | * en_AU = Australia, | ||
+ | * en_NZ = New Zealand, | ||
+ | * en_ZA = South Africa, | ||
+ | * en_CA = Canada. | ||
+ | |||
+ | Les variables système les plus importants contenant les informations concernant le régionalisation sont : | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | LC_ALL | Avec une valeur non nulle, celle-ci prend le dessus sur la valeur de toutes les autres variables d' | ||
+ | | LANG | Fournit une valeur par défaut pour les variables d' | ||
+ | | LC_CTYPE | Détermine les paramètres régionaux pour l' | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo $LC_ALL | ||
+ | en_GB.UTF-8 | ||
+ | [trainee@centos7 ~]$ echo $LC_CTYPE | ||
+ | |||
+ | [trainee@centos7 ~]$ echo $LANG | ||
+ | en_GB.UTF-8 | ||
+ | |||
+ | [trainee@centos7 ~]$ locale | ||
+ | LANG=en_GB.UTF-8 | ||
+ | LC_CTYPE=" | ||
+ | LC_NUMERIC=" | ||
+ | LC_TIME=" | ||
+ | LC_COLLATE=" | ||
+ | LC_MONETARY=" | ||
+ | LC_MESSAGES=" | ||
+ | LC_PAPER=" | ||
+ | LC_NAME=" | ||
+ | LC_ADDRESS=" | ||
+ | LC_TELEPHONE=" | ||
+ | LC_MEASUREMENT=" | ||
+ | LC_IDENTIFICATION=" | ||
+ | LC_ALL=en_GB.UTF-8 | ||
+ | </ | ||
+ | |||
+ | ===Les variables spéciales=== | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | $LINENO | Contient le numéro de la ligne courante du script ou de la fonction | | ||
+ | | $$ | Contient le PID du shell en cours | | ||
+ | | $PPID | Contient le PID du processus parent du shell en cours | | ||
+ | | $0 | Contient le nom du script en cours tel que ce nom ait été saisi sur la ligne de commande | | ||
+ | | $1, $2 ... | Contient respectivement le premier argument, deuxième argument etc passés au script | | ||
+ | | $# | Contient le nombre d' | ||
+ | | $* | Contient l' | ||
+ | | $@ | Contient l' | ||
+ | |||
+ | ====La Commande env==== | ||
+ | |||
+ | La commande **env** envoie sur la sortie standard les valeurs des variables système de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ env | ||
+ | XDG_SESSION_ID=1 | ||
+ | HOSTNAME=centos7.fenestros.loc | ||
+ | SELINUX_ROLE_REQUESTED= | ||
+ | TERM=xterm-256color | ||
+ | SHELL=/ | ||
+ | HISTSIZE=1000 | ||
+ | SSH_CLIENT=10.0.2.2 33896 22 | ||
+ | SELINUX_USE_CURRENT_RANGE= | ||
+ | SSH_TTY=/ | ||
+ | LC_ALL=en_GB.UTF-8 | ||
+ | USER=trainee | ||
+ | LS_COLORS=rs=0: |