Met*_*iel 69 theory path relative-path absolute-path
这是一个理论问题.我在互联网上搜索没有令人满意的运气,我只想了解这个术语是什么.我已经看过Java,JSON等的例子但是我在谷歌或者StackOverflow中找不到一个简单的解释,没有代码需要= P
因此,绝对路径是一种到达某个文件或位置的方式,描述它的完整路径,完整路径,以及它依赖于操作系统(例如,Windows和Linux的绝对路径是不同的)相对路径它是一个路由到从当前位置描述的文件或位置..(两个点)表示目录树中的高级别.我已经清楚这几年了.
搜索时我甚至看到有规范化的文件!我所知道的就是"CANONICAL"意味着"根据规则"之类的东西.
有人可以请理解关于规范的理论吗?=)感谢!!
PD(所以它毕竟不仅仅是一个Ubuntu随机名称)XD
PD2可悲的是我不能给每个人答案,我把它给了帮助我最了解这个概念的那个,但是非常感谢每个人=)
Ker*_* SB 84
制作任何 "规范"的重点是你可以比较两件事.例如,两者../../here/bar/x
并./test/../../bar/x
可能指的是同一个位置,但你不能做两个路径上的文本比较.但是,如果你将它们变成规范表示,它们都变成了../bar/x
,我们看到它们实际上指的是同一个东西.
简而言之,通常情况下,您有很多方法可以引用一件事,在这种情况下,您可以定义一个独特的规范表示,并允许您处理此类事物的集合.
(如果你正在寻找更多的例子,所有的数学都充满了各种对象的"规范"结构,并且在很大程度上也有同样的目的.也许这篇维基百科文章可以提供一些额外的指示.)
alf*_*sin 21
定义规范路径的好方法是:( the shortest absolute path
简称,字符串长度的含义).
这是绝对路径和规范路径之间差异的示例:
绝对路径: C:\abc\..\abc\file.txt
规范路径:C:\abc\file.txt
tla*_*e29 10
GNU Coreutils的文档中给出了规范路径的良好定义readlink
。指定“规范化模式”返回不包含以下任何内容的等效路径:
字符串长度无关紧要,如以下示例所示。
如果您运行的是 Linux 或正在使用 GNU Coreutils,您可以尝试使用readlink -f
(规范化模式)或其首选等效命令,以查看系统上某些程序的“绝对路径”和“规范绝对路径”之间的区别。realpath
我可以使用以下命令获取系统上“java”的路径which
$ which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)
然而,该路径实际上是到另一个符号链接的符号链接。该符号链接链可以使用 显示namei
。
$ namei $(which java)
f: /usr/bin/java
d /
d usr
d bin
l java -> /etc/alternatives/java
d /
d etc
d alternatives
l java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
d /
d usr
d lib
d jvm
d java-17-openjdk-amd64
d bin
- java
Run Code Online (Sandbox Code Playgroud)
可以使用前面提到的命令找到规范路径realpath
。
$ realpath $(which java)
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
Run Code Online (Sandbox Code Playgroud)
规范路径(或其与绝对路径的差异)取决于系统.
通常,如果(完整)路径包含别名,快捷方式或符号链接,则规范路径会将所有这些路径解析为它们引用的实际目录.
示例:如果/bin/a
是sym链接,您可以在请求绝对路径的任何位置找到它,例如来自java.io.File#getAbsolutePath,而真实文件(即链接的实际目标)usr/local/bin/a
即将作为规范路径返回,例如来自java.io.File#getCanonicalPath