0

أمرtar لأرشفة، استخراج، ضغط وفك ضغط الملفات على لينوكس

السلام عليكم،

في تدوينة سابقة تناولت الأمر wget وطريقة استخدامه لتنزيل موقع يُتصفح محليا، على نفس النهج أقدم اليوم أمرtar  واستخداماته، على أمل أن أتحدث عن أوامر أخرى في تدوينات قادمة بإذن الله.

يُستخدم الأمر tar (اختصار ل tape archiver الترجمة الحرفية: مُؤَرشِف أشرطة) لتجميع -أرشفة- عدة ملفات في ملف واحد أو العكس، استخراج مجموعة من الملفات مؤرشفة في ملف واحد كبير. غالبا ما تضغط الملفات المؤرشفة – وامتدادها tar. – للحصول على ملف جديد بحجم أقل مثلا عن طريق أحد الأمرين gzip (بعد الضغط يكون الملف الناتج يحمل الامتداد tar.gz) أو bzip2 (ملفات مضغوطة بامتداد tar.bz2 ).
اختيار نوعية الضغط – gzip أو bzip2 – يعتمد على متطلباتك. bzip2 يُنتج ملفات بحجم أقل ولكن يستغرق وقتا أطول من gzip الذي يعطي ملفات بحجم أكبر، أي بنسبة ضغط أقل. إذن الاختيار يكون اعتمادا على الأولوية بالنسبة لك، الوقت الذي يستغرقه الضغط أو حجم الملف المضغوط الناتج. في الملفات ذات الحجم المحدود لايكون الفرق واضحا ولكنه يكون جليا في الملفات الكبيرة الحجم.

الخيارات الأساسية لأمر tar

فيما يلي أهم الخيارات المتوفرة للأمر tar مع أمثلة لاستخدامها. كل خيار – كما غالبية الخيارات في أوامر لينوكس – يتوفر بكتابة قصيرة تسبقها شرطة وكتابة طويلة تسبقها شرطتان(تظهر هنا وكأنها شرطة واحدة إلا أنها في الحقيقة شرطتان، أكتب شرطتين في المصدر ولكن عند العرض تظهر شرطة واحدة، لم أفهم السبب). ينبغي الانتباه أيضا إلى الاختلاف بين الأحرف الصغيرة والكبيرة، r- تختلق تماما عن R- .

  • c- (أو create–): إنشاء أرشيف جديد
  • v- (أو verbose–): إظهار التقدم في معالجة الملف
  • f- (أو file–): تحديد اسم الملف المراد معالجته (استخراجه أو تجميعه)

بمجع الخيارات أعلاه نستطيع إنشاء أرشيف جديد عبر تنفيذ الأمر التالي

tar cvf archive_name.tar dirname/

حيث archive_name.tar هو اسم الأرشيف و dirname/ اسم المجلد – الدليل – المراد أرشفته (تجميع ملفاته).

هذا الأمر ينشئ أرشيفا غير مضغوط، لإنشاء أرشيف مضغوط نستخدم أحد الخيارين:

  • j- (أو bzip2–) لضغط أرشيف عن طريق bzip2 أو فك ضغط واستخراج محتويات ملف ضُغط باستخدام هذا البرنامج (الامتداد: tar.bz2)
  • z- (أو gzip–): نفس عمل j- ولكن يستخدم برنامج gzip (الامتداد: tar.gz) بدلا من bzip2

إنشاء أرشيف مضغوط باستخدام bzip2

tar cvjf archive_name.tar.bz2 dirname/

إنشاء أرشيف مضغوط باستخدام gzip

tar cvzf archive_name.tar.gz dirname/

  •   x- (أو extract–): استخراج مكونات الملف المُجمع

يُستخدام الخيار x- كما يلي لاستخراج أرشيف tar(سيكون الناتج مجلدا بنفس اسم الأرشيف مع إزالة امتداد الأرشيف)

tar xvf archive_name.tar

لاستخراج وفك ضغط ملف gzip ننفذ الأمر

tar xvzf archive_name.tar.gz

بالنسبة لأرشيف مضغوط ب bzip2 نضع j مكان z مع أخذ امتداد الملف بالاعتبار:

tar xvjf archive_name.tar.bz2

لاستخراج ملف واحد من الأرشيف نضيف المسار إلى الملف – داخل الأرشيف – للأمر السابق (في بعض التوزيعات يجب أن يكون المسار مسبوقا ب نقطة “.”)

tar xvf archive_name.tar ./file1
tar xvzf archive_name.tar.gz ./file1 (أرشيف مضغوط gzip)
tar xvjf archive_name.tar.bz2 ./file1 (أرشيف مضغوط bzip2)

  • t- (أو list–): سرد قائمة بالملفات الموجودة في الأرشيف دون استخراج مكوناته

أمثلة

tar tvf archive_name.tar
tar tvfz archive_name.tar.gz (أرشيف مضغوط gzip)
tar tvfj archive_name.tar.bz2 (أرشيف مضغوط bzip2)

تتوفر أيضا خاصية wildcards– لسرد الملفات التي ينطبق عليها تعبير نمطي regular expression دون غيرها، مثلا لسرد الملفات ذات الامتداد txt. داخل الأرشيف

tar xvf archive_file.tar --wildcards '*.txt'

  • r- (أو append–): إضافة ملف للأرشيف، تعمل فقط مع أرشيف غير مضغوط

مثال إضافة الملف newfile للأرشيف  archive_name.tar

tar rvf archive_name.tar newfile

  • d- (أو compare–) : للتحقق من الفوارق – الحجم، الصلاحيات … – بين ملف موجود في الأرشيف وملف بنفس الاسم يوجد خارجه

مثال:
فلنفرض أن الأرشيف test.tar يحوي ملفين test1 و test2. للتحقق من الفوارق بين الملف test1 وملف آخر يحمل نفس الاسم – خارج الأرشيف ولكن في نفس المجلد الذي يحوي الأرشيف – ننفذ الأمر التالي:

tar -d --file=test.tar ./test1

إذا وُجدت فروق فإنها ستظهر، مثلا بعد الأمر السابق ظهرت النتيجة التالية


./test1: Mod time differs
./test1: Size differs

للدلالة أن تاريخ التغيير -Mod time- والحجم -Size- غير متطابقين.
في حال عدم تعيين ملف من ملفات الأرشيف فإن المقارنة تكون بين كل مكونات الأرشيف والملفات التي تحمل نفس أسمائها.

ملحوظتان:
من المستحسن دائما عند دمج العديد من الخيارات في أمرtar البدءُ بخيارات الدوال وجعل الخيار f- إن وُجد في الوضعية الأخيرة ( من بين الخيارات التي ذكرتُها c- و x- و d- و r- و t- دوال، يمكن معرفة البقية عن طريق صفحة الدليل عبر الأمر man tar حيثُ تظهر تحت بند Function Letters). أي أن تموضع الخيارات المنصوح به – لأسباب تتعلق بالحفاظ على طريقة عمل الأمر على مختلف التوزيعات – هو خيارات الدوال ثم الخيارات الأخرى وأخيرا الخيار f-.
بشكل افتراضي تنتظر tar مسارات نسبية، عند إعطاء مسار مطلق يظهر الخطأ tar: Removing leading `/’ from member names . هذا السلوك معد لأسباب أمنية، لذا ينصح بالالتزام بمسارات نسبية، وإن كان لابد من استخدام مسارات مطلقة يمكن استخدام الخيار P- .

للحصول على آخر الإضافات مباشرة بعد نشرها يُرجى الاشتراك في تغذيات RSS.

أو على تطبيق فيدلي عبر الضغط على الزر أدناه

تابعنا على تطبيق فيدلي

مصادر

man tar
http://www.cyberciti.biz/faq/tar-extract-linux/
http://www.gnu.org/software/tar/manual/html_section/Advanced-tar.html#SEC65
http://www.thegeekstuff.com/2010/04/unix-tar-command-examples/
http://www.linuxquestions.org/questions/linux-general-1/bin-tar-removing-leading-%60-from-member-names-269508/

فضلًا.. شارك هذا المقال 🙂

Email this to someoneTweet about this on TwitterShare on FacebookShare on Google+Share on StumbleUpon

zeine77

محمد أحمد ولد العيل، مهندس نظم معلومات. مهتم بنظام تشغيل غنو/لينوكس والبرمجيات الحرّة والمفتوحة المصدر. أسعى من خلال هذه المدوّنة لإثراء المحتوى العربي على الشّبكة.

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *