introlinux/diapo.md

12 KiB

::: 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 fasta. On va tout d'abord utiliser grep pour n'afficher que les lignes comprenant un chevron :::

::: 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 _lxd129: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

<!-- -->
$ 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 :::