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 /etcverhalten? Sie müssten cd ../../../../../etcund 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 openvpnfunktionieren 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 mkdirSystemaufrufe zu behandeln Pfade anders chdiroder renameSystemaufrufe, und macht das mvProgramm tut es bleibt nur Raum für Widerspruch zwischen mvund einem anderen Programm , das eine Ausgabedatei nimmt.
mvist 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 EEXISToder 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.