同じ場所にある同じフォルダーとファイル名


15

Ubuntuでは、同じ場所に「MyFile」という名前のフォルダーと「MyFile」という名前のドキュメントを配置できないのはなぜですか?私が取得item already used in this locationエラー。Ubuntu / Linuxはフォルダーとファイルを同じオブジェクト(ディスクへのポインター)として扱いますか?


それはまさにそのような名前ですか?ファイルのファイル名の先頭にドットがありますか?たとえば、.myfile
セルギーKolodyazhnyy

同じ問題がありました。名前を変更しました。いくつかのオプションがあります:フォルダーの名前を小文字に変更するか、拡張子を追加します(例:myfileまたはMy.File)。または、ファイルの名前をMyFile.txtに変更します。いずれかの名前を変更しても同様に機能します。
バック


フラストレーションを共有します。静的なWebサイトを構築していますがblog、ブログの投稿で呼び出されるフォルダーと、ブログの投稿blogのリストで呼び出されるhtmlページを持つローカルバージョンを作成できません。
コスタ

回答:


29

Linuxでは、ほとんどすべてがファイル記述子です。ディレクトリは、ユーザーの観点から他のファイルを保持できる特殊なタイプのファイルです。

そのため、同じディレクトリに同時に同じ名前で両方を持つことはできません。

可能であれば、コーダーにとって人生は悲惨なものになるでしょう。誰かがディレクトリを作成して存在することを確認したい場合、コマンド「isDir」は何を返しますか。isDir( "/ home / shrodingers / cat")はtrue、false、または両方を返す必要がありますか?そして、誰かが何らかのコードでファイルのディレクトリを開きたい場合はどうなりますか?

そして、何かを開くように指示したとき、システムは何をすべきでしょうか?ファイルが必要だと仮定しますか?それはトラブルを綴る;)

ところで、これはLinuxだけでなく、すべてのオペレーティングシステムに当てはまります。デスクトップの観点からは、オペレーティングシステムはファイルまたはディレクトリに一意の識別子を追加し、リストから削除することができます。ただし、コマンドラインの観点からは問題があります。

Windowsには、大文字と小文字を区別する名前を使用することがあります。したがって、「MYFILE」と「myfile」は異なるものです。


2
問題ありません:)私は賛成票のためにそれを行います;-)
リンツウィンド

1
@Rinzwindの賛成票は?[OK]を、ここでは別のものである
AB

1
すべてのLinux理論:すべてはファイルです!
バイトコマンダー

アントンと私はシュレディンガーの猫で協力しました 4ヶ月前。また、Byte Commanderが言うように、表現は「すべてがファイル記述子である」ではなく「すべてがファイルである」です。
G-Manは「Reinstate Monica」と言います

1
Plan9(plan9.bell-labs.com/plan9)(Unixの元の作成者)は、おそらく「すべてがファイル」である唯一のOSです。他のすべてのUnixおよびLinuxシステムの場合正しいフレーズは「すべてがファイル記述子です」です。メモリ、システムコール、ネットワークデバイス、およびファイル以外のほとんどすべてを除く「すべてはファイル」ですが、ファイル記述子があります;-)誰かがこれを続けたい場合-> chat:=)
Rinzwind

1

同じ場所に同じ名前の2つのエンティティを含めることはできません。ファイルをcatまたはviにしたい場合はどうなりますか?OSが選択するのは魔女エンティティですか?混乱の可能性があるため、同じ場所にあるファイルとフォルダーに同じ名前を付けることはできません。ちなみに、フォルダは他のファイルをホストするファイルです。


3
あなたの答えはOPの質問を彼の顔に投げ返します(「同じ場所に同じ名前の2つのエンティティを置くことはできません」、彼/彼女はすでに知っています—質問は「なぜ?」です)、そして修辞的な質問をします、彼らが答えられないかのように、それは質問を解決しました。同じ名前のファイルとディレクトリがあり、その名前catまたはviその名前がある場合、OSは明らかにファイルを選択する必要があります。なぜそれが機能しないのですか?
G-Manは「Reinstate Monica」と言います

2
@ G-Man:実際viには通常vimUbuntu上にありますが、ディレクトリを開いて表示し、編集することもできます。それを試してみてください: vi .
arielf

1
@arielf:(1)私はそれがあれば、と言ってたしたような時に(主に)ファイル指向コマンド、その後、ファイルと同じディレクトリに存在する同じ名前のサブディレクトリのために可能catまたはviその名前宛てであります、論理的な解釈は、サブディレクトリではなくファイルで呼び出すことです。(主に)ファイル指向のコマンド(vi)が(サブ)ディレクトリでも機能するという事実は、そのステートメントとは無関係です。
G-Manは「Reinstate Monica」と言います

1
(2)あなたの声明は赤いニシンです。vimサブディレクトリの引数を単純に処理していません。ファイルを処理するのと同じコードで。  vim(非常に単純なレベルで)2つのプログラムが1つになっているようです。ファイルで呼び出されると、テキストエディタのように機能し、サブディレクトリで呼び出されると、ファイルマネージャのように機能します。
G-マンは「元に戻すモニカ言う

1
@ G-Man:最初のコメントの最後のアサーションについてのみ言及していました。「それから、明らかに、OSはファイルを選択するべきです。」-それは私に当てはまらないことでしたvi。乾杯。
アリエル

1

私はこれが古いトピックであることを知っていますが、同じ問題を抱えていたので、共有したいと思いました。
これが私の話です(辛抱強く、幸せな終わりがあります)。

環境:
ReiserFS上のGentooカーネル4.12.5 64ビット

これはどのように起こりましたか?
syncthingを使用して共有されたフォルダーを持つ複数のマシンがあります。過去のある時点で、「。stfolder」という名前のファイルを削除し、代わりにその名前でディレクトリを作成しました。そのため、おそらくバグは、この操作を別のマシンで同期するsyncthingによるものです。

バグを調べてみましょう:(ここではルートとして動作しています)

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

はい、そのファイルのドットの直後に目に見えない文字があります。
これがすべてを説明します。
神に感謝、私は「エコーテスト>>。*」と猫を使用しませんでした...


U+200bちなみに、「ゼロ幅スペース」です。私はこの逸話が好きですが、答えとして完全に数えられないかもしれないと思います。
PerlDuck

0

/unix//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代替応答と同じ名前を持つ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 # 

2
2つの名前の1つは、末尾に何らかの形式のスペースがあります。「ファイル」出力で確認できます。
dascandy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.