0% ont trouvé ce document utile (0 vote)
18 vues78 pages

02 Shell

Le chapitre 2 présente une introduction au shell, un programme qui interprète les commandes et permet d'interagir avec le système d'exploitation. Il aborde les différences entre le shell et le terminal, le fonctionnement du shell, les commandes de base, ainsi que l'utilisation du manuel en ligne pour trouver des informations. Enfin, il mentionne l'importance des éditeurs de texte et des principes de conception des commandes UNIX.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
18 vues78 pages

02 Shell

Le chapitre 2 présente une introduction au shell, un programme qui interprète les commandes et permet d'interagir avec le système d'exploitation. Il aborde les différences entre le shell et le terminal, le fonctionnement du shell, les commandes de base, ainsi que l'utilisation du manuel en ligne pour trouver des informations. Enfin, il mentionne l'importance des éditeurs de texte et des principes de conception des commandes UNIX.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 2 : Introduction au shell

INF1070
Utilisation et administration des systèmes informatiques

Jean Privat & Alexandre Blondin Massé

Université du Québec à Montréal

v243

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 1 / 64
Plan

1 Shell

2 Manuel en ligne

3 Éditeur de texte

4 Commandes et arguments

5 Redirection et tube

6 Développement et caractères spéciaux du shell

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 2 / 64
Shell

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 3 / 64
Shell vs. terminal ⋆
Shell: le programme qui interprète les commandes
Le shell lit des commandes et les exécute
• bash (Bourne-Again shell) de GNU (1989) — le plus commun
• ash (Almquist shell) (1989) — minimaliste (embarqué, scripts)
• dash (Debian Almquist shell) (2002) — conforme à POSIX et dérivé
de ash
• PowerShell de Microsoft (2006)

Terminal: l’interface physique (ou virtuelle)


Un terminal c’est un clavier et un écran texte
• Fenêtre de terminal (émulateur de terminal)
Exemples: xterm, gnome-terminal, konsole, iTerm2, cmder
• Autre pseudo-terminal. Exemples: ssh, screen, tmux
• Terminal physique. Exemple: VT100 (de plus en plus rare)
Par défaut, l’émulateur de terminal exécute un shell

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 4 / 64
Pourquoi le shell ?

• Toujours présent
• Relativement portable (norme POSIX et standard de fait bash)
• Versatile
• Économe et fonctionne en réseau
• Automatisable (scriptable)
• Parfois le seul moyen pour des usages avancés
Un des objectif du cours: savoir utiliser efficacement le shell

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 5 / 64
Fonctionnement du shell ⋆

Le shell est un programme comme les autres


1 Affiche l’invite de commande
2 Lit la commande de l’utilisateur
3 Analyse la ligne de la commande et ses caractères spéciaux
4 Exécute la commande
5 Recommence au point 1
Quoi faire avec le shell?
• Naviguer dans et interagir avec le système de fichiers
• Exécuter et contrôler des commandes et des utilitaires
• Développer des petits programmes (scripts shell)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 6 / 64
Invite de commande shell

Invite (prompt): indique que l’utilisateur peut entrer des commandes


privat@lama :~/ ens/ INF1070$

• Nom de l’utilisateur: privat


• Nom de la machine: lama
• Répertoire courant: ~/ens/INF1070
• Indicateur d’utilisateur (à la fin)
• « $ » (utilisateur normal)
• « # » (super-utilisateur)
• Invite secondaire: « > » quand le shell a besoin de plus de saisies
L’invite est configurable

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 7 / 64
Saisie de commandes shell

Chaque commande saisie est autonome


• exécute la commande
Le shell affiche un message d’erreur si la commande est invalide
• et naviguent dans la ligne
• et naviguent dans l’historique
• Plein de petites fonctionnalités pratiques (ça dépend du shell)
$ echo Bonjour le monde
Bonjour le monde
$ uptime
[Link] up 1 day , 21:34 , 1 user
load average : 1,65, 1,81, 1,76
$ cmatrix
$ xeyes

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 8 / 64
Quelques commandes de base ⋆
• echo — afficher un message
• ls — lister le contenu du répertoire
• cat — afficher un fichier
• cd — changer de répertoire
• cd .. — revenir au répertoire parent
• cd - — retourner au dernier répertoire actif
• pwd — afficher le nom du répertoire courant
• exit — fermer le shell
$ ls
[Link] lisez -[Link] répertoire
$ cat lisez -[Link]
Bash est un interpréteur [...]
$ cd répertoire
$ ls
document .txt
$ cat document .txt
INF1070 - Utilisation et [...]
$ exit

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 9 / 64
Afficher un fichier texte ⋆

Commande cat (concatenate)


• cat [Link] — Affiche le contenu de [Link]
• cat [Link] [Link] — Affiche le contenu de [Link] suivi de celui
de [Link]
$ cat fichier1
$ cat fichier1 fichier2
$ cat fichier2 fichier1
$ cat --number fichier1
$ cat -n fichier1

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 10 / 64
Autres commandes d’affichage (+ ou - utiles)
• head — afficher les première lignes
• tail — afficher les dernières lignes
• less (et more) — afficher un fichier page par page
• nl — numéroter les lignes
• tac — afficher un fichier en commençant par la dernière ligne
• rev — inverser chacune des lignes affichées
• wc — compter le nombre de lignes, mots et octets
$ wc fichier1 fichier2
$ wc --lines fichier1 fichier2
$ wc -l fichier1 fichier2
$ wc --words fichier1 fichier2
$ wc -w fichier1 fichier2

$ head --lines 2 fichier1 fichier2


$ head --lines =2 fichier1 fichier2
$ head -n 2 fichier1 fichier2
$ head -n2 fichier1 fichier2

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 11 / 64
Manuel en ligne

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 12 / 64
Comment trouver de l’information?

Approche typique des utilisateurs


• Google
• Wikipedia
• StackOverflow
• Enseignant
• Démonstrateur
• L’association étudiante (AGEEI)

Approche unixienne efficace


En INF1070 (et cours suivants): le man
$ man ls
$ man date
$ man intro
$ man man

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 13 / 64
RTFM

Source: [Link]
J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 14 / 64
Naviguer dans le man
man utilise le paginateur (pager) less pour naviguer dans le document
• q quitte
• Espace ou Page défile d’une page
• ou défile d’une ligne
• g ou Home va au début
• G ou End va à la fin
• un nombre et avance du nombre de lignes indiquées
• /motif cherche l’occurrence suivante de motif
• n cherche l’occurrence suivante
• N cherche l’occurrence précédente
• h pour un résumé des commandes et des raccourcis clavier

less s’utilise aussi de façon autonome


$ less /usr/ share/common - licenses /GPL -3

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 15 / 64
Sections de manuel

1 Programmes de l’utilisateur
2 Appels système
3 Fonction de bibliothèque
4 Fichiers spéciaux
5 Formats de fichiers et conventions
6 Jeux
7 Divers
8 Programmes de l’administrateur
Pour spécifier la section (en cas d’ambiguïté)
• man 2 mkdir
• man -s 2 mkdir
• man mkdir.2

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 16 / 64
Contenu des pages de man

Les pages de man suivent souvent le même schéma


• Titre avec le numéro de la section
• Nom nom de la commande
• Synopsis syntaxe générale
• « [] » désigne une information optionnelle
• « | » désigne une alternative (ou)
• « ... » désigne une information répétable
• Description explications détaillées
• Options liste et description des options

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 17 / 64
Autre sources d’information
• info pour la doc complète des outils GNU (par exemple, info info)
• yelp pour l’aide de GNOME
• apropos pour chercher dans le man (apropos uptime)
• help pour les primitives du shell (help cd)
• option --help des commandes (ls --help)
Sur internet
• [Link]
explications interactives des lignes de commandes
• [Link]
manuels courts basés sur des exemples
• [Link]
les manpages de Debian
• [Link]
La spécification POSIX (IEEE-1003.1-2024)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 18 / 64
Éditeur de texte

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 19 / 64
Éditeur de texte
• Logiciel facilitant la manipulation de fichiers textes
• Texte brut (sans mise en forme) ≠ traitement de texte
• Police à chasse fixe pour l’alignement vertical (indentation)
• Utilisé pour la programmation (code source)
• Utilisé pour l’administration système (fichiers de configuration)
L’offre d’éditeurs de texte est très variée
• Notepad/Notepad++ (Windows)
• TextEdit (MacOS)
• gedit (multiplateforme)
• SublimeText (multiplateforme)
• Visual Studio Code (multiplateforme)
• Emacs et ses dérivés (multiplateforme)
• Vi/Vim et ses dérivés (multiplateforme)
• nano (Unix)
• ed le premier éditeur texte Unix (≈ 1969), toujours disponible

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 20 / 64
Vi/Vim

Éditeur utilisé en classe: vim


• Vous pouvez utiliser vim ou nano
Caractéristiques de vi/vim
• Un des plus anciens éditeurs de texte
• Un des éditeurs de texte les plus utilisés dans le monde
• Ancêtre: Vi, créé par Bill Joy en 1976
• Vim = Vi iMproved
• Multiplateforme (Linux, MacOS, Windows)
• Standard sous UNIX (≈ déjà installé)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 21 / 64
Avantages/inconvénients de vim

Avantages
• Très mature
• Interaction directe avec le terminal
• Rapide et léger, en particulier pour le travail à distance
• Hautement configurable

Inconvénients
• Orienté seulement clavier (certains dérivés, comme GVim, permettent
une utilisation limitée de la souris)
• Courbe d’apprentissage difficile quand on débute

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 22 / 64
Commandes et arguments

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 23 / 64
Principe des commandes UNIX (Unix philosophy)

Quelques règles de conception


• Chaque programme fait une chose et le fait bien
• Afficher seulement ce qui est demandé (Ne pas polluer les résultats)
• Lire et afficher du texte (car c’est universel)
• Éviter les commandes interactives
Préférer les options, les arguments et l’entrée standard

Objectifs
• Les commandes sont claires et simples
• Les commandes sont destinées à l’humain
• Les commandes sont scriptables et combinables

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 24 / 64
Principe des commandes UNIX (Unix philosophy)

« Many UNIX programs do quite trivial things in isolation, but,


combined with other programs, become general and useful tools. »
— Brian Kernighan et Rob Pike, The UNIX Programming Envi-
ronment (1984)

On y reviendra…

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 25 / 64
Standards des utilitaires ⋆
D’un système à l’autre et d’une version à l’autre,
Les commandes de base et leurs options varient
C’est pourquoi des standards existent
• POSIX (IEEE-1003.1): outils et comportements standard Unix
Maintenu par l’IEEE (et l’Open Group)
• LSB (Linux standard base): suppléments pour distributions
Maintenu par la fondation Linux
• GNU - extensions des utilitaires GNU
Inclut les options longues des commandes POSIX
• Extra: le reste
Habituels, souvent installés par défaut
Sauf mention contraire (ou oublis) les commandes et options vues en cours
sont conformes POSIX.1-2017

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 26 / 64
Arguments des commandes

Chaque commande traite ses arguments


• De sa façon spécifique
• Lisez le manuel
Il y a quand même des conventions
• Des options: qui commencent par « - »
• Le reste des arguments: qui ne commencent pas par « - »
Attention
Chaque commande peut avoir une gestion spécifique des arguments

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 27 / 64
Options des commandes

• Activent certains comportements spécifiques


• Configurent certains paramètres
• Sont combinables
Options courtes
• Commencent par « - » (tiret)
• Une lettre (ex. « cat -n »)
• S’agglutinent (ex. « cat -nE » vaut « cat -n -E »)
• Note: -n et -E sont des extensions GNU
Options longues (style GNU)
• Commencent par « -- » (deux tirets)
• Ont parfois un synonyme court
• Exemple: « cat --number --show-ends »

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 28 / 64
Conventions

Certaines options sont comprises par de nombreuses commandes


• --help — affiche l’aide
• --verbose — mode verbeux
• --version — affiche la version de la commande

Rappel: chaque commande a ses propres règles

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 29 / 64
Conventions

Certaines options sont comprises par de nombreuses commandes


• --help — affiche l’aide
• --verbose — mode verbeux
• --version — affiche la version de la commande

Rappel: chaque commande a ses propres règles

Questions
• Que fait l’option « -h » de la commande ls (GNU) ?
• Comment afficher la version de la commande java ?
• Qu’affiche « echo --help » ?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 29 / 64
Options avec valeur
Plusieurs syntaxes. Ça dépend de l’outil.

• head -n 5 [Link] • head --lines 5 [Link]

• head -n5 [Link] • head --lines=5 [Link]

Mais tout ne fonctionne pas

• head -n=5 [Link] • head --lines =5 [Link]

• head --lines5 [Link] • head --lines= 5 [Link]

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 30 / 64
Options avec valeur
Plusieurs syntaxes. Ça dépend de l’outil.

• head -n 5 [Link] • head --lines 5 [Link]

• head -n5 [Link] • head --lines=5 [Link]

Mais tout ne fonctionne pas

• head -n=5 [Link] • head --lines =5 [Link]

• head --lines5 [Link] • head --lines= 5 [Link]

Question
« git commit --amend » vs. « git commit -amend » ?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 30 / 64
Options avec valeur
Plusieurs syntaxes. Ça dépend de l’outil.

• head -n 5 [Link] • head --lines 5 [Link]

• head -n5 [Link] • head --lines=5 [Link]

Mais tout ne fonctionne pas

• head -n=5 [Link] • head --lines =5 [Link]

• head --lines5 [Link] • head --lines= 5 [Link]

Question
« git commit --amend » vs. « git commit -amend » ?
• « --amend » est une option longue
• « -amend » = « -a -mend » = « --all --message=end »

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 30 / 64
Complètement (completion)

Le shell bash peut aider à écrire les commandes


Tabulation simple (ou tab)
• complète l’argument ou l’option (si possible)
• cat /etc/pas
→ complète: cat /etc/passwd

Tabulation double (ou tab-tab)


• affiche une liste d’options ou d’arguments possibles
• ls --re
→ propose: --recursive --reverse
Bash adapte le complètement aux commandes qu’il connaît
Certains shells sont plus avancés (zsh, powershell)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 31 / 64
Type des commandes
$ bonjour
bash: bonjour : commande introuvable

Une commande simple peut être


• Un exécutable
Un programme autonome, souvent dans /bin ou /usr/bin
• Une commande interne du shell (primitive, built-in)
• Un alias du shell
• Une fonction du shell
alias et fonctions: les détails une autre fois…
Manuel des commandes internes
• man bash
• man bash-builtins
• commande help (une commande interne de bash)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 32 / 64
Commande type

La commande type permet de connaitre le type des commandes


$ type cat cd ls quote
cat est /bin/cat
cd est une primitive du shell
ls est un alias vers « ls --color =auto »
quote est une fonction

Question
Quel est le type des commandes type, help, man et bash ?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 33 / 64
Commande type

La commande type permet de connaitre le type des commandes


$ type cat cd ls quote
cat est /bin/cat
cd est une primitive du shell
ls est un alias vers « ls --color =auto »
quote est une fonction

Question
Quel est le type des commandes type, help, man et bash ?
$ type type help man bash
type est une primitive du shell
help est une primitive du shell
man est /usr/bin/man
bash est /bin/bash

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 33 / 64
Homonymie 

Quelle sont les différences entre les commandes suivantes ?


$ ls
$ /bin/ls
$ command ls
$ echo bonjour
$ /bin/echo bonjour
$ command echo bonjour
$ builtin echo bonjour

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 34 / 64
Homonymie 

Attention aux commandes homonymes de types différents


La priorité est: alias > fonction > primitive > exécutable
$ type -a ls echo
ls est un alias vers « ls --color =auto »
ls est /bin/ls
echo est une primitive du shell
echo est /bin/echo

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 35 / 64
Redirection et tube

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 36 / 64
Redirection en sortie ⋆

Le résultat des commandes va sur la sortie standard


• Par défaut, la sortie standard est l’écran terminal
• Mais le shell peut la rediriger vers un fichier
$ ls -l hello .txt > [Link]
$ cat [Link]
-rw -r--r-- 1 privat privat 460 aoû 15 20:23 [Link]

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 37 / 64
Redirection en sortie ⋆

Opérateurs shell de redirections: « > » et « >> »


• « > f » écrit dans le fichier f depuis le début (écrase, overwrite)
• « >> f » écrit à la suite du fichier f (ajoute, append)
• Dans les deux cas, si f n’existe pas, il est créé
$ echo uno > tata
$ echo dos >> tata
$ cat tata
uno
dos

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 38 / 64
Sortie d’erreur standard

Les commandes distinguent deux sorties


• la sortie standard pour les résultats normaux
• la sortie d’erreur standard pour les messages d’erreurs et de
diagnostics
$ ls -l hello .txt [Link] > [Link]
ls: impossible d' accéder à '[Link] ':
Aucun fichier ou dossier de ce type
$ cat [Link]
-rw -r--r-- 1 privat privat 460 aoû 15 20:23 [Link]

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 39 / 64
Redirection d’erreur standard

« 2> » (et « 2>> ») redirigent la sortie d’erreur standard vers un fichier


$ ls -l hello .txt [Link] > [Link] 2> [Link]
$ cat [Link]
-rw -r--r-- 1 privat privat 460 aoû 15 20:23 [Link]
$ cat [Link]
ls: impossible d' accéder à '[Link] ':
Aucun fichier ou dossier de ce type

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 40 / 64
/dev/null

• Un fichier spécial qui accepte (et ignore) des données


• On l’utilise pour ignorer des sorties de commande
• Souvent utilisé pour taire la sortie d’erreur standard
$ ls -l hello .txt [Link] 2> /dev/null
-rw -r--r-- 1 privat privat 460 aoû 15 20:23 [Link]

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 41 / 64
Tubes ⋆

Le « | » (tube, pipe) connecte des commandes


• La sortie standard de l’une est connectée à
• l’entrée standard de la suivante
$ echo bonjour le monde | wc
1 3 17
$ echo bonjour le monde | rev | lolcat
ednom el ruojnob

Une conduite (pipeline) est une suite de commandes connectées par des
tubes

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 42 / 64
Tubes et filtres

De nombreuses commandes traitent, filtrent ou transforment l’entrée


standard vers la sortie standard
• head, tail, less, tac, rev, wc
• sort – trier les lignes
• uniq – éliminer les lignes répétées
• tr – convertir ou éliminer des caractères
• grep – afficher les lignes correspondant à un motif
• cowsay – vache qui parle (extra)
• lolcat – colorer en arc-en-ciel (extra)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 43 / 64
Fichiers en arguments et entrée standard

La plupart des commandes traitent les fichiers et l’entrée standard


Convention habituelle des commandes
• Si plusieurs fichiers
→ Ils sont traités dans l’ordre
• Si un fichier n’existe pas
→ La commande affiche un message d’erreur
• Si pas de fichier
→ La commande lit l’entrée standard
• Si un argument est « - » (tiret seul)
→ Ça désigne aussi l’entrée standard

Convention ≠ standard
• Chaque commande a son propre comportement
• Lisez le manuel (cat par exemple)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 44 / 64
Questions de tube

Construire une conduite qui


• Affiche le fichier [Link]
• Trie les lignes
• Sélectionne les lignes qui contiennent « il »
• Transforme a, e, i et o en 4, 3, 1 et 0
• Fait parler la vache

Que font les commandes suivantes ?


$ rev [Link] | tac
$ rev [Link] | tac -
$ rev [Link] | tac lisez -[Link] -
$ rev [Link] | tac lisez -[Link]

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 45 / 64
L’entrée standard au clavier
L’entrée standard est l’entrée naturelle des commandes
• Par défaut, l’entrée standard est le clavier du terminal
• Les touches ctrl + D terminent l’entrée clavier
Prononcer « contrôle-dé », écrire « ^D »
$ tac
bonjour
le monde
^D
le monde
bonjour

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 46 / 64
L’entrée standard au clavier
L’entrée standard est l’entrée naturelle des commandes
• Par défaut, l’entrée standard est le clavier du terminal
• Les touches ctrl + D terminent l’entrée clavier
Prononcer « contrôle-dé », écrire « ^D »
$ tac
bonjour
le monde
^D
le monde
bonjour

Questions
• Quelle est la différence entre ^D et la touche enter ( )?
• Quelle est la différence entre ^D et ^C ?
• Quelle est la différence si on remplace tac par rev ?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 46 / 64
Commandes interactives

• Les commandes interactives dialoguent avec l’utilisateur


• Il saisit des instructions ou répond aux questions via le terminal
sh — démarrer un interpréteur de commande (shell)
$ sh
$ echo hello
hello
$ exit

python — lancer l’interpréteur du langage de programmation Python


$ python3
>>> print (1+1)
2
>>> quit ()

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 47 / 64
Redirection en entrée
« < » redirige l’entrée standard depuis un fichier
$ cat < hello .txt
Bonjour [...]

Nécessaire pour lire un fichier avec certaines commandes

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 48 / 64
Redirection en entrée
« < » redirige l’entrée standard depuis un fichier
$ cat < hello .txt
Bonjour [...]

Nécessaire pour lire un fichier avec certaines commandes

Questions
Quelle est la différence entre ?
• tr B b [Link]
• tr B b < [Link]
Même question avec :
• head -v [Link]
• head -v < [Link]
Même question en supposant qu’[Link] n’existe pas :
• head -v [Link]
• head -v < [Link]

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 48 / 64
Questions de redirection et tubes
Quelle est la différence entre les commandes suivantes ?
$ ls | wc
$ ls > wc
$ ls < wc

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 49 / 64
Questions de redirection et tubes
Quelle est la différence entre les commandes suivantes ?
$ ls | wc
$ ls > wc
$ ls < wc

$ ls | wc -l
$ ls > wc -l
$ ls < wc -l

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 49 / 64
Questions de redirection et tubes
Quelle est la différence entre les commandes suivantes ?
$ ls | wc
$ ls > wc
$ ls < wc

$ ls | wc -l
$ ls > wc -l
$ ls < wc -l

Quelle est la différence entre


$ ls > fichier
$ wc -l < fichier

et
$ ls | wc -l

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 49 / 64
Entrée standard = concept complexe 

Plusieurs entités entrent en jeu


• L’entrée standard est un concept abstrait du système
d’exploitation
• Le terminal s’occupe du clavier
Lit du texte et gère ^D, ^C, enter…
• La commande se contente de lire l’entrée standard
Sans se soucier de son origine
Les entrées-sorties et les terminaux sont plus complexes qu’il n’y parait
• On entrera plus dans les détails une autre fois
• Et surtout en INF3135 et INF3173

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 50 / 64
Conclusion des redirections et des tubes

Principe des commandes UNIX (Unix philosophy)


« Many UNIX programs do quite trivial things in isolation, but, combined
with other programs, become general and useful tools. »
— Brian Kernighan et Rob Pike, The UNIX Programming Environment
(1984)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 51 / 64
Conclusion des redirections et des tubes

Principe des commandes UNIX (Unix philosophy)


« Many UNIX programs do quite trivial things in isolation, but, combined
with other programs, become general and useful tools. »
— Brian Kernighan et Rob Pike, The UNIX Programming Environment
(1984)

On ira plus loin sur les redirections et tubes une autre fois

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 51 / 64
Développement et caractères spéciaux du shell

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 52 / 64
Développement des noms de fichiers (glob) ⋆

Désigner simplement un ensemble de fichiers selon un motif


• Point d’interrogation ? — un caractère quelconque
• Étoile * — zéro, un ou plusieurs caractères
• Crochets [] — un seul des caractères de la liste
Exemples
•« cat *.txt » se terminent par .txt
•« cat ?[oa]* » la deuxième lettre est a ou o

Note
• Le glob est géré par le shell (pas par la commande)
• La commande ne voit que les arguments une fois développés
Les détails: le manuel de glob(7)

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 53 / 64
Commande echo

echo — Affiche chacun des arguments séparés par un espace


$ echo a b cd
a b cd

Pratique pour comprendre ce qui se passe

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 54 / 64
Commande echo

echo — Affiche chacun des arguments séparés par un espace


$ echo a b cd
a b cd

Pratique pour comprendre ce qui se passe

Questions
Qu’affichent les commandes suivantes ?
• echo --ya-quelqu-un
• echo *
• echo [*]
• echo ? ?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 54 / 64
Caractères spéciaux

Un caractère spécial est un caractère qui n’a pas un sens littéral


Exemples
•« ^D » et « ^C » sont spéciaux pour le terminal
•« * » et l’espace sont spéciaux pour le shell
•« - » en début d’argument est spécial pour la plupart des commandes

Difficultés
• Le sens d’un caractère dépend du contexte
• Chaque commande a ses règles
• Les règles sont + ou - compliquées
• Forcer l’interprétation littérale est + ou - complexe

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 55 / 64
Échapper avec la contre-oblique

• Échapper avec « \ » (contre-oblique, backslash)


→ Annule le caractère spécial qui suit
$ echo \*
*

Le « \ » s’utilise pour échapper des caractères dans d’autres contextes

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 56 / 64
Échapper avec la contre-oblique

• Échapper avec « \ » (contre-oblique, backslash)


→ Annule le caractère spécial qui suit
$ echo \*
*

Le « \ » s’utilise pour échapper des caractères dans d’autres contextes

Questions
Qu’affichent les commandes suivantes ?
$ echo a \ b
$ echo a \\ b
$ echo a \\\ b
$ echo a \ \ \ b

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 56 / 64
Encadrer avec les guillemets simples

• « ' » (guillemet simple, simple quote)


→ Force l’interprétation littérale jusqu’au prochain « ' »
$ echo '* \'
* \

On peut utiliser « \ » sur le premier « ' » pour l’ignorer


$ echo \'
'

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 57 / 64
Encadrer avec les guillemets simples – Questions

Qu’affichent les commandes suivantes ?


$ echo 'abc \\def '
$ echo abc '\\' def
$ echo abc ''def
$ echo abc '' def
$ echo 'abc '\\ 'def '

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 58 / 64
Encadrer avec les guillemets doubles

• « " » (guillemets doubles, double quote)


→ Une version amoindrie de « ' »
→ Permet 3 caractères spéciaux internes: « \ », « $ » et « ` » (on les
verra plus tard)
$ echo "* \" \\"
* " \

Attention! Ne pas confondre avec les chaînes de caractères des langages


de programmation

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 59 / 64
Encadrer avec les guillemets doubles – Questions

Qu’affichent les commandes suivantes ?


$ echo hello
$ echo "hello "
$ "echo" hello
$ "echo hello "

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 60 / 64
Commande printf 
printf — Affiche chacun des arguments selon un format
$ printf "*«%s»\n" a cd
*«a»
*«cd»

Dans le format, % et \ indiquent des séquences spéciales


• %s Un argument sous forme de chaine (string)
• \n Un saut de ligne (newline)
• Consulter le man pour le reste.

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 61 / 64
Commande printf 
printf — Affiche chacun des arguments selon un format
$ printf "*«%s»\n" a cd
*«a»
*«cd»

Dans le format, % et \ indiquent des séquences spéciales


• %s Un argument sous forme de chaine (string)
• \n Un saut de ligne (newline)
• Consulter le man pour le reste.

Questions
Qu’affichent
• printf %s *
• printf %s\\n *
• printf * %s\n a b cd

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 61 / 64
Caractères spéciaux du shell

Questions
• Les caractères « \ », « " » ou « ' » sont-ils spéciaux ?
• Qu’affiche « echo "'\""\\'"'\' » ?
• Comment afficher le contenu du fichier « l'espace infini » ?

Autres caractères spéciaux du shell


• Il y en a plein, on en verra quelques-uns au fur et à mesure
• Tout est documenté dans bash

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 62 / 64
Caractères spéciaux des commandes

• Chaque commande a ses propres règles


• Et ses propres options qui changent les règles
$ echo 'Une ligne\n\tbrisée '
Une ligne\n\ tbrisée
$ echo -e 'Une ligne \n\tbrisée '
Une ligne
brisée

Note: echo -e n’est pas POSIX, printf l’est.

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 63 / 64
Caractères spéciaux des commandes

• Chaque commande a ses propres règles


• Et ses propres options qui changent les règles
$ echo 'Une ligne\n\tbrisée '
Une ligne\n\ tbrisée
$ echo -e 'Une ligne \n\tbrisée '
Une ligne
brisée

Note: echo -e n’est pas POSIX, printf l’est.


Question
• Qu’affiche « echo -e Une ligne\\n\\tbrisée »?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 63 / 64
Caractères spéciaux des commandes

Par convention « -- » désigne la fin des options


$ cat -n world .txt
1 Bonjour
2 Monde
$ cat -- -n
Un bon numéro
$ cat -- -n [Link]
Un bon numéro
Bonjour
Monde

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 64 / 64
Caractères spéciaux des commandes

Par convention « -- » désigne la fin des options


$ cat -n world .txt
1 Bonjour
2 Monde
$ cat -- -n
Un bon numéro
$ cat -- -n [Link]
Un bon numéro
Bonjour
Monde

Questions
• Comment numéroter les lignes du fichier « -n » ?
• Comment afficher le contenu du fichier « -- » ?
• Qu’affiche « echo -- -e "a\nb" » ?

J. Privat & A. Blondin Massé (UQAM) Chapitre 2 : Introduction au shell INF1070 v243 CC-BY-NC-SA 64 / 64

Vous aimerez peut-être aussi