Bash/shell/OS对的解释。和—;我可以定义。。。?
Bash/shell/OS对的解释。和—;我可以定义。。。?,bash,shell,operating-system,kernel,posix,Bash,Shell,Operating System,Kernel,Posix,和。作为路径(与范围相对,例如,{1..10},我不关心),如何真正起作用?我知道它们是做什么的,并且一直在使用它们,但是我没有完全理解它们是如何被解释的。外壳可以处理它们吗?口译过程?操作系统 我问这个问题的原因是,我希望能够使用..来引用../..,..//code>来引用../../..//code>,等等(最多使用一个小的有限数;我不需要bash来处理任意多的点)。也就是说,如果我的当前目录是/tmp/let/me/out,我调用cd…,那么我得到的当前目录应该是/tmp/let。我并不
和。
作为路径(与范围相对,例如,{1..10}
,我不关心),如何真正起作用?我知道它们是做什么的,并且一直在使用它们,但是我没有完全理解它们是如何被解释的。外壳可以处理它们吗?口译过程?操作系统
我问这个问题的原因是,我希望能够使用..
来引用../..
,..//code>来引用../../..//code>,等等(最多使用一个小的有限数;我不需要bash来处理任意多的点)。也就是说,如果我的当前目录是/tmp/let/me/out
,我调用cd…
,那么我得到的当前目录应该是/tmp/let
。我并不特别关心..
等是否出现在ls-a
输出中,比如
和。
可以,但我希望能够调用cat/tmp/let/me/out/…/phew.txt
来打印/tmp/phew.txt
的内容
欢迎提供相关文档的指针以及直接答案。这种语法问题对于谷歌来说是非常困难的
顺便说一句,我使用的是bash4.3.42
,带有autocd
和globstar
shell选项。另请参见第二个答案的注释,特别是Eliah的:
这与当您将cd
放入某个目录subdir
时,您实际上是在跟随一个指向该目录的指针,。
是操作系统添加的指向父目录的指针,我可以想象
的工作方式是相同的。另请参见第二个答案的注释,尤其是以利亚的:
这与当您cd
进入某个目录subdir
时,您实际上是在跟随一个指向该目录的指针,。
是操作系统添加的指向父目录的指针,我想
的工作原理是一样的。
和。
是真正的目录名。它们不是“排序剪切”、别名或任何伪造的东西
它们恰好指向您使用的另一个名称。一个文件或目录可以有多个指向同一个文件或目录的名称,这些名称通常称为硬链接,以区别于符号(或软)链接
如果您在Linux或OS X上,您可以使用stat
查看大部分inode元数据,这就是ls
所查看的。您将看到有一个inode编号。如果您stat.
和stat当前目录名
,您将看到该数字是相同的
inode中没有保存的一件事是文件名,它保存在目录中
所以
和。
位于文件系统的目录中,它们不是shell想象出来的。例如,我可以很高兴地使用C语言中的
和。
我怀疑你能改变它们——就我个人而言,我从未尝试过,也永远不会。您必须通过编辑目录来更改这些文件名链接到的内容。如果您管理了它,您可能会对文件系统造成无法修复的损坏。和。
是真正的目录名。它们不是“排序剪切”、别名或任何伪造的东西
它们恰好指向您使用的另一个名称。一个文件或目录可以有多个指向同一个文件或目录的名称,这些名称通常称为硬链接,以区别于符号(或软)链接
如果您在Linux或OS X上,您可以使用stat
查看大部分inode元数据,这就是ls
所查看的。您将看到有一个inode编号。如果您stat.
和stat当前目录名
,您将看到该数字是相同的
inode中没有保存的一件事是文件名,它保存在目录中
所以
和。
位于文件系统的目录中,它们不是shell想象出来的。例如,我可以很高兴地使用C语言中的
和。
我怀疑你能改变它们——就我个人而言,我从未尝试过,也永远不会。您必须通过编辑目录来更改这些文件名链接到的内容。如果您管理了它,您可能会对您的文件系统造成不可修复的损坏。我写这篇文章是为了澄清以前已经写过的内容
在许多文件系统中,目录是一个文件;一种特殊类型的文件,文件系统将其标识为明显的直接文件
目录文件包含映射到磁盘上文件的名称列表
一个文件,包括一个直接关联的文件,没有与之关联的内在名称(并非在所有文件系统中都是如此)。文件名仅存在于目录中
同一个文件可以在多个目录中有一个条目(硬链接)。同一个文件可以有多个名称和多个路径
文件系统在每个目录中维护“
”和“。
”的条目
在这样的文件系统中,名称“
”和“。
”总是有目录项。这些条目由文件系统维护
名称“
”链接到它自己的目录。
名称“。
”链接到父目录,但它链接到自身的顶级目录除外(
和。
因此链接到同一目录文件)
因此,当您使用“
”和“。
”作为/dir1/dir2/。/dir3//dir4/任何内容时,
“
”和“。
”的处理方式与“dir1”和“dir2”完全相同
此翻译由文件系统完成;不是贝壳
cd ...
不工作,因为没有“…
”的条目(至少不正常)<
trap 'ln -s ../.. ... &>/dev/null | true' DEBUG
PROMPT_COMMAND='rm ...'
pwd
# /tmp/crazy-stuff
ls -a
# . .. ... foo
ls -a .../tmp/crazy-stuff
# . .. ... foo