Skip to content

Linux 路径与目录

1. Linux 的目录结构

Linux 的目录结构和 Windows 不太一样。

Windows 通常使用盘符:

text
C:\
D:\
E:\

Linux 没有 C:D: 这样的盘符概念。

Linux 所有文件和目录都从根目录开始:

text
/

整个文件系统可以理解成一棵树:

text
/
├── home
│   └── user
│       ├── Documents
│       ├── Downloads
│       └── project
├── etc
├── usr
├── var
└── tmp

其中 / 就是 Linux 文件系统的最顶层目录。


2. 根目录 /

Linux 中:

text
/

表示根目录。

例如:

bash
cd /

进入根目录。

查看根目录中的内容:

bash
ls /

通常可以看到:

text
bin
boot
dev
etc
home
lib
media
mnt
opt
proc
root
run
srv
tmp
usr
var

3. 当前目录

在 Shell 中,我们始终处于某一个目录。

查看当前所在目录:

bash
pwd

例如:

text
/home/moonlit/project

表示当前位于:

text
/
└── home
    └── moonlit
        └── project

4. 绝对路径

绝对路径是从:

text
/

开始写的完整路径。

例如:

text
/home/moonlit/Documents

这是一个绝对路径。

因为它从根目录 / 开始。

进入这个目录:

bash
cd /home/moonlit/Documents

无论当前在哪个目录,都可以使用绝对路径访问它。

例如当前位于:

text
/etc

依然可以:

bash
cd /home/moonlit/Documents

5. 相对路径

相对路径是相对于当前目录而言的路径。

假设当前目录:

text
/home/moonlit

里面有:

text
Documents
Downloads
project

可以直接:

bash
cd Documents

这里的:

text
Documents

就是相对路径。

完整路径其实是:

text
/home/moonlit/Documents

6. 绝对路径和相对路径的区别

假设当前目录是:

text
/home/moonlit

进入 Documents:

绝对路径

bash
cd /home/moonlit/Documents

相对路径

bash
cd Documents

两种方式最终进入的是同一个目录。

简单理解:

text
绝对路径:从 / 开始找
相对路径:从当前位置开始找

7. . 当前目录

Linux 中:

text
.

表示当前目录。

例如当前目录:

text
/home/moonlit/project

那么:

text
.

就代表:

text
/home/moonlit/project

例如:

bash
ls .

相当于:

bash
ls

8. .. 上一级目录

text
..

表示当前目录的父目录。

例如当前:

text
/home/moonlit/project

执行:

bash
cd ..

会进入:

text
/home/moonlit

再次:

bash
cd ..

进入:

text
/home

再执行:

bash
cd ..

进入:

text
/

9. 多级返回

可以连续使用 ..

例如当前:

text
/home/moonlit/project/src

执行:

bash
cd ../..

相当于:

text
src

project

moonlit

最终进入:

text
/home/moonlit

10. ~ 用户主目录

text
~

表示当前用户的主目录。

例如用户名是:

text
moonlit

那么:

text
~

通常表示:

text
/home/moonlit

执行:

bash
cd ~

可以快速回到用户主目录。

也可以直接:

bash
cd

效果基本相同。


11. 使用 ~ 构造路径

例如:

bash
cd ~/Documents

实际上相当于:

bash
cd /home/moonlit/Documents

再比如:

bash
cd ~/.config

表示进入:

text
/home/moonlit/.config

所以在 Linux 配置文件中,经常能看到:

text
~/.config
~/.local
~/.cache

12. - 上一次所在目录

text
-

表示上一次所在的目录。

例如:

bash
cd /etc

然后:

bash
cd ~/Documents

现在执行:

bash
cd -

会重新回到:

text
/etc

再次:

bash
cd -

又会回到:

text
~/Documents

适合在两个目录之间快速切换。


13. /~ 不一样

初学时很容易把:

text
/

和:

text
~

混淆。

它们完全不同。

/

系统根目录:

text
/

整个 Linux 文件系统的最顶层。

~

当前用户的主目录,例如:

text
/home/moonlit

所以:

bash
cd /

和:

bash
cd ~

去的是完全不同的位置。


14. 路径中的 /

Linux 使用:

text
/

分隔目录。

例如:

text
/home/moonlit/Documents/project

可以拆成:

text
/
home/
moonlit/
Documents/
project

表示:

text
根目录
└── home
    └── moonlit
        └── Documents
            └── project

15. Linux 路径区分大小写

Linux 文件系统通常区分大小写。

例如:

text
Documents
documents
DOCUMENTS

可以是三个完全不同的目录。

例如:

bash
cd Documents

不等于:

bash
cd documents

这一点和部分 Windows 使用习惯不同。


16. 隐藏文件和目录

Linux 中,以:

text
.

开头的文件或目录通常属于隐藏文件。

例如:

text
.bashrc
.zshrc
.gitconfig
.config
.local

普通:

bash
ls

不会显示它们。

使用:

bash
ls -a

可以查看隐藏文件。

例如:

bash
ls -la ~

查看用户主目录中的所有文件。


17. 常见用户目录

用户主目录通常类似:

text
/home/用户名

例如:

text
/home/moonlit

其中可能包含:

text
Desktop
Documents
Downloads
Music
Pictures
Videos

以及隐藏目录:

text
.config
.local
.cache
.ssh

18. /home

text
/home

通常用于存放普通用户的主目录。

例如:

text
/home/alice
/home/bob
/home/moonlit

如果有三个普通用户:

text
alice
bob
moonlit

那么可能对应三个主目录。


19. /root

text
/root

是 root 用户的主目录。

注意:

text
/root

和:

text
/

不是一回事。

/

text
系统根目录

/root

text
root 用户的主目录

20. /etc

text
/etc

主要存放系统和软件的配置文件。

例如:

text
/etc/ssh
/etc/nginx
/etc/hosts

查看:

bash
ls /etc

很多 Linux 软件的系统级配置都会放在这里。


21. /usr

text
/usr

主要存放用户级程序、库和资源。

常见目录:

text
/usr/bin
/usr/lib
/usr/local

例如很多命令实际位于:

text
/usr/bin

可以使用:

bash
which git

查看某个命令的位置。


22. /var

text
/var

主要存放经常变化的数据。

例如:

text
/var/log
/var/cache

其中:

text
/var/log

常用于保存日志。

例如:

bash
ls /var/log

23. /tmp

text
/tmp

用于存放临时文件。

很多程序运行时会把临时数据放在这里。

例如:

bash
cd /tmp

24. /dev

text
/dev

用于表示设备。

Linux 中有一个重要思想:

text
Everything is a file

很多硬件设备也会以文件形式出现在 /dev 中。

例如:

text
/dev/null
/dev/sda
/dev/tty

25. /proc

text
/proc

是一个虚拟文件系统。

主要提供:

text
进程信息
内核信息
系统运行状态

例如:

bash
cat /proc/cpuinfo

可以查看 CPU 信息。


26. /mnt/media

/mnt

通常用于临时挂载文件系统:

text
/mnt

例如挂载一个磁盘:

text
/mnt/data

/media

很多桌面 Linux 系统会把:

text
U 盘
移动硬盘
光盘

自动挂载到 /media 附近。


27. /opt

text
/opt

通常用于安装一些额外的软件。

例如第三方大型软件可能安装到:

text
/opt/software

28. .config

用户配置文件经常保存在:

text
~/.config

例如:

text
~/.config/nvim

表示 Neovim 配置目录。

完整路径可能是:

text
/home/moonlit/.config/nvim

这也是为什么经常可以看到:

bash
cd ~/.config/nvim

29. .local

用户自己的程序和数据经常位于:

text
~/.local

常见:

text
~/.local/bin
~/.local/share
~/.local/state

例如:

text
~/.local/share/nvim

可能用于保存 Neovim 下载的插件等数据。


30. .cache

text
~/.cache

一般存放程序缓存。

例如:

text
~/.cache/nvim

通常属于可以重新生成的数据。

但不要在不了解内容的情况下随意删除整个:

text
~/.cache

31. 路径中有空格

如果路径包含空格,例如:

text
My Project

直接执行:

bash
cd My Project

Shell 会把它理解成两个参数。

可以使用引号:

bash
cd "My Project"

或者转义空格:

bash
cd My\ Project

32. Tab 自动补全

在输入路径时,不需要总是手动输入完整名称。

例如:

text
Doc

按:

text
Tab

Shell 可能自动补全:

text
Documents/

因此实际使用 Shell 时,应该多使用:

text
Tab

可以减少输入错误。


33. 查看目录本身的信息

例如:

bash
ls -ld Documents

其中:

text
-d

表示显示目录本身,而不是显示目录内部的内容。


34. 创建多级目录

普通:

bash
mkdir project

如果要创建:

text
project/src/components

可以:

bash
mkdir -p project/src/components

其中:

text
-p

表示自动创建缺失的父目录。


35. 一个完整例子

假设当前目录:

text
/home/moonlit

创建项目:

bash
mkdir -p project/src

进入项目:

bash
cd project

现在:

bash
pwd

输出:

text
/home/moonlit/project

进入 src

bash
cd src

返回项目目录:

bash
cd ..

回到主目录:

bash
cd ~

再次进入项目:

bash
cd ~/project

这些命令分别使用了:

text
相对路径
..
~
绝对/主目录路径组合

36. 路径符号速查

符号含义
/根目录
.当前目录
..上一级目录
~当前用户主目录
-上一次所在目录

例如:

bash
cd /

进入根目录。

bash
cd .

仍然停留在当前目录。

bash
cd ..

进入父目录。

bash
cd ~

返回用户主目录。

bash
cd -

返回上一次所在目录。


37. 常见 Linux 目录速查

目录主要用途
/文件系统根目录
/home普通用户主目录
/rootroot 用户主目录
/etc系统配置
/usr程序、库和资源
/var日志、缓存等可变数据
/tmp临时文件
/dev设备文件
/proc内核和进程信息
/mnt临时挂载目录
/media移动设备挂载目录
/opt第三方软件

小结

Linux 路径最重要的是理解下面几个符号:

text
/       根目录
~       用户主目录
.       当前目录
..      上一级目录
-       上一次所在目录

同时要区分:

text
/home/moonlit/project

这种从 / 开始的路径是:

text
绝对路径

而:

text
project/src

这种从当前位置开始计算的路径是:

text
相对路径

只要掌握绝对路径、相对路径、/~...,Linux 中绝大多数目录导航操作就能看懂了。