Alias e funzioni Bash: il terminale su misura che ti fa risparmiare ore

Pubblicato il 13/07/2026 Linux

Ogni sysadmin ha una manciata di comandi che digita decine di volte al giorno: git status, ls -la, un ssh verso lo stesso host, un docker ps con lo stesso filtro. Se li scrivi ancora per intero ogni volta, stai buttando via minuti che in un anno diventano ore. Alias e funzioni in .bashrc (o .zshrc se usi zsh) risolvono il problema una volta per tutte.

Alias: scorciatoie per comandi fissi

Un alias sostituisce una stringa con un'altra prima che la shell la esegua. La sintassi è sempre la stessa:

alias nome='comando da eseguire'

Alcuni classici che vale la pena avere ovunque:

alias ll='ls -lah'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias h='history'
alias c='clear'

Per git, che si digita in continuazione, pochi alias fanno risparmiare un numero enorme di tasti nell'arco di una giornata:

alias gs='git status'
alias ga='git add'
alias gc='git commit -m'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
alias gd='git diff'

Se lavori spesso con Docker o container:

alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dlogs='docker compose logs -f'

Alias con opzioni di sicurezza

Un uso spesso sottovalutato degli alias è aggiungere protezioni ai comandi distruttivi, così da doverle disattivare esplicitamente quando serve:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Con -i il comando chiede conferma prima di sovrascrivere o cancellare. Se in uno script serve il comportamento originale, si bypassa l'alias con il percorso completo (/bin/rm file) o col prefisso backslash (\rm file).

Quando l'alias non basta: le funzioni

Gli alias funzionano bene per sostituzioni semplici, ma non accettano logica né argomenti posizionati con criterio. Per quello servono le funzioni bash, definite nello stesso file:

nome_funzione() {
    comando "$1"
}

Alcuni esempi che uso praticamente ogni giorno.

mkcd: crea una cartella e ci entri subito

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

extract: decomprime qualunque archivio senza ricordare la sintassi

extract() {
    if [ -f "$1" ]; then
        case "$1" in
            *.tar.bz2) tar xjf "$1"   ;;
            *.tar.gz)  tar xzf "$1"   ;;
            *.tar)     tar xf  "$1"   ;;
            *.bz2)     bunzip2 "$1"   ;;
            *.gz)      gunzip  "$1"   ;;
            *.zip)     unzip   "$1"   ;;
            *.rar)     unrar x "$1"   ;;
            *.7z)      7z x    "$1"   ;;
            *) echo "Formato non riconosciuto: $1" ;;
        esac
    else
        echo "File non trovato: $1"
    fi
}

backup: copia rapida con timestamp

backup() {
    cp "$1" "$1.bak_$(date +%Y%m%d_%H%M%S)"
}

findproc: cerca un processo per nome senza sbattersi con ps e grep

findproc() {
    ps aux | grep -i "$1" | grep -v grep
}

meteo: un esempio di funzione che richiama un comando esterno

meteo() {
    curl -s "wttr.in/${1:-}"
}

Qui ${1:-} usa il primo argomento se presente, altrimenti una stringa vuota (wttr.in userà la tua posizione via IP).

Dove metterle: organizzare .bashrc

Riempire .bashrc di decine di alias lo rende presto illeggibile. Meglio separare le cose in un file dedicato, aggiungendo in fondo a ~/.bashrc:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Tutti gli alias e le funzioni personali vanno in ~/.bash_aliases, mentre .bashrc resta pulito e gestisce solo la configurazione generale della shell.

Applicare le modifiche senza riaprire il terminale

Dopo ogni modifica basta ricaricare il file corrente:

source ~/.bashrc

Molti definiscono un alias apposta per questo, tanto è frequente durante la messa a punto:

alias reload='source ~/.bashrc'

Portabilità tra bash e zsh

La sintassi di alias e funzioni qui descritta è identica in bash e zsh: puoi tenere lo stesso file ~/.bash_aliases e caricarlo da entrambi con la stessa riga source, sia da .bashrc che da .zshrc. Le uniche differenze da tenere a mente riguardano funzionalità avanzate come il completamento automatico o il globbing esteso, non la definizione di alias e funzioni in sé.

Verificare cosa è già definito

Per non ridefinire per errore qualcosa che esiste già:

alias               # elenca tutti gli alias attivi
type nome_comando   # dice se è un alias, una funzione, un binario o altro

Con type scopri subito, ad esempio, se ll è un alias tuo o se cd è stato ridefinito come funzione da qualche framework installato in precedenza (oh-my-zsh e simili ne aggiungono parecchi). Investire mezz'ora a costruire il proprio set di alias e funzioni si ripaga in pochi giorni di utilizzo quotidiano del terminale.