跳到内容

元数据卡

  • 前置知识:ch02-file-operations
  • 预计时间:10 分钟
  • 阅读模式:理解原理比记住参数重要

一个你没想过的问题

"你刚才敲了 whoami,它找到了。你敲了 ls,它也找到了。"工坊主人不知道什么时候坐到了你的旁边。"但你想过没有——电脑是怎么知道 ls 在哪的?你的终端里并没有一个叫 ls 的程序摆在眼前。"

你愣了一下。"对哦……我从来没考虑过这个问题。"

"你身上一直带着一张地图。"工坊主人指了指你的胸口。"你走到哪都带着它,但你自己看不见。"

env:你的隐形背包

你的终端会话背后,Shell 一直维护着一组环境变量——其实就是一些键值对,告诉程序关于你和系统的基本信息。

bash
# 看看你身上背着哪些信息
env | head -10

# 查看单个变量
echo $HOME     # 你的家目录
echo $USER     # 你的用户名
echo $SHELL    # 你在用什么 Shell
echo $PATH     # 命令搜索路径(重点!)

语言:Shell (Bash/Zsh) 如何运行:直接输入 预期输出:变量对应的值——$HOME 一般是 /home/steven你试试echo $LANG 看系统语言,echo $PWD 看当前目录

看到 $ 了吗?在 Shell 里,$变量名 表示引用这个变量。提示符上的 ~$HOME 基本等价。

PATH:Shell 的地图

重点来了——PATH。这是你所有命令能被找到的秘密。

bash
# 看看 PATH 里有什么
echo $PATH

# 输出示例:
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/home/steven/.local/bin

语言:Shell (Bash/Zsh) 如何运行:直接输入 预期输出:一串用冒号(:)隔开的目录路径 你试试which ls 查看 ls 具体在哪个目录,which python3 看 Python 在哪

PATH 的工作原理很简单。当你在终端输入 ls

  1. Shell 看 PATH:/usr/local/bin:/usr/bin:/bin:…
  2. 从左到右,在第一个目录里找 ls
  3. /usr/bin 里找到了——执行它!不再往后找

如果两个目录里有同名的程序,只执行第一个找到的。 这就是为什么你装新版本的程序后,有时需要把它的目录加到 PATH 前面。

which:查命令的来源

bash
# 看看某个命令到底在哪个目录
which ls
# /usr/bin/ls

which python3
# /usr/bin/python3

which -a ls
# 显示所有找到的 ls(不只是第一个)

语言:Shell (Bash/Zsh) 如何运行which <命令名>预期输出:命令的完整路径,或 "not found" 你试试which cd —— 等等,它可能什么都没输出。因为 cd 是 Shell 内置命令,不是外部程序。

export:给自己加点料

你可以创建自己的环境变量:

bash
# 设置一个变量——但只在当前会话有效
MY_VAR="Hello from my shell"
echo $MY_VAR
# Hello from my shell

# 让子进程也能访问它(用 export)
export MY_VAR="子进程也能看到我了"

语言:Shell (Bash/Zsh) 如何运行:测试创建,echo 确认值 你试试export WORKSHOP_NAME="变量村" && echo $WORKSHOP_NAME

不加 export 的变量只在当前 shell 可见。加了 export,你新开的程序也能看到它。

.bashrc / .zshrc:让变量活到下次

上面创建的变量在你关掉终端之后就消失了。要让它永久生效,需要写进 Shell 的配置文件。

Bash 用户写 ~/.bashrc,Zsh 用户写 ~/.zshrc。不确定自己在用哪个?echo $SHELL 告诉你。

bash
# 用 echo 加上 >> 追加一行到配置文件
echo 'export MY_VAR="Hello from my shell"' >> ~/.bashrc

# 重新加载——让改动立即生效
source ~/.bashrc

语言:Shell (Bash/Zsh) 如何运行:先用 export 测试变量,再写入配置文件,最后 source 重载 你试试:把 ~/my-tools 加入 PATH:export PATH="$HOME/my-tools:$PATH"(先测试,再写进配置文件)

把自定义路径加入 PATH

bash
# 先测试(当前会话)
export PATH="$HOME/my-tools:$PATH"
echo $PATH
# /home/steven/my-tools:/usr/local/bin:/usr/bin:... 

# 确认能工作后,写进配置文件
echo 'export PATH="$HOME/my-tools:$PATH"' >> ~/.bashrc

注意:写入时用的 >> 追加,不是 > 覆盖。写错 .bashrc 会导致 Shell 启动时报错。

改坏了怎么办? 如果你把配置文件弄乱了,可以从 /etc/skel/.bashrc 恢复默认版本,或者新建一个空的:

bash
echo "# Default bashrc" > ~/.bashrc
source ~/.bashrc

旅人笔记

环境变量是 Shell 的隐形背包。env 查看全部。
$变量名 引用变量的值。
PATH 是 Shell 找命令的目录清单,按顺序检查。
which 查某个命令实际存哪。
export 让变量传递给子进程。
想永久生效?写进 .bashrc.zshrc,然后用 source 重载。


→ 下一步:通配符和管道

你现在能创建、修改、删除文件了。但你有一堆文件要批量处理怎么办?一个一个敲?

前往 → 通配符和管道——批量施法

Built with VitePress | Software Systems Atlas