在创建文件路径和 URL 时,我注意到很多时候路径以./
or开头~/
。
./
以和开头的文件路径有什么区别~/
?
他们每个人的意思是什么?
为了完整起见...
path
path
是在当前目录中命名的文件或目录。./path
path
是在当前目录中命名的文件或目录,目录拼写出来。.
是当前目录,是当前目录path
中的文件或目录的名称。~/path
是$HOME/path
where$HOME
是指您的主目录的变量的简写。通常,您的主目录将类似于您的帐户名/home/you
或/Users/you
在哪里。you
(该命令echo "$HOME"
将显示您的主目录。)展开后的值是一个绝对路径(除非您彻底弄乱了 的值$HOME
),如初始斜杠所示。/path
是一个绝对路径,它指的path
是根目录中名为的文件或目录/
。Unix 上的每个文件最终都位于从根目录开始的目录树中。每个以开头的文件名/
都是一个绝对路径(也称为完整路径),它解释了如何从根目录开始到达特定节点。例如,/var/tmp/you/reminder.txt
指的是一个文件或目录reminder.txt
(可能是一个文件,从名称来看;但 Unix 不在乎你如何称呼你的文件或you
目录)tmp
。var
在根目录中。
每个不以开头的文件名/
都是一个相对路径,它指示如何从当前目录开始到达特定文件或目录。特殊目录..
是父目录,特殊目录.
是当前目录。sopath/there
指的是当前目录中目录there
里面的文件或path
目录;和(将鼠标悬停在灰色区域以显示扰流板)
there/.././and/back/..
是一种(邪恶复杂的)在当前目录中引用目录的方式and
,这里我们遍历there
目录然后移回当前目录;然后留在当前目录;然后引用目录back
中的目录and
,然后移回该目录的父目录,以 . 结尾./and
。
除了~/
当前用户的主目录外,一些 shell 和应用程序允许表示法~them/
引用用户帐户的主目录them
。此外,某些 Web 服务器配置允许每个用户在其目录中拥有一个公共网站,~/public_html
并且 URL 符号将为外部访问者提供http://server/~them/
用户帐户的站点。them
当前目录是 shell 提供的一种便利,因此您不必一直键入长路径。你可以,如果你愿意。
/bin/ls /home/you/Documents/unix-101/directories.txt
是一种冗长但完全有效的说法(假设你在你的主目录中),
ls Documents/unix-101/directories.txt
你也可以说
cd Documents/unix-101
ls directories.txt
直到你cd
再次,你的所有命令都将在这个目录中运行。
(不同之处在于它ls
也会打印您要求它列出的文件的路径。所以ls directories.txt
将简单地打印directories.txt
而ls Documents/unix-101/directories.txt
将打印......那个。)
您始终可以放置绝对路径而不是相对路径,反之亦然;而且您通常不需要特别在cd
任何地方(除了一些基本损坏的初学者脚本在运行它们时往往要求您位于特定目录中)。
一个常见的初学者错误是假设脚本或可执行文件的位置决定了它在哪里查找文件。但如果这是真的,ls .
会显示目录中的bin
文件而不是当前目录,不是吗?
首次登录时,当前工作目录设置为您的主目录。
一个“目录”有时被那些还不够大而不喜欢前者的人称为“文件夹”。
请注意,它看起来ls
必须是当前目录中的一个文件,但我们也说它在/bin
? 这是一个不同的问题(查找$PATH
)。
当.
不在您的PATH
(通常不应该)中时,您必须说./scriptname
而不是在当前目录中scriptname
调用的可执行文件中运行命令。scriptname
换句话说,这是一个极端情况,您必须明确地拼出./
以在当前目录中指定某些内容(或者等效地但冗长地拼出完整的绝对路径,也许使用命令替换$(pwd)/scriptname
,但这确实是pleonastic。)
此外,不要将目录名称.
与包含单个点的 Bourne shell 命令混淆(也称为 Bash 别名source
)。命令
. ./scriptname
在当前 shell 实例的上下文中运行文件中的命令./scriptname
,而不是在单独的子 shell 中(这就是刚才./scriptname
所做的)。换句话说,这个命令行对 dot 目录中的文件调用dot 命令。scriptname
./
意思是“从当前目录开始”。 .
指的是当前工作目录,因此类似于在当前目录./foo.bar
中查找文件foo.bar
。(作为旁注,..
手段是指当前目录的父目录。因此../foo.bar
将在上面的一个目录中查找该文件。)
~/
意思是“从主目录开始”。这在不同的场景中可能有不同的含义。例如,在 Unix 环境中,将在您的主目录中~/foo.bar
查找名为的文件,例如. 在许多 Web 应用程序中,会寻找在 Web 应用程序根目录中调用的文件,例如.foo.bar
/home/totzam/foo.bar
~/foo.bar
foo.bar
/var/http/mywebapp/foo.bar
./
是当前目录
~/
是当前用户的主目录
./
表示路径是相对于您当前位置的。
~/
表示路径是相对于您的主目录的。
我将解释一个简单的例子。正如开发人员所说:
./
是当前目录。~/
是当前用户的主目录。这两个文件路径表达式如何帮助我们?假设您要执行一个脚本 (.sh) 并且您位于文件所在的同一目录中,那么您可以简单地执行此操作./filename.sh
我主要用于~/
访问我的主目录文件,例如.bashrc
当我想在其中添加任何配置时。它更容易,因为文件路径表达式(用于主目录)感觉更容易,并且可以从任何地方访问文件,而无需担心路径或更改路径。