Tool.Yun
Outils pour les développeurs
Aide-mémoire PowerShell
Aide-mémoire de la commande chmod
Aide-mémoire des commandes Tmux
Aide-mémoire des commandes Zellij
Aide-mémoire des commandes à l'écran
Bash Cheatheet
Docker Cheatheet
Docker Compose Cheatheet
Docker Swarm Cheatheet
Dockerfile Cheatheet
Feuille de triche
Feuille de triche de Markdown
Feuille de triche regex commune
Git Cheatheet
Git sémantique commit trichetheet
JQ TicheSheet
JSONPath Syntax Cheatheet
K8S Cheatheet
Nano Cheatheet
Nginx trichetheet
SED CHRYSHEET
Sélectionneurs CSS
Vim Cheatheet
Xpath syntaxe Cheatheet
Décodeur de code QR
Générateur de code QR
Générateur de code QR WiFi
Générateur de code-barres
Générateur de contacts QR
Lecteur de code-barres
Validateur GTIN
tools.epc-qrcode-generator.name
Base64 Encodeur / décodeur hexagonal
Base64 Encodeur de chaîne / décodeur
CSV aux données
Caractères Unicode à Java Entities Converter
Computer de consommation d'énergie et de dépenses
Convertisseur d'unité de stockage de données
Convertisseur dBm mW
Convertisseur de base entier
Convertisseur de coordonnées géographiques
Convertisseur de fichiers Base64
Convertisseur de format de variables Env
Convertisseur de propriétés
Convertisseur numérique romain
De nombreux convertisseurs d'unités
Excel aux données
Générateur ulide
Normalizer par e-mail
Texte au binaire UTF-8
Texte à Unicode
Torrent à l'aimant
ANSIBLE Vault Crypt Decrypt
Analyseur JWT
Analyseur SAML
Bcrypt
Calculateur CRC
Certificat / analyseur clé
Chiffrement de chaînes Jasypt
Chiffrement de fichiers PGP
Convertisseur de certificat SSL
Cryptage PGP
Cryptage RSA
Crypter / décrypter le texte
Cryptographie d'âge
Encodeur/décodeur Bech32
Générateur HMAC
Générateur JWT
Générateur de RSE
Générateur de certificat x509
Générateur de paires de clés ECDSA
Générateur de paires de clés ED25519
Générateur de paires de clés RSA
Hachage Argon2
Hachage de fichiers
Niceware Octets en phrase de passe
Partage de secrets de Shamir
Paseto / Paserk public / privé
Paseto / paserk local
Pgp keygen
Signataire et vérificateur RSA / DSA / ECDSA
Texte de hachage
Alarme
Alarme Cron / en semaine
Analyseur de fichiers ical
Calculateur ETA
Calculateur TTL
Calculatrice de durée
Calculatrice de durée de date
Calculatrice de jours
Chronomètre
Compte à rebours
Convertisseur de date
Convertisseur de fuseau horaire
Convertisseur de numéros de semaine
Générateur ical
Quel jour ?
fusion ical
Convertisseur de format Docker Compose
Docker Compose vers un fichier .env
Docker Composer to Docker Run Converter
Docker Inspecter à Docker Run
Docker Run to Kubernetes
Docker Run vers des quadroutes
Docker compose aux quadlets
Docker compose à kubernetes
Docker exécuté vers Docker Compose Converter
Générateur RBAC Kubernetes
Générateur d'étiquettes Dockerfile
Trafik Docker compose Maker
Téléchargeur d'images Docker
Validateur Docker Compose
Étiquettes Docker Pangolin
Analyseur de téléphone et formateur
Calculateur SLA
Calculateur d'IMC
Calculateur de rythme de course
Chercheur de codes de pays ISO 3166
Compatibilité des licences logicielles
Convertisseur de calendrier
Convertisseur de devises
Convertisseur en majuscules RMB
Dictionnaire en ligne
Directives d'éclairage IES
Explication des commandes Shell
Recherche ISO 639
Recherche Unicode
VALIDATEUR DE LUHN
VALIDATEUR IBAN et PARSER
VATURE VALIDATEUR
Validateur ISBN et analyseur
Vérificateur de carte de crédit
Générateur d'expressions Cron
Amélioration et minification CSS/JS
Convertisseur de devis
Convertisseur de fichiers hexadécimal
Convertisseur en boucle
Escaper de la chaîne
Générateur GitIgnore
Générateur d'attributs Git
Générateur de chaînes de connexion à la base de données
Générateur de courrier
Générateur de création de bases de données
Générateur de fausses données
Générateur de favori
Générateur de paramètres SQL
Générateur de scripts de test de charge K6
Générateur de secrets Django
Générateur de tables de base de données
Highlighter de code / scripts
Insert JSON à SQL
JSON à Protobuf
JSON à TypeScript
Javascript Unobfuscator / Unpacker
Jolie
Meta Generator ouvrir
Minificateur SQL
Minuterie de pomodoro
Obfuscateur JavaScript
SQL Prettify et Format
Stacktrace plus jolie
Séparateur de fichiers
Testeur API
Testeur Picomatch
Testeur d'échappement ANSI
Testeur d'interface utilisateur de fanfaronnade
Éditeur de commandes CLI
Calculateur d'amortissement
Convertisseur UUID
Générateur UUIDS
Générateur de code OTP
Générateur de code PIN
Générateur de mots de passe Diceware
Générateur de nanoïdes
Générateur de nombres aléatoires
Générateur de numératoires
Générateur de phrase passe
Générateur de phrases passagères BIP39
Générateur de token
Aperçu SVG
Comparateur d'images
Convertisseur Heic
Convertisseur ICO / PNG
Convertisseur de formats d'image
Filigrane
GIF vers MP4
Image EXIF ​​/ Metadata / GPS / JPEG Quality Reader
Image Resizer
Image et PDF OCRIE
Image à SVG (Potrace)
Inverseur de couleur d'image
Magnétophone
Rogner l'image
Supprimer l'arrière-plan de l'image
Supprimer l'exif
Cueilleur de cartes
Flipper de monnaie
Roue de fortune
Rouleau de dés
Analyseur de taille JSON
Aplatisseur JSON / Undeptener
CSV vers JSON
Convertisseur JS à JSON
Convertisseur JSON à JS
Convertisseur JSON à YAML
Convertisseur de chaîne JSON
Entité JSON à Java
Fusion JSON
JSON Diff
JSON Escaper / UNSCAPER
JSON MINIFY
JSON PRUTTIFY ET FORMAT
JSON aux données
JSON pour s'opposer
JSON vers .env
JSON vers MessagePack
JSON à C
JSON à CSV
JSON à PHP Code
JSON à PHP-Array
JSON à Python
JSON à SQL DDL
JSON à Schema
JSON à TOML
JSON à TS
JSON à XML
JSON à aller
Linter JSON
Maître de tri JSON
Message Pack vers JSON
ObjGen vers JSON
PHP-Array à JSON
Requête JSON
Rédacteur en chef JSON
Testeur JQ / JSONPath
tools.json-patch.name
Aide-mémoire de câblage RJ45 Cat6
Analyser de courrier électronique à rebond
Analyseur URL
Analyseur de cookies
Analyseur de rapport DMARC
Analyseur par e-mail
Calculateur de résistance
Chercheur de propriétés LDAP activeIrectory
Console du port série
Convertisseur GZIP / Deflate
Convertisseur brut intelligent
Convertisseur de codage mime
Convertisseur de numéro de point flottant
Convertisseur moyen-endien
Convertisseur objetId MongoDB
Décodeur EMV TLV
Décodeur URL de partage SharePoint
Décodeur de transactions ETH
Détecteur / décodeur de charme de texte
Détecteur de type de fichier
Encodeur / décodeur hexagonal
Extension d'URL courtes
Extracteur d'identification de flocon de neige
Générateur TCPDUmp
Générateur d'URL
Générateur de commandes Nmap
Informations sur le kicode
Lecteur de fichiers parquet
Masque de données sensible
Outlook Safelink Decoder
Parser MSG Outlook
Testeur DNS
Testeur HTTPS
Testeur de pixels morts
Testeur de propagation DNS
键盘测试器
Aperçu Markdown
Coller comme marquage
Différence Markdown
Epub vers Markdown
Générateur de TOC Markdown
Générateur de tableaux Markdown
HTML à Markdown
Markdown Lorem Ipsum
Markdown vers données
Markdown vers texte
Markdown à Docx
Markdown à HTML
Tableau de marque Beautifier
tools.markdown-format-converter.name
Éditeur de Markdown
Calculateur de pourboire
Calculatrice binaire
Convertisseur de formats mathématiques
OCR mathématique
Visualiseur de courbes trigonométriques/équations
Évaluateur mathématique
Calculatrice de distance GEO
Calculatrice du rapport d'aspect
Pourcentage de calculatrice
Référence
Compresseur PDF
Concaner PDF
Crypte PDF
Extracteur de page PDF
Extracteur de texte PDF
HTML vers PDF
PDF décrypter et déverrouiller
Pdf linéarize / fastweb
Vérificateur de signature PDF
Convertisseur d'accélération
Convertisseur d'angle
Convertisseur d'illuminance
Convertisseur d'unités de masse
Convertisseur d'unités de pression
Convertisseur d'unités de zone
Convertisseur d'énergie
Convertisseur d'énergie alimentaire
Convertisseur de débit volumique
Convertisseur de forces
Convertisseur de fréquence
Convertisseur de préfixes SI
Convertisseur de puissance
Convertisseur de température
Convertisseur de vitesse
Convertisseur des unités de longueur
Convertisseur des unités de volume
Ordinateur de fitness
Analyseur de force de mot de passe
Autorisation SIP
Calculateur IPv4 / 6 à CIDR (S)
Calculateur de fiabilité RAID
Calculateur de raid
Calculateur de taux de transfert de données
Calculateur visuel de sous-réseau
Calculatrice IPv4 / 6 CIDR à la plage IP
Calculatrice de ChMOD
Calculatrice de disque dur
Calculatrice de sous-réseau IPv4
Calculatrice de sous-réseau IPv6
Calculatrice de zpool RAID
Convertisseur d'adresse IPv4
Convertisseur d'adresse IPv6
Convertisseur d'adresse MAC
Convertisseur punycode
Curl Generator
Dnsbl
Décodeur ARPA
Décodeur X-VR-Spamcause
Désinfectant Har
Emplacement IP Geo
Entiers vers ipv4 / ipv6
Expanseur de plage IPv4
Force de mot de passe zxcvbn
Formateur Nginx
Formateur de commandes Shell
Générateur Apache Logrotate
Générateur Bimi DNS
Générateur DKIM DNS
Générateur DMARC DNS
Générateur DNS PTR
Générateur DNS SPF
Générateur FSTAB
Générateur HTACCESS
Générateur HTPASSWD / HTACCESS
Générateur IPv6 ULA
Générateur RSYNC
Générateur WPA PSK
Générateur d'adresses MAC
Générateur d'autherines de base
Générateur d'option43
Générateur de commandes UFW
Générateur de commandes d'arrêt
Générateur de configuration de Wireguard
Générateur de crontab
Générateur de ports aléatoires
Générateur iptables
IPv4-6 / iPrange / CIDR dans iPrange / CIDR / IPMask
Les sous-réseaux IP excluent le calculatrice
Linéariseur de commandes Shell
Listeur de sous-réseaux IPv4
Mon adresse IP
Numéros de port
Ping
Recherche d'adresse MAC
Requêtes DNS
Requêtes DNS/RDAP Cloudflare
Testeur WebSocket
Testeur de microphone
Testeur de ports TCP/UDP
Téléchargeur multi-link
Vérificateur Whois
Zpool Cheatheet
générateur de ligne de commande firewalld
tools.restic-command-generator.name
tools.url-redirection-checker.name
Linter TOML
TOML à JSON
TOML à YAML
Calculatrice de Levenshtein
Comparer la police
Convertisseur de cas
Convertisseur de code Morse
Convertisseur de disposition de clavier
Convertisseur de liste
Convertisseur rune
Diagramme de structure de dossiers
Emballer des fichiers pour l'IA
Encodeur / décodeur de jetons GPT
Estimateur de jeton GPT
Exportateur de Mermaid
Extraire du texte de HTML
Finder de lignes en double
Format unicode
Générateur Lorem Ipsum
Générateur de citations
Générateur de commande SED
Générateur de texte ASCII Art
Générateur/Bannière Zalgo
Image à Ascii Art
JSON vers TOON
Lecteur RSVP
Mots distincts
Obfuscateur de cordes
Partager le lien social
Remplaceur de texte intelligent et linebreaker
Répertorie le comparateur
Splitter rapide de l'IA
Statistiques de texte
Sélecteur d'emojis
Sélecteur de lignes aléatoires
TOON vers JSON
Tabulation pour espaces
Testeur Regex
Texte aux noms Unicode
Texte diff
Texte à l'alphabet de l'OTAN
Traducteur texte
Unicode à GSM-7
Vérificateur I et L
Analyseur d'agent utilisateur
CSS Gettificateur
Chaîne de slufier
Codes d'état HTTP
Convertisseur CSS XPATH
Convertisseur REM Pixel
Convertisseur d'unités CSS
Convertisseur de couleurs
Encoder / décoder les chaînes formatées
Fragment de recherche de texte d'URL
Futur d'URL
Générateur URL UTM
Générateur d'espace réservé SVG
Générateur de gradient CSS
HTML GARTIFIER
HTML vers XHTML
HTML vers données
Image à CSS
Informations sur l'appareil
Minficateur HTML
Nettoyant URL
Nettoyer HTML
Roue de couleur
Types de mime
Vérificateur de contraste de couleur
Échapper aux entités HTML
Éditeur HTML WYSIWYG
Formateur XML
Linter XML
ObjGen vers HTML
Testeur XSLT
Testeur xpath
XML à JSON
Apllareur YAML / Undeptener
Fusion de Yaml
YAML à JSON Converter
YAML à TOML
Yaml Prettify and Format

Bash Cheatheet

Bash Commands Communs

Bash is the default shell on most Linux systems and the language of most glue scripts. This sheet covers the interactive shortcuts, the syntax you forget between scripts, and the safety flags worth putting at the top of every file.

#!/usr/bin/env bash
set -euo pipefail

⌨️ Keyboard Shortcuts

KeysDoes
Ctrl+A / Ctrl+EJump to the start / end of the line
Ctrl+B / Ctrl+FBack / forward one character
Alt+B / Alt+FBack / forward one word
Ctrl+U / Ctrl+KCut to the start / end of the line
Ctrl+WCut the word before the cursor
Alt+DCut the word after the cursor
Ctrl+YPaste back what you last cut
Ctrl+T / Alt+TSwap the last two characters / words
Alt+.Insert the last argument of the previous command
Ctrl+LClear the screen
Ctrl+RSearch the history backwards
Ctrl+GAbort the history search
Ctrl+CInterrupt the running command
Ctrl+DEnd of input — logs out of an empty prompt
Ctrl+ZSuspend the running command
Ctrl+S / Ctrl+QFreeze / resume terminal output
Alt+U / Alt+LUpper-case / lower-case to the end of the word

🕰 History

# the last few hundred commands
history

# run command number 42
!42

# run the last command again, or the last one starting with 'ssh'
!!
!ssh

# the last argument of the previous command — also Alt+.
!$

# every argument of the previous command
!*

# re-run the last command with a substitution
^old^new

# forget a command you would rather not keep
history -d 42

# do not record commands that start with a space, and drop duplicates
export HISTCONTROL=ignoreboth
export HISTSIZE=10000 HISTFILESIZE=20000

📁 Files & Directories

# list: long, human sizes, hidden files, newest last
ls -lhAtr

# tree view of a directory
tree -L 2

# copy, move, delete
cp -r src/ dest/
mv old new
rm -rf directory

# create nested directories in one go
mkdir -p project/{src,test,docs}

# symbolic and hard links
ln -s /path/to/target linkname
ln target hardlink

# where is a file, and what is it?
find . -name '*.log' -mtime -7
find . -type f -size +100M
locate nginx.conf
which python3
type -a ls
file archive.bin
stat report.pdf

# disk usage: this directory, and the filesystem
du -sh *
du -h --max-depth=1 | sort -h
df -h

# archives
tar czf backup.tar.gz directory/
tar xzf backup.tar.gz
zip -r archive.zip directory/
unzip archive.zip

🔎 Text & Search

# grep: recursive, line numbers, case-insensitive
grep -rni "pattern" .

# only the matching part, or only the file names
grep -o 'v[0-9.]*' file
grep -rl "TODO" src/

# invert, count, context
grep -v "debug" app.log
grep -c "error" app.log
grep -B2 -A2 "exception" app.log

# head, tail, follow
head -20 file
tail -f /var/log/syslog

# columns, sorting, counting
cut -d',' -f1,3 data.csv
sort -u names.txt
sort -k2 -n scores.txt
uniq -c sorted.txt
wc -l file

# the classic: what are the top ten IPs in this log?
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

# replace across many files
sed -i 's/old/new/g' *.conf

# translate or delete characters
tr 'a-z' 'A-Z' < file
tr -d '\r' < dos.txt > unix.txt

# split a stream: to a file and onward down the pipe
command | tee output.log | grep error

# build command lines from input
find . -name '*.py' | xargs wc -l
find . -name '*.tmp' -print0 | xargs -0 rm

🖧 System & Network

# who and where am I
whoami; hostname; uname -a; uptime

# processes
ps aux | grep nginx
pgrep -a node
top
htop

# memory and load
free -h
vmstat 1 5

# what is listening, and what has this file open
ss -tulpn
lsof -i :8080
lsof /var/log/app.log

# connectivity
ping -c 4 example.com
traceroute example.com
dig example.com +short
ip addr show
curl -I https://example.com

# transfer files
scp file user@host:/path/
rsync -avz --progress src/ user@host:/dest/

# remote shell, with a tunnel
ssh user@host
ssh -L 8080:localhost:80 user@host

# services and logs (systemd)
systemctl status nginx
journalctl -u nginx -f --since "1 hour ago"

📦 Variables

# assignment: no spaces around the =
name="value"

# only for this one command
DEBUG=1 ./script.sh

# export to child processes
export PATH="$HOME/bin:$PATH"

# read input from the user
read -p "Name: " name
read -rs -p "Password: " pass

# command substitution
today=$(date +%F)

# arithmetic
count=$(( count + 1 ))
let "n = 5 * 3"

# read-only and integer variables
declare -r VERSION=1.0
declare -i counter=0
VariableHolds
$0The name of the script
$1 … $9Positional arguments
$#How many arguments were passed
$@All arguments, each one quoted separately
$*All arguments as a single word
$?Exit status of the last command
$$PID of the current shell
$!PID of the last background job
$_Last argument of the previous command
$HOME $USER $PWD $OLDPWDThe usual environment
$RANDOMA random integer
$LINENOThe current line number — handy in traps

🔤 Parameter Expansion

ExpansionResult
${var:-default}default when var is unset or empty
${var:=default}The same, and assigns it
${var:?message}Abort with message when unset — great for required arguments
${var:+value}value only when var is set
${#var}The length of the value
${var:offset:length}A substring
${var#pattern}Strip the shortest match from the start
${var##pattern}Strip the longest match from the start — ${path##*/} is basename
${var%pattern}Strip the shortest match from the end — ${file%.txt} drops the extension
${var%%pattern}Strip the longest match from the end
${var/old/new}Replace the first match
${var//old/new}Replace every match
${var^^} / ${var,,}Upper-case / lower-case the whole value
path="/var/log/app.log"
echo "${path##*/}"    # app.log
echo "${path%/*}"     # /var/log
echo "${path%.log}"   # /var/log/app

📚 Arrays

# indexed arrays
fruits=(apple banana cherry)
fruits[3]="date"

echo "${fruits[1]}"       # banana
echo "${fruits[@]}"       # every element
echo "${#fruits[@]}"      # how many elements
echo "${!fruits[@]}"      # the indexes
echo "${fruits[@]:1:2}"   # a slice

for fruit in "${fruits[@]}"; do
  echo "$fruit"
done

# associative arrays (bash 4+)
declare -A color
color[apple]="red"
color[banana]="yellow"

echo "${color[apple]}"
for key in "${!color[@]}"; do
  echo "$key is ${color[$key]}"
done

🧪 Tests & Conditions

Use [[ ... ]] in bash — it handles empty variables and patterns far better than the old [ ... ].

FilesTrue when
-e fileIt exists
-f fileIt exists and is a regular file
-d fileIt exists and is a directory
-L fileIt is a symbolic link
-s fileIt exists and is not empty
-r -w -xYou can read / write / execute it
-O fileYou own it
f1 -nt f2f1 is newer than f2 (-ot for older)
StringsTrue when
-z "$s"The string is empty
-n "$s"The string is not empty
"$a" == "$b"They are equal (= also works)
"$a" != "$b"They differ
"$a" < "$b"Sorts before, in the current locale
"$s" == pre*Glob match — unquoted right-hand side
"$s" =~ ^re$Regex match, captures land in $BASH_REMATCH
NumbersMeaning
-eqEqual
-neNot equal
-ltLess than
-leLess than or equal
-gtGreater than
-geGreater than or equal
if [[ -f "$config" && -r "$config" ]]; then
  echo "readable"
elif [[ -d "$config" ]]; then
  echo "that is a directory"
else
  echo "missing"
fi

# arithmetic comparison reads more naturally in (( ))
if (( count > 10 )); then echo "plenty"; fi

🔀 Flow Control

# for over a list, a glob, or a range
for name in alice bob; do echo "$name"; done
for f in *.log; do gzip "$f"; done
for i in {1..10}; do echo "$i"; done
for (( i = 0; i < 10; i++ )); do echo "$i"; done

# while and until
while read -r line; do echo "$line"; done < input.txt
until ping -c1 host &>/dev/null; do sleep 5; done

# case
case "$1" in
  start)   echo "starting" ;;
  stop)    echo "stopping" ;;
  restart) echo "restarting" ;;
  *)       echo "usage: $0 {start|stop|restart}"; exit 1 ;;
esac

# select builds a numbered menu
select choice in build test deploy; do
  echo "you picked $choice"
  break
done

# loop control
continue   # skip to the next iteration
break      # leave the loop

🧰 Functions

greet() {
  local name="${1:?name required}"
  local greeting="${2:-Hello}"
  echo "$greeting, $name!"
  return 0
}

greet "World"
greet "World" "Good morning"

# capture the output, and check the status
message=$(greet "World")
if ! greet; then echo "greet failed"; fi

# make a function available to subshells
export -f greet

➡️ Redirection

SyntaxDoes
> fileSend stdout to a file, replacing it
>> fileAppend stdout to a file
2> fileSend stderr to a file
2>&1Send stderr wherever stdout is going
&> fileSend both to a file (bash)
> file 2>&1The portable form of the same
< fileRead stdin from a file
<<EOF … EOFHere-document
<<-EOF … EOFHere-document, leading tabs stripped
<<< "string"Here-string
|Pipe stdout into the next command
|&Pipe stdout and stderr
> /dev/null 2>&1Discard everything
<(command)Process substitution — a command as a file
tee fileWrite to a file and pass the stream on
# a heredoc, expanded
cat <<EOF > config.ini
host=$HOSTNAME
port=8080
EOF

# a heredoc, literal (quoted delimiter)
cat <<'EOF' > script.sh
echo "$HOME is not expanded here"
EOF

# compare the output of two commands without temporary files
diff <(sort a.txt) <(sort b.txt)

⚙️ Jobs & Processes

# run in the background, and list the jobs
long_task &
jobs

# bring back to the foreground, or resume in the background
fg %1
bg %1

# Ctrl+Z suspends the foreground job

# survive logout
nohup ./script.sh > out.log 2>&1 &
disown -h %1

# wait for background jobs
wait
wait $!

# signals
kill 1234
kill -9 1234
kill -TERM %1
pkill -f "node server.js"

# give a command a deadline
timeout 30s ./slow_task.sh

# clean up on exit, whatever happens
trap 'rm -f "$tmpfile"' EXIT
trap 'echo interrupted; exit 130' INT TERM

🛡 Safe Scripting

#!/usr/bin/env bash
# -e  exit on any failing command
# -u  treat unset variables as an error
# -o pipefail  a pipeline fails if any stage fails
set -euo pipefail

# make word splitting predictable
IFS=$'\n\t'

# always quote expansions
cp "$src" "$dest"

# check the syntax without running anything
bash -n script.sh

# trace every command as it runs
bash -x script.sh
set -x; risky_command; set +x

# a more informative trace prefix
export PS4='+ ${BASH_SOURCE}:${LINENO}: '

# report where a script died
trap 'echo "failed at line $LINENO with status $?" >&2' ERR

# and lint it before it reaches anyone else
shellcheck script.sh

⚠️ set -e has surprising corners: it does not fire inside if, &&, || or command substitutions used in assignments. It is a seatbelt, not autopilot — still check what matters explicitly.

🎨 Colours

Escape sequences take the form \033[<style>;<colour>m, and \033[0m resets. \e and \x1B are the same character as \033.

ColourForegroundBrightBackground
Black309040
Red319141
Green329242
Yellow339343
Blue349444
Magenta359545
Cyan369646
White379747
StyleCodeStyleCode
Reset0Underline4
Bold1Blink5
Dim2Reverse7
RED='\033[0;31m'
GREEN='\033[0;32m'
BOLD='\033[1m'
RESET='\033[0m'

echo -e "${GREEN}ok${RESET} — ${RED}${BOLD}failed${RESET}"

# only colourise when stdout is a terminal
if [[ -t 1 ]]; then RED='\033[0;31m'; RESET='\033[0m'; else RED=''; RESET=''; fi

💡 Tips

# aliases and functions belong in ~/.bashrc
alias ll='ls -lhA'
alias gs='git status -sb'
mkcd() { mkdir -p "$1" && cd "$1"; }

# reload the config after editing it
source ~/.bashrc

# brace expansion saves a lot of typing
cp config.yaml{,.bak}
mkdir -p src/{components,utils,tests}

# repeat the previous command as root
sudo !!

# go back to the previous directory
cd -

# run something regardless of the current directory
(cd /tmp && ./task.sh)

# time a command, and keep a transcript of a session
time ./build.sh
script session.log

📚 Resources

  • GNU Bash manual
  • ShellCheck — lints your scripts
  • Bash Pitfalls
  • Google Shell Style Guide
  • explainshell — break down any command line