Johann Lecocq, libriste convaincu :D
Développeur C, Python, Java, ...
Site: johann-lecocq.fr
Utilise Linux depuis 2009.
Développement et administration système sur temps libre.
Distributions utilisées:
Quelques abus de langages
La naissance des systèmes d'aujourd'hui.
Les différences entre les deux systèmes.
Ce que j'en pense de façon objective.
C:, E: ? Une seule racine, beaucoup de branches
Utilisateurs/Groupes, 0775, SUID & SGID
Les processus de façon clair et net
Sh, Bsh, Zsh, Code de retour, le Shebang, $?
mv, rm, ls, cd. Attention aux Regex
Quelques liens et bons sites.
La doc la plus complète au monde.
ps, job, bg, fg, Ctrl^Z, Ctrl^C, Ctrl^D
Explication succincte des i/o, pipes, ...
Redirection de flux: >>, >, 2>, 2>>
Présentation des enchainements de commandes
Des outils surpuissants pour manipuler les fichiers.
Les arguments, les variables, enchainements de commandes avec || et &&
Structure de contrôle, if, for, les arguments, les fonctions
Avoir les superpouvoirs du Chef sans être Chef
Explication rapide
Mieux que windows: pourquoi ?
Comparaison et explication de SystemD
cron & co
free, du, fdisk, ..., Quelques commandes réseau
Explication du concept
Utilité de la chose
Quelques exemples simples et rapides
La supériorité de C et Python face à Java & Co
Quelques abus de langages
La naissance des systèmes d'aujourd'hui.
Les différences entre les deux systèmes.
Ce que j'en pense de façon objective.
Quelques abus de langages
Histoire: d'UNIX à GNU/Linux
Linux vs Windows, gain ou chimère ?
Un petit retour sur mon utilisation

GNU/Linux est donc l'ensemble des deux.
Dans la suite, j'utilise Linux mais je pense bien GNU/Linux.
Mettons les points sur les i !
Histoire: d'UNIX à GNU/Linux
La naissance des systèmes d'aujourd'hui.
Linux vs Windows, gain ou chimère ?
Un petit retour sur mon utilisation
Système d'exploitation créé en 1969 par Ken Thompson
Multitâche et multi-utilisateur
OS basé sur le noyau UNIX: BSD, GNU/Linux, macOS
Marque déposée





Mettons les points sur les i !
Histoire : d'UNIX à GNU/Linux
Linux vs Windows, gain ou chimère ?
Les différences entre les deux systèmes.

| Windows | Linux | |
|---|---|---|
| Prix | Payant | Gratuit |
| Sources | Propriétaire | Open Source/Libre |
| Support/Aide | Payant, pauvre | Gratuit, communauté |
| Application | Incompatibilité(Xp,7,8,10) | Compatible quasi à vie |
| Norme POSIX | NON | OUI |
| Configuration | Partielle | Complète |
| Shell | Batch & Powershell | Sh, Bash, Zsh, Csh |
| Logiciels | Décentralisés | Gestionnaire de package(Pacman, Apt-Get, ...) |
| Environnement de bureau | XP, Vista, Metro1 bureau unique | Gnome 2 & 3, KDE, XFCE |
Mettons les points sur les i !
Histoire: d'UNIX à GNU/Linux
Linux vs Windows, gain ou chimère ?
Un petit retour sur mon utilisation
Ce que j'en pense de façon objective.
La route est longue, mais tellement plus belle.

C:, E: ? Une seule racine, beaucoup de branches
Utilisateurs/Groupes, 0775, SUID & SGID
Les processus de façon clair et net
Sh, Bsh, Zsh, Code de retour, le Shebang, $?
mv, rm, ls, cd. Attention aux Regex
C:, E: ? Une seule racine, beaucoup de branches
Les droits
Les processus
Le shell
Les commandes de base
La casse est respectée : Toto et toto ne sont pas les mêmes fichiers
Caractères interdits : /, ? et *
Caractère \n : possible de le mettre mais à éviter
L'extension n'est pas obligatoire : toto, .local, ...
Les fichiers avec un point comme premier caractère sont cachés
La racine de l'arborescence est / et non une lettre
Sous Linux, tout est fichier; par exemple :
. représente le répertoire courant

Petit descriptif de certains répertoires (plus d'info ici).
| Répertoire | Descriptif |
|---|---|
| /bin | Commande de base pour le démarrage et utilisation minimaliste |
| /boot | Chargeur d'amorçage, contient les fichiers de config du GRUB souvent |
| /dev | Contient les fichiers de périphérique ou non (/dev/null par exemple) |
| /etc | Fichiers de configuration |
| /home | Répertoires des utilisateurs |
| /lib | Bibliothèques logicielles (libOpenGL.so, libcurl-openssl-1.0.so) |
| /opt | Logiciels optionnels (souvent ceux installés à la main, sans structure) |
| /proc | Système de fichiers virtuel documentant le noyau et les différents processus |
| Répertoire | Descriptif |
|---|---|
| /root | Répertoire de l'utilisateur root |
| /tmp | Fichiers temporaires |
| /sbin | Exécutables pour les administrateurs (ifconfig sous Debian par exemple) |
| /usr | Mêmes répertoires que ceux à la racine mais non obligatoires pour un système minimaliste |
| /var | Contient des fichiers variables divers |
| /var/log | Contient les fichiers journaux |
Ma clé usb avec l'étiquette Avril collée dessus est représentée par le fichier /dev/sdd

Elle est montée dans le répertoire /run/media/johann/AVRIL

Voici quelques types de fichiers:

C'est le premier caractère lors d'un ls -l qui donnera le type de fichier par exemple. Il est possible d'écrire et de lire dans tous les fichiers
Le système de fichier
Les droits
Utilisateurs/Groupes, 0775, SUID & SGID
Les processus
Le shell
Les commandes de base
Un utilisateur a un identifiant unique
Un utilisateur peut être dans plusieurs groupes
Un fichier a un propriétaire et appartient à un groupe
On peut changer le propriétaire d'un fichier avec la commande chown
1 chown johann toto.txt
On peut changer le groupe d'un fichier avec la commande chgrp
1 chgrp root toto.txt
root sait tout faire
root peut tout faire
root est méchant
Son home est /root
C'est l'utilisateur de base du système, c'est le maître ultime du système.
Il ne faut jamais faire une commande avec Root, sauf si on maitrise la chose !
Les permissions se divisent en 3 blocs :
Il y a 3 types de droits :
Par exemple : rwxrw---- equivaut à 760
Supposons que nous sommes l'utilisateur johann

Imaginons que j'ai un fichier /home/test/toto.txt qui a comme permissions :
-rw-r--r--
Dans ce cas, comme j'ai accès en exécution sur le répertoire /home/test, je peux afficher le contenu de toto.txt.
Si je veux mettre :
Cela donne 760 et donc :
chmod 760 toto.txt
C'est bien mais il faut calculer le total à chaque fois !
J'ai ça maintenant :
-rwxr-xr-x 3 johann users 4096 2 juin 2016 toto.txt
Si je veux mettre :
Ça nous donne :
chmod g+w-x,o-rx toto.txt
Appliqué à un répertoire, seul :
ont le droit d'effacer les fichiers.
Exemple : le répertoire /tmp

Tout le monde peut écrire à l'intérieur mais seul moi et root pouvons supprimer mes fichiers.
Correspond à 1 en valeur octal
Appliqué à un fichier, il permet l'exécution de celui-ci en prenant les droits du propriétaire de ce fichier.
Exemple : changer le mot de passe

Ici, il est possible d'exécuter passwd même si celui-ci appartient à ROOT. Nous aurons les droits ROOT, sur l'exécution du programme.
Pour ajouter ce droit :
En octal :
1 chmod 4700 monprog
Autrement :
1 chmod u+s monprog
C'est la même chose que setuid mais au niveau du groupe.
Pour ajouter ce droit :
En octal :
1 chmod 2700 monprog
Autrement :
1 chmod g+s monprog
Si le fichier est un répertoire alors : les fichiers écrits appartiendront au groupe.
Le système de fichier
Les droits
Les processus
Les processus de façon clair et net
Le shell
Les commandes de base
C'est un programme en cours d'exécution, il est constitué :
Chaque processus hérite d'un père, sauf le processus init, son PID est 1.
Chaque processus a un PID unique.
Ils sont créés via un fork sous UNIX, le fils est créé et le père continue.
MS-DOS charge un processus via un appel système et bloque père en attendant la mort du fils.
Pour plus d'informations: voir Système d'Exploitation Centralisés.
Le système de fichier
Les droits
Les processus
Le shell
Sh, Bsh, Zsh, Code de retour, le Shebang, $?
Interpréteur de commandes pour les UNIX et type UNIX.

Le premier shell est le Bourne shell ou bsh ou sh.
Le Bash (Bourne-Again shell) est le shell UNIX du projet GNU.
C'est le shell par défaut des UNIX libres.
Chacun a sa petite touche.
Le Sh et Bsh restent standard.
Plusieurs fichiers sont chargés au démarrage d'un shell :
Chargé pour n'importe quel shell
Chargé pour n'importe quel utilisateur
Chargé pour un utilisateur lorsqu'il démarre un shell
Ajouter des variables d'environnement :
1 export PATH="$PATH:$ANDROID_SDK_PATH:/home/johann/.local/bin"
Exécuter d'autres scripts de configuration :
1 if [ -f ~/.bash_aliases ]; then
2 . ~/.bash_aliases
3 fi
Créer des alias, un raccourci de commandes :
1 alias ll='ls -alF'
2 alias la='ls -A'
3 alias l='ls -CF'
4 alias ddate="date +%d:%m:%Y:%H:%M"
5 alias jdate="date +%A:%d:%m:%Y:%H:%M"
6 alias minecraft="cd ~/.minecraft && java -jar launcher.jar"
7 alias rm="rm -i"
8 # rm nous demandera confirmation avant de supprimer
Il est représenté par #! au début du fichier de script.
Il sert à donner des informations pour connaître l'interpréteur du fichier.
Exemple, j'ai un script bash toto.sh:
1 #!/bin/bash
2 echo "Toto est absent"
Il me suffit de rendre exécutable toto.sh et de taper la commande suivante pour l'exécuter :
1 ./toto.sh
Si toto.sh n'est pas exécutable :
1 bash toto.sh
1 #!/bin/python -O
2 #Avec des arguments en plus ça fonctionne aussi !!!
3 print("Hello Toto")
1 #!/bin/perl
2 print "Hello Toto\n"
Les arguments passés en paramètre respectent la casse, voici deux commandes différentes :
On peut fusionner les arguments simples, la même commande :
Un argument complexe :
Chaque programme retourne un code d'erreur entre 0 et 255.
Par convention, le 0 signifie un succès de la commande.
echo renvoie toujours 0.
Le code de retour se trouve dans la variable spéciale $?
Attention : le résultat de la commande est différent du code de retour.
Le système de fichier
Les droits
Les processus
Le shell
Les commandes de base
mv, rm, ls, cd. Attention aux Regex
La plupart des commandes sont des programmes externes au shell.
cd est une commande interne au shell.
Une commande sera un processus fils, elle va donc démarrer dans le dossier courant au shell.
Quitte le shell en cours.
Change de répertoire, il peut être absolu ou relatif.
Liste le contenu d'un répertoire.
Créer un répertoire.
Créer un fichier vide.
Affiche le contenu d'un fichier.
Suppression d'un fichier, attention au -Rf, il n'y a pas de corbeille en ligne de commande.
Trouve un programme ou une commande via des mots-clefs.
Tuer un processus.
Creation de lien.
Le plus important, consulter les manpages.
Ce sont des méta-caractères qui évitent de taper les noms complets de fichiers.
Exemple :
1 rm *.txt
2 # supprime tous les fichiers txt
3
4 rm t?t?.txt
5 #supprime toto.txt titi.txt
Attention, c'est le shell qui remplace les jokers et non les programmes !

Quelques liens et bons sites.
La doc la plus complète au monde.
Quelques liens et bons sites.
La doc ne manque pas, par contre elle est potentiellement raide !
Elle est souvent en anglais :/
Souvent traduite toutes les langues dans les manpages.
La doc est dans les manpages, les sites et magazine.
de Scott Granneman, edition PEARSON, ISBN: 9782744021251
Mensuel, avec code source sur le net
Où trouver de la doc ?
Les manpages :D
La doc la plus complète au monde.
Ou comment consulter une doc horrible et complète.


Ici nous avons les différents codes de retour du ls.
1 man man
En cas de doute ! Consultez le man

ps, job, bg, fg, Ctrl^Z, Ctrl^C, Ctrl^D
Explication succincte des i/o, pipes, ...
Redirection de flux : >>, >, 2>, 2>>
Présentation des enchainements de commandes.
Des outils surpuissants pour manipuler les fichiers.
ps, job, bg, fg, Ctrl^Z, Ctrl^C, Ctrl^D
Un soupçon de sytème ça vous tente ?
Flux de redirection
Les pipes
IFS, grep, cut & wc ?
Permet d'avoir une image des processus avec diverses informations.

On voit clairement les PID, la RAM, le CPU, la ligne de commande,...

Un programme exécuté dans un terminal est rattaché à celui-ci.
En fermant un terminal, on tue tous les processus attachés à celui-ci.
Pour libérer la console et exécuter kate en arrière-plan :
1 kate &
Les processus en direct
Un soupçon de sytème ça vous tente ?
Explication succincte des i/o, pipes, ...
Flux de redirection
Les pipes
IFS, grep, cut & wc ?
Sous UNIX, il y en a 3 d'ouvert automatiquement pour chaque processus :
Les programmes peuvent changer ceux-ci.
Quand le shell démarre un programme, il fait un fork.
Il peut remplacer les descripteurs de fichiers (stdin,...) par un autre.
C'est le cas pour les pipes.
L'entrée standard du deuxième processus correspond à la sortie standard du premier.
Les processus en direct
Un soupçon de sytème ça vous tente ?
Flux de redirection
Redirection de flux: >>, >, 2>, 2>>
Les pipes
IFS, grep, cut & wc ?
Il est possible de rediriger les flux suivants vers un fichier :
1 wc -l < resultat.txt
On veut compter le nombre de lignes du fichier resultat.txt.
1 ls -l > resultat.txt
1 ls -l 2> resultat.txt
Ecrase les données qui sont dans le fichier resultat.txt.
Ajoute à la fin du fichier resultat.txt.
Les processus en direct
Un soupçon de sytème ça vous tente ?
Flux de redirection
Les pipes
Présentation des enchainements de commandes
Ils permettent de lier les entrées/sorties.
Autrement dit, de passer les résultats de commande en commande.
Exemple : Je veux récupérer le nombre de fichiers qui sont des fichiers textes
1 ls | grep txt | wc -l
Les processus en direct
Un soupçon de sytème ça vous tente ?
Flux de redirection
Les pipes
IFS, grep, cut & wc ?
Des outils surpuissants pour manipuler les fichiers.
C'est une variable spéciale du shell pour définir les séparateurs de mot dans le texte.
Elle est initialisée à " \n\t" par défaut.
Il est possible de la modifier de cette façon:
1 IFS='
2 '
IFS vaudra \n dans ce cas.
Cela permet de simplifier les traitements sur le texte.
N'oubliez pas de sauvegarder l'IFS.
Bonne pratique:
1 OLDIFS=$IFS
2 IFS='
3 '
Le grep est une des commandes de base pour les opérations sur le texte.
Il permet une sélection de données, par exemple :
Je veux les droits des fichiers dont le nom contient for :
1 ls -l | grep for
Ce qui donne :

Le cut permet de sélectionner une partie dans un texte, via un séparateur et un indice.
Exemple : Je veux récuperer les extensions de tous les fichiers de mon répertoire
On utilise l'option -d pour le séparateur et on le colle à celle-ci, dans notre cas le .. Et on utilise l'option -fn avec n le numéro de la colonne. Les indices commencent à 1.
1 ls | cut -d. -f2

wc permet de compter tout et n'importe quoi :
Je veux compter le nombre d'extensions différentes dans mon répertoire.
La commande sort -u enlève mes doublons.
1 ls | cut -d. -f2 | sort -u | wc -l

Nous avons vu quelques commandes utiles sur la manipulation du texte.
En voici d'autres :
Comment faire des traitements plus lourds avec ou sans expression régulière ?
La seule réponse: Perl, il est surpuissant sur la manipulation de texte avec des regex.
Je n'ai rien contre Java mais il n'est pas fait pour ce type de traitement.
Chacun son métier, les vaches seront bien gardées.

Les arguments, les variables, enchainements de commandes avec || et &&
Structure de contrôle, if, for, ..., les fonctions
Avoir les superpouvoirs du Chef sans être Chef
Les paramètres, les variables, enchainements de commandes avec || et &&
Le shell avancé
Le cas Sudo
Donne le nombre de paramètres
Donne tous les paramètres
Variable de position
Visibilité des 9 premiers paramètres seulement.
Utiliser shift pour supprimer le premier paramètre et décaler les autres à gauche.
On déclare de cette façon :
1 nom="SuperTomate"
Différentes façons pour afficher une variable :
1 #!/bin/bash
2
3 nom="SuperTomate"
4
5 echo $nom
6 # affiche SuperTomate
7
8 echo "$nom est contente"
9 # affiche SuperTomate est contente
10
11 echo "$nom_rien"
12 # affiche
13
14 echo "${nom}_rien"
15 # affiche SuperTomate_rien
Il est possible de récupérer le résultat d'une commande dans une variable avec:
`macommande` ou $(macommande)
Exemple:
Je veux récupérer l'extension de l'image téléchargée
1 # on télécharge l'image et on l'enregistre dans le fichier image
2 curl "http://johann-lecocq.fr/public/image/johann.png" -o image
3
4 # file --mime-type image renvoie "image: image/png"
5 # on sélectionne avec un cut
6
7 ext=`file --mime-type image |cut -d/ -f2`
8
9 ext2=$(file --mime-type image |cut -d/ -f2)
10
11 echo "$ext $ext2"
12 # affiche "png png"
Pour exporter une variable à un processus fils:
1 nom="Toto"
2 export nom
Les variables sont locales par défaut.
Les variables d'environnement sont déclarées de façon globale
1 echo $HOME
2 # affiche /home/johann
3
4 echo $PATH
5 # affiche /usr/local/sbin:/usr/local/bin:/usr/bin/site_perl
Exécute la commande 2, si la commande 1 échoue (code d'erreur différent de 0)
Exemple: On crée le dossier toto si celui-ci n'existe pas
1 test -d toto || mkdir toto
Exécute la commande 2, si la commande 1 réussie (code d'erreur égal à 0)
Exemple: On affiche un texte si le fichier de configuration existe déjà
1 test -f /etc/site-framboise.conf && echo "Le fichier existe deja"
Le shell: Le retour
Le shell avancé
Structure de contrôle, if, for, ..., les fonctions
Dans les différents tests :
Voici les différentes structures de contrôle:
1 fichier="9781785883446-PHP_7_PROGRAMMING_COOKBOOK.pdf"
2
3 echo $fichier | grep -i '_code' > /dev/null
4
5 if test $? -eq 0
6 then
7 nouveau_nom='code.zip'
8 else
9 extension=`echo $fichier | rev | cut -d'.' -f1 | rev`
10 nouveau_nom="livre.$extension"
11 fi
12
13 mv "$fichier" $nouveau_nom
1 for fichier in `ls`
2 do
3 echo "fichier detecté >>> $fichier "
4 done
1 compteur=0
2
3 while test $compteur -le 10
4 do
5 echo $compteur
6 compteur=`expr $compteur + 1`
7 done
1 case $1 in
2 start)
3 echo "start"
4 ;;
5 reload | force-reload | graceful)
6 echo "euh..."
7 ;;
8 *)
9 exit 1
10 ;;
11 esac
On définit une fonction de la façon suivante:
1 function plus_notation_polonaise(){
2 expr $2 $1 $3 2> /dev/null
3 }
4
5 plus_notation_polonaise 52 1200 || echo "erreur"
6 plus_notation_polonaise + 52 1200
7
8 #affiche:
9 #erreur
10 #1252
S'il n'y a pas de return, la fonction retourne le code d'erreur de la dernière commande
Les fonctions s'utilisent comme des commandes
Les arguments sont : $1, $2, ...,$9
Possibilité d'utiliser shift pour le décalage
Récursivité possible sans limite
Le shell: Le retour
Le shell avancé
Le cas Sudo
Avoir les superpouvoirs du Chef sans être Chef

Cette commande permet d'avoir les droits root le temps d'une commande.

Seulement certains utilisateurs autorisés peuvent avoir accès à cette commande.

Explication rapide
Mieux que windows: pourquoi ?
Comparaison et explication de SystemD
cron & co
free, du, fdisk, ..., Quelques commandes réseau
Explication rapide
Installation de logiciel
Les daemons: System V vs SystemD
Les tâches planifiées
Les commandes systèmes & réseau
Nativement:
Via des outils externes:
Il existe différents outils pour les partitions.
En ligne de commande:
Graphique:
Il suffit de taper la commande fdisk -l pour visualiser le partitionnement des différents disques.

Il donne en plus les points de montage.

Les disques ou systèmes de fichiers sont montés dans un dossier. Le dossier représente (dans un certain sens) la partition sous forme familière.
Ils sont configurés dans le fichier /etc/fstab.
Il est lu au démarrage du système.

Il est cependant possible de monter une clé usb ou autre manuellement avec la commande mount.
Supposons que je veuille avoir accès à une disquette 3,5 pouces de 1.44Mo.
La disquette est représentée par le périphérique /dev/sdc.
1 mkdir -p /media/floppy
2 mount -t vfat -o rw,exec,suid,dev,umask=000,users /dev/sdc /media/floppy
Je peux écrire dans la disquette via le répertoire /media/floppy.
Pour démonter la disquette et l'enlever je tape la commande suivante.
1 umount /media/floppy
Les partitions: ext3, ext4, Swap
Installation de logiciel
Mieux que windows: pourquoi ?
Les daemons: System V vs SystemD
Les tâches planifiées
Les commandes systèmes & réseau
Elles peuvent se faire de différentes manières :
automatique :
semi-automatique :
manuelle :
C'est un logiciel qui automatise l'installation, désinstallation d'un paquet.
Il en existe plusieurs:
Il permet aussi de se connecter à un dépôt de paquets qui contient les programmes, mais aussi d'effectuer la résolution de dépendances.
Par exemple :
Le paquet GitKraken a besoin du paquet OpenSSL 1.0.
Les systèmes sont installés avec un minimum de programmes.
Les binaires sont référencés dans des dépôts.
Souvent une distribution a un dépôt officel et non officiel, mais il est possible d'en ajouter d'autres.
Ce sont dans ces dépôts que Pacman va chercher le logiciel et ses dépendances à installer.
En installant via les repos, nous avons les certitudes suivantes :


Les partitions: ext3, ext4, Swap
Installation de logiciel
Les daemons: System V vs SystemD
Comparaison et explication de SystemD
Les tâches planifiées
Les commandes systèmes & réseau
Processus exécuté en arrière-plan mais qui n'est pas sous le contrôle direct de l'utilisateur.
L'équivalent sous Windows est un service.
Il est possible d'effectuer certaines opérations:
Héritage des systèmes UNIX, ce sont différents niveaux de fonctionnement. La commande init active les processus associés au niveau correspondant.
| Niveau | Descriptif |
|---|---|
| 0 | Arrêt de la machine |
| 1 | Mode simple utilisateur |
| 2,4 | Mode défini par l'utilisateur, identique au 3 par défaut. |
| 3 | Multi-utilisateur, non graphique |
| 5 | Multi-utilisateur, en mode graphique |
| 6 | Redémarrage de la machine |
De base sous Debian (par exemple), le run-level par défaut est 2.
Les daemons sont initialisés par le processus init via des scripts shell.
Aucune gestion de dépendance entre les différents daemon.
Gestion manuelles via les runlevels et certaines astuces.
Plusieurs appels et enchainement de commandes, lourd à exécuter.
Souvent long et indigeste.
Ils sont souvent de la forme suivante:
1 #!/bin/bash
2 # ElasticSearch Startup script
3 #
4 # chkconfig: 2345 55 25
5 # description: Elk ES daemon
6 # processname: elk-es
7 ### END INIT INFO
8
9 # fonction et variable
10
11 case "$1" in
12 start)
13 start
14 ;;
15 stop)
16 stop
17 ;;
18 status)
19 status
20 ;;
21 esac
22 exit 0
Cela peut être:
service(*.service)
target(*.target)
montage(*.mount)
socket(*.socket)
Un target regroupe plusieurs autres unités.
| SystemVinit Runlevel | Systemd Target | Description |
|---|---|---|
| 0 | runlevel0.target, poweroff.target | Arrête le système |
| 1, s, single | runlevel1.target, rescue.target | Mode single user |
| 2, 4 | runlevel2.target, runlevel4.target, multi-user.target | Mode défini par l'utilisateur, identique au 3 par défaut |
| 3 | runlevel3.target, multi-user.target | Multi-utilisateur, non graphique |
| 5 | runlevel5.target, graphical.target | Multi-utilisateur, en mode graphique |
| 6 | runlevel6.target, reboot.target | Redémarre |
| emergency | emergency.target | Shell d'urgence |
Les fichiers de configuration sont dans:
/usr/lib/systemd/system
Les fichiers de configuration sont dans:
/etc/systemd/system
Cela évite l'écrasement de ceux-ci lors d'une mise à jour.
1 [Unit]
2 Description=Site Framboise
3 After=network.target
4
5 [Service]
6 Type=forking
7 PIDFile=/home/appuser/siteframboise.pid
8 User=appuser
9 Group=users
10 WorkingDirectory=/home/appuser/site-framboise/serveur
11 ExecStart=/home/appuser/environnement/site-framboise/bin/gunicorn -D
12 --bind 127.0.0.1:8008
13 --pid /home/appuser/siteframboise.pid
14 --pythonpath=/home/appuser/site-framboise/serveur
15 --user appuser --group users run:APP
16 ExecStop=/bin/kill `cat /home/appuser/siteframboise.pid`
17 [Install]
18 WantedBy=multi-user.target
19 TimeoutSec=2m00
S'il faut recharger la configuration, systemD nous préviendra.
1 systemctl daemon-reload
1 systemctl list-units
1 systemctl enable siteframboise
2 systemctl disable siteframboise
1 systemctl start siteframboise
2 systemctl stop siteframboise
3 systemctl restart siteframboise
1 systemctl status siteframboise

Dans l'exemple, nous voyons les processus enfant (ici 2).
Nous voyons aussi les dernières lignes du journal de systemD.
Syslog est un système de journalisation
SystemD a son propre mecanisme de journalisation.
Pour le consulter, il suffit de taper la commande suivante:
1 journalctl -e
Voici le résultat:

Les partitions: ext3, ext4, Swap
Installation de logiciel
Les daemons: System V vs SystemD
Les tâches planifiées
cron & co
C'est un programme qui permet aux utilisateurs des systèmes Unix d’exécuter automatiquement des commandes à une date et une heure spécifiées à l’avance.
La crontab est soit associé a un utilisateur, soit lancé par root via l'utilisateur.
Avant d'être mise à jour, la crontab est vérifiée.
Exemple de crontab:

Commande:

Il existe aussi des raccourcis tel que @Hourly, @Monthly, ...

Les partitions: ext3, ext4, Swap
Installation de logiciel
Les daemons: System V vs SystemD
Les tâches planifiées
Les commandes systèmes & réseau
free, du, fdisk, ..., Quelques commandes réseau
Permet de connaitre la RAM utilisée et totale

Ici 145Mo utilisé sur 500Mo.
Imprime la taille des fichiers
Dans notre exemple:
Permet d'avoir les processus en cours sur la machine


Connaitre les informations de l'interface réseau.

Permet d'ouvrir un shell sécurisé (sur SSL) sur une machine distante.

Permet de transférer des fichiers de facon sécurise sur une machine distante.


Explication du concept
Utilité de la chose
Quelques exemples simples et rapides
La supériorité de C et Python face à Java & Co
Explication du concept
Est-ce utile ?
Comment faire ?
Quels langages ?
Consiste à gérer le système en lui même mais aussi les différents service et logiciels d'un serveur.
Consiste à créer des programmes au niveau du système.
Mais s'intérresse plus au problème tel que:
Et non au traitement des données comme la programmation des applications.
Les programmes créés sont dépendants du système et non multi-plateforme.
Mais ils permettent d'exploiter toute la puissance du système.
Qu'est-ce que c'est ?
Est-ce utile ?
Utilité de la chose
Comment faire ?
Quels langages ?
Le serveur c'est le nerf de la guerre.
Il faut déployer vite et à grande échelle.
Il ne suffit pas d'installer des services pour que cela fonctionne au petit bonheur la chance.
Les logs se remplissent, les données s'accumulent, des erreurs critiques ou non surgissent.
L'administration système permet de voir ceci.
Cela coute beaucoup de temps mais permet en cas de problème de réagir au quart de tour.
Developper c'est gagner du temps !
Le développeur doit etre une feignasse: en faire peu, mais le faire bien !
Le grand débat ! Faut-il s'abstraire au système ou s'imbriquer dedans ?
L'abstraction, c'est bien mais on pert les notions fondamentales:
Ce sont des concepts clef qui peuvent être tres différents d'un système à l'autre.
Sous UNIX, il est possible d'avoir d'autre mode inter-processus que les connexions réseaux:
Attention, il faut savoir synchroniser ce petit monde à l'aide de mutex et sémaphores, par exemple.
Qu'est-ce que c'est ?
Est-ce utile ?
Comment faire ?
Quelques exemples simples et rapides
Il n'y a pas 36 solutions.
Il faut connaitre et maitriser un minimum le système.
Il faut en apprendre d'avantage.
Pour la programmation système, il faut s'orienter sur les Système d'Exploitation Centralisés de la famille UNIX.
Il y a de très bonnes documentations disponibles.
Qu'est-ce que c'est ?
Est-ce utile ?
Comment faire ?
Quels langages ?
La supériorité de C et Python face à Java & Co
Un peu de troll pour la fin.
Langage de référence pour la programmation système.
Les bibliothèques sont nombreuses pour effectuer des forks, la mémoire partagée, ...
Très bon pour l'administration système, mais aussi pour des appels très bas niveau.
Par exemple il permet la capture de signaux, il est aussi très léger et rapide.
Java est très bon pour la programmation normale, mais exécrable pour la Programmation système (ce n'est que mon avis).
Il est si abstrait pour sa compatibilité multi-plateforme, que l'on pert certaines fonctionnalités de vue.

| Table of Contents | t |
|---|---|
| Exposé | ESC |
| Full screen slides | e |
| Presenter View | p |
| Source Files | s |
| Slide Numbers | n |
| Toggle screen blanking | b |
| Show/hide slide context | c |
| Notes | 2 |
| Help | h |