Terminal
On donne ici une description de quelques outils utiles au terminal. Beaucoup de ces outils sont propres à un environnement *nix (macOS, linux, etc.)
ssh
Utilitaire de connexion sécurisée au terminal d’une machine distante.
SSH est un protocole qui permet de se connecter de manière sécurisée à distance au terminal d’une autre machine, par exemple celles de la grappe de calcul. La plupart des systèmes d’exploitation disposent d’emblée d’une application (normalement appelée ssh
elle aussi) qui permet la connexion.
Pour se connecter:
ssh <adresse>
On peut aussi enregistrer ses informations de connexion dans la machine distante afin de ne pas avoir à entrer son nom d’utilisateur/mot de passe à chaque fois. Sur sa propre machine, si l’exécution de
ls -al ~/.ssh/id_*.pub
retourne No such file or directory
ou similaire, on se génère une clé RSA avec
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
puis on copie ses informations de connexion sur la machine distante via
ssh-copy-id remote_username@server_ip_address
git
Utilitaire de contrôle de version pour codes & documents.
Git est un système de contrôle de version qui permet de gérer les différentes versions (passées, ou alternatives) d’un code, et qui peut agir en même temps comme copie de sauvegarde1. On l’utilise fréquemment avec des services comme Github ou Bitbucket, qui agissent comme serveur distant sur lesquels les dépôts locaux sont sauvegardés. La plupart des systèmes d’exploitation possèdent d’entrée de jeu une version de git
.
Un “dépôt” git est simplement un répertoire qui contient un sous-répertoire nommé .git
contenant la configuration du dépôt et les méta-données (historique, etc.) On peut créer un dépôt dans un dossier en faisant:
git init
puis en ajoutant des fichiers au dépôt via
git add <fichiers>
git commit -m '<message de mise à jour>'
git branch -M main
git remote add origin <repo-url>
git push -u origin main
où <repo-url>
correspond à l’adresse d’un dépôt distant (Github, etc.) que l’on aura précédemment créé.
Chaque fois qu’une modification substantielle doit être sauvegardée (e.g.: vous avez terminé de programmer une fonction importante d’un code), il suffit de git add
les fichiers, entrer un message de mise à jour via git commit
puis de pousser les changements sur le serveur via git push
.
À l’inverse, pour créer une copie locale d’un dépôt distant, on fait
git clone <adresse du dépôt>
Pour voir l’historique de mise à jour d’un dépôt, on peut faire
git log
On peut se servir de git pour suivre les mises à jour d’un code (peu importe le langage de programmation), et même pour sauvegarder/suivre les changements d’un document latex. Un dépôt peut comporter n’importe quel type de fichier, dans la mesure où celui-ci respecte les limites de stockage du serveur.

parallel
Utilitaire de parallélisation de processus, tant en local que sur une machine distante.
GNU Parallel est une application qui permet de lancer des processus simultanément sur une machine (local ou distante, via SSH), de manière automatisée, et en permettant une grande flexibilité.
Un exemple de situation où parallel
est très utile: lancer une série de processus de calcul sur la grappe du groupe de recherche.
Par exemple, on peut se servir d’une commande telle
parallel --env PATH --workdir . --sshloginfile ~/cluster_hosts.txt --sshdelay 0.1 --bar $@
pour lancer une série de processus sur la liste de serveurs contenue dans le fichier cluster_hosts.txt
.

curl et wget
Utilitaires de requêtes web.
curl
et wget
permettent respectivement d’afficher dans le terminal et de télécharger des pages web (ou fichiers) présents sur un serveur. Ils sont normalement présents sur une machine *nix sans besoin d’être installés.
Par exemple,
curl www.google.com
affiche le contenu de la page dans le terminal, tandis que
wget www.google.com
télécharge le fichier index.html
du serveur.

imgcat
Utilitaire d’affichage d’images dans le terminal.
imgcat est un package Python qui peut aussi être directement appelé via la ligne de commande. Il sert à afficher des images (png
, etc. mais aussi pdf
) via le terminal. Très pratique e.g. lorsqu’on se connecte à distance sur une machine.
Par exemple,
imgcat test.png
imgcat test.pdf
affiche les fichiers test.png
et test.pdf
.

tar, gzip et (un)zip
Utilitaire d’archivage et de compression de fichiers.
Présents d’emblée sur les systèmes *nix, tar
et (un)zip
permettent de créer des archives (de dossiers, fichiers) ou d’extraire les fichiers y étant contenus. La commande zip
crée un fichier compressé “zip”, tandis que la commande tar
ne crée qu’une archive (qui n’est pas compressée). On peut aussi compresser une archive tar
avec la commande gzip
afin de créer une archive .tar.gz
compressée.
Pour créer un fichier zip,
zip -r <file.zip> <folder> -x <exclude>
et pour le décompresser,
unzip <file.zip>
Pour créer une archive tar,
tar cf <file.tar> <files>
et pour en extraire les fichiers,
tar xf <file.tar>
Finalement, pour compresser une archive tar avec gzip
,
gzip <file>
et pour la décompresser,
gzip -d <file.gz>

brew
Gestionnaire d’applications sous macOS.
Brew est un gestionnaire d’applications pour macOS (similaire à yum
et autres sous linux) qui contient une grande quantité d’outils.
Par exemple, pour installer emacs
on peut faire
brew install emacs

emacs
Éditeur texte.
Emacs est l’un des grand-pères du “Notepad” traditionnel en fonctionne dans le terminal. Normalement présent d’emblée sur les postes *nix, il peut aussi être mis à jour (puisqu’il est toujours activement développé).
Deux avantages importants de emacs
:
- il s’exécute via le terminal, donc possible de travailler à distance (e.g. via
ssh
) facilement - il possède d’innombrables raccourcis clavier (qui sont personnalisables), ce qui permet d’accélérer beaucoup l’édition de fichiers

vi
Éditeur texte.
vi
est le frère d’emacs
, et permet également d’éditer rapidement des fichiers textes. Choisir entre emacs
et vi
est une question de préférence personnelle (mais emacs
est définitivement supérieur).
Présent également d’emblée sur les postes *nix.

time
Utilitaire de calcul du temps d’exécution d’une commande.
Permet de mesurer le temps d’exécution d’une commande.
e.g.
time ls -R . > /dev/null
retourne quelque chose comme
ls -R . > /dev/null 4.44s user 5.10s system 62% cpu 15.152 total
Le temps total
est le temps “réel” pris par la commande pour être utilisée (ici, 15.152 sec)

-
Généralement pour des fichiers texte (e.g. code source). Git ne prend pas en charge les fichiers volumineux, donc ce n’est pas à proprement parler une application de sauvegarde. ↩︎