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
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 directory | cd ~ |
List the files | ls and better ls -l |
Create a directory | mkdir <name> |
Remove/delete sth | rm <what> |
Search inside a file | grep whatIwantToSearchInsideTheFile FileName |
cd
= change directorypwd
= 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 fichier | Droit du propriétaire 👩 | Droit du groupe 🏠 | Droit des autres 🐱🐶 | Nom du propriétaire 👩 | Nom du groupe 🏠 |
---|---|---|---|---|---|
- | r w x | r - x | r - x | fschwarz | logica |
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 :
Symbole | Type de fichier | Exemple |
---|---|---|
- | Fichier régulier (normal) | fichier.txt |
d | Dossier (directory) | /home/user/ |
l | Lien symbolique | raccourci -> /etc/passwd |
c | Périphérique caractère (e.g. terminal) | /dev/tty |
b | Périphérique bloc (e.g. disque dur) | /dev/sda |
p | Pipe nommé (FIFO) | /tmp/ma_fifo |
s | Socket | /var/run/docker.sock |
Changer les droits
chmod
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 ligne | Ctrl + A |
Aller à la fin de ligne | Ctrl + E |
Supprimer tout ce qu'il y a après le curseur | Ctrl + K |
Pour coller ce qu'il y avait | Ctrl + Y |
Pour enlever la commande courante | Ctrl + C |
Rechercher une commande qu'on a écrite il y a longtemps | Ctrl + R |
Références
- https://missing.csail.mit.edu/2020/course-shell/
- https://www.geeksforgeeks.org/linux-unix/