Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
elearning:workbooks:centos:8:lcf800:l701 [2023/07/14 10:41] – admin | elearning:workbooks:centos:8:lcf800:l701 [2023/07/14 10:43] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1235: | Ligne 1235: | ||
</ | </ | ||
+ | =====LAB #2 - 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@centos8 ~]# ls -lai /tmp | ||
+ | total 0 | ||
+ | 16800396 drwxrwxrwt. | ||
+ | 128 dr-xr-xr-x. 17 root root 224 Apr 19 11:50 .. | ||
+ | 25447488 drwxrwxrwt. | ||
+ | | ||
+ | 143 drwx------. | ||
+ | 621976 drwxrwxrwt. | ||
+ | 621954 drwxrwxrwt. | ||
+ | 17319048 drwxrwxrwt. | ||
+ | [root@centos8 ~]# ls -ali /tmp | ||
+ | total 0 | ||
+ | 16800396 drwxrwxrwt. | ||
+ | 128 dr-xr-xr-x. 17 root root 224 Apr 19 11:50 .. | ||
+ | 25447488 drwxrwxrwt. | ||
+ | | ||
+ | 143 drwx------. | ||
+ | 621976 drwxrwxrwt. | ||
+ | 621954 drwxrwxrwt. | ||
+ | 17319048 drwxrwxrwt. | ||
+ | [root@centos8 ~]# ls -ial /tmp | ||
+ | total 0 | ||
+ | 16800396 drwxrwxrwt. | ||
+ | 128 dr-xr-xr-x. 17 root root 224 Apr 19 11:50 .. | ||
+ | 25447488 drwxrwxrwt. | ||
+ | | ||
+ | 143 drwx------. | ||
+ | 621976 drwxrwxrwt. | ||
+ | 621954 drwxrwxrwt. | ||
+ | 17319048 drwxrwxrwt. | ||
+ | </ | ||
+ | |||
+ | La commande **ls -l --all --inode** ne peut pas être écrite **ls -l --allinode** : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# ls -l --all --inode /tmp | ||
+ | total 0 | ||
+ | 16800396 drwxrwxrwt. | ||
+ | 128 dr-xr-xr-x. 17 root root 224 Apr 19 11:50 .. | ||
+ | 25447488 drwxrwxrwt. | ||
+ | | ||
+ | 143 drwx------. | ||
+ | 621976 drwxrwxrwt. | ||
+ | 621954 drwxrwxrwt. | ||
+ | 17319048 drwxrwxrwt. | ||
+ | [root@centos8 ~]# ls -l --allinode /tmp | ||
+ | ls: unrecognized option ' | ||
+ | Try 'ls --help' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Les options prenant un argument ne sont pas combinées avec les autres options. | ||
+ | </ | ||
+ | |||
+ | =====LAB #3 - 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 60%> | ||
+ | **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 60%> | ||
+ | **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 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===LAB #4 - Utiliser grep, egrep et fgrep=== | ||
+ | |||
+ | Creéz le fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# cd /tmp | ||
+ | [root@centos8 tmp]# vi greptest | ||
+ | [root@centos8 tmp]# cat greptest | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne du fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep ' | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne contenant au moins une lettre ou un chiffre : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep ' | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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@centos8 ~]# grep ' | ||
+ | 555-5555 | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne contenant exactement un caractère : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep ' | ||
+ | f | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Recherchez maintenant toute ligne commençant par un point : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep ' | ||
+ | .fenestros | ||
+ | .fe | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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 ' | ||
+ | </ | ||
+ | |||
+ | Modifiez le fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# vi greptest | ||
+ | [root@centos8 tmp]# cat greptest | ||
+ | # Starting comment | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Another comment | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # End comment | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **grep** avec l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep -E -v ' | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **egrep** pour envoyer le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# egrep -v ' | ||
+ | [root@centos8 ~]# cat / | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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' | ||
+ | </ | ||
+ | |||
+ | Modifiez le fichier **/ | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# vi greptest | ||
+ | [root@centos8 tmp]# cat 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 | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **fgrep** pour rechercher la ligne commençant par le caractère **^** : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# fgrep ' | ||
+ | ^ This line will be used to demonstrate the use of fgrep | ||
+ | </ | ||
+ | |||
+ | Comparez le résultat ci-dessus avec celui de la commande grep : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep ' | ||
+ | # Starting comment | ||
+ | ^ This line will be used to demonstrate the use of fgrep | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Another comment | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # End comment | ||
+ | </ | ||
+ | |||
+ | La ligne de commande en utilisant la commande grep devrait être : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# grep ' | ||
+ | ^ This line will be used to demonstrate the use of 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 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===LAB #5 - Utiliser la Commande sed=== | ||
+ | |||
+ | La commande **d** de sed permet de ne pas afficher certaines lignes à l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# 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@centos8 ~]# 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 60%> | ||
+ | **Important** : Notez que l'ERb est entourée des caractères / et /. | ||
+ | </ | ||
+ | |||
+ | La commande sed vous permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# sed ' | ||
+ | root: | ||
+ | root: | ||
+ | bin: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que sed affiche également tout le contenu du fichier. Ceci implique que les lignes 1 et 2 s' | ||
+ | </ | ||
+ | |||
+ | Pour n' | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# sed -n ' | ||
+ | root: | ||
+ | bin: | ||
+ | </ | ||
+ | |||
+ | La commande **w** permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# sed -n '/ | ||
+ | [root@centos8 ~]# 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@centos8 ~]# echo " | ||
+ | [root@centos8 ~]# cat / | ||
+ | user1 user2 user3 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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 60%> | ||
+ | **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@centos8 tmp]# ls -l | awk ' | ||
+ | |||
+ | 05: | ||
+ | 05: | ||
+ | 05: | ||
+ | 05: | ||
+ | 12: | ||
+ | </ | ||
+ | |||
+ | 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@centos8 tmp]# ls -l | awk ' | ||
+ | | ||
+ | 05:23 root root | ||
+ | 05:21 root root | ||
+ | 05:28 root root | ||
+ | 05:29 root root | ||
+ | 12:05 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@centos8 tmp]# cat > scriptawk | ||
+ | BEGIN { | ||
+ | print "Liste des systèmes de fichiers montés" | ||
+ | {print $0} | ||
+ | END { | ||
+ | print " | ||
+ | [^D] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Dans l' | ||
+ | </ | ||
+ | |||
+ | Ensuite saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# awk -f scriptawk /etc/mtab | ||
+ | Liste des systèmes de fichiers montés | ||
+ | sysfs /sys sysfs rw, | ||
+ | proc /proc proc rw, | ||
+ | devtmpfs /dev devtmpfs rw, | ||
+ | securityfs / | ||
+ | tmpfs /dev/shm tmpfs rw, | ||
+ | devpts /dev/pts devpts rw, | ||
+ | tmpfs /run tmpfs rw, | ||
+ | tmpfs / | ||
+ | cgroup / | ||
+ | pstore / | ||
+ | bpf /sys/fs/bpf bpf rw, | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | cgroup / | ||
+ | none / | ||
+ | configfs / | ||
+ | /dev/sda3 / xfs rw, | ||
+ | selinuxfs / | ||
+ | systemd-1 / | ||
+ | debugfs / | ||
+ | hugetlbfs / | ||
+ | mqueue /dev/mqueue mqueue rw, | ||
+ | /dev/sda1 /boot ext4 rw, | ||
+ | sunrpc / | ||
+ | tmpfs / | ||
+ | binfmt_misc / | ||
+ | tracefs / | ||
+ | ===================================== | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===LAB #6 - Utiliser la Commande awk=== | ||
+ | |||
+ | Pour illustrer l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# vi sales.txt | ||
+ | [root@centos8 tmp]# cat sales.txt | ||
+ | # 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. | ||
+ | |||
+ | Créez maintenant le script awk **sales.awk** : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# vi sales.awk | ||
+ | [root@centos8 tmp]# cat 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@centos8 tmp]# 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 #7 -Autres Commandes Utiles==== | ||
+ | |||
+ | ===7.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' | ||
+ | |||
+ | Créez le fichier **expand** : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# vi expand | ||
+ | [root@centos8 tmp]# 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@centos8 tmp]# 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 60%> | ||
+ | **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@centos8 ~]# expand expand > expand1 | ||
+ | </ | ||
+ | |||
+ | Visualisez le fichier avec la commande cat et les options **-vet** : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# 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 60%> | ||
+ | **Important** : Comme vous pouvez constater, les tabulations ont été converties en espaces. | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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@centos8 ~]# 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@centos8 ~]# unexpand -a expand1 > expand2 | ||
+ | |||
+ | [root@centos8 ~]# 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 60%> | ||
+ | **Important** : Notez que les espaces ont été remplacés par des tabulations. | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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@centos8 tmp]# 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: | ||
+ | systemd | ||
+ | systemd | ||
+ | tss:x:5 | ||
+ | polkitd | ||
+ | unbound | ||
+ | libstor | ||
+ | cockpit | ||
+ | sssd:x: | ||
+ | setroub | ||
+ | sshd:x: | ||
+ | chrony: | ||
+ | tcpdump | ||
+ | trainee | ||
+ | cockpit | ||
+ | rngd:x: | ||
+ | gluster | ||
+ | qemu:x: | ||
+ | rpc:x:3 | ||
+ | rpcuser | ||
+ | saslaut | ||
+ | radvd:x | ||
+ | dnsmasq | ||
+ | </ | ||
+ | |||
+ | 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@centos8 tmp]# cut -c1-5, | ||
+ | root: | ||
+ | bin: | ||
+ | daemo2: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdx: | ||
+ | halt: | ||
+ | mail: | ||
+ | operax: | ||
+ | games2: | ||
+ | ftp: | ||
+ | nobod65534: | ||
+ | dbus:: | ||
+ | systeoredumstemd Core Dumper:/:/ | ||
+ | systeesolvetemd Resolver:/:/ | ||
+ | tss: | ||
+ | polki: | ||
+ | unbou:997:9 resolver:/ | ||
+ | libstemgmt: | ||
+ | cockps:x:99 cockpit-ws:/ | ||
+ | sssd: | ||
+ | setroshoot: | ||
+ | sshd:: | ||
+ | chron992: | ||
+ | tcpdu: | ||
+ | train: | ||
+ | cockpsinstaUser for cockpit-ws instances:/ | ||
+ | rngd: | ||
+ | glust: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcus: | ||
+ | saslax: | ||
+ | radvd5: | ||
+ | dnsma: | ||
+ | </ | ||
+ | |||
+ | Pour sélectionner les champs 2, 4 et 6 du fichier, il convient d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# 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:65534:/ | ||
+ | x:81:/ | ||
+ | x:997:/ | ||
+ | x:193:/ | ||
+ | x: | ||
+ | x:996:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:990:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:72:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:107:/ | ||
+ | x: | ||
+ | x: | ||
+ | x: | ||
+ | x:75:/ | ||
+ | x: | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.4 - La Commande uniq=== | ||
+ | |||
+ | La commande suivante permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cut -d: -f4 /etc/passwd | sort -n | uniq | ||
+ | 0 | ||
+ | 1 | ||
+ | 2 | ||
+ | 4 | ||
+ | 7 | ||
+ | 12 | ||
+ | 29 | ||
+ | 32 | ||
+ | 50 | ||
+ | 59 | ||
+ | 72 | ||
+ | 74 | ||
+ | 75 | ||
+ | 76 | ||
+ | 81 | ||
+ | 100 | ||
+ | 107 | ||
+ | 193 | ||
+ | 983 | ||
+ | 985 | ||
+ | 986 | ||
+ | 987 | ||
+ | 988 | ||
+ | 989 | ||
+ | 990 | ||
+ | 991 | ||
+ | 993 | ||
+ | 994 | ||
+ | 996 | ||
+ | 997 | ||
+ | 1000 | ||
+ | 65534 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.5 - La Commande tr=== | ||
+ | |||
+ | La commande **tr** permet de substituer des caractères pour d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cat /etc/passwd | tr " | ||
+ | ROOT: | ||
+ | BIN: | ||
+ | DAEMON: | ||
+ | ADM: | ||
+ | LP: | ||
+ | SYNC: | ||
+ | SHUTDOWN: | ||
+ | HALT: | ||
+ | MAIL: | ||
+ | OPERATOR: | ||
+ | GAMES: | ||
+ | FTP: | ||
+ | NOBODY: | ||
+ | DBUS: | ||
+ | SYSTEMD-COREDUMP: | ||
+ | SYSTEMD-RESOLVE: | ||
+ | TSS: | ||
+ | POLKITD: | ||
+ | UNBOUND: | ||
+ | LIBSTORAGEMGMT: | ||
+ | COCKPIT-WS: | ||
+ | SSSD: | ||
+ | SETROUBLESHOOT: | ||
+ | SSHD: | ||
+ | CHRONY: | ||
+ | TCPDUMP: | ||
+ | TRAINEE: | ||
+ | COCKPIT-WSINSTANCE: | ||
+ | RNGD: | ||
+ | GLUSTER: | ||
+ | QEMU: | ||
+ | RPC: | ||
+ | RPCUSER: | ||
+ | SASLAUTH: | ||
+ | RADVD: | ||
+ | DNSMASQ: | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.6 - La Commande paste=== | ||
+ | |||
+ | La commande **paste** concatène les lignes de n fichiers. Par exemple : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# paste -d: /etc/passwd /etc/shadow | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | systemd-coredump: | ||
+ | systemd-resolve: | ||
+ | tss: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | libstoragemgmt: | ||
+ | cockpit-ws: | ||
+ | sssd: | ||
+ | setroubleshoot: | ||
+ | sshd: | ||
+ | chrony: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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@centos8 tmp]# dd if=/ | ||
+ | 250+0 records in | ||
+ | 250+0 records out | ||
+ | 262144000 bytes (262 MB, 250 MiB) copied, 0.143522 s, 1.8 GB/s | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **split** pour diviser ce fichier en morceaux de 50 Mo : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# split -b 50m /file filepart | ||
+ | [root@centos8 tmp]# ls -l | grep filepart | ||
+ | -rw-r--r--. 1 root root 52428800 Apr 20 07:14 filepartaa | ||
+ | -rw-r--r--. 1 root root 52428800 Apr 20 07:14 filepartab | ||
+ | -rw-r--r--. 1 root root 52428800 Apr 20 07:14 filepartac | ||
+ | -rw-r--r--. 1 root root 52428800 Apr 20 07:14 filepartad | ||
+ | -rw-r--r--. 1 root root 52428800 Apr 20 07:14 filepartae | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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@centos8 tmp]# cat fileparta* > newfile | ||
+ | [root@centos8 tmp]# ls -l | grep newf | ||
+ | -rw-r--r--. 1 root root 262144000 Apr 20 07:15 newfile | ||
+ | [root@centos8 tmp]# ls -l / | grep file | ||
+ | -rw-r--r--. | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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@centos8 ~]# 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@centos8 tmp]# diff /etc/passwd / | ||
+ | 26,27c26 | ||
+ | < tcpdump: | ||
+ | < trainee: | ||
+ | --- | ||
+ | > trainee10: | ||
+ | 36a36 | ||
+ | > 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 **26, | ||
+ | |||
+ | Le message **36a36** indique qu'à la ligne 36 dans /etc/passwd il faut ajouter la ligne 36 de / | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.9 - La Commande cmp=== | ||
+ | |||
+ | La commande **cmp** compare les fichiers caractère par caractère. Par défaut la commande s' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cmp / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cmp -l / | ||
+ | cmp: EOF on / | ||
+ | 1300 162 143 | ||
+ | 1301 141 160 | ||
+ | 1302 151 144 | ||
+ | 1303 156 165 | ||
+ | 1304 145 155 | ||
+ | 1305 145 160 | ||
+ | 1306 61 72 | ||
+ | 1307 60 170 | ||
+ | 1309 170 67 | ||
+ | 1310 72 62 | ||
+ | 1311 61 72 | ||
+ | 1312 60 67 | ||
+ | 1313 60 62 | ||
+ | 1314 60 72 | ||
+ | 1316 61 57 | ||
+ | 1317 60 72 | ||
+ | 1318 60 57 | ||
+ | 1319 60 163 | ||
+ | 1320 72 142 | ||
+ | 1321 164 151 | ||
+ | 1322 162 156 | ||
+ | 1323 141 57 | ||
+ | 1324 151 156 | ||
+ | --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 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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 8 : | ||
+ | |||
+ | < | ||
+ | [root@centos8 ~]# dnf install patch -y | ||
+ | </ | ||
+ | |||
+ | Rappelez-vous maintenant des modifications apportées aux fichiers / | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cat / | ||
+ | # Starting comment | ||
+ | ^ This line will be used to demonstrate the use of fgrep | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | # Another comment | ||
+ | 555-5555 | ||
+ | f | ||
+ | |||
+ | .fenestros | ||
+ | |||
+ | .fe | ||
+ | |||
+ | £ | ||
+ | # End comment | ||
+ | [root@centos8 tmp]# cat / | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | Afin de créer un fichier de patch, il convient d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# diff -u greptest greptest1 > greptest.patch | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cat greptest.patch | ||
+ | --- greptest 2021-04-20 05: | ||
+ | +++ greptest1 2021-04-20 05: | ||
+ | @@ -1,14 +1,7 @@ | ||
+ | -# Starting comment | ||
+ | -^ This line will be used to demonstrate the use of fgrep | ||
+ | | ||
+ | | ||
+ | -# Another comment | ||
+ | | ||
+ | f | ||
+ | - | ||
+ | | ||
+ | - | ||
+ | .fe | ||
+ | - | ||
+ | £ | ||
+ | -# End comment | ||
+ | </ | ||
+ | |||
+ | Procédez maintenant à l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# patch < greptest.patch | ||
+ | patching file greptest | ||
+ | </ | ||
+ | |||
+ | Contrôlez maintenant le contenu du fichier **greptest** : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# cat greptest | ||
+ | fenestrOS | ||
+ | fenestros | ||
+ | 555-5555 | ||
+ | f | ||
+ | .fenestros | ||
+ | .fe | ||
+ | £ | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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@centos8 tmp]# strings / | ||
+ | / | ||
+ | libuser.so.1 | ||
+ | g_value_get_int64 | ||
+ | is_selinux_enabled | ||
+ | _ITM_deregisterTMCloneTable | ||
+ | g_free | ||
+ | g_value_array_get_nth | ||
+ | audit_open | ||
+ | __gmon_start__ | ||
+ | g_value_get_string | ||
+ | g_type_check_value_holds | ||
+ | g_value_get_long | ||
+ | freecon | ||
+ | audit_log_acct_message | ||
+ | _ITM_registerTMCloneTable | ||
+ | lu_ent_set_string | ||
+ | lu_ent_get_first_value_strdup | ||
+ | lu_error_free | ||
+ | lu_user_lock | ||
+ | lu_strerror | ||
+ | lu_ent_free | ||
+ | lu_ent_new | ||
+ | lu_user_modify | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# strings -t d / | ||
+ | 624 / | ||
+ | 2809 libuser.so.1 | ||
+ | 2822 g_value_get_int64 | ||
+ | 2840 is_selinux_enabled | ||
+ | 2859 _ITM_deregisterTMCloneTable | ||
+ | 2887 g_free | ||
+ | 2894 g_value_array_get_nth | ||
+ | 2916 audit_open | ||
+ | 2927 __gmon_start__ | ||
+ | 2942 g_value_get_string | ||
+ | 2961 g_type_check_value_holds | ||
+ | 2986 g_value_get_long | ||
+ | 3003 freecon | ||
+ | 3011 audit_log_acct_message | ||
+ | 3034 _ITM_registerTMCloneTable | ||
+ | 3060 lu_ent_set_string | ||
+ | 3078 lu_ent_get_first_value_strdup | ||
+ | 3108 lu_error_free | ||
+ | 3122 lu_user_lock | ||
+ | 3135 lu_strerror | ||
+ | 3147 lu_ent_free | ||
+ | 3159 lu_ent_new | ||
+ | 3170 lu_user_modify | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ^ Argument ^ Système de Numérotation ^ | ||
+ | | d | Décimal | | ||
+ | | o | Octal | | ||
+ | | x | Héxadécimal | | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# strings -t d -n 15 / | ||
+ | 624 / | ||
+ | 2822 g_value_get_int64 | ||
+ | 2840 is_selinux_enabled | ||
+ | 2859 _ITM_deregisterTMCloneTable | ||
+ | 2894 g_value_array_get_nth | ||
+ | 2942 g_value_get_string | ||
+ | 2961 g_type_check_value_holds | ||
+ | 2986 g_value_get_long | ||
+ | 3011 audit_log_acct_message | ||
+ | 3034 _ITM_registerTMCloneTable | ||
+ | 3060 lu_ent_set_string | ||
+ | 3078 lu_ent_get_first_value_strdup | ||
+ | 3185 lu_prompt_console | ||
+ | 3212 lu_user_lookup_name | ||
+ | 3239 lu_ent_set_long | ||
+ | 3281 lu_user_removepass | ||
+ | 3300 libgobject-2.0.so.0 | ||
+ | 3320 libglib-2.0.so.0 | ||
+ | 3379 poptHelpOptions | ||
+ | 3435 poptSetOtherOptionHelp | ||
+ | 3543 libpam_misc.so.0 | ||
+ | 3584 audit_log_user_avc_message | ||
+ | 3611 libselinux.so.1 | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | Dans le cas de l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# strings -f /bin/* | grep " | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/gprof: @(#) Copyright (c) 1983 Regents of the University of California. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/tree: $Version: $ tree v1.7.0 (c) 1996 - 2014 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro $ | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /bin/vdo: # Copyright (c) 2020 Red Hat, Inc. | ||
+ | / | ||
+ | / | ||
+ | /bin/zip: Copyright (c) 1990-2008 Info-ZIP. | ||
+ | /bin/zip: Copyright (c) 1990-2008 Info-ZIP - Type '%s " | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que l' | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.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@centos8 tmp]# comm /etc/passwd / | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | systemd-coredump: | ||
+ | systemd-resolve: | ||
+ | tss: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | libstoragemgmt: | ||
+ | cockpit-ws: | ||
+ | sssd: | ||
+ | setroubleshoot: | ||
+ | sshd: | ||
+ | chrony: | ||
+ | tcpdump: | ||
+ | trainee10: | ||
+ | comm: file 2 is not in sorted order | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | Linux est super! | ||
+ | trainee: | ||
+ | comm: file 1 is not in sorted order | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | Pour afficher uniquement les lignes présentes dans les deux fichiers, il convient d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# comm -12 /etc/passwd / | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | systemd-coredump: | ||
+ | systemd-resolve: | ||
+ | tss: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | libstoragemgmt: | ||
+ | cockpit-ws: | ||
+ | sssd: | ||
+ | setroubleshoot: | ||
+ | sshd: | ||
+ | chrony: | ||
+ | comm: file 2 is not in sorted order | ||
+ | comm: file 1 is not in sorted order | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.13 - La commande head=== | ||
+ | |||
+ | La commande **head** permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# head /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | </ | ||
+ | |||
+ | Avec l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# head -n 15 /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | systemd-coredump: | ||
+ | </ | ||
+ | |||
+ | La commande **head** peut également être utilisée pour afficher les premiers **y** octets en utilisant l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# 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 : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# head -c -150 /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | systemd-coredump: | ||
+ | systemd-resolve: | ||
+ | tss: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | libstoragemgmt: | ||
+ | cockpit-ws: | ||
+ | sssd: | ||
+ | setroubleshoot: | ||
+ | sshd: | ||
+ | chrony: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | </ | ||
+ | |||
+ | Les valeurs **x** et **y** acceptent des multiplicateurs : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# head -c 1b /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | |||
+ | [root@centos8 tmp]# 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 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ===7.14 - La commande tail=== | ||
+ | |||
+ | La commande **tail** permet d' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# tail /etc/passwd | ||
+ | trainee: | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | Avec l' | ||
+ | |||
+ | < | ||
+ | root@centos8 tmp]# tail -n 15 /etc/passwd | ||
+ | sssd: | ||
+ | setroubleshoot: | ||
+ | sshd: | ||
+ | chrony: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | La commande **tail** peut également être utilisée pour afficher les derniers **y** octets en utilisant l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# tail -c 150 /etc/passwd | ||
+ | er:/ | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | 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@centos8 tmp]# tail -c +150 /etc/passwd | ||
+ | 7: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | dbus: | ||
+ | systemd-coredump: | ||
+ | systemd-resolve: | ||
+ | tss: | ||
+ | polkitd: | ||
+ | unbound: | ||
+ | libstoragemgmt: | ||
+ | cockpit-ws: | ||
+ | sssd: | ||
+ | setroubleshoot: | ||
+ | sshd: | ||
+ | chrony: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | cockpit-wsinstance: | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | Les valeurs **x** et **y** acceptent des multiplicateurs : | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# tail -c 1b /etc/passwd | ||
+ | nstances:/ | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | |||
+ | [root@centos8 tmp]# tail -c 512 /etc/passwd | ||
+ | nstances:/ | ||
+ | rngd: | ||
+ | gluster: | ||
+ | qemu: | ||
+ | rpc: | ||
+ | rpcuser: | ||
+ | saslauth: | ||
+ | radvd: | ||
+ | dnsmasq: | ||
+ | </ | ||
+ | |||
+ | 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@centos8 tmp]# tail -f / | ||
+ | Apr 20 06:27:53 centos8 systemd[1]: Started dnf makecache. | ||
+ | Apr 20 07:28:29 centos8 systemd[1]: Starting dnf makecache... | ||
+ | Apr 20 07:28:29 centos8 dnf[12423]: Metadata cache refreshed recently. | ||
+ | Apr 20 07:28:29 centos8 systemd[1]: dnf-makecache.service: | ||
+ | Apr 20 07:28:29 centos8 systemd[1]: Started dnf makecache. | ||
+ | Apr 20 07:50:35 centos8 systemd[1]: Started / | ||
+ | Apr 20 07:50:35 centos8 systemd[1]: Starting man-db-cache-update.service... | ||
+ | Apr 20 07:50:36 centos8 systemd[1]: man-db-cache-update.service: | ||
+ | Apr 20 07:50:36 centos8 systemd[1]: Started man-db-cache-update.service. | ||
+ | Apr 20 07:50:36 centos8 systemd[1]: run-r85917a32bc86476980c271609ba457fb.service: | ||
+ | ^C | ||
+ | </ | ||
+ | |||
+ | ==Options de la commande== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **A faire** : Utilisez l' | ||
+ | </ | ||
+ | |||
+ | ====LAB #8 - Utiliser les commandes ifconfig, grep, tr et cut pour isoler l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# ifconfig ens18 | ||
+ | ens18: flags=4163< | ||
+ | inet 10.0.2.45 | ||
+ | inet6 fe80:: | ||
+ | ether 4e: | ||
+ | RX packets 11473 bytes 24023891 (22.9 MiB) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 9521 bytes 1744650 (1.6 MiB) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | |||
+ | [root@centos8 tmp]# ifconfig ens18 | grep " | ||
+ | inet 10.0.2.45 | ||
+ | inet6 fe80:: | ||
+ | |||
+ | [root@centos8 tmp]# ifconfig ens18 | grep " | ||
+ | inet 10.0.2.45 | ||
+ | |||
+ | [root@centos8 tmp]# ifconfig ens18 | grep " | ||
+ | : | ||
+ | |||
+ | [root@centos8 tmp]# ifconfig ens18 | grep " | ||
+ | 10.0.2.45 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ====LAB #9 - Utiliser les commandes ip, grep, awk et sed pour isoler l' | ||
+ | |||
+ | < | ||
+ | [root@centos8 tmp]# ip addr show ens18 | ||
+ | 2: ens18: < | ||
+ | link/ether 4e: | ||
+ | inet 10.0.2.45/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | |||
+ | [root@centos8 tmp]# ip addr show ens18 | grep " | ||
+ | inet 10.0.2.45/ | ||
+ | inet6 fe80:: | ||
+ | |||
+ | [root@centos8 tmp]# ip addr show ens18 | grep " | ||
+ | inet 10.0.2.45/ | ||
+ | |||
+ | [root@centos8 tmp]# ip addr show ens18 | grep " | ||
+ | 10.0.2.45/ | ||
+ | |||
+ | [root@centos8 tmp]# ip addr show ens18 | grep " | ||
+ | 10.0.2.45 | ||
+ | </ | ||
----- | ----- | ||
Copyright © 2023 Hugh Norris. | Copyright © 2023 Hugh Norris. |