实战

alias ll='ls -lh'
alias la='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias gs='git status'
alias gd='git diff'
alias dc='docker compose'

# 看所有
alias

# 看某个
alias ll

# 取消
unalias ll

持久化

写到 ~/.bashrc(bash)或 ~/.zshrc(zsh):

echo "alias ll='ls -lh'" >> ~/.bashrc
source ~/.bashrc                       # 让当前 shell 生效

实用别名集

# 文件操作(防误删)
alias rm='rm -i'             # 删前问
alias cp='cp -i'
alias mv='mv -i'

# ls 系列
alias ll='ls -lh'
alias la='ls -lha'
alias l='ls'
alias lt='ls -ltr'           # 按时间排序

# 导航
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# git
alias g='git'
alias gs='git status -sb'
alias gd='git diff'
alias gco='git checkout'
alias gl='git log --oneline --graph --decorate'

# 系统
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias mkdir='mkdir -p'
alias h='history'
alias c='clear'

# 网络
alias ports='sudo ss -tlnp'
alias myip='curl -s ifconfig.me'

# 危险命令加确认(root 用)
alias sudo='sudo '           # ★ 让 alias 能跟在 sudo 后展开

sudo + alias 的坑

alias ll='ls -lh'
sudo ll                       # ❌ 不展开——sudo 不查 alias

解决:

alias sudo='sudo '            # 注意末尾空格——让下一个词也走 alias
sudo ll                       # ✓ 现在能用

看命令的真实身份

type ls
# ls is aliased to `ls --color=auto'

type -a ls
# ls is aliased to `ls --color=auto'
# ls is /usr/bin/ls

\ls                           # 临时绕过 alias(前面加反斜杠)
command ls                    # 同上
/usr/bin/ls                   # 绝对路径

function(更灵活的"alias")

alias 只能简单替换,不能接参数处理:

# ❌ alias 做不到
alias mkcd='mkdir $1 && cd $1'

# ✓ 用函数
mkcd() {
    mkdir -p "$1" && cd "$1"
}

  • alias 只在交互式 shell 默认生效——脚本里需要 shopt -s expand_aliases
  • alias 会覆盖系统命令——alias ls='ls --color' 是常见做法,但深度别名可能让人困惑
  • alias 不能传参——要传参用 function