相同位置的相同文件夹和文件名

在Ubuntu中为什么我不能在同一位置有一个名为“MyFile”的文件夹和一个名为“MyFile”的文件? 我得到一个item already used in this location错误中item already used in this locationitem already used in this location 。 Ubuntu / Linux是否将文件夹和文件视为相同的对象(指向磁盘的指针)?

在Linux中,几乎所有东西都是文件描述符。 目录是一种特殊类型的文件,从用户的角度来看,它可以容纳其他文件。

因此,您不能同时在同一目录中同时使用两者。

如果可以的话,生活对于程序员来说会变得悲惨。 当有人想要创建一个目录并检查它是否存在时,你会得到什么命令“isDir”。 应该isDir(“/ home / shrodingers / cat”)返回true,false还是两者兼而有之? 如果有人想在某些代码中打开文件的目录,你会期待什么?

当你告诉它打开一些东西时,系统应该怎么做? 假设你想要这个文件? 这意味着麻烦;)

顺便说一下:对于所有操作系统都是如此,而不仅仅是Linux。 虽然从桌面的角度来看,操作系统可以为文件或目录添加唯一标识符,并将其从列表中删除。 从命令行的角度来看,这会有问题。

我们在Windows上有一件事:我们使用区分大小写的名称。 所以“MYFILE”和“myfile”是不同的东西。

您不能在同一位置拥有两个具有相同名称的实体。 当你想要cat或vi文件时会发生什么? 操作系统选择的女巫实体? 因此,由于混淆的可能性,您将无法为同一位置的文件和文件夹使用相同的名称。 顺便说一下,文件夹是托管其他文件的文件。

我知道这是一个古老的话题,但我只是有同样的问题,我想分享。
这是我的故事(耐心等待,有一个快乐的结局)。

环境:
在reiserfs上的Gentoo内核4.12.5 64位

怎么会发生这种情况?
我有几台机器与一个使用syncthing共享的文件夹。 在过去的某个时刻,我删除了一个名为“.stfolder”的文件,并创建了一个具有该名称的目录。 因此,错误可能是由于同步在另一台机器上同步此操作。

现在让我们来看看这个bug 🙁我在这里以root身份运行)

 ls -lahd .* drwxrwx--- 5 stopi syncthing 656 3 sept. 18:24 . drwxr-xr-x 5 stopi stopi 240 3 sept. 18:21 .. drw-rw---- 2 stopi syncthing 48 3 sept. 18:24 .stfolder -rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder -rw-rw---- 1 stopi syncthing 23 28 oct. 2017 .stignore find -type f -name .stfolder (<= no output there) find -type f -name ".*" ./.stignore ./.stfolder find -type f -name ".s*" ./.stignore 

看起来文件是鬼,但文件夹正常回答(与查找)

 file .* .: directory ..: directory .stfolder: directory .stfolder: empty .stignore: C source, ASCII text file .s* .stfolder: directory .stignore: C source, ASCII text 

我知道,非常奇怪......

 rm -r .stfolder ls -lahd .* drwxrwx--- 5 stopi syncthing 656 3 sept. 18:24 . drwxr-xr-x 5 stopi stopi 240 3 sept. 18:21 .. -rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder -rw-rw---- 1 stopi syncthing 23 28 oct. 2017 .stignore rm .stfolder rm: impossible de supprimer '.stfolder': Aucun fichier ou dossier de ce type 

我无法删除那个鬼文件!

但最后,我通过在tmpfs挂载点上移动它来成功删除它

 mv .stfolder /elsewhere/ mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type mv .* /elsewhere/ 

我必须说这个bug仍然存在于tmpfs上,因此与reiserfs无关:

 cd /elsewhere ls -lahd .* -rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder ls -lahd .s* ls: impossible d'accéder à '.s*': Aucun fichier ou dossier de ce type 

正如您在此bash输出中看到的那样,该文件同时存在且不存在。 由于这种Schrödingercat能力,我们可以创建一个具有相同名称的文件夹。
但是等等,还有更多(你应该发现这很明显):我们也可以用同一个名字创建另一个文件。

 touch .stfolder ls -lahdQ total 0 drwxrwxr-x 3 root users 100 3 sept. 19:13 "." drwxrwxrwt 18 root root 440 3 sept. 17:35 ".." -rw-r--r-- 1 root root 0 3 sept. 19:13 ".stfolder" -rw-r----- 1 root root 0 3 sept. 19:09 ".stfolder" 

幽灵可以被复制(所以我可以复制bug),或者由chown,chmod等操纵。唯一的限制是你不能命名它所以你必须把它放在一个空目录中并使用“。*”作为这些命令的参数......但是它有效!

由于它的本质,这个文件从开始就是空的(它只是一个同步的标志)。
所以我很好奇我是否可以在该文件中放入一些数据。
在这里,解决方案来找我:

 vi .* " ============================================================================ " Netrw Directory Listing (netrw v162) " /elsewhere " Sorted by name " Sort sequence: [\/]$,\,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$ " Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:special " ============================================================================== ../ ./ .<200b>stfolder 

是的,该文件中有一个不可见的字符,就在点之后。
这解释了一切。
感谢上帝,我没有使用“回声测试”。*“和猫......

https://unix.stackexchange.com/a/238056/139805

哇,这真的很奇怪,但我只是按照作者的要求做了。 这是怎么回事,所以这是一个真正的答案:P

 charles@charles-MacBook ~ $ cd /usr/share charles@charles-MacBook /usr/share $ ls -ld pix* drwxr-xr-x 13 root root 4096 Oct 22 21:04 pixmaps -rw-r--r-- 1 root root 17626 Oct 22 21:07 pixmaps charles@charles-MacBook /usr/share $ mv pixmaps pixmaps mv: cannot move 'pixmaps' to a subdirectory of itself, 'pixmaps/pixmaps' charles@charles-MacBook /usr/share $ ls -ld pix* drwxr-xr-x 13 root root 4096 Oct 22 21:04 pixmaps -rw-r--r-- 1 root root 17626 Oct 22 21:07 pixmaps charles@charles-MacBook /usr/share $ file pix* pixmaps: directory pixmaps : X pixmap image, ASCII text 

这是通过:

 charles-MacBook MaSSH # ls instMaSSH.sh MaSSHandra MaSSHandra.desktop MaSSHandraMesh.xpm MaSSHandra.xpm mime-MaSSHandra.xml charles-MacBook MaSSH # cat instMaSSH.sh cp -i MaSSHandra.desktop /usr/share/applications cp -i MaSSHandra.xpm /usr/share/pixmaps cp -i MaSSHandraMesh.xpm /usr/share/pixmaps xdg-icon-resource install --context mimetypes --size 48 /usr/share/pixmaps/MaSSHandra.xpm application-x-MaSSHandra xdg-icon-resource install --context mimetypes --size 48 /usr/share/pixmaps/MaSSHandraMesh.xpm application-x-MaSSHandraMesh setcap cap_net_raw+ep /opt/MaSSHandra/bin/MaSSHandra charles-MacBook MaSSH # ./instMaSSH.sh cp: overwrite '/usr/share/applications/MaSSHandra.desktop'? y xdg-icon-resource: file '/usr/share/pixmaps/MaSSHandra.xpm' does not exist xdg-icon-resource: file '/usr/share/pixmaps/MaSSHandraMesh.xpm' does not exist 

whoah备用响应两个具有相同名称的文件,甚至不再目录和文件正在发生什么??? _

 charles-MacBook share # ls -ld pi* drwxr-xr-x 13 root root 4096 Oct 22 21:08 pixmaps -rw-r--r-- 1 root root 17626 Oct 22 21:09 pixmaps charles-MacBook share # mv pixmaps /tmp charles-MacBook share # mv pixmaps /tmp/pixmaps/ charles-MacBook share # ls -ld pix* -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps charles-MacBook share # ls -li pix* 1849351 -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps 1841386 -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps charles-MacBook share # file pix* pixmaps: X pixmap image, ASCII text pixmaps : X pixmap image, ASCII text charles-MacBook share # ls -liF pix* 1849351 -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps 1841386 -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 

完全奇怪的行为

 charles-MacBook MaSSH # ls -l /usr/share/pixmaps pixmaps pixmaps charles-MacBook MaSSH # rm -i /usr/share/pixmaps rm: remove regular file '/usr/share/pixmaps'? y charles-MacBook MaSSH # ls -l /usr/share/pixmaps -rw-r--r-- 1 root root 17626 Oct 22 21:26 /usr/share/pixmaps charles-MacBook MaSSH # rm -i /usr/share/pixmaps rm: cannot remove '/usr/share/pixmaps': No such file or directory charles-MacBook MaSSH # ls -l /usr/share/pixmaps -rw-r--r-- 1 root root 17626 Oct 22 21:26 /usr/share/pixmaps charles-MacBook MaSSH # cd /usr/share charles-MacBook share # rm pixmaps charles-MacBook share #