مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

حل تحدّي bandit المرحلة رقم 12--> 13

BAYANBAYAN is verified member.

الرقابة والتنظيم
.:: الرقابة والتنظيم ::.
.:: طاقم المشرفين ::.

السمعة:

بسم الله الرحمن الرحيم


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

وصف التحدي:
كلمة المرور للمرحلة التالية مخزنة في الملف data.txt، والذي يحتوي على (hexdump) لملف تم ضغطه عدة مرات. في هذه المرحلة، سيكون من المفيد إنشاء مُجلد تحت tmp للعمل فيه. استخدم الأمر mkdir مع اسم المُجلد. بعد ذلك، انسخ الملف باستخدام cp وأعد تسميته باستخدام mv (اقرأ صفحات المساعدة لتلك الأوامر!).

حل التحدي:
نبدأ الحل باسم الله، كما اعتدنا. أول خطوة هي تسجيل الدخول إلى السيرفر الخاص بالتحديات باستخدام اسم المستخدم bandit12.

الدخول للسيرفر:
Bash:
ssh [email protected] -p 2220

بعد تسجيل الدخول، دعنا نعرض محتوى الملف data.txt:
Bash:
cat data.txt

سوف تظهر لنا النتيجة كالتالي (مثال):
كود:
48656c6c6f20576f726c6421


كما تلاحظ،النص يبدو كأرقام سداسية عشرية وهو نوع من أنواع تمثيل البيانات، يُعرف بالـ (hexdump)، والآن لنبدأ بخطوات الحل كما هو مطلوب بوصف التحدّي لنفهم ماهية هذه الأرقام، ونحصل على كلمة المرور للمرحلة التاليه :


الخطوة الأولى - إنشاء مُجلد للعمل فيه:
لنبدأ بإنشاء مُجلد عشوائي للعمل فيه، يمكننا استخدام عدة أوامر لذلك نذكر منها:

الأمر mktemp -d لإنشاء مُجلد مؤقت:
يمكنك استخدام الأمر mktemp لإنشاء مُجلد مؤقت، حيث أن d تُشير إلى أنك تريد إنشاء مُجلد وليس ملفًا بكل بساطة، دعنا الآن ننتقل لكيفية استخدامه بشكل بسيط دون أن نتطرق للتفاصيل:
Bash:
temp_dir=$(mktemp -d)
بهذا الأمر، سيتم إنشاء مُجلد مؤقت داخل المُجلد الافتراضي (عادةً /tmp) وسيتم تخزين مسار هذا المُجلد في المتغير temp_dir، حيث يمكنك استخدام هذا المتغير لاحقًا للإشارة إلى المُجلد الذي تم إنشاؤه (يمكنك استخدام هذا المتغير للاشارة الى الملف، حيث أن النظام سيقوم باعطاء اسم عشوائي له، لذلك فمن الأسهل الاشارة اليه بهذا النتغير عند الحاجة، أو يمكنك ادخال اسمه مباشرة بعد معرفته عند الحاجة لاستخدام هذا المُجلد)، سنتطرق لاحقًا لشرح المتغيرات في نظام لينكس.

Bash:
echo "تم إنشاء المجلد المؤقت: $temp_dir"

- يُعتبر المُجلدات التي تم إنشاؤها باستخدام mktemp آمنة من حيث التسمية، حيث يتم توليد أسماء فريدة لتجنب أي تعارض مع أية مُجلدات أخرى.

إضافة سريعة: بعد الانتهاء من العمل في هذا المُجلد، يمكنك حذفه باستخدام الأمر:

Bash:
rm -r "$temp_dir"

حيث سيقوم بحذف المُجلد وكل ما يحتويه، أو بما أنه مؤقت فسيقوم نظام التشغيل بحذفه تلقائيًّا عند إعادة تشغيله.

أو يمكنك إنشاء مُجلد دائم، باستخدام الأمر mkdir:
حيث يُستخدم الأمر “mkdir” لإنشاء مجلد جديد، إذا لم يكن المجلد موجودًا، فسيتم إنشاء المجلد بالاسم المحدد. وإذا كان المجلد موجودًا بالفعل، فلن يتم إجراء أي تغيير
Bash:
mkdir my_directory
يمكنك استبدال my_directory بالاسم الذي تريده، واود أن اضيف معلومة سريعة وهي، إذا كنت ترغب في إنشاء سلسلة من المُجلدات الفرعية، واحد داخل الآخر يمكنك استخدام الخيار p- مع الأمر الأساسي mkdir كما يلي:

Bash:
mkdir -p parent_directory/child_directory
بهذه الطريقة، سيتم إنشاء المُجلد الأب أو الأساسي (parent_directory) والمجلد الفرعي بداخله(child_directory).
والآن
دعنا نقوم بإنشاء مُجلد باسم sollevel12 ويرمز الاسم لكلمة ( حل المرحلة 12 ).
Bash:
mkdir /tmp/sollevel12
1726067553042.webp


الخطوة الثانية - نسخ الملف:
بعد ذلك، سنقوم بنسخ الملف data.txt إلى المُجلد الجديد الذي قمنا بانشائه توًّا ، كما يلي:

Bash:
cp  اسم الملف المُراد نسخه /tmp/my_directory/data.txt
Bash:
cp data.txt /tmp/sol12/data.txt

لنقم الآن بإعادة تسمية الملف:

يمكننا إعادة تسمية الملف المنسوخ باستخدام الأمر mv. لنفترض أننا نريد تسميته hexdata.txt:
Bash:
   mv data.txt hexdata.txt

توضيح الأمر mv :
الأمر mv في نظام لينكس هو اختصار لـ "move"، ويُستخدم هذا الأمر في لينكس لنقل الملفات والمجلدات من مكان إلى آخر، وأيضًا لتغيير أسماء الملفات والمجلدات.

إعادة تسمية الملفات أو المجلدات باستخدام mv:
عندما ترغب في تغيير اسم ملف أو مجلد، يمكنك استخدام الأمر mv مع تحديد الاسم القديم (old_name) والاسم الجديد. (new_name)، كما يلي:
Bash:
mv old_name new_name

نقل الملفات أو المجلدات باستخدام mv:
كما ذكرنا فانه يمكن استخدام mv لنقل الملفات أو المجلدات من مكان إلى آخر. في هذه الحالة، يتم تحديد المسار الكامل source ( من مجلد الروت / ) أو النسبي ( من مكانك الحالي ) للملف أو المجلد الذي ترغب في نقله، ثم تحديد المسار الهدف destination، كما يلي :
Bash:
mv source destination

الخطوة الثالثة - استرجاع البيانات من شكل hexdump إلى بيانات أصلية بالباينري:
الآن سنقوم بفك الـ hexdump باستخدام الأمر xxd كما يلي:
Bash:
xxd -r hexdata.txt > original_file
التوضيح:
الأمر xxd : يعني بنظام لينكس قم بتحويله الملف لسداسي أو كما يُعرف بـ hexdump، أو قم بالعكس، وذلك يعتمد على الخيار المستخدم بعده، فمثلًا عند استخدام الأمر xxd متبوعًا بالخيار r- فذلك يعني -r | -revert: أي عملية عكسية: التحويل من hexdump إلى ثنائي، فإذا كان لدينا ملف يحتوي على بيانات بتنسيق سداسي، فإن استخدام r- سيعيد تحويلها إلى شكلها الأصلي. وهذا ما سنستخدمه بالمرحلة هذه لاستعادة الملف بالتنسيق الثنائي الذي يفهمه الحاسوب.

لنكمل ...

بعد التأكد من دخولنا للمُجلد الذي بداخله ملف data.txt حيث كنا قد قمنا بنسخ الملف اليه بالخطوة الثانية، أو يمكنك كتابة المسار الكامل للملف بناء على مكان وجودك داخل النظام، وبعد ذلك ننفذ الأمر التالي:
Bash:
xxd -r data.txt > data

التوضيح:
- الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبدال محتواه بمحتوى جديد بسبب استخدامنا لإشارة " < " ومن هُنا سنتعرف على إشارة جديدة يمكننا استخدامها في نظام لينكس.

- اشارة " < " : هذه الإشارة تُستخدم لإعادة توجيه (redirect) ناتج الأمر الذي سبقها ( المخرجات ) الى الملف الذي يليها. بمعنى آخر، بدلاً من عرض المُخرجات على الشاشة، سيتم توجيه المُخرجات إلى ملف آخر.
- في هذا السياق، يعني أن الناتج من الأمر xxd -r data.txt سيتم كتابته في ملف أسميته data ( يمكنك اختيار الإسم الذي تُريد) وبما أن الملف ليس موجودًا من قبل فسيقوم النظام بانشائه بشكل تلقائي عند تنفيذ الأمر السابق.
- اشارة ال " < " تقوم بمسح أي محتوى سابق موجود داخل الملف عند استخدامها في كل مرة ولتجنب ذلك واستكمال الكتابة دون مسح أي مُحتوى سابق نستخدم " << ".

1726150983158.webp


- إذًا فـ data هو اسم الملف الناتج الذي سيحتوي على البيانات بعد تحويلها منhexdump إلى ثنائي..


نُلخص ما سبق:
الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبداله بمحتوى جديد.

فك ضغط الملف

الخطوة الرابعة
لنبدأ باستخدام الأمر file لتحديد نوع الملف " data "

1726153537524.webp

كما ترون بالصورة أعلاه، فالملف مضغوط باستخدام gzip؛ وسأوضح لكم بنهاية حل المرحلة مفهوم الملفات المضغوطة، لكي لا أطيل الحل أكثر دعنا نكمل.

الآن بما أن الملف مضغوط فالأمر بسيط للغاية فكل ما علينا فعله هو أن نفك ضغطه باستخدام gzip؛ ولكن قبل ذلك نحتاج إلى تغيير الامتداد الخاص بالملف data إلى .gz لكي يعمل؛ وإلا فسيظهر خطأ.
قد تتسائل الآن لماذا فعلنا ذلك ؟ حسنًا دعني أخبرك أهمية وضع الإمتداد كـ (gz) في نهاية اسم الملف :


1. تحديد نوع الملف
- الامتداد يساعد المستخدمين والبرامج في التعرف على نوع الملف بسهولة. عندما ترى ملفًا ينتهي بـ .gz، تعرف أنه ملف مضغوط باستخدام gzip.

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

3. تنظيم الملفات
- يساعد في تنظيم الملفات على النظام بحيث يمكن للمستخدمين معرفة الملفات المضغوطة بسهولة من بين الملفات الأخرى من خلال رؤية الامتداد الخاص بها في نهاية اسم الملف.

لذا فإن وجود الامتداد يجعل الأمور أسهل وأكثر وضوحًا. لذلك يُفضل دائمًا إضافة الامتداد المناسب عند إنشاء الملفات المضغوطة تجنبًا لحدوث أي خطأ.

لنكمل...
الآن علينا فك ضغط الملف data باستخدام gzip؛ دعنا نحاول فك ضغطه دون تغيير الامتداد كما يلي:
1726154399649.webp

لاحظنا ظهور خطأ " امتداد غير معروف " أي ان gzip لم يتعرف على ملف data !

والآن لنقم بتغيير الامتداد أو كما يُسمى بـ suffix الى gz ليصبح " data.gz ". ومن هنا سنقوم أيضًا بتغيير اسم الملف من خلال الأمر mv، كما يلي :
Bash:
mv data data.gz

التوضيح :

- data : هذا هو اسم الملف أو المجلد الذي تريد تغيير اسمه أو نقله. في هذا المثال، data هو اسم الملف الحالي.

- data.gz : هذا هو الاسم الجديد الذي تريد أن تعطيه للملف أو المجلد. في هذا المثال، بعد تنفيذ الأمر، سيتم تغيير اسم الملف data إلى data.gz حيث قُمنا بإضافة الإمتداد الصحيح.


ما يحدث عند تنفيذ الأمر:
- عندما تقوم بتشغيل الأمر mv data data.gz:
- سيقوم النظام بتغيير اسم الملف data إلى data.gz.
- إذا كان هناك ملف موجود بالفعل باسم data.gz، سيتم استبداله دون أي تحذير (لذا يجب الحذر عند استخدام الأمر).

الآن لنقم بفك الضغط للملف مستخدمين الأمر gzip -d يليه اسم الملف data.gz كما يلي:
Bash:
gzip -d data.gz
1726155146548.webp

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

الخطوة الخامسة
مُجددًا، دعنا نتحقق من نوع ملف " data " باستخدام أمر file (حيث سنستمر في القيام بذلك) لحين الوصول الى الملف الأساسي.
1726155397880.webp


كما تلاحظون فإن الملف مضغوط باستخدام bzip2، هذه المرة سنستخدم bzip2 لفك ضغطه كما يلي :
Bash:
bzip2 -d data
1726155666442.webp

بعد فك الضغط أصبح اسم الملف " data.out ".

الخطوة السادسة
نحدد نوع الملف " data " باستخدام الأمر file لنجد بأنه مجددًا مضغوط باستخدام gzip، كرر الخطوة الرابعة لفك الضغط، كما يلي:
1726156575578.webp


الخطوة السابعة
بعد تفقد نوع الملف تبين انه POSIX tar archive لنقم بفكه " Un tar it ".
1726156764117.webp

لقد أنشأ ملفًا يسمى data5.bin؛ تحقق من نوعه ثم كرر ما سبق.


استمر في ذلك الى حين الحصول على ملف نصي " ASCII " غير مضغوط وهو الذي يحتوي على كلمة المرور للمرحلة التاليه كما يلي:
1726157056408.webp


معلومات إضافية للإفادة


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

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

الضغط بدون فقدان البيانات (Lossless Compression):
يحافظ على كل البيانات الأصلية. عند فك الضغط، يتم استعادة البيانات بالكامل دون فقدان أي معلومات. يتم استخدامه للملفات التي لا يمكن تحمل فقدان بياناتها، مثل المستندات، البرامج، والصور التي تحتاج للحفاظ على جودتها الكاملة (مثل ملفات PNG).

الضغط مع فقدان البيانات (Lossy Compression):
يؤدي إلى فقدان جزء من البيانات غير الضرورية أو التي لا تكون ملحوظة بشكل كبير. يتم استخدامه بشكل شائع مع ملفات الوسائط مثل الصور (JPEG)، الفيديو (MP4)، والصوت (MP3)، حيث يمكن تقليل الجودة بشكل طفيف لتوفير مساحة كبيرة.

والآن بالطبع فأنت تتسائل عن الفائدة من ضغط الملفات وهذا ما سأذكره تاليًا.

الفوائد من ضغط الملفات:


توفير مساحة التخزين.
يقلل من حجم الملفات على القرص الصلب أو أي وسيلة تخزين أخرى، مما يسمح بتخزين عدد أكبر من الملفات في نفس المساحة، فمثلًا، في التخزين السحابي أو ما بُعرف بـ cloud يمكنك القيام بضغط الملفات لتقليل حجمها قبل رفعها إلى خدمات التخزين السحابي مثل Google Drive أو Dropbox لتقليل وقت التحميل وتوفير استخدام مساحة التخزين.
تسهيل نقل الملفات.
حيث أنَّ الملفات المضغوطة تكون أصغر حجمًا، مما يجعل إرسالها عبر الإنترنت أسرع. هذا مفيد خصوصًا عند إرسال الملفات عبر البريد الإلكتروني أو رفعها إلى السحابة.

تقليل استخدام عرض النطاق الترددي (Bandwidth).
عند نقل الملفات المضغوطة عبر الشبكات، يتم تقليل حجم البيانات المنقولة، مما يقلل من استهلاك عرض النطاق الترددي أو مايُعرف بالـ (bandwidth)، ويسرع عملية التحميل والتنزيل.

ومن الممكن ايضًا أن يقوم بحماية البيانات ولو بشكل بسيط.
حيث أن بعض أدوات الضغط توفر إمكانية إضافة تشفير وكلمات مرور لحماية البيانات، مما يعزز من الأمان عند نقل الملفات الحساسة.

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

كيف تعمل خوارزميات الضغط؟
تقوم الخوارزميات بتحليل البيانات داخل الملف وتحديد الأنماط المتكررة أو البيانات التي يمكن استبدالها بعلامات مختصرة. على سبيل المثال:
في النصوص، يمكن استبدال الكلمات أو الأحرف المتكررة برموز أقصر، وفي الصور، يمكن تخزين البيانات اللونية أو البيانية بطرق تقلل من التكرار الزائد.

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


سأتطرق الآن لذكر وتلخيص بعض طرق وأنواع ضغط الملفات والتي كُنا قد اسخدمناها سابقًا في حل التحدّي، مثل gzip ، bzip2 :

نبدأ بـ gzip نلخصها بشكل بسيط جدًّا:

الاسم الكامل: GNU zip

الامتداد: الملفات المضغوطة باستخدام gzip تحصل على الامتداد .gz.

الأداء: gzip يتميز بالسرعة النسبية في عملية الضغط وفك الضغط، وهو الخيار الشائع لضغط الملفات الكبيرة والمتوسطة.

لضغط ملف:
Bash:
gzip اسم الملف
حيث أن هذا الأمر سيحذف الملف الأصلي وينشئ ملفًا مضغوطًا جديدًا منتهيًا بامتداد .gz.

لفك الضغط نُذكر بالأمر التالي:
Bash:
gunzip اسم_الملف.gz
bzip2

الاسم الكامل: Burrows-Wheeler Block Sorting Compressor

الامتداد: الملفات المضغوطة باستخدام bzip2 تحصل على الامتداد .bz2.

الأداء: bzip2 يوفر ضغط أفضل (حجم أصغر للملفات المضغوطة) ولكنه أبطأ من gzip. مفيد للملفات الكبيرة التي تحتاج إلى ضغط فعال.

وكُنا قد ذكرنا سابقًا كيف نقوم بفك ضغط هذا النوع من الملفات.

فالخُلاصة أن :

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



أمّا عن سُؤالي لكم فهو :
برأيكم لماذا قُمنا بإنشاء مُجلد تحت مُجلد الـ tmp دونًا عن غيره ؟
انتظر منكم الإجابات وحاولوا البحث عن الموضوع وقراءة المزيد عن هيكلة ملفات لينكس وفوائدها وستجدون الإجابة فهي بسيطة جدًا، ولكن من الضروري أن تتعلموا استخدام مهارة البحث وقراءة العديد من المقالات والشروحات للوصول للإجابة 🤷‍♀️


والى هنا انتهت هذه المرحلة وانتهى شرح الجزء الأّول من السلسلة ، أتمنى أن يكون الشرح واضح ومُفيد، دُمتم بود وبحفظ الله🌸
 

المرفقات

  • 1726067431100.webp
    1726067431100.webp
    11.1 KB · المشاهدات: 96
  • 1726075105356.webp
    1726075105356.webp
    11.1 KB · المشاهدات: 98
  • 1726154451181.webp
    1726154451181.webp
    10.8 KB · المشاهدات: 96
  • 1726155476787.webp
    1726155476787.webp
    25.6 KB · المشاهدات: 97
التعديل الأخير:
ربما لأهم ميزة في ملفات tmp وهي التخزين المؤقت للملفات بالإضافة لانه لا يحتاج للكثير من الصلاحيات
 
بسم الله الرحمن الرحيم


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

وصف التحدي:
كلمة المرور للمرحلة التالية مخزنة في الملف data.txt، والذي يحتوي على (hexdump) لملف تم ضغطه عدة مرات. في هذه المرحلة، سيكون من المفيد إنشاء مُجلد تحت tmp للعمل فيه. استخدم الأمر mkdir مع اسم المُجلد. بعد ذلك، انسخ الملف باستخدام cp وأعد تسميته باستخدام mv (اقرأ صفحات المساعدة لتلك الأوامر!).

حل التحدي:
نبدأ الحل باسم الله، كما اعتدنا. أول خطوة هي تسجيل الدخول إلى السيرفر الخاص بالتحديات باستخدام اسم المستخدم bandit12.

الدخول للسيرفر:
Bash:
ssh [email protected] -p 2220

بعد تسجيل الدخول، دعنا نعرض محتوى الملف data.txt:
Bash:
cat data.txt

سوف تظهر لنا النتيجة كالتالي (مثال):
كود:
48656c6c6f20576f726c6421


كما تلاحظ،النص يبدو كأرقام سداسية عشرية وهو نوع من أنواع تمثيل البيانات، يُعرف بالـ (hexdump)، والآن لنبدأ بخطوات الحل كما هو مطلوب بوصف التحدّي لنفهم ماهية هذه الأرقام، ونحصل على كلمة المرور للمرحلة التاليه :


الخطوة الأولى - إنشاء مُجلد للعمل فيه:
لنبدأ بإنشاء مُجلد عشوائي للعمل فيه، يمكننا استخدام عدة أوامر لذلك نذكر منها:

الأمر mktemp -d لإنشاء مُجلد مؤقت:
يمكنك استخدام الأمر mktemp لإنشاء مُجلد مؤقت، حيث أن d تُشير إلى أنك تريد إنشاء مُجلد وليس ملفًا بكل بساطة، دعنا الآن ننتقل لكيفية استخدامه بشكل بسيط دون أن نتطرق للتفاصيل:
Bash:
temp_dir=$(mktemp -d)
بهذا الأمر، سيتم إنشاء مُجلد مؤقت داخل المُجلد الافتراضي (عادةً /tmp) وسيتم تخزين مسار هذا المُجلد في المتغير temp_dir، حيث يمكنك استخدام هذا المتغير لاحقًا للإشارة إلى المُجلد الذي تم إنشاؤه (يمكنك استخدام هذا المتغير للاشارة الى الملف، حيث أن النظام سيقوم باعطاء اسم عشوائي له، لذلك فمن الأسهل الاشارة اليه بهذا النتغير عند الحاجة، أو يمكنك ادخال اسمه مباشرة بعد معرفته عند الحاجة لاستخدام هذا المُجلد)، سنتطرق لاحقًا لشرح المتغيرات في نظام لينكس.

Bash:
echo "تم إنشاء المجلد المؤقت: $temp_dir"

- يُعتبر المُجلدات التي تم إنشاؤها باستخدام mktemp آمنة من حيث التسمية، حيث يتم توليد أسماء فريدة لتجنب أي تعارض مع أية مُجلدات أخرى.

إضافة سريعة: بعد الانتهاء من العمل في هذا المُجلد، يمكنك حذفه باستخدام الأمر:

Bash:
rm -r "$temp_dir"

حيث سيقوم بحذف المُجلد وكل ما يحتويه، أو بما أنه مؤقت فسيقوم نظام التشغيل بحذفه تلقائيًّا عند إعادة تشغيله.

أو يمكنك إنشاء مُجلد دائم، باستخدام الأمر mkdir:
حيث يُستخدم الأمر “mkdir” لإنشاء مجلد جديد، إذا لم يكن المجلد موجودًا، فسيتم إنشاء المجلد بالاسم المحدد. وإذا كان المجلد موجودًا بالفعل، فلن يتم إجراء أي تغيير
Bash:
mkdir my_directory
يمكنك استبدال my_directory بالاسم الذي تريده، واود أن اضيف معلومة سريعة وهي، إذا كنت ترغب في إنشاء سلسلة من المُجلدات الفرعية، واحد داخل الآخر يمكنك استخدام الخيار p- مع الأمر الأساسي mkdir كما يلي:

Bash:
mkdir -p parent_directory/child_directory
بهذه الطريقة، سيتم إنشاء المُجلد الأب أو الأساسي (parent_directory) والمجلد الفرعي بداخله(child_directory).
والآن
دعنا نقوم بإنشاء مُجلد باسم sollevel12 ويرمز الاسم لكلمة ( حل المرحلة 12 ).
Bash:
mkdir /tmp/sollevel12
مشاهدة المرفق 13487

الخطوة الثانية - نسخ الملف:
بعد ذلك، سنقوم بنسخ الملف data.txt إلى المُجلد الجديد الذي قمنا بانشائه توًّا ، كما يلي:

Bash:
cp  اسم الملف المُراد نسخه /tmp/my_directory/data.txt
Bash:
cp data.txt /tmp/sol12/data.txt

لنقم الآن بإعادة تسمية الملف:

يمكننا إعادة تسمية الملف المنسوخ باستخدام الأمر mv. لنفترض أننا نريد تسميته hexdata.txt:
Bash:
   mv data.txt hexdata.txt

توضيح الأمر mv :
الأمر mv في نظام لينكس هو اختصار لـ "move"، ويُستخدم هذا الأمر في لينكس لنقل الملفات والمجلدات من مكان إلى آخر، وأيضًا لتغيير أسماء الملفات والمجلدات.

إعادة تسمية الملفات أو المجلدات باستخدام mv:
عندما ترغب في تغيير اسم ملف أو مجلد، يمكنك استخدام الأمر mv مع تحديد الاسم القديم (old_name) والاسم الجديد. (new_name)، كما يلي:
Bash:
mv old_name new_name

نقل الملفات أو المجلدات باستخدام mv:
كما ذكرنا فانه يمكن استخدام mv لنقل الملفات أو المجلدات من مكان إلى آخر. في هذه الحالة، يتم تحديد المسار الكامل source ( من مجلد الروت / ) أو النسبي ( من مكانك الحالي ) للملف أو المجلد الذي ترغب في نقله، ثم تحديد المسار الهدف destination، كما يلي :
Bash:
mv source destination

الخطوة الثالثة - استرجاع البيانات من شكل hexdump إلى بيانات أصلية بالباينري:
الآن سنقوم بفك الـ hexdump باستخدام الأمر xxd كما يلي:
Bash:
xxd -r hexdata.txt > original_file
التوضيح:
الأمر xxd : يعني بنظام لينكس قم بتحويله الملف لسداسي أو كما يُعرف بـ hexdump، أو قم بالعكس، وذلك يعتمد على الخيار المستخدم بعده، فمثلًا عند استخدام الأمر xxd متبوعًا بالخيار r- فذلك يعني -r | -revert: أي عملية عكسية: التحويل من hexdump إلى ثنائي، فإذا كان لدينا ملف يحتوي على بيانات بتنسيق سداسي، فإن استخدام r- سيعيد تحويلها إلى شكلها الأصلي. وهذا ما سنستخدمه بالمرحلة هذه لاستعادة الملف بالتنسيق الثنائي الذي يفهمه الحاسوب.

لنكمل ...

بعد التأكد من دخولنا للمُجلد الذي بداخله ملف data.txt حيث كنا قد قمنا بنسخ الملف اليه بالخطوة الثانية، أو يمكنك كتابة المسار الكامل للملف بناء على مكان وجودك داخل النظام، وبعد ذلك ننفذ الأمر التالي:
Bash:
xxd -r data.txt > data

التوضيح:
- الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبدال محتواه بمحتوى جديد بسبب استخدامنا لإشارة " < " ومن هُنا سنتعرف على إشارة جديدة يمكننا استخدامها في نظام لينكس.

- اشارة " < " : هذه الإشارة تُستخدم لإعادة توجيه (redirect) ناتج الأمر الذي سبقها ( المخرجات ) الى الملف الذي يليها. بمعنى آخر، بدلاً من عرض المُخرجات على الشاشة، سيتم توجيه المُخرجات إلى ملف آخر.
- في هذا السياق، يعني أن الناتج من الأمر xxd -r data.txt سيتم كتابته في ملف أسميته data ( يمكنك اختيار الإسم الذي تُريد) وبما أن الملف ليس موجودًا من قبل فسيقوم النظام بانشائه بشكل تلقائي عند تنفيذ الأمر السابق.
- اشارة ال " < " تقوم بمسح أي محتوى سابق موجود داخل الملف عند استخدامها في كل مرة ولتجنب ذلك واستكمال الكتابة دون مسح أي مُحتوى سابق نستخدم " << ".

مشاهدة المرفق 13522

- إذًا فـ data هو اسم الملف الناتج الذي سيحتوي على البيانات بعد تحويلها منhexdump إلى ثنائي..


نُلخص ما سبق:
الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبداله بمحتوى جديد.

فك ضغط الملف

الخطوة الرابعة
لنبدأ باستخدام الأمر file لتحديد نوع الملف " data "

مشاهدة المرفق 13530
كما ترون بالصورة أعلاه، فالملف مضغوط باستخدام gzip؛ وسأوضح لكم بنهاية حل المرحلة مفهوم الملفات المضغوطة، لكي لا أطيل الحل أكثر دعنا نكمل.

الآن بما أن الملف مضغوط فالأمر بسيط للغاية فكل ما علينا فعله هو أن نفك ضغطه باستخدام gzip؛ ولكن قبل ذلك نحتاج إلى تغيير الامتداد الخاص بالملف data إلى .gz لكي يعمل؛ وإلا فسيظهر خطأ.
قد تتسائل الآن لماذا فعلنا ذلك ؟ حسنًا دعني أخبرك أهمية وضع الإمتداد كـ (gz) في نهاية اسم الملف :


1. تحديد نوع الملف
- الامتداد يساعد المستخدمين والبرامج في التعرف على نوع الملف بسهولة. عندما ترى ملفًا ينتهي بـ .gz، تعرف أنه ملف مضغوط باستخدام gzip.

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

3. تنظيم الملفات
- يساعد في تنظيم الملفات على النظام بحيث يمكن للمستخدمين معرفة الملفات المضغوطة بسهولة من بين الملفات الأخرى من خلال رؤية الامتداد الخاص بها في نهاية اسم الملف.

لذا فإن وجود الامتداد يجعل الأمور أسهل وأكثر وضوحًا. لذلك يُفضل دائمًا إضافة الامتداد المناسب عند إنشاء الملفات المضغوطة تجنبًا لحدوث أي خطأ.

لنكمل...
الآن علينا فك ضغط الملف data باستخدام gzip؛ دعنا نحاول فك ضغطه دون تغيير الامتداد كما يلي:
مشاهدة المرفق 13531
لاحظنا ظهور خطأ " امتداد غير معروف " أي ان gzip لم يتعرف على ملف data !

والآن لنقم بتغيير الامتداد أو كما يُسمى بـ suffix الى gz ليصبح " data.gz ". ومن هنا سنقوم أيضًا بتغيير اسم الملف من خلال الأمر mv، كما يلي :
Bash:
mv data data.gz

التوضيح :

- data : هذا هو اسم الملف أو المجلد الذي تريد تغيير اسمه أو نقله. في هذا المثال، data هو اسم الملف الحالي.

- data.gz : هذا هو الاسم الجديد الذي تريد أن تعطيه للملف أو المجلد. في هذا المثال، بعد تنفيذ الأمر، سيتم تغيير اسم الملف data إلى data.gz حيث قُمنا بإضافة الإمتداد الصحيح.


ما يحدث عند تنفيذ الأمر:
- عندما تقوم بتشغيل الأمر mv data data.gz:
- سيقوم النظام بتغيير اسم الملف data إلى data.gz.
- إذا كان هناك ملف موجود بالفعل باسم data.gz، سيتم استبداله دون أي تحذير (لذا يجب الحذر عند استخدام الأمر).

الآن لنقم بفك الضغط للملف مستخدمين الأمر gzip -d يليه اسم الملف data.gz كما يلي:
Bash:
gzip -d data.gz
مشاهدة المرفق 13535
,ونلاحظ بعد أن قمنا بفك ضغطه استعدنا اسم الملف الأصلي دون امتداد للإشارة الى أن الملف لم يعد مضغوط باستخدام gzip.

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

كما تلاحظون فإن الملف مضغوط باستخدام bzip2، هذه المرة سنستخدم bzip2 لفك ضغطه كما يلي :
Bash:
bzip2 -d data
مشاهدة المرفق 13542
بعد فك الضغط أصبح اسم الملف " data.out ".

الخطوة السادسة
نحدد نوع الملف " data " باستخدام الأمر file لنجد بأنه مجددًا مضغوط باستخدام gzip، كرر الخطوة الرابعة لفك الضغط، كما يلي:
مشاهدة المرفق 13547

الخطوة السابعة
بعد تفقد نوع الملف تبين انه POSIX tar archive لنقم بفكه " Un tar it ".
مشاهدة المرفق 13548
لقد أنشأ ملفًا يسمى data5.bin؛ تحقق من نوعه ثم كرر ما سبق.


استمر في ذلك الى حين الحصول على ملف نصي " ASCII " غير مضغوط وهو الذي يحتوي على كلمة المرور للمرحلة التاليه كما يلي:
مشاهدة المرفق 13550

معلومات إضافية للإفادة


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

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

الضغط بدون فقدان البيانات (Lossless Compression):
يحافظ على كل البيانات الأصلية. عند فك الضغط، يتم استعادة البيانات بالكامل دون فقدان أي معلومات. يتم استخدامه للملفات التي لا يمكن تحمل فقدان بياناتها، مثل المستندات، البرامج، والصور التي تحتاج للحفاظ على جودتها الكاملة (مثل ملفات PNG).

الضغط مع فقدان البيانات (Lossy Compression):
يؤدي إلى فقدان جزء من البيانات غير الضرورية أو التي لا تكون ملحوظة بشكل كبير. يتم استخدامه بشكل شائع مع ملفات الوسائط مثل الصور (JPEG)، الفيديو (MP4)، والصوت (MP3)، حيث يمكن تقليل الجودة بشكل طفيف لتوفير مساحة كبيرة.

والآن بالطبع فأنت تتسائل عن الفائدة من ضغط الملفات وهذا ما سأذكره تاليًا.

الفوائد من ضغط الملفات:


توفير مساحة التخزين.
يقلل من حجم الملفات على القرص الصلب أو أي وسيلة تخزين أخرى، مما يسمح بتخزين عدد أكبر من الملفات في نفس المساحة، فمثلًا، في التخزين السحابي أو ما بُعرف بـ cloud يمكنك القيام بضغط الملفات لتقليل حجمها قبل رفعها إلى خدمات التخزين السحابي مثل Google Drive أو Dropbox لتقليل وقت التحميل وتوفير استخدام مساحة التخزين.
تسهيل نقل الملفات.
حيث أنَّ الملفات المضغوطة تكون أصغر حجمًا، مما يجعل إرسالها عبر الإنترنت أسرع. هذا مفيد خصوصًا عند إرسال الملفات عبر البريد الإلكتروني أو رفعها إلى السحابة.

تقليل استخدام عرض النطاق الترددي (Bandwidth).
عند نقل الملفات المضغوطة عبر الشبكات، يتم تقليل حجم البيانات المنقولة، مما يقلل من استهلاك عرض النطاق الترددي أو مايُعرف بالـ (bandwidth)، ويسرع عملية التحميل والتنزيل.

ومن الممكن ايضًا أن يقوم بحماية البيانات ولو بشكل بسيط.
حيث أن بعض أدوات الضغط توفر إمكانية إضافة تشفير وكلمات مرور لحماية البيانات، مما يعزز من الأمان عند نقل الملفات الحساسة.

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

كيف تعمل خوارزميات الضغط؟
تقوم الخوارزميات بتحليل البيانات داخل الملف وتحديد الأنماط المتكررة أو البيانات التي يمكن استبدالها بعلامات مختصرة. على سبيل المثال:
في النصوص، يمكن استبدال الكلمات أو الأحرف المتكررة برموز أقصر، وفي الصور، يمكن تخزين البيانات اللونية أو البيانية بطرق تقلل من التكرار الزائد.

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


سأتطرق الآن لذكر وتلخيص بعض طرق وأنواع ضغط الملفات والتي كُنا قد اسخدمناها سابقًا في حل التحدّي، مثل gzip ، bzip2 :

نبدأ بـ gzip نلخصها بشكل بسيط جدًّا:

الاسم الكامل: GNU zip

الامتداد: الملفات المضغوطة باستخدام gzip تحصل على الامتداد .gz.

الأداء: gzip يتميز بالسرعة النسبية في عملية الضغط وفك الضغط، وهو الخيار الشائع لضغط الملفات الكبيرة والمتوسطة.

لضغط ملف:
Bash:
gzip اسم الملف
حيث أن هذا الأمر سيحذف الملف الأصلي وينشئ ملفًا مضغوطًا جديدًا منتهيًا بامتداد .gz.

لفك الضغط نُذكر بالأمر التالي:
Bash:
gunzip اسم_الملف.gz
bzip2

الاسم الكامل: Burrows-Wheeler Block Sorting Compressor

الامتداد: الملفات المضغوطة باستخدام bzip2 تحصل على الامتداد .bz2.

الأداء: bzip2 يوفر ضغط أفضل (حجم أصغر للملفات المضغوطة) ولكنه أبطأ من gzip. مفيد للملفات الكبيرة التي تحتاج إلى ضغط فعال.

وكُنا قد ذكرنا سابقًا كيف نقوم بفك ضغط هذا النوع من الملفات.

فالخُلاصة أن :

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



أمّا عن سُؤالي لكم فهو :
برأيكم لماذا قُمنا بإنشاء مُجلد تحت مُجلد الـ tmp دونًا عن غيره ؟
انتظر منكم الإجابات وحاولوا البحث عن الموضوع وقراءة المزيد عن هيكلة ملفات لينكس وفوائدها وستجدون الإجابة فهي بسيطة جدًا، ولكن من الضروري أن تتعلموا استخدام مهارة البحث وقراءة العديد من المقالات والشروحات للوصول للإجابة 🤷‍♀️


والى هنا انتهت هذه المرحلة، اتمنى ان يكون الشرح واضح ومُفيد، انتظروني بالمرحلة القادمة، دُمتم بود وبحفظ الله🌸
يعطيكِ العافية بيان
والحمد لله على سلامتك 💕 💕
 
بسم الله الرحمن الرحيم


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

وصف التحدي:
كلمة المرور للمرحلة التالية مخزنة في الملف data.txt، والذي يحتوي على (hexdump) لملف تم ضغطه عدة مرات. في هذه المرحلة، سيكون من المفيد إنشاء مُجلد تحت tmp للعمل فيه. استخدم الأمر mkdir مع اسم المُجلد. بعد ذلك، انسخ الملف باستخدام cp وأعد تسميته باستخدام mv (اقرأ صفحات المساعدة لتلك الأوامر!).

حل التحدي:
نبدأ الحل باسم الله، كما اعتدنا. أول خطوة هي تسجيل الدخول إلى السيرفر الخاص بالتحديات باستخدام اسم المستخدم bandit12.

الدخول للسيرفر:
Bash:
ssh [email protected] -p 2220

بعد تسجيل الدخول، دعنا نعرض محتوى الملف data.txt:
Bash:
cat data.txt

سوف تظهر لنا النتيجة كالتالي (مثال):
كود:
48656c6c6f20576f726c6421


كما تلاحظ،النص يبدو كأرقام سداسية عشرية وهو نوع من أنواع تمثيل البيانات، يُعرف بالـ (hexdump)، والآن لنبدأ بخطوات الحل كما هو مطلوب بوصف التحدّي لنفهم ماهية هذه الأرقام، ونحصل على كلمة المرور للمرحلة التاليه :


الخطوة الأولى - إنشاء مُجلد للعمل فيه:
لنبدأ بإنشاء مُجلد عشوائي للعمل فيه، يمكننا استخدام عدة أوامر لذلك نذكر منها:

الأمر mktemp -d لإنشاء مُجلد مؤقت:
يمكنك استخدام الأمر mktemp لإنشاء مُجلد مؤقت، حيث أن d تُشير إلى أنك تريد إنشاء مُجلد وليس ملفًا بكل بساطة، دعنا الآن ننتقل لكيفية استخدامه بشكل بسيط دون أن نتطرق للتفاصيل:
Bash:
temp_dir=$(mktemp -d)
بهذا الأمر، سيتم إنشاء مُجلد مؤقت داخل المُجلد الافتراضي (عادةً /tmp) وسيتم تخزين مسار هذا المُجلد في المتغير temp_dir، حيث يمكنك استخدام هذا المتغير لاحقًا للإشارة إلى المُجلد الذي تم إنشاؤه (يمكنك استخدام هذا المتغير للاشارة الى الملف، حيث أن النظام سيقوم باعطاء اسم عشوائي له، لذلك فمن الأسهل الاشارة اليه بهذا النتغير عند الحاجة، أو يمكنك ادخال اسمه مباشرة بعد معرفته عند الحاجة لاستخدام هذا المُجلد)، سنتطرق لاحقًا لشرح المتغيرات في نظام لينكس.

Bash:
echo "تم إنشاء المجلد المؤقت: $temp_dir"

- يُعتبر المُجلدات التي تم إنشاؤها باستخدام mktemp آمنة من حيث التسمية، حيث يتم توليد أسماء فريدة لتجنب أي تعارض مع أية مُجلدات أخرى.

إضافة سريعة: بعد الانتهاء من العمل في هذا المُجلد، يمكنك حذفه باستخدام الأمر:

Bash:
rm -r "$temp_dir"

حيث سيقوم بحذف المُجلد وكل ما يحتويه، أو بما أنه مؤقت فسيقوم نظام التشغيل بحذفه تلقائيًّا عند إعادة تشغيله.

أو يمكنك إنشاء مُجلد دائم، باستخدام الأمر mkdir:
حيث يُستخدم الأمر “mkdir” لإنشاء مجلد جديد، إذا لم يكن المجلد موجودًا، فسيتم إنشاء المجلد بالاسم المحدد. وإذا كان المجلد موجودًا بالفعل، فلن يتم إجراء أي تغيير
Bash:
mkdir my_directory
يمكنك استبدال my_directory بالاسم الذي تريده، واود أن اضيف معلومة سريعة وهي، إذا كنت ترغب في إنشاء سلسلة من المُجلدات الفرعية، واحد داخل الآخر يمكنك استخدام الخيار p- مع الأمر الأساسي mkdir كما يلي:

Bash:
mkdir -p parent_directory/child_directory
بهذه الطريقة، سيتم إنشاء المُجلد الأب أو الأساسي (parent_directory) والمجلد الفرعي بداخله(child_directory).
والآن
دعنا نقوم بإنشاء مُجلد باسم sollevel12 ويرمز الاسم لكلمة ( حل المرحلة 12 ).
Bash:
mkdir /tmp/sollevel12
مشاهدة المرفق 13487

الخطوة الثانية - نسخ الملف:
بعد ذلك، سنقوم بنسخ الملف data.txt إلى المُجلد الجديد الذي قمنا بانشائه توًّا ، كما يلي:

Bash:
cp  اسم الملف المُراد نسخه /tmp/my_directory/data.txt
Bash:
cp data.txt /tmp/sol12/data.txt

لنقم الآن بإعادة تسمية الملف:

يمكننا إعادة تسمية الملف المنسوخ باستخدام الأمر mv. لنفترض أننا نريد تسميته hexdata.txt:
Bash:
   mv data.txt hexdata.txt

توضيح الأمر mv :
الأمر mv في نظام لينكس هو اختصار لـ "move"، ويُستخدم هذا الأمر في لينكس لنقل الملفات والمجلدات من مكان إلى آخر، وأيضًا لتغيير أسماء الملفات والمجلدات.

إعادة تسمية الملفات أو المجلدات باستخدام mv:
عندما ترغب في تغيير اسم ملف أو مجلد، يمكنك استخدام الأمر mv مع تحديد الاسم القديم (old_name) والاسم الجديد. (new_name)، كما يلي:
Bash:
mv old_name new_name

نقل الملفات أو المجلدات باستخدام mv:
كما ذكرنا فانه يمكن استخدام mv لنقل الملفات أو المجلدات من مكان إلى آخر. في هذه الحالة، يتم تحديد المسار الكامل source ( من مجلد الروت / ) أو النسبي ( من مكانك الحالي ) للملف أو المجلد الذي ترغب في نقله، ثم تحديد المسار الهدف destination، كما يلي :
Bash:
mv source destination

الخطوة الثالثة - استرجاع البيانات من شكل hexdump إلى بيانات أصلية بالباينري:
الآن سنقوم بفك الـ hexdump باستخدام الأمر xxd كما يلي:
Bash:
xxd -r hexdata.txt > original_file
التوضيح:
الأمر xxd : يعني بنظام لينكس قم بتحويله الملف لسداسي أو كما يُعرف بـ hexdump، أو قم بالعكس، وذلك يعتمد على الخيار المستخدم بعده، فمثلًا عند استخدام الأمر xxd متبوعًا بالخيار r- فذلك يعني -r | -revert: أي عملية عكسية: التحويل من hexdump إلى ثنائي، فإذا كان لدينا ملف يحتوي على بيانات بتنسيق سداسي، فإن استخدام r- سيعيد تحويلها إلى شكلها الأصلي. وهذا ما سنستخدمه بالمرحلة هذه لاستعادة الملف بالتنسيق الثنائي الذي يفهمه الحاسوب.

لنكمل ...

بعد التأكد من دخولنا للمُجلد الذي بداخله ملف data.txt حيث كنا قد قمنا بنسخ الملف اليه بالخطوة الثانية، أو يمكنك كتابة المسار الكامل للملف بناء على مكان وجودك داخل النظام، وبعد ذلك ننفذ الأمر التالي:
Bash:
xxd -r data.txt > data

التوضيح:
- الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبدال محتواه بمحتوى جديد بسبب استخدامنا لإشارة " < " ومن هُنا سنتعرف على إشارة جديدة يمكننا استخدامها في نظام لينكس.

- اشارة " < " : هذه الإشارة تُستخدم لإعادة توجيه (redirect) ناتج الأمر الذي سبقها ( المخرجات ) الى الملف الذي يليها. بمعنى آخر، بدلاً من عرض المُخرجات على الشاشة، سيتم توجيه المُخرجات إلى ملف آخر.
- في هذا السياق، يعني أن الناتج من الأمر xxd -r data.txt سيتم كتابته في ملف أسميته data ( يمكنك اختيار الإسم الذي تُريد) وبما أن الملف ليس موجودًا من قبل فسيقوم النظام بانشائه بشكل تلقائي عند تنفيذ الأمر السابق.
- اشارة ال " < " تقوم بمسح أي محتوى سابق موجود داخل الملف عند استخدامها في كل مرة ولتجنب ذلك واستكمال الكتابة دون مسح أي مُحتوى سابق نستخدم " << ".

مشاهدة المرفق 13522

- إذًا فـ data هو اسم الملف الناتج الذي سيحتوي على البيانات بعد تحويلها منhexdump إلى ثنائي..


نُلخص ما سبق:
الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبداله بمحتوى جديد.

فك ضغط الملف

الخطوة الرابعة
لنبدأ باستخدام الأمر file لتحديد نوع الملف " data "

مشاهدة المرفق 13530
كما ترون بالصورة أعلاه، فالملف مضغوط باستخدام gzip؛ وسأوضح لكم بنهاية حل المرحلة مفهوم الملفات المضغوطة، لكي لا أطيل الحل أكثر دعنا نكمل.

الآن بما أن الملف مضغوط فالأمر بسيط للغاية فكل ما علينا فعله هو أن نفك ضغطه باستخدام gzip؛ ولكن قبل ذلك نحتاج إلى تغيير الامتداد الخاص بالملف data إلى .gz لكي يعمل؛ وإلا فسيظهر خطأ.
قد تتسائل الآن لماذا فعلنا ذلك ؟ حسنًا دعني أخبرك أهمية وضع الإمتداد كـ (gz) في نهاية اسم الملف :


1. تحديد نوع الملف
- الامتداد يساعد المستخدمين والبرامج في التعرف على نوع الملف بسهولة. عندما ترى ملفًا ينتهي بـ .gz، تعرف أنه ملف مضغوط باستخدام gzip.

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

3. تنظيم الملفات
- يساعد في تنظيم الملفات على النظام بحيث يمكن للمستخدمين معرفة الملفات المضغوطة بسهولة من بين الملفات الأخرى من خلال رؤية الامتداد الخاص بها في نهاية اسم الملف.

لذا فإن وجود الامتداد يجعل الأمور أسهل وأكثر وضوحًا. لذلك يُفضل دائمًا إضافة الامتداد المناسب عند إنشاء الملفات المضغوطة تجنبًا لحدوث أي خطأ.

لنكمل...
الآن علينا فك ضغط الملف data باستخدام gzip؛ دعنا نحاول فك ضغطه دون تغيير الامتداد كما يلي:
مشاهدة المرفق 13531
لاحظنا ظهور خطأ " امتداد غير معروف " أي ان gzip لم يتعرف على ملف data !

والآن لنقم بتغيير الامتداد أو كما يُسمى بـ suffix الى gz ليصبح " data.gz ". ومن هنا سنقوم أيضًا بتغيير اسم الملف من خلال الأمر mv، كما يلي :
Bash:
mv data data.gz

التوضيح :

- data : هذا هو اسم الملف أو المجلد الذي تريد تغيير اسمه أو نقله. في هذا المثال، data هو اسم الملف الحالي.

- data.gz : هذا هو الاسم الجديد الذي تريد أن تعطيه للملف أو المجلد. في هذا المثال، بعد تنفيذ الأمر، سيتم تغيير اسم الملف data إلى data.gz حيث قُمنا بإضافة الإمتداد الصحيح.


ما يحدث عند تنفيذ الأمر:
- عندما تقوم بتشغيل الأمر mv data data.gz:
- سيقوم النظام بتغيير اسم الملف data إلى data.gz.
- إذا كان هناك ملف موجود بالفعل باسم data.gz، سيتم استبداله دون أي تحذير (لذا يجب الحذر عند استخدام الأمر).

الآن لنقم بفك الضغط للملف مستخدمين الأمر gzip -d يليه اسم الملف data.gz كما يلي:
Bash:
gzip -d data.gz
مشاهدة المرفق 13535
,ونلاحظ بعد أن قمنا بفك ضغطه استعدنا اسم الملف الأصلي دون امتداد للإشارة الى أن الملف لم يعد مضغوط باستخدام gzip.

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

كما تلاحظون فإن الملف مضغوط باستخدام bzip2، هذه المرة سنستخدم bzip2 لفك ضغطه كما يلي :
Bash:
bzip2 -d data
مشاهدة المرفق 13542
بعد فك الضغط أصبح اسم الملف " data.out ".

الخطوة السادسة
نحدد نوع الملف " data " باستخدام الأمر file لنجد بأنه مجددًا مضغوط باستخدام gzip، كرر الخطوة الرابعة لفك الضغط، كما يلي:
مشاهدة المرفق 13547

الخطوة السابعة
بعد تفقد نوع الملف تبين انه POSIX tar archive لنقم بفكه " Un tar it ".
مشاهدة المرفق 13548
لقد أنشأ ملفًا يسمى data5.bin؛ تحقق من نوعه ثم كرر ما سبق.


استمر في ذلك الى حين الحصول على ملف نصي " ASCII " غير مضغوط وهو الذي يحتوي على كلمة المرور للمرحلة التاليه كما يلي:
مشاهدة المرفق 13550

معلومات إضافية للإفادة


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

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

الضغط بدون فقدان البيانات (Lossless Compression):
يحافظ على كل البيانات الأصلية. عند فك الضغط، يتم استعادة البيانات بالكامل دون فقدان أي معلومات. يتم استخدامه للملفات التي لا يمكن تحمل فقدان بياناتها، مثل المستندات، البرامج، والصور التي تحتاج للحفاظ على جودتها الكاملة (مثل ملفات PNG).

الضغط مع فقدان البيانات (Lossy Compression):
يؤدي إلى فقدان جزء من البيانات غير الضرورية أو التي لا تكون ملحوظة بشكل كبير. يتم استخدامه بشكل شائع مع ملفات الوسائط مثل الصور (JPEG)، الفيديو (MP4)، والصوت (MP3)، حيث يمكن تقليل الجودة بشكل طفيف لتوفير مساحة كبيرة.

والآن بالطبع فأنت تتسائل عن الفائدة من ضغط الملفات وهذا ما سأذكره تاليًا.

الفوائد من ضغط الملفات:


توفير مساحة التخزين.
يقلل من حجم الملفات على القرص الصلب أو أي وسيلة تخزين أخرى، مما يسمح بتخزين عدد أكبر من الملفات في نفس المساحة، فمثلًا، في التخزين السحابي أو ما بُعرف بـ cloud يمكنك القيام بضغط الملفات لتقليل حجمها قبل رفعها إلى خدمات التخزين السحابي مثل Google Drive أو Dropbox لتقليل وقت التحميل وتوفير استخدام مساحة التخزين.
تسهيل نقل الملفات.
حيث أنَّ الملفات المضغوطة تكون أصغر حجمًا، مما يجعل إرسالها عبر الإنترنت أسرع. هذا مفيد خصوصًا عند إرسال الملفات عبر البريد الإلكتروني أو رفعها إلى السحابة.

تقليل استخدام عرض النطاق الترددي (Bandwidth).
عند نقل الملفات المضغوطة عبر الشبكات، يتم تقليل حجم البيانات المنقولة، مما يقلل من استهلاك عرض النطاق الترددي أو مايُعرف بالـ (bandwidth)، ويسرع عملية التحميل والتنزيل.

ومن الممكن ايضًا أن يقوم بحماية البيانات ولو بشكل بسيط.
حيث أن بعض أدوات الضغط توفر إمكانية إضافة تشفير وكلمات مرور لحماية البيانات، مما يعزز من الأمان عند نقل الملفات الحساسة.

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

كيف تعمل خوارزميات الضغط؟
تقوم الخوارزميات بتحليل البيانات داخل الملف وتحديد الأنماط المتكررة أو البيانات التي يمكن استبدالها بعلامات مختصرة. على سبيل المثال:
في النصوص، يمكن استبدال الكلمات أو الأحرف المتكررة برموز أقصر، وفي الصور، يمكن تخزين البيانات اللونية أو البيانية بطرق تقلل من التكرار الزائد.

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


سأتطرق الآن لذكر وتلخيص بعض طرق وأنواع ضغط الملفات والتي كُنا قد اسخدمناها سابقًا في حل التحدّي، مثل gzip ، bzip2 :

نبدأ بـ gzip نلخصها بشكل بسيط جدًّا:

الاسم الكامل: GNU zip

الامتداد: الملفات المضغوطة باستخدام gzip تحصل على الامتداد .gz.

الأداء: gzip يتميز بالسرعة النسبية في عملية الضغط وفك الضغط، وهو الخيار الشائع لضغط الملفات الكبيرة والمتوسطة.

لضغط ملف:
Bash:
gzip اسم الملف
حيث أن هذا الأمر سيحذف الملف الأصلي وينشئ ملفًا مضغوطًا جديدًا منتهيًا بامتداد .gz.

لفك الضغط نُذكر بالأمر التالي:
Bash:
gunzip اسم_الملف.gz
bzip2

الاسم الكامل: Burrows-Wheeler Block Sorting Compressor

الامتداد: الملفات المضغوطة باستخدام bzip2 تحصل على الامتداد .bz2.

الأداء: bzip2 يوفر ضغط أفضل (حجم أصغر للملفات المضغوطة) ولكنه أبطأ من gzip. مفيد للملفات الكبيرة التي تحتاج إلى ضغط فعال.

وكُنا قد ذكرنا سابقًا كيف نقوم بفك ضغط هذا النوع من الملفات.

فالخُلاصة أن :

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



أمّا عن سُؤالي لكم فهو :
برأيكم لماذا قُمنا بإنشاء مُجلد تحت مُجلد الـ tmp دونًا عن غيره ؟
انتظر منكم الإجابات وحاولوا البحث عن الموضوع وقراءة المزيد عن هيكلة ملفات لينكس وفوائدها وستجدون الإجابة فهي بسيطة جدًا، ولكن من الضروري أن تتعلموا استخدام مهارة البحث وقراءة العديد من المقالات والشروحات للوصول للإجابة 🤷‍♀️


والى هنا انتهت هذه المرحلة، اتمنى ان يكون الشرح واضح ومُفيد، انتظروني بالمرحلة القادمة، دُمتم بود وبحفظ الله🌸
الحمد لله على سلامتك وسلامة الامة الإسلامية, بارك الله فيكم على هيك شرح وطريقة الطرح للمعلومات
ما شاء الله تبارك الله ابدعتم والحمد لله, الله يجعله في ميزان حسناتكم وتحياتي للجميع 🌹 ❤️
بننتظر جديدكم 💪🔥
 
  • Love
التفاعلات: BAYAN
الحمد لله على سلامتك وسلامة الامة الإسلامية, بارك الله فيكم على هيك شرح وطريقة الطرح للمعلومات
ما شاء الله تبارك الله ابدعتم والحمد لله, الله يجعله في ميزان حسناتكم وتحياتي للجميع 🌹 ❤️
بننتظر جديدكم 💪🔥
اللهم آمين أجمعين يارب وشُكرا الك ، الله يسلمك يارب🌸
 
بسم الله الرحمن الرحيم


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

وصف التحدي:
كلمة المرور للمرحلة التالية مخزنة في الملف data.txt، والذي يحتوي على (hexdump) لملف تم ضغطه عدة مرات. في هذه المرحلة، سيكون من المفيد إنشاء مُجلد تحت tmp للعمل فيه. استخدم الأمر mkdir مع اسم المُجلد. بعد ذلك، انسخ الملف باستخدام cp وأعد تسميته باستخدام mv (اقرأ صفحات المساعدة لتلك الأوامر!).

حل التحدي:
نبدأ الحل باسم الله، كما اعتدنا. أول خطوة هي تسجيل الدخول إلى السيرفر الخاص بالتحديات باستخدام اسم المستخدم bandit12.

الدخول للسيرفر:
Bash:
ssh [email protected] -p 2220

بعد تسجيل الدخول، دعنا نعرض محتوى الملف data.txt:
Bash:
cat data.txt

سوف تظهر لنا النتيجة كالتالي (مثال):
كود:
48656c6c6f20576f726c6421


كما تلاحظ،النص يبدو كأرقام سداسية عشرية وهو نوع من أنواع تمثيل البيانات، يُعرف بالـ (hexdump)، والآن لنبدأ بخطوات الحل كما هو مطلوب بوصف التحدّي لنفهم ماهية هذه الأرقام، ونحصل على كلمة المرور للمرحلة التاليه :


الخطوة الأولى - إنشاء مُجلد للعمل فيه:
لنبدأ بإنشاء مُجلد عشوائي للعمل فيه، يمكننا استخدام عدة أوامر لذلك نذكر منها:

الأمر mktemp -d لإنشاء مُجلد مؤقت:
يمكنك استخدام الأمر mktemp لإنشاء مُجلد مؤقت، حيث أن d تُشير إلى أنك تريد إنشاء مُجلد وليس ملفًا بكل بساطة، دعنا الآن ننتقل لكيفية استخدامه بشكل بسيط دون أن نتطرق للتفاصيل:
Bash:
temp_dir=$(mktemp -d)
بهذا الأمر، سيتم إنشاء مُجلد مؤقت داخل المُجلد الافتراضي (عادةً /tmp) وسيتم تخزين مسار هذا المُجلد في المتغير temp_dir، حيث يمكنك استخدام هذا المتغير لاحقًا للإشارة إلى المُجلد الذي تم إنشاؤه (يمكنك استخدام هذا المتغير للاشارة الى الملف، حيث أن النظام سيقوم باعطاء اسم عشوائي له، لذلك فمن الأسهل الاشارة اليه بهذا النتغير عند الحاجة، أو يمكنك ادخال اسمه مباشرة بعد معرفته عند الحاجة لاستخدام هذا المُجلد)، سنتطرق لاحقًا لشرح المتغيرات في نظام لينكس.

Bash:
echo "تم إنشاء المجلد المؤقت: $temp_dir"

- يُعتبر المُجلدات التي تم إنشاؤها باستخدام mktemp آمنة من حيث التسمية، حيث يتم توليد أسماء فريدة لتجنب أي تعارض مع أية مُجلدات أخرى.

إضافة سريعة: بعد الانتهاء من العمل في هذا المُجلد، يمكنك حذفه باستخدام الأمر:

Bash:
rm -r "$temp_dir"

حيث سيقوم بحذف المُجلد وكل ما يحتويه، أو بما أنه مؤقت فسيقوم نظام التشغيل بحذفه تلقائيًّا عند إعادة تشغيله.

أو يمكنك إنشاء مُجلد دائم، باستخدام الأمر mkdir:
حيث يُستخدم الأمر “mkdir” لإنشاء مجلد جديد، إذا لم يكن المجلد موجودًا، فسيتم إنشاء المجلد بالاسم المحدد. وإذا كان المجلد موجودًا بالفعل، فلن يتم إجراء أي تغيير
Bash:
mkdir my_directory
يمكنك استبدال my_directory بالاسم الذي تريده، واود أن اضيف معلومة سريعة وهي، إذا كنت ترغب في إنشاء سلسلة من المُجلدات الفرعية، واحد داخل الآخر يمكنك استخدام الخيار p- مع الأمر الأساسي mkdir كما يلي:

Bash:
mkdir -p parent_directory/child_directory
بهذه الطريقة، سيتم إنشاء المُجلد الأب أو الأساسي (parent_directory) والمجلد الفرعي بداخله(child_directory).
والآن
دعنا نقوم بإنشاء مُجلد باسم sollevel12 ويرمز الاسم لكلمة ( حل المرحلة 12 ).
Bash:
mkdir /tmp/sollevel12
مشاهدة المرفق 13487

الخطوة الثانية - نسخ الملف:
بعد ذلك، سنقوم بنسخ الملف data.txt إلى المُجلد الجديد الذي قمنا بانشائه توًّا ، كما يلي:

Bash:
cp  اسم الملف المُراد نسخه /tmp/my_directory/data.txt
Bash:
cp data.txt /tmp/sol12/data.txt

لنقم الآن بإعادة تسمية الملف:

يمكننا إعادة تسمية الملف المنسوخ باستخدام الأمر mv. لنفترض أننا نريد تسميته hexdata.txt:
Bash:
   mv data.txt hexdata.txt

توضيح الأمر mv :
الأمر mv في نظام لينكس هو اختصار لـ "move"، ويُستخدم هذا الأمر في لينكس لنقل الملفات والمجلدات من مكان إلى آخر، وأيضًا لتغيير أسماء الملفات والمجلدات.

إعادة تسمية الملفات أو المجلدات باستخدام mv:
عندما ترغب في تغيير اسم ملف أو مجلد، يمكنك استخدام الأمر mv مع تحديد الاسم القديم (old_name) والاسم الجديد. (new_name)، كما يلي:
Bash:
mv old_name new_name

نقل الملفات أو المجلدات باستخدام mv:
كما ذكرنا فانه يمكن استخدام mv لنقل الملفات أو المجلدات من مكان إلى آخر. في هذه الحالة، يتم تحديد المسار الكامل source ( من مجلد الروت / ) أو النسبي ( من مكانك الحالي ) للملف أو المجلد الذي ترغب في نقله، ثم تحديد المسار الهدف destination، كما يلي :
Bash:
mv source destination

الخطوة الثالثة - استرجاع البيانات من شكل hexdump إلى بيانات أصلية بالباينري:
الآن سنقوم بفك الـ hexdump باستخدام الأمر xxd كما يلي:
Bash:
xxd -r hexdata.txt > original_file
التوضيح:
الأمر xxd : يعني بنظام لينكس قم بتحويله الملف لسداسي أو كما يُعرف بـ hexdump، أو قم بالعكس، وذلك يعتمد على الخيار المستخدم بعده، فمثلًا عند استخدام الأمر xxd متبوعًا بالخيار r- فذلك يعني -r | -revert: أي عملية عكسية: التحويل من hexdump إلى ثنائي، فإذا كان لدينا ملف يحتوي على بيانات بتنسيق سداسي، فإن استخدام r- سيعيد تحويلها إلى شكلها الأصلي. وهذا ما سنستخدمه بالمرحلة هذه لاستعادة الملف بالتنسيق الثنائي الذي يفهمه الحاسوب.

لنكمل ...

بعد التأكد من دخولنا للمُجلد الذي بداخله ملف data.txt حيث كنا قد قمنا بنسخ الملف اليه بالخطوة الثانية، أو يمكنك كتابة المسار الكامل للملف بناء على مكان وجودك داخل النظام، وبعد ذلك ننفذ الأمر التالي:
Bash:
xxd -r data.txt > data

التوضيح:
- الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبدال محتواه بمحتوى جديد بسبب استخدامنا لإشارة " < " ومن هُنا سنتعرف على إشارة جديدة يمكننا استخدامها في نظام لينكس.

- اشارة " < " : هذه الإشارة تُستخدم لإعادة توجيه (redirect) ناتج الأمر الذي سبقها ( المخرجات ) الى الملف الذي يليها. بمعنى آخر، بدلاً من عرض المُخرجات على الشاشة، سيتم توجيه المُخرجات إلى ملف آخر.
- في هذا السياق، يعني أن الناتج من الأمر xxd -r data.txt سيتم كتابته في ملف أسميته data ( يمكنك اختيار الإسم الذي تُريد) وبما أن الملف ليس موجودًا من قبل فسيقوم النظام بانشائه بشكل تلقائي عند تنفيذ الأمر السابق.
- اشارة ال " < " تقوم بمسح أي محتوى سابق موجود داخل الملف عند استخدامها في كل مرة ولتجنب ذلك واستكمال الكتابة دون مسح أي مُحتوى سابق نستخدم " << ".

مشاهدة المرفق 13522

- إذًا فـ data هو اسم الملف الناتج الذي سيحتوي على البيانات بعد تحويلها منhexdump إلى ثنائي..


نُلخص ما سبق:
الأمر xxd -r data.txt > data يقوم بقراءة البيانات من data.txt، يحولها من تنسيق سداسي إلى ثنائي، ثم يكتب النتيجة في ملف يسمى data. إذا كان الملف data موجودًا، سيتم استبداله بمحتوى جديد.

فك ضغط الملف

الخطوة الرابعة
لنبدأ باستخدام الأمر file لتحديد نوع الملف " data "

مشاهدة المرفق 13530
كما ترون بالصورة أعلاه، فالملف مضغوط باستخدام gzip؛ وسأوضح لكم بنهاية حل المرحلة مفهوم الملفات المضغوطة، لكي لا أطيل الحل أكثر دعنا نكمل.

الآن بما أن الملف مضغوط فالأمر بسيط للغاية فكل ما علينا فعله هو أن نفك ضغطه باستخدام gzip؛ ولكن قبل ذلك نحتاج إلى تغيير الامتداد الخاص بالملف data إلى .gz لكي يعمل؛ وإلا فسيظهر خطأ.
قد تتسائل الآن لماذا فعلنا ذلك ؟ حسنًا دعني أخبرك أهمية وضع الإمتداد كـ (gz) في نهاية اسم الملف :


1. تحديد نوع الملف
- الامتداد يساعد المستخدمين والبرامج في التعرف على نوع الملف بسهولة. عندما ترى ملفًا ينتهي بـ .gz، تعرف أنه ملف مضغوط باستخدام gzip.

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

3. تنظيم الملفات
- يساعد في تنظيم الملفات على النظام بحيث يمكن للمستخدمين معرفة الملفات المضغوطة بسهولة من بين الملفات الأخرى من خلال رؤية الامتداد الخاص بها في نهاية اسم الملف.

لذا فإن وجود الامتداد يجعل الأمور أسهل وأكثر وضوحًا. لذلك يُفضل دائمًا إضافة الامتداد المناسب عند إنشاء الملفات المضغوطة تجنبًا لحدوث أي خطأ.

لنكمل...
الآن علينا فك ضغط الملف data باستخدام gzip؛ دعنا نحاول فك ضغطه دون تغيير الامتداد كما يلي:
مشاهدة المرفق 13531
لاحظنا ظهور خطأ " امتداد غير معروف " أي ان gzip لم يتعرف على ملف data !

والآن لنقم بتغيير الامتداد أو كما يُسمى بـ suffix الى gz ليصبح " data.gz ". ومن هنا سنقوم أيضًا بتغيير اسم الملف من خلال الأمر mv، كما يلي :
Bash:
mv data data.gz

التوضيح :

- data : هذا هو اسم الملف أو المجلد الذي تريد تغيير اسمه أو نقله. في هذا المثال، data هو اسم الملف الحالي.

- data.gz : هذا هو الاسم الجديد الذي تريد أن تعطيه للملف أو المجلد. في هذا المثال، بعد تنفيذ الأمر، سيتم تغيير اسم الملف data إلى data.gz حيث قُمنا بإضافة الإمتداد الصحيح.


ما يحدث عند تنفيذ الأمر:
- عندما تقوم بتشغيل الأمر mv data data.gz:
- سيقوم النظام بتغيير اسم الملف data إلى data.gz.
- إذا كان هناك ملف موجود بالفعل باسم data.gz، سيتم استبداله دون أي تحذير (لذا يجب الحذر عند استخدام الأمر).

الآن لنقم بفك الضغط للملف مستخدمين الأمر gzip -d يليه اسم الملف data.gz كما يلي:
Bash:
gzip -d data.gz
مشاهدة المرفق 13535
,ونلاحظ بعد أن قمنا بفك ضغطه استعدنا اسم الملف الأصلي دون امتداد للإشارة الى أن الملف لم يعد مضغوط باستخدام gzip.

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

كما تلاحظون فإن الملف مضغوط باستخدام bzip2، هذه المرة سنستخدم bzip2 لفك ضغطه كما يلي :
Bash:
bzip2 -d data
مشاهدة المرفق 13542
بعد فك الضغط أصبح اسم الملف " data.out ".

الخطوة السادسة
نحدد نوع الملف " data " باستخدام الأمر file لنجد بأنه مجددًا مضغوط باستخدام gzip، كرر الخطوة الرابعة لفك الضغط، كما يلي:
مشاهدة المرفق 13547

الخطوة السابعة
بعد تفقد نوع الملف تبين انه POSIX tar archive لنقم بفكه " Un tar it ".
مشاهدة المرفق 13548
لقد أنشأ ملفًا يسمى data5.bin؛ تحقق من نوعه ثم كرر ما سبق.


استمر في ذلك الى حين الحصول على ملف نصي " ASCII " غير مضغوط وهو الذي يحتوي على كلمة المرور للمرحلة التاليه كما يلي:
مشاهدة المرفق 13550

معلومات إضافية للإفادة


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

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

الضغط بدون فقدان البيانات (Lossless Compression):
يحافظ على كل البيانات الأصلية. عند فك الضغط، يتم استعادة البيانات بالكامل دون فقدان أي معلومات. يتم استخدامه للملفات التي لا يمكن تحمل فقدان بياناتها، مثل المستندات، البرامج، والصور التي تحتاج للحفاظ على جودتها الكاملة (مثل ملفات PNG).

الضغط مع فقدان البيانات (Lossy Compression):
يؤدي إلى فقدان جزء من البيانات غير الضرورية أو التي لا تكون ملحوظة بشكل كبير. يتم استخدامه بشكل شائع مع ملفات الوسائط مثل الصور (JPEG)، الفيديو (MP4)، والصوت (MP3)، حيث يمكن تقليل الجودة بشكل طفيف لتوفير مساحة كبيرة.

والآن بالطبع فأنت تتسائل عن الفائدة من ضغط الملفات وهذا ما سأذكره تاليًا.

الفوائد من ضغط الملفات:


توفير مساحة التخزين.
يقلل من حجم الملفات على القرص الصلب أو أي وسيلة تخزين أخرى، مما يسمح بتخزين عدد أكبر من الملفات في نفس المساحة، فمثلًا، في التخزين السحابي أو ما بُعرف بـ cloud يمكنك القيام بضغط الملفات لتقليل حجمها قبل رفعها إلى خدمات التخزين السحابي مثل Google Drive أو Dropbox لتقليل وقت التحميل وتوفير استخدام مساحة التخزين.
تسهيل نقل الملفات.
حيث أنَّ الملفات المضغوطة تكون أصغر حجمًا، مما يجعل إرسالها عبر الإنترنت أسرع. هذا مفيد خصوصًا عند إرسال الملفات عبر البريد الإلكتروني أو رفعها إلى السحابة.

تقليل استخدام عرض النطاق الترددي (Bandwidth).
عند نقل الملفات المضغوطة عبر الشبكات، يتم تقليل حجم البيانات المنقولة، مما يقلل من استهلاك عرض النطاق الترددي أو مايُعرف بالـ (bandwidth)، ويسرع عملية التحميل والتنزيل.

ومن الممكن ايضًا أن يقوم بحماية البيانات ولو بشكل بسيط.
حيث أن بعض أدوات الضغط توفر إمكانية إضافة تشفير وكلمات مرور لحماية البيانات، مما يعزز من الأمان عند نقل الملفات الحساسة.

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

كيف تعمل خوارزميات الضغط؟
تقوم الخوارزميات بتحليل البيانات داخل الملف وتحديد الأنماط المتكررة أو البيانات التي يمكن استبدالها بعلامات مختصرة. على سبيل المثال:
في النصوص، يمكن استبدال الكلمات أو الأحرف المتكررة برموز أقصر، وفي الصور، يمكن تخزين البيانات اللونية أو البيانية بطرق تقلل من التكرار الزائد.

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


سأتطرق الآن لذكر وتلخيص بعض طرق وأنواع ضغط الملفات والتي كُنا قد اسخدمناها سابقًا في حل التحدّي، مثل gzip ، bzip2 :

نبدأ بـ gzip نلخصها بشكل بسيط جدًّا:

الاسم الكامل: GNU zip

الامتداد: الملفات المضغوطة باستخدام gzip تحصل على الامتداد .gz.

الأداء: gzip يتميز بالسرعة النسبية في عملية الضغط وفك الضغط، وهو الخيار الشائع لضغط الملفات الكبيرة والمتوسطة.

لضغط ملف:
Bash:
gzip اسم الملف
حيث أن هذا الأمر سيحذف الملف الأصلي وينشئ ملفًا مضغوطًا جديدًا منتهيًا بامتداد .gz.

لفك الضغط نُذكر بالأمر التالي:
Bash:
gunzip اسم_الملف.gz
bzip2

الاسم الكامل: Burrows-Wheeler Block Sorting Compressor

الامتداد: الملفات المضغوطة باستخدام bzip2 تحصل على الامتداد .bz2.

الأداء: bzip2 يوفر ضغط أفضل (حجم أصغر للملفات المضغوطة) ولكنه أبطأ من gzip. مفيد للملفات الكبيرة التي تحتاج إلى ضغط فعال.

وكُنا قد ذكرنا سابقًا كيف نقوم بفك ضغط هذا النوع من الملفات.

فالخُلاصة أن :

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



أمّا عن سُؤالي لكم فهو :
برأيكم لماذا قُمنا بإنشاء مُجلد تحت مُجلد الـ tmp دونًا عن غيره ؟
انتظر منكم الإجابات وحاولوا البحث عن الموضوع وقراءة المزيد عن هيكلة ملفات لينكس وفوائدها وستجدون الإجابة فهي بسيطة جدًا، ولكن من الضروري أن تتعلموا استخدام مهارة البحث وقراءة العديد من المقالات والشروحات للوصول للإجابة 🤷‍♀️


والى هنا انتهت هذه المرحلة، اتمنى ان يكون الشرح واضح ومُفيد، انتظروني بالمرحلة القادمة، دُمتم بود وبحفظ الله🌸
الحمدلله على سلامتك ما تشوفي شر
الله يعطيكِ العافية على هذا الجهد
 
  • Love
التفاعلات: BAYAN
الحمدلله على سلامتك ما تشوفي شر
الله يعطيكِ العافية على هذا الجهد
الله يسلمك ويعافيك يارب
 
بارك الله فيك وجزاك الله كل خير
ننتظر جديد ابداعك دائماً
 
  • Love
التفاعلات: BAYAN

آخر المشاركات

فانوس

رمضان
عودة
أعلى