Любой путь, который начинается с, /является абсолютным, а не относительным.
Если бы все пути были всегда относительно текущего каталога, как бы вы cd /etcв первую очередь? Вам придется cd ../../../../../etcнадеяться, что уровней будет достаточно .., или просто продолжать, cd ..пока не дойдете до корневого каталога.
Или вам понадобится другой синтаксис для выражения абсолютных путей. Но Unix выбрал /абсолютное значение, а все остальное относительно текущего рабочего каталога процесса. Так mv MyFile.txt openvpnбудет работать.
И нет, было бы не очень хорошо вывести абсолютные и относительные из существующих файлов или нет. Мы не хотели бы mkdirсистемные вызовы , чтобы лечить по- разному дорожкам от chdirили renameсистемных вызовов, и делая mvпрограмму делать это только оставляет за несогласованности mvи некоторой другой программой , которая принимает имя выходного файла.
mvуже является особенным, потому что, когда rename()местом назначения является каталог, он добавляет имя файла источника в этот каталог назначения и пытается снова. Но обратите внимание, что одна простая стратегия реализации основана на сбое первого rename()системного вызова с помощью EEXISTили EISDIR. Поэтому мы должны знать, является ли путь относительным или абсолютным, прежде чем проверять файловую систему.
(Ранний Unix работал на медленных компьютерах, где дополнительные проверки, если каталог существовал, могли означать дополнительный ввод / вывод, если он не был кэширован, или большее давление на кэширование каталогов. Но я думаю, что аргументы здравомыслия / корректности достаточны, чтобы объяснить, почему ваша первая догадка не было правдоподобного способа работы системы, не прибегая к историческим аргументам эффективности.)
sudo mv /openvpn/MyFile.conf /etc/сначала выполнить команду. В вероятном сценарии каталог не существует, он просто выдаст вам ошибку (вероятно, «Не каталог») и не коснется файловой системы. Тогда вы можете просто сделатьsudo mv /openvpn /etc/MyFile.conf.