DevOps - Ma liste d'outils en ligne de commande indispensables
Publié le : 2 octobre 2022 | Mis à jour le : 27 juin 2023Je vous propose sur ce billet la liste de tous les outils Linux que je juge indispensables. Ces outils sont principalement utilisés depuis la ligne de commande shell.
Comme d’habitude ce billet va évoluer au fil de mes découvertes, donc revenez de temps en temps
Table des matières
Introduction
Pourquoi est-ce-que je les trouve indispensables ? Pour ces deux raisons :
- Il améliore grandement la productivité
- Et je n’arrive plus à m’en passer.
Certains vont dire, oui, mais du coup tu finis par oublier la syntaxe des commandes de base. Eh bien, non, car sur les environnements de production, je n’installe pas ces outils. En effet j’applique un grand principe : on ne doit trouver sur les machines de production que les paquets nécessaires au fonctionnement des applications qui y sont hébergées. Je trouve criminel de retrouver sur ces machines des outils tels que nmap, tcpdump, … La raison est simple, si un hacker arrive à s’y introduire ne lui offrez pas tout ce qu’il faut pour qu’il prenne le contrôle de toute votre infrastructure informatique. Oups désolé pour ma sortie de route.
Aide en ligne
tldr
TlDR, pour Trop Long Pas Lu, est une commande permettant d’afficher des aides sur les principales commandes en ligne des OS Linux, Windows et macOS. Bien plus simple à lire que les man pages.
tldr tar
tar
Utilitaire d'archivage.
Souvent combiné avec une méthode de compression, telle que gzip ou bzip2.
Plus d'informations : https://www.gnu.org/software/tar.
- Crée une archive à partir de fichiers :
tar cf cible.tar fichier1 fichier2 fichier3
- Crée une archive gzip :
tar czf cible.tar.gz fichier1 fichier2 fichier3
- Extrait une archive (compressée) dans le dossier courant :
tar xf source.tar[.gz|.bz2|.xz]
- Extrait une archive dans un dossier cible :
tar xf source.tar -C dossier
- Crée une archive compressée, en utilisant le suffixe de l'archive pour déterminer le programme de compression :
tar caf cible.tar.xz fichier1 fichier2 fichier3
- Liste le contenu d'une archive tar :
tar tvf source.tar
- Extrait les fichiers correspondant au motif :
tar xf source.tar --wildcards "*.html"
Comme vous pouvez le voir si l’aide sur la commande existe en français, elle sera affichée. Cool pour ceux qui ne pratiquent pas la langue de sheakspire.
Installation
Il existe deux versions du client tldr. Un en python, mon préféré et un en JavaScript :
pip install tldr
pipx install tldr # Je prefère l'installer de manière isolé avec pipx
npm install -g tldr
cheatsh
Vous utilisez un grand nombre de technos et d’outils et vous en mélangez la syntaxe. De même, vous venez de découvrir un outil, mais comment trouver rapidement les meilleures pratiques ? Voilà à quoi va répondre cheatsh. Cheatsh est un outil permettant d’accéder à plusieurs projets hébergeant des cheats pages (feuilles de triches) d’un très grand nombre d’outils.
Il existe plusieurs moyens pour y accéder, un site internet, mais aussi depuis la ligne de commande. Je vais expliquer brièvement son fonctionnement sur la ligne de commande.
Utilisation de curl
Pour ne pas installer localement un outil, cheatsh propose grâce à son site web d’y accéder avec la commande curl. On utilise donc la version du site en ligne.
curl cht.sh/:intro # Affiche le README du projet donc complet.
curl cht.sh/:help # Affiche l'aide sur l'outil lui meme.
curl cht.sh/:list # Affiche la liste complète de toutes les commandes prises en charge.
curl cht.sh/ls # Affiche une aide sur la commande ls.
curl cht.sh/python/for # Affiche de l'aide sur les boucles for en python
curl cht.sh tar~list # Permet de rechercher des commandes ou on parle de list sur la commande tar.
curl cht.sh go/zip+list # Affiche d'algo sur un langage, ici lister le contenu d'un fichier zip
Installation locale de cht.sh
Pour installer cht.sh localement :
curl -s https://cht.sh/:cht.sh | sudo tee /usr/local/bin/cht.sh && sudo chmod +x /usr/local/bin/cht.sh
On reprend les mêmes commandes précédentes, mais en enlevant curl :
cht.sh/:intro # Affiche le README du projet donc complet.
cht.sh/:help # Affiche l'aide sur l'outil lui meme.
cht.sh/:list # Affiche la liste complète de toutes les commandes prises en charge.
cht.sh/ls # Affiche une aide sur la commande ls.
cht.sh/python/for # Affiche de l'aide sur les boucles for en python
cht.sh tar~list # Permet de rechercher des commandes ou on parle de list sur la commande tar.
cht.sh go/zip+list # Affiche d'algo sur un langage, ici lister le contenu d'un fichier zip
Mais on peut écrire simplement une phrase :
cht.sh python random list elements # Comment afficher le contenu d'une liste de manière aléatoire
Actions sur les fichiers
bat
Pour afficher le contenu, on utilise tous les commandes less
, more
ou cat
.
bat
est une commande alternative avec quelques fonctionnalités intéressantes
comme :
- La coloration syntaxique
- L’intégration de git
-d
- Affichage des caractères invisibles
-A
- Numérotation des lignes
- Paging automatique que l’on peut désactiver avec l’option
-pp
Qu’est-ce-qui rend cette commande indispensable ? Le simple fait d’avoir une
coloration syntaxique permet une lecture rapide de tout code source ou de
fichier de config le rend indispensable. Une alternative : vim
qui propose les
mêmes choses avec view
.
Installation de bat
Cet outil est pratiquement disponible directement sur les principales distributions Linux via leur système de packages.
sudo apt install bat # Pour les dérivés de Debian
sudo yum install bat # Pour les dérivés de RedHat
sudo pacman -S bat # Pour les dérivés de Arch Linux
Personnellement j’ai ajouté ses deux alias pour remplacer les deux commandes
cat
et less
:
cat='bat -pp'
less='bat -p'
ripgrep
Cet outil est une alternative aux commandes *grep
. ripgrep
est donc un outil
de recherche qui fonctionne directement en mode récursif dans le répertoire
courant. Autres points positifs :
- s’il détecte la présence d’un fichier
.gitignore
il ignorera les fichiers cachés. - Il est possible d’utiliser des expressions régulières
- Recherche par langage de programmation
- Support unicode par défaut.
- Il est très rapide. (les benchs sont disponibles sur le repo du projet)
Exemples de commandes :
rg Test README.md # Recherche en utilisant la casse dans un fichier
rg -i test # Recherche en ignorant la casse dans tous les sous-répertoires
rg '^\*/s.*' # Recherche en utilisant une expression régulière.
rg -tpy for # Recherche de toutes les boucles for dans les fichiers en langage Python
rg -Tpy for # Recherche de toutes les boucles for dans les fichiers autres que Python
rg '^\*\s' -g '*.md' # Recherche par glob. On peut les cumuler et utiliser les négations avec le caratère !
Installation de rigrep
Comme pour bat, cet outil est directement disponible sur la plupart des distributions Linux via leur système de packages :
sudo apt install ripgrep # Pour les dérivés de Debian
sudo yum install riprep # Pour les dérivés de RedHat
sudo pacman -S ripgrep # Pour les dérivés de Arch Linux
Conteneurs et Orchestrateurs
k9s
k9s
est un outil en ligne de commande facilitant l’administration de clusters
kubernetes.k9s
permet de rapidement un état des ressources des clusters et
regorge de fonctionnalités :
- Gestion les ressources standards et personnalisées de Kubernetes.
- Récupère les métriques en temps réel des ressources telles que les pods, les conteneurs et les nœuds.
- Fournit des commandes de gestion comme les logs, le scaling, les ports forwarding, les restarts …
- Outils de filtrage
- Prise en charge de plugins.
- Fournit une vue d’ensemble des ressources de votre cluster via les vues Pulses et XRay.
- Prise en charge de l’affichage des règles RBAC.
Installation de k9s
k9s
est disponible sur macOS, Linux et Windows.
MacOS :
# Avec Homebrew
brew install derailed/k9s/k9s
# Avec MacPort
sudo port install k9s
Linux :
# Avec asdf ce que je préfère
asdf plugin add k9s && asdf install k9s latest && asdf global k9s latest
# Avec Curl
curl -sS https://webinstall.dev/k9s | bash
# Avec PacMan pour les distributions Arch
pacman -S k9s
Windows :
# Via scoop
scoop install k9s
# Via chocolatey
choco install k9s
Utilisation de k9s
Maintenant que k9s
est installé, vous pouvez le lancer depuis votre terminal
avec la commande k9s
. Si vous avez plusieurs fichiers config.yaml, vous indiquez
lequel utiliser grâce à l’option --kubeconfig ~/.kube/config.yaml
. Dans le cas
où plusieurs contextes existent, il vous demandera de choisir lequel utilisé.
Sinon k9s
affichera par défaut la liste des pods du cluster dans le namespace
default.
Lorsque vous quittez l’application, k9s
stocke les infos de namespace et de
types de ressources utilisées pour les réafficher lors de sa prochaine
utilisation.
k9s
possède d’autres options dont les plus importantes :
--refresh=n
pour modifier la tempo de refresh (par défaut 2s)--namespace=<namespace>
ou-n <namespace>
pour se rendre directement sur un namespace particulier.-c <view>
: accède directement à une vue. Par défaut po (pod), mais on peut utiliser : ns (namespace), ctx (context), pu (pulses) et pop (popeye).--readonly
Accès en lecture seul--all-namespaces
: affiche tous les namespaces
Mais aussi des commandes dont :
``k9s info
: qui donne des infos sur la version et la localisation des différents
répertoires : logs, config et capture d’écran.
k9s info
____ __.________
| |/ _/ __ \______
| < \____ / ___/
| | \ / /\___ \
|____|__ \ /____//____ >
\/ \/
Configuration: /home/vagrant/.config/k9s/config.yml
Logs: /tmp/k9s-vagrant.log
Screen Dumps: /tmp/k9s-screens-vagrant
On peut enfin lancer l’outil. Dans l’image ci-dessus on peut voir qu’il affiche quelques informations sur le cluster surveillé. Pour obtenir de l’aide, il suffit d’appuyer sur la touche [?].
Description des touches :
- La touche [0] permet d’afficher les de tous les namespaces
- [1] celle du namespace default et d’autres raccourcis sont ajoutés au fur et à mesure que vous naviguez à travers les namespaces.
- En fonction de l’écran dans l’écran où vous vous trouvez les commandes disponibles s’afficheront. Par exemple dans la vue pod, [l] pour afficher les logs d’un pod, [d] pour afficher la description, [e] pour éditer une ressource, [s] pour executer un shell sur un pod
- [/] suivit d’une string ou d’une regex permet de filtrer les informations affichées
- [/] suivit -l filtre par label
- [/] suivit de -f fait du fuzzy find
- [:] suivi du nom d’une vue : pulses, pod, popeye, xray
- Pour sortir d’un écran utilisez la touche [esc]
- Pour quitter [CTRL] + [C] ou [:]quit
Les vues :
- popeye : intègre l’outil
popeye
qui vous signale déventuels problèmes avec les ressources de votre cluster. - xray : Affiche les dépendances entre ressource
- pulses : un tableau de bord affichant l’état de santé de votre cluster
- rbac : affiche les infos
rbac
si elles sont activées.
Si vous voulez plus d’aide allez sur le site du projet de k9S
LazyDocker
LazyDocker est un outil en ligne de commande pour Docker écrit en Go. Gros avantage, la souris est supportée. Il évite de recourir à la ligne de commande classique de Docker. Il affiche plein d’informations dont :
- affichage de l’état de tous les conteneurs
docker
oudocker-compose
. - affichage des logs pour un conteneur ou un service.
- affichage sous forme de graphiques ascii des métriques des conteneurs.
- Accès au shell d’un conteneur/service
- redémarrage/destruction de conteneurs ou services
- affichage des layers d’une image
- faire le ménage dans les conteneurs, images ou volumes (commande prune)
- …
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
asdf
Pour les personnes comme moi qui travaillons sur de multiples projets et de
multiples clients, nous devons pouvoir gérer plusieurs versions d’un même outil
sur notre poste de travail. C’est là qu’intervient asdf
.
Je ne vais à nouveau détailler son installation et son utilisation puisque je l’ai fait dans ce billet : asdf le maxi choco du Devops !
Multiplexeurs de terminaux
zellij
Voici est un multiplexeur de terminal qui se présente comme une alternative à tmux ou screen. Un multiplexeur de terminal est un outil qui permet de faire tourner plusieurs terminaux dans un seul. Pourquoi Zellij plutôt que tmux ou screen ? Tout simplement parce qu’il intègre une barre d’état affichant les principaux raccourcis. Je switche d’outils sans-cesse et passez de l’un à l’autre me demande toujours un temps d’adaptation. Là, je ne me pose pas de question tout est écrit à l’écran.
Parmi les autres fonctionnalités :
- Zellij se charge de déterminer le meilleur découpage : horizontale ou verticale
- Sauvegarde de la mise en page dans un fichier yaml
- Les raccourcis peuvent être reconfigurés
- Intègre des thèmes
- Système de plugins écrit en WebAssembly pour étendre ses fonctionnalités. On peut donc les écrire dans le langage de votre choix : rust, c#, ou python
Installation de zellij
Il est disponible sur les distributions basées sur Arch Linux et Fedora :
sudo dnf install zellij # Sur Fedora
sudo pacman -S zellij # Pour les dérivés de Arch Linux
Pour les autres, il faudra passer par cargo :
curl https://sh.rustup.rs -sSf | sh
cargo install --locked zellij
On peut aussi l’utiliser sans l’installer. Il suffira de se créer un alias :
bash <(curl -L zellij.dev/launch)
Quelques Raccourcis
Raccourcis | Actions |
---|---|
Alt+[n] | Ouvrir une fenêtre |
Alt+Flèches | Se déplacer dans le volet |
Alt+[+] | Augmenter la taille d’une fenêtre |
Alt+[-] | Diminuer la taille d’une fenêtre |
Alt+[=] | Attribuer une taille égale à toutes les fenêtre |
Ctrl+[g] | Interface de verrouillage (utile lors de l’utilisation de raccourcis système) |
Ctrl+[p] x | Pour fermer la fenêtre active |
Ctrl+[p] c | Renommer la fenêtre active |
Ctrl+[p] f | Pour ouvrir la fenêtre active en plein écran (idem pour taille initiale) |
Ctrl+[p] w | Pour ouvrir une fenêtre flottante |
Ctrl+[p] e | Pour rendre une fenêtre flottante (idem pour la remettre) |
Ctrl+[q] | Quitter |
Plus d’infos
Diagram as Code
Pour construire vos schémas, plutôt que de recourir à un éditeur externe,
pourquoi pas les générer à partir de lignes de code ? Pour cela y a la librairie
python diagrams
qui en plus est facile à prendre en main. Ça devient donc du
‘Diagrams as Code’.
Plus d’infos sur le billet dédié