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