Jeder Pfad, der mit beginnt, /
ist ein absoluter Pfad, nicht relativ.
Wenn alle Pfade immer relativ zum aktuellen Verzeichnis wären, wie würden Sie sich überhaupt cd /etc
verhalten? Sie müssten cd ../../../../../etc
und hoffen, dass das genug Level ist ..
, oder machen cd ..
Sie einfach weiter, bis Sie zum Stammverzeichnis gelangen.
Oder Sie benötigen eine andere Syntax, um absolute Pfade auszudrücken. Unix entschied sich jedoch für /
absolut, alles andere war relativ zum aktuellen Arbeitsverzeichnis des Prozesses. So mv MyFile.txt openvpn
funktionieren würde.
Und nein, es würde nicht gut funktionieren, aus vorhandenen oder nicht vorhandenen Dateien absolut oder relativ zu schließen. Wir möchten nicht , dass mkdir
Systemaufrufe zu behandeln Pfade anders chdir
oder rename
Systemaufrufe, und macht das mv
Programm tut es bleibt nur Raum für Widerspruch zwischen mv
und einem anderen Programm , das eine Ausgabedatei nimmt.
mv
ist bereits etwas Besonderes, da das rename()
Ziel, wenn es sich um ein Verzeichnis handelt, den Quelldateinamen an dieses Zielverzeichnis anhängt und es erneut versucht. Beachten Sie jedoch, dass eine einfache Implementierungsstrategie darauf beruht, dass der erste rename()
Systemaufruf mit EEXIST
oder fehlschlägt EISDIR
. Wir müssen also wissen, ob ein Pfad relativ oder absolut ist, bevor wir das Dateisystem überprüfen.
(Early Unix lief auf langsamen Computern, auf denen zusätzliche Überprüfungen, ob ein Verzeichnis vorhanden war, zusätzliche E / A bedeuten könnten, wenn es nicht zwischengespeichert wurde, oder mehr Druck auf das Verzeichnis-Caching. Ich denke jedoch, dass Argumente für Vernunft / Korrektheit ausreichen, um zu erklären, warum Sie zuerst raten war keine plausible Funktionsweise des Systems, ohne auf historische Effizienzargumente zurückzugreifen.)
sudo mv /openvpn/MyFile.conf /etc/
Befehl. In dem wahrscheinlichen Szenario, in dem das Verzeichnis nicht vorhanden war, wird nur ein Fehler angezeigt (wahrscheinlich "Kein Verzeichnis") und das Dateisystem nicht berührt. Dann können Sie einfach tunsudo mv /openvpn /etc/MyFile.conf
.