Есть ли какая-то разница между mv и {cp + rm старым файлом} в Unix?

  • mv a b

  • cp a b;rm a

это два набора утверждений. Есть некоторая разница между тем, что они делают?

20
задан Sathya
07.12.2022 23:20 Количество просмотров материала 3562
Распечатать страницу

8 ответов

предполагая, что файлы находятся в одной файловой системе, mv просто изменяет указатели в файловой системе, тогда как cp копирует все содержимое файла, а rm снова изменяет указатели. Так что mv намного эффективнее.

20
отвечен 2022-12-09 07:08

да, mv имеет шанс быть атомарным на том же диске, тогда как комбинация cp и rm никогда не имеет.

это при условии, что mv реализуется с помощью rename(), который звонок который имеет гарантию. Смотрите, например,этот пост, который цитирует POSIX:

эта функция rename () эквивалентна для обычных файлов это определено по стандарту ISO C. Его включение здесь расширяет это определение к включать действия над каталогами и определяет поведение при имена параметров файл, который уже существует. Эти спецификации требует, чтобы действие функции было атомарным.

9
отвечен unwind 2022-12-09 09:25

в той же файловой системе mv изменяет ссылку на каталог, указывая на тот же inode (данные файла и метаданные) таким образом:

  • является атомарной операцией (она не может быть прервана другой операцией файла процесса)
  • занимает только тривиальный объем дополнительного дискового пространства (дополнительное имя в каталоге)
  • сохраняет права доступа к файлам и владения
  • может быть гораздо быстрее, в зависимости от количества данных

скопировать и удалить

  • не является атомарным (другой процесс может мешать командам cp и rm)
  • требует хранить данные по архива дважды на диске на короткий период (между командами cp и rm)
  • изменяет права доступа к файлам и владения по умолчанию
  • может быть гораздо медленнее или даже не, в зависимости от количества данных
7
отвечен mpez0 2022-12-09 11:42

когда источник и назначение находятся на одном физическом томе, то первый подход просто переименовать и очень быстро(даже если файл (ы) очень большой).

cp & rm всегда будет загружать / хранить все данные, даже если в этом нет необходимости.

4
отвечен Joachim Sauer 2022-12-09 13:59

mv по сути, "переименовать" операция. Это означает, что сам файл остается в том же месте на диске. Фактическая операция с файлами не выполняется.

2
отвечен Philippe Leybaert 2022-12-09 16:16

да.

mv просто изменяет метаданные файловой системы в файле, относящиеся к его имени и местоположению, тогда как cp создает отдельную копию файла, что занимает много времени больше так как он должен полностью прочитать первый файл, а затем записать его содержимое в другой файл

2
отвечен anonymous coward 2022-12-09 18:33

cp и rm намного тяжелее на использование диска, и может произойти сбой по причинам дискового пространства.

2
отвечен Ofir 2022-12-09 20:50

разница в том, что mv сохраняет атрибуты файла, а cp по умолчанию нет, например, устанавливает дату создания на текущую дату.

чтобы переопределить это значение по умолчанию, используйте" cp-p", чтобы сохранить последнее изменение данных, время последнего доступа, идентификатор пользователя и идентификатор группы (только если у него есть разрешения на это), биты разрешений файлов и биты SUID и SGID.

2
отвечен harrymc 2022-12-09 23:07

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх