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