Loading search data...

DevOps - Ma liste d'outils en ligne de commande indispensables

Publié le : 2 octobre 2022 | Mis à jour le : 27 juin 2023

logo devops

Je 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

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

Source du projet

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

Source du projet

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.

cheatsh

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

Source du projet

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

Source du projet

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.

interface k9s

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

k9s filtres

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

Source du projet

demo 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 ou docker-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

zellij

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

RaccourcisActions
Alt+[n]Ouvrir une fenêtre
Alt+FlèchesSe 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] xPour fermer la fenêtre active
Ctrl+[p] cRenommer la fenêtre active
Ctrl+[p] fPour ouvrir la fenêtre active en plein écran (idem pour taille initiale)
Ctrl+[p] wPour ouvrir une fenêtre flottante
Ctrl+[p] ePour rendre une fenêtre flottante (idem pour la remettre)
Ctrl+[q]Quitter

Plus d’infos

zellij.dev

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’.

diagrams as code

Plus d’infos sur le billet dédié

Mots clés :

devops tools linux

Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur  Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne vous coûte plus cher, via  ce lien . Vous pouvez aussi partager le lien sur twitter ou Linkedin via les boutons ci-dessous. Je vous remercie pour votre soutien.

Autres Articles


Commentaires: