mv a b
cp a b
;rm a
Это два набора утверждений. Есть ли какая-то разница между тем, что они делают?
mv a b
cp a b
; rm a
Это два набора утверждений. Есть ли какая-то разница между тем, что они делают?
Предполагая, что файлы находятся в одной и той же файловой системе, mv просто меняет указатели в файловой системе, тогда как cp копирует все содержимое файла, а rm снова меняет указатели. Так что мв намного эффективнее.
Да, у mv есть шанс быть атомарным на том же диске, тогда как комбинация cp и rm никогда не имеет.
Это предполагает, что mv реализован с использованием rename()
, который является гарантией вызова. Посмотрите, например, этот пост группы новостей , который цитирует POSIX:
Эта функция rename() эквивалентна для обычных файлов тем, которые определены стандартом ISO C. Его включение здесь расширяет это определение для включения действий над каталогами и определяет поведение, когда новый параметр называет файл, который уже существует. Эта спецификация требует, чтобы действие функции было атомарным.
В той же файловой системе mv изменяет ссылку на каталог, указывая на тот же индекс (данные файла и метаданные), таким образом:
Скопируйте и удалите
Когда источник и место назначения находятся на одном физическом томе, тогда первый подход - это просто переименование и очень быстрое (даже если файлы очень большие).
cp
& rm
всегда должен загружать / хранить все данные, даже если в этом нет необходимости.
mv по сути является операцией переименования. Это означает, что сам файл остается в том же месте на диске. Фактическая файловая операция не выполняется.
Да.
mv просто изменяет метаданные файловой системы в файле, относящиеся к его имени и расположению, тогда как cp создает отдельную копию файла, что занимает гораздо больше времени, так как он должен полностью прочитать первый файл и затем записать его содержимое в другой файл
cp и rm намного тяжелее в использовании диска и могут перестать работать из-за дискового пространства.
Разница в том, что mv сохраняет атрибуты файла, в то время как cp по умолчанию этого не делает, например, устанавливает дату создания на текущую дату.
Чтобы переопределить это значение по умолчанию, используйте «cp -p» для сохранения последней модификации данных, времени последнего доступа, идентификатора пользователя и идентификатора группы (только если у него есть разрешения для этого), биты прав доступа к файлу и SUID и SGID биты.