سؤال هل هناك فرق ما بين mv و {cp + rm الملف القديم} على نظام Unix؟


  • mv a b

  • cp a b.rm a

هذه مجموعتان من العبارات. هل هناك فرق بين ما يفعلونه؟


12
2018-01-28 13:11


الأصل


atomicity؟ أنا لا أعرف حقا إذا كان الأمر mv ذري ، على الرغم من. - Adriano Varoli Piazza
نعم فعلا. لماذا تسأل؟
الآن، mv مشابه ل ln + rm، على الرغم من ذلك ، فإن الأول يعمل على تحركات نظام الملفات المتقاطعة (التي تصبح بعد ذلك فقط cp + rm) ، في حين أن الأخيرة سوف تفشل في ln (التي لا تدعم الروابط الثابتة عبر نظام الملفات). - Chris Jester-Young
كل يوم هو يوم دراسي - لأي شخص يأتي إلى هذا التساؤل عن كيفية تجاوز هذا السلوك الافتراضي الذي تحتاجه --remove-destinationمفتاح كهربائي - stackoverflow.com/a/9371263/409638 - robert


الأجوبة:


بافتراض أن الملفات المعنية موجودة على نفس نظام الملفات ، فعندئذ تقوم mv ببساطة بتغيير المؤشرات في نظام الملفات ، في حين تقوم cp بنسخ محتويات الملف بالكامل ، وتقوم rm مرة أخرى بتغيير المؤشرات. لذلك MV هو أكثر كفاءة بكثير.


20
2018-01-28 13:14



لكنهم يفعلون نفس الشيء بالضبط ، أليس كذلك؟ - Lazer
لا ، لا يفعلون.
eSKay: لا. اثنان سيناريوهات: 1. الهدف غير موجود. mv فقط إعادة تسمية الملف (نفس inode الملف الأصلي). cp يجعل inode جديد للملف الجديد. 2. الهدف موجود. mv يزيل (يزيل) الملف الهدف ، ويعيد تسمية ، في خطوة واحدة. cp الكتابة فوق inode الملف الهدف. - Chris Jester-Young
أيضا mv لا يغير الإذن أو الملكية. تخيل أنك تريد نقل ملف من homedir صديق الخاص بك إلى homedir الخاص بك. اذا أنت mv سوف ينتهي بك الأمر مع ملف في homedir الذي ينتمي إلى صديقك. لا تستطيع chown أو chmod واعتمادًا على الأذونات التي لا تعدلها أو تقرأها. اذا فعلت cp تليها rm الملف سوف ينتمي إليك وكل شيء على ما يرام. - Ludwig Weinzierl


نعم ، لدى mv فرصة أن تكون ذريًا على نفس القرص ، في حين أن الجمع بين cp و rm ليس له مطلقًا.

هذا بافتراض تنفيذ mv باستخدام rename()، وهي الدعوة التي لديها الضمان. انظر ، على سبيل المثال ، هذه المشاركة في مجموعة الأخباروالذي يقتبس POSIX:

هذه الدالة rename () مكافئة   للملفات العادية لذلك محددة       من خلال معيار ISO C. إدراجه هنا يوسع هذا التعريف   إلى       وتشمل الإجراءات على الأدلة ويحدد السلوك عند الجديد       اسم المعلمة ملف موجود بالفعل. هذه المواصفات       يتطلب أن يكون عمل الوظيفة ذريًا.


9
2018-01-28 13:14





على نفس نظام الملفات mv يغير مرجع الدليل ، مشيرا إلى نفس inode (ملف البيانات والبيانات الوصفية):

  • هي عملية ذرية (لا يمكن مقاطعتها من خلال عملية ملف عملية أخرى)
  • يأخذ كمية بسيطة من مساحة القرص إضافية (اسم إضافي في الدليل)
  • يحافظ على أذونات الملفات والملكية
  • يمكن أن يكون أسرع بكثير ، اعتمادا على كمية البيانات

نسخ وإزالة

  • ليست ذرية (يمكن أن تتداخل عملية أخرى بين أوامر cp و rm)
  • يتطلب تخزين بيانات الملف مرتين على القرص لفترة قصيرة (بين أوامر cp و rm)
  • يتغير أذونات الملفات والملكية إلى الافتراضات
  • يمكن أن يكون أبطأ أو حتى يفشل ، وهذا يتوقف على كمية البيانات

7
2018-01-28 14:30





عندما يكون المصدر والوجهة على نفس الحجم الفعلي ، فإن الطريقة الأولى هي ببساطة إعادة تسمية وهي سريعة جدًا (حتى إذا كان الملف (الملفات) كبيرًا جدًا).

cp و rm سيضطر دائمًا إلى تحميل / تخزين جميع البيانات ، حتى لو لم تكن ضرورية.


4
2018-01-28 13:14





ام هو في جوهره عملية "إعادة تسمية". هذا يعني أن الملف نفسه ترك في نفس المكان على القرص. يتم تنفيذ أي عملية ملف الفعلي.


2
2018-01-28 13:13





نعم فعلا.

يغير mv ببساطة البيانات الوصفية للنظام على الملف المتعلق باسمه وموقعه ، في حين يقوم cp بإنشاء نسخة منفصلة من الملف ، والتي تأخذ الكثير أطول لأنه يجب قراءة الملف الأول بالكامل ثم كتابة محتوياته إلى ملف آخر


2
2018-01-28 13:15





cp و rm أثقل بكثير على استخدام القرص ، وقد تفشل لأسباب مساحة القرص.


2
2018-01-28 13:15