s/culture-unix/gnu-linux-initiation/
This commit is contained in:
parent
a2926df93e
commit
17859ee616
|
@ -1,48 +1,140 @@
|
|||
# Le terminal et le shell
|
||||
# GNU/Linux avec Debian
|
||||
|
||||
## Le vocabulaire
|
||||
## Présenté
|
||||
|
||||
Expliquer le vocabulaire : shell, terminal, émulateur de terminal,
|
||||
tout en autaurisant les abus de langages (si un élève parle de
|
||||
terminal au lieu de shell ou vice-versa, aucun souci, on le fait
|
||||
tous).
|
||||
par
|
||||
|
||||
Pour le rôle du terminal, donner en exemple :
|
||||
Julien Palard <julien@palard.fr>
|
||||
|
||||
=> https://mdk.fr/blog/how-apt-does-its-fancy-progress-bar.html
|
||||
https://mdk.fr
|
||||
|
||||
Pour le rôle du shell, donner en exemple l'auto-complétion de bash.
|
||||
::: notes
|
||||
|
||||
Expliquer le vocabulaire *commande*, *programme*, *argument* :
|
||||
|
||||
C'est très flou, pour un débutant, que lorsqu'il tape `ls /`, `ls` est
|
||||
un programme, `/` et un argument, je pense que dans les yeux du
|
||||
débutant ce sont « deux trucs qui vont bien ensemble ». Pour
|
||||
approfondir un peu plus on peut doucement discerner builtin et
|
||||
programme.
|
||||
Introduce yourself!
|
||||
|
||||
|
||||
## La philosophie Unix
|
||||
# Avant de commencer
|
||||
|
||||
### Write programs that do one thing and do it well.
|
||||
## Qui utilise GNU/Linux ?
|
||||
|
||||
Environ 3000 programmes différents dans mon dossier `/bin` sur une
|
||||
Debian, heureusement leur utilisation suit une loi de Ziph :
|
||||
- 500 des 500 plus gros supercalculateurs,
|
||||
- 80% des serveurs exposés sur Internet,
|
||||
- 42% des clients accédant à Internet,
|
||||
- les télévisions, montres, voitures, l'ISS,
|
||||
- Google, Amazon, Facebook, Apple, Wikipedia,
|
||||
- la gendarmerie, le parlement, le ministère de l'agriculture…
|
||||
|
||||
$ history | awk '{print $2}' | sort | uniq -c | sort -gr
|
||||
1088 git
|
||||
634 fg
|
||||
317 cd
|
||||
293 emacs
|
||||
239 ls
|
||||
201 python
|
||||
119 ssh
|
||||
113 flake8
|
||||
104 curl
|
||||
...
|
||||
|
||||
L'idée ici est de réutiliser le code au maximum, un exemple typique :
|
||||
la recherche dans un fichier.
|
||||
# Les environnements de bureau
|
||||
|
||||
## KDE
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/d/d9/KDE_1.0.png" style="width: 80%"/>
|
||||
|
||||
## KDE
|
||||
|
||||
![](https://upload.wikimedia.org/wikipedia/commons/a/a9/KDE_Plasma_5.16.png)
|
||||
|
||||
## GNOME
|
||||
|
||||
<video controls=1 src="https://static.gnome.org/release/42/appearance.webm"/>
|
||||
|
||||
## Phosh
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/6/6f/Phosh_on_PinePhone.png" style="width: 30%"/>
|
||||
|
||||
|
||||
# Le shell
|
||||
|
||||
![](static/shell.png)
|
||||
|
||||
## Les commandes
|
||||
|
||||
On exécute des « commandes » ou des « programmes ».
|
||||
|
||||
Ces programmes peuvent prendre des « arguments » ou des « paramètres ».
|
||||
|
||||
|
||||
## Le shell
|
||||
|
||||
Dans :
|
||||
|
||||
```bash
|
||||
$ date
|
||||
```
|
||||
|
||||
- `$ ` est « le prompt », il n'est pas éditable.
|
||||
- `date` est un programme.
|
||||
|
||||
notes:
|
||||
|
||||
Oui le prompt est modifiable, je veux dire qu'on ne peut pas l'effacer
|
||||
avec backspace.
|
||||
|
||||
|
||||
## Le shell
|
||||
|
||||
Dans :
|
||||
|
||||
```bash
|
||||
$ man intro
|
||||
```
|
||||
|
||||
- `man` est un programme.
|
||||
- `intro` est un `argument` qui lui est donné.
|
||||
|
||||
|
||||
## Le shell
|
||||
|
||||
Mais pourquoi !?
|
||||
|
||||
|
||||
## Le shell
|
||||
|
||||
- C'est plus rapide.
|
||||
- Ça permet de faire collaborer plusieurs programmes.
|
||||
- C'est à la portée de tout développeur d'ajouter un programme en quelques minutes.
|
||||
|
||||
|
||||
## C'est plus rapide
|
||||
|
||||
- Dû à la simplicité de l'interface.
|
||||
- L'auto-complétion des commandes et parfois de leurs arguments.
|
||||
- Les raccourcis claviers.
|
||||
- La quantité de programmes disponnibles (~4500 chez moi, là).
|
||||
|
||||
notes: démo ! Ctrl-r !
|
||||
|
||||
|
||||
## Kit de survie
|
||||
|
||||
- `pwd`
|
||||
- `cd`
|
||||
- `ls`
|
||||
- `cp`, `mv`
|
||||
- `rm`
|
||||
- `mkdir`
|
||||
|
||||
notes: Il n'y a pas de corbeille !
|
||||
|
||||
|
||||
## Kit de survie
|
||||
|
||||
- `less`, `see`, `edit`
|
||||
- `man`
|
||||
- `grep`
|
||||
- `find`
|
||||
|
||||
|
||||
# La philosophie Unix
|
||||
|
||||
> Write programs that do one thing and do it well.
|
||||
|
||||
Notes:
|
||||
|
||||
L'idée ici est d'éviter de dupliquer du code. Ne l'écrire qu'une fois, mais bien.
|
||||
|
||||
Un exemple typique : la recherche dans un fichier.
|
||||
|
||||
Dans un contexte unix, un seul outil sert à chercher du texte dans un fichier : `grep`.
|
||||
|
||||
|
@ -62,8 +154,11 @@ C'est de nombreuses heures de perdues, à réimplémenter inlassablement
|
|||
la même fonctionalité.
|
||||
|
||||
|
||||
### Write programs to work together.
|
||||
## La philosophie Unix
|
||||
|
||||
> Write programs to work together.
|
||||
|
||||
notes:
|
||||
Pour pouvoir réutiliser un programme il faut qu'il s'interface
|
||||
correctement avec les autres :
|
||||
|
||||
|
@ -71,8 +166,11 @@ correctement avec les autres :
|
|||
- Un programme doit comprendre facilement le dialecte d'un autre.
|
||||
|
||||
|
||||
### Write programs to handle text streams, because that is a universal interface.
|
||||
## La philosophie Unix
|
||||
|
||||
> Write programs to handle text streams, because that is a universal interface.
|
||||
|
||||
notes:
|
||||
Parler de l'omniprésence du texte brut (de Markdown à HTTP/1.1 en
|
||||
passant par les fichiers source), en opposition aux formats binaires
|
||||
(sortis d'éditeurs comme Word, ...). (Je ne veux plus voir des
|
||||
|
@ -82,84 +180,172 @@ code.)
|
|||
Digrésser sur Markdown et reStructuredText, mentionner groff.
|
||||
|
||||
|
||||
### Everything is a file.
|
||||
# Le shell, démos
|
||||
|
||||
Un disque dur est un fichier, une clef USB est un fichier, ma batterie
|
||||
est un fichier, ma souris est un fichier...
|
||||
Voici les programmes que j'utilise le plus :
|
||||
|
||||
$ history | awk '{print $2}' | sort | uniq -c | sort -gr
|
||||
3408 git
|
||||
902 cd
|
||||
765 python
|
||||
539 ls
|
||||
385 emacs
|
||||
330 curl
|
||||
327 ssh
|
||||
291 make
|
||||
209 mv
|
||||
188 rm
|
||||
...
|
||||
|
||||
|
||||
### Philosophie UNIX
|
||||
## Démo
|
||||
|
||||
C'est le moment de commencer les démos et explications des commandes
|
||||
élémentaires qui sont l'implémentation de la philosophie UNIX :
|
||||
Pour jouer un peu avec le shell, on va utiliser [Open Food
|
||||
Facts](https://www.data.gouv.fr/fr/datasets/open-food-facts-produits-alimentaires-ingredients-nutrition-labels/#resource-164c9e57-32a7-4f5b-8891-26af10f91072).
|
||||
|
||||
- pwd
|
||||
- cd
|
||||
- ls
|
||||
- cp, mv
|
||||
- rm (leur rappeler qu'il n'y a pas de « corbeille »)
|
||||
- mkdir (et rmdir)
|
||||
- less (leur apprendre à *q*uitter ! Rien n'est pas une évidence.)
|
||||
- man (`man intro`, `man man`, `man ls`, `man cp`, ...)
|
||||
- l'historique (`history`, pavé directionnel, ctrl-r, ça suffit pour le moment)
|
||||
- grep
|
||||
- find
|
||||
C'est un fichier de produits alimentaires.
|
||||
|
||||
Pour faire des exemples, on peut par exemple utiliser
|
||||
[fr.openfoodfacts.org.products.csv](https://www.data.gouv.fr/fr/datasets/open-food-facts-produits-alimentaires-ingredients-nutrition-labels/#resource-164c9e57-32a7-4f5b-8891-26af10f91072).
|
||||
|
||||
## Démo
|
||||
|
||||
Téléchargeons et décompressons le fichier :
|
||||
|
||||
```bash
|
||||
$ wc -l fr.openfoodfacts.org.products.csv
|
||||
1486053 fr.openfoodfacts.org.products.csv
|
||||
$ curl -O https://fr.openfoodfacts.org/data/fr.openfoodfacts.org.products.csv.gz
|
||||
$ gunzip fr.openfoodfacts.org.products.csv.gz
|
||||
$ mv fr.openfoodfacts.org.products.csv products.csv
|
||||
```
|
||||
|
||||
$ file fr.openfoodfacts.org.products.csv
|
||||
fr.openfoodfacts.org.products.csv: UTF-8 Unicode text, with very long lines
|
||||
Attention, compressé il fait ~700M, décompressé ~8GB.
|
||||
|
||||
$ less fr.openfoodfacts.org.products.csv
|
||||
|
||||
$ head fr.openfoodfacts.org.products.csv
|
||||
## Démo
|
||||
|
||||
Peser le fichier :
|
||||
|
||||
```bash
|
||||
$ du -h products.csv
|
||||
7.8G products.csv
|
||||
```
|
||||
|
||||
|
||||
## Démo
|
||||
|
||||
Compter les lignes :
|
||||
|
||||
```bash
|
||||
$ wc -l products.csv
|
||||
2864834 products.csv
|
||||
```
|
||||
|
||||
|
||||
## Démo
|
||||
|
||||
Obtenir des informations sur le contenu du fichier :
|
||||
|
||||
```bash
|
||||
$ file products.csv
|
||||
products.csv: UTF-8 Unicode text,
|
||||
with very long lines
|
||||
```
|
||||
|
||||
|
||||
## Démo
|
||||
|
||||
Lire le fichier :
|
||||
|
||||
```bash
|
||||
$ less products.csv
|
||||
```
|
||||
|
||||
Attention le fichier est gigantesque !
|
||||
|
||||
|
||||
## Démo
|
||||
|
||||
Obtenir les 10 premières lignes du fichier :
|
||||
|
||||
```bash
|
||||
$ head products.csv
|
||||
code url creator created_t created_datetime ... ...
|
||||
00000000000000225 http://world-fr.openfoodfacts.org/produit/00000000000000225/jeunes-pousses-endives...
|
||||
0000000000000207025004 http://world-fr.openfoodfacts.org/produit/0000000000000207025004/andre...
|
||||
...
|
||||
|
||||
# Les noms des colonnes
|
||||
$ head -n 1 fr.openfoodfacts.org.products.csv | tr '\t' '\n'
|
||||
|
||||
$ grep --color E431 fr.openfoodfacts.org.products.csv
|
||||
...
|
||||
|
||||
$ grep --color E431 fr.openfoodfacts.org.products.csv | wc -l
|
||||
5
|
||||
|
||||
$ grep --color E100 fr.openfoodfacts.org.products.csv | wc -l
|
||||
5733
|
||||
|
||||
$ grep -oE 'E[0-9]{3}' fr.openfoodfacts.org.products.csv | sort | uniq -c | sort -gr | head
|
||||
167170 E322
|
||||
132029 E330
|
||||
79081 E500
|
||||
54024 E160
|
||||
50842 E415
|
||||
47528 E471
|
||||
44851 E450
|
||||
39896 E150
|
||||
39629 E202
|
||||
38945 E412
|
||||
|
||||
# Les marques les plus / les moins représentée
|
||||
$ cut -f14 fr.openfoodfacts.org.products.csv | sort | uniq -c | sort -gr | head
|
||||
660855
|
||||
13160 Carrefour
|
||||
10902 Auchan
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
Ou faire quelques exemples simples, par exemple sur un fichier README
|
||||
afficher les titres:
|
||||
|
||||
grep '^#' README.md
|
||||
## Les noms des colonnes
|
||||
|
||||
|
||||
## ssh
|
||||
```bash
|
||||
$ head -n 1 products.csv | tr '\t' '\n'
|
||||
code
|
||||
url
|
||||
creator
|
||||
created_t
|
||||
created_datetime
|
||||
```
|
||||
|
||||
## Le nombre de colonnes
|
||||
|
||||
```bash
|
||||
$ head -n 1 products.csv |
|
||||
> tr '\t' '\n' | wc -l
|
||||
201
|
||||
```
|
||||
|
||||
Parmis les colonnes je repère `additives`...
|
||||
|
||||
|
||||
## Les numéros des colonnes
|
||||
|
||||
```bash
|
||||
$ head -n 1 products.csv |
|
||||
> tr '\t' '\n'| grep -n additives
|
||||
51:additives_n
|
||||
52:additives
|
||||
53:additives_tags
|
||||
54:additives_fr
|
||||
```
|
||||
|
||||
## Les additifs
|
||||
|
||||
```bash
|
||||
cut -f 51-54 products.csv | less
|
||||
```
|
||||
|
||||
Je repère « E412 », je me demande si beaucoup de produits l'utilisent…
|
||||
|
||||
## Les additifs
|
||||
|
||||
```bash
|
||||
$ cut -f 51-54 products.csv |
|
||||
> grep -c E412
|
||||
44554
|
||||
```
|
||||
|
||||
Je me demande quel est l'additif le plus utilisé…
|
||||
|
||||
|
||||
## Les additifs
|
||||
|
||||
```bash
|
||||
$ cut -f 51-54 products.csv |
|
||||
> grep -oE 'E[0-9]{3}' | sort | uniq -c | sort -gr | head
|
||||
196667 E322
|
||||
153420 E330
|
||||
114926 E500
|
||||
61884 E160
|
||||
56411 E415
|
||||
54712 E450
|
||||
49713 E471
|
||||
44554 E412
|
||||
44121 E202
|
||||
42398 E150
|
||||
```
|
||||
|
||||
|
||||
# ssh
|
||||
|
||||
SSH: Parler de clefs, conseiller ED25519
|
||||
|
Loading…
Reference in New Issue