cheat: mieux que les manpages pour vos commandes Linux

Quel développeur ou quel administrateur système n’a jamais pesté sur la syntaxe d’une commande Unix ou Linux ? Qui ne s’est pas perdu dans les man pages sans trouver ce qu’il cherchait ?

On a alors souvent recours à un fichier « fourre-tout » avec nos commandes favorites pour les retrouver lorsqu’elles ne sont plus dans l’historique de Bash.

Heureusement, il y a le projet cheat qui rassemble pour vous les usages les plus courants de vos commandes favorites. C’est donc un ensemble de cheatsheets, antisèches en Français, plus exhaustif que les examples fournis par --help et évidemment moins précis que la man page.

Un exemple avec grep:

$ cheat grep
# To search a file for a pattern:
grep <pattern> <file>

# To perform a case-insensitive search (with line numbers):
grep -in <pattern> <file>

# To recursively grep for string <pattern> in <dir>:
grep -R <pattern> <dir>

# Read search patterns from a file (one per line):
grep -f <pattern-file> <file>

...

Mais cheat permet aussi de définir vos propres antisèches, soit pour remplacer celles de la communauté soit pour vos propres scripts ou commandes.

1. Installer Cheat

On télécharge:

user@debian:~$ wget https://github.com/cheat/cheat/releases/download/3.10.1/cheat-linux-amd64.gz -O cheat.gz
user@debian:~$ gzip -d cheat.gz 

Puis on installe:

user@debian:~$ mv cheat bin/
user@debian:~$ chmod u+x bin/cheat

2.Configuration

Au premier lancement de cheat:

user@debian:~$ cheat
A config file was not found. Would you like to create one now? [Y/n]: Y
Would you like to download the community cheatsheets? [Y/n]: Y
Cloning into '/home/user/.config/cheat/cheatsheets/community'...
remote: Enumerating objects: 502, done.
remote: Counting objects: 100% (502/502), done.
remote: Compressing objects: 100% (340/340), done.
remote: Total 502 (delta 185), reused 453 (delta 157), pack-reused 0
Receiving objects: 100% (502/502), 125.50 KiB | 755.00 KiB/s, done.
Resolving deltas: 100% (185/185), done.
Created config file: /home/user/.config/cheat/conf.yml
Please read this file for advanced configuration information.

La commande nous propose de:

  • Créer un fichier de configuration
  • Télécharger les community cheat sheets (qui ne font pas partie du projet cheat)

Si vous allez voir le fichier de configuration /home/user/.config/cheat/conf.yml, vous verrez la définition des cheat sheets « community » (qu’on vient de cloner), ainsi que celle des « personal », c’est à dire les vôtres:

  # If you have personalized cheatsheets, list them last. They will take
  # precedence over the more global cheatsheets.
  - name: personal
    path: /home/user/.config/cheat/cheatsheets/personal
    tags: [ personal ]
    readonly: false

Ensuite, rien ne vous empêche d’avoir un dépôt Git pour vos « personal cheat sheets » et de référencer son répertoire de clone dans le fichier de configuration de cheat.

3. Utilisation

Pour utiliser cheat, rien de plus simple:

user@debian:~$ cheat cheat
# To see example usage of a program:
cheat <command>

# To edit a cheatsheet
cheat -e <command>

# To list available cheatsheets
cheat -l

# To search available cheatsheets
cheat -s <command>

# To get the current `cheat' version
cheat -v

Par exemple pour la commande gzip:

user@debian:~$ cheat gzip
# To create a *.gz compressed file
gzip test.txt

# To create a *.gz compressed file to a specific location using -c option (standard out)
gzip -c test.txt > test_custom.txt.gz

# To uncompress a *.gz file
gzip -d test.txt.gz

# Display compression ratio of the compressed file using gzip -l
gzip -l *.gz

# Recursively compress all the files under a specified directory
gzip -r documents_directory

# To create a *.gz compressed file and keep the original
gzip < test.txt > test.txt.gz

Cela ne se voit pas ici, mais la sortie de la commande cheat est colorisée, ce qui se paramètre avec les propriétés colorize, style et formatter du fichier de configuration.

Par exemple:

# Should 'cheat' always colorize output?
colorize: true

# Which 'chroma' colorscheme should be applied to the output?
style: monokai

# Which 'chroma' "formatter" should be applied?
# One of: "terminal", "terminal256", "terminal16m"
formatter: terminal256

Si vous allez voir le contenu des « cheat sheets » de la communauté, vous verrez qu’il s’agit de fichiers texte tout simples.

Il vous appartient alors soit:

  • de contribuer aux « cheat sheets » de la communauté
  • de définir vos propres « cheat sheets »

A noter que cheat ne comporte pas de manpage, il faudra donc vous reporter sur:

$ cheat --help

Une dernière chose: cheat supporte la complétion Bash:

$ sudo wget https://raw.githubusercontent.com/cheat/cheat/master/scripts/cheat.bash -O /etc/bash_completion.d/cheat