2.2 当前目录与路径
前置知识:第一次和 Shell 对话
预计时间:8 分钟
练习环境:Bash/Zsh 与常见 Unix 命令
完成标志:能解释当前目录、绝对路径、相对路径、
~和..
刚才的四条命令都没有改动文件。如果现在执行 touch note.txt,文件会出现在哪里?答案取决于 Shell 的当前工作目录。先把位置弄清楚,后面的文件操作才不会落错地方。
在哪里,看见什么
bash
pwd
ls
ls -la1
2
3
2
3
pwd打印当前工作目录。ls列出非隐藏条目。ls -la显示详情,并包含以.开头的名字。
不要假设输出是 /home/steven。Linux 常见 /home/用户名,macOS 常见 /Users/用户名,容器和远程主机还会有其他布局。
用临时目录练习移动
bash
workdir=$(mktemp -d)
mkdir -p "$workdir/project/src"
cd "$workdir"
pwd
cd project/src
pwd
cd ..
pwd
cd -
pwd1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
路径分两类:
/tmp/example从根目录/开始,是绝对路径。project/src从当前目录开始,是相对路径。
特殊写法:
| 写法 | 含义 |
|---|---|
. | 当前目录 |
.. | 上一级目录 |
cd - | 回到上一个工作目录 |
cd | 回到家目录 |
~ | Shell 展开的家目录简写 |
~ 不是当前目录。它与 $HOME 也不是纯文本替换关系:
bash
printf '%s\n' ~
printf '%s\n' "$HOME"
printf '%s\n' '~'1
2
3
2
3
第三行会原样打印 ~,因为引号阻止了波浪号展开。
补全和文件名边界
输入路径前几个字符后按 Tab,可以减少拼写错误。多个候选项时,不同 Shell 的展示方式略有差异。
Linux 文件名通常区分大小写;macOS 的默认文件系统常不区分,但项目和部署环境未必如此。跨平台仓库应避免只靠大小写区分两个文件。
清理练习区前,先离开它:
bash
cd
printf 'remove after inspection: %s\n' "$workdir"
rm -r -- "$workdir"1
2
3
2
3
这里的变量由 mktemp -d 生成并始终被引用。真实工作中仍应先用 ls -ld -- "$workdir" 检查目标。
→ 下一步:文件操作