présentation créée par Renaud Goll @ TekaTux
Document sous licence
#!/bin/bash
echo -ne 'nom user : '
read user
echo -ne 'nom site : '
read site
if [[ -e /var/www/"$user" ]]; then
echo utilisateur existant >&2
exit 128
fi
function createBase() {
## creation de la base de donnee et du user sql
local user="$1"
local mdp="$2"
mysql -e "create database ${user//-/_};"
mysql -e "create user '${user//-/_}'@'localhost' identified by '${mdp}';"
mysql -e "grant all on ${user//-/_}.* to '${user//-/_}'@'localhost';"
mysql -e "flush privileges"
return $?
}
function createUser() {
## creation user et rep de site web
mkdir -p /var/www/"$user"/"$site"
useradd -b /var/www/"$user" -d /var/www/"$user" -M -g www-data -G sftp -N -s /bin/false "$user"
chown "$user":www-data /var/www/"$user"/"$site"
echo "$mdp" >"$user"
echo "$user:$mdp" | chpasswd
}
mdp=$(pwgen -s 16 1)
createBase "user" "mdp"
createUser "user" "mdp"
## site et vhost
sed -e "s/__USER__/${user}/g; s/__SITE__/${site}/g; s/__SITEALIAS__/${site#www.}/g" <site-generic.conf >/etc/apache2/sites-available/"$site".conf
a2ensite "$site"
systemctl reload apache2
Image issue de Joystick n°57, février 1995
L'informatique éthique
un peu d'histoire
|
Nationalité britannique née le 10 décembre 1815 à Londres, morte le 27 novembre 1852 Elle est connue pour être la première informaticienne. C'est la première personne a avoir écrit un programme. Celui ci pouvait être exécuté sur la machine à cartes perforées de Charles Babbage (26/12/1791 - 18/10/1871) dérivée du métier à tisser de Joseph Marie Jacquard Alors que Babbage lui même ne voit dans sa machine qu'une super calculatrice, Ada imagine et décrit déjà les principes de fonctionnement d'un calculateur universel: l'ordinateur. Elle invente notament le concept de boucle conditionnelle. |
Images wikipedia: daguerreotype by Antoine Claudet |
|
Neumann Jànos Lajos de son nom de naissance Nationalité Hongroise, puis américaine Né le 28 décembre 1903 à Budapest (Autriche-Hongrie), mort le 8 février 1957 Il est connu (en informatique) pour l'architecture de von neumann, architecture interne des ordinateurs toujours d'actualité aujourd'hui. Cette architecture centralise les différents éléments d'un ordinateur et décrit les échanges entre eux. |
Images wikipedia |
|
Nationalité britannique Né le 23 juin 1912 à Maida Vale, mort le 7 juin 1954 Il est l'inventeur de la Bombe, un ordinateur mécano-électrique construit dans l'unique but de casser le code de la machine Enigma. Il remet au goût du jour les travaux d'Ada Lovelace sur les calculateurs universels. Il est aussi l'inventeur d'un certain nombre de concepts, dont celui de la machine aujourd'hui appelée machine de Turing. |
Images wikipedia |
|
Nationalité britannique Né le 26 juin 1913 à Dudley, mort le 29 novembre 2010 Il est le créateur de l'EDSAC, premier ordinateur à architecture von neumann. Il invente aussi le concept de microprogrammation et de ROM. Plus tard, il concevra le Titan 2, premier ordinateur supportant un système d'exploitation à temps partagé. Il est aussi l'inventeur des ACL qui seront utilisées ensuite dans les Unix. |
Images wikipedia |
|
Nationalité française Né le 20 février 1931 à Chantenay-Saint-Imbert. Il est l'inventeur du concept de transport par datagramme. Il créé le réseau Cyclade en 1972. Il fonctionnera pleinement en 1974 (25 ordinateurs en France et 2 en Europe), soit 2 ans avant Internet. Lorsque le principe des datagrammes et de la commutation par paquets est proposé aux PTT pour leur futur réseau de transfert de donnée (plus tard appelé minitel), il se heurte à un mur: les PTT avec leurs ingénieurs télécom ont choisi le X.25, protocole en mode circuit virtuel dont plus personne ne parle aujourd'hui. |
Images wikipedia |
|
Nationalité américaine Né le 9 septembre 1941 à Bronxville, trouvé mort le 12 octobre 2011 Il créé le langage C, père de tous les langages modernes, comme une évolution du langage B de Ken Thompson pour écrire le premier Unix dont il est co-inventeur. Ce premier Unix a longtemps été distribué sur disquette à travers les universités. Il est donc aussi considéré comme un des pères du logiciel libre. Sa mort est éclipsée par la mort d'une star du business informatique, Steve Jobs, mort 6 semaines avant lui. |
Images wikipedia |
|
Nationalité canadienne et américaine né le 1er janvier 1942 à Toronto Il a coécrit le livre The C programming Language avec Dennis Ritchie. Ce livre ayant eu un énorme succès est couramment appelé le Kernighan/Ritchie ou le K&R, ou encore the white book (de la couleur de sa couverture). Brian Kernighan est à l'origine du nom Unix, jeu de mot sur Unics. Il est aussi l'inventeur du langage Awk. |
Images wikipedia |
|
Nationalité américaine né le 4 février 1943 à la Nouvelle-Orléans Il est l'inventeur d'Unix qu'il écrit en B puis en C avec Dennis Ritchie et Brian Kernighan. Il est aussi l'inventeur du pipe, de ed (précurseur de vi et de tout un tas d'éditeur de texte) et de l'encodage de caractère UTF-8. |
Images wikipedia |
|
Nationalité américaine né le 23 juin 1943 à New Haven (Connecticut) Il est le co-inventeur, avec Robert Elliot Khan, du protocole TCP/IP et utilise pour ce faire les travaux du projet Cyclade de Louis Pouzin. Il est le fondateur de l'ISOC (Internet Society) qui soutien notamment l'IETF (Internet Engineering Task Force). |
Images wikipedia |
|
Nationalité américaine né le 16 mars 1953 à New York Il est l'inventeur du concept de logiciel libre, fondateur de la Free Software Foundation (FSF) et grand pourfendeur du logiciel propriétaire. Pour lui, un code (informatique) ne peut pas plus appartenir à quelqu'un qu'une opération mathématique. Il est le créateur et programmeur principale du jeu de commande GNU que nous utilisons tous par défaut sous linux. C'est encore aujourd'hui le mainteneur principal de l'éditeur emacs. |
Images wikipedia |
|
Nationalité britannique né le 8 juin 1955 à Londres Il est l'inventeur du World Wide Web (www). D'après ses propres paroles (je cite): Je n'ai fait que prendre le principe d’hypertexte et le relier au principe du TCP et du DNS et alors – boum ! – ce fut le World Wide Web !. C'est simple, non ? Il a travaillé pour le CERN en France dans les années 1980 où il fut connecté au réseau ARPANET. C'est à priori de là que viens son idée de www. Il a fondé et préside le w3c. |
Images wikipedia |
|
Nationalité finlandaise et américaine né le 28 décembre 1969 à Helsinki Il est le développeur principal et l'initiateur du projet linux. Ce noyau de système d'exploitation équipe aujourd'hui plus de 50% des appareils informatiques dans le monde. Linux est sous licence libre pour des raisons pratiques. En effet, le choix d'une licence libre pour Linus ne trouve pas de racines politiques, d'où de nombreuses batailles avec Richard Stallman entre autre. Longtemps géré à la main, le versioning de linux se fait avec BitKeeper (qui est propriétaire) jusqu'à ce que la version gratuite disparaisse. Linus écrit alors Git qui est aujourd'hui une référence en la matière. |
Images wikipedia |
Beaucoup de monde a été oublié dans cette présentation. Je ne parle pas par exemple des acteurs de Palo Alto, des inventeurs de ethernet, ou de Douglas Engelbart (inventeur de l'informatique moderne), etc.
Il y en a deux que je n'ai pas oublié en revanche, c'est Steve Jobs et Bill Gates. Ceux là sont des industriels qui n'ont jamais rien inventé d'autre que le fait de vendre beaucoup à beaucoup de monde. Cela dit, c'est grace à eux que l'ordinateur s'est démocratisé.
Ici, une "pascaline", calculatrice mécanique de 1642
|
|
console de l'opérateur |
|
Regardez sur invidious: The Mother of All Demos, presented by Douglas Engelbart (1968) [HD 720p 2020 reupload]
|
|
PDP11 avec DECtapes |
|
Notez l'écran "portrait" |
|
l'unité centrale |
|
|
|
C'est la couche d'abstraction matérielle
|
et de ses distributions
less-is-more philosophy
|
|
|
|
|
|
|
|
Fichiers, répertoires, devices, RAM...
Télécharger CD "netinst" pour architecture AMD64
https://www.debian.org/CD/netinst/
et cliquez sur amd64
VirtualBox
Installation Debian
Et welcome home
La "coquille"
un langage faiblement structuré, non typé, standard
C'est le signal d'attente du shell
nom@machine:~$
$ ls
$
ls : listing : liste le contenu d'un dossier (répertoire)
$ mkdir toto
$ ls
toto
$
mkdir : make directory : créer le répertoire (dossier) toto
$ rmdir toto
$ ls
$
rmdir : remove directory : supprime un répertoire s'il est vide
~ $ mkdir toto
~ $ ls
toto
~ $ cd toto
~/toto $ cd .. ## .. = répertoire père
~ $
cd : change active directory : change le répertoire courant
Attention, cd est une commande interne
Vous êtes maintenant capable de vous déplacer dans une arborescence
ls # liste le contenu d'un répertoire
cd # change le répertoire courant
mkdir # créer un répertoire
rmdir # supprime un répertoire
il ne reste que la commande man pour être complet
man command # affiche le manuel de la commande command
exemple :
man ls # affiche le man de 'ls' (touche q pour quitter)
la hierarchisation de l'information
# exemples
/ # chemin absolu : root (ou racine du système de fichier)
./Docs # chemin relatif : répertoire Docs dans le répertoire courant
../var # chemin relatif : répertoire var dans le répertoire père
./Docs/var # chemin relatis : rep var dans le rep Docs, dans le rep courant
la copie est autorisée (et le test aussi)
mkdir -p ./Docs/cours1
elle créer un dossier "cours1" dans le dossier "Docs" situé dans le répertoire courant. Si Docs n'existe pas, elle le créer aussi (option -p)
méthode :
$ man mkdir
$ mkdir -p ./Docs/cours1
$ ls
Docs
$ ls ./Docs # ou moins bien mais marche aussi : ls Docs
cours1
$
rmdir Docs
$ man rmdir
$ ls
Docs
$ rmdir Docs
rmdir: impossible de supprimer 'Docs': Le dossier n est pas vide
$ ls
Docs
$
Elle "plante": elle dit que le dossier n'est pas vide
En réalité, elle ne plante pas du tout... On lui demande de faire quelque chose qu'elle ne doit pas faire, ce qui n'est pas tout à fait la même chose... rmdir ne supprime les répertoires que si ceux-ci sont vides : c'est une mesure de précaution pour ne pas perdre une arborescence complète. Pour supprimer Docs, il faut le "vider" d'abord.
$ rmdir ./Docs/cours1 # supprime cours1 dans Docs
$ rmdir ./Docs # supprime Docs désormais vide
# une remarque ?
$ ls
$
mkdir -p ./cours/cours1/../cours2
La commande crée les répertoires cours1 et cours2 dans le répertoire cours
Il suffit de suivre le guide: on part de ".", on crée cours, on crée cours1 dans cours, on remonte dans cours, on crée cours2.
$ ls
$ mkdir -p ./cours/cours1/../cours2
$ ls
cours
$ ls cours
cours1 cours2
$
C'est la méthode crade... On écrira plutôt
mkdir -p ./cours/cours1 ./cours/cours2 ## ou mieux:
mkdir -p ./cours/cours{1,2}
Filesystem Hierarchy Standard
pour les curieux...
$ ls /
...
$ ls /etc
...
Filesystem Hierarchy Standard
$ ls /usr/bin
...
$ ls /usr/share
...
Filesystem Hierarchy Standard
$ ls /var/log
...
Filesystem Hierarchy Standard
pour une fois, vous les appelez comme moi !
touchrm (en réalité, on supprime un lien) ou avec la commande unlinkla commande touch
$ ls
$ touch fichier
$ ls
fichier
$ ls -l fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 22:46 fichier
$
En réalité, le rôle de touch est de changer l'heure de modification des fichiers par l'heure courante, mais si le fichier n'existe pas, alors il est créé.
$ man touch
détail de la sortie longue de ls
la commande ln
Préparation:
$ mkdir source cible
$ touch ./source/fichier
$ ls -l ./source/fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 22:46 fichier
$
Exécution:
$ ln source/fichier cible/
$ ls -l source/fichier
-rw-rw-r-- 2 rg rg 0 sept. 22 23:09 source/fichier
$ ls -l cible/fichier
-rw-rw-r-- 2 rg rg 0 sept. 22 23:09 cible/fichier
$
la commande ln lie la cible à un autre répertoire (le lien est passé à 2). Le fichier "fichier" n'est présent qu'une fois sur le disque mais est accessible dans 2 répertoires
la commande rm
$ ls cible
fichier
$ rm cible/fichier
$ ls cible
$
La commande rm supprime le lien du fichier dans le répertoire (courant par défaut, nommé sinon)
la commande cp
Préparation:
$ ls -l ./source/fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 22:46 fichier
$
Exécution:
$ cp source/fichier cible/
$ ls -l source/fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 23:09 source/fichier
$ ls -l cible/fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 23:09 cible/fichier
$
La commande cp copie un fichier source dans une cible. C'est une commande complexe avec de nombreuses options
la commande mv
Préparation:
$ rm ./cible/fichier
$ ls -l ./source/fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 22:46 fichier
$
Exécution:
$ mv source/fichier cible/
$ ls -l source/
$ ls -l cible/fichier
-rw-rw-r-- 1 rg rg 0 sept. 22 23:09 cible/fichier
$
La commande mv déplace les fichiers. Son comportement est différent en fonction du type de fichier de ses arguments
la commande stat
$ stat source/fichier
Fichier : source/fichier
Taille : 0 Blocs : 16 Blocs d'E/S : 4096 fichier vide
Périphérique : 38h/56d Inœud : 1059414 Liens : 2
Accès : (0664/-rw-rw-r--) UID : ( 1000/ rg) GID : ( 1000/ rg)
Accès : 2022-09-22 23:09:25.068295540 +0200
Modif. : 2022-09-22 23:09:25.068295540 +0200
Changt : 2022-09-22 23:10:24.452466827 +0200
Créé : -
$
La commande stat affiche les métadonnée des fichiers en argument. Elle admet un paramètre -f...
la commande file
$ file source/fichier
empty
$ file source
source: directory
$ file /bin/bash
/bin/bash: ELF 64-bit LSB shared object, x86-64 ...
$
La commande file affiche le type des fichiers en paramètre
la commande type
$ type bash
bash est /usr/bin/bash
$ type cd
cd est une primitive du shell
$ type ls
ls est un alias
$
La commande type affiche le type des commandes en paramètre
On vient de voir
## manipulation des répertoires
mkdir ## crée un répertoire
rmdir ## supprime un répertoire vide
cd ## change le répertoire courant
## manipulation des fichiers
touch fichier ## Met à jour l'heure de modification du fichier ou le créer
rm fichier ## supprime le lien du fichier dans le répertoire
ln source rep ## rajoute un lien (dit hard) du fichier source vers rep
cp source cible ## copie le fichier standard source sur (ou dans) cible
mv source cible ## déplace source vers cible
## interfaces de lecture
stat fichier ## écrit les métadonnées de fichier
file fichier ## affiche le type de fichier
type fichier ## affiche le type de commande
ls fichier ## liste l'argument
L'ensemble de ces commandes permettent de faire grossièrement à peu près tout sur un système de fichier. Il ne manque que la synchronisation qu'on verra plus tard (en traitant le problème des backups).
autre que répertoire et fichier standard
/dev
$ ls -l /dev/vda
brw-rw---- 1 root disk 254, 0 23 sept. 18:54 /dev/vda
$ ls -l /dev/tty
crw-rw-rw- 1 root tty 5, 0 23 sept. 18:54 /dev/tty
$
$ ls -l /var/run/udev/control
srw------- 1 root root 0 23 sept. 18:54 /var/run/udev/control
$
Votre patron vous demande de créer le répertoire de travail d'un collègue. Ce collègue travaille sur 2 projets: le projet "sync" et le projet "fstrim". Vous devez lui créer une arborescence: des répertoires au nom de chaque projet contenant chacun un répertoire "c" et un répertoire "h". Les répertoires "c" devront contenir un fichier "[nom du projet].c" et les répertoire "h"[nom du projet].h. Dans chaque répertoire du projet, devra se trouver un fichier "makefile".
$ mkdir -p sync/c sync/h fstrim/c fstrim/h
$ touch sync/makefile sync/c/sync.c sync/h/sync.h
$ touch fstrim/makefile fstrim/c/fstrim.c fstrim/h/fstrim.h
$
Votre collègue vous engueule: le projet "fstrim" est écrit en assembleur, pas en c. Il faut donc supprimer les répertoires "c" et "h" ainsi que leur contenu et les remplacer par un répertoire "asm" avec un fichier "fstrim.asm" dans le celui ci.
$ rm fstrim/c/fstrim.c fstrim/h/fstrim.h
$ rmdir fstrim/c fstrim/h
$ mkdir fstrim/asm
$ touch fstrim/asm/fstrim.asm
$
ou encore
$ rm -r fstrim/c fstrim/h
$ mkdir fstrim/asm
$ touch fstrim/asm/fstrim.asm
$
Pour chaque ligne de commande, Bash effectue 7 opérations appelées "remplacement", "développement" ou "substitution". Ces opérations sont
mkdir -p cours/cours{1,2} ?)Ces développement sont effectués dans cet ordre
Le développement des accolades
Le développement des accolades a lieu entre accolades non précédées par le signe $
{1,f5,coucou} est développé en 1 f5 coucouab{cd,ef,gh}ij est développé en abcdij abefij abghij{1..5} est développé en 1 2 3 4 5{f..j} est développé en f g h i j{f..a} est développé en f e d c b a{1..10..3} est développé en 1 4 7 10Le développement des accolades
Comment on s'en sert ?
$ mkdir -p cours/cours{1,2}
## est développé en : mkdir -p cours/cours1 cours/cours2
$ touch fichier{1..3}.{c,h}
## est développé en : touch fichier1.{c,h} fichier2.{c,h} fichier3.{c,h}
## lui même développé en : touch fichier1.c fichier1.h fichier2.c fichier2.h fichier3.c fichier3.h
Le développement du Tilde ~
$ echo ~
/home/rg
$ exit
....
login: root
password:
...
# echo ~
/root
#
Le remplacement des paramètres (variables)
unset$NomVar ou ${NomVar}Le remplacement des paramètres (variables): exemples
Exemples simples sans protection
$ var=coucou
$ echo $var
coucou
$ echo ${var}
coucou
$ echo $var2
$ echo ${var}2
coucou2
$
Exemples plus riche, avec différents types de protections
$ var=mon fichier
fichier: commande introuvable
$ echo $var
mon
$ var="mon fichier"
$ echo $var
mon fichier
$ autre_var=$var
$ echo $autre_var
mon fichier
$ autre_var='$var'
$ echo $autre_var
$var
$ autre_var="J'ai mis $var dans "\''$var'\'
$ echo $autre_var
J'ai mis mon fichier dans '$var'
$
Le développement des chemins
On utilise des caractères particuliers qui servent à décrire des pattern
Ne confondez pas le développement des chemins (qui est un développement sur des noms de fichiers existant) et celle des accolades (qui est simplement un développement texte)
Exemples
$ touch fichier{1,2}.{c,d}
$ ls
fichier1.c fichier1.d fichier2.c fichier2.d
$ rm fichier?.c
$ ls
fichier1.d fichier2.d
$ rm fichier1?.d
impossible de supprimer 'fichier1?.d'...
$
La substitution de commande
$ ls -a
. .. .bash_history .bash_logout .bashrc
$ mavar=`ls -a` #ou mavar=$(ls -a)
$ echo $mavar
. .. .bash_history .bash_logout .bashrc
$
Mais commencez par créer un répertoire de test et par le choisir comme répertoire courant...
$ mkdir test
$ cd test
$
Creez 26 dossiers portant comme nom les lettres de l'alphabet et dans chacun d'eux, 100 dossiers numérotés de 1 à 100.
$ mkdir -p {a..z}/{1..100}
$
Et détruisez les
$ rm -rf *
$
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
la clé de voûte
On connaît des programmes qui lisent des données (le bash, par exemple)
On connaît des programmes qui affichent des choses (ls par exemple)
Puisque "tout est fichier", c'est quoi les fichiers en question ?
Par défaut, le fichier d'entrée standard est relié au clavier, les fichiers de sorties et d'erreur sont liés au TTY (l'écran...)
L'ensemble de ces fichiers est appelé standard i/o ou std i/o. Leur définition est contenu (en C) dans la bibliothèque stdio.h qui sera quasi systématiquement inclus dans les programmes grace à:
#include <stdio.h>
et ne dites pas "l'écran"
$ echo Bonjour monde
Bonjour monde
$ echo Bonjour monde
Bonjour monde
$
La commande echo fait un echo sur la sortie standard de ses paramètres
Cette sortie peut être redirigé ailleurs, vers un fichier standard par exemple, avec l'opérateur ">"
$ ls
$ echo Bonjour monde >monfichier
$ ls -l monfichier
-rw-rw-r-- 1 rg rg 14 sept. 23 16:36 monfichier
$
et ne dites pas "l'écran"
on peut rediriger n'importe quel flux, y compris les i/o standard (/dev/null est un trou sans fond: c'est la poubelle d'unix)
## redirige stderr (fichier 2) vers /dev/null
$ echo coucou 2>/dev/null
coucou
## redirige stderr vers /dev/null et stdout sur stderr (donc aussi)
$ echo coucou 2>/dev/null 1>&2
$
et ne dites pas "l'écran"
cat concatène les fichiers en arguments ou sur son entrée standard avec le paramètre - et les écrits sur sa sortie standard
$ echo coucou >fichier1
$ echo toto >fichier2
$ cat fichier1 fichier2
coucou
toto
$ cat - fichier1 <fichier2
toto
coucou
$
Que fait la suite de commande
$ echo bonjour >f1
$ echo chez >f2
$ echo vous >f3
$ cat f1 f2 f3
cat écrit sur sa sortie standard, c'est à dire affiche à l'écran, le contenu concaténé de f1, f2 et f3
$ cat f1 f2 f3
bonjour
chez
vous
$
et, avec une redirection de plus :
$ cat f1 f2 f3 >f4
La même chose en écrivant le résultat dans le fichier standard "f4". Le fichier est vidé au préalable.
Avec les mêmes fichiers, que fait la commande
$ cat - f2 <f1 >>f4
Elle concatène les fichiers standard f1 et f2, et écrit le résultat à la fin du fichier standard f4 (en mode ajout)
ou comment écrire d'un programme dans un autre
cut: enlève des sections de ligne d'un fichiersort: trie les lignes d'un fichiersed: éditeur de flux en ligne de commandegrep: recherche de motif dans des fichiersuniq: affiche les lignes d'un fichier en supprimant les occurrences consécutivesUne petite préparation est nécessaire...
$ echo Bonjour monde 10 >fichier
$ echo 1 >>fichier
$ echo 2 >>fichier
$ echo 1 >>fichier
$ echo Au revoir >>fichier
$
écrit le premier champ du fichier, chaque champ étant séparé par un espace
$ cut -d ' ' -f 1 fichier
Bonjour
1
2
1
Au
$
écrit le premier champ du fichier, chaque champ étant séparé par un e
$ cut -d 'e' -f 1 fichier
Bonjour mond
1
2
1
Au r
$
trie le fichier dans l'ordre alphabétique
$ sort fichier
1
1
2
Au revoir
Bonjour monde 10
$
N'affiche que les chiffres
$ grep -o '[0-9]*' fichier
10
1
2
1
$
Affiche les lignes ne contenant que des chiffres
$ sed -ne '/^[0-9]*$/p' fichier
1
2
1
$
On vient de voir
## manipulation des répertoires
mkdir ## crée un répertoire
rmdir ## supprime un répertoire vide
cd ## change le répertoire courant
## manipulation des fichiers
touch fichier ## Met à jour l'heure de modification du fichier ou le créer
rm fichier ## supprime le lien du fichier dans le répertoire
ln source rep ## rajoute un lien (dit hard) du fichier source vers rep
cp source cible ## copie le fichier standard source sur (ou dans) cible
mv source cible ## déplace source vers cible
## interfaces de lecture
stat fichier ## écrit les métadonnées de fichier
file fichier ## affiche le type de fichier
type fichier ## affiche le type de commande
ls fichier ## liste l'argument
## les filtres
cut fichier ## enlève des sections de ligne d'un fichier
sort fichier ## trie les lignes d'un fichier
sed [reg] fichier ## éditeur de flux en ligne de commande
grep [reg] fichier ## recherche de motif dans des fichiers
uniq fichier ## affiche les lignes d'un fichier en supprimant les occurrences consécutives
N'afficher que les lignes ne contenant que des lettres et le caractère espace
$ sed -ne '/^[a-zA-Z ]*$/p' fichier
Au revoir
$
Par extension, n'afficher que le premier mot des lignes sélectionnées
$ sed -ne '/^[a-zA-Z ]*$/p' fichier | cut -d ' ' -f 1
Au
$
afficher les différents chiffres de fichier, ordonnés numériquement. Chaque chiffre ne doit apparaître qu'une fois, la sortie ne doit pas contenir les lignes ne contenant pas de chiffre
$ grep -o '[0-9]*' fichier | sort -n | uniq
1
2
10
$
nano pour écrire les scripts (enfin... les flemmards)viThe first one
vi au hasard)
$ vi script.sh
#!/bin/bash
echo "Bonjour monde"
$ nano script.sh
#!/bin/bash
echo "Bonjour monde"
$ bash script.sh
$ chmod +x script.sh
$ ls -l script.sh
-rwxr-xr-x 1 rg rg 556 4 oct. 11:46 script.sh
$ ./script.sh
$ bash <script.sh
$ source script.sh
Modifiez votre script comme suit:
#!/bin/bash
nom="$1"
prenom="$2"
echo "Bonjour $prenom $nom"
Essayez le avec: (ce n'est pas interdit de changer le nom...)
$ ./script.sh Goll Renaud
$ ./script.sh Goll Renaud
Bonjour Renaud Goll
$
Qu'en concluez vous ?
Les structures de contrôle
La structure if liste; then liste; [elif liste; then liste; ] ... [else liste]; fi
Les commandes [[ et test font appel à des primitives qui sont
-e fichier : vrai si fichier est un fichier-f fichier : vrai si fichier est un fichier standard-d fichier : vrai si fichier est un répertoire-z chaine : vrai si la longueur de chaine est nulle! primitive : inverse le résultat de primitive
#!/bin/bash
f="$1"
if [[ -z "$f" ]]; then
echo Argument non fourni >&2
exit 127
fi
if [[ -e "$f" ]]; then
echo "$f est un fichier et existe"
if [[ -f "$f" ]]; then
echo "$f est un fichier standard"
elif [[ -d "$f" ]]; then
echo "$f est un répertoire"
fi
else
echo "$f n'existe pas"
fi
Un script qui démontre qu'on peut faire n'importe quoi...
La structure de contrôle
La structure while liste1; do liste2; done
until rarement utilisée qui a la même forme, sauf que liste2 est alors répétée tant que liste1 est non nulexemple
while read ligne; do
##traitement de chaque ligne de "fichier"
done <fichier
La structure de contrôle
La structure for nom [ [in [ mot ... ] ]; ] do liste; done
exemple
for f in ./Documents/fichier{1..5}; do
echo "une ligne de plus" >>"$f"
done
La structure de contrôle
Une autre structure pour for: for (( expr1; expr2; expr3)); do liste; done
exemple
for (( i=0; i<10; i=i+1 )); do
echo "${i}eme passage"
done
## quelle est la différence avec:
for i in {0..9}; do
echo "${i}eme passage"
done
rpm -i paquet.rpmrpm -e paquetrpm -U paquetrpm -qrpm -qi paquetrpm -ql paquet rpm -qarpm -V paquetyum: Yellow dog Updater Modified
yum: Yellow dog Updater Modified
yum install paquetyum search paquetyum remove paquetyum update paquetyum updatedpkg -i paquet.debdpkg -r paquetdpkg -P paquetdpkg -I paquet.debdpkg -S /chemin/vers/fichierdpkg -ldpkg-reconfigure paquet# dpkg --get-selections >mespaquets# dpkg --set-selections <mespaquets# apt-get upgradeapt: Advanced Packaging Tool
apt: Advance Packaging Tool
apt update ## ou apt-get update sur les vieilles versionsapt install paquetapt search paquet ## ou apt-cache search paquetapt remove paquetapt upgrade ## obsoleteapt full-upgrade ## apt-get dist-upgradeapt-get -f installapt autoremovedepuis les sources
$ tar -xvzf paquet.tar.gz)cd dossierDuPaquet./configuremakemake installinstallez les paquets "sudo", "vim", "apt-transport-https", "lsb-release", "aptitude" et "build-essential" (sous-entendu: à partir des dépôts)
$ exit ## ???
...
login: root
password:
...
# apt update
...
# apt install sudo vim apt-transport-https lsb-release aptitude build-essential
...
...
# exit
...
login: monuser
password:
...
$
Don't take the name of root in vain
Mettez la machine à jour
$ exit
...
login: root
password:
...
# apt update
...
# apt full-upgrade
...
...
# apt autoremove
...
# exit
...
Il faut bien commencer quelque part
La configuration réseau se fait dans le fichier standard /etc/network/interfaces
Des fichiers additionnels peuvent être lus du dossier /etc/network/interfaces.d/* et inclus dans la configuration
Par défaut, la configuration réseau fait appel à un serveur DHCP
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens18
iface ens18 inet dhcp
Le redémarrage du réseau peut se faire avec systemctl restart networking.service
Attention aux effet de bord ! (connexion ssh entre autre)
On peut fixer une ip statique aussi
allow-hotplug ens18
iface ens18 inet static
address 192.168.5.210
netmask 24
gateway 192.168.5.1
dns-nameservers 192.168.5.1 192.168.5.2
Par ailleurs, la commande ip permet la configuration en live
ip addr add 192.168.5.210/24 dev ens18
ip route add default via 192.168.5.1
La résolution DNS se fait dans le fichier /etc/resolv.conf
domain exemple.com
search exemple.com
nameserver 192.168.5.1
nameserver 192.168.5.2
Les groupes
id est une interface de visualisation de ses informationsLes commandes de gestion
useradd permet d'ajouter un utilisateuradduser aussi ! mais de façon interactivegroupadd et addgroup ont les mêmes rôles mais pour les groupesusermod permet de modifier les comptes existantsvipwuserdel et groupdel supprime utilisateur et groupe en argumentpwck et grpck permettent de vérifier la cohérence des fichiers de gestion des utilisateurspasswd et chpasswd permettent de changer le mot de passechage, chsh, chfn permettent de gérer la validité des mots de passe, le shell ou les commentaires GECOSTP
whoami vous permet d'avoir votre nom de login, le fichier /dev/urandom génère des caractères aléatoires
$ for user in Titi Tata Toto Tutu; do \
sudo useradd -m -g users -s /bin/bash "$user"\
echo "$user:$(tr -cd 'a-zA-Z0-9' </dev/urandom | head -c 12)" >>pwd-file
done
$ sudo chpasswd <pwd-file
$ for user in Titi Tata Toto Tutu; do \
sudo chage -d 0 "$user"
done
$
TP
Changer votre login et votre répertoire de base par quelque chose qui vous correspond mieux (par exemple: prénom)
$ exit
...
login: autrelogin ## Il n'est pas possible de changer le login de l'utilisateur loggué
$ usermod --login renaud cpt01
$ mv /home/cpt01 /home/renaud
$ usermod --home /home/renaud renaud
$ exit
...
login: renaud
$
Les outils
fdisk permet la gestion des partitions physiquesparted qui peut gérer les partitions gptLes outils
$ sudo fdisk -l
# affiche les toutes les partitions du système
$ sudo fdisk /dev/vda # édite les partitions du disque /dev/vda
# ATTENTION: vous êtes sur le disque système réel
# QUITTEZ en faisant 'q'
Les outils
lvs, vgs et pgs (avec les droits root)Les outils
pvs, pvcreate, pvmove, pvremove, pvdisplayvgs, vgcreate, vgchange, vgremove, vgdisplay...lvs, lvcreate, lvchange, lvremove, lvdisplay...Les outils
mkfs. Il s'agit d'un front-end vers d'autres commandes
$ sudo mkfs [-t type] [fs-option] device
-t: permet de spécifier le FS a initialiser. Ex: ext2, ext4 ou xfsfs-option: permet de passer les options spécifiques au système de fichierdevice: le device (la partition) considéréemkfs est mkfs.ext4 qui appelle lui même mke2fsmkfs.xfs
$ mkfs -t ext4 MonFichier
initialisera un FS ext4 dans le fichier MonFichier. Celui ci pourra ensuite être montéLes outils
mount
mount [-t fstype] [-o options] device dir
-t: généralement non fourni car reconnu: ext4, xfs...-o: options du FS: par exemple ro pour ext4 (montage Read-Only, très util en cas de récupération de backupdevice: c'est le device qu'on monte. Pour une clef USB, ça pourrait être /dev/sdb. Peut être un fichier standarddir: répertoire dans lequel on va attacher l'arborescence du device. Attention, si ce répertoire n'est pas vide, son contenu va être masquéumount)À vous
$ dd if=/dev/zero of=./fichier.raw bs=100M count=1
...
$ sudo mkfs -t ext4 fichier.raw
...
$ mkdir tmp
$ sudo mount ./fichier.raw ./tmp
$ sudo chown $(whoami): ./tmp
$ mkdir ./tmp/mondossier
$ echo coucou >./tmp/mondossier/monfichier
Les outils
df permet de voir l'espace disponibledu permet de voir l'espace occupé par un répertoirefsck permet de réparer un FS (équivalent de chkdsk pour windows)dumpe2fs permet l'affichage des paramettres d'un FStune2fs est un utilitaire permettant le réglage de nombreux paramètres d'un FS ext2, 3 ou 4lsblk et blkid vous permettent de récupérer les UUID des partitionsle fichier /etc/fstab
device DossierMontage TypeFS Options FrequenceDump FrequenceFsck
/dev/vda1 / ext4 errors=remount-ro 0 1
/dev/vda2 /home xfs defaults 0 2
(désolé, j'ai pas d'image)
En tapant "démarrage" sur google, je n'ai trouvé que des images de windows 10/11 avec
"comment démarrer son pc plus vite"
Honnêtement, moi je sais...
Systemd
La commande unique permettant de gérer les services et les target est systemctl
systemctl get-default permet d'obtenir la target par défautsystemctl set-default New.Target permet de fixer la target par défautsystemctl list-dependencies multi-user.target permet de lister sous forme arborescente les dépendances d'une targetLa commande systemctl permet aussi de gérer les services et de les inscrire dans une target
systemctl status srv.service permet de connaître le statut du service srvsystemctl enable srv.service permet d'inscrire pour un démarrage automatique dans la cible courante le service srvsystemctl start srv.service permet de démarrer un servicesystemctl stop srv.service permet de stoper un servicesystemctl permet de lister tous les services et leur étatps. PAr défaut, seuls les process de l'utilisateur sont affichés
$ ps
PID TTY TIME CMD
2996 pts/0 00:00:00 bash
3133 pts/0 00:00:00 ps
top permet d'avoir une vision dynamique des process; entre autre avec leur consommation de ressourceskill. Les plus courants sont
Image par CharlesC sur wikipedia.fr, CC-BY-SA 3.0
uname et ses optionsuname -s: Le nom du noyauuname -i: la plateformeuname -r: la révision du noyauuname -a: toutes les informations disponibles
$ uname -a
Linux INFAL51 5.10.0-20-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64 GNU/Linux
$
lsmodmodinfo fournit des informations sur les modulesmodprobeImage par Altego, wikipedia.fr, CC-BY-SA
dmesg
-l, --level: permet de restreindre l'affichage au niveau demandé:
$ sudo dmesg --level=err,warn #permet de restreindre au niveau error et warning
-H: lisible par un humain.../etc/rsyslog.conf, notamment le fait de déporter les logsjournalctl permet de visualiser les logs d'un service particulierJournald est un mini ELK. Il permet notamment l'indexation des logs et donc une consultation plus rapide. Il est structurellement plus lourd que rsyslog.
Sa configuration se fait dans /etc/systemd/journald.conf
Une fois configuré, le service doit être redémarrer avec systemctl reload systemd-journald.service. Dans les première version, il fallait un redémarrage complet du service (restart à la place de reload).
journalctl est la commande qui permet de manipuler les logs. Il utilise less comme pager.
journalctl -n 20 affiche les 20 dernières lignes, de la plus vieille à la plus récente.journalctl -f (follow) affiche les lignes en continue (c'est l'équivalent de tail -f)journalctl --no-pager permet d'utiliser journalctl avec des filtres (comme grep, par exemple).Le rand avantage de journald par rapport à syslog est sa possibilité de filtrer les logs par service
journalctl -u service permet de lister les logs d'un service particulier.journalctl --list-boots permet de lister les démarrages de la machineComme pour rsyslog, les logs peuvent être centralisés.
/etc/network/interfaces: c'est la config réseau du systèmeip est la commande de gestion des interfaces réseauip addr show ou ip link showip addr set 192.168.0.24/24 dev enp58s0f1 ?netcat est le couteau suisse de l'administrateur réseaunetrw et netsed