Linux操作系统的绝对路径和相对路径详解

  • Post author:
  • Post category:linux


Linux操作系统中存在着两种路径:绝对路径和相对路径。

在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《

Linux文件系统的层次结构

》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。

指明一个文件存放的位置,有 2 种方法,分别是使用绝对路径和相对路径。

我们知道,Linux 系统中所有的文件(目录)都被组织成以根目录“/”开始的倒置的树状结构,如图 1 所示。




图 1 Linux系统文件组织结构示意图



绝对路径一定是由根目录 / 开始写起。例如,使用绝对路径的表示方式指明 bin 文件所在的位置,该路径应写为 /usr/bin,测试代码如下:

[root@localhost ~]# bin

bash: bin: command not found   <– 没有找到

[root@localhost ~]# /usr/bin

bash: /usr/bin: is a directory   <– 是一个文件

可以看到,如果仅传递给 Linux 系统一个文件名,它无法找到指定文件;而当将 bin 文件的绝对路径传递 Linux 系统时,它就可以成功找到。


和绝对路径不同,相对路径不是从根目录 / 开始写起,而是从当前所在的工作目录开始写起。使用相对路径表明某文件的存储位置时,经常会用到前面讲到的 2 个特殊目录,即当前目录(用 . 表示)和父目录(用 .. 表示)。

举个例子,当我们使用 root 身份登录 Linux 系统时,当前工作目录默认为 /root,如果此时需要将当前工作目录调整到 root 的子目录 Desktop 中,当然可以使用绝对路径,示例代码如下:

[root@localhost ~]# pwd     <– 显示当前所在的工作路径

/root

[root@localhost ~]# cd /root/Desktop

[root@localhost Desktop]# pwd

/root/Desktop

注意,这里所使用的 pwd 和 cd 命令,目前只需知道它们的功能即可,具体用法会在后续文章中作详细讲解。

可以看到,通过使用绝对路径,我们成功地改变了当前工作路径。但除此之外,使用相对路径的方式会更简单。因为目前处于 /root 的位置,而 Desktop 就位于当前目录下,所以:

[root@localhost ~]# pwd    <– 显示当前所在的工作路径

/root

[root@localhost ~]# cd ./Desktop

[root@localhost Desktop]# pwd

/root/Desktop

此代码中,./Desktop 表示的就是 Destop 文件相对于 /root 所在的路径。

再举一个例子,如果以 root 身份登录 Linux 系统,并实现将当前工作目录由 /root 转换为 /usr 目录,有以下 2 种方式:

#使用绝对路径

[root@localhost ~]# pwd <– 显示当前所在的工作路径

/root

[root@localhost ~]# cd /usr

[root@localhost ~]# pwd

/usr

#使用相对路径

[root@localhost ~]# pwd <– 显示当前所在的工作路径

/root

[root@localhost ~]# cd ../usr <– 相对 root,usr 位于其父目录 /,因此这里要用到 ..

[root@localhost ~]# pwd

/usr

总之,绝对路径是相对于根路径 / 的,只要文件不移动位置,那么它的绝对路径是恒定不变的;而相对路径是相对于当前所在目录而言的,随着程序的执行,当前所在目录可能会改变,因此文件的相对路径不是固定不变的。

我们在访问文件或文件夹的时候,其实都是通过路径来操作的。两种路径在实际操作中能起到同等的作用。

在开始具体介绍之前,我们需要了解Linux的文件系统是谱系结构。在谱系的最上层是根文件夹。根文件夹由“/”来表示。根系下面有孩子文件夹,孩子的下面有孙子文件夹,以此类推。所有的文件就包含在这些文件夹里面。


绝对路径永远都是相对于根文件夹的。它们的标志就是第一个字符永远都是“/”。


相对路径永远都是相对于我们所处的文件夹位置。它们的第一个字符没有“/”。

下面是图例:

第一行:我们运行pwd(print working directory)来确认我们所处于的文件夹位置。

第四行:我们在相对路径下运行ls(list)。Document就在我们所处于的文件夹里面。这条命令的结果会随着我们所处的不同位置而有所不同。如果我们有另一个用户叫做Bob,当我们在Bob的房子文件夹下,我们就得到在Bob 房子文件夹下的Document文件夹下的所有文件了。

第七行:我们在绝对路径下运行ls。无论我们所处在什么路径下,我们得到的结果都会是一样的