Commandes basiques du Shell

Sommaire

Index

Affichage et gestion des dossiers

Affichage du contenu d’un dossier

On utilise la commande ls:

ls

Seul les noms des fichiers contenus dans le dossier sont affichés.

Affichage étendu (affichage long)

On utilise la commande ls -l:

$ ls -l
total 12
-rw-r--r-- 1 supv supv   25 Jul  4 09:28 fichier.txt
drwxr-xr-x 2 supv supv 4096 Jul  3 16:26 dossier
lrwxrwxrwx 1 supv supv   11 Jul  4 09:28 lien -> fichier.txt

Création d’un dossier

mkdir chemin/vers/dossier

Création d’une arborescence

Si le dossier chemin n’existe pas:

mkdir -p chemin/vers/dossier/et/ses/sous/dossiers

Suppression

Suppression d’un dossier vide

mkdir dossier/vide
rmdir dossier/vide

Suppression d’un dossier non vide

touch chemimn/vers/dossier/un_fichier
rm -r chemin/vers/dossier

Affichage et gestion de fichiers

Affichage d’un contenu

On utilise la commande cat pour afficher le contenu d’un fichier texte :

cat .bash_history

Tous les fichiers commençant par un point . sont des fichiers cachés : ils ne sont pas affichés par la commande ls (sauf si une option force cet affichage).

Copie de fichier

La commande suivante copie le fichier .bashrc vers le fichier .bashrc.bak

$ cp .bashrc .bashrc.bak

Cette commande prend au moins deux paramètres :

C’est le meilleur moyen de sauvegarder un fichier pour éviter de perdre son contenu en cas d’erreur de manipulation.

On dit qu’on fait un backup, d’où l’extension du fichier: .bak

Création de répertoire

Créer un répertoire se fait en utilisant la commande mkdir :

$ mkdir Backup

Déplacement

Déplacer un fichier se fait en utilisant la commande mv

$ mv .bashrc.bak Backup/

Renommage

Pour changer la nom d’un fichier, on utilise la commande mv :

mv Backup DossierArchives

Création de fichiers vides

Cette commande permet de créer ou de modifier la date de dernière modification d’un fichier à la date actuelle:

touch fichierVide

Suppression

De fichier

On utilise la commande rm :

rm fichierVide

De dossier

Dossier vide

Utilisation de rmdir

rmdir dossierVide

C’est une solution sécure, puisqu’elle évite de détruire le contenu interne au dossier celui-ci n’est pas vide:

Dossier non-vide

L’option -r associée à la commande rm permet d’effacer un dossier de manière récursive :

rm -r dossierNonVide

Cette commande est plus risquée et doit être faite en s’assurant qu’aucune donnée importante n’est supprimée avant son appel.

Manuel

La commande man permet d’afficher le manuel de chaque commande.

Pour quitter la page de manuel, appuyer sur la touche q.

Exemples:

man ls
man rm

Variables

Déclaration

Une variable permet d’affecter à un mot-clé (une sorte d’étiquette), une valeur.

Cette valeur peut être :

Assignation

Assigner la valeur bonjour à la variable nommée salutation :

salutation=bonjour

Affichage et utilisation

La commande suivante affiche le contenu de la variable associé à un autre texte:

echo "$salutation n'importe qui"

Valeur avec espaces

On affecte ici une valeur contenant des espaces (les guillemets sont importants) :

salutation="au revoir"

Exécuter alors cette commande:

echo "$salutation n'importe qui"

Variables d’environnement

Les variables d’environnement sont des variables spécifiques du terminal.

Elles affectent sont comportement de manière notable.

Invite de commande

Exécuter la commande suivante:

PS1="> "

Constater l’effet sur l’invite de commande.

Re-saisir cette commande en modifiant PS1:

PS1="Saisir ici: "

L’invite de commande est utilisée pour représenter ce qui est affiché dans le terminal pour inviter à saisir une commande. Exemple d’invite de commande:

tstn@ubuntu1804:~$

Désormais, dans les commandes indiquées, le symbole $ représentera l’invite de commande.

Ce symbole n’est pas à saisir dans le terminal.

Pour rétablir l’invite de commande initiale, deux options:

Chemin des exécutables

La variable d’environnement PATH permet de définir où l’interpréteur de commande ira chercher le fichier à exécuter.

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Par exemple, la commande ls est en réalité située dans /bin/ls.

Pour déterminer cela, l’interpréteur de commande

La commande which permet de déterminer où se situe un programme exécutable:

which ls

Interprétation de la variable PATH

Chaque dossier stocké dans la variable PATH peut contenir des fichiers exécutables

Chaque dossier est indiqué par un chemin, séparé des autres par un symbole : (deux-points):

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

La commande which permet de déterminer le chemin vers la commande, ici ls est stockée dans /usr/bin:

$ which ls
/usr/bin/ls

Plus d’information sur les fichiers

La commande file permet ici de montrer que ls est un fichier exécutable binaire:

$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6461a544c35b9dc1d172d1a1c09043e487326966, for GNU/Linux 3.2.0, stripped

Cette même commande montre que le fichier .bashrc est un simple fichier texte:

$ file .bashrc
.bashrc: ASCII text

Ceci est applicable pour d’autres fichiers et commandes:

$ which zcat
/usr/bin/zcat
$ file /usr/bin/zcat
/usr/bin/zcat: POSIX shell script, ASCII text executable

Permissions sur les fichiers exécutables

Pour vérifier si un fichier est réellement exécutable, on peut utiliser la commande ls -l ou la commande stat:

$ stat /usr/bin/zcat
  Fichier : /usr/bin/zcat
   Taille : 1984        Blocs : 8          Blocs d'E/S : 4096   fichier
Périphérique : 801h/2049d   Inœud : 787026      Liens : 1
Accès : (0755/-rwxr-xr-x)  UID : (    0/    root)   GID : (    0/    root)
 Accès : 2023-03-28 11:10:09.707174807 +0200
Modif. : 2021-03-03 00:30:16.000000000 +0100
Changt : 2021-09-24 14:01:11.913849520 +0200
  Créé : 2021-09-24 14:01:11.905849520 +0200

Le x indique que le fichier est exécutable:

$ ls -l /usr/bin/zcat
-rwxr-xr-x 1 root root 1984  3 mars   2021 /usr/bin/zcat

Création d’un fichier exécutable

On commence par créer un dossier nommé bin dans le dossier de départ de l’utilisateur :

mkdir bin

Puis on y crée un fichier :

$ touch bin/executable
$ nano bin/executable
$ cat bin/executable 
echo Bonjour
ls
pwd

Si on tente d’exécuter le fichier

$ bin/executable
bash: bin/executable: Permission non accordée

L’erreur ici indique que la permission d’exécuter le fichier n’est pas présente.

Ce qui est confirmé par la commande stat:

$ stat bin/executable 
  Fichier : bin/executable
   Taille : 20          Blocs : 8          Blocs d'E/S : 4096   fichier
Périphérique : 801h/2049d   Inœud : 1323037     Liens : 1
Accès : (0644/-rw-r--r--)  UID : ( 1001/   user)   GID : ( 1001/   user)
 Accès : 2023-03-28 11:19:03.153757194 +0200
Modif. : 2023-03-28 11:18:56.809533223 +0200
Changt : 2023-03-28 11:18:56.809533223 +0200
  Créé : 2023-03-28 11:16:20.307988915 +0200

Ou la commande ls -l:

$ ls -l bin/executable
-rw-r--r--- 1 user user 2020  3 mars   2021 bin/executable

On peut rendre ce fichier exécutable avec la commande chmod adéquate:

$ chmod +x bin/executable

Dont on constate les effets avec ls -l :

$ ls -l bin/executable
-rwxr-xr--x 1 user user 2020  3 mars   2021 bin/executable

Ou avec stat:

$ stat bin/executable 
  Fichier : bin/executable
   Taille : 20          Blocs : 8          Blocs d'E/S : 4096   fichier
Périphérique : 801h/2049d   Inœud : 1323037     Liens : 1
Accès : (0755/-rwxr-xr-x)  UID : ( 1001/   tstn1)   GID : ( 1001/   tstn1)
 Accès : 2023-03-28 11:19:03.153757194 +0200
Modif. : 2023-03-28 11:18:56.809533223 +0200
Changt : 2023-03-28 11:20:33.784961399 +0200
  Créé : 2023-03-28 11:16:20.307988915 +0200

Cette fois l’exécution fonctionne:

$ bin/executable
Bonjour
Archives  Bureau  Documents  Modèles  Public           Vidéos
bin   demo    Images     Musique  Téléchargements
/home/tstn1

Cependant il y a une limite, si on change de dossier:

$ cd Documents
$ pwd
/home/tstn1/Documents
$ bin/executable
bash: bin/executable: Aucun fichier ou dossier de ce type

Ceci s’explique par le fait que la commande executable n’est pas accessible en utilisant le chemin bin/executable depuis ce nouvel emplacement de travail.

Par contre, ceci devrait fonctionner:

~/Documents$ ../bin/executable
Bonjour
/home/tstn1/Documents

Ou ceci:

$ /home/tstn1/bin/executable
Bonjour
/home/tstn1/Documents

Pour éviter d’avoir à saisir le chemin complet d’un exécutable, on peut le placer dans un dossier du PATH:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Pour ajouter le dossier /home/tstn1/bin à la variable d’environnement, on utilise la commande suivante qui ajoute :/home/tstn1/bin à la suite du PATH (le symbole : suivi du chemin /home/tstn1/bin) :

$ export PATH=$PATH:/home/tstn1/bin

Vérification:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/tstn1/bin

Désormais, on peut exécuter executable en utilisant son nom simple:

$ executable
Bonjour
/home/tstn1/Documents