GNU/Linux quésaco ?

Presenter Notes

Presenter Notes

Remerciements

Merci à Clémentine Lecocq pour sa relecture technique et linguistique.

Merci à l'équipe de développement de Landslide: site.

Merci à Gee et Xkcd pour leurs BD.

Crédits image

Presenter Notes

Presenter Notes

Qui suis-je ?

portrait

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:

  • Ubuntu 9.04 & Xubuntu
  • Debian 7
  • ArchLinux (Rolling release)
  • CentOS 6.X
  • Raspbian 7
  • Knoppix

Presenter Notes

Presenter Notes

Plan

Presenter Notes

Préface

  • Mettons les points sur les i !

Quelques abus de langages

  • Histoire: d'UNIX à GNU/Linux

La naissance des systèmes d'aujourd'hui.

  • Linux vs Windows, gain ou chimère ?

Les différences entre les deux systèmes.

  • Un petit retour sur mon utilisation

Ce que j'en pense de façon objective.

Presenter Notes

Partie 1: Les Bases

  • Le système de fichiers

C:, E: ? Une seule racine, beaucoup de branches

  • Les droits

Utilisateurs/Groupes, 0775, SUID & SGID

  • Les processus

Les processus de façon clair et net

  • Le shell

Sh, Bsh, Zsh, Code de retour, le Shebang, $?

  • Les commandes de base

mv, rm, ls, cd. Attention aux Regex

Presenter Notes

Partie 2: La doc

  • Où trouver de la doc ?

Quelques liens et bons sites.

  • Les manpages :D

La doc la plus complète au monde.

Presenter Notes

Partie 3: Processus & Redirection

  • Les processus en direct

ps, job, bg, fg, Ctrl^Z, Ctrl^C, Ctrl^D

  • Un soupçon de sytème ça vous tente ?

Explication succincte des i/o, pipes, ...

  • Flux de redirection

Redirection de flux: >>, >, 2>, 2>>

  • Les pipes

Présentation des enchainements de commandes

  • IFS, grep, cut & wc ?

Des outils surpuissants pour manipuler les fichiers.

Presenter Notes

Partie 4: Cette fois-ci on y va !

  • Le shell: Le retour

Les arguments, les variables, enchainements de commandes avec || et &&

  • Le shell avancé

Structure de contrôle, if, for, les arguments, les fonctions

  • Le cas Sudo

Avoir les superpouvoirs du Chef sans être Chef

Presenter Notes

Partie 5: Encore plus

  • Les partitions: ext3, ext4, Swap

Explication rapide

  • Installation de logiciel

Mieux que windows: pourquoi ?

  • Les daemons: System V vs SystemD

Comparaison et explication de SystemD

  • Les tâches planifiées

cron & co

  • Les commandes systèmes & réseau

free, du, fdisk, ..., Quelques commandes réseau

Presenter Notes

Partie 6: Admin & Prog système

  • Qu'est-ce que c'est ?

Explication du concept

  • Est-ce utile ?

Utilité de la chose

  • Comment faire ?

Quelques exemples simples et rapides

  • Quels langages ?

La supériorité de C et Python face à Java & Co

Presenter Notes

Presenter Notes

Préface

  • Mettons les points sur les i !

Quelques abus de langages

  • Histoire: d'UNIX à GNU/Linux

La naissance des systèmes d'aujourd'hui.

  • Linux vs Windows, gain ou chimère ?

Les différences entre les deux systèmes.

  • Un petit retour sur mon utilisation

Ce que j'en pense de façon objective.

Presenter Notes

Préface

  • Mettons les points sur les i !

Quelques abus de langages

  • Histoire: d'UNIX à GNU/Linux

  • Linux vs Windows, gain ou chimère ?

  • Un petit retour sur mon utilisation

Presenter Notes

Linux ou GNU/Linux ?

gnu-linux

  • GNU est un système.
  • Linux est seulement un noyau.

GNU/Linux est donc l'ensemble des deux.

Dans la suite, j'utilise Linux mais je pense bien GNU/Linux.

Presenter Notes

Préface

  • 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

Presenter Notes

Histoire des Systèmes d'Exploitation

1ère génération (1945-1955) : tubes à vide et cartes enfichables.

  • Programmation en langage machine et fonctionnement par réservation du temps de calcul.
  • Absence de véritable SE.

2nde génération (1955-1965) : transistors et traitement par lots.

  • Regroupement des travaux, traitements via un opérateur et lecteur de bandes.
  • 1er langage de programmation (Fortran).

Presenter Notes

Histoire des Systèmes d'Exploitation

3ème génération(1965-1980) : circuits intégrés et multiprogrammation.

  • Jusqu'alors, un ordinateur = un SE. Maintenant, un SE pour différents ordinateurs.
  • Partitionnement de la mémoire (plusieurs tâches partagent la mémoire).
    • Multiprogrammation
  • Apparition d'Unix (simplification de MULTICS des laboratoires Bell).

4ème génération (1980-...) : ordinateurs personnels

  • MS-DOS (étendu en Windows) -> machine Intel.
  • Unix : station de travail et machine non-Intel.
  • Linux (système Unix) pouvant fonctionner sur une machine Intel.

Presenter Notes

UNIX

  • 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

version

Presenter Notes

arbre

Presenter Notes

GNU is Not UNIX

gnu

  • Créé en 1983 par Richard Stallman
  • Comme UNIX mais entièrement libre
  • Constitué de différents logiciel libre
  • Il a besoin d'un noyau pour fonctionner: Linux ou Hurd par exemple

Presenter Notes

Linux

tux

  • Créé en 1991 par Linus Torvalds en langage C/ASM
  • Linux est un noyau monolithique modulaire (Kernel) et non un OS
  • Respecte la norme POSIX
  • Gère les ressources de l'ordinateur et la communication logiciel-matériel
  • Minix (micro-noyau) créé par Andrew Tanenbaum participe indirectement à sa naissance

Presenter Notes

Quelques distributions

distrib

Presenter Notes

Préface

  • 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.

  • Un petit retour sur mon utilisation

Presenter Notes

Linux vs Windows, gain ou chimère ?

tux

Presenter Notes

Différences et comparaison

WindowsLinux
PrixPayantGratuit
SourcesPropriétaireOpen Source/Libre
Support/AidePayant, pauvreGratuit, communauté
ApplicationIncompatibilité(Xp,7,8,10)Compatible quasi à vie
Norme POSIXNONOUI
ConfigurationPartielleComplète
ShellBatch & PowershellSh, Bash, Zsh, Csh
LogicielsDécentralisésGestionnaire de package(Pacman, Apt-Get, ...)
Environnement de bureauXP, Vista, Metro
1 bureau unique
Gnome 2 & 3, KDE, XFCE

Presenter Notes

Les avantages

  • Arborescence standard
  • Installation standard, facile de trouver l'install
  • Programmes compatibles entre distributions
  • Gestionnaire de package
  • Stabilité dans le temps
  • Logiciel de base
  • Le shell
  • Les services (pas besoin de wrapper sauf si capture de signaux)

Presenter Notes

Les inconvénients

  • Programmes Windows incompatibles (Au revoir Office, bonjour LibreOffice)
  • Les versions des librairies systèmes (sous Debian par exemple)
  • L'apprentissage est raide au début
  • Une autre philosophie
  • La violence de certaines commandes (rm par exemple)

Presenter Notes

Préface

  • 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.

Presenter Notes

Un petit retour sur mon utilisation

Mon retour:

  • Satisfait depuis très longtemps
  • Il y a un équivalent libre pour chaque logiciel propriétaire
  • Excellent pour le développement et moins prise de tête
  • Apprentissage raide au début, j'apprends encore
  • On peut tout faire

Chez Moi:

  • GNU/Linux comme système d'exploitation principale
  • 4 serveurs sous Archlinux
  • 1 fixe + 2 portables sous Archlinux

La route est longue, mais tellement plus belle.

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes

Partie 1 : Les Bases

  • Le système de fichier

C:, E: ? Une seule racine, beaucoup de branches

  • Les droits

Utilisateurs/Groupes, 0775, SUID & SGID

  • Les processus

Les processus de façon clair et net

  • Le shell

Sh, Bsh, Zsh, Code de retour, le Shebang, $?

  • Les commandes de base

mv, rm, ls, cd. Attention aux Regex

Presenter Notes

Partie 1 : Les Bases

  • Le système de fichier

C:, E: ? Une seule racine, beaucoup de branches

  • Les droits

  • Les processus

  • Le shell

  • Les commandes de base

Presenter Notes

Règles de base sur les fichiers

  • 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

Presenter Notes

L'arborescence de fichier

  • La racine de l'arborescence est / et non une lettre

  • Sous Linux, tout est fichier; par exemple :

    • fichier standard
    • dossier
    • périphérique
    • tube
    • lien symbolique
  • . représente le répertoire courant

  • .. représente le répertoire parent

Presenter Notes

Petit coup d'oeil de l'arborescence

arborescence

Presenter Notes

Filesystem Hierarchy Standard (FHS)

Petit descriptif de certains répertoires (plus d'info ici).

RépertoireDescriptif
/binCommande de base pour le démarrage et utilisation minimaliste
/bootChargeur d'amorçage, contient les fichiers de config du GRUB souvent
/devContient les fichiers de périphérique ou non (/dev/null par exemple)
/etcFichiers de configuration
/homeRépertoires des utilisateurs
/libBibliothèques logicielles (libOpenGL.so, libcurl-openssl-1.0.so)
/optLogiciels optionnels (souvent ceux installés à la main, sans structure)
/procSystème de fichiers virtuel documentant le noyau et les différents processus

Presenter Notes

RépertoireDescriptif
/rootRépertoire de l'utilisateur root
/tmpFichiers temporaires
/sbinExécutables pour les administrateurs (ifconfig sous Debian par exemple)
/usrMêmes répertoires que ceux à la racine mais non obligatoires pour un système minimaliste
/varContient des fichiers variables divers
/var/logContient les fichiers journaux

Presenter Notes

Exemple Clef USB

Ma clé usb avec l'étiquette Avril collée dessus est représentée par le fichier /dev/sdd

clef-fdisk

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

clef-fdisk

Presenter Notes

Les types de fichiers

Voici quelques types de fichiers:

type_fichier

  • fichier (-)
  • dossier (d)
  • lien symbolique (l)

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

Presenter Notes

Partie 1 : Les Bases

  • Le système de fichier

  • Les droits

Utilisateurs/Groupes, 0775, SUID & SGID

  • Les processus

  • Le shell

  • Les commandes de base

Presenter Notes

Les utilisateurs et les groupes

  • 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
    

Presenter Notes

Il y a root et les autres

  • 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 !

Presenter Notes

Les droits sur les fichiers

Les permissions se divisent en 3 blocs :

  • user
  • group
  • other

Il y a 3 types de droits :

  • read (vaut 4), si répertoire alors donne droit de lister les fichiers
  • write (vaut 2)
  • execute (vaut 1), si répertoire alors donne droit l'accès en ouverture

Par exemple : rwxrw---- equivaut à 760

  • L'utilisateur a tous les droits
  • Ceux du groupe de lire et écrire dedans
  • Et les autres rien

Presenter Notes

Exemple

Supposons que nous sommes l'utilisateur johann

droit

  • J'ai accès en lecture au répertoire /home, de même pour /
  • Je n'ai aucun accès à /home/applicationuser

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.

Presenter Notes

Changer les droits avec chmod

  • r -> 4
  • w -> 2
  • x -> 1

Si je veux mettre :

  • Tous les droits pour moi : rwx -> 4+2+1 = 7
  • Lecture/écriture pour le groupe : rw- -> 4+2+0 = 6
  • Rien pour les autres : --- -> 0+0+0 = 0

Cela donne 760 et donc :

chmod 760 toto.txt

C'est bien mais il faut calculer le total à chaque fois !

Presenter Notes

Changer les droits autrement

J'ai ça maintenant :

-rwxr-xr-x 3 johann users 4096 2 juin 2016 toto.txt

Si je veux mettre :

  • Tous les droits pour moi : rwx -> ça change rien
  • Lecture/écriture pour le groupe -> g+w-x
  • Rien pour les autres : --- -> o-rx

Ça nous donne :

chmod g+w-x,o-rx toto.txt

Presenter Notes

Sticky bits

Appliqué à un répertoire, seul :

  • Le propriétaire du fichier
  • Le propriétaire du répertoire

ont le droit d'effacer les fichiers.

Exemple : le répertoire /tmp

sticky-bit

Tout le monde peut écrire à l'intérieur mais seul moi et root pouvons supprimer mes fichiers.

Correspond à 1 en valeur octal

Presenter Notes

SETUID

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 setuid

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
    

Presenter Notes

SETGID

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.

Presenter Notes

Partie 1: Les Bases

  • Le système de fichier

  • Les droits

  • Les processus

Les processus de façon clair et net

  • Le shell

  • Les commandes de base

Presenter Notes

Qu'est-ce qu'un processus ?

C'est un programme en cours d'exécution, il est constitué :

  • d'un programme exécutable
  • pile d'exécution
  • pointeur de pile
  • ...

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.

Presenter Notes

Partie 1 : Les Bases

  • Le système de fichier

  • Les droits

  • Les processus

  • Le shell

Sh, Bsh, Zsh, Code de retour, le Shebang, $?

  • Les commandes de base

Presenter Notes

Le shell

Interpréteur de commandes pour les UNIX et type UNIX.

shell

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.

Presenter Notes

D'autres Shell

  • Z shell (zsh)
  • C shell (csh)
  • KornShell (ksh)

Chacun a sa petite touche.

Le Sh et Bsh restent standard.

Presenter Notes

Le shell au démarrage

Plusieurs fichiers sont chargés au démarrage d'un shell :

/etc/profile

Chargé pour n'importe quel shell

/etc/bash.bashrc

Chargé pour n'importe quel utilisateur

~/.bashrc

Chargé pour un utilisateur lorsqu'il démarre un shell

Presenter Notes

Configurer son 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

Presenter Notes

Le shebang #!#!#!#!#!

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

Presenter Notes

Autres exemples

En Python

1 #!/bin/python -O
2 #Avec des arguments en plus ça fonctionne aussi !!!
3 print("Hello Toto")

En Perl

1 #!/bin/perl
2 print "Hello Toto\n"

Presenter Notes

Exécution de commandes

  • Les arguments passés en paramètre respectent la casse, voici deux commandes différentes :

    • ls -n
    • ls -N
  • On peut fusionner les arguments simples, la même commande :

    • ls -lah
    • ls -l -a -h
  • Un argument complexe :

    • ls --human-readable

Presenter Notes

Les codes de retour

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.

Presenter Notes

Partie 1 : Les Bases

  • Le système de fichier

  • Les droits

  • Les processus

  • Le shell

  • Les commandes de base

mv, rm, ls, cd. Attention aux Regex

Presenter Notes

Les commandes

  • 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.

Presenter Notes

Commande pour la survie

exit

Quitte le shell en cours.

cd

Change de répertoire, il peut être absolu ou relatif.

ls

Liste le contenu d'un répertoire.

  • l : ajoute les droits, les propriétaires, la taille.
  • a : affiche les fichiers cachés.

mkdir

Créer un répertoire.

touch

Créer un fichier vide.

Presenter Notes

Commande pour la survie 2

cat

Affiche le contenu d'un fichier.

rm

Suppression d'un fichier, attention au -Rf, il n'y a pas de corbeille en ligne de commande.

about, apropos

Trouve un programme ou une commande via des mots-clefs.

kill

Tuer un processus.

ln

Creation de lien.

man

Le plus important, consulter les manpages.

Presenter Notes

Les jokers

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 !

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes

Partie 2 : La doc

  • Où trouver de la doc ?

Quelques liens et bons sites.

  • Les manpages :D

La doc la plus complète au monde.

Presenter Notes

Partie 2 : La doc

  • Où trouver de la doc ?

Quelques liens et bons sites.

  • Les manpages :D

Presenter Notes

Où trouver de la doc ?

  • 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.

Presenter Notes

Quelques livres et magazines

Le guide de survie - Linux

de Scott Granneman, edition PEARSON, ISBN: 9782744021251

GNU/Linux magazine (ici)

Mensuel, avec code source sur le net

Presenter Notes

Presenter Notes

Partie 2: La doc

  • Où trouver de la doc ?

  • Les manpages :D

La doc la plus complète au monde.

Presenter Notes

Les manpages

Ou comment consulter une doc horrible et complète.

  • man ls donne la doc de la commande ls :

manpage-ls

Presenter Notes

Suite

manpage-ls

Ici nous avons les différents codes de retour du ls.

Presenter Notes

Documentation des manpages

1 man man

En cas de doute ! Consultez le man

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes

Partie 3 : Processus & Redirection

  • Les processus en direct

ps, job, bg, fg, Ctrl^Z, Ctrl^C, Ctrl^D

  • Un soupçon de sytème ça vous tente ?

Explication succincte des i/o, pipes, ...

  • Flux de redirection

Redirection de flux : >>, >, 2>, 2>>

  • Les pipes

Présentation des enchainements de commandes.

  • IFS, grep, cut & wc ?

Des outils surpuissants pour manipuler les fichiers.

Presenter Notes

Partie 3 : Processus & Redirection

  • Les processus en direct

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 ?

Presenter Notes

Ps (ps aux)

Permet d'avoir une image des processus avec diverses informations.

ps-1

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

ps-2

Presenter Notes

Terminal et arrière plan

  • 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 &

Presenter Notes

Action sur les processus

Tuer un processus

  • On envoie un signal SIGINT (Ctrl+C)

Passer un processus en arrière-plan comme &

  • On envoie le signal de mise en pause (Ctrl+Z)
  • On exécute la commande bg

Passer au premier plan le dernier processus en arrière-plan

  • on exécute la commande fg

Voir la liste des processus au premier ou arrière-plan

  • on exécute la commande jobs

Presenter Notes

Partie 3 : Processus & Redirection

  • 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 ?

Presenter Notes

Les entrées/sorties standard

Sous UNIX, il y en a 3 d'ouvert automatiquement pour chaque processus :

  1. stdin: entrée standard (clavier de base)
  2. stdout: sortie standard (console de base)
  3. stderr: sortie d'erreur standard (console de base)

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.

Presenter Notes

Partie 3 : Processus & Redirection

  • 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 ?

Presenter Notes

Redirection de flux

Il est possible de rediriger les flux suivants vers un fichier :

Entrée standard

1 wc -l < resultat.txt

On veut compter le nombre de lignes du fichier resultat.txt.

Sortie standard

1 ls -l > resultat.txt

Sortie d'erreur

1 ls -l 2> resultat.txt

> ou >>

> resultat.txt

Ecrase les données qui sont dans le fichier resultat.txt.

>> resultat.txt

Ajoute à la fin du fichier resultat.txt.

Presenter Notes

Partie 3 : Processus & Redirection

  • Les processus en direct

  • Un soupçon de sytème ça vous tente ?

  • Flux de redirection

  • Les pipes

Présentation des enchainements de commandes

  • IFS, grep, cut & wc ?

Presenter Notes

Les pipes

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
  • grep lira sur son entrée standard la sortie standard du ls
  • wc lira sur son entrée standard la sortie standard du grep
  • wc écrira sur sa sortie standard qui sera la console

Presenter Notes

Partie 3 : Processus & Redirection

  • 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.

Presenter Notes

IFS: Internal Field Separator

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 '

Presenter Notes

grep

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 :

grep

Presenter Notes

cut

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

cut

Presenter Notes

wc une dernière pour la route

wc permet de compter tout et n'importe quoi :

  • bytes
  • caractères
  • lignes
  • mots
  • ...

Presenter Notes

wc exemple

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

wc

Presenter Notes

Conclusion

Nous avons vu quelques commandes utiles sur la manipulation du texte.

En voici d'autres :

  • tr
  • sed

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.

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes

Partie 4 : Cette fois-ci on y va !

  • Le shell : Le retour

Les arguments, les variables, enchainements de commandes avec || et &&

  • Le shell avancé

Structure de contrôle, if, for, ..., les fonctions

  • Le cas Sudo

Avoir les superpouvoirs du Chef sans être Chef

Presenter Notes

Partie 4 : Cette fois-ci on y va !

  • Le shell: Le retour

Les paramètres, les variables, enchainements de commandes avec || et &&

  • Le shell avancé

  • Le cas Sudo

Presenter Notes

Les paramètres

$#

Donne le nombre de paramètres

$* et $@

Donne tous les paramètres

$1, $2, ..., $9

Variable de position

  • $0 : nom du script
  • $1 : premier paramètre
  • $2 : deuxième paramètre

Visibilité des 9 premiers paramètres seulement.

Utiliser shift pour supprimer le premier paramètre et décaler les autres à gauche.

Presenter Notes

Les variables

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

Presenter Notes

Capture de résultat `` ou $()

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"

Presenter Notes

Export

Pour exporter une variable à un processus fils:

1 nom="Toto"
2 export nom

Les variables sont locales par défaut.

Presenter Notes

Variable d'environnement

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

Presenter Notes

Enchainement avec vérification

commande1 || commande2

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

commande1 && commande2

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"

Presenter Notes

Partie 4: Cette fois-ci on y va !

  • Le shell: Le retour

  • Le shell avancé

Structure de contrôle, if, for, ..., les fonctions

  • Le cas Sudo

Presenter Notes

Structure de contrôle

Dans les différents tests :

  • si la condition vaut 0 alors VRAI
  • si la condition est différent de 0 alors FAUX

Voici les différentes structures de contrôle:

  • if
  • for
  • while
  • switch

Presenter Notes

IF

 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

Presenter Notes

FOR

1 for fichier in `ls`
2 do
3     echo "fichier detecté >>> $fichier "
4 done

Presenter Notes

WHILE

1 compteur=0
2 
3 while test $compteur -le 10
4 do
5     echo $compteur
6     compteur=`expr $compteur + 1`
7 done

Presenter Notes

SWITCH

 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

Presenter Notes

Les fonctions

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

Presenter Notes

Partie 4: Cette fois-ci on y va !

  • Le shell: Le retour

  • Le shell avancé

  • Le cas Sudo

Avoir les superpouvoirs du Chef sans être Chef

Presenter Notes

Le cas sudo

sandwich

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

Presenter Notes

Le système n'est pas une buse

sandwich

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

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes

Partie 5: Encore plus

  • Les partitions: ext3, ext4, Swap

Explication rapide

  • Installation de logiciel

Mieux que windows: pourquoi ?

  • Les daemons: System V vs SystemD

Comparaison et explication de SystemD

  • Les tâches planifiées

cron & co

  • Les commandes systèmes & réseau

free, du, fdisk, ..., Quelques commandes réseau

Presenter Notes

Partie 5: Encore plus

  • Les partitions: ext3, ext4, Swap

Explication rapide

  • Installation de logiciel

  • Les daemons: System V vs SystemD

  • Les tâches planifiées

  • Les commandes systèmes & réseau

Presenter Notes

Les systèmes de fichiers & autres

Les systèmes de fichiers pris en charge

Nativement:

  • ext3
  • ext4
  • Btrfs

Via des outils externes:

  • fat32
  • ntfs

Les espaces d'échanges

  • swap

Presenter Notes

Partitions et points de montage

Il existe différents outils pour les partitions.

En ligne de commande:

  • fdisk/gdisk
  • parted

Graphique:

  • gparted

Presenter Notes

Fdisk

Il suffit de taper la commande fdisk -l pour visualiser le partitionnement des différents disques.

fdisk

Presenter Notes

Gparted

Il donne en plus les points de montage.

gparted

Presenter Notes

Les points de montages

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.

fstab

Il est cependant possible de monter une clé usb ou autre manuellement avec la commande mount.

Presenter Notes

Montage manuel

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

Presenter Notes

Partie 5: Encore plus

  • 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

Presenter Notes

Installation de logiciel

Elles peuvent se faire de différentes manières :

  • automatique :

    • via les repos
    • via un .deb, tar.gz
  • semi-automatique :

    • téléchargement des sources + compilation + installation auto
  • manuelle :

    • avec ou sans compilation

Presenter Notes

Gestionnaire de paquets

C'est un logiciel qui automatise l'installation, désinstallation d'un paquet.

Il en existe plusieurs:

  • Apt pour Debian et Ubuntu
  • Rpm et Yum pour Red Hat, Centos, ...
  • Pacman et Yaourt pour Archlinux

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.

Presenter Notes

Les dépôts

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 :

  • mise à jour automatique
  • installation correcte
  • configuration de base
  • résolution des dépendances lors de l'installation

Presenter Notes

Exemple Firefox

depot-1

Presenter Notes

Exemple Firefox

depot-2

Presenter Notes

Partie 5: Encore plus

  • 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

Presenter Notes

Les daemons

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:

  • démarrer
  • stopper
  • redémarrer
  • recharger
  • voir son état

Presenter Notes

Les runlevels

Héritage des systèmes UNIX, ce sont différents niveaux de fonctionnement. La commande init active les processus associés au niveau correspondant.

NiveauDescriptif
0Arrêt de la machine
1Mode simple utilisateur
2,4Mode défini par l'utilisateur, identique au 3 par défaut.
3Multi-utilisateur, non graphique
5Multi-utilisateur, en mode graphique
6Redémarrage de la machine

De base sous Debian (par exemple), le run-level par défaut est 2.

Presenter Notes

System V

  • 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.

Presenter Notes

Schéma de script

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

Presenter Notes

SystemD

  • Conçu pour le noyau Linux comme alternative à System V.
  • Ecrit en Python et C.
  • Gestion des dépendances entre services.
  • Quasiment plus d'appel au script shell.
  • Permet un meilleur suivi des démons via les cgroups.
  • Ne respecte pas le principe KISS.

Distribution l'ayant adopté

  • Red Hat depuis la version 7
  • Fedora depuis la version 15
  • Debian depuis Jessie (version 8)
  • Ubuntu depuis Vivid Vervet(version 15.04)
  • ArchLinux depuis octobre 2012

Presenter Notes

Plusieurs types d'unité ?

Cela peut être:

  • service(*.service)

  • target(*.target)

  • montage(*.mount)

  • socket(*.socket)

Un target regroupe plusieurs autres unités.

Presenter Notes

Les targets

SystemVinit RunlevelSystemd TargetDescription
0runlevel0.target, poweroff.targetArrête le système
1, s, singlerunlevel1.target, rescue.targetMode single user
2, 4runlevel2.target, runlevel4.target, multi-user.targetMode défini par l'utilisateur, identique au 3 par défaut
3runlevel3.target, multi-user.targetMulti-utilisateur, non graphique
5runlevel5.target, graphical.targetMulti-utilisateur, en mode graphique
6runlevel6.target, reboot.targetRedémarre
emergencyemergency.targetShell d'urgence

Presenter Notes

Configuration

Service installé automatiquement via les packages

Les fichiers de configuration sont dans:

/usr/lib/systemd/system

Service installé manuellement

Les fichiers de configuration sont dans:

/etc/systemd/system

Cela évite l'écrasement de ceux-ci lors d'une mise à jour.

Presenter Notes

Exemple de configuration

 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

Presenter Notes

Quelques commandes

Recharger les configurations de services

S'il faut recharger la configuration, systemD nous préviendra.

1 systemctl daemon-reload

Lister les services disponibles

1 systemctl list-units

Activer/désactiver un service

1 systemctl enable siteframboise
2 systemctl disable siteframboise

Démarrer/arrêter/redémarrer un service

1 systemctl start siteframboise
2 systemctl stop siteframboise
3 systemctl restart siteframboise

Presenter Notes

Quelques commandes

Connaitre l'état d'un service

1 systemctl status siteframboise

systemd

Dans l'exemple, nous voyons les processus enfant (ici 2).

Nous voyons aussi les dernières lignes du journal de systemD.

Presenter Notes

Journalisation

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

journalctl

Presenter Notes

Plus de docs ?

Presenter Notes

Partie 5: Encore plus

  • Les partitions: ext3, ext4, Swap

  • Installation de logiciel

  • Les daemons: System V vs SystemD

  • Les tâches planifiées

cron & co

  • Les commandes systèmes & réseau

Presenter Notes

Cron (tâches planifiées)

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:

cron2

Commande:

  • affiche la crontab: crontab -l
  • editer la crontab: crontab -e

Presenter Notes

Mode d'emploi

cron1

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

cron2

Presenter Notes

Partie 5: Encore plus

  • 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

Presenter Notes

Quelques commandes systèmes

free

Permet de connaitre la RAM utilisée et totale

free

Ici 145Mo utilisé sur 500Mo.

du

Imprime la taille des fichiers du Dans notre exemple:

  • -h pour convertir en bonne unité lisible
  • -c pour avoir un total
  • -d 1 pour une profondeur de 1 dossier

Presenter Notes

Quelques commandes systèmes

ps

Permet d'avoir les processus en cours sur la machine

ps-1

ps-2

Presenter Notes

Quelques commandes réseaux

ifconfig

Connaitre les informations de l'interface réseau. ifconfig

Presenter Notes

Secure Shell & Secure Copy

SSH

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

ssh

SCP

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

scp

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes

Partie 6: Admin & Prog système

  • Qu'est-ce que c'est ?

Explication du concept

  • Est-ce utile ?

Utilité de la chose

  • Comment faire ?

Quelques exemples simples et rapides

  • Quels langages ?

La supériorité de C et Python face à Java & Co

Presenter Notes

Partie 6: Admin & Prog système

  • Qu'est-ce que c'est ?

Explication du concept

  • Est-ce utile ?

  • Comment faire ?

  • Quels langages ?

Presenter Notes

Explication du concept

Administration système

Consiste à gérer le système en lui même mais aussi les différents service et logiciels d'un serveur.

Programmation système

Consiste à créer des programmes au niveau du système.

Mais s'intérresse plus au problème tel que:

  • la gestion des ressources
  • protocoles
  • ...

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.

Presenter Notes

Partie 6: Admin & Prog système

  • Qu'est-ce que c'est ?

  • Est-ce utile ?

Utilité de la chose

  • Comment faire ?

  • Quels langages ?

Presenter Notes

Administration système ?

Concept

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.

Prix ?

Cela coute beaucoup de temps mais permet en cas de problème de réagir au quart de tour.

Alors au final ?

Developper c'est gagner du temps !

Le développeur doit etre une feignasse: en faire peu, mais le faire bien !

Presenter Notes

Programmation système ?

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:

  • les pointeurs
  • l'allocation mémoire
  • la gestion des ressources (fichiers, tube, socket, ...)

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:

  • mémoire partagée
  • socket
  • tube nommés.

Attention, il faut savoir synchroniser ce petit monde à l'aide de mutex et sémaphores, par exemple.

Presenter Notes

Partie 6: Admin & Prog système

  • Qu'est-ce que c'est ?

  • Est-ce utile ?

  • Comment faire ?

Quelques exemples simples et rapides

  • Quels langages ?

Presenter Notes

Comment faire ?

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.

Presenter Notes

Partie 6: Admin & Prog système

  • Qu'est-ce que c'est ?

  • Est-ce utile ?

  • Comment faire ?

  • Quels langages ?

La supériorité de C et Python face à Java & Co

Presenter Notes

Quels langages ?

La supériorité de C et Python face à Java & Co

Un peu de troll pour la fin.

C

Langage de référence pour la programmation système.

Les bibliothèques sont nombreuses pour effectuer des forks, la mémoire partagée, ...

Python

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.

Au revoir Java

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.

Presenter Notes

Questions ?

question

Presenter Notes

Presenter Notes