---
title: Introduction à la l'interface en ligne de commande
date: 2020-09-16
---

# Introduction

## Généralités

* *Command line interface* (CLI) en anglais.
* Interface textuelle vers l'ordinateur.
* Peut s'appeler le *shell*, le *terminal*, la *console*, ...
* Semble obscure, mais est très pratique (automatisation de tâches, copier-coller, ...).
* Vous devrez l'utiliser tout au long de vos études.
* Existe sous Linux, MacOS, et même Windows (les commandes peuvent varier!).
* Ici on ne parlera que de *Linux*.

# A quoi ça sert?

## Équivalent textuel d'un GUI

Toutes les informations obtenues avec une interface graphique, peuvent être obtenues à l'aide de la ligne de commande (liste loin d'être exhaustive):

* Changement d'un répertoire: `cd`{.bash}
* Affichage du contenu d'un répertoire: `ls`{.bash}
* Déplacement de fichier: `mv`{.bash}
* Copie de fichier: `cp`{.bash}
* Création de répertoire: `mkdir`{.bash}
* Recherche de fichier: `find`{.bash}
* Recherche de texte dans un fichier: `grep`{.bash}
* Etc, etc, etc, etc, etc

## Mais aussi

* Télécharger des documents, compiler, éditer des fichiers, ...

# Ouvrir un terminal

Dépendant de votre distribution de Linux l'ouverture d'un terminal peut varier.

Ce qui marche *presque* tout le temps:

1. Appuyer sur le bouton `Super` (`Windows`) du clavier.
2. Commencer à taper "terminal".

![](figs/terminal_open.png){width=100%}

Raccourcis clavier:

* `Ctrl+Alt+T`{.bash}
* `Super+T`{.bash}
* Vous pouvez customiser les raccourcis.

# Une fois le terminal ouvert

Vous pouvez taper des commandes puis `Entrée`.

```bash
$ pwd
/home/orestis
```

Exemple: `pwd`{.bash} affiche le répertoire courant (**p**rint **w**orking **d**irectory).

**Attention: les commandes sont sensibles à la casse!**

Exemple: `cd`{.bash} change de répertoire (**c**hange **d**irectory).

:::::::::::::: {.columns}

::: {.column width="45%"}

```bash
$ pwd
/home/orestis
$ cd ..
$ pwd
/home
```

:::
::: {.column width="45%"}

```bash
$ cd orestis
$ pwd
/home/orestis
$ cd ../..
$ pwd
/
```

:::
::::::::::::::

# Remarque: chemins relatifs ou absolus

Un *chemin* est relatif à moins que le chemin commence par `/` ou `~`.

```bash
$ pwd
/home/orestis
$ cd Downloads
$ pwd
/home/orestis/Downloads
$ cd /tmp
$ pwd
/tmp
$ cd ~/Downloads
$ pwd
/home/orestis/Downloads
```

# Quelques commandes utiles (1/3)

## `mkdir`, création de répertoire

```bash
$ mkdir tmp
$ cd tmp
$ pwd
/home/orestis/tmp
```

## `ls`, affiche le contenu d'un répertoire

```bash
$ ls
Desktop  Documents  git  Music     Public     tmp
Docker   Downloads  go   Pictures  Templates  Videos
$ ls -ltr
... # des répertoires
drwxr-xr-x  3 orestis orestis 4096 31 aoû 09:54 Documents
drwxr-xr-x 11 orestis orestis 4096  7 sep 15:59 Downloads
drwxr-xr-x  2 orestis orestis 4096  9 sep 11:14 Pictures
drwxr-xr-x  2 orestis orestis 4096  9 sep 12:41 tmp
-rw-r--r--  1 orestis orestis    6  9 sep 12:52 cours.dat
```

# Quelques commandes utiles (2/3)

## `cp`{.bash}, copie de fichiers/répertoires

```bash
$ cp cours.dat tmp/ # cp cours.dat -> tmp
$ ls tmp # affiche le rép tmp
cours.dat
$ cp -r tmp tmp2 # option -r => recursive
$ ls
cours.dat  Docker     Downloads  go     Pictures  Templates  tmp2
Desktop    Documents  git        Music  Public    tmp        Videos
```

## `mv`{.bash}, déplacement de fichiers/répertoires

```bash
$ ls tmp
$ mv cours.dat tmp # déplace cours.dat -> tmp
$ ls tmp
cours.dat
```

# Quelques commandes utiles (3/3)

## `rm`{.bash}, effacer des fichiers/répertoires

```bash
$ ls tmp
cours.dat
$ rm tmp/cours.dat
$ ls tmp
$ rm -r tmp tmp2
$ ls
Desktop  Documents  git  Music     Public     Videos
Docker   Downloads  go   Pictures  Templates
```

# La touche `tab`{.bash}

Probablement la touche la plus utile du clavier:

* permet la complétion d'une commande.
* permet la complétion d'un nom de fichier.
* permet d'afficher les complétions possibles.

Fait gagner un temps considérable.

# Éditeurs de texte

Il existe différents éditeurs de texte qui pourraient être utiles:

* `vscode`{.bash} ou `codium`{.bash} (la version sans l'espionnage MS)
* `vim`{.bash}
* `geany`{.bash}
* `gedit`{.bash}
* ...

Ne vous reposez pas trop sur l'éditeur pour tout faire à votre place.