Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Linux
  3. Corrigé 7
Extrait - Linux Entraînez-vous sur les commandes de base : Exercices et corrigés (5e édition)
Extraits du livre
Linux Entraînez-vous sur les commandes de base : Exercices et corrigés (5e édition) Revenir à la page d'achat du livre

Corrigé 7

Prérequis

1.

Le shell est aussi appelé "interpréteur de commandes" car :

  • C’est lui qui traduit au système les instructions soumises par l’utilisateur via la ligne de commandes et qui présente les informations retournées à l’écran.

  • À la différence d’un compilateur utilisé en programmation (qui construit un fichier binaire compréhensible par le noyau Linux à partir d’un ensemble d’instructions contenues dans le code source), le shell interprète et exécute chaque commande au fur et à mesure que l’utilisateur les saisit.

2.

Les métacaractères regroupent les caractères séparateurs sur la ligne de commandes : <, >, |, ( );, &, l’espace, le retour à la ligne et la tabulation.

3.

Les caractères génériques permettent la création de motifs de remplacement sur les noms de fichiers : *? et [].

4.

Les caractères utilisés dans les substitutions de variables et de commandes sont : $, ` et {}.

5.

Les caractères de citation sont : \, " et .

6.

Les trois descripteurs de fichiers associés par défaut à un processus sont :

  • le clavier en entrée standard (descripteur numéro 0) pour que l’utilisateur puisse saisir les données...

Corrigé 7.1 Variables

1.

Appuyez sur les touches [Ctrl]-[Alt]-[F3], puis :

localhost login: tux 
Password: <le mot de passe n'apparaît pas> 
[tux]$ 

2.

[tux]$ set 
BASH=/bin/bash 
BASH_ARGC=() 
BASH_ARGV=() 
BASH_LINENO=() 
BASH_SOURCE=() 
... 

3.

[tux]$ var1=abc 
[tux]$ set 
BASH=/bin/bash 
BASH_ARGC=() 
BASH_ARGV=() 
BASH_LINENO=() 
BASH_SOURCE=() 
... 
var1=abc 

4.

[tux]$ echo $var1 
abc 

5.

[tux]$ echo $var2 

L’appel d’un nom de variable non défini ne génère aucune erreur ; le shell se contente de le remplacer par une chaîne vide.

6.

[tux]$ echo $HOME 
/home/tux 

La variable HOME contient le chemin complet du répertoire personnel de l’utilisateur actuellement connecté.

7.

[tux]$ HOME=/tmp 
[tux]$ pwd 
/home/tux 
[tux]$ cd 
[tux]$ pwd 
/tmp 

8.

[tux]$ LANG=C 
[tux]$ man bash 

Ce qui affiche :

BASH(1)                                                                BASH(1) 
 
NAME 
      bash - GNU Bourne-Again SHell 
 
SYNOPSIS 
      bash [options] [file] 
 
COPYRIGHT 
      Bash is Copyright (C) 1989-2004 by the Free Software Foundation, Inc. 
 
DESCRIPTION 
      Bash  is  an  sh-compatible  command language interpreter that executes 
      commands read from the standard input or from a file.  Bash also incor- 
      porates useful features from the Korn and C shells...

Corrigé 7.2 Caractères génériques, caractères d’expansion

1.

[tux]$ cd /etc 
[tux]$ pwd 
/etc 

2.

[tux]$ ls r* 
rc        rc.sysinit      resolv.conf              rmt        rndc.key 
rc.local  redhat-release  resolv.conf.predhclient  rndc.conf  rpc 
 
racoon: 
certs  psk.txt  racoon.conf 
 
rc0.d: 
K01yum                 K24irda           K72autofs     K89rdisc 
K02cups-config-daemon  K25sshd           K73ypbind     K90bluetooth 
K02haldaemon           K30sendmail       K74apmd       K90network 
... 

Le motif r* correspond bien à tous les noms de fichiers commençant par la lettre "r", dont certains sont des noms de répertoires. La commande ls affiche donc le contenu de ces répertoires.

3.

[tux]$ ls -d r* 
racoon  rc2.d  rc6.d       redhat-lsb               rhgb       rpc 
rc      rc3.d  rc.d        redhat-release           rmt        rpm 
rc0.d   rc4.d  rc.local  ...

Corrigé 7.3 Caractères de citation

1.

[tux]$ echo a b     
a b 
[tux]$ echo a   b   
a b 
[tux]$ echo "a   b" 
a   b 
[tux]$ echo 'a   b'  
a   b 
[tux]$ echo a\ \ \ b 
a   b 

Les arguments de la commande echo (qui peuvent être séparés par plusieurs espaces) sont affichés sur la sortie, séparés par un seul espace.

Dans le cas des deux premières commandes (sans les caractères de citation ", et \), les espaces font office de séparateurs d’arguments ; il y a donc deux arguments.

Pour les trois dernières commandes, la fonction de séparateur d’arguments des caractères espaces est désactivée par les caractères de citation ; il n’y a donc qu’un seul argument.

2.

[tux]$ cd / 
[tux]$ echo * 
bin boot dev etc home initrd lib lost+found media misc mnt net 
opt proc root sbin selinux srv sys tmp usr var 

La commande affiche tous les noms de fichiers présents dans le répertoire courant, car le caractère générique * est interprété par le shell (motif représentant tous les noms de fichiers du répertoire courant), puis les arguments ainsi générés sont affichés par la commande echo...

Corrigé 7.4 Redirections et tubes

1.

[tux]$ cat 
voici 
voici 
quelques 
quelques 
mots 
mots 

La séquence de touches [Ctrl]-D permet de terminer une commande utilisant le clavier comme entrée standard.

La commande cat retourne les lignes saisies en entrée (sans redirection, l’entrée standard est le clavier) sur sa sortie (sans redirection, la sortie standard est l’écran).

2.

[tux]$ wc 
voici quelques 
mots 
     2       3      20 

De nouveau, la séquence de touches [Ctrl]-D permet de terminer la commande normalement ; la séquence de touches [Ctrl]-C permettant d’arrêter l’exécution du processus ne produit pas le même effet (annulation de la commande, donc pas de statistiques en résultat).

La commande wc produit des statistiques sur les données reçues en entrée (sans redirection, l’entrée standard est le clavier).

3.

[tux]$ cat /etc/hosts 
# Do not remove the following line, or various programs 
# that require network functionality will fail. 
127.0.0.1               localhost.localdomain localhost 
[tux]$ cat < /etc/hosts 
# Do not remove the following line, or various programs 
# that require network functionality will fail. 
127.0.0.1            ...

Corrigé 7.5 Alias

1.

[tux]$ alias 
alias l.='ls -d .* --color=tty' 
alias ll='ls -l --color=tty' 
alias ls='ls --color=tty' 
alias vi='vim' 
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot 
--show-tilde' 

2.

[tux]$ alias ls='ls --color=tty' 

3.

La signification des couleurs de l’affichage est décrite dans les pages de manuel de la commande ls et du fichier de configuration /etc/DIR_COLORS.

4.

[tux]$ \ls 
... 

Ou :

[tux]$ command ls 
... 

5.

[tux]$ alias cd..='cd ..' 
[tux]$ cd /usr/lib 
[tux]$ pwd 
/usr/lib 
[tux]$ cd.. 
[tux]$ pwd 
/usr 

6.

[tux]$ alias 
alias cd..='cd ..' 
alias l.='ls -d .* --color=tty' 
alias ll='ls -l --color=tty' 
alias ls='ls --color=tty' 
alias vi='vim' 
alias which='alias | /usr/bin/which --tty-only --read-alias 
--show-dot --show-tilde' 
[tux]$ unalias cd.. 
[tux]$ alias        
alias l.='ls -d .* --color=tty' 
alias ll='ls -l --color=tty' 
alias ls='ls --color=tty' 
alias vi='vim' 
alias which='alias | /usr/bin/which --tty-only --read-alias 
--show-dot --show-tilde' 
[tux]$ cd.. 
-bash: cd..: command not found 

Corrigé 7.6 Exécution et substitution de commandes

1.

[tux]$ type cd vi find 
cd is a shell builtin 
vi is aliased to `vim' 
find is /usr/bin/find 

Dans cet exemple, la commande cd est une commande interne du shell Bash, vi est un alias de la commande vim, et find est une commande externe du shell dont le chemin absolu est /usr/bin/find.

2.

[tux]$ whereis grep ls fdisk       
grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz 
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz 
fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz 

3.

[tux]$ ps -e --no-heading | wc -l  
64 

4.

[tux]$ echo "il y a actuellement $(ps -e --no-heading | wc -l) processus" 
il y a actuellement 65 processus 
[tux]$ echo "il y a actuellement `ps -e --no-heading | wc -l` processus"  
il y a actuellement 65 processus 

5.

[tux]$ alias nbps='echo "il y a actuellement $(ps -e --no-heading | wc -l) processus"' 
[tux]$ nbps 
il y a actuellement 65 processus 

Corrigé 7.7 Options du shell Bash

1.

[tux]$ set -o 
allexport       off 
braceexpand     on 
emacs           on 
errexit         off 
errtrace        off 
functrace       off 
hashall         on 
histexpand      on 
history         on 
ignoreeof       off 
interactive-comments    on 
keyword         off 
monitor         on 
noclobber       off 
noexec          off 
noglob          off 
nolog           off 
notify          off 
nounset         off 
onecmd          off 
physical        off 
pipefail        off 
posix           off 
privileged      off 
verbose         off 
vi              off 
xtrace          off 

2.

[tux]$ PS4="DEBOGAGE>>> " 

3.

[tux]$ set -o xtrace 

Ou :

[tux]$ set -x 

4.

[tux]$ cd /etc ; ls -d X* 
DEBOGAGE>>> cd /etc 
DEBOGAGE>>> ls --color=tty...