Будь-який шлях, який починається з /- це абсолютний шлях, а не відносний.
Якби всі шляхи завжди були відносно поточного каталогу, як би ви 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.