大家好,我是冯哥的缓存。今天这篇聊一下Shell终端配置:.bashrc、.zshrc 是什么,怎么设 alias 别名,怎么配环境变量,怎么把提示符变漂亮。
一、Shell 是什么,bashrc 又是什么
1. Shell 的角色
Shell 是你和操作系统之间的"翻译官"。在终端里敲的 ls、cd、grep 这些命令,都是 Shell 负责解释并传给内核执行的。
常见的 Shell 有:
| | |
|---|
| | |
| | |
| 语法不一样(和 bash/zsh 不兼容),但自动补全最好用 | |
| | |
如果你不确定选哪个,bash 是稳妥的起点,因为所有 Linux 服务器都有它。
💡 提示: 查看当前用的是哪个 Shell:
echo$SHELL
查看系统里有哪些 Shell:
cat /etc/shells
2. 配置文件在哪里
Shell 启动时会自动读取一个配置文件,在里面设置的东西(alias、环境变量、函数等)对这次会话全程生效。
| | | |
|---|
| ~/.bash_profile | ~/.bashrc | 日常改 .bashrc 就够了,如果这三个文件都存在,按顺序取第一个 |
| ~/.zprofile | ~/.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 转义符说明:
颜色代码格式:$$\033[颜色代码m$$或者$$\e[0;颜色代码m$$
一个稍微好看点的配置示例:
# 两行提示符:第一行显示完整路径和时间,第二行是输入区域
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 | |
z | |
sudo | |
extract | extract 文件名 |
colored-man-pages | |
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. 常用历史相关快捷键
六、实用配置模板:一份拿来就能用的 ~/.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 配置的核心三件套:
| |
|---|
| |
| export 设置,PATH 加目录,写进 .bashrc 持久化 |
| 改 PS1(bash),或装 oh-my-zsh/Starship |
| Ctrl+R |
Shell 配置是用 Linux 越来越顺手的关键一步。这里的内容是入门,后续还可以深入 Shell 脚本编写、函数库管理、多机器配置同步等,但那些是进阶玩法,今天先把基础打扎实。
下篇预告:Linux Shell 脚本编写入门——变量、条件、循环、函数