Une petite introduction au BASH (Born Again Shell)

Le shell ou terminal est un interpréteur de ligne de commande.

Une commande est un ensemble d’instructions ou tâches données à l’ordinateur.

l'intérêt de travailler en ligne de commande plutôt qu’en interface graphique est de pouvoir automatiser une tâche ou un ensemble de tâches complexes.

Fichiers, répertoires, liens symboliques

Le fichier ou plus exactement le nom du fichier est un pointeur. Un pointeur va indiquer à la machine la position exacte sur le disque dur où la lecture du fichier peut se faire.

Il est possible de lire, écrire ou exécuter un fichier. Pour pouvoir faire ces actions, il faut absolument donner le pointeur c’est-à-dire le nom du fichier.

Le répertoire est aussi un pointeur mais qui pointe non pas sur un fichier mais sur une liste d’autres pointeurs. Un répertoire “contient” (plus exactement “pointe vers”) des fichiers (plus exactement “des noms de fichiers”). Comme le répertoire est aussi un pointeur, un répertoire peut contenir d’autres répertoires.

Les liens symboliques sont des pointeurs qui pointe vers d’autres pointeurs (répertoire ou fichier). Pour faire simple, ce sont des copies de pointeurs. Utiliser un lien symbolique revient à utiliser le nom du fichier/répertoire vers lequel il pointe.

Se déplacer dans l’arborescence des fichiers.

Change Directory cd

Permet d’aller à l’intérieur d’un répertoire.

Commandes

Se rendre au répertoire root. (c’est le répertoire parent ultime)

cd /

Se rendre au répertoire home. (le répertoire dédié à l’utilisateur)

cd ~

OU

cd /home/user

Se rendre au répertoire courant (cette commande est inutile car vous êtes déjà dans le répertoire courant)

cd .

Se rendre au répertoire parent. (très utile)

cd ..

Se rendre au répertoire précédement consulté

cd -

Se rendre au répertoire mon_dossier dans le répertoire courant.

cd mon_dossier

Se rendre au répertoire mon_dossier_dans_le_dossier qui est dans le répertoire mon_dossier

## en deux commandes
cd mon_dossier
cd mon_dossier_dans_le_dossier
## en une seule commande
cd mon_dossier/mon_dossier_dans_le_dossier

Notion de chemin relatif et de chemin absolu.

Souvent quand on débute sur le shell (et même après), la plupart des erreurs viennent du fait qu’on a mal indiqué le répertoire où aller. (utiliser le chemin relatif est moins rébarbatif mais plus périlleux)

Quand vous entrez des chemins vers un fichier, ne pas hésiter à utiliser l’auto-complétion avec la touche TAB.

Print name of Working Directory pwd

permet de connaître le chemin absolu(c’est-à-dire en partant de root) du répertoire dans lequel je me trouve.

Commande

pwd

Output

/le_repertoire/ou_je_me/trouve/

je me trouve actuellement dans le répertoire /le_repertoire/ou_je_me/trouve/

List ls

permet d’afficher la liste des noms de tous les fichiers et répertoires présents dans le répertoire désigné. (par défaut le répertoire courant)

Commande

ls

Output

fichier_dans_le_repertoire_courant

Pour lister les fichiers/repertoires dans le repertoire courant

ls mon_dossier

Output

fichier_dans_mon_dossier

Pour lister les fichiers/répertoires dans le répertoire mon_dossier

ls -l mon_dossier

Output

-rw-rw-r-- 1 user teamBI 697 janv. 23 11:09 fichier_dans_mon_dossier

l’option -l permet d’afficher le détail des fichiers dans le répertoire mon_dossier.
-rw-rw-r--

Par exemple ici mon fichier fichier_dans_mon_dossier peut-être lu et écrit mais pas executé par l’utilisateur user, il peut être lu et écrit par les membres du groupe teamBI et les invités peuvent lire ce fichier. Ce fichier a une taille 697bytes, a été créer le 23 janvier à 11:09.

Commandes utiles

Manual man

Affiche le manuel d’utilisation d’une fonction, d’un programme du shell

Commmande

man ls

Afficher les 15 premières lignes d’un fichier

Commande

head mon_fichier

Afficher les 15 premières lignes de mon_fichier sur le shell

tail

Afficher les 15 dernières lignes d’un fichier

Commande

tail mon_fichier

Afficher les 15 dernières lignes de mon_fichier sur le shell

File viewing more

Afficher le contenu d’un fichier dans le shell. more est très basique.

Commande

more mon_fichier

Afficher le contenu de mon_fichier sur le shell

Advanced file viewing less

Afficher le contenu d’un fichier dans le shell mais sur une session (un peu comme si vous ouvriez word.

Commande

less mon_fichier

Afficher le contenu de mon_fichier dans une session du shell

Text editor vi

Permet de lire et d’éditer un fichier comme si vous utilisez le bloc note de windows (mais avec énormément d’options supplémentaires) Il existe beaucoup de text editor sur linux : le plus connu est vi (vim étant la version améliorée) et le deuxième plus connu est nano.

Commande

vi mon_fichier

Afficher le contenu de mon_fichier dans une session vi. Par défaut vi ne vous permet que de lire le fichier.

Note : si mon_fichier n’existe pas au moment où vous entrer la commande, le fichier mon_fichier sera alors créer

echo

Cette commande est vraiment pratique associée à d’autres commandes parce qu’elle retourne son input en une ligne de texte interprétable dans le shell. Toute seule, elle est plutôt inutile

Commande

Retourne la chaine de caractere “coucou” en une chaine de caractere sur le shell

echo “coucou”

Output

coucou

Autre exemple

Retourne le nom du fichier en une chaine de caractère du nom du fichier sur le shell.

echo mon_fichier

Output

mon_fichier

Concatenate cat

Permet de concaténer des fichiers ensemble

Commande

affiche le contenu du fichier dans le terminal

cat mon_fichier

Concatener deux fichiers ensemble

Affiche le contenu de mon_fichier1 et mon_fichier2 fusionné dans le terminal

cat mon_fichier1 mon_fichier2

Affiche le contenu de mon_fichier2 et mon_fichier1 fusionné dans le terminal

cat mon_fichier2 mon_fichier1

Word Count wc

Permet de compter le nombre de mots dans un fichier/input

Commande

wc mon_fichier

Output

1    2    3 mon_fichier

le nombre de ligne, le nombre de mots et le nombre de caracteres dans mon_fichier. Ici il y a une ligne, deux mots et 3 caracteres(1 mot avec 1 caractere et l’autre avec 2 caracteres.

Compter les lignes dans un fichier

L’option -l donne uniquement le nombre de lignes.

wc -l mon_fichier

Output

Il y a une seule ligne dans mon_fichier

1

Compter les mots dans un fichier

L’option -w donne uniquement le nombre de mots.

wc -w mon_fichier

Output

2

Compter les caractères dans un fichier

L’option -c donne uniquement le nombre de caracteres.

wc -c mon_fichier

Output

3

Combiner les commandes

La plupart des programmes LINUX sont conçus selon le principe “faire une seule chose mais le faire très bien”. Par exemple ls affiche la liste des fichiers dans un répertoire et wc permet de compter combien il y a d’éléments dans une entrée.

Il faut comprendre un programme basiquement comme cela :

input(entree) → programme → output(sortie)

Par exemple :

ls .

ouput :

fichier1, fichier2, fichier3

Cette commande affiche les noms des 3 fichiers dans mon repertoire courant

Maintenant essayons de combiner ce programme à un autre en utilisant le pipe |
ls . | wc -w

ouput :

3

note : le ; permet de différencier deux lignes de commandes. Vous pouvez utiliser le saut à la ligne ou le “;” indifféremment.

Par exemple
echo “coucou” > coucou.txt ; more coucou.txt

output :

coucou

J’ai écrit la sortie de echo dans le fichier nommé coucou.txt. J’ai ensuite afficher le contenu de coucou.txt avec more. Je vois alors ce que j’avais écrit pour echo écrit dans ce fichier.

Suite de l’exemple
cat coucou.txt | wc -c > nombre_carac_coucou.txt
cat coucou.txt nombre_carac_coucou.txt > coucou_nombre.txt
more coucou.txt

output :

coucou
more nombre_carac_coucou.txt

output :

7
more coucou_nombre.txt

output :

coucou
7

note : Pourquoi 7 caractères pour “coucou” qui en compte en réalité 6 ? Hé bien parce que le programme a aussi compté le saut à la ligne comme un caractère. En effet j’ai écrit “coucou” mais j’ai donné la sortie de echo et echo par défaut ajoute un saut de ligne (c’est plus propre). Donc echo a envoyé à wc la chaîne de caractères : coucou\n (\n retour chariot, le caractère saut à la ligne) Si vous êtes perfectionniste ajouter l’option -n à echo soit la commande:

echo -n "coucou" | wc -c

Alors echo n’ajoutera pas de saut de ligne et wc -c comptera 6 caractères. Cet exemple pour vous dire de rester vigilant sur vos résultats, et le comportement de vos programmes, prenez le temps de bien les comprendre pour choisir le programme le plus approprié à ce que vous voulez faire.