атомарность? Я действительно не знаю, является ли команда mv атомарной.
Адриано Вароли Пьяцца
Да. Почему ты спрашиваешь?
1
Теперь mvон аналогичен ln+ rm, хотя первый будет работать для перемещений между файловыми системами (который затем просто становится cp+ rm), тогда как последний не будет выполняться при ln(который не поддерживает жесткие ссылки между файловыми системами).
Крис Шут-Янг
Каждый день - школьный день - для всех, кто придет в себя, задаваясь вопросом, как переопределить это поведение по умолчанию, вам нужен --remove-destinationпереключатель - stackoverflow.com/a/9371263/409638
Роберт
Ответы:
20
Предполагая, что файлы находятся в одной и той же файловой системе, mv просто меняет указатели в файловой системе, тогда как cp копирует все содержимое файла, а rm снова меняет указатели. Так что мв намного эффективнее.
@eSKay: Нет. Два сценария: 1. Цель не существует. mvпросто переименовывает файл (тот же индекс, что и у исходного файла). cpделает новый индекс для нового файла. 2. Цель существует. mvотсоединяет (удаляет) целевой файл и переименовывает его за один шаг. cpперезаписывает inode целевого файла.
Крис Шестер-Янг
7
Также mvникогда не изменяет разрешение или право собственности. Представьте, что вы хотите переместить файл из домашнего каталога вашего собеседника в ваш собственный домашний каталог. Если вы mvэто сделаете, вы получите файл в вашем домашнем каталоге, который принадлежит вашему собеседнику. Вы не можете chownили chmodи в зависимости от разрешений даже не изменять и не читать. Если вы cpпоследуете, rmфайл будет принадлежать вам, и все в порядке.
Людвиг Вайнцерль
9
Да, у mv есть шанс быть атомарным на том же диске, тогда как комбинация cp и rm никогда не имеет.
Это предполагает, что mv реализован с использованием rename(), что является вызовом, который имеет гарантию. Посмотрите, например, этот пост группы новостей , который цитирует POSIX:
Эта функция rename () эквивалентна для обычных файлов тем, которые определены стандартом ISO C. Его включение здесь расширяет это определение для включения действий над каталогами и определяет поведение, когда новый параметр называет файл, который уже существует. Эта спецификация требует, чтобы действие функции было атомарным.
Когда источник и место назначения находятся на одном физическом томе, тогда первый подход - это просто переименование и очень быстрое (даже если файлы очень большие).
cp& rmвсегда будет загружать / хранить все данные, даже если в этом нет необходимости.
милливольт по сути является операцией переименования. Это означает, что сам файл остается в том же месте на диске. Фактическая файловая операция не выполняется.
mv просто изменяет метаданные файловой системы в файле, относящиеся к его имени и расположению, тогда как cp создает отдельную копию файла, что занимает гораздо больше времени, так как он должен полностью прочитать первый файл и затем записать его содержимое в другой файл.
Разница в том, что mv сохраняет атрибуты файла, а cp по умолчанию - нет, например, устанавливает дату создания на текущую дату.
Чтобы переопределить это значение по умолчанию, используйте «cp -p» для сохранения последней модификации данных, времени последнего доступа, идентификатора пользователя и идентификатора группы (только если у него есть разрешения для этого), биты разрешения файла и SUID и SGID биты.
mv
он аналогиченln
+rm
, хотя первый будет работать для перемещений между файловыми системами (который затем просто становитсяcp
+rm
), тогда как последний не будет выполняться приln
(который не поддерживает жесткие ссылки между файловыми системами).--remove-destination
переключатель - stackoverflow.com/a/9371263/409638Ответы:
Предполагая, что файлы находятся в одной и той же файловой системе, mv просто меняет указатели в файловой системе, тогда как cp копирует все содержимое файла, а rm снова меняет указатели. Так что мв намного эффективнее.
источник
mv
просто переименовывает файл (тот же индекс, что и у исходного файла).cp
делает новый индекс для нового файла. 2. Цель существует.mv
отсоединяет (удаляет) целевой файл и переименовывает его за один шаг.cp
перезаписывает inode целевого файла.mv
никогда не изменяет разрешение или право собственности. Представьте, что вы хотите переместить файл из домашнего каталога вашего собеседника в ваш собственный домашний каталог. Если выmv
это сделаете, вы получите файл в вашем домашнем каталоге, который принадлежит вашему собеседнику. Вы не можетеchown
илиchmod
и в зависимости от разрешений даже не изменять и не читать. Если выcp
последуете,rm
файл будет принадлежать вам, и все в порядке.Да, у mv есть шанс быть атомарным на том же диске, тогда как комбинация cp и rm никогда не имеет.
Это предполагает, что mv реализован с использованием
rename()
, что является вызовом, который имеет гарантию. Посмотрите, например, этот пост группы новостей , который цитирует POSIX:источник
В той же файловой системе mv изменяет ссылку на каталог, указывая на один и тот же индекс (данные файла и метаданные) таким образом:
Скопируйте и удалите
источник
Когда источник и место назначения находятся на одном физическом томе, тогда первый подход - это просто переименование и очень быстрое (даже если файлы очень большие).
cp
&rm
всегда будет загружать / хранить все данные, даже если в этом нет необходимости.источник
милливольт по сути является операцией переименования. Это означает, что сам файл остается в том же месте на диске. Фактическая файловая операция не выполняется.
источник
Да.
mv просто изменяет метаданные файловой системы в файле, относящиеся к его имени и расположению, тогда как cp создает отдельную копию файла, что занимает гораздо больше времени, так как он должен полностью прочитать первый файл и затем записать его содержимое в другой файл.
источник
cp и rm намного тяжелее используют диск и могут перестать работать из-за дискового пространства.
источник
Разница в том, что mv сохраняет атрибуты файла, а cp по умолчанию - нет, например, устанавливает дату создания на текущую дату.
Чтобы переопределить это значение по умолчанию, используйте «cp -p» для сохранения последней модификации данных, времени последнего доступа, идентификатора пользователя и идентификатора группы (только если у него есть разрешения для этого), биты разрешения файла и SUID и SGID биты.
источник