Shell Aliases

Typing docker-compose up -d fifty times a day? Create an alias. Aliases are shortcuts that save keystrokes and prevent typos.

Create an Alias

Terminal
$alias ll='ls -la'
$ll
(runs ls -la)

This only lasts for the current session.

List All Aliases

Terminal
$alias
alias ll='ls -la' alias la='ls -A' alias l='ls -CF'

Remove an Alias

Terminal
$unalias ll

Make Aliases Permanent

Add to ~/.bashrc (or ~/.zshrc for zsh):

hljs bash
# ~/.bashrc

# Navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ~='cd ~'

# List files
alias ll='ls -la'
alias la='ls -A'
alias l='ls -CF'

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

# Git
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline'

# Docker
alias dc='docker-compose'
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dps='docker ps'

# System
alias update='sudo apt update && sudo apt upgrade'
alias ports='ss -tulpn'
alias myip='curl -s ifconfig.me'

Then reload:

Terminal
$source ~/.bashrc

Useful Aliases

Quick Editing

hljs bash
alias bashrc='nano ~/.bashrc'
alias hosts='sudo nano /etc/hosts'
alias reload='source ~/.bashrc'

Directory Shortcuts

hljs bash
alias projects='cd ~/projects'
alias www='cd /var/www'
alias logs='cd /var/log'

Command Improvements

hljs bash
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
alias free='free -h'

Safety Net

hljs bash
# Ask before overwriting
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

# Prevent accidental recursion
alias rm='rm -I --preserve-root'
alias chmod='chmod --preserve-root'
alias chown='chown --preserve-root'

Alias vs Function

Aliases can't take arguments in the middle. Use functions for that:

hljs bash
# Alias - arguments go at the end
alias greet='echo Hello'
greet World  # "Hello World"

# Function - arguments anywhere
mkcd() {
    mkdir -p "$1" && cd "$1"
}
mkcd new-project  # creates and enters directory

Check What an Alias Does

Terminal
$type ll
ll is aliased to 'ls -la'
$type cd
cd is a shell builtin
$type grep
grep is aliased to 'grep --color=auto'

Bypass an Alias

Terminal
$# Use the original command
$\rm file.txt
(uses rm without -i alias)
$command rm file.txt
(same effect)

Don't Over-Alias

Too many aliases make you dependent on your config. Keep them for truly frequent commands. You should still know the real commands.

Complete Setup Example

hljs bash
# ~/.bashrc additions

# ============= ALIASES =============

# Navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ~='cd ~'
alias -- -='cd -'

# Listing
alias ls='ls --color=auto'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

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

# Convenience
alias c='clear'
alias h='history'
alias j='jobs -l'

# Network
alias ports='ss -tulpn'
alias myip='curl -s ifconfig.me'
alias ping='ping -c 5'

# Git shortcuts
alias g='git'
alias gs='git status'
alias ga='git add'
alias gc='git commit -m'
alias gp='git push'
alias gpl='git pull'
alias gd='git diff'
alias gl='git log --oneline -10'

# Docker shortcuts
alias d='docker'
alias dc='docker-compose'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'

# ============= FUNCTIONS =============

# Create and enter directory
mkcd() { mkdir -p "$1" && cd "$1"; }

# Extract various archive types
extract() {
    case "$1" in
        *.tar.gz)  tar xzf "$1" ;;
        *.tar.bz2) tar xjf "$1" ;;
        *.zip)     unzip "$1" ;;
        *.gz)      gunzip "$1" ;;
        *)         echo "Unknown format" ;;
    esac
}
Knowledge Check

Where should you add aliases to make them permanent?

Quick Reference

CommandPurpose
alias name='cmd'Create alias
aliasList all aliases
unalias nameRemove alias
type nameCheck what name does
\commandBypass alias
source ~/.bashrcReload config

Key Takeaways

  • Aliases are shortcuts for commands
  • Add to ~/.bashrc for persistence
  • Use functions when arguments need flexibility
  • type command shows what runs
  • \command bypasses aliases
  • Don't over-alias - know the real commands

Congratulations! You've completed Chapter 14: Sysadmin Essentials.

Next chapter: Real-World Linux - putting it all together.