Чи є якась різниця між mv та {cp + rm старим файлом} у Unix?


14
  • mv a b

  • cp a b;rm a

Це дві групи тверджень. Чи є якась різниця між тим, що вони роблять?


1
атомність? Я не знаю, чи команда mv є атомною.
Адріано Варолі П'яцца

Так. Чому Ви запитуєте?

1
Зараз mvсхожий на ln+ rm, хоча перший працюватиме для крос-файлової системи (який потім просто стає cp+ rm), тоді як останній не вдасться ln(що не підтримує жорсткі посилання міжфайлової системи).
Кріс Єстер-Янг

Кожен день - це шкільний день - для всіх, хто стикається з цим питанням, як перекрити цю поведінку за замовчуванням, вам потрібен --remove-destinationперемикач - stackoverflow.com/a/9371263/409638
robert

Відповіді:


20

Якщо припустити, що задіяні файли знаходяться в одній файловій системі, то mv просто змінює покажчики у файловій системі, тоді як cp копіює весь вміст файлу, а rm знову змінює покажчики. Тож mv набагато ефективніше.


1
але вони роблять точно те саме, правда?
Лазер

8
Ні, вони ні.

3
@eSKay: Ні. Два сценарії: 1. Ціль не існує. mvпросто перейменовує файл (такий же вклад, що і вихідний файл). cpробить новий inode для нового файлу. 2. Ціль дійсно існує. mvвід’єднує (видаляє) цільовий файл і перейменовує за один крок. cpперезаписує індею цільового файлу.
Кріс Єстер-Янг

7
Також mvніколи не змінюйте дозвіл чи право власності. Уявіть, що ви хочете перемістити файл з хомедіра свого приятеля до власного хомедіра. Якщо ви mvце, то в кінцевому підсумку ви отримаєте файл у своєму гомедері, який належить вашому приятелю. Ви не можете chownабо chmodзалежно від дозволів навіть не змінювати та не читати. Якщо ви cpдотримуєтесь rmцього, файл буде належати вам, і все в порядку.
Людвіг Вайнцерль,

9

Так, mv має шанс бути атомним на одному диску, тоді як комбінація cp і rm ніколи не має.

Це припускаючи, що mv реалізований з використанням rename(), що є викликом, який має гарантію. Дивіться, наприклад, цю публікацію групи новин , в якій цитується POSIX:

Ця функція перейменування () еквівалентна для звичайних файлів тій, що визначена стандартом ISO C. Його включення сюди розширює це визначення, щоб включати дії над каталогами та визначає поведінку, коли новий параметр називає файл, який вже існує. Ця специфікація вимагає, щоб дія функції була атомною.


8

У цій же файловій системі mv змінює посилання на каталог, вказуючи на той самий inode (дані файлу та метадані) таким чином:

  • це атомна операція (її не можна перервати іншою операцією з файлом процесу)
  • займає лише тривіальну кількість додаткового місця на диску (додаткове ім'я в каталозі)
  • зберігає дозволи та права власності на файли
  • може бути набагато швидшим, залежно від кількості даних

Скопіюйте та видаліть

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

4

Якщо джерело та пункт призначення мають однаковий фізичний об'єм, то перший підхід - це просто перейменування і дуже швидкий (навіть якщо файл (и) дуже великі).

cp& rmзавжди доведеться завантажувати / зберігати всі дані, навіть якщо це не було необхідним.


3

mv по суті є операцією "перейменування". Це означає, що сам файл залишається на тому ж місці на диску. Фактична робота з файлом не виконується.


3

Різниця полягає в тому, що mv зберігає атрибути файлу, тоді як cp за замовчуванням не робить, наприклад встановлення дати створення поточної дати.

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


2

Так.

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


2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.