Ubuntuで同じ場所に「MyFile」という名前のフォルダーと「MyFile」という名前のドキュメントを配置できないのはなぜですか? item already used in this location
エラーが表示されます。 Ubuntu/Linuxはフォルダーとファイルを同じオブジェクト(ディスクへのポインター)として扱いますか?
Linuxでは、ほとんどすべてがファイル記述子です。ディレクトリは、ユーザーの観点から他のファイルを保持できる特殊なタイプのファイルです。
そのため、同じディレクトリに同時に同じ名前で両方を持つことはできません。
可能であれば、コーダーにとって人生は悲惨なものになるでしょう。誰かがディレクトリを作成して存在することを確認したい場合、コマンド「isDir」は何を返しますか。 isDir( "/ home/shrodingers/cat")はtrue、false、または両方を返す必要がありますか?そして、誰かが何らかのコードでファイルのディレクトリを開きたい場合はどうなりますか?
そして、何かを開くように指示したとき、システムは何をすべきでしょうか?ファイルが必要だと仮定しますか?それはトラブルを綴る;)
ところで、これはLinuxだけでなく、すべてのオペレーティングシステムに当てはまります。デスクトップの観点からは、オペレーティングシステムはファイルまたはディレクトリに一意の識別子を追加し、リストから削除することができます。ただし、コマンドラインの観点からは問題があります。
Windowsには、大文字と小文字を区別する名前を使用することがあります。したがって、「MYFILE」と「myfile」は異なるものです。
私はこれが古いトピックであることを知っていますが、同じ問題を抱えていたので、共有したいと思いました。
これが私の話です(辛抱強く、ハッピーエンドがあります)。
環境:
reiserfs上のGentooカーネル4.12.5 64ビット
これがどのように発生したのか?
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の出力でわかるように、ファイルは同時に存在しますが、存在しません。この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"
ゴーストはコピーできるので(バグを複製できます)、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
はい、そのファイルのドットの直後に目に見えない文字があります。
これはすべてを説明しています。
ありがとう、「エコーテスト>>。*」と猫を使用しなかった...
同じ場所に同じ名前の2つのエンティティを含めることはできません。ファイルをcatまたはviにしたい場合はどうなりますか? OSが選択するのは魔女エンティティですか?混乱の可能性があるため、同じ場所にあるファイルとフォルダに同じ名前を付けることはできません。ちなみに、フォルダは他のファイルをホストするファイルです。
https://unix.stackexchange.com/a/238056/139805
wowこれは本当に奇妙なことですが、著者が尋ねたことをやっただけです。これが方法なので、本当の答えです: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は、ディレクトリとファイルでさえなく、同じ名前の2つのファイルを交互に応答します、何が起こっているのか??? _
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 #