Любой путь, который начинается с, /
является абсолютным, а не относительным.
Если бы все пути были всегда относительно текущего каталога, как бы вы 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
.