Warum kann ich in Ubuntu keinen Ordner mit dem Namen "MyFile" und ein Dokument mit dem Namen "MyFile" am selben Ort haben? Ich bekomme eine item already used in this location
Fehlermeldung. Behandelt Ubuntu / Linux Ordner und Dateien als gleiche Objekte (Zeiger auf die Festplatte)?
15
.myfile
?blog
mit Blogposts und einer HTML-Seiteblog
mit einer Liste von Blogposts erstellen.Antworten:
Unter Linux ist fast alles ein Dateideskriptor. Ein Verzeichnis ist ein spezieller Dateityp, der aus Benutzersicht andere Dateien enthalten kann.
Sie können also nicht beide mit demselben Namen gleichzeitig im selben Verzeichnis haben.
Wenn Sie könnten, würde das Leben für Programmierer miserabel werden. Was soll der Befehl "isDir" zurückgeben, wenn jemand ein Verzeichnis erstellen und prüfen möchte, ob es existiert? Sollte isDir ("/ home / shrodingers / cat") true, false oder beides zurückgeben? Und was würden Sie erwarten, wenn jemand ein Verzeichnis einer Datei in einem Code öffnen möchte?
Und was soll das System tun, wenn Sie es auffordern, etwas zu öffnen? Angenommen, Sie möchten die Datei? Das bedeutet Ärger ;)
Übrigens: Dies gilt für ALLE Betriebssysteme, nicht nur für Linux. Aus der Sicht des Desktops könnte ein Betriebssystem der Datei oder dem Verzeichnis eine eindeutige Kennung hinzufügen und sie aus der Liste entfernen. Aus Sicht der Kommandozeile wäre dies jedoch problematisch.
Wir haben eines gegenüber Windows: Wir verwenden Namen, bei denen die Groß- und Kleinschreibung beachtet wird. "MYFILE" und "myfile" sind also verschiedene Dinge.
quelle
Sie können nicht zwei Entitäten mit demselben Namen am selben Ort haben. Was passiert, wenn Sie die Datei katzen oder vi wollen? Welche Entität wird das Betriebssystem wählen? Aus Gründen der Verwechslungsgefahr können Sie für eine Datei und einen Ordner nicht denselben Namen am selben Speicherort verwenden. Übrigens ist ein Ordner eine Datei, die andere Dateien hostet.
quelle
cat
odervi
dieser Name, sollte das Betriebssystem natürlich die Datei auswählen. Warum kann das nicht funktionieren?vi
das, was normalerweisevim
unter Ubuntu läuft, vollkommen glücklich, ein Verzeichnis zu öffnen und anzuzeigen und es sogar zu bearbeiten. Versuchen Sie es:vi .
cat
odervi
an diesen Namen angesprochen wird Die logische Interpretation besteht darin, es in der Datei und nicht im Unterverzeichnis aufzurufen. Die Tatsache, dass ein (primär) dateiorientierter Befehl (vi
) auch in einem (Unter-) Verzeichnis funktioniert, ist für diese Anweisung irrelevant.vim
behandelt Argumente in Unterverzeichnissen nicht naiv; mit dem gleichen Code, mit dem es Dateien behandelt.vim
Es scheint (auf einer sehr vereinfachten Ebene) zwei Programme in einem zu sein: Wenn es für eine Datei aufgerufen wird, verhält es sich wie ein Texteditor, und wenn es für ein Unterverzeichnis aufgerufen wird, verhält es sich wie ein Dateimanager.vi
. Prost.Ich weiß, dass dies ein altes Thema ist, aber ich hatte gerade das gleiche Problem und wollte es teilen.
Hier ist meine Geschichte (sei geduldig, es gibt ein Happy End).
Umgebung:
Gentoo Kernel 4.12.5 64bit auf reiserfs
Wie konnte das passieren?
Ich habe mehrere Computer mit einem Ordner, der mithilfe der Synchronisierung freigegeben wurde. Irgendwann in der Vergangenheit habe ich eine Datei mit dem Namen ".stfolder" entfernt und stattdessen ein Verzeichnis mit diesem Namen erstellt. Vielleicht liegt der Fehler an der Synchronisierung dieses Vorgangs auf einem anderen Computer.
Lassen Sie uns nun den Fehler untersuchen: (Ich arbeite hier als root )
sieht aus wie eine Geisterdatei, der Ordner antwortet jedoch normal (mit find)
Ich weiß, sehr seltsam ...
Ich kann diese Geisterdatei nicht entfernen!
Aber am Ende habe ich es erfolgreich entfernt, indem ich es auf einen tmpfs-Mount-Punkt verschoben habe
Ich muss sagen, dass der Bug immer noch auf tmpfs vorhanden ist, also nicht mit reiserfs zu tun hat:
Wie Sie in dieser Bash-Ausgabe sehen können, ist die Datei gleichzeitig vorhanden und nicht vorhanden. Aufgrund dieser Schrödinger-Katzenfähigkeit können wir einen Ordner mit demselben Namen erstellen.
Aber warten Sie, es gibt noch mehr (und Sie sollten dies offensichtlich finden): Wir können auch eine andere Datei mit dem gleichen Namen erstellen.
Der Ghost kann kopiert (damit ich den Bug duplizieren kann) oder durch chown, chmod usw. manipuliert werden. Die einzige Einschränkung besteht darin, dass Sie ihn nicht benennen können, also müssen Sie ihn in ein leeres Verzeichnis legen und ". *" Als verwenden Argumente für diese Befehle ... aber es funktioniert!
Diese Datei war von Anfang an leer (es ist nur ein Flag für die Synchronisierung).
Ich war also neugierig, ob ich einige Daten in diese Datei einfügen könnte.
Und hier kam die Lösung zu mir:
Ja, in dieser Datei befindet sich direkt nach dem Punkt ein unsichtbares Zeichen.
Das erklärt alles.
Gott sei Dank habe ich keinen "Echotest >>. *" Und keine Katze benutzt ...
quelle
U+200b
ist übrigens ein "Null-Breiten-Raum" . Ich mag diese Anekdote, obwohl ich befürchte, dass sie nicht vollständig als Antwort gilt./unix//a/238056/139805
Wow, das ist wirklich komisch, aber ich habe einfach getan, was der Autor gefragt hat. Das ist wie, also ist es eine echte Antwort: P
dies wurde gemacht von:
whoah antworte abwechselnd zwei dateien mit gleichem namen, nicht mal ein verzeichnis und eine datei mehr was ist los ??? _
total seltsames Verhalten
quelle