Cours Linux Partie 3 - Freyens
Home Informatique Projets CV WOT Mmm J'aime Coup de gueule Famille Web Radio Belge B&M Art-NFT

C'est une pub! Ce thême est basé sur w3 css.

Oui vous êtes capable de modifier ce thême

Cool? Oui, avec plein d'exemples faciles à comprendre et à modifier.

Aller sur W3.CSS Tutorial c'est en anglais mais google peux traduire les pages.

Cours Linux Partie 3

La curiosité n’est pas un vilain défaut mais une qualité fondamentale.

< ^ >

Pratique II

Comprendre le shell

Nous n'avons pas encore parlé des trois entrèes / sorties standards que l'on trouve sur le shell. Le shell utilise une entrée standard (StdIN) pour recevoir les commandes. Donc par défaut l'entrée standard est ce que l'utilisateur tape dans son shell (clavier). Il utilise aussi une sortie standard (StdOUT) pour renvoyer le résultat. Par défaut la sortie est la console ou le terminal courant, qui renvoie cette sortie sur l'écran. Et la dernière, qui est également renvoyée vers le moniteur, renvoie les erreurs (StdERR). Cequi est bien sous Linux c'est que l'on peut rediriger ces entrées / sorties.

1) Les redirections

Il est possible de mettre le résultat d'une commande dans un fichier gràce aux redirections. Normalement le résultat est envoyé vers l'écrande l'utilisateur, en redirigeant la sortie standard (StdOUT), le résultat sera inscrit dans le fichier.

echo toto
toto
echo toto > test1
cat test1
toto

La redirection ">" crée un nouveau fichier à chaque exécution et écrase le fichier s'il existe déjà.
La redirection ">>" ajoute le résultat à la suite du fichier existant. S'il n'existe pas, le fichier est créé.

L'entrée standard (StdIN) peut aussi être modifié pour exécuter des commandes provenant d'un fichier, au lieu du clavier de l'utilisateur.

echo "Subject: Test de redirection" > message
echo "Message à envoyer via un mail" >> message
cat message
mail $USER < message

L'opérateur "|" appelé "pipe" permet de rediriger le résultat d'une commande vers une autre commande.

cat /etc/passwd | grep $USER
(Vous allez voir les informations sur votre compte)

2) Les caractères de contrôle

Le ";" permet de taper plusieurs commandes à la suite sur la même ligne.

echo "salut" ; echo "Vous avez l'id suivant : " ; id
Salut
Vous avez l'id suivant :
uid=1000(papi) gid(papi) groups=1000(papi)

Le "&" permet de mettre un processus en tache de fond de manière à rendre la main à l'utilisateur.

gedit &
[1] 529

Note : le PID du processus est affiché. "gedit" s'est vu assigné le PID 529.

Le "&&" est pratiquement identique au ";". Il permet d'exécuter une suite de commandes sur la même ligne, mais contrairement au ";" il va vérifier l'exécution de la première commande avant de lancer la suivante et ainsi de suite. Si l'exécution de la première commande a provoqué une erreur, la seconde ne sera pas exécutée.

cat ffhei && echo "toto"
cat: ffhei: No such file or directory
touch ffhei
cat ffhei && echo "toto"
toto

Le "||" permet d'exécuter une commande si la première a renvoyé une erreur.

ls ffhh || echo yopyop
ls: ffhh: No such file or directory
yopyop
touch ffhh
ls ffhh || echo yopyop
ffhh

La première ligne de commande exécute "echo yopyop" car le fichier ffhh n'existe pas. La seconde fois, "ls ffhh" est exécuté mais pas"echo yopyop" car le fichier ffhh existe.

3) Les constantes caractères

Les constantes permettent surtout de représenter les caractères non visibles comme les tabulations, saut de ligne, etc ...

\bretour arrière
\cpas de saut de ligne
\fsaut de page
\nsaut de ligne
\rretour chariot
\ttabulation horizontale
\vtabulation verticale
\\caractère "\"
\xnncaractère ascii de valeur hexadécimale nn

Note : pour afficher la table ascii tapez "man ascii".

echo -e "coupont"
coupont
echo -e "\x63ou\tpont"
cou    pont

La première commande fait un simple "echo" de "coupont", la seconde inclut des constantes caractères qui remplacent le "c" de "cou" par sa valeur ascii hexadécimale (63) et rajoute une tabulation entre "cou" et "pont" avec la constante "\t".

4) Les utilitaires pratiques

grep

Synopsis

grep [options] PATTERN [FICHIER...]
grep [options] [-e PATTERN | -f FICHIER] [FICHIER...]

Descriptif

grep est un outil très puissant qui permet de rechercher une chaîne de caractères ou une expression régulière dans un fichier texte. Vous pouvez utiliser "man" pour en savoir un peu plus sur les expressions régulières.

man regexp

Voici quelques exemples d'utilisation de grep :

  • Recherche d'une chaîne de caractères :

    grep root /etc/passwd
    root:x:0:0:root:/root:/bin/bash

    On demande à grep de rechercher la chaîne de caractères "root" dans le fichier "passwd".

    Une autre façon de faire la même recherche :

    cat /etc/passwd | grep root
    root:x:0:0:root:/root:/bin/bash

    On utilise "cat" pour afficher le fichier passwd et on renvoie StdOUT vers la commande "grep" gràce au pipe.

  • Recherche d'expression régulières :

    grep '/bin/sh$' /etc/passwd
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    ...
    nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

    "grep" recherche toutes les lignes qui finissent par "/bin/sh". C'est le caractère "$" qui ancre la recherche sur la fin de la ligne. On peut ancrer la recherche en début de ligne avec le caractère "^":

    grep '^s' /etc/passwd
    sys:x:3:3:sys:/dev:/bin/sh
    sync:x:4:65534:sync:/bin:/bin/sync
    saned:x:108:108::/home/saned:/bin/false
    sshd:x:103:65534::/var/run/sshd:/bin/false

    "grep" nous renvoi trois lignes commençant par "s".
    "egrep" est une variante de "grep" qui inclut quleques fonctions supplémentaires.

    egrep '^sy(s|n)' /etc/passwd
    sys:x:3:3:sys:/dev:/bin/sh
    sync:x:4:65534:sync:/bin:/bin/sync

    "egrep" permet, entre autres, l'utilisation des parenthèses pour grouper les expressions régulières comme ci-dessus.

cut

Synopsis

cut [OPTION]... [FICHIER]...

Descriptif

"cut" est un outil qui va nous permettre de découper une ligne ou un fichier pour en récupérer la ou les colonnes qui nous intéressent.

cat /etc/passwd | grep '^sy' | cut -f 6 -d :

Cette commande renvoi le contenu de passwd vers un "grep" qui va à son tour renvoyer les lignes qui commencent par "root" vers un "cut". A ce moment précis, voilà ce qui est envoyé à "cut" :

sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync

La commande "cut -f 6 -d :" va donc renvoyer uniquement le champ 6, qui représente les dossiers "home" des utilisateurs dans le fichier "passwd". Chaque champ est délimité par ":", ce délimiteur est défini après l'options -d. L'option -f indique à "cut" de renvoyer seulement le ou les champs sélectionnés.

sed

Synopsis

sed [OPTION]... [FICHIER]...

Descriptif

"sed" est un filtre programmable qui combine les expressions rgulières et les commandes d'édition de "ed". Ce qui nous permet de remplacer une chaîne de caractères dans un fichier texte à partir du shell sans ouvrir d'éditeur de texte.

more test
Hello every body
Bonjour tous le monde
sed 's/us/ut/g' test
Hello every body
Bonjour tout le monde

Ci-dessus, on demande à "sed" de remplacer 'us' par 'ut' dans tout le fichier "test". On va décomposer la partie 'commande d'édition' de sed.

s/us/ut/g

Chaque sous-partie est séparée par un "/".
La première sous-partie qui contient la lettre "s" indique le type d'édition :
s --> subtitution
La deuxième sous-partie indique l'expression ou caractère à rechercher. Ici on recherche donc "us" et on désire le remplacer par le troisième sos-partie, c'est-à-dire "y".
La dernière sous-partie, le "g", lui indique que l'on veut changer toutes les occurences de "us" sur chaque ligne. Si le "g" n'était pas présent, "sed" ne modifierait que la première occurence de "us" sur chaque ligne. Dans notre cas, cela renverrait le même résultat car nous n'avons qu'une seule occurence de "us" dans le fichier. Notez que le résultat est affiché sur votre terminal et que le fichier test n'a pas été modifié. Il faut donc rediriger la sortie standard (StdOUT) vers un fichier "test2" pour enregistrer les modifications. En effet sed modifie le fichier directement à paritr du flux de données qui lui est envoyé en entrée et redirige le résultat vers la sortie standard.

sed 's/us/ut/g' test > test2
more test2
Hello every body
Bonjour tout le monde
mv test2 test

awk

Synopsis

gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
gawk [ POSIX or GNU style options ] [ -- ] program-text file ...

pgawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
pgawk [ POSIX or GNU style options ] [ -- ] program-text file ...

Descriptif

"awk" est un autre filtre semblable à "sed", encore plus puissant, faisant tout ce qui est possible avec "sed" mais en plus on peut lui demander des instructions écrites dans le langage de script proche du langage C. C'est une sorte d'interpréteur de langage C. Au niveau de son fonctionnement awk est identique aux autres filtres existants à part qu'il ne redirige pas directement le résultat vers la sortie standard : il associe une variable à chaque champs séparé par un délimiteur. Par défaut les champs sont délimités par les espaces ou les tabulations.

ps
PID TTY          TIME CMD
 3967 pts/0    00:00:00 bash
 5817 pts/0    00:00:00 ps
ps | awk '{ print $2" "$4 }'
TTY CMD
pts/0 bash
pts/0 ps
pts/0 awk

Ici on filtre le résultat renvoyé par la commande ps de manière à n'afficher que les champs TTY et CMD. "awk" associe les variables suivantes :

$1 à la première colonne ;
$2 à la seconde colonne qui délimitée par un espace par exemple ;
$3 à la troisième colonne etc ...

Si le délimiteur de champs est autre que l'espace ou la tabulation, il est modifiable avec l'option "-F".

ls -d /etc/s* | awk -F . '{print $1" extension: "$2}'
/etc/samba extension:
/etc/sane extension: d
/etc/screader extension:
/etc/scrollkeeper extension: conf
/etc/securetty extension:
/etc/security extension:
/etc/services extension:
/etc/sgml extension:
/etc/shadow extension:
/etc/shadow- extension:
/etc/shells extension:
/etc/skel extension:
/etc/smartd extension: conf
/etc/sound extension:
/etc/spamassassin extension:
/etc/ssh extension:
/etc/ssl extension:
/etc/subversion extension:
/etc/sudoers extension:
/etc/synchro extension:
/etc/sysctl extension: conf
/etc/syslog extension: conf
/etc/syslogout extension:
/etc/syslogout extension: d
/etc/sysprofile extension:
/etc/sysprofile extension: d

On a séparé le nom de l'extension pour chaque fichier présent dans le dossier /etc.

sort

Synopsis

sort [OPTION]... [FICHIER]...

Descriptif

"sort" a pour fonction principale de trier par ordre alphabétique les lignes d'un fichier mais "sort" peut aussi fusionner deux fichier gràce à l'option "-m".

echo test
pomme
orange
ananas
poire
banane
sort -n test
ananas
banane
orange
poire
pomme
sort -r test
pomme
poire
orange
banane
ananas

Comme vous pouvez vous en rendre compte, l'option -n trie les lignes dans l'ordre numérique, et l'option -r dans l'ordre inverse.

tr

Synopsis

tr char1 char2

Descriptif

"tr" échange des caractères imprimables par d'autres dans tout le contenu d'un fichier.

grep root /etc/passwd | tr : !
root!x!0!0!root!/root!/bin/bash

Ci-dessus on remplace simplement tous les ":" présents par "!" dans le fichier passwd que l'on a filtré en fonction de la chaîne de caractère "root".

wc

Synopsis

wc [OPTION]... [FICHIER]...

Descriptif

wc compte le nombre de bytes, mots, lignes et caractères contenus dans le fichier.

wc -c test
33 test

OptionDescription
-cCompte le nombre d'octets.
-mCompte le nombre de caractères.
-lCompte le nombre de lignes.
-wCompte le nombre de mots.

< ^ >