Soyez feignant sur Linux avec le .zshrc

Linux
835 mots

Introduction

Bonjour, aujour'dhui j'vais expliquer tout ce qu'il y a à savoir sur le fameux .zshrc ou .bashrc. C'est vraiment pas compliqué.

Le .zshrc (pour Zsh) ou .bashrc (pour Bash) est un fichier de configuration exécuté à chaque ouverture d'un terminal. Il permet de définir des alias, variables d’environnement, fonctions, et d’autres réglages personnalisés. En gros, il configure ton shell à chaque démarrage. Pour ça faut savoir manier un peu bash mais y'a rien de sorcier j'vais expliquer.

Utilisation

Pour l'utiliser c'est simple normalement il est redémarré a chaque nouveau terminal ouvert, mais lorsqu'on le modifie il faut tapper source .zshrc ou source .bashrc pour mettre a jour nos modifs.

S'organiser

Comme expliqué précédemment le .zshrc permet de configurer tout un tas de truc qui pourront être utilisable dans le terminal, ça inclut :

  • Les alias de commandes
  • Les fonctions
  • La coloration syntaxique
  • Afficher l'heure
  • Avoir un historique personnalisé
  • Etc...

Donc un truc plutôt pratique c'est de faire différents fichiers exemples :

  • .zsh_aliases pour gérer les alias
  • .zsh_functions pour gérer les fonctions plus complexes
  • .zsh_colors pour y charger toutes les couleurs
  • etc...

Le Skel

Avant de commancer j'aimerai juste vous parler de /etc/skel qui contient les fichiers et dossiers par défaut copiés dans le home d’un nouvel utilisateur lors de sa création (via useradd).

Donc en gros changer le fichier .bashrc (ouai j'alterne) ici ca peut être plus pratique si vous créez souvent des utilisateurs.

Voilà

Modifions-le

Le fichier se trouve dans le /home donc vous pouvez y accéder comme suit :

cd ~/.zshrc

En général vous aurez pas trop besoin de toucher la conf en place vous aurz juste à rajouter vos lignes pour le compléter.

Commençons par créer et faire un beau fichier pour les alias

nano .~/zsh_aliases
# Alias pour naviguer vite fait
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias ~='cd ~'
alias c='clear'

# Alias pr le système
alias reload='source ~/.zshrc'             # Recharge la config
alias ls='ls --color=auto'
alias ll='ls -lhF'                         # Liste détaillée
alias la='ls -A'                           # Tous les fichiers sauf . et ..
alias l='ls -CF'                           # Liste compacte
alias df='df -h'                           # Espace disque
alias du='du -h'                           # Taille dossier
alias free='free -h'                       # RAM dispo

# packages
alias update='sudo apt update && sudo apt upgrade -y'
alias install='sudo apt install'
alias remove='sudo apt remove'

# Plus agréable à écrire
alias please='sudo'
alias fuck='sudo $(fc -ln -1)'             # Réexécute dernière commande avec sudo
alias h='history'
alias grep='grep --color=auto'

# Dev
alias v='nvim'
alias code='code .'                        # VS Code dans le dossier courant
alias pyserve='python3 -m http.server'       # Serveur local rapide
alis jserve='npm run dev'

# Git (j'utilises pas ceux la moi)
alias gs='git status'
alias ga='git add .'
alias gc='git commit -m'
alias gp='git push'
alias gl='git log --oneline --graph --decorate'
alias gco='git checkout'
alias gb='git branch'
alias gd='git diff'

# Network
alias ip='ip -c -br a'                            # Adresse IP
alias ports='ss -tuln'                     # Ports ouverts
alias myip='curl ifconfig.me'              # IP publique

# ───🔁 RECHARGER──────────────────────────────────────────────────────
alias zshreload='source ~/.zshrc && echo "✅ zsh reloaded"'

Ensuit on va se faire un joli fichier de fonctions

nano ~/.zsh_functions
# Décompression Fastoche 
extract() {
  if [ -f "$1" ]; then
    case "$1" in
      *.tar.bz2)   tar xjf "$1" ;;
      *.tar.gz)    tar xzf "$1" ;;
      *.bz2)       bunzip2 "$1" ;;
      *.rar)       unrar x "$1" ;;
      *.gz)        gunzip "$1" ;;
      *.tar)       tar xf "$1" ;;
      *.tbz2)      tar xjf "$1" ;;
      *.tgz)       tar xzf "$1" ;;
      *.zip)       unzip "$1" ;;
      *.Z)         uncompress "$1" ;;
      *.7z)        7z x "$1" ;;
      *)           echo "'$1' : format non reconnu" ;;
    esac
  else
    echo "'$1' n’est pas un fichier valide"
  fi
}

# Créer + Entrer dans le dossier

mkcd() {
  mkdir -p "$1" && cd "$1"
}

# Timer
timer() {
  local start=$(date +%s)
  "$@"
  local end=$(date +%s)
  echo "⏱️  Temps écoulé : $((end - start))s"
}


# Ping Intelligent
fastping() {
  ping -c 5 -i 0.2 "$1"
}

# Nettoyage des dépendances
cleanup() {
  sudo apt autoremove --purge -y && sudo apt autoclean && sudo apt clean
}

# ───🔎 RECHERCHE DANS L’HISTORIQUE───────────────────────────────────
# Celle la c'est pour bash
hgrep() {
  history 0 | grep "$1"
}

# Et celle la pour zsh
hgrep() {
    builtin history -E 1 | grep "$1"
}

# Kill un processur simplement
pkkill() {
  ps aux | grep "$1" | grep -v grep
  echo -n "PID à tuer ? "
  read pid
  kill -9 $pid && echo "Process $pid tué."
}

# Affichage du patj rapide
showpath() {
  echo $PATH | tr ':' '\n'
}

# Rejouer une commande de l'historique qui contient un mot clé
runcmd() {
  local cmd=$(builtin history -E 1 | grep "$1" | tail -n 1 | sed 's/ *[0-9]* *//')
  if [[ -n "$cmd" ]]; then
    echo "→ $cmd"
    eval "$cmd"
  else
    echo "❌ Aucun historique contenant : $1"
  fi
}

# Allez rapidement dans un dossier du système
go() {
  cd "$(find . -type d -name "$1" 2>/dev/null | head -n 1)" || echo "📁 Aucun dossier trouvé"
}

cheatsheet() {
  command --help 2>&1 || man "$1" || echo "Pas de cheat disponible"
}

# Pour les devs celle la : 
cleanup() {
  echo "🧹 Suppression des fichiers inutiles..."
  find . -name "*.DS_Store" -delete
  find . -name "*.pyc" -delete
  find . -name "__pycache__" -type d -exec rm -r {} +
  echo "✔️  Nettoyage terminé."
}

Breeeeeeeeffff J'peux en faire des milliers de fonctions mais on va s'arrêter là et maintenant on va aller faire en sorte que nos deux nouveaux fichiers s'activent à chaque fois qu'on va sourcer le zshrc.

echo -e "\nsource ~/.zsh_functions\nsource ~/.zsh_aliases" >> ~/.zsh_rc

Et voilà c'est fini.

Conclusion

Vous vous êtes arrangé la vie pour tout le temps où vous utiliserez Linux et ça a pris 5 minutes puisque vous avez copié collé. Certes ca demande de s'adapter aux nouvelles commandes mais avec le temps c'est une obène.