L'objectif de ce document est de vous faire découvrir par la pratique *les supers pouvoirs de la ligne de commande* (ce qui impliquent...).
Ainsi, vous saurez dialoguer avec le sytème d'exploitation, l'OS, de votre machine, sans recourir à une interface graphique, en mode console textuelle comme au temps de premiers ordinateurs. Mais figurez-vous que ceci n'appartient pas qu'à l'ère des "ordinosaures", bien au contraire...
Pour débuter vous allez mener les activités suivantes dans vos environnements usuels :
a-Shell mini
et iSH Shell
depuis la "bibliothèque d'applications élèves" et les démarrer ;Cortana
rechercher l'application Ubuntu
et la démarrer ;Cela à pour effet d'ouvrir une fenêtre qui émule un Terminal sur votre écran ;
Le caractère $
s'appelle un prompt, c'est-à-dire une invitation à entrer au clavier une commande système dans le Terminal.
uname
Le programme qui interprète les instructions de commandes système est appelé shell
Il existe une grande variété de shells comme sh, bash, dash, ksh, csh..., pour les systèmes de type UNIX ;
Notre serveur JupyterHub est installé sur une distribution Ubuntu Server, c'est un système d'exploitation de type GNU/Linux, aussi, le shell par défaut est donc le bash.
Les instructions de commandes de a-Shell mini sont un portage spécifique de commandes Unix pour iOS et sont volontairement réduites (mais extensibles). Le système d'exploitation installé sur votre iPad se nomme Darwin, aussi a-Shell utilise la version BSD : il y a donc des petites différences dans les options et le comportement des commandes par rapport au bash du projet GNU...
Malgré quelques légères variations d'un OS à l'autre, les instructions de commandes pour les systèmes de type UNIX sont restées les mêmes depuis les années 1960 et elles fonctionnent aussi bien sous Linux et Mac OS X que maintenant sous Windows 10 avec PowerShell et Windows Subsystem for Linux, WSL. Ainsi donc, l'apprentissage que vous allez faire ici est portable et sera très certainement durable...
Les instructions de commandes système s'écrivent donc dans un terminal après une invite et ont la forme suivante :
nom_de_la_commande -option(s) attribut(s)
Par exemple, depuis le serveur du lycée, on peut utiliser de telles commandes :
wget URL_du_fichier
;git clone URL_du_depot.git
.Pour connaitre votre OS, saisir successivement sur iPad, PC et serveur, les instructions :
uname
qui renvoie le nom du système d'exploitation de la machine ;uname -n
qui renvoie le nom de la machine ;uname -a
qui complète avec d'autres informations concernant la version de l'OS et le hardware de la machine...et relever les différences :
...
auto-complétion : après avoir tapé les premiers caractères, il est possible d'appuyer sur la touche Tab
qui permet d'ajouter la suite de la commande, du nom du répertoire ou du fichier. Cela évite les erreurs de frappe et est très appréciable pour éviter de saisir le nom de fichier parfois long et complexe comme le nom de certain paquet. Peut être utilisé plusieurs fois si plusieurs noms ont une partie commune. Attention, c'est sensible à la casse !
historique de commande : les flèches haut et bas permettent de rappeler des anciennes commandes ; Pour la petite histoire, c'est Bill GATES qui a codé ces touches UNIX quand il était étudiant...
Sur iPad, Nicolas Holzschuch, le développeur de a-Shell mini, a ajouté, comme dans iSH Shell
, un bandeau en bas de l'application avec des bouton qui assurent, entre autres, les fonctions d'auto-complétion et d'historique de commande.
Nicolas Holzschuch est Directeur de recherche à l’INRIA de Grenoble-Rhône-Alpes : https://maverick.inria.fr/Members/Nicolas.Holzschuch/, c'est également lui qui développe l'application Carnets.
Pour aller plus avant, la suite de ce notebook présente d'autres commmandes de base à expérimenter dans un terminal...
A mesure que vous explorez ce bloc-note et que vous pratiquez la ligne de commande, compléter le tableau suivant pour établir votre synthèse des principales instructions à retenir :
Commande | Option | Paramètre | Action |
---|---|---|---|
uname | ... | ... | ... |
... | ... | ... | ... |
pwd
Cette instruction permet de répondre à la question : où suis-je dans l'arborescence des dossiers ?
Le symbole
~
est donc un raccourci pour désigner le dossier personnel de l'utilisateur ; de même les symboles.
et..
désignent respectivement le dossier courant et le dossier parent.
Sur votre iPad, l'application a-Shell mini, comme chaque application, a son propre dossier
~
, tel queprivate/var/mobile/Containers/Data/Application/1C49F07A-C30F-45E7-ADFD-8C350D68641A
, et par défaut à l'ouverture d'une fenêtre de terminal a-Shell, le dossier courant est~/Documents
whoami
Cette instruction permet de répondre à la question : ...
Au fur et à mesure que vous exécutérez les instructions de commande suivantes, observez leur effet sur le serveur JupyterHub dans l'onglet
Home Page
et sur votre iPad avec l'application Fichiers dans le dossier a-Shell mini et ajouter vos propres commentaires d'observation...
mkdir monDossier
touch monFichierMarkdown.md
Si le fichier existe déjà, la commande
touch
actualise le timestamp (l'horadatage) d'accès au fichier.
echo "Salut le monde" > monFichierTexte.txt
echo
est équivalent à unprint()
en python ; ainsiecho "Salut le monde"
affiche en console le messageSalut le monde
.
Le symbole
>
fait une redirection du flux ; ainsi, avec la commandeecho "Salut le monde" > monFichierTexte.txt
, la valeur renvoyée parecho "Salut le monde"
est inscrite dans le fichiermonFichierTexte.txt
qui est créé s'il n'existe pas préalablement.
cat monFichierTexte.txt
cat
est la contraction en anglais de catenate c'est à dire concaténer...
less monFichierTexte.txt # touche "Q" pour quitter l'affichage et revenir au prompt
Observer et expliquer ce que produisent les instruction suivantes :
cat monFichierTexte.txt > monAutreFichierTexte.txt cat monAutreFichierTexte.txt
> ...
> **Observer** et **expliquer** la différence entre les deux séquences d'instructions suivantes :
> ```bash
echo "Hello world" > monFichierTexte.txt
cat monFichierTexte.txt
et :
echo "Demat d'an holl" >> monFichierTexte.txt cat monFichierTexte.txt
> ...
> **Observer** et **expliquer** ce que produit l'instruction suivante :
> ```bash
cat monAutreFichierTexte.txt monFichierTexte.txt > monFichierMarkdown.md
cat monFichierMarkdown.md
...
cowsay 'Bonjour'
Décrire ce que produit l'instruction
cowsay
: ....
Observer ce que produit l'instruction suivante sachant que le symbole
|
, pipe en Anglais, permet de relier le flux de sortie d'une commande au flux d'entrée d'une autre : ...
cat monAutreFichierTexte.txt | cowsay -p -T 'U '
> ...
> **Expliquer** alors ce que produit l'instruction suivante en précisant que permet le symbole `;` :
> ```bash
cat monFichierMarkdown.md | cowsay > monFichierTexte.txt ; less monFichierTexte.txt
...
mv monFichierTexte.txt /home/jupyter-prenom/monDossier/ # Sur le serveur, remplacer "prenom" par votre nom d'utilisateur
mv monFichierTexte.txt monDossier/ # Sur iPad
- Commentez pour la destination s'il s'agit d'un chemin absolu ou relatif ;
- Pensez à rafraichir l'affichage dans Fichiers sur iPad comme dans l'onglet
Home Page
sur le serveur.
Remarque :
mv monFichierTexte.txt monDossier/toto.txt
permet de déplacer le fichier tout en le renommant.
cp monFichierMarkdown.md monDossier/ # Sur le serveur
cp monFichierMarkdown.md ~/Documents/monDossier/ # Sur iPad
cd monDossier
Quelle commande permet de vérifier ce changement ?
...
# pour vérifier...
cp monFichierTexte.txt monFichierTexteBis.txt
ls
ls -a
ls -l
ls -al
ls ..
cd /
ls *
cd
ls *
clear
rm monFichierMarkdown.md
rmdir
permet de supprimer un dossier seulement s'il est vide
rm -rf monDossier
rm --help
man rm # touche "Q" pour quitterhelp
help
curl wttr.in/morlaix
curl --head http://api.si.lycee.ecmorlaix.fr/APprentissageHtmlCss/
curl http://api.si.lycee.ecmorlaix.fr/APprentissageHtmlCss/ > maPage.html
curl -O http://api.si.lycee.ecmorlaix.fr/APprentissageHtmlCss/zip/hyperliens.zip
curl -o monNotebookTerminal.ipynb https://raw.githubusercontent.com/ericECmorlaix/1NSI_2021-2022/main/docs/ipycanvas-Le_BN_pour_dessiner.ipynb
Sur iPad, la commande
unzip
n'est pas disponible de base dans a-Shell mini mais il est possible de l'y ajouter comme d'autres commandes à partir de la page https://github.com/holzschu/a-Shell-commands.Pour ce faire il faut créer un dossier nommé
bin
dans le dossier~/Documents/
; Puis télécharger et déplacer le fichier correspondant à la commande souhaitée dans le dossier~/Documents/bin
.Il est alors possible de l'utiliser comme sur le serveur :
unzip hyperliens.zip
Sur iPad, il faut préalablement ajouter la commande
zip
dans le dossier~/Documents/bin
zip -r monZip.zip monDossier # Compresse tout le contenu de monDossier dans un fichier monZip.zip
Renseigner vous avec le manuel et l'aide quant aux options des commandes date
et cowsay
pour créer un fichier contenant :
code
___________________________
< Nous sommes le 06/01/2021 >
---------------------------
\ / \ //\
\ |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
Pour vous entrainer en ligne de commande, résolvez ce jeu de piste : http://luffah.xyz/bidules/Terminus/
compléter votre tableau des commandes utilisées et réaliser un plan au fur et à mesure de votre quête...
Pour de nombreuses commandes, il est souvent utile de faire appel à des méta-caractères :
*
qui remplace un ou plusieurs caractères (ou même aucun !) ;?
pour ne remplacer qu'un caractère ;\
(anti-slash) devant. Cela évite au caractère d' être interprété par le shell. Il l'affiche seulement.find
:¶find */*.ipynb
grep
:¶Rechercher ce que permet grep. Voici un exemple simple :
curl -O https://www.gutenberg.org/files/2650/2650-0.txt
grep Title 2650-0.txt
grep Author 2650-0.txt
grep -n madeleine 2650-0.txt
Contenus | Capacités attendues | Commentaires |
---|---|---|
Systèmes d’exploitation. | Identifier les fonctions d’un système d’exploitation. Utiliser les commandes de base en ligne de commande. Gérer les droits et permissions d’accès aux fichiers. |
Les différences entre systèmes d’exploitation libres et propriétaires sont évoquées. Les élèves utilisent un système d’exploitation libre. Il ne s’agit pas d’une étude théorique des systèmes d’exploitation. |
A noter qu'on peut également écrire des commandes système dans et les exécuter depuis une cellule de code ipython mais dans ce cas il faut les faire précéder d'un
!
.
# Code à tester dans un notebook sur le serveur ou dans l'interpréteur ipython d'a-Shell mini sur votre iPad
def Lister_le_contenu_de_ce_dossier():
liste_du_contenu = !ls
return liste_du_contenu
Lister_le_contenu_de_ce_dossier()
L'ajout de logiciels supplémentaires dans un OS Linux peut se faire en ligne de commande en installant un ou plusieurs paquets.
Sous Ubuntu, comme pour les distibutions basés sur Debian, l'installation d'un paquet en ligne de commande se fait depuis un dépot APT, Advanced Packaging Tool, avec la commande apt
. Pour cela, il est nécessaire d'otenir les droits d'administration avec la commande sudo
:
sudo apt update
pour mettre à jour la liste des paquets ;sudo apt search un_paquet
pour rechercher un paquet ;sudo apt install le_paquet
pour installer le paquet... ;iSH utilise Alpine Package Manager :
apk update
pour mettre à jour ;apk search un_paquet
pour rechercher un paquet ;apk add le_paquet
, pour installer le paquet...exemple pour python :
apk search python
pour rechercher un paquet python ;apk add python3
pour installer le paquet python3.et encore :
apk add py3-pip
pour installer pip afin de gérer l'installation d'autres modules pour Python ;apk add curl
pour télécharger depuis une URL web ;apk add git
pour pouvoir piloter un dossier depuis GitHub...Une application sympathique à faire sur une Raspberry Pi : https://projects.raspberrypi.org/en/projects/pacman-terminal
https://doc.ubuntu-fr.org/tutoriel/console_ligne_de_commande
https://linux.goffinet.org/administration/le-shell/la-ligne-de-commande/
Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Pour toute question, suggestion ou commentaire : eric.madec@ecmorlaix.fr