路径简介
路径(Path)是一个字符串,用于唯一标识目录结构中的位置。它遵循目录树层次结构,其中由分隔符分隔的组件来标识目录中的节点。
历史
1960 年代的 Multics 项目中首次引入了带有目录(使用 >
来作为分隔符)的分层文件系统。
1970 年代出现的 Unix 继承了 Multics 的大部分遗产,但是引入了斜杠 /
作为起目录分隔符,而 Linux 和 MacOS 都继承了这一点。
1981 年的 MS-DOS 1.0 并不支持文件目录,并且他的命令支持一种 dir /w
这样的开关参数语法(继承自 IBM)。之后的 2.0 版本中 MS-DOS 添加了目录支持,而由于 /
作为开关参数前缀,为了实现向后兼容性他使用了反斜杠 \
来作为目录分隔符。
绝对路径和相对路径
要理解绝对路径和相对路径需要知道两个概念:
- 根目录(root directory): 目录树层次结构的最顶层目录,类 Unix 下就是
/
,Windows 中每个分区具有自己的根目录(即没有统一的根目录),因此需要携带驱动器号因此完整的就是C:\
- 工作目录(Working directory): 与进程关联的目录,其中 cd 这样的命令就是更改工作目录的。大多数操作系统中
.
表示当前工作目录,..
表示工作目录的父目录
所谓的绝对路径就是完整指向文件系统中一个位置的路径,他必须包含根目录。而相对路径必须基于某个给定的工作目录开始,如果工作目录更改相对目录指向的位置也会发生更改。
常见 URL 介绍
操作系统 | Shell | 根目录 | 目录分隔符 | 当前目录 | 父目录 | 家目录 | 示例 |
---|---|---|---|---|---|---|---|
类 Unix | sh | / |
/ |
. |
.. |
~ |
/home/user/docs/Letter.txt /../../test.txt /~/.rcinfo |
WIndows | cmd | [drive_letter]:\ /\\[server]\[sharename]\ |
\ or / |
. |
.. |
C:\user\doc\Letter.txt /../../test.txt /\\Server01\user\docs\Letter.txt |
|
WIndows | powershell | [drive_letter]:\ /\\[server]\[sharename]\ |
\ or / |
. |
.. |
~ |
C:\user\doc\Letter.txt /../../test.txt /\\Server01\user\docs\Letter.txt |
Note
\\[server]\[sharename]\
是 Windows UNC,用于描述网络资源,主要就是 smb 协议共享的网络资源。还有一种方案是 smb://hostname/directory/source
这样的形式
编程语言中的路径
大多数编程语言都是用底层操作系统的路径表示形式:
C
uxFile = fopen("project/readme.txt", "r")
winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")
但是这种情况通常会阻碍程序的可移植性,因此通常也会提供类似 File.separator
来在不同操作系统中返回 /
或 \
。而对于 windows 这样的 C:\
的形式通常会使用相对路径或者全局环境变量来实现跨系统支持。