AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 662911
Accepted
pebox11
pebox11
Asked: 2015-08-19 04:18:12 +0800 CST2015-08-19 04:18:12 +0800 CST 2015-08-19 04:18:12 +0800 CST

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

  • 772

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

files
  • 4 4 个回答
  • 22212 Views

4 个回答

  • Voted
  1. Best Answer
    Rinzwind
    2015-08-19T04:25:17+08:002015-08-19T04:25:17+08:00

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

    所以你不能同时在同一个目录中使用相同的名称。

    如果可以,编码员的生活将变得悲惨。当有人想要创建一个目录并检查它是否存在时,您会让命令“isDir”返回什么。isDir("/home/shrodingers/cat") 应该返回 true、false 还是两者?如果有人想用某些代码打开文件的目录,您会期望什么?

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

    顺便说一句:这适用于所有操作系统,而不仅仅是 Linux。尽管从桌面的角度来看,操作系统可以向文件或目录添加唯一标识符并将其从列表中删除。从命令行的角度来看,它会有问题。

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

    • 30
  2. L. Barzic
    2015-08-19T04:38:58+08:002015-08-19T04:38:58+08:00

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

    • 1
  3. Stopi
    2018-09-04T04:41:24+08:002018-09-04T04:41:24+08:00

    我知道这是一个老话题,但我刚遇到同样的问题,我想分享一下。
    这是我的故事(请耐心等待,结局是美好的)。

    环境:
    Gentoo kernel 4.12.5 64bits on reiserfs

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

    现在让我们检查一下错误:(我在这里以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/
    

    我必须说这个错误仍然存​​在于 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 输出中所见,该文件同时存在和不存在。因为薛定谔猫的这个能力,我们可以创建一个同名的文件夹。
    但是等等,还有更多(您应该会发现这一点很明显):我们也可以创建另一个同名文件。

    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"
    

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

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

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

    是的,该文件中有一个不可见的字符,就在点之后。
    这说明了一切。
    感谢上帝,我没有使用“echo test >> .*”和 cat...

    • 1
  4. Charles Adrian Posinoff
    2015-10-23T19:36:13+08:002015-10-23T19:36:13+08:00

    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 alternate response 两个同名文件,甚至没有目录和文件了这是怎么回事???_

    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 # 
    
    • 0

相关问题

  • 如何轻松加密文件?

  • 如何使用 Ubuntu One 与朋友共享文件夹?

  • 如何从命令行获取文件的 mime 类型?

  • examples.desktop 是做什么的?

  • 查看或转换 MDI 文件 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve