أمر Tar في لينكس: دليل شامل لإنشاء الأرشيفات وضغطها واستعادتها
مقدمة إلى أمر Tar: الأداة الخالدة لإدارة الأرشيفات في لينكس
يُعد أمر tar، وهو اختصار لـ tape archive (أرشيف الشريط)، من أقدم وأقوى الأدوات في نظام التشغيل لينكس لإدارة الملفات والأدلة. على الرغم من أن اسمه يعود إلى أيام محركات التخزين المغناطيسية التي كانت شائعة في خمسينيات القرن الماضي، إلا أن tar لم يفقد أيًا من قوته أو قيمته على مر السنين، بل ظل ركيزة أساسية لمسؤولي الأنظمة والمطورين.
في هذا الدليل الشامل، سنستعرض أساسيات إنشاء أرشيفات tar، وضغطها، واستعادتها، مع التركيز على الأمثلة العملية التي تمكنك من إتقان هذه الأداة الحيوية.
إنشاء أرشيفات جديدة باستخدام أمر Tar
للبدء، دعنا نتعلم كيفية إنشاء ملف أرشيف جديد يضم جميع الملفات والأدلة داخل مجلد العمل الحالي وما يليه. سنقوم بتسمية هذا الأرشيف بـ archivename.tar.
يستخدم الأمر tar مجموعة من الوسائط (arguments) لتحديد وظيفته. في هذا المثال، سنستخدم ثلاثة وسائط رئيسية:
- الوسيط
c: يخبرtarبإنشاء أرشيف جديد (create). - الوسيط
v: يجعل الإخراج تفصيليًا (verbose) على الشاشة، لترى تحديثات حول الملفات التي يتم تضمينها. - الوسيط
f: يحدد اسم ملف الأرشيف الذي نرغب في إنشائه (file).
أما الرمز *، فيخبر tar بتضمين جميع الملفات والأدلة المحلية بشكل متكرر (recursively) في الأرشيف.
$ tar cvf archivename.tar *
file1
file2
file3
directory1
directory1/morestuff
directory1/morestuff/file100
directory1/morestuff/file101
من المهم ملاحظة أن أمر tar لا يقوم أبدًا بنقل أو حذف أي من الملفات والأدلة الأصلية التي تغذيها إليه؛ بل ينشئ فقط نسخًا مؤرشفة منها. كما يمكنك استخدام النقطة . بدلاً من النجمة * في الأمر السابق لتضمين حتى الملفات المخفية (التي تبدأ أسماؤها بنقطة) في الأرشيف.
بعد تنفيذ الأمر، ستلاحظ وجود ملف جديد باسم archivename.tar في مجلد العمل. على الرغم من أن امتداد الملف .tar ليس إلزاميًا، إلا أنه من الممارسات الجيدة دائمًا توضيح الغرض من الملف قدر الإمكان.
استخراج واستعادة الملفات من أرشيف Tar
استعادة الملفات من أرشيف tar أمر بسيط للغاية. كل ما عليك فعله هو استخدام الوسائط xvf بدلاً من cvf. سيقوم هذا الأمر باستخراج نسخ جديدة من الملفات والأدلة الأصلية إلى الموقع الحالي.
- الوسيط
x: يخبرtarباستخراج (extract) الملفات من الأرشيف.
$ tar xvf archivename.tar
file1
file2
file3
directory1
directory1/morestuff
directory1/morestuff/file100
directory1/morestuff/file101
بالطبع، يمكنك أيضًا توجيه tar لحفظ الملفات المستخرجة في موقع آخر باستخدام الوسيط -C، متبوعًا بالمسار المستهدف:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
أرشفة ملفات محددة وتضمينها في الأرشيف
في بعض الأحيان، قد لا ترغب في تضمين جميع الملفات داخل شجرة دليل في أرشيفك. على سبيل المثال، إذا كان لديك مجلد يحتوي على مقاطع فيديو وملفات رسومية وصوتية ونصوص، وترغب فقط في أرشفة مقاطع الفيديو التي تحمل امتداد .mp4. إليك كيفية القيام بذلك:
$ tar cvf archivename.tar *.mp4
سيقوم هذا الأمر بإنشاء أرشيف archivename.tar يحتوي فقط على ملفات .mp4 الموجودة في الدليل الحالي.
ضغط الأرشيفات باستخدام Gzip
ملفات الفيديو، على سبيل المثال، يمكن أن تكون ضخمة جدًا. لتقليل حجم الأرشيف، يمكنك استخدام الضغط. ما عليك سوى تشغيل الأمر السابق مع الوسيط z. يخبر هذا الوسيط برنامج gzip بضغط الأرشيف. إذا كنت ترغب في اتباع التقاليد، يمكنك أيضًا إضافة امتداد .gz بالإضافة إلى امتداد .tar الموجود بالفعل، لزيادة الوضوح.
- الوسيط
z: يطلب منtarاستخدام ضغطgzip.
$ tar czvf archivename.tar.gz *.mp4
إذا قمت بتجربة هذا الأمر على ملفات .mp4 الخاصة بك ثم قمت بتشغيل ls -l على الدليل الذي يحتوي على الأرشيفات الجديدة، قد تلاحظ أن ملف .tar.gz ليس أصغر بكثير من ملف .tar، ربما بنسبة 10% فقط. السبب في ذلك هو أن تنسيق ملف .mp4 مضغوط في حد ذاته، لذا لا يوجد مجال كبير لـ gzip للقيام بالكثير من الضغط الإضافي.
أرشفة الملفات من أدلة مختلفة
نظرًا لأن tar يدرك بيئة لينكس تمامًا، يمكنك استخدامه لتحديد ملفات وأدلة موجودة خارج دليل العمل الحالي. يضيف هذا المثال جميع ملفات .mp4 الموجودة في الدليل /home/myuser/Videos/ إلى الأرشيف:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
تقسيم الأرشيفات الكبيرة إلى أجزاء أصغر
نظرًا لأن ملفات الأرشيف يمكن أن تصبح كبيرة جدًا، فقد يكون من المنطقي أحيانًا تقسيمها إلى ملفات أصغر متعددة، ونقلها إلى موقعها الجديد، ثم إعادة تجميع الملف الأصلي في الطرف الآخر. أداة split مصممة لهذا الغرض.
في هذا المثال، يخبر الوسيط -b لينكس بتقسيم ملف archivename.tar.gz إلى أجزاء بحجم 1 جيجابايت. ثم تقوم العملية بتسمية كل جزء – archivename.tar.gz.partaa، archivename.tar.gz.partab، archivename.tar.gz.partac، وهكذا:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
على الجانب الآخر، يمكنك إعادة إنشاء الأرشيف عن طريق قراءة كل جزء بالتسلسل (باستخدام cat archivename.tar.gz.part*)، ثم إعادة توجيه الإخراج إلى ملف جديد يسمى archivename.tar.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
أرشفة أنظمة الملفات عبر البث المباشر إلى مواقع بعيدة
هنا تبدأ الأمور المتقدمة! سنوضح لك كيفية إنشاء صورة أرشيفية لتثبيت لينكس عامل وبثها إلى موقع تخزين بعيد، كل ذلك ضمن أمر واحد. إليك الأمر:
# tar czvf - --one-file-system / /usr /var \
--exclude= /home/andy/ | ssh username@10.0.3.141 \
"cat > /home/username/workstation-backup-Apr-10.tar.gz"
بدلاً من محاولة شرح كل ذلك دفعة واحدة، سنستخدم أمثلة أصغر لاستكشافه قطعة قطعة.
بث أرشيف دليل إلى خادم بعيد
دعنا ننشئ أرشيفًا لمحتويات دليل يسمى importantstuff وننقله مباشرة إلى خادم بعيد:
$ tar czvf - importantstuff/ | ssh username@10.0.3.141 "cat > /home/username/myfiles.tar.gz"
importantstuff/filename1
importantstuff/filename2
[...]
username@10.0.3.141's password:
في هذا المثال، بدلاً من إدخال اسم الأرشيف مباشرة بعد وسائط الأمر (كما فعلت حتى الآن)، استخدمنا شرطة - (czvf -). تقوم الشرطة بإخراج البيانات إلى المخرجات القياسية (standard output). يتيح لك ذلك دفع تفاصيل اسم ملف الأرشيف إلى نهاية الأمر ويخبر tar بتوقع المحتوى المصدر للأرشيف بدلاً من ذلك. ثم قمنا بتوجيه (pipe) الأرشيف المضغوط غير المسمى إلى تسجيل دخول ssh على خادم بعيد، حيث طُلب منا كلمة المرور. ثم قام الأمر المحاط بعلامات الاقتباس بتنفيذ cat مقابل تدفق بيانات الأرشيف، والذي كتب محتويات التدفق إلى ملف يسمى myfiles.tar.gz في دليلنا الرئيسي على المضيف البعيد.
إحدى مزايا إنشاء الأرشيفات بهذه الطريقة هي أنك تتجنب التكلفة الإضافية لخطوة وسيطة. لا توجد حاجة حتى لحفظ نسخة مؤقتة من الأرشيف على الجهاز المحلي. تخيل عمل نسخة احتياطية لتثبيت يملأ 110 جيجابايت من مساحته المتاحة البالغة 128 جيجابايت. أين سيذهب الأرشيف؟ هذه الطريقة تحل هذه المشكلة بكفاءة.
النسخ الاحتياطي لنظام تشغيل لينكس نشط إلى محرك أقراص USB
لنفترض أنك بحاجة إلى عمل نسخة احتياطية لنظام تشغيل لينكس نشط إلى محرك أقراص USB حتى تتمكن من نقله إلى جهاز منفصل وإسقاطه في محرك الأقراص الرئيسي لذلك الجهاز. بافتراض وجود تثبيت جديد لنفس إصدار لينكس على الجهاز الثاني، فإن عملية النسخ/اللصق التالية ستنشئ نسخة طبق الأصل من الأول.
ملاحظة هامة: لن يعمل هذا على محرك أقراص مستهدف لا يحتوي بالفعل على نظام ملفات لينكس مثبت. للتعامل مع هذا الموقف، ستحتاج إلى استخدام الأمر dd.
ينشئ المثال التالي أرشيفًا مضغوطًا على محرك أقراص USB المعروف باسم /dev/sdc1. يقوم الوسيط --one-file-system باستبعاد جميع البيانات من أي نظام ملفات بخلاف النظام الحالي. هذا يعني أن الأقسام الزائفة (pseudo partitions) مثل /sys/ و /dev/ لن تتم إضافتها إلى الأرشيف. إذا كانت هناك أقسام أخرى تريد تضمينها (كما ستفعل لـ /usr/ و /var/ في هذا المثال)، فيجب إضافتها بشكل صريح. أخيرًا، يمكنك استبعاد البيانات من نظام الملفات الحالي باستخدام الوسيط --exclude:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \
--one-file-system \
/ /usr /var \
--exclude= /home/andy/
العودة إلى الأمر الكامل للبث المباشر
الآن دعنا نعود إلى مثال الأمر الكامل للخدمة الذي رأيناه في البداية. باستخدام ما تعلمته بالفعل، يمكنك أرشفة جميع الأدلة الهامة لنظام ملفات ونسخ ملف الأرشيف إلى محرك أقراص USB أو خادم بعيد. يجب أن يكون الأمر منطقيًا لك الآن:
# tar czvf - --one-file-system / /usr /var \
--exclude= /home/andy/ | ssh username@10.0.3.141 \
"cat > /home/username/workstation-backup-Apr-10.tar.gz"
الخلاصة التقنية
يُظهر أمر tar في لينكس مرونة وقوة استثنائيتين، مما يجعله أداة لا غنى عنها في ترسانة أي مسؤول نظام أو مطور. من إنشاء أرشيفات بسيطة وضغطها، إلى التعامل مع النسخ الاحتياطي لأنظمة الملفات المعقدة وبثها مباشرة إلى مواقع بعيدة، يوفر tar حلاً فعالاً وموثوقًا به. إن فهم وسائطه المتعددة وقدراته المتقدمة، مثل تقسيم الأرشيفات واستبعاد مسارات معينة، يمكّن المستخدمين من إدارة بياناتهم بكفاءة عالية، مما يضمن سلامة النسخ الاحتياطية وسهولة استعادتها. يظل tar مثالًا ساطعًا على الأدوات الكلاسيكية التي تتكيف وتزدهر في بيئات الحوسبة الحديثة.