Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Le shell

Pourquoi ?

  • Parce que les interfaces graphiques n’offrent pas autant d’automatisation du terminal
  • Impossible de donner des arguments à un programme avec une interface graphique
  • Parce que même des petits ordinateurs ont un terminal
  • Parce que communiquer avec un ordinateur distant c’est plus simple en terminal
  • Parce que générer du texte c’est plus simple que de cliquer dans une interface. Donc les agents IA peuvent facilement exécuter des commandes (avec les dangers que cela comporte…)

Invite de commande

L’invite de commande ressemble à ça :

    nomdemachine:endroitoùonest$

En image :

    💻:📌$

où 💻 est le nom de la machine et 📌 est le chemin où aller.

Par exemple petitchat:~/Documents/rapports.

où ~ désigne le répertoire home.

Basic commands

To do…write
Going in the directory <oùaller>cd <oùaller>
Going to the home directorycd ~
List the filesls and better ls -l
Create a directorymkdir <name>
Remove/delete sthrm <what>
Search inside a filegrep whatIwantToSearchInsideTheFile FileName
  • cd = change directory
  • pwd = print working directory

Où sont mes programmes ?

Quand vous tapez python, gcc, ou autres dans le terminal, ça lance le programme. Mais où est le programme ? Il n’est pourtant pas dans le répertoire courant ! Pour savoir où se trouve un programme :

    which python

Variable PATH

En fait, il y a une variable dite d’environnement qui s’appelle PATH et qui stocke les chemins où il faut regarder pour trouver un programme.

On peut afficher le contenu de la variable PATH :

    echo $PATH

Modification de PATH

Pour vos besoins personnels, vous pouvez modifier le fichier ~/.profile qui peut modifier la variable PATH pour rajouter un nouveau chemin. Une fois modifié, pour que le bash lise le fichier, on fait :

source ~/.profile

Le manuel

    man echo
    man ls

Redirection = reading/writing data from files

By default

By default, a program is just taking its input in the terminal (stdin) and outputs in the terminal (stdout).

Input from a file

./monprogramme < inputTextFile.txt

./monprogramme < inputTextFile.txt > outputTextFile.txt

On peut aussi utiliser >> pour ajouter des données à un fichier (s’il existe, sinon ça le crée) alors que > écrase le contenu.

    ./monprogramme < inputTextFile.txt >> outputTextFile.txt

Tube : enchaîner des programmes

ls -l | grep key | less

  • list of the files, one per line
  • then we keep the lines containing the word “key”
  • then we show the result in a scrolling page with less

Gestion des droits des fichiers sous UNIX

Connaître les droits d’un fichier

Avec ls -l, on connaît les droits des fichiers dans le répartoire courant. Avec ls -l fichier.txt, on connaît les droits du fichier fichier.txt. Une ligne comme

-rwxr-xr-x 1 fschwarz logica 25648 Oct 13 13:56 a.out

se lit comme :

Type de fichierDroit du propriétaire 👩Droit du groupe 🏠Droit des autres 🐱🐶Nom du propriétaire 👩Nom du groupe 🏠 
-r w xr - xr - xfschwarzlogica

où

  • r signifie que l’on peut lire le fichier 👁
  • w signifique que l’on peut écrire 🖊
  • x signifie que l’on peut exécuter ⚙

Le type de fichier peut être :

SymboleType de fichierExemple
-Fichier régulier (normal)fichier.txt
dDossier (directory)/home/user/
lLien symboliqueraccourci -> /etc/passwd
cPériphérique caractère (e.g. terminal)/dev/tty
bPériphérique bloc (e.g. disque dur)/dev/sda
pPipe nommé (FIFO)/tmp/ma_fifo
sSocket/var/run/docker.sock

Changer les droits

chmod

Changer les droits d’un utilisateur

Concaténer des fichiers

    cat file1.txt file2.txt file3.txt

affiche le contenu de file1.txt, file2.txt et file3.txt sur la sortie standard.

La commande

    cat file1.txt file2.txt file3.txt > combinedfile.txt

redirige la sortie standard et l’écrit dans le fichier combinedfile.txt. Autrement, on a effectué la concaténation des trois fichiers.

Rechercher

Find

On cherche des fichiers avec leur nom.

        find oùchercher -maxdepth 2 -name 'nomdufichieroupattern'
        find ~/teaching -name 'td*.pdf'

grep (Globally search a Regular Expression and Print)

        grep "patternToSearchForInsideFiles" filenameOrPatternOfFileName
        grep "Python" notes.txt
  • Chercher récursivement dans les sous-dossiers : grep -r "abricot" *
  • Ignorer la casse : grep -i "abricot" panierdefruits.txt
  • Compter le nombre d’abricots : grep -c "abricot" panierdefruits.txt
  • Obtenir les lignes qui ne contiennent pas un pattern : grep -v "abricot" panierdefruits.txt
  • Chercher exactement les lignes : grep -x "abricot" panierdefruits.txt

Exemples

Modifier la brillance de l’écran

Voici un programme qui cherche le fichier brightness, puis tente d’écrire 3 à l’intérieur.

    $ sudo find -L /sys/class/backlight -maxdepth 2 -name '*brightness*'
    /sys/class/backlight/intel_backlight/brightness
    $ cd /sys/class/backlight/intel_backlight/
    $ echo 3 > brightness

Ca ne fonctionne pas pour des raisons de droit.

    $ sudo echo 3 > brightness

Le problème est que sudo ne donne des droits que sur des programmes et > est exécuté par le shell. Pour déléguer la redirection (l’ouverture du fichier brightness) au root, on peut utiliser le programme tee.

    $ echo 3 > sudo tee brightness

Racourcis clavier

Pour faire….Faire
Aller au début de ligneCtrl + A
Aller à la fin de ligneCtrl + E
Supprimer tout ce qu’il y a après le curseurCtrl + K
Pour coller ce qu’il y avaitCtrl + Y
Pour enlever la commande couranteCtrl + C
Rechercher une commande qu’on a écrite il y a longtempsCtrl + R

Références

  • https://missing.csail.mit.edu/2020/course-shell/
  • https://www.geeksforgeeks.org/linux-unix/
  • https://explainshell.com/ outil en ligne qui explique les lignes de commande