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. ↩︎