在Ubuntu中,为什么不能在同一位置放置一个名为“ MyFile”的文件夹和一个名为“ MyFile”的文档?我得到一个item already used in this location
错误。Ubuntu / Linux是否将文件夹和文件视为相同的对象(指向磁盘的指针)?
blog
包含带有博客文章的文件夹,以及一个blog
带有博客文章列表的html页面。
在Ubuntu中,为什么不能在同一位置放置一个名为“ MyFile”的文件夹和一个名为“ MyFile”的文档?我得到一个item already used in this location
错误。Ubuntu / Linux是否将文件夹和文件视为相同的对象(指向磁盘的指针)?
blog
包含带有博客文章的文件夹,以及一个blog
带有博客文章列表的html页面。
Answers:
在Linux中,几乎所有内容都是文件描述符。目录是一种特殊类型的文件,从用户的角度来看,它可以保存其他文件。
因此,您不能同时在同一目录中拥有相同的名字。
如果可以的话,编码人员的生活将变得痛苦不堪。当有人要创建目录并检查目录是否存在时,将返回命令“ isDir”。isDir(“ / home / shrodingers / cat”)应该返回true,false还是两者都返回?如果有人想用一些代码打开文件的目录,您会期望什么?
当您告诉系统打开某些内容时,系统应该怎么做?假设您要文件?这意味着麻烦;)
顺便说一句:这适用于所有操作系统,而不仅仅是Linux。尽管从桌面的角度来看,操作系统可以向文件或目录添加唯一标识符,然后将其从列表中删除。从命令行的角度来看,这将是有问题的。
在Windows上有一件事:我们使用区分大小写的名称。所以“ MYFILE”和“ myfile”是不同的东西。
您不能在同一位置拥有两个具有相同名称的实体。当您想获取文件或vi文件时会发生什么?操作系统会选择巫婆实体吗?因此,由于混淆的可能,您将无法在同一位置使用相同名称的文件和文件夹。顺便说一句,文件夹是托管其他文件的文件。
cat
或vi
那个名称,那么很明显,操作系统应该选择该文件。为什么那行不通?
vi
,通常vim
在Ubuntu上,它非常乐意打开并显示目录甚至进行编辑。尝试一下: vi .
cat
或vi
寻址到该名称,逻辑解释是在文件而不是子目录上调用它。(主要)面向文件的命令(vi
)也可用于(子)目录的事实与该语句无关。
vim
没有天真地对待子目录参数;具有与处理文件相同的代码。 vim
似乎(在一个非常简单的级别上)将两个程序合而为一:如果在文件上调用它,则其作用类似于文本编辑器;如果在子目录上调用,则其作用类似于文件管理器。
vi
。干杯。
我知道这是一个老话题,但是我只是遇到了同样的问题,我想分享一下。
这是我的故事(请耐心等待,祝大家生活愉快)。
环境:
reiserfs上的Gentoo内核4.12.5 64位
这怎么可能发生?
我有几台使用同步共享文件夹的机器。在过去的某个时候,我删除了一个名为“ .stfolder”的文件,而是使用该名称创建了一个目录。因此,也许该错误是由于在另一台计算机上同步此操作而引起的。
现在,让我们检查一下该错误:(我在这里以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
看起来文件是鬼,但是文件夹正常应答(使用find)
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输出中所见,该文件同时存在和不存在。由于具有Schrödinger猫的能力,我们可以创建一个具有相同名称的文件夹。
但是,等等,还有更多(您应该发现这一点很明显):我们也可以创建另一个具有相同名称的文件。
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
是的,该文件中的点后面紧跟着一个不可见的字符。
这说明了一切。
谢谢上帝,我没有使用“回声测试>>。*”,而是...
U+200b
顺便说一下,是一个“零宽度空间”。我喜欢这个轶事,尽管我担心它可能无法完全算作答案。
哇,这真的很奇怪,但是我只是按照作者的要求做了。这就是方法,所以这是一个真实的答案: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 #
.myfile
?