02 目录与路径

学习目标

  • 能判断当前所在目录。
  • 能列出目录内容并切换目录。
  • 能理解绝对路径、相对路径、家目录和上级目录。

命令总览

命令用途含义基本用法例子
pwd显示当前目录print working directory,打印当前工作目录pwdpwd
ls列出文件和目录list,查看目录内容ls [选项] [路径]ls -lah
cd切换目录change directory,改变当前目录cd 路径cd /var/log
tree树状显示目录以层级结构展示目录内容tree [路径]tree .
dirname取路径中的目录部分从路径里去掉最后的文件名或目录名dirname 路径dirname /tmp/a.txt
basename取路径中的文件名部分从路径里取最后一段名称basename 路径basename /tmp/a.txt
realpath规范化并解析路径在 GNU/Linux 上输出 canonical absolute pathrealpath [选项] 路径realpath -e -- .
readlink读取符号链接查看链接目标;选项依实现不同readlink 路径readlink /proc/self/exe

常用场景

查看当前位置和当前目录文件:

pwd
ls -lah -- .

切换到常见目录:

cd ~
cd ..
cd /var/log
cd -

查看目录层级:

tree .
tree -L 2 .

拆分路径:

dirname /home/user/project/app.py
basename /home/user/project/app.py
realpath -e -- .

新手注意

  • / 开头的是绝对路径,例如 /home/user。
  • 不以 / 开头的是相对路径,例如 ./data、../logs。
  • ~ 表示当前用户的家目录。
  • . 表示当前目录,.. 表示上一级目录。
  • ls -lah 很常用:-l 显示详细信息,-a 显示隐藏文件,-h 使用易读大小。
  • tree 有些系统默认没有安装;没有时先用 ls。
  • 符号链接显示的路径与最终对象可能不同;写入、删除和递归操作前要解析并核对绝对路径。
  • WSL 的 /mnt/c/... 指向 Windows 文件系统;权限、大小写和 I/O 性能可能与 Linux 家目录不同。
  • 变量和带空格路径要引用,例如 cd -- "$HOME/My Project"。

临时目录练习

先按 安全实验环境 创建唯一目录,然后运行:

path_lab=$(mktemp -d "$lab_real/path-lab.XXXXXX") || exit 1
mkdir -- "$path_lab/real dir"
ln -s -- "$path_lab/real dir" "$path_lab/link dir"
cd -- "$path_lab/link dir"
printf 'logical=%s\n' "$PWD"
printf 'physical=%s\n' "$(pwd -P)"
realpath -e -- .
cd -- "$lab_real"

解释 logical path、physical path 与符号链接解析的区别,并用 readlink -- "$path_lab/link dir" 检查链接保存的目标文本。$lab_real 来自导论,不要在新的 Shell 中凭空假设它仍存在;练习目录保留供人工检查,不自动递归删除。

参考资料