Anscheinend kann man die Datei umbenennen...
.
Wenn ich verrückt wäre, wie würde ich die Datei in ..
oder umbenennen .
? Ist so ein Dateiname überhaupt erlaubt?
Backslash scheint die spezielle Bedeutung von dot nicht zu deaktivieren:
$ mv test \.
mv: `test' and `./test' are the same file
.
und..
existieren bereits. Und Punkt hat keine besondere Bedeutung..
oder..
von Windows auf einem externenFAT
oder einemNTFS
Datenträger erstellen können , und dann versuchen, diese in ein Unix-basiertes System einzubinden. Hm ....
und..
tatsächlich in NTFS und der NT-API vorhanden sind oder ob sie nur von der Win32-API hinzugefügt werden. Ich weiß, dass es mehrere Diskrepanzen zwischen der NT-API der unteren Ebene und Win32 gibt, zum Beispiel versteckt Win32 mehrere Dateien vor dem Laufwerkstamm.Antworten:
..
ist nichts besonderes, es ist nur so, dass es bereits existiert.Unter Unix, Dos und MS-Windows verfügt jedes Verzeichnis über ein Verzeichnis
.
, das mit sich selbst verknüpft ist, und ein Verzeichnis..
, das mit dem übergeordneten Verzeichnis (oder self, wenn Root-Verzeichnis) verknüpft ist.Wenn
..
und.
sind speziell, ist es nur, weil Sie sie nicht entfernen können (tatsächlich können Sie nur das Verzeichnis entfernen, das sie enthält).Daher können Sie keine (andere) Datei
.
oder benennen..
.Jedoch Sie Dateien erstellen
...
,\
,…
,..
(Anmerkung gibt es einen Raum nach dem..
, aber man kann es kaum hier sehen, oder einfach in ihrer Verzeichnisliste) oder einen anderen Namen , den Sie mögen; Das einzige reservierte Zeichen ist/
(Warnung - erweiterte Details: und null, null ist ein Sonderzeichen, das nur zum Markieren des Endes von Dingen und manchmal als Trennzeichen verwendet wird)..
hat keine besondere Bedeutung: nicht für Dateinamen, Kernel oder für die Shell, es muss nicht maskiert werden. Wenn ein Dateiname mit einem beginnt.
, ist er eigentlich etwas Besonderes. Die Datei ist normalerweise ausgeblendet, muss jedoch nicht maskiert werden.Beiseite
Dieses Verhalten bei versteckten Dateien entstand in einer frühen Implementierung dessen,
ls
wo der Autor sich verstecken wollte,.
und..
so schrieben sie Code, um alle Dateien auszublenden, die mit a beginnen.
. Andere Benutzer bemerkten diesen Fehler / diese Funktion und begannen mit dem Erstellen von Dateien, beginnend mit dem.
Zeitpunkt, an dem die Datei ausgeblendet werden soll.Erklärung der verknüpften Frage
In der Frage, die Sie mit dem Fragesteller verknüpfen, wird versucht, die Datei in das übergeordnete Verzeichnis zu verschieben. Am Ende wird die Datei
..
jedoch in umbenannt...
. Dateien, die mit einem Punkt beginnen, werden standardmäßig ausgeblendet, weshalb sie nicht gefunden werden können.Bei Verwendung von mv im Formular
mv a b
.
ist dies praktisch eine Nulloperation, die jedochmv
als Fehler behandelt wird...
wird die Datei in das übergeordnete Verzeichnis verschoben.quelle
If you move to . it is effectively a no operation
? Es ist kein "no op". Es ist ein Fehler, wenn Sie versuchen, eine Datei von A nach B zu verschieben, wenn A und B dasselbe sind. Weitere praktische Demonstration dieses Fehlers istmv foo ../some_dir/foo
odermv foo some_subdir/../foo
./
und NUL) und reserviertem Namen (dh.
und..
) könnte klarer gemacht werden. Es sei auch darauf hingewiesen, dass.
der Name zu Beginn nur auf der Anwendungsebene und nicht in der Kernel- oder Systemaufruf-API eine besondere Bedeutung hat...
und.
sind besonders: Sie können sie nicht bewegen oder entfernen. Sie sind jedoch keine Besonderheiten, wenn Sie Dateien auf sie verschieben.Sie können eine Datei nicht in
.
oder umbenennen,..
da alle Verzeichnisse bereits Einträge für diese beiden Namen enthalten. (Diese Einträge verweisen auf Verzeichnisse, und Sie können eine Datei nicht in ein Verzeichnis umbenennen.)mv
Erkennt den Fall, dass das Ziel ein vorhandenes Verzeichnis ist, und interpretiert es als Aufforderung, die Datei in dieses Verzeichnis zu verschieben (unter Verwendung des aktuellen Namens).Backslashes haben damit nichts zu tun, da
.
es sich nicht um ein Shell-Metazeichen handelt.\.
und.
sind gleich zubash
.quelle
Das Problem ist, dass Sie eine Datei in ein Verzeichnis verschieben. Dies darf scheitern.
Ich werde dir sagen, wie es einmal war.
mkdir hat dies im Wesentlichen gelesen (während ich dies in sh schreibe, wurde es wirklich in C und setuid-root geschrieben).
Sie sehen also, dass es nicht viel Besonderes gibt. und .. bis auf die Tatsache, dass sie von mkdir für Sie erstellt wurden und bereits existieren. Es gibt jetzt Code, der besagt, dass Sie sie nicht entfernen können, aber das war nicht immer der Fall.
Früher sah rmdir so aus:
quelle