Почему не делает 'mv файла/, dir' перемещают файл в подкаталог текущего рабочего каталога?

Я был в моем /etc каталог и введенный команда

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

Я думал, что это переместит файл в каталог openvpn который является подкаталогом /etc каталог. Однако это, кажется, не то, что произошло. Все, что я могу подтвердить, - то, что команда выполнялась.

10
задан 12 February 2019 в 03:48

5 ответов

Предоставленный каталог это имя не существует, Вы переименовали файл к openvpn расположенный в Вашем корневом каталоге /. Для возвращения этого работайте:

sudo mv /openvpn /etc/MyFile.conf

Если каталог действительно существовал, Вы переместили файл в нем, то возвращение:

sudo mv /openvpn/MyFile.conf /etc/

Для перемещения его в существующий подкаталог текущего каталога, можно выполнить любой из них – те относительные пути использования:

mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/

. ссылка на текущий каталог, таким образом, ./ в начале пути означает “в этом каталоге”. Наклонная черта в конце означает это openvpn каталог, и Вы хотите переместить файл в нем. Если Вы не обеспечите его, то файл будет перемещен в него, если каталог с этим именем будет существовать, еще то файл будет переименован к openvpn. С a / в конце, mv предупредит Вас, если каталог будет отсутствовать, и не переименовывают, таким образом, это - безопасный путь, если Вы не хотите переименовывать.

Если Ваш путь начинается / с другой стороны, это - полный путь независимо от текущего рабочего каталога, это всегда относительно корневого каталога /. Используя полные пути и для файла и для места назначения Ваша команда была бы похожа на это:

mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/

Дальнейшее чтение

51
ответ дан 23 November 2019 в 04:15

Необходимо использовать

me@mylaptop:/etc$ sudo mv MyFile.conf openvpn/

перемещаться MyFile.conf файл в openvpn подкаталог /etc/.

С другой стороны,

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

переместил бы файл в / каталог как openvpn (т.е. переименуйте как openvpn) вместо этого (принятие /openvpn каталог не существует).

9
ответ дан 23 November 2019 в 04:15

При перемещении файла Вы говорите ОС каталог, в который Вы хотите поместить ее, или новый путь, который Вы хотите дать ей.

Вы сказали ОС "/openvpn". Таким образом, это собирается сделать точно, что - проверяют, существует ли/openvpn (значение объекта, названного "openvpn", расположенным в корневом каталоге), и является каталогом, и раз так переместите свой файл в него, или иначе если/openvpn является файлом или не существует, переименуйте и переместите свой файл, таким образом, это теперь доступно как/openvpn.

То, что Вы хотели, чтобы это сделало, было переместить его в в рамках каталога "openvpn", который должен быть найден в Вашем текущем каталоге, не один это находится в корневом каталоге файловой системы (который является тем, что продвижение "/" показывает). Таким образом, необходимо было указать на тот dir в команде перемещения, не к полному пути "/openvpn". Любой из них будет работать:

  • mv MyFile.conf openvpn - посмотрите в моем текущем dir для этого "openvpn"
  • mv MyFile.conf /etc/openvpn - ищите полный путь/etc/openvpn
  • mv MyFile.conf openvpn/ - посмотрите в моем текущем dir, поскольку dir назвал openvpn
  • mv MyFile.conf ./openvpn - делает "текущий dir" еще более очевидным

Короткая версия - Вы, вероятно, использовали "/", чтобы означать "мой текущий каталог", поэтому "/openvpn" означать "openvpn, который находится в моем текущем каталоге". Но продвижение "/" только когда-либо означает "корневой каталог", таким образом, "/openvpn", предназначенный "openvpn в корневом каталоге". То, в чем Вы нуждались, должно было просто использовать "openvpn" или "openvpn /", означая "openvpn в моем текущем каталоге".

4
ответ дан 23 November 2019 в 04:15

Любой путь, который запускается с / полный путь, не относительный.

Если все пути всегда были относительно текущего каталога, как был бы Вы cd /etc во-первых? Вы имели бы к cd ../../../../../etc и надежда, которая была достаточными уровнями .., или просто продолжайте делать cd .. пока Вы не добрались до корневого каталога.

Или Вам был бы нужен некоторый другой синтаксис для выражения полных путей. Но Unix решен / означая абсолютный, при этом что-либо еще относительно текущего рабочего каталога процесса. Так mv MyFile.txt openvpn работал бы.


И не, это не работало бы хорошо для выведения абсолютный по сравнению с родственником из существующих файлов или нет. Мы не хотели бы mkdir системные вызовы для обработки путей по-другому по сравнению с chdir или rename системные вызовы и создание mv программа делает это, просто оставляет место для несоответствия между mv и некоторая другая программа, которая берет выходное имя файла.

mv является уже особенным потому что когда rename() место назначения является каталогом, он добавляет исходное имя файла к тому целевому каталогу и попробовал еще раз. Но заметьте, что одна простая стратегия реализации полагается первого rename() системный вызов, переставший работать с EEXIST или EISDIR. Таким образом, мы должны знать, является ли путь относительным или абсолютным прежде, чем проверить файловую систему.

(Ранний Unix работал на медленных компьютерах, где дополнительные проверки, если каталог существовал, могли бы означать дополнительный ввод-вывод, если бы он не кэшировался, или больше давления на кэширование каталога. Но я думаю исправность / аргументы правильности достаточны для объяснения, почему первое предположение не было вероятным путем к системе для работы, не обращаясь к историческим аргументам эффективности.)

1
ответ дан 23 November 2019 в 04:15

Завершать другие ответы:

mv file.txt /location

совпадает с, для Windows

mv file.txt c:\location

О файловой системе в Linux думают в соответствии со стандартом иерархии файловой системы или FHS, если коротко. помогает Вам знающий, куда файл должен быть помещен в зависимости от его характера и содержания.

Первая папка (эквивалентный c: в Windows), /.

1
ответ дан 23 November 2019 в 04:15

Другие вопросы по тегам:

Похожие вопросы: