在 Ubuntu 中,为什么我不能在同一位置有一个名为“MyFile”的文件夹和一个名为“MyFile”的文档?我得到一个item already used in this location
错误。Ubuntu / Linux 是否将文件夹和文件视为相同的对象(指向磁盘的指针)?
在 Ubuntu 中,为什么我不能在同一位置有一个名为“MyFile”的文件夹和一个名为“MyFile”的文档?我得到一个item already used in this location
错误。Ubuntu / Linux 是否将文件夹和文件视为相同的对象(指向磁盘的指针)?
在 Linux 中,几乎所有东西都是文件描述符。目录是一种特殊类型的文件,从用户的角度来看,它可以保存其他文件。
所以你不能同时在同一个目录中使用相同的名称。
如果可以,编码员的生活将变得悲惨。当有人想要创建一个目录并检查它是否存在时,您会让命令“isDir”返回什么。isDir("/home/shrodingers/cat") 应该返回 true、false 还是两者?如果有人想用某些代码打开文件的目录,您会期望什么?
当您告诉系统打开某些东西时,系统应该做什么?假设你想要这个文件?这意味着麻烦;)
顺便说一句:这适用于所有操作系统,而不仅仅是 Linux。尽管从桌面的角度来看,操作系统可以向文件或目录添加唯一标识符并将其从列表中删除。从命令行的角度来看,它会有问题。
我们在 Windows 上拥有一件事:我们使用区分大小写的名称。所以“我的文件”和“我的文件”是不同的东西。
您不能在同一位置拥有两个同名的实体。当你想要 cat 或 vi 文件时会发生什么?操作系统会选择女巫实体吗?因此,由于混淆的可能性,您将无法在同一位置为文件和文件夹使用相同的名称。顺便说一下,文件夹是一个存放其他文件的文件。
我知道这是一个老话题,但我刚遇到同样的问题,我想分享一下。
这是我的故事(请耐心等待,结局是美好的)。
环境:
Gentoo kernel 4.12.5 64bits on reiserfs
这怎么会发生?
我有几台机器,其中有一个使用 syncthing 共享的文件夹。在过去的某个时候,我删除了一个名为“.stfolder”的文件并创建了一个具有该名称的目录。所以这个错误可能是由于 syncthing 在另一台机器上同步这个操作。
现在让我们检查一下错误:(我在这里以root身份运行)
看起来该文件是一个幽灵但是该文件夹正在正常回答(使用查找)
我知道,很奇怪...
我无法删除那个幽灵文件!
但最后,我通过将它移动到 tmpfs 挂载点上成功地删除了它
我必须说这个错误仍然存在于 tmpfs 上,所以与 reiserfs 无关:
正如您在此 bash 输出中所见,该文件同时存在和不存在。因为薛定谔猫的这个能力,我们可以创建一个同名的文件夹。
但是等等,还有更多(您应该会发现这一点很明显):我们也可以创建另一个同名文件。
幽灵可以复制(所以我可以复制错误),或由 chown、chmod 等操作。唯一的限制是你不能给它命名,所以你必须把它放在一个空目录中,并使用“.*”作为这些命令的参数......但它有效!
由于它的本质,这个文件从一开始就是空的(它只是一个用于同步的标志)。
所以我很好奇我是否可以在该文件中放入一些数据。
在这里,解决方案来到我身边:
是的,该文件中有一个不可见的字符,就在点之后。
这说明了一切。
感谢上帝,我没有使用“echo test >> .*”和 cat...
https://unix.stackexchange.com/a/238056/139805
哇,这真的很奇怪,但我只是按照作者的要求做了。就是这样,所以这是一个真正的答案:P
这是由以下人员完成的:
whoah alternate response 两个同名文件,甚至没有目录和文件了这是怎么回事???_
完全奇怪的行为