Есть ли некоторое различие между mv и {CP + комната старый файл} на Unix?

  • mv a b

  • cp a b;rm a

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

12
задан 20.10.2012, 13:02

8 ответов

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

20
ответ дан 07.12.2019, 11:43

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

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

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

9
ответ дан 07.12.2019, 11:43

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

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

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

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

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

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

4
ответ дан 07.12.2019, 11:43

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

3
ответ дан 07.12.2019, 11:43

Да.

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

2
ответ дан 07.12.2019, 11:43

CP и комната являются намного более тяжелым на использовании диска и могут перестать работать по причинам дискового пространства.

2
ответ дан 07.12.2019, 11:43

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

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

2
ответ дан 07.12.2019, 11:43

Теги

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