سؤال

بصفتي مطور Windows في المقام الأول ، ربما أفتقد شيئًا ثقافيًا في مجتمع Linux ، لكنه دائمًا ما يربكني.

عند تنزيل شيء يتم وضع الملفات لأول مرة في .tar أرشفة ثم مضغوط. لماذا العملية المكونة من خطوتين؟ لا الزيت تحقيق تجميع الملفات؟ هل هناك بعض الفوائد الأخرى التي لست على علم بها؟

هل كانت مفيدة؟

المحلول

bzip و gzip العمل على ملفات واحدة ، وليس مجموعات من الملفات. السهول القديمة zippkzip) تعمل على مجموعات من الملفات ولديها مفهوم الأرشيف المدمج.

فلسفة *nix هي واحدة من الأدوات الصغيرة التي تقوم بوظائف محددة بشكل جيد للغاية ويمكن ربطها بسلاسل. لهذا السبب يوجد هنا أداتان لهما مهام محددة ، وهي مصممة لتناسبها معًا بشكل جيد. وهذا يعني أيضًا أنه يمكنك استخدام TAR to Group Files ، ثم لديك خيار أداة ضغط (bzip, gzip, ، إلخ).

نصائح أخرى

تمييز مهم هو في طبيعة النوعين من الأرشيف.

تعد ملفات TAR أكثر من مجرد تسلسل لمحتويات الملف مع بعض الرؤوس ، في حين أن GZIP و BZIP2 هما ضواغط دفق ، في كرات القطران ، يتم تطبيقها على التسلسل بالكامل.

ملفات zip هي سلسلة من الملفات المضغوطة بشكل فردي ، مع بعض الرؤوس. في الواقع ، يتم استخدام الخوارزمية المنهارة من قبل كل من Zip و GZIP ، ومع ضبط ثنائي مناسب ، يمكنك أن تأخذ حمولة دفق GZIP ووضعها في ملف zip مع إدخالات رأس وقود مناسبة.

هذا يعني أن نوعين الأرشيف المختلفين لهما مقايضات مختلفة. بالنسبة للمجموعات الكبيرة من الملفات الصغيرة ، فإن TAR تليها ضاغط الدفق عادة ما يؤدي إلى نسبة ضغط أعلى من ZIP لأن ضاغط الدفق سيكون لديه المزيد من البيانات لإنشاء ترددات القاموس الخاصة به ، وبالتالي تكون قادرة على الضغط على معلومات أكثر زائدة عن الحاجة. من ناحية أخرى ، فإن خطأ (الحفاظ على طول الملف) في ملف zip لن يفسد إلا تلك الملفات التي تأثرت بياناتها المضغوطة. عادة ، لا يمكن لضاغطات الدفقون التعافي بشكل مفيد من الأخطاء في منتصف المباراة. وبالتالي ، فإن ملفات الرمز البريدي أكثر مرونة في الفساد ، لأن جزء من الأرشيف سيظل متاحًا.

من الغريب أنه لم يذكر أي شخص آخر أن الإصدارات الحديثة من GNU tar اسمح لك بالضغط كما تجمع:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

يمكنك أيضًا استخدام ضاغط اختيارك شريطة أن يدعمها "-c"(إلى stdout ، أو من stdin) و"-dخيارات (إلغاء الضغط):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

هذا من شأنه أن يسمح لك بتحديد أي ضاغط بديل.

[وأضاف: إذا كنت تستخرج من gzip أو bzip2 ملفات مضغوطة ، GNU tar يتم اكتشاف هذه الكشف التلقائي وتشغيل البرنامج المناسب. هذا هو ، يمكنك استخدام:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

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

سبب الفصل هو ، كما في الإجابة المحددة ، الفصل بين الواجبات. من بين أشياء أخرى ، هذا يعني أن الناس يمكنهم استخدام 'cpioبرنامج لتعبئة الملفات (بدلاً من tar) ثم استخدم الضاغط المفضل (ذات مرة ، كان الضاغط المفضل pack, ، في وقت لاحق كان compress (الذي كان أكثر فعالية بكثير من pack)، وثم gzip التي ركضت حلقات حول كل من أسلافها ، وهي تنافسية تمامًا مع zip (الذي تم نقله إلى يونيكس ، لكنه ليس مواطنًا هناك) ، والآن bzip2 التي ، في تجربتي ، عادة ما تكون ميزة 10-20 ٪ gzip.

[وأضاف: لاحظ أحدهم في إجابته cpio له اتفاقيات مضحكة. هذا صحيح ، ولكن حتى GNU tar حصلت على الخيارات ذات الصلة ('-T -'), cpio كان الأمر الأفضل عندما لا ترغب في أرشفة كل ما كان تحت دليل معين - يمكنك بالفعل اختيار الملفات التي تم أرشفة بالضبط. الجانب السلبي من cpio هل كنت لست فقط استطاع اختر الملفات - أنت كان لاختيارهم. لا يزال هناك مكان واحد حيث cpio درجات؛ يمكن أن تقوم بنسخة في الموقع من التسلسل الهرمي للدليل إلى آخر دون أي تخزين وسيطة:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

بالمناسبة ، '-depthالخيار على find من المهم في هذا السياق - يقوم بنسخ محتويات الدلائل قبل تحديد الأذونات على الدلائل نفسها. عندما راجعت الأمر قبل إدخال الإضافة إلى هذه الإجابة ، قمت بنسخ بعض الدلائل للقراءة فقط (555 إذن) ؛ عندما ذهبت لحذف النسخة ، اضطررت إلى استرخاء الأذونات على الدلائل من قبل "rm -fr /new/place'يمكن أن تنتهي. بدون ال -depth الخيار ، cpio كان الأمر قد فشل. لقد قمت بإعادة تذكر هذا فقط عندما ذهبت للقيام بالتنظيف - الصيغة المقتبسة هي أن تلقائيًا بالنسبة لي (بشكل رئيسي بحكم العديد من التكرار على مدار سنوات عديدة).

الشيء المضحك هو أنه يمكنك الحصول على سلوك لا يتوقعه المبدعون tar و gzip. على سبيل المثال ، لا يمكنك فقط gzip ملف TAR ، يمكنك أيضًا أن تطرد ملفات gzipped ، لإنتاج أ files.gz.tar (سيكون هذا من الناحية الفنية أقرب إلى الطريق pkzip أعمال). أو يمكنك وضع برنامج آخر في خط الأنابيب ، على سبيل المثال بعض التشفير ، ويمكنك اختيار ترتيب تعسفي من tarring و gzipping والتشفير. كل من كتب برنامج التشفير لا يجب أن يكون لديه أدنى فكرة عن كيفية استخدام برنامجه ، كل ما يحتاجه هو القراءة من الإدخال القياسي والكتابة إلى الإخراج القياسي.

في عالم UNIX ، تم تصميم معظم التطبيقات لفعل شيء واحد ، والقيام بذلك بشكل جيد. أدوات الرمز البريدية الأكثر شعبية في UNIX و GZIP و BZIP2 ، لا تفعل سوى ضغط الملف. القطران يقوم بسلسلة الملف. إن الأنابيب إن إخراج القطران في فائدة ضغط يفعل ما هو مطلوب ، دون إضافة التعقيد المفرط إلى أي من البرامج.

سبب آخر هو السائد للغاية هو أن القطران و GZIP موجودان تقريبًا في قاعدة تثبيت *NIX بالكامل. أعتقد أن هذا ربما يكون أكبر سبب واحد. وله أيضًا أن ملفات zip سائدة للغاية على Windows ، لأن الدعم مدمج ، بغض النظر عن الروتينات المتفوقة في RAR أو 7Z.

يتيح لك Gnu Tar أيضًا إنشاء/استخراج هذه الملفات من أمر واحد (خطوة واحدة):

  • إنشاء أرشيف:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • استخراج أرشيف: (الجزء -C اختياري ، إنه افتراضي للدليل الحالي)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

هذه هي ما التزمت به الذاكرة من سنواتي العديدة على Linux ومؤخراً على Nexenta (OpenSolaris).

أعتقد أنك كنت تبحث عن المزيد من السياق التاريخي لهذا. كان الرمز البريدي الأصلي لملف واحد. يتم استخدام TAR لوضع ملفات متعددة في ملف واحد. لذلك tarring و Zipping هي عملية خطوتين. لماذا لا يزال هو المهيمن اليوم هو تخمين أي شخص.

من ويكيبيديا ل tar_ (file_format)

في الحوسبة ، يكون القطران (المشتق من أرشيف الشريط) كلا من تنسيق ملف (في شكل نوع من الأرشيف bitstream) واسم البرنامج المستخدم للتعامل مع هذه الملفات. تم توحيد التنسيق بواسطة POSIX.1-1988 ثم POSIX.1-2001. تم تطويره مبدئيًا كتنسيق خام ، ويستخدم للنسخ الاحتياطي الشريط وأجهزة الوصول المتسلسلة الأخرى لأغراض النسخ الاحتياطي ، ويستخدم الآن بشكل شائع لتجميع مجموعات الملفات في ملف أكبر ، للتوزيع أو الأرشفة ، مع الحفاظ على معلومات نظام الملفات مثل المستخدم والمجموعة الأذونات والتواريخ وهياكل الدليل.

القطران يونيكس لأن يونيكس هو القطران

في رأيي سبب ساكن استخدام tar اليوم هو أنها واحدة من الحالات (التي ربما نادرة) حيث جعل نهج UNIX يمينًا تمامًا من البداية.

إلقاء نظرة فاحصة على المراحل التي ينطوي عليها إنشاء محفوظات ، آمل أن توافق فلسفة يونيكس في أفضل حالاته:

  • أداة واحدة (tar لمنحه اسمًا هنا) متخصص في التحول أي اختيار الملفات والأدلة والروابط الرمزية بما في ذلك الكل البيانات الوصفية ذات الصلة مثل الطوابع الزمنية والمالكين والأذونات في تيار بايت واحد.

  • وأداة أخرى قابلة للتبديل بشكل تعسفي (gzip bz2 xz لتسمية بعض الخيارات فقط) التي تتحول أي دفق إدخال البايتات في دفق إخراج أصغر (نأمل).

يوفر استخدام مثل هذا النهج مجموعة كاملة من الفوائد للمستخدم وكذلك للمطور:

  • قابلية التوسيعالسماح بالزوج tar مع أي خوارزمية الضغط الموجودة بالفعل أو أي خوارزمية الضغط لا يزال يتعين تطويرها بدون الاضطرار إلى تغيير أي شيء على الأعمال الداخلية tar على الاطلاق.

    بمجرد أن تخرج جميع "Hyper-Zip-Utra" الجديدة تمامًا أو أداة ضغط Whater ، فأنت مستعد بالفعل لاستخدامها في تبني خادمك الجديد مع القوة الكاملة لـ tar.

  • المزيد tar كان في الاستخدام الكثيف منذ أوائل الثمانينيات تم اختباره وتم تشغيله على أنظمة التشغيل والآلات العدد.

    منع الحاجة إعادة اختراع العجلة في تنفيذ ملكية تخزين ، أذونات ، طابع زمني وما شابه ذلك مرارا وتكرارا إلى عن على كل أداة الأرشفة الجديدة لا توفر الكثير من الوقت (وإلا فإن قضاءها بشكل غير ضروري) في التنمية ، بل تضمن أيضًا نفس الوقت الموثوقية لكل تطبيق جديد.

  • التناسق تظل واجهة المستخدم كما هي في كل وقت.

    ليست هناك حاجة لتذكر ذلك لاستعادة الأذونات باستخدام أداة يجب عليك تمريرها --i-hope-you-rember-this-one واستخدام الأداة B عليك استخدامها --this-time-its-another-one أثناء استخدام الأداة C ، فهو "-------حزب المحاول-مع أدوات التول.

    بينما عند استخدام الأداة D ، كنت قد أفسدت ذلك حقًا إذا لم تستخدم --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

قطران تحظى بشعبية في الغالب لأسباب تاريخية. هناك العديد من البدائل المتاحة بسهولة. بعضها موجود منذ ما يقرب من القطران ، لكنه لم يتمكن من تجاوز القطران في شعبية لعدة أسباب.

  • CPIO (بناء جملة أجنبي ؛ نظريًا أكثر اتساقًا ، لكن الناس يحبون ما يعرفونه ، ساد القطران)
  • AR (شائع منذ زمن طويل ، يستخدم الآن في ملفات مكتبة التعبئة)
  • شار (البرامج النصية لاستخلاص الذات ، كان لها كل أنواع القضايا ؛ اعتاد أن تكون شائعة أبدًا أقل)
  • ZIP (بسبب مشكلات الترخيص ، لم يكن متاحًا بسهولة على العديد من الوحدات)

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

على الأرجح الجانب السلبي لل tar.gz (أو ar.z لهذه المسألة) ، وهو أنه يتعين عليك إلغاء ضغط الأرشيف بالكامل لاستخراج ملفات واحدة وإدراج محتويات الأرشيف ، ولا تؤذي الناس أبدًا بما يكفي لجعلها عيبًا من القطران بأعداد كبيرة .

GZIP و BZIP2 هو ببساطة ضاغط ، وليس برامج أرشيف. وبالتالي ، الجمع. أنت بحاجة إلى برنامج Tar-Software لتجميع جميع الملفات.

Zip نفسها ، و RAR ASWELL هي مزيج من العمليتين.

عادة في عالم *nux ، يتم توزيع حزم الملفات على أنها كرات القطران ثم اختياريًا. GZIP هو برنامج ضغط ملفات بسيط لا يقوم بتجميع الملف الذي يقوم به TAR أو ZIP.

في وقت واحد ، لم تتعامل Zip بشكل صحيح مع بعض الأشياء التي تعتبرها أنظمة ملفات Unix Tar و Unix طبيعية ، مثل Symlinks ، ملفات الحالة المختلطة ، إلخ. لا أعرف ما إذا كان هذا قد تم تغييره ، ولكن لهذا السبب نستخدم القطران.

TAR = مجموعات الملفات في 1 ملفات

GZIP = ZIP الملف

قاموا بتقسيم العملية في 2. هذا كل شيء.

في Windows Environment ، قد تكون أكثر معتادًا لاستخدام Winzip أو WinRar الذي يقوم بسحاب. تقوم عملية الرمز البريدي لهذه البرامج بتجميع الملف والقطار ولكنك ببساطة لا ترى هذه العملية.

للسبب نفسه الذي يجعل مستخدمي Mac يحبون صور القرص: فهي طريقة مريحة حقًا لأرشفة الأشياء ثم تمريرها حولها أو تنزيلها أو تنزيلها أو إرسالها بالبريد الإلكتروني وما إلى ذلك.

وأسهل للاستخدام وأكثر محمولة من Zips IMHO.

في أيام Altos-Xenix (1982) ، بدأنا باستخدام TAR (Archiver) لاستخراج الملفات من 5 1/4 Floppies أو شريط الدفق وكذلك نسخ إلى هذه الوسائط. تشبه الوظيفة أوامر Backup.exe و Restore.exe في DOS 5.0 و 6.22 كمكملات ، مما يتيح لك امتداد وسائط متعددة إذا لم تتمكن من وضع واحد فقط. كان العيب أنه إذا كان أحد الوسائط المتعددة يعاني من مشاكل ، فإن الأمر برمته كان لا قيمة له. تنشأ TAR و DD من UNIX System III وبقيت أداة إصدار قياسية مع OS-Like OS "ربما لأسباب توافق متخلفة.

TAR ليس فقط تنسيق ملف ، ولكنه تنسيق شريط. أشرطة تخزين البيانات بت. كان كل تطبيق تخزين مخصص. كانت TAR هي الطريقة التي يمكنك من خلالها إخراج البيانات من القرص ، وتخزينها على شريط بطريقة يمكن للآخرين استردادها بدون برنامجك المخصص.

في وقت لاحق ، جاءت برامج الضغط ، ولا يزال *nix لا يوجد لديه سوى طريقة واحدة لإنشاء ملف واحد يحتوي على ملفات متعددة.

أعتقد أنه مجرد الجمود الذي استمر مع اتجاه tar.gz. بدأ PKZIP بكل من الضغط والأرشيف في ضربة واحدة ، ولكن بعد ذلك لم يكن لدى أنظمة DOS محركات أقراص مرفقة!

من ويكيبيديا لـ TAR_ (file_format)

في الحوسبة ، يكون القطران (المشتق من أرشيف الشريط) كلا من تنسيق ملف (في شكل نوع من الأرشيف bitstream) واسم البرنامج المستخدم للتعامل مع هذه الملفات. تم توحيد التنسيق بواسطة POSIX.1-1988 ثم POSIX.1-2001. تم تطويره مبدئيًا كتنسيق خام ، ويستخدم للنسخ الاحتياطي الشريط وأجهزة الوصول المتسلسلة الأخرى لأغراض النسخ الاحتياطي ، ويستخدم الآن بشكل شائع لتجميع مجموعات الملفات في ملف أكبر ، للتوزيع أو الأرشفة ، مع الحفاظ على معلومات نظام الملفات مثل المستخدم والمجموعة الأذونات والتواريخ وهياكل الدليل.

كمطور Windows ، من المفهوم كيف كرات القطران يبدو غريبا. الكلمة tar يقف لأرشيف الشريط. فكر في مسجلات الشريط بكرة إلى إعادة.

في برامج Windows World يتم تثبيتها بشكل عام مع setup.exe أو install.exe التي تعمل جميع أنواع السحرة في السجل ، وإنشاء الدلائل والتركيب .dll (مكتبة الارتباط الديناميكي) ملفات.

في Linux ، Ubuntu على وجه الخصوص من تجربتي الخاصة ، يهتم مديرو الحزم بأخذ تطبيق وتثبيته معظم الوقت. في Ubuntu ، يقوم المطور بإنشاء حزمة تنتهي .deb (ديبيان ، الذي يعتمد عليه أوبونتو). بناء الجملة الأساسي لتثبيت أ .deb هو:

sudo apt install <package_name>

على الرغم من أن هذا أمر مستقيم نسبيًا للمستخدم ، إلا أنه من العمل الكثير للمطورين لإنشاء أ .deb حزمة وربط PPA.

طريقة أسهل للمطورين هي إنشاء كرة تار. ثم يتم مشاركة عبء التثبيت من قبل المستخدم النهائي. يجب عليهم:

  • قم بتنزيل Tarball (عادة ما ينتهي في .tar.gz).
  • إلغاء ضغط رمز المصدر إلى دليل.
  • قم بتجميع الكود المصدري (لم يسمع به أحد في Windows for World).
  • نأمل أن يكتب ما فعلوه في حال احتاجوا إلى التكرار في المستقبل لأنه لا يوجد apt قاعدة البيانات (فكر في قائمة برامج تثبيت Windows) التي يمكن نسخها احتياطيًا.

كإجابة أخرى ، تنص بالفعل على سؤال آخر طرحته ، يمكنك إنشاء بيانات Tarball وضغط البيانات في نفس الوقت. عملية تمرير غير مطلوبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top