491 lines
12 KiB
Markdown
491 lines
12 KiB
Markdown
::: frame
|
|
:::
|
|
|
|
# GNU/Linux
|
|
|
|
::: frame
|
|
### Linux
|
|
|
|
::: block
|
|
Noyau
|
|
|
|
- Pilotage des périphériques
|
|
|
|
- Communication entre eux
|
|
|
|
- Base n'effectuant pas d'opérations mais propose des appels systèmes
|
|
|
|
- Permet une abstraction forte pour le développeur (exemple : écrire
|
|
un fichier)
|
|
:::
|
|
|
|
::: block
|
|
Linux
|
|
|
|
- Ensemble de logiciels
|
|
|
|
- Usage commun de l'informatique
|
|
:::
|
|
:::
|
|
|
|
::: frame
|
|
::: block
|
|
Projet GNU
|
|
|
|
- Contrôle complet de l'ordinateur
|
|
|
|
- Liberté d'utilisation, de conception et de distribution du software
|
|
|
|
- Suite logicielle autour du système, alternative à UNIX et ses
|
|
verrous propriétaires
|
|
:::
|
|
|
|
::: block
|
|
GNU/Linux
|
|
|
|
- Noyau linux avec une partie de la suite GNU : GNU/Linux
|
|
|
|
- Chaque logiciel a une tâche simple qui la remplit efficacement
|
|
|
|
- Pannel d'outils combinables
|
|
:::
|
|
:::
|
|
|
|
::: frame
|
|
::: block
|
|
Distribution
|
|
|
|
- Debian, Ubuntu
|
|
|
|
- RHEL, centos
|
|
|
|
- archlinux
|
|
|
|
- architecture différente
|
|
|
|
- fonctionnement différentes
|
|
|
|
- baties sur une même base
|
|
:::
|
|
:::
|
|
|
|
::: frame
|
|
::: block
|
|
Réutilisable
|
|
|
|
- Organisation commune des applications
|
|
|
|
- Abstraction des appels système
|
|
:::
|
|
|
|
::: block
|
|
Utilisation
|
|
|
|
- Multi-utilisateurs
|
|
|
|
- Ouverture, liberté et fonctionnement fait le succès
|
|
|
|
- Ecosystème avec beaucoup de choix facilement intégrables pour une
|
|
même tâche
|
|
|
|
- Serveurs
|
|
|
|
- Cluster
|
|
|
|
- Cloud
|
|
|
|
- Embarqué
|
|
|
|
- PC, Bureautique, multimedia
|
|
:::
|
|
:::
|
|
|
|
# SHELL
|
|
|
|
::: frame
|
|
### SHELL
|
|
|
|
::: block
|
|
SHELL
|
|
|
|
- Interface utilisateur textuelle (clavier)
|
|
|
|
- Appelé aussi CLI (Command Line Interface) a la différence de GUI
|
|
(Graphical User Interface)
|
|
|
|
- Dans un environnement graphique, on utilise un Terminal pour avoir
|
|
une fenêtre invoquant un shell
|
|
|
|
- On indique le nom de l'outil, et lui passe des paramètres pour
|
|
adapter son comportement
|
|
:::
|
|
:::
|
|
|
|
::: frame
|
|
Plutôt que de parcourir l'arborescence par des clics et enfin ouvrir le
|
|
fichier, on peux le faire directement:
|
|
|
|
$ more /etc/passwd
|
|
|
|
root:x:0:0:root:/root:/bin/bash
|
|
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
|
|
bin:x:2:2:bin:/bin:/usr/sbin/nologin
|
|
sys:x:3:3:sys:/dev:/usr/sbin/nologin
|
|
sync:x:4:65534:sync:/bin:/bin/sync
|
|
games:x:5:60:games:/usr/games:/usr/sbin/nologin
|
|
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
|
|
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
|
|
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
|
|
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
|
|
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
|
|
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
|
|
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
|
|
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
|
|
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
|
|
|
|
|
|
On utilise le logiciel more, qui permet de consulter le contenu d'un
|
|
fichier page par page, avec une page faisant la taille de votre
|
|
terminal. Chaque outil dispose de son manuel, qu'on invoque avec 'man'
|
|
:::
|
|
|
|
::: frame
|
|
$ man more
|
|
more - file perusal filter for crt viewing
|
|
SYNOPSIS
|
|
more [options] file...
|
|
DESCRIPTION
|
|
more is a filter for paging through text one screenful at a time. This version is especially primitive. Users should realize that less(1) provides more(1) emulation plus extensive enhancements.
|
|
OPTIONS
|
|
Options are also taken from the environment variable MORE (make sure to precede them with a dash (-)) but command-line options will override those.
|
|
-d, --silent
|
|
Prompt with "[Press space to continue, 'q' to quit.]", and display "[Press 'h' for instructions.]"
|
|
:::
|
|
|
|
::: frame
|
|
::: block
|
|
man On y lit la description, l'utilisation en ligne de commande et
|
|
l'usage.
|
|
|
|
Des options sont listées, comme l'invocation avec l'option -d
|
|
:::
|
|
|
|
::: block
|
|
entrées et sorties standard
|
|
|
|
- shell : purement textuel, tout est une chaine de charactère
|
|
|
|
- sortie standard : écran
|
|
|
|
- entrée standard : clavier
|
|
|
|
- sortie standard d'erreur: écriture à l'écran également
|
|
|
|
- orienter les entrées/sorties vers un fichier
|
|
|
|
- rediriger la sortie d'un outil vers l'entrée d'un autre : pipe \"\"
|
|
|
|
- =\>pipeline
|
|
:::
|
|
:::
|
|
|
|
::: frame
|
|
On va voir l'utilité de grep
|
|
|
|
$ man grep |grep -A 1 NAME
|
|
NAME
|
|
grep, egrep, fgrep, rgrep - print lines that match patterns
|
|
|
|
- le résultat (la sortie) de man est passé dans l'entrée de grep
|
|
|
|
- grep n'affiche que les lignes contenant NAME
|
|
|
|
- grep avec -A 1 affiche 1 ligne de plus a chaque \"match\"
|
|
|
|
Plus intéressant : essayons d'afficher le nombre de séquences sur le
|
|
fichier. On va tout d'abord utiliser grep pour n'afficher que les
|
|
lignes comprenant le texte : root
|
|
:::
|
|
|
|
::: frame
|
|
|
|
$ grep "root" /etc/passwd
|
|
root:x:0:0:root:/root:/bin/bash
|
|
|
|
On a en sortie la ligne correspondant à root ! Maintenant on va regarder combien de comptes existent sur notre machine
|
|
|
|
$ man cat
|
|
NAME
|
|
cat - concatenate files and print on the standard output
|
|
SYNOPSIS
|
|
cat [OPTION]... [FILE]...
|
|
DESCRIPTION
|
|
-n, --number
|
|
number all output lines
|
|
|
|
ca pourrait fonctionner vu qu'on a une ligne par utilisateur
|
|
:::
|
|
|
|
::: frame
|
|
cat -n /etc/passwd
|
|
[...]
|
|
53 _lxd:x:129:139::/var/lib/lxd/:/bin/false
|
|
|
|
|
|
Ça fait beaucoup d'informations inutile par rapport au résultat attendu
|
|
( avoir un simple nombre ) !
|
|
|
|
WC(1) User Commands WC(1)
|
|
|
|
NAME
|
|
wc - print newline, word, and byte counts for each file
|
|
|
|
SYNOPSIS
|
|
wc [OPTION]... [FILE]...
|
|
wc [OPTION]... --files0-from=F
|
|
|
|
DESCRIPTION
|
|
[...]
|
|
|
|
-l, --lines
|
|
print the newline counts
|
|
|
|
wc avec l'option \"-l\" (compter le nombre de retours à la ligne) me
|
|
paraît beaucoup plus approprié
|
|
:::
|
|
|
|
::: frame
|
|
$ wc -l < /etc/passwd
|
|
53 /etc/passwd
|
|
|
|
|
|
On a exactement ce qu'on veux : le nombre de séquences. pas une
|
|
information de plus, pas une de moins. en combinant deux outils qui font
|
|
chacun une tache simple (filtrer et compter). Le tout réside dans la
|
|
connaisance du panel d'outils à disposition, et la bonne lecture des
|
|
manuels.
|
|
:::
|
|
|
|
::: frame
|
|
### Variables d'environnement
|
|
|
|
- Lues par différents logiciels
|
|
|
|
- Donnent des informations sur l'environnement
|
|
|
|
- Influent sur le comportement des outils
|
|
|
|
- Influe sur le shell lui-même
|
|
|
|
```{=html}
|
|
<!-- -->
|
|
```
|
|
$ env
|
|
SHELL=/bin/bash
|
|
EDITOR=vim
|
|
PAGER=less
|
|
PWD=/home/user
|
|
LOGNAME=user
|
|
HOME=/home/user
|
|
LANG=fr_FR.UTF-8
|
|
USER=user
|
|
PATH=/usr/local/bin:/usr/bin:/bin
|
|
:::
|
|
|
|
::: frame
|
|
\$PWD indique le répertoire courant et \$PATH est très importante car
|
|
elle indique où chercher les logiciels invoqués par le shell. Par
|
|
exemple:
|
|
|
|
$ whereis cat
|
|
cat: /bin/cat /usr/share/man/man1/cat.1.gz
|
|
|
|
quand on tape cat, le shell parcours les répertoires indiqués par PATH
|
|
avant de trouver le binaire en question
|
|
:::
|
|
|
|
# Système de fichiers
|
|
|
|
::: frame
|
|
### système de fichiers
|
|
|
|
Dans les différents exemples, on a vu beaucoup de chemins de fichiers.
|
|
Dans les systèmes de la famille UNIX, on a une structure bien définie
|
|
|
|
- tout commence à la racine, le rootfs, \"/\"
|
|
|
|
- / est le point de départ de toute arborescence
|
|
|
|
- tout chemin commençant par / est un chemin absolu, peu importe où on
|
|
se trouve, il est accessible
|
|
|
|
- peu importe où on se trouve dans l'arborescence, un fichier est
|
|
accessible par son chemin absolu
|
|
|
|
- à la racine, on a une organisation prédéfinie: voir le Filesystem
|
|
Hierarchy Standard
|
|
:::
|
|
|
|
::: frame
|
|
- bin : les fichiers binaires ( executables ) de base, les outils
|
|
UNIX/POSIX
|
|
|
|
- boot : les fichiers du gestionnaire de démarrage ( bootloader )
|
|
|
|
- dev : les fichiers représentant les périphériques ( devices )
|
|
|
|
- etc : les fichiers de configuration du système (
|
|
|
|
- home : les dossiers spécifiques aux utilisateurs
|
|
|
|
- lib : les librairies partagés ainsi que les modules du noyau
|
|
|
|
- lost+found : forcément présent sur une partition de type ext4 ( plus
|
|
de détails plus tard )
|
|
|
|
- media : point de montage des périphériques de stockage amovibles
|
|
|
|
- mnt : point de montage temporaire ( souvent lié à l'administration )
|
|
|
|
- opt : chemin d'installation pour des applications spécifiques
|
|
|
|
- proc : représentation du noyau en mode fichier
|
|
|
|
- root : équivalent du home réservé à l'administrateur
|
|
|
|
- run : fichiers résidents en mémoire vive
|
|
|
|
- sbin : les binaires réservés à l'administrateur
|
|
|
|
- srv : données liés aux applications ( services ) du serveur
|
|
|
|
- sys : semblable à /proc, mais plus lié au matériel
|
|
|
|
- tmp : fichiers temporaires
|
|
|
|
- usr : arborescence semblable à / pour les outils non essentiels à
|
|
linux, souvent les fichiers de taille fixes ( binaires, code source
|
|
)
|
|
|
|
- usr/bin : binaires installés par la distribution
|
|
|
|
- usr/local/bin : binaires installés manuellement ( compilation et
|
|
make install )
|
|
|
|
- var : données variables, de taille grandissantes, souvent utilisé
|
|
par les logiciels du système
|
|
:::
|
|
|
|
::: frame
|
|
### chemins relatifs
|
|
|
|
À l'inverse des chemins absolus, il existe les chemins relatif. Par
|
|
exemple si on est dans le chemin /usr , on peux lister le contenu de
|
|
/usr/local/bin de la manière suivante :
|
|
|
|
/usr$ ls local/bin
|
|
|
|
- si \"/\" au début, chemin absolu
|
|
|
|
- \".\" répertoire courant
|
|
|
|
- \"..\" répertoire parent, naviguation aisée dans l'arborescence
|
|
|
|
- \"\" représente votre home
|
|
|
|
Par exemple pour retourner dans le home si on est l'utilisateur \"user\"
|
|
:
|
|
|
|
cd ../home/user
|
|
|
|
A noter que vu qu'on passe par la racine, on peux indiquer le chemin
|
|
absolu :
|
|
|
|
cd /home/user
|
|
:::
|
|
|
|
::: frame
|
|
Mais si vous voulez vraiment gagner du temps pour retrouver votre home,
|
|
de n'importe où, vous pouvez indiquer :
|
|
|
|
cd ~
|
|
|
|
Et si vous voulez afficher le contenu d'un des fichiers de user dans un
|
|
répertoire précis :
|
|
|
|
cat ~/repertoire/fichier
|
|
:::
|
|
|
|
::: frame
|
|
### privilèges
|
|
|
|
- Séparation nette entre root (l'admin), ses droits sur les fichier et
|
|
les programmes executables
|
|
|
|
- Utilisateurs et leurs infos dans /etc/passwd (par exemple leur home)
|
|
|
|
- Système identifie l'utilisateur par l'User ID (uid)
|
|
|
|
- root à l'uid 0
|
|
|
|
- de 1 à 999, comptes \"systèmes\"
|
|
|
|
- utilisateurs \"humains\" à partir de 1000
|
|
|
|
- droits par fichiers
|
|
|
|
- r pour Read (4)
|
|
|
|
- w pour Write (2)
|
|
|
|
- x pour eXecute (1)
|
|
|
|
- utilisateur propriétaire
|
|
|
|
- groupe propriétaire
|
|
:::
|
|
|
|
::: frame
|
|
Ce fonctionnement permet une gestion fine des droits d'accès. Il y a des
|
|
outils pour l'élèvation de privilèges au cas où la machine est
|
|
administrée par plusieurs utilisateurs par exemple. Sudo permet de
|
|
passer de simple utilisateur à utilisateur privilégié le temps d'une
|
|
commande
|
|
:::
|
|
|
|
::: frame
|
|
### OpenSSH
|
|
|
|
- Ouvrir un shell distant par le réseau
|
|
|
|
- Vrai couteau suisse du réseau
|
|
|
|
- Protocole standardisé SSH
|
|
|
|
On utilise la commande \"ssh\", spécifie la machine à atteindre (par son
|
|
IP ou son nom) et l'utilisateur ( sauf dans le cas où votre utilisateur
|
|
local - sur votre machine - porte le même nom ). Pour ouvrir un shell
|
|
sur la machine \"hôte\" avec l'utilisateur user, on utilise par exemple
|
|
la commande :
|
|
|
|
ssh user@hote
|
|
|
|
En fonction de la configuration machine hôte, il peut être demandé le
|
|
mot de passe du compte, ou l'utilisation de clés SSH ( authentification
|
|
plus robuste et plus élaborée en terme de sécurité ).
|
|
:::
|
|
|
|
::: frame
|
|
Les clés SSH fonctionnent par paire
|
|
|
|
- une clé privée, restant sur l'ordinateur et qu'il est nécessaire de
|
|
bien protéger ( c'est vraiment la clé pour rentrer sur le serveur ),
|
|
c'est pourquoi on utilise souvent une passphrase ( long mot de passe
|
|
) pour la déverouiller.
|
|
|
|
- une clé publique, qui est plus de l'ordre du cadenas et que
|
|
l'administrateur va déposer sur le serveur en l'associant à votre
|
|
compte utilisateur, qui peut être communiqué plus aisément qu'un mot
|
|
de passe
|
|
:::
|