--- - name: Personnalisation du bash pour toutes les VMs de l'inventaire hosts: all become: yes gather_facts: yes vars: bash_config_version: "1.0" tasks: - name: Afficher les informations de l'hôte debug: msg: "Configuration de {{ ansible_hostname }} ({{ ansible_distribution }} {{ ansible_distribution_version }})" - name: Créer le répertoire profile.d si nécessaire file: path: /etc/profile.d state: directory mode: '0755' - name: Déployer la configuration bash personnalisée globale copy: dest: /etc/profile.d/custom_bash.sh mode: '0644' content: | # ============================================ # Configuration bash personnalisée - v{{ bash_config_version }} # Déployé par Ansible via Semaphore # Hôte: {{ ansible_hostname }} # Date: {{ ansible_date_time.iso8601 }} # ============================================ # Prompt coloré avec utilisateur, hôte et chemin export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' # Pour root, prompt en rouge if [ "$EUID" -eq 0 ]; then export PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# ' fi # ============================================ # Configuration de l'historique # ============================================ export HISTSIZE=10000 export HISTFILESIZE=20000 export HISTCONTROL=ignoredups:erasedups export HISTTIMEFORMAT="%d/%m/%Y %H:%M:%S " # Ajouter immédiatement les commandes à l'historique shopt -s histappend PROMPT_COMMAND="history -a; $PROMPT_COMMAND" # ============================================ # Alias de navigation # ============================================ alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' # ============================================ # Alias ls avec couleurs # ============================================ alias ls='ls --color=auto' alias ll='ls -lah --color=auto' alias la='ls -A --color=auto' alias l='ls -CF --color=auto' alias lsd='ls -d */ --color=auto' # ============================================ # Alias grep avec couleurs # ============================================ alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' # ============================================ # Alias système # ============================================ alias df='df -h' alias du='du -h' alias free='free -h' alias top='htop 2>/dev/null || top' alias ps='ps auxf' alias psg='ps aux | grep -v grep | grep -i -e VSZ -e' alias meminfo='free -h -l -t' alias cpuinfo='lscpu' # ============================================ # Alias réseau # ============================================ alias ports='netstat -tulanp' alias listening='netstat -tulanp | grep LISTEN' alias myip='curl -s ifconfig.me && echo' alias ping='ping -c 5' alias pingg='ping google.com -c 5' # ============================================ # Alias Git (utile avec Gitea) # ============================================ alias gs='git status' alias ga='git add' alias gaa='git add --all' alias gc='git commit' alias gcm='git commit -m' alias gp='git push' alias gpl='git pull' alias gl='git log --oneline --graph --decorate --all' alias gd='git diff' alias gb='git branch' alias gco='git checkout' alias gclone='git clone' # ============================================ # Alias Docker (si disponible) # ============================================ alias dps='docker ps' alias dpsa='docker ps -a' alias di='docker images' alias dex='docker exec -it' alias dlog='docker logs -f' alias dstop='docker stop $(docker ps -q)' alias drm='docker rm $(docker ps -aq)' alias drmi='docker rmi $(docker images -q)' # ============================================ # Alias de sécurité # ============================================ alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias ln='ln -i' # ============================================ # Alias Rsync # ============================================ alias rsync-copy='rsync -avz --progress' alias rsync-move='rsync -avz --progress --remove-source-files' alias rsync-update='rsync -avzu --progress' alias rsync-sync='rsync -avzu --delete --progress' # ============================================ # Alias de date et heure # ============================================ alias now='date +"%d-%m-%Y %T"' alias nowdate='date +"%d-%m-%Y"' alias nowtime='date +"%T"' # ============================================ # Alias journalctl (systemd logs) # ============================================ alias jctl='journalctl -xe' alias jctlf='journalctl -f' alias jctlu='journalctl -u' # ============================================ # Fonctions utiles # ============================================ # Créer et entrer dans un répertoire mkcd() { mkdir -p "$1" && cd "$1" } # Extraction intelligente d'archives extract() { if [ -f "$1" ]; then case "$1" in *.tar.bz2) tar xjf "$1" ;; *.tar.gz) tar xzf "$1" ;; *.tar.xz) tar xJf "$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' ne peut pas être extrait avec cette fonction" ;; esac else echo "'$1' n'est pas un fichier valide" fi } # Trouver les fichiers les plus volumineux bigfiles() { du -h "$1" 2>/dev/null | sort -rh | head -n ${2:-10} } # Backup rapide d'un fichier backup() { cp "$1" "$1.backup-$(date +%Y%m%d-%H%M%S)" } # Recherche rapide de fichiers ff() { find . -type f -iname "*$1*" } # Recherche rapide de répertoires fd() { find . -type d -iname "*$1*" } # ============================================ # Variables d'environnement # ============================================ export EDITOR=nano export VISUAL=nano export PAGER=less # Configuration de less export LESS='-R -M -i' export LESSHISTFILE=- # Couleurs pour man pages export LESS_TERMCAP_mb=$'\e[1;32m' export LESS_TERMCAP_md=$'\e[1;32m' export LESS_TERMCAP_me=$'\e[0m' export LESS_TERMCAP_se=$'\e[0m' export LESS_TERMCAP_so=$'\e[01;33m' export LESS_TERMCAP_ue=$'\e[0m' export LESS_TERMCAP_us=$'\e[1;4;31m' # ============================================ # Message de bienvenue # ============================================ echo "🚀 Configuration bash personnalisée chargée (v{{ bash_config_version }})" echo "📝 Pour voir tous les alias: alias" echo "💡 Fonctions disponibles: mkcd, extract, bigfiles, backup, ff, fd" echo "📦 Rsync shortcuts: rsync-copy, rsync-move, rsync-update, rsync-sync" - name: Créer le fichier nanorc personnalisé copy: dest: /etc/nanorc mode: '0644' content: | ## Configuration Nano personnalisée set autoindent set tabsize 4 set tabstospaces set linenumbers set mouse set smooth set softwrap set constantshow set casesensitive ## Activer la coloration syntaxique include "/usr/share/nano/*.nanorc" ## Raccourcis personnalisés bind ^S savefile main bind ^Q exit all bind ^F whereis main bind ^Z undo main bind ^Y redo main - name: Appliquer les configurations pour les utilisateurs existants block: - name: Récupérer la liste des utilisateurs avec home directory shell: | getent passwd | awk -F: '$3 >= 1000 && $6 ~ /^\/home/ {print $1":"$6}' register: users_list changed_when: false - name: Créer un lien symbolique vers la config globale pour chaque utilisateur file: src: /etc/profile.d/custom_bash.sh dest: "{{ item.split(':')[1] }}/.bash_custom" state: link owner: "{{ item.split(':')[0] }}" group: "{{ item.split(':')[0] }}" force: yes loop: "{{ users_list.stdout_lines }}" when: users_list.stdout_lines | length > 0 - name: Ajouter le sourcing de la config dans .bashrc des utilisateurs lineinfile: path: "{{ item.split(':')[1] }}/.bashrc" line: "[ -f ~/.bash_custom ] && source ~/.bash_custom" state: present create: yes owner: "{{ item.split(':')[0] }}" group: "{{ item.split(':')[0] }}" mode: '0644' loop: "{{ users_list.stdout_lines }}" when: users_list.stdout_lines | length > 0 - name: Installer des outils utiles (optionnel) package: name: - nano - htop - curl - wget - git - tree - ncdu - rsync - sudo state: present ignore_errors: yes - name: Vérifier que la configuration est bien chargée shell: | bash -c 'source /etc/profile.d/custom_bash.sh && echo "Configuration OK"' register: config_check changed_when: false - name: Afficher le résultat de la configuration debug: msg: - "✅ Configuration bash déployée avec succès sur {{ ansible_hostname }}" - "📦 Statut: {{ config_check.stdout }}" - "👤 Nombre d'utilisateurs configurés: {{ users_list.stdout_lines | length }}" - name: Créer un fichier de rappel des commandes utiles copy: dest: /etc/motd mode: '0644' content: | ╔═══════════════════════════════════════════════════════════╗ ║ Serveur: {{ ansible_hostname }} ║ OS: {{ ansible_distribution }} {{ ansible_distribution_version }} ║ Configuration bash personnalisée active ✓ ╚═══════════════════════════════════════════════════════════╝ 📌 Commandes utiles: • ll, la, l : Lister les fichiers • gs, ga, gc : Raccourcis Git • ports : Voir les ports ouverts • myip : Afficher l'IP publique • extract : Extraire une archive • mkcd : Créer et entrer dans un dossier 💡 Tapez 'alias' pour voir tous les alias disponibles