12
  • mv a b

  • cp a b ; rm a

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

8 ответов8

20

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

9

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

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

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

7

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

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

Скопируйте и удалите

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

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

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

3

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

2

Да.

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

2

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

2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .