当前位置:首页>Linux>Linux 的 Shell 配置攻略——bashrc 与 zshrc 从入门到好用

Linux 的 Shell 配置攻略——bashrc 与 zshrc 从入门到好用

  • 2026-09-15 09:25:12
Linux 的 Shell 配置攻略——bashrc 与 zshrc 从入门到好用

大家好,我是冯哥的缓存。今天这篇聊一下Shell终端配置:.bashrc、.zshrc 是什么,怎么设 alias 别名,怎么配环境变量,怎么把提示符变漂亮。

一、Shell 是什么,bashrc 又是什么

1. Shell 的角色

Shell 是你和操作系统之间的"翻译官"。在终端里敲的 ls、cd、grep 这些命令,都是 Shell 负责解释并传给内核执行的。

常见的 Shell 有:

Shell
特点
默认在哪里
bash
最普及,几乎所有 Linux 发行版默认
Ubuntu/Debian 默认
zsh
功能更强,插件生态丰富
macOS 默认;Ubuntu 需手动安装
fish
语法不一样(和 bash/zsh 不兼容),但自动补全最好用
需手动安装
sh
最简陋的 POSIX Shell,脚本用
通常是 dash 的符号链接

如果你不确定选哪个,bash 是稳妥的起点,因为所有 Linux 服务器都有它。

💡 提示: 查看当前用的是哪个 Shell:

echo$SHELL

查看系统里有哪些 Shell:

cat /etc/shells

2. 配置文件在哪里

Shell 启动时会自动读取一个配置文件,在里面设置的东西(alias、环境变量、函数等)对这次会话全程生效。

Shell
交互式登录 Shell 读取
交互式非登录 Shell 读取
简单记法
bash
~/.bash_profile
 或 ~/.profile
~/.bashrc
日常改 .bashrc 就够了,如果这三个文件都存在,按顺序取第一个
zsh
~/.zprofile
 或 ~/.zshenv
~/.zshrc
日常改 .zshrc 就够了

💡 提示: 大多数 Ubuntu 的 .bash_profile 里会有一行 source ~/.bashrc,这样两者都会读取。所以把东西放到 .bashrc 里,无论登录 Shell 还是普通终端都能生效。

3. 修改配置文件后怎么生效

改完配置文件,新开终端窗口自然生效;不想重开终端,就执行:

source ~/.bashrc    # bash 用户
source ~/.zshrc     # zsh 用户

或者简写:

. ~/.bashrc

二、alias:给长命令取个短名字

这是最立竿见影的配置,用几秒钟换来每天少打一百个字母。

1. alias 语法

alias别名='原命令'

注意:等号两边不能有空格,也不能有注释(#)跟在后面,否则会被当成命令的一部分,原命令里有空格就用引号包起来。

2. 立刻生效的临时 alias

alias ll='ls -alh'

只在当前终端窗口有效,关闭就消失。

3. 永久 alias:写入配置文件

打开 ~/.bashrc(或 ~/.zshrc):

nano ~/.bashrc

在文件末尾加上别名,比如:

# ===== 常用别名 =====
alias ll='ls -alh --color=auto'# 带颜色的详细列表
alias la='ls -A'# 显示隐藏文件
alias l='ls -CF'# 紧凑格式
alias ..='cd ..'# 回上一级
alias ...='cd ../..'# 回两级
alias grep='grep --color=auto'# grep 高亮匹配
aliasdf='df -h'# 硬盘用量人性化显示
aliasdu='du -h'# 文件大小人性化显示
alias free='free -h'# 内存人性化显示
alias cls='clear'# 清屏(习惯 Windows 的手)
alias py='python3'# 少打几个字母
alias pip='pip3'# 同上

# 安全保护(防误操作)
aliasrm='rm -i'# 删除前确认
aliascp='cp -i'# 覆盖前确认
aliasmv='mv -i'# 覆盖前确认

# Git 常用缩写
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph --decorate --all'

保存后:

source ~/.bashrc

4. 给 alias 传参数

alias 不能直接传参数,这时候用函数代替:

# 创建目录并立刻进入
mkcd() {
mkdir -p "$1" && cd"$1"
}

# 查找文件(模糊)
ff() {
    find . -type f -name "*$1*" 2>/dev/null
}

# 解压任何格式(自动识别)
extract() {
case"$1"in
        *.tar.gz|*.tgz)   tar -xzf "$1" ;;
        *.tar.bz2|*.tbz2) tar -xjf "$1" ;;
        *.tar.xz)          tar -xJf "$1" ;;
        *.zip)             unzip "$1" ;;
        *.rar)             unrar x "$1" ;;
        *.7z)              7z x "$1" ;;
        *.gz)              gunzip "$1" ;;
        *)                 echo"不认识的格式: $1" ;;
esac
}

把这些函数也写进 ~/.bashrc 末尾,然后 source ~/.bashrc 即可使用:

mkcd my-project    # 创建 my-project 目录并进入
ff config          # 查找当前目录下所有含 config 的文件
extract archive.zip

三、环境变量:告诉系统去哪里找东西

1. 什么是环境变量

环境变量是一种全局设置,程序启动时可以读取。最常见的是 PATH——它告诉 Shell 去哪些目录里找输入的命令。

echo$PATH
# 输出类似:/usr/local/bin:/usr/bin:/bin:/home/user/.local/bin

2. 临时设置变量

export MY_VAR="hello"
echo$MY_VAR# 输出 hello

关闭终端后消失。

3. 永久设置:写入配置文件

# 在 ~/.bashrc 末尾加
export EDITOR=nano          # 默认编辑器(很多程序会用到,比如 git commit)
export LANG=zh_CN.UTF-8     # 系统语言
export LC_ALL=zh_CN.UTF-8   # 所有语言设置

# 添加自定义目录到 PATH(比如把脚本放在 ~/bin 里)
export PATH="$HOME/bin:$PATH"

# Java(如果手动安装的 JDK)
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
export PATH="$JAVA_HOME/bin:$PATH"

# Python venv(如果有全局 venv)
# source /path/to/venv/bin/activate

⚠️ 注意:PATH 里的目录用冒号 : 分隔,$PATH 是原有内容,一定要带上,否则系统命令都会找不到。

4. 查看所有当前环境变量

env
# 或者只看某一个
echo$HOME
echo$USER
echo$PATH

四、提示符美化:让终端不再像 1990 年

下面三个方案选一个用就行。新手推荐方案三(Starship)或方案二(oh-my-zsh)。

提示符(Prompt)就是每次输入命令前那一行,比如:

user@hostname:~$

可以改成带颜色、显示 Git 分支、显示当前时间、甚至带 Emoji 的样式。

方案一:手动改 PS1(bash)

PS1 是控制 bash 提示符的变量。在 ~/.bashrc 里加:

# 绿色用户名@主机名,蓝色当前目录,白色$符号
PS1='$$\033[01;32m$$\u@\h$$\033[00m$$:$$\033[01;34m$$\w$$\033[00m$$\$ '

PS1 转义符说明:

转义符
含义
\u
当前用户名
\h
主机名(第一个点之前)
\H
完整主机名
\w
当前工作目录(完整路径)
\W
当前工作目录(只显示最后一级)
\t
当前时间(24小时制)
\n
换行
\$
普通用户显示 $,root 显示 #

颜色代码格式:$$\033[颜色代码m$$或者$$\e[0;颜色代码m$$

颜色
代码
重置/默认
00
粗体
01
黑色
30
红色
31
绿色
32
黄色
33
蓝色
34
紫色
35
青色
36
白色
37

一个稍微好看点的配置示例:

# 两行提示符:第一行显示完整路径和时间,第二行是输入区域
PS1='$$\033[01;33m$$[\t]$$\033[00m$$ $$\033[01;32m$$\u@\h$$\033[00m$$:$$\033[01;34m$$\w$$\033[00m$$\n\$ '

效果:

[10:32:45] user@mypc:~/Documents/project
$

方案二:安装 zsh + oh-my-zsh(推荐,效果好)

zsh 的补全和历史功能比 bash 强,oh-my-zsh 是 zsh 的配置框架,一键安装大量主题和插件。

第一步:安装 zsh

sudo apt install zsh

第二步:安装 oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 如果超时,可以搜索‘oh-my-zsh gitee镜像’使用国内源。

⚠️ 注意: 需要能访问 GitHub(国内有时较慢,耐心等待或用镜像)。安装完成后 zsh 会变成默认 Shell。

第三步:改主题

编辑 ~/.zshrc,找到 ZSH_THEME 那行改成喜欢的主题:

ZSH_THEME="agnoster"# 经典斜体分段样式(需要 Powerline 字体)
ZSH_THEME="robbyrussell"# 默认,干净简洁
ZSH_THEME="ys"# 多行,信息丰富
ZSH_THEME="random"# 每次随机换主题(选完觉得哪个好再固定)

常用主题列表:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

第四步:开启常用插件

在 ~/.zshrc 里找到 plugins= 那行:

plugins=(git z sudo extract colored-man-pages zsh-autosuggestions)

插件
功能
git
提供大量 git 别名(gst/ga/gc 等)
z
根据历史记录跳转目录,比 cd 聪明
sudo
双击 Esc 自动在命令前加 sudo
extractextract 文件名
 解压任何格式
colored-man-pages
man 手册带颜色
zsh-autosuggestions
输入命令时自动补全灰色建议(需额外安装)

z 插件需要多次 cd 进入某个目录后才会记住它,刚开始用可能没反应。

安装 zsh-autosuggestions(效果较好,推荐):

git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

然后加到 plugins= 列表里,source ~/.zshrc 生效。

方案三:安装 Starship(最轻量、跨 Shell)

Starship 是一个用 Rust 写的极速提示符工具,支持 bash/zsh/fish,只需一个二进制文件,配置简单,效果好。

# 安装
curl -sS https://starship.rs/install.sh | sh
# 安装完成后需要手动添加 eval "$(starship init bash)" 到配置文件,脚本不会自动添加。

# bash 用户:在 ~/.bashrc 末尾加
eval"$(starship init bash)"

# zsh 用户:在 ~/.zshrc 末尾加
eval"$(starship init zsh)"

生效后自动显示:当前目录、Git 分支状态、Node/Python/Go 版本等,无需额外配置。

配置文件在 ~/.config/starship.toml,可以精细调整每个模块的显示内容和颜色。

五、历史命令优化

1. 调大历史记录条数

在 ~/.bashrc 里加:

HISTSIZE=10000          # 内存中保存的历史条数
HISTFILESIZE=20000      # 历史文件保存的条数
HISTCONTROL=ignoredups  # 不保存重复命令
# 如果想让历史完全去重只保留最新一条
HISTCONTROL=ignoredups:erasedups

2. 搜索历史(最实用技巧)

按 Ctrl+R 进入反向搜索模式,输入关键词,Shell 会找出最近用过的匹配命令:

(reverse-i-search)`docker': docker run -it ubuntu bash

继续按 Ctrl+R 往上翻更早的匹配,按 Enter 执行,按 Esc 取消。

3. 常用历史相关快捷键

快捷键
作用
↑
 / ↓
上下翻历史命令
Ctrl+R
反向搜索历史
!!
重复上一条命令
!关键词
执行最近以该关键词开头的命令
!$
上一条命令的最后一个参数
Alt+.
插入上一条命令的最后一个参数(可以反复按)

六、实用配置模板:一份拿来就能用的 ~/.bashrc 末尾段

把下面这段复制到 ~/.bashrc 末尾,source ~/.bashrc 即可生效:

# ===== 冯哥的缓存 · 实用 bashrc 配置 =====

# ---- 提示符(带颜色,两行) ----
PS1='$$\033[01;33m$$[\t]$$\033[00m$$ $$\033[01;32m$$\u@\h$$\033[00m$$:$$\033[01;34m$$\w$$\033[00m$$\n\$ '

# ---- 历史记录 ----
HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoredups:ignorespace

# ---- 常用别名 ----
alias ll='ls -alh --color=auto'
alias la='ls -A'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
aliasdf='df -h'
alias free='free -h'
alias cls='clear'
alias py='python3'
alias pip='pip3'
aliasrm='rm -i'
aliascp='cp -i'
aliasmv='mv -i'

# Git 别名
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph --decorate --all'

# ---- 实用函数 ----
# 创建目录并进入
mkcd() { mkdir -p "$1" && cd"$1"; }

# 查找文件
ff() { find . -name "*$1*" 2>/dev/null; }

# 解压任何格式
extract() {
case"$1"in
        *.tar.gz|*.tgz)    tar -xzf "$1" ;;
        *.tar.bz2|*.tbz2)  tar -xjf "$1" ;;
        *.tar.xz)           tar -xJf "$1" ;;
        *.zip)              unzip "$1" ;;
        *.rar)              unrar x "$1" ;;
        *.7z)               7z x "$1" ;;
        *.gz)               gunzip "$1" ;;
        *)                  echo"不认识的格式: $1" ;;
esac
}

# 显示当前目录所有文件大小,按从大到小排列
dusort() { du -sh ./* 2>/dev/null | sort -rh; }

# ---- 环境变量 ----
export EDITOR=nano
export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
# ===== 以上结束 =====

# ~/.local/bin 是 systemd 用户级服务安装脚本的默认目录,很多用户态工具会放那里。提前加上可以省事。

七、常见问题

Q:改了 .bashrc 但没生效?

忘了 source ~/.bashrc,或者当前用的是 zsh 而不是 bash,改错文件了。用 echo $SHELL 确认一下。

Q:alias 里有单引号,但命令本身也要用单引号怎么办?

用双引号包整个 alias,内部用单引号:alias mygrep="grep -n '关键词'";或者用函数代替。

Q:安装了 oh-my-zsh 后提示符变了,但字体显示问号或方块?

用了 Powerline 字体的主题(比如 agnoster),需要安装 Nerd Font 或 Powerline 字体才能正常显示。推荐装 Nerd Fonts,在终端模拟器的字体设置里换上即可。

Q:怎么知道 PATH 里有没有某个目录?

echo$PATH | tr':''\n'# 每行一个,更好读

Q:想临时禁用某个 alias?

在命令前加反斜杠,绕过 alias:

\rm file.txt   # 使用真正的 rm,不走 alias rm='rm -i'

八、小结

今天这篇覆盖了 Shell 配置的核心三件套:

内容
一句话总结
alias
给长命令取短名字,写进配置文件永久生效
环境变量
export
 设置,PATH 加目录,写进 .bashrc 持久化
提示符美化
改 PS1(bash),或装 oh-my-zsh/Starship
历史命令
Ctrl+R
 搜索历史,HISTSIZE 调大条数

Shell 配置是用 Linux 越来越顺手的关键一步。这里的内容是入门,后续还可以深入 Shell 脚本编写、函数库管理、多机器配置同步等,但那些是进阶玩法,今天先把基础打扎实。

下篇预告:Linux Shell 脚本编写入门——变量、条件、循环、函数

最新文章

随机文章