这只是一个词汇问题,但它一直在我的脑海里盘旋。
它来自练习考试线性PIC准备书。根据书中的正确答案是,这~/Documents
是一个相对目录,因为它是相对于主目录的。
然而,这本书包含大量的打字错误和错误,所以我不能认为其中所写的一切都是理所当然的。在这里我不同意,因为对我来说,~
它充当由 shell 扩展为变量内容$HOME
或当前用户主目录路径的变量(参见man bash
),所以实际路径/home/myuser/Documents
确实是一个绝对目录。
甚至维基百科,这一次,对我来说在这个话题上似乎没有任何帮助(即使它似乎证实这本书在这个问题上是错误的):
无论当前工作目录如何,绝对路径或完整路径都指向文件系统中的同一位置。为此,它必须包含根目录。
相比之下,相对路径从某个给定的工作目录开始,从而无需提供完整的绝对路径。
在这里,我再次不同意:根据这个定义,/opt/kde3/bin/../lib
不依赖于当前工作目录的路径应该是绝对路径,但是我目前对此的理解与本书的作者相匹配,使该路径成为相对路径。
据报道,快速的网络搜索只会增加我的挫败感韦氏词典:
绝对路径- 相对于根目录的路径。它的第一个字符必须是路径名分隔符。
那么$HOME/Documents
,或者甚至$HOME
不会被视为绝对目录?或者这个定义是否意味着变量扩展?那么贝壳的~
性格又如何呢?我可以在某处找到相对目录与绝对目录的可靠定义吗?我一直都错了吗?
答案1
这本质上是一个关于术语定义的问题。因此,就您的目的而言,答案就是 LPIC 想要的任何内容。但我们可以根据技术事实得出一些结论:
如果您传递'~/Documents'
给系统调用~
,它会在当前目录中查找完全命名的目录(可能会失败)。因此,根据使用的路径名的概念内核,这是一条相对路径——但这不是我们的意思。
~
语法是由以下实现的贝壳(以及其他为了方便而模仿它的程序)扩大它变成一个真正的路径名。为了说明这一点,它与(同样是 shell 语法)~/Documents
大致相同。$HOME/Documents
由于$HOME
应该是绝对路径,的价值 $HOME/Documents
也是绝对路径。但文本$HOME/Documents
还是~/Documents
必须由 shell 扩展才能成为我们所指的路径。
因此,如果我想要精确和一致,我会说~/Documents
是扩展为绝对路径的 shell 脚本片段。
答案2
如果作者试图通过将文字字符串(没有 shell 扩展)作为路径来吸引您,那么它就是相对路径 ( mkdir -p './~/Documents'
)。否则:
这是一个绝对路径,因为解析它不依赖于进程的当前工作目录。 相对路径始终表示相对于进程的工作目录。或者在符号链接目标的情况下,相对于符号链接的位置。 (gcc -> gcc-5.2
对比gcc -> /usr/bin/gcc-5.2
)。这对于 NFS 安装和其他可以通过不同绝对路径访问相同符号链接的情况很重要。例如
/net/tesla/home/peter/foo -> bar # always works from other machines
/net/tesla/home/peter/foo -> /home/peter/bar # references my home dir on the local machine, not tesla.
Debian 有时会安装符号链接到../../doc/whatever/whatever
,而不是绝对符号链接目标,因此当 NFS 安装在其他地方时,或者在查看 chroot 而不使用chroot(8)
ing 时,它可以工作。
每个 Unix 进程都有自己的 cwd。该pwd
命令的存在只是为了打印它。
看: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html 有关使用 POSIX 系统调用更改目录的更多信息。
正如其他人所说,~
在路径用于任何用途之前,它会被 shell 扩展。在 shell 脚本中使用~/bin/myprog
将使其对于不同的用户有不同的工作方式。~/bin/foo
和之间的区别/home/peter/bin/foo
在于,其中一个对位置进行了硬编码,而另一个则对其进行了参数化。将~
版本称为相对路径是错误的(IMO)。
谈论事物“与环境变量相关”只是令人困惑。对于在您使用的上下文中具有特定技术含义的术语,使用不同的英语语言含义是不好的做法。
在损坏的系统上,使用HOME=a/relative/path
会~/foo
扩展为相对路径。这根本就不是一个可用的设置。
答案3
如果您的$HOME
是/home/white/
,~/Documents
(与 相同$HOME/Documents
)由 shell 扩展(请参阅这里以获得解释)到/home/white/Documents
,这是一个绝对小路。
相对路径是不以/
(shell 扩展后) 开头的路径,例如../Documents
或foo/bar
一些旧的 shell 不会扩展~
(像bash
、tcsh
、zsh
等那样扩展);他们会将其视为以;~/Documents
开头的相对路径。~
但您通常没有这样的目录名称~
(但您可以使用 来创建一个mkdir '~'
,我不建议这样做)。
答案4
该路径可以扩展到不同的位置,具体取决于用户是谁。话虽如此,在我看来,这仍然是一条绝对路径,而不是相对路径。但是,我不认为绝对路径和相对路径的定义如此精确。这不是数学。在我看来,这个问题并不能真正考验理解力,而且毫无意义。