<?xml version="1.0"?>
<rss version="2.0"><channel><title>DevOps: Linux &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/page/2/?d=4</link><description>DevOps: Linux &#x644;&#x64A;&#x646;&#x643;&#x633;</description><language>ar</language><item><title>&#x645;&#x627; &#x647;&#x648; &#x646;&#x638;&#x627;&#x645; &#x644;&#x64A;&#x646;&#x643;&#x633; &#x648;&#x644;&#x645;&#x627;&#x630;&#x627; &#x62A;&#x648;&#x62C;&#x62F; 100 &#x62A;&#x648;&#x632;&#x64A;&#x639;&#x629; &#x645;&#x646;&#x647;&#x61F;</title><link>https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%88%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D9%88%D8%AC%D8%AF-100-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%85%D9%86%D9%87%D8%9F-r698/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/-------100--.png.e889ed7b724d521a0f360f6a71b5ad5d.png" /></p>
<p>
	توجد العديد من المقالات التي تناقش نظام التشغيل الأفضل بالنسبة للمستخدمين، يعد نظام التشغيل ويندوز Windows الأكثر شيوعًا بين المستخدمين حول العالم. تطور نظام التشغيل لينكس بشكل كبير في السنوات الأخيرة فعلى الرغم من أنه كان نظام التشغيل الأنسب للخوادم بسبب أداءه وموثوقيته العالية إلا أنّه أصبح اليوم مناسبًا لجميع المستخدمين بعد أن امتلك واجهات رسومية مناسبة ودعم العديد من الخدمات التي يحتاجها المستخدمون.
</p>

<p>
	تذكر العديد من المقالات أن <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام لينكس</a> أفضل من ويندوز فهو أفضل من ناحية الأمان كما أن المستخدم ليس بحاجة إلى شراء رخصة وتجديدها باستمرار. يجد المستخدم عند رغبته بتثبيت نظام التشغيل لينكس على حاسبه العديد من الإصدارات المختلفة والتي يُطلق عليها اسم التوزيعات فمنها نجد توزيعة أوبونتو Ubuntu وتوزيعة فيدورا Fedora وتوزيعة مينت Mint وغيرها من التوزيعات التي يبلغ عددها المئات. نستنتج من هذا التنوع أمرًا مهمًا حول ماهية لينكس الحقيقية إذ أنّه عبارة عن نواة لنظام التشغيل وليس نظام تشغيل كما يعتقد الكثيرون.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/too-many-linux-choices.png.dcb7d250cba6cbd3693132bb880ed3b2.png" data-fileid="126089" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126089" data-unique="t2ml2gr34" alt="too-many-linux-choices.png" src="https://academy.hsoub.com/uploads/monthly_2023_05/too-many-linux-choices.png.dcb7d250cba6cbd3693132bb880ed3b2.png"> </a>
</p>

<p>
	نقدم في هذا المقال تشبيهًا ليساعد المستخدم أن يفهم الفارق بين نواة نظام التشغيل والنظام بحد ذاته. على الرغم أن التشبيه مناسب لطرح الفكرة فهو يبقى توضيحًا ومساعدًا لفهم المبدأ وبالطبع لن نجد سؤالًا عن هذا التشبيه في امتحان رسمي أو في مقابلة عمل.
</p>

<h2>
	لينكس عبارة عن نواة نظام تشغيل فقط
</h2>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		لينكس ليس نظام تشغيل وإنما فقط نواة
	</p>
</blockquote>

<p>
	تعتبر هذه العبارة واضحة وصحيحة ولكن إذا بحثنا في الكتب أو المقالات التقنية فقد نجد شكلًا يوضح بنية نواة لينكس كما في الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/Linux_Kernel_structure.png.8161481b6d9a77087f22eb0897e93503.png" data-fileid="126093" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126093" data-unique="q0uue58gb" alt="Linux_Kernel_structure.png" src="https://academy.hsoub.com/uploads/monthly_2023_05/Linux_Kernel_structure.png.8161481b6d9a77087f22eb0897e93503.png"> </a>
</p>

<p>
	نشبه نظم التشغيل وكأنها مركبات مهما يكن نوعها، تمتلك أية مركبة محرك والذي يمثل أساس هذه المركبة والتي يمكن أيضًا أن نسميها النواة ومن البديهي أنه لا يمكن استخدام المركبة دون هذا الجزء الأساسي.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/operating_system_analogy.png.939f957613568c327143e1bf32b20365.png" data-fileid="126090" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126090" data-unique="wjbzg82y9" alt="operating_system_analogy.png" src="https://academy.hsoub.com/uploads/monthly_2023_05/operating_system_analogy.png.939f957613568c327143e1bf32b20365.png"> </a>
</p>

<p>
	على الرغم من أهميته إلا أنّ المستخدم لا يستطيع أن يقود المحرك مباشرة فهو بحاجة إلى العديد من الأدوات كي تتفاعل مع المحرك ليصل إلى الهدف المرغوب وهو قيادة المركبة، فهو بالحاجة إلى العجلات والمقود وعلبة السرعة والمكابح والكثير من الأدوات التي يتعامل معها مباشرة دون أن يتعامل مع المحرك بشكل مباشر.
</p>

<p>
	كذلك الأمر لا يمكن استخدام نواة نظام التشغيل بمفردها وإنما يحتاج المستخدم العديد من الأدوات ومنها الغلاف shell والأوامر والواجهات الرسومية والتي يشير إليها البعض باسم بيئة سطح المكتب وغيرها من الأدوات الأساسية التي يحتاجها المستخدم في أعماله اليومية.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		يمتلك نظام التشغيل ويندوز وجميع أنظمة التشغيل أنوية أيضًا
	</p>

	<p>
		يعتمد نظام التشغيل ويندوز على نواة اسمها Windows NT kernel بينما تعتمد أنظمة macOS على نواة XNU
	</p>
</blockquote>

<h2>
	التفكير بنظم التشغيل على أنها مركبات
</h2>

<p>
	نعتبر شركة مايكروسوفت Microsoft بأنها شركة تصنيع سيارات مخصصة لجميع الأغراض والذي يمثل نظام تشغيل ويندوز. تسيطر هذه السيارات على السوق المحلية والعالمية والتي تتضمن محركاتها المحمية ببراءات اختراع والمطورة ضمن الشركة نفسها والتي لا يستطيع أي شخص إنتاجها أو تعديلها دون موافقة الشركة، أي لا تسمح الشركة بتخصيص المحرك مثلًا كما يرغب المستخدم.
</p>

<p>
	وبالطبع توجد شركة أبل Apple لتصنيع السيارات أيضًا والتي تقدم السيارات الفخمة باهظة الثمن وفي حال واجهت المستخدم أية مشكلة فيستطيع الاتصال بالدعم الفني والذي يستبدل غالبا السيارة بأخرى.
</p>

<p>
	أما بحالة لينكس وتحديدًا محرك لينكس فلا توجد براءة اختراع تحمي هذا المحرك وتقيد المستخدم من تنفيذ التعديلات وعليه يمكن لأي مستخدم تعديل وبناء السيارات بشكل مجاني والتي تمثل أنظمة التشغيل الخاصة بالحواسب المكتبية والدراجات والتي تمثل الأنظمة الصغيرة المضمنة ضمن تجهيزات أخرى مثل الألعاب والتلفاز وغيرها إضافة إلى إنتاج الشاحنات القوية والتي تمثل الخوادم والطائرات النفاثة والتي تمثل الحواسب الفائقة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/linux-kernel-as-engine.png.65dd9724fa414191a570d91baa4000f8.png" data-fileid="126091" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126091" data-unique="4zcg0hy61" alt="linux-kernel-as-engine.png" src="https://academy.hsoub.com/uploads/monthly_2023_05/linux-kernel-as-engine.png.65dd9724fa414191a570d91baa4000f8.png"> </a>
</p>

<p>
	نلخص ما سبق بالقول:
</p>

<ul>
	<li>
		النواة = المحرك
	</li>
	<li>
		نواة لينكس = نوع محدد من أنواع المحركات
	</li>
	<li>
		أنظمة التشغيل للحواسب المكتبية = السيارات
	</li>
	<li>
		أنظمة التشغيل للخوادم = الشاحنات القوية
	</li>
	<li>
		الأنظمة المضمنة = الدراجات
	</li>
	<li>
		بيئة سطح المكتب = جسم السيارة إضافة إلى الأجزاء الداخلية الخاصة بها.
	</li>
	<li>
		السمات themes والأيقونات = طلاء السيارة وجميع المزايا القابلة للتخصيص من قبل المستخدم
	</li>
	<li>
		التطبيقات = الملحقات التي يمكن استخدامها لغرض محدد مثل نظام الموسيقا.
	</li>
</ul>

<h2>
	لماذا توجد العديد من توزيعات/نظم تشغيل لينكس المتشابهة؟
</h2>

<p>
	بالعودة إلى التشبيه السابق فنطرح السؤال لماذا توجد الكثير من أنواع السيارات فتكون الإجابة ببساطة لأنه يوجد عدد كبير من مصنعي السيارات والذين يستخدمون ما أسميناه محرك لينكس وتختلف كل سيارة عن الأخرى بالنوع والغاية منها، وبما أن هذا المحرك متاح للاستخدام والتطوير بشكل مجاني فيستطيع أي شخص بناء مركبة بالاعتماد عليه ولهذا السبب توجد التوزيعات الشهيرة اليوم مثل <a href="https://academy.hsoub.com/apps/operating-systems/linux/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%B3%D8%B7%D8%AD-%D9%85%D9%83%D8%AA%D8%A8-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-2004-r779/" rel="">أوبونتو Ubuntu</a> و<a href="https://academy.hsoub.com/devops/linux/%D9%81%D9%8A-%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AE%D8%AA%D9%84%D9%81-ubuntu-%D8%B9%D9%86-debian%D8%9F-r235/" rel="">ديبيان Debian</a> و<a href="https://academy.hsoub.com/questions/22-%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A-%D8%A8%D9%8A%D9%86-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%81%D9%8A%D8%AF%D9%88%D8%B1%D8%A7-%D9%88%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88%D8%9F/" rel="">فيدورا Fedora</a> ومانجارو Manjaro وغيرها من نظم التشغيل أو تسمى بالتوزيعات المعتمدة على نواة لينكس.
</p>

<p>
	يستطيع المستخدم أن يلاحظ بسهولة التشابه الكبير بين بعض التوزيعات المبنية على أساس نواة لينكس. يوضح الشكل مقارنة بين نسخة فيدورا بإصدار GNOME ونسخة ديبيان بإصدار GNOME والتي تبين أنهما متشابهان إلى حد كبير.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/fedora-gnome-vs-debian-gnome.jpg.3af964fcf7fb64c90ab61438c5d19344.jpg" data-fileid="126094" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126094" data-unique="165jddqq9" alt="fedora-gnome-vs-debian-gnome.jpg" src="https://academy.hsoub.com/uploads/monthly_2023_05/fedora-gnome-vs-debian-gnome.jpg.3af964fcf7fb64c90ab61438c5d19344.jpg"> </a>
</p>

<p>
	ندعو المكون الذي يعطي لينكس مظهره باسم بيئة سطح المكتب وبالعودة إلى التشبيه الذي اعتمدناه فتمثل هذه البيئة الهيكل الخارجي للسيارة والأجزاء الداخلية الموافقة له. تتيح توزيعات لينكس المختلفة العديد من البيئات وتعرفنا في المثال السابق على إحداها والتي اسمها GNOME وتوجد أيضًا KDE وCinamon وMATE وغيرها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/linux_suv_analogy.jpg.155fa56a8df935108eee036303e2a7ad.jpg" data-fileid="126092" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126092" data-unique="leih3w6be" alt="linux_suv_analogy.jpg" src="https://academy.hsoub.com/uploads/monthly_2023_05/linux_suv_analogy.jpg.155fa56a8df935108eee036303e2a7ad.jpg"> </a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		تستهلك بعض السيارات المزيد من الوقود، تستهلك بيئات سطح المكتب المزيد من ذواكر RAM
	</p>
</blockquote>

<p>
	تستخدم الأنواع المختلفة من السيارات لأغراض مختلفة، فالسيارات الصغيرة مناسبة للاستخدام ضمن المدينة بينما تستخدم السيارات ذات الدفع الرباعي ضمن الأماكن الوعرة. يختلف استهلاك الوقود بين الأنواع السابقة وعلى المستخدم أن يختار ما يناسبه وفقًا لأهدافه. كذلك الأمر بالنسبة لبيئات سطح المكتب فالبيئة GNOME تتطلب أن يمتلك الحاسب ذاكرة RAM بحجم أكبر من 4 غيغابايت، بينما تتطلب البيئة Xfce حجم ذاكرة أقل ويبلغ 1 غيغابايت إلا أنه لا يعد الأفضل من حيث المظهر وخصوصًا مقارنة ببيئة GNOME.
</p>

<p>
	ارجع إلى مقال <a href="https://academy.hsoub.com/devops/linux/kde-plasma-%D9%85%D9%82%D8%A7%D8%A8%D9%84-gnome-%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A8%D9%8A%D8%A6%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r632/" rel="">KDE Plasma مقابل GNOME: مقارنة بين أشهر بيئات سطح المكتب في لينكس</a> الذي يعرض مقارنة بين أشهر بيئات سطح المكتب في لينكس لمزيد من التفصيل.
</p>

<h3>
	هل تأتي بيئة سطح المكتب من ضمن التوزيعة أم يجب تثبيتها بشكل منفصل؟
</h3>

<p>
	يستطيع المستخدم تثبيت بيئة سطح المكتب التي يفضلها حتى ولو لم تُضمن بشكل مسبق في التوزيعة ونظرًا لأن لينكس مجاني فيستطيع أي مستخدم إجراء أي تعديل يرغب به ولكن بالطبع يجب أن يكون خبيرًا أو أنه قادر على التعلم بسرعة.
</p>

<p>
	تجدر الإشارة أن تثبيت بيئة سطح المكتب لن تتشابه في تجربتها مع بيئة أخرى أو بيئة قديمة استخدمتها بشكل كلي فيمكن أن يوجد اختلاف ببعض تطبيقات بيئات سطح المكتب وللأسف يمكن أن تظهر بعض المشاكل أيضًا فعلى سبيل المثال يمكن أن يختفي مؤشر البطارية أو غيرها. بالطبع يمكن أن يبذل المستخدم مجهودًا إضافيًا لحل هذه المشاكل إذا وجدها المستخدم مزعجة ولم يستطع التأقلم معها.
</p>

<h2>
	تتعامل توزيعات لينكس بشكل مختلف مع التطبيقات
</h2>

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

<p>
	تتيح بعض نظم تشغيل لينكس البرمجيات الجديدة فور توفرها مباشرة بينما تستغرق بعض التوزيعات وقتًا أطول لاختبار البرمجية. تتيح بعض التوزيعات مثل أوبونتو وسائل مريحة لتثبيت البرمجيات بينما تكون هذه العملية معقدة شوي لبعض التوزيعات مثل غينتوو Gentoo.
</p>

<h2>
	الخاتمة
</h2>

<p>
	يعد اختيار توزيعة لينكس مناسبة أمرًا محيّرًا نظرًا للخيارات العديدة المتاحة، وقد تضمن المقال ذكر بعض العوامل الأساسية التي يجب أخذها بعين الاعتبار عند الاختيار. نضيف إلى العوامل سابقة الذكر الدعم الفني، فمما لا شك فيه أن أي مستخدم يرغب بوجود دعم فني قادر على حل المشاكل التي تواجهه وهذا ما ينطبق على لينكس فالتوزيعات مثل أوبونتو تمتلك دعمًا رسميًا مناسبًا إضافة إلى وجود موقع الكتروني يتيح طرح أي استفسار وحل أي مشكلة تواجه المستخدم
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://itsfoss.com/what-is-linux/" rel="external nofollow">What is Linux and Why There are 100’s of Linux Distributions?</a> لصاحبه Abhishek Prakash.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">عرض موجز لأشهر توزيعات لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-ubuntu-%D9%88%D8%A2%D8%B1%D8%AA%D8%B4-arch-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-r625/" rel="">موازنة بين توزيعة أوبنتو Ubuntu وآرتش Arch من لينكس Linux</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/10-%D8%B7%D8%B1%D9%82-%D9%84%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-%D9%88%D8%A7%D8%B3%D8%AA%D9%83%D8%B4%D8%A7%D9%81%D9%87-r638/" rel="">10 طرق لتجربة نظام التشغيل لينكس Linux واستكشافه</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">698</guid><pubDate>Mon, 22 May 2023 14:01:01 +0000</pubDate></item><item><title>&#x642;&#x631;&#x627;&#x621;&#x629; &#x648;&#x636;&#x628;&#x637; &#x645;&#x62A;&#x63A;&#x64A;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x635;&#x62F;&#x641;&#x629; Shell &#x648;&#x627;&#x644;&#x628;&#x64A;&#x626;&#x629; &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D9%82%D8%B1%D8%A7%D8%A1%D8%A9-%D9%88%D8%B6%D8%A8%D8%B7-%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%AF%D9%81%D8%A9-shell-%D9%88%D8%A7%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r697/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/-----Shell-----.png.ac024a956c14f46a25661fdb709e386c.png" /></p>
<p>
	عندما يتعامل المستخدم مع مخدم بعيد عنه باستخدام جلسة الصدفة Shell فإن هذا الصدفة يجمع الكثير من المعلومات التي تحدد سلوك الخادم وطريقة النفاذ إلى الموارد. تكون بعض هذه الإعدادات محتواة ضمن الإعدادات وبعضها محتوى ضمن مدخلات المستخدم.
</p>

<p>
	يستخدم الصدفة مساحة مخصصة ينشئها عندما يتم تأسيس الجلسة مع الخادم حيث تحتوي هذه البيئة متغيرات تحدد خصائص النظام.
</p>

<p>
	نستعرض في المقال كيفية التعامل مع البيئة وقراءة وإعداد المتغيرات الخاصة بالبيئة والمتغيرات الخاصة بالصدفة بشكل مباشر وعن طريق ملفات الإعداد الدائمة.
</p>

<h2>
	كيف تعمل البيئة ومتغيراتها
</h2>

<p>
	يتم إنشاء <a href="https://academy.hsoub.com/devops/linux/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-process-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%B7%D8%B1%D9%81%D9%8A%D8%A9-r70/" rel="">عملية Process</a> في كل مرة يتم فيها إنشاء جلسة صدفة جديدة، تعمل هذه العملية على جمع المعلومات التي يجب توفرها لعملية الصدفة والعمليات التي تتولد عنها. يتم الحصول على هذه المعلومات المتعلقة بالإعدادات من مجموعة متنوعة من الملفات وإعدادات النظام. توفر البيئة وسطًا تستطيع عملية الصدفة استخدامه لقراءة أو ضبط الإعدادات وتمرير هذه القيم إلى العمليات الناتجة عنها أيضًا.
</p>

<p>
	يتم صياغة البيئة على هيئة سلاسل نصية تمثل أزواجًا من القيم -مفتاح Key-values. ففي حال تمرير عدة قيم فيتم الفصل بينها بواسطة رمز النقطتين (<code>:</code>) حيث يبدو شكل كل زوج كما يلي:
</p>

<pre class="ipsCode">KEY=value1:value2:...
</pre>

<p>
	يتم استخدام علامة التنصيص المزودجة في حال وجود فراغات ضمن القيمة كما في الشكل التالي:
</p>

<pre class="ipsCode">KEY="value with spaces"
</pre>

<p>
	تمثل المفاتيح في هذه الحالة متغيرات والتي يمكن أن يكون لها أحد نوعين وهي إما متغيرات خاصة بالبيئة أو متغيرات خاصة بالصدفة.
</p>

<p>
	تعرّف متغيرات البيئة Environment Variables على أنها متغيرات يتم تعريفها من أجل جلسة الصدفة الحالية كما يتم توريثها إلى أية عمليات أو جلسات صدفة مرتبطة بالصدفة الأم. تستخدم متغيرات البيئة لتمرير المعلومات إلى العمليات التي يتم إنشاؤها من الصدفة الذي قام بإنشاء المتغير. أما متغيرات الصدفة Shell Variables فهي متغيرات محتواة بشكل حصري ضمن الصدفة الذي تم تعريفها ضمنه وتستخدم عادة لتعقب بعض المعطيات التجريبية مثل طباعة مسار العمل الحالي. نميز اصطلاحًا بين هذين النوعين أن متغيرات الجلسة تكون مكتوبة بأحرف كبيرة وذلك لتمييزها عن متغيرات البيئة التي تكتب بحروف صغيرة.
</p>

<h2>
	طباعة متغيرات الصدفة والبيئة
</h2>

<p>
	ترتبط كل <a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D9%8A%D9%8E%D8%B3%D9%91%D9%8E%D8%B1-%D9%84%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B3%D9%83%D8%B1%D8%A8%D8%AA%D8%A7%D8%AA-shell-r56/" rel="">جلسة صدفة</a> بمتغيرات البيئة والصدفة المرتبطة بها. يمكن النفاذ إلى هذه المتغيرات بعدة طرق. نستعرض متغيرات البيئة المتاحة بتنفيذ الأمر <code>env</code> أو <code>printenv</code> وفي حال عدم إجراء أية تعديلات على طريقة العمل فالأمرين السابقين يعملان دون اختلاف.
</p>

<pre class="ipsCode">printenv
</pre>

<p>
	يظهر عندها خرج مشابه لما يلي مع الأخذ بعين الاعتبار أن عدد المتغيرات يختلف من جهاز لآخر:
</p>

<pre class="ipsCode">SHELL=/bin/bash
TERM=xterm
USER=demouser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demouser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv
</pre>

<p>
	لا يوجد اختلاف أي من الأمرين السابقين يتم تنفيذه فيجب أن يبقى الخرج ذاته بالحالتين أما عن الاختلاف بين الأمرين فيظهر عند تخصيص الأمر <code>printenv</code> إذ يمكن أن يطبع المسارات الخاصة بالمتغيرات مثلا بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">printenv PATH
</pre>

<p>
	فيظهر عندها خرج مشابه لما يلي:
</p>

<pre class="ipsCode">/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
</pre>

<p>
	بينما يسمح الأمر <code>env</code> بتعديل البيئة التي تستخدمها البرامج عبر تمرير مجموعة من المتغيرات بالشكل التالي:
</p>

<pre class="ipsCode">env VAR1="value" command_to_run command_options
</pre>

<p>
	ترث العمليات الناشئة متغيرات البيئة من العملية الأب مما يسمح بإعادة تحميل بعض القيم أو إضافة متغيرات لبيئة العملية الابن. نستعرض المتغيرات الخاصة بالصدفة باستخدام الأمر <code>set</code> ولكن تجدر الإشارة إلى أنه في حال تنفيذ هذا الأمر بدون أية إضافات فيتم عرض قائمة بجميع متغيرات الصدفة والبيئة وحتى المتغيرات المحلية والتوابع الخاصة بالصدفة ويتم ذلك بتنفيذ الأمر:
</p>

<pre class="ipsCode">set
</pre>

<p>
	يظهر خرج مشابه لما يلي:
</p>

<pre class="ipsCode">BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .
</pre>

<p>
	نظرًا لأن هذه القائمة تكون كبيرة فمن الأفضل تقليل عدد الأسطر البرمجية التي سيتم عرضها ويتم ذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">set | less
</pre>

<p>
	تبقى كمية المعلومات كبيرة وبعضها ليس مفيدًا مثل بعض التوابع لهذا يمكن تنظيف هذا الخرج بتوجيه الأمر <code>set</code> ليعمل ضمن نمط POSIX بحيث لن تطبع توابع الصدفة ويتم ذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">(set -o posix; set)
</pre>

<p>
	تظهر قائمة بمتغيرات البيئة والصدفة التي تم تعريفها بشكل مسبق، يمكن تنفيذ مقارنة بين خرج الأمر <code>env</code> و <code>printenv</code> لمحاولة استخلاص متغيرات الصدفة فقط ولكن ذلك لن يكون عمليًا نظرًا لتعدد الطرق التي يعرض فيها كل من الأوامر السابقة نتائجه، تتم عملية المقارنة بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">comm -23 &lt;(set -o posix; set | sort) &lt;(env | sort)
</pre>

<p>
	يمكن أن يظهر في الخرج بعض متغيرات البيئة نظرًا لأنّ الأمر <code>set</code> يضيف قيم محاطة بإشارات تنصيص بينما لا يستخدم الأمران <code>env</code>و <code>printenv</code> هذه الطريقة مما قد يسبب بعض الاختلافات ولكن يعطي ذلك المستخدم فكرة جيدة عن المتغيرات المستخدمة ضمن البيئة. يعد الاستخدام الأهم لهذه المتغيرات أنها تسمح بإتاحة قيم دائمة تستخدم بين العمليات دون الحاجة إلى كتابتها ضمن ملفات.
</p>

<h3>
	متغيرات الصدفة والبيئة الشائعة
</h3>

<p>
	توجد مجموعة كبيرة من متغيرات البيئة والصدفة التي يتم استخدامها بشكل متكرر من قبل المستخدمين، نذكر منها:
</p>

<ul>
	<li>
		المتغير <code>SHELL</code>: يصف هذا المتغير الصدفة الذي سيقوم بتفسير الأوامر التي يدخلها المستخدم وتمريرها لنواة نظام التشغيل، يشير المتغير إلى <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B5%D8%AF%D9%81%D8%A9-%D8%A8%D8%A7%D8%B4-bash-r606/" rel="">الصدفة bash</a> بشكل افتراضي ولكن يمكن تغيير هذه القيمة إذا اقتضت الحاجة ذلك.
	</li>
	<li>
		المتغير <code>TERM</code>: يحدد هذا المتغير نوع موجه الأوامر الذي سيستخدم عند تنفيذ أمر ما عن طريق الصدفة، تختلف هذه الأنواع تبعًا لمتطلبات التشغيل ولا يتم تغيير قيمة هذا المتغير عادة.
	</li>
	<li>
		المتغير <code>USER</code>: يحدد المستخدم الحالي الذي سجل دخول إلى نظام التشغيل.
	</li>
	<li>
		المتغير <code>PWD</code>: يحدد مسار العمل الحالي.
	</li>
	<li>
		المتغير <code>OLDPWD</code>: يحدد مسار العمل السابق، ويتم استخدام هذا المتغير لإمكانية العودة إلى المسار السابق باستخدام الأمر <code>cd -</code>. *المتغير <code>LS_COLORS</code>:يحدد نمط الألوان المستخدم والذي تتم إضافته -بشكل خياري- إلى خرج الأمر <code>ls</code> بيحث يتم التمييز بين أنواع الملفات عن طريق اللون مما يسهل العمل على المستخدم بشكل كبير.
	</li>
	<li>
		المتغير <code>MAIL</code>: يحدد المسار إلى صندوق البريد الخاص بالمستخدم.
	</li>
	<li>
		المتغير <code>PATH</code>: يتضمن هذا المتغير قائمة المجلدات التي سيفحصها نظام التشغيل بالترتيب للبحث عن الملفات التنفيذية الخاصة بالأوامر التي يدخلها المستخدم.
	</li>
	<li>
		المتغير <code>LANG</code>: يشير هذا المتغير إلى اللغة الحالية والخيارات المحلية إضافة إلى نوع ترميز المحارف المستخدم.
	</li>
	<li>
		المتغير <code>HOME</code>: تشير إلى مسار المجلد الافتراضي الخاص بالمستخدم الحالي.
	</li>
	<li>
		المتغير <code>_</code>: يشير إلى أحدث أمر قد تم تنفيذه. بالإضافة إلى متغيرات الصدفة التالية التي يصادفها معظم المستخدمون في أعمالهم:
	</li>
	<li>
		المتغير <code>BASHOPTS</code>: يتضمن قائمة بالخيارات المستخدمة عندما تنفيذ الأمر الخاص بالصدفة Bash ويفيد ذلك في التأكد من أنّ بيئة الصدفة ستعمل وفق ما هو متوقع أم لا.
	</li>
	<li>
		المتغير <code>BASH_VERSION</code>: يشير إلى رقم الإصدار الخاص بالصدفة Bash بشكل مقروء بالنسبة للمستخدم.
	</li>
	<li>
		المتغير <code>BASHVERSINFO</code>: يشير إلى رقم الإصدار الخاص بالصدفة Bash بشكل خاص بالآلة.
	</li>
	<li>
		المتغير <code>COLUMNS</code>: يشير إلى عدد الأعمدة الذي يمكن استخدامه لعرض خرج الأوامر بما يناسب الشاشة.
	</li>
	<li>
		المتغير <code>DIRSTACK</code>: يتضمن قائمة بالمجلدات المخصصة للمكدسات stacks والتي يتم استخدامها مع أوامر <code>pushd</code> و<code>popd</code>.
	</li>
	<li>
		المتغير <code>HISTFILESIZE</code>: يشير إلى عدد الأوامر السابقة التي يتم حفظها ضمن الملف الخاص بحفظ الأوامر السابقة.
	</li>
	<li>
		المتغير <code>HOSTNAME</code>: يتضمن اسم المضيف الخاص بالحاسب المستخدم.
	</li>
	<li>
		المتغير <code>IFS</code>: يشير هذا المتغير إلى الفاصل المستخدم بين الكلمات التي يدخلها المستخدم وهي فراغ space بشكل افتراضي.
	</li>
	<li>
		المتغير <code>PS1</code>: يحدد هذا المتغير المؤشر الخاص بموجه الأوامر الرئيسي فنلاحظ بشكل افتراضي أنه يطبع اسم المستخدم الحالي واسم الحاسب بشكل افتراضي إلا أنه يمكن تخصيص هذه الطباعة بتعديل قيمة هذا المتغير، بينما يشير المتغير <code>PS2</code> إلى تعريف المؤشرات الثانوية عندما يمتد الأمر لأكثر من سطر واحد.
	</li>
	<li>
		المتغير <code>SHELLOPTS</code>: يشير إلى خيارات الصدفة التي يمكن إعدادها باستخدام الأمر <code>set</code>.
	</li>
	<li>
		المتغير <code>UID</code>: يشير إلى رقم التعريف الخاص بالمستخدم UID الخاص بالمستخدم الحالي.
	</li>
</ul>

<h2>
	إعداد متغيرات البيئة والصدفة
</h2>

<p>
	تبين الفقرات التالية خطوات إنشاء النوعين السابقين من المتغيرات ويفيد ذلك في التمييز بين هذين النوعين:
</p>

<h3>
	إنشاء متغيرات الصدفة
</h3>

<p>
	يمكن تعريف متغير الصدفة للجلسة الحالية بسهولة عبر كتابة اسم المتغير والقيمة التي يتم إسنادها له، يتم ذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">TEST_VAR='Hello World~'
</pre>

<p>
	نلاحظ استخدام علامة التنصيص بسبب وجود فراغ ضمن قيمة المتغير أما سبب استخدام علامة التنصيص المفردة بدلًا عن المزدوجة كما وضحنا في الفقرة السابقة هو وجود إشارة التعجب والتي تعد محرفًا خاصًا ويستدعي استخدام علامة التنصيص الإفرادية معه أو استخدام محرف الهروب (/) وإلا فإنه سيتم تنفيذ الأمر الخاص بالمحرف المميز وهو في حالة إشارة التعجب استدعاء أمر تم تنفيذه مسبقًا من قائمة الأوامر.
</p>

<p>
	أصبح هذا المتغير متاحًا ضمن الجلسة الحالية ولكنه لن يمرر إلى الجلسات التي تنتج عنها، نستعرض هذا المتغير بتنفيذ الأمر:
</p>

<pre class="ipsCode">set | grep TEST_VAR
</pre>

<p>
	يظهر عندها الخرج التالي:
</p>

<pre class="ipsCode">TEST_VAR='Hello World!'
</pre>

<p>
	نتحقق من أنّ هذا المتغير ليس من ضمن متغيرات البيئة بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">printenv | grep TEST_VAR
</pre>

<p>
	لن تظهر قيمة المتغير في هذه الحالة، نستعرض قيمة المتغير بتنفيذ الأمر <code>echo</code> كما في الشكل:
</p>

<pre class="ipsCode">echo $TEST_VAR
</pre>

<p>
	يظهر عندها الخرج التالي:
</p>

<pre class="ipsCode">Hello World!
</pre>

<p>
	يدرك الصدفة بمجرد وجود رمز <code>$</code> أن النص التالي يمثل اسم متغير وليس قيمة ثابتة ليقوم بطباعتها كما هي، لنتحقق أنّ هذا المتغير لن يمرر إلى العمليات الناتجة من العملية التي قامت بإنشائه ونبدأ ذلك بإنشاء جلسة صدفة جديدة باستخدام الأمر <code>bash</code> كما يلي"
</p>

<pre class="ipsCode">bash
echo $TEST_VAR
</pre>

<p>
	لن تظهر قيمة المتغير في هذه الحالة، نغادر الجلسة الجديدة بتنفيذ الأمر <code>exit</code> الذي يعيدنا إلى جلستنا الأصلية:
</p>

<pre class="ipsCode">exit
</pre>

<h3>
	إنشاء متغيرات البيئة
</h3>

<p>
	نستطيع تحويل متغير الصدفة إلى متغير بيئة عبر تنفيذ ما يعرف بالتصدير export وذلك بتنفيذ الأمر:
</p>

<pre class="ipsCode">export TEST_VAR
</pre>

<p>
	يصبح عندها هذا المتغير خاصًا بالبيئة ونتحقق من ذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">printenv | grep TEST_VAR
</pre>

<p>
	ليظهر عندها الخرج التالي:
</p>

<pre class="ipsCode">TEST_VAR=Hello World!
</pre>

<p>
	نعيد التجربة السابقة ونتأكد من تمرير المتغير إلى الجلسات الناتجة عن هذه الجلسة بتنفيذ الأوامر التالية:
</p>

<pre class="ipsCode">bash
echo $TEST_VAR
</pre>

<p>
	يظهر عندها الخرج التالي:
</p>

<pre class="ipsCode">Hello World!
</pre>

<p>
	أي أنّ العملية الابن استطاعت الحصول على قيمة المتغير. نتأكد أيضًا من قدرتها على إنشاء متغيرات البيئة بتنفيذ الأمر:
</p>

<pre class="ipsCode">export NEW_VAR="Testing export"
</pre>

<p>
	نتحقق من قيمة المتغير بتنفيذ الأمر:
</p>

<pre class="ipsCode">printenv | grep NEW_VAR
</pre>

<p>
	ليظهر الخرج التالي:
</p>

<pre class="ipsCode">NEW_VAR=Testing export
</pre>

<p>
	نعود إلى جلسة الصدفة الأصلية بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">exit
</pre>

<p>
	ونتحقق من قيمة المتغير الذي تم إنشاؤه بتنفيذ الأمر:
</p>

<pre class="ipsCode">echo $NEW_VAR
</pre>

<p>
	لن يظهر شيء على خرج الشاشة. يعود سبب ذلك إلى أنّ متغيرات البيئة يتم تمريرها من العملية الأب تمرر إلى العملية الابن فقط وليس بالعكس ويعد ذلك مفيدًا في منع البرامج من التأثير على بيئة التشغيل الأساسية التي تحويهم. بعد أن تم الخروج من صدفة الابن تم هدم البيئة وبالتالي إزالة المتغير ولهذا لم تظهر قيمته.
</p>

<h2>
	إزالة وتخفيض مستوى المتغيرات
</h2>

<p>
	يمكن للمستخدم إعادة متغير البيئة ليصبح متغير صدفة عبر عملية تعرف باسم تخفيض المستوى demote والتي تُنفّذ بالشكل التالي:
</p>

<pre class="ipsCode">export -n TEST_VAR
</pre>

<p>
	ننفذ الأمر التالي للتحقق بأن هذا المتغير لم يعد خاصًا بالبيئة:
</p>

<pre class="ipsCode">printenv | grep TEST_VAR
</pre>

<p>
	ولكن يجب أن يظهر ضمن قائمة متغيرات الصدفة ونتحقق من ذلك بتنفيذ الأمر:
</p>

<pre class="ipsCode">set | grep TEST_VAR
</pre>

<p>
	ليظهر عندها الخرج التالي:
</p>

<pre class="ipsCode">TEST_VAR='Hello World!'
</pre>

<p>
	نستطيع إزالة المتغير سواء كان متغير بيئة أم متغير صدفة باستخدام الأمر <code>unset</code> بالشكل التالي:
</p>

<pre class="ipsCode">unset TEST_VAR
</pre>

<p>
	ونتأكد من أنّ المتغير لم يعد موجودًا بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">echo $TEST_VAR
</pre>

<p>
	لن يظهر أي خرج على الشاشة لأن المتغير تمت إزالته.
</p>

<h2>
	إعداد متغيرات البيئة عند تسجيل الدخول
</h2>

<p>
	تستخدم العديد من البرامج متغيرات البيئة لتحدد بعض خصائص عملها، وبما أنّ بعض القيم مهمة فلا داعي إلى إعدادها في كل مرة يتم فيها تأسيس جلسة عمل كما أنّ بعض قيم هذه المتغيرات ترتبط بالمستخدم والذي يتم تحديده بعد تسجيل الدخول.
</p>

<h3>
	الاختلاف بين جلسات الصدفة التفاعلية وغير التفاعلية وذات تسجيل الدخول وبدون تسجيل الدخول
</h3>

<p>
	يقرأ صدفة bash العديد من ملفات الإعداد المتعلّقة ببدء الجلسة، ومن أهم الاختلافات بين الجلسات أن عملية إنشاء الصدفة تمت بتسجيل دخول login أو بدون تسجيل دخول non-login. تبدأ جلسة الصدفة مع تسجيل الدخول بمصادقة المستخدم user authentication كما يتم عند تسجيل الدخول إلى مخدم باستخدام <a href="https://academy.hsoub.com/devops/security/ssh/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%88%D8%AE%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%B9%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-ssh-r74/" rel="">بروتوكول الاتصال الآمن <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a> حيث يتم طلب اسم المستخدم وكلمة المرور أما إذا أنشأ المستخدم جلسة صدفة جديدة باستخدام الأمر <code>bash</code> كما تم في المثال السابق فإنه في هذه الحالة أنشأ جلسة صدفة دون تسجيل دخول حيث لن يُسأل المستخدم عن اسم المستخدم وكلمة المرور.
</p>

<p>
	يتم التمييز أيضًا بين الجلسات فيما إذا كانت تفاعلية Interactive أو غير تفاعلية Non-Interactive حيث أنّ الجلسة التفاعلية تتصل بموجه أوامر محدد أما جلسة الصدفة غير التفاعلية فلا تحقق ذلك. إذا تصنف كل جلسة صدفة بأنها تفاعلية أم لا وأنها تمت بتسجيل دخول أم بدونه.
</p>

<p>
	تعد جلسة الصدفة التي تبدأ عند استخدام بروتوكول <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> مثالًا على جلسة الصدفة التفاعلية التي تتم بتسجيل دخول بينما يعد تشغيل نص برمجي ما عن طريق موجه الأوامر مثالًا على جلسة صدفة غير تفاعلية بدون تسجيل دخول علمًا أن جلسة موجه الأوامر يمكن أن تكون مزيجًا من الخصائص السابقة.
</p>

<p>
	يتم في حالة جلسة الصدفة التي تتطلب تسجيل دخول قراءة الإعدادات والتفاصيل من الملف <code>/etc/profile</code> ومن ثم تبحث عن أول ملف خاص بالصدفة ضمن المجلد الأساسي الخاص بالمستخدم للحصول على أية إعدادات إضافية خاصة بالمستخدم حيث تقرأ الملف الموجود في المسار<code>‎~/.bash_profile</code> أو ضمن المسار <code>‎~/.bash_login</code> أو ضمن المسار <code>‎~/.profile</code> وفي حال لم تعثر على ملف فلن تبحث في أية مجلدات أخرى.
</p>

<p>
	أما في حالة جلسة الصدفة التي تتم دون تسجيل دخول فتتم قراءة الملف <code>‎/etc/bash.bashrc</code> ومن ثم قراءة الملف <code>‎~/.bashrc</code> الخاص بالمستخدم لبناء البيئة. أما الصدفة غير التفاعلي فيقرأ متغير البيئة <code>BASH_ENV</code> الذي يحوي مسار إلى ملف إعدادات والذي يستخدمه من أجل تعريف البيئة الجديدة.
</p>

<h3>
	صياغة متغيرات البيئة
</h3>

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

<p>
	يتيح نظام التشغيل لينكس هذا الخيار، فعندما يحتاج المستخدم إلى تعريف متغيرات بيئة خاصة بالمستخدم بحيث تكون متاحة سواء سجل المستخدم الدخول أم لا فيمكن استخدام الملف <code>‎~/.bashrc</code> والذي يمكن تعديله باستخدام محرر النصوص المتاح كما يلي:
</p>

<pre class="ipsCode">nano ~/.bashrc
</pre>

<p>
	يتضمن هذا الملف عددًا كبيرًا من المتغيرات ومعظمها يكون متعلقًا بإعدادات الصدفة bash والتي ليست متعلقة فعليًا بمتغيرات البيئة. يمكن إعداد المتغيرات كما تم إعدادها بموجه الأوامر بالشكل التالي:
</p>

<pre class="ipsCode">export VARNAME=value
</pre>

<p>
	يمكن إضافة أي متغير بيئة ضمن أي سطر في الملف <code>‎~/.bashrc</code> بشرط عدم دمجه بمتغير آخر أو كتابته ضمن حلقة تكرار موجودة مسبقًا.نحفظ الملف ونغلقه وعند بدء جلسة صدفة جديدة يتم التصريح عن متغير البيئة الجديد وقراءته وتمريره لبيئة الصدفة أما إذا رغب المستخدم بإجبار الجلسة الحالية على قراءة هذا الملف فيتم ذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">source ~/.bashrc
</pre>

<p>
	يمكن عند الحاجة لاستخدام متغيرات يمكن استخدامها ضمن نظام التشغيل كاملًا إضافتها إلى الملف <code>‎/etc/profile</code> أو <code>‎/etc/bash.bashrc</code> أو <code>‎/etc/environment</code>.
</p>

<h2>
	الخاتمة
</h2>

<p>
	توجد متغيرات الصدفة والبيئة دومًا ضمن جلسات الصدفة حيث تعد هذه المتغيرات ذات فائدة كبيرة بالنسبة للمستخدمين. يعد الاستخدام الأساسي لهذه المتغيرات أن تتحكم العملية الأب بكامل تفاصيل العمليات الأبناء لها سواء تم ذلك عن طريق الملفات أو بدونها. توجد العديد من الحالات التي يعد استخدام متغيرات البيئة ضروريًا فعلى سبيل المثال، تعتمد بعض آليات نشر وتوزيع التطبيقات على متغيرات البيئة لإعداد المصادقة authentication والاحتفاظ ببعض المعلومات الهامة حيث لا يمكن الاحتفاظ بهذه المعلومات ضمن ملفات نظرًا لحساسيتها حيث أنها قد تصبح قابلة للقراءة من قبل جهات غير مخولة بالاطلاع على المحتوى.
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-linux" rel="external nofollow">How To Read and Set Environmental and Shell Variables on Linux</a> لصاحبه Justin Ellingwood.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B3%D9%83%D8%B1%D8%A8%D8%AA%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%AF%D9%81%D8%A9-shell-scripts-r252/" rel="">مدخل إلى كتابة سكربتات الصدفة Shell Scripts؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">ما هو سطر الأوامر؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%A3%D9%87%D9%85-20-%D8%A3%D9%85%D8%B1%D8%A7-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%84%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86-r585/" rel="">أهم 20 أمرا في نظام التشغيل لينكس لجميع المستخدمين</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">697</guid><pubDate>Mon, 15 May 2023 13:00:00 +0000</pubDate></item><item><title>&#x62A;&#x62E;&#x635;&#x64A;&#x635; &#x645;&#x62D;&#x645;&#x644; &#x627;&#x644;&#x625;&#x642;&#x644;&#x627;&#x639; Grub &#x644;&#x644;&#x62D;&#x635;&#x648;&#x644; &#x639;&#x644;&#x649; &#x62A;&#x62C;&#x631;&#x628;&#x629; &#x623;&#x641;&#x636;&#x644; &#x645;&#x639; &#x646;&#x638;&#x627;&#x645; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%85%D8%AD%D9%85%D9%84-%D8%A7%D9%84%D8%A5%D9%82%D9%84%D8%A7%D8%B9-grub-%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%A3%D9%81%D8%B6%D9%84-%D9%85%D8%B9-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r696/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/--Grub-------.png.5134873926d75a57f9bbf823a8f9178d.png" /></p>
<p>
	تعرفنا في المقال <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%85%D8%AD%D9%85%D9%84-%D8%A7%D9%84%D8%A5%D9%82%D9%84%D8%A7%D8%B9-grub-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%88%D9%81%D9%8A%D9%85%D8%A7-%D9%8A%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D8%9F-r695/" rel="">ما هو محمل الإقلاع GRUB في لينكس وفيما يستخدم</a> على أداة Grub فهي أول قائمة تظهر عند بدء عمل نظام التشغيل لينكس لتعرض الخيارات المتعلّقة بالإقلاع. تتضمن هذه الخيارات أنظمة التشغيل المثبتة على الحاسب إضافة إلى خيارات الوصول إلى إعدادات UEFI وقائمة الاسترداد recovery عند حدوث خطأ ما.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/gnu_grub.PNG.bf55e6ae9e8a73117f3c18c9867b469f.PNG" data-fileid="124653" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124653" data-unique="faad2k0xc" alt="gnu_grub.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/gnu_grub.thumb.PNG.ecaa56a0089cedec9751de40c5b5f4e4.PNG"> </a>
</p>

<p>
	يمكن تخصيص العديد من قوائم الأداة Grub، كما يمكن تغيير ترتيب الإقلاع الخاص بأنظمة التشغيل وتغيير المهلة التي يتم بعدها انتقاء الاختيار الافتراضي للإقلاع وإخفاء أنظمة تشغيل محددة وحتى إخفاء شاشة الأداة Grub بالكامل وتغيير صورة الخلفية ضمن الأداة وحتى تبديل الواجهة والألوان والعديد من الخيارات الأخرى.
</p>

<p>
	يمكن تخصيص وضبط كل ما سبق بتغيير ملفات إعداد الأداة Grub الموجودة في المسار ‎/etc/default/grub و ‎/boot/grub2 في سطر الأوامر. لكن ذلك ليس سهلًا بالنسبة للعديد من مستخدمي نظام لينكس، لذلك يمكن استخدام أداة ذات واجهة رسومية مثل Grub Customizer وتغيير إعدادات الأداة Grub بسهولة.
</p>

<h2>
	تثبيت الأداة Grub Customizer ضمن نظام لينكس
</h2>

<p>
	تتوفر الأداة Grub Customizer في المخازن الرسمية للعديد من توزيعات لينكس الشهيرة. أي أنه يمكن تثبيتها بسهولة من مركز البرامج كما في الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/grub_customizer_install.PNG.1ea9f64df04489f3cc71582ef9bc7075.PNG" data-fileid="124652" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124652" data-unique="iqsino018" alt="grub_customizer_install.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/grub_customizer_install.thumb.PNG.6ab0fbf84a177cd8a8821c43618fd9ce.PNG"> </a>
</p>

<p>
	يمكن استخدام مدير الحزم الخاص بالتوزيعة المستخدمة لتثبيت هذه الأداة أيضًا. كما يمكن استخدام الأمر <a href="https://academy.hsoub.com/devops/linux/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-apt-%D8%8Cyum-%D8%8Cdnf-%D8%8Cpkg-r231/" rel="">apt</a> لتثبيت الأداة Grub Customizer ضمن أي نظام لينكس معتمد على توزيعة أوبنتو وديبيان:
</p>

<pre class="ipsCode">sudo apt install grub-customizer
</pre>

<p>
	أما في حال تم استخدام توزيعة فيدورا Fedora فيتم استخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo dnf install grub-customizer
</pre>

<p>
	وفي حال توزيعتي آرتش Arch ومانجارو Manjaro فيتم استخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo pacman -Sy grub-customizer
</pre>

<p>
	أما بالنسبة لتوزيعة أوبنتو Ubuntu إصدار 18.04 ومينت Mint إصدار 19، يجب استخدام الأداة PPA. نبدأ بتشغيل موجه الأوامر وتنفيذ ما يلي:
</p>

<pre class="ipsCode">sudo add-apt-repository ppa:danielrichter2007/grub-customizer

sudo apt update 

sudo apt install grub-customizer
</pre>

<h2>
	تخصيص الأداة Grub باستخدام أداة الواجهات الرسومية Grub Customizer
</h2>

<p>
	نبحث عن الأداة Grub Customizer بعد الانتهاء من تثبيتها ونشغّلها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/grub-customizer-ubuntu.jpg.d5eb37c61e426d4c5f18d4f95749ee0e.jpg" data-fileid="124647" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124647" data-unique="yj12rsnqb" alt="grub-customizer-ubuntu.jpg" src="https://academy.hsoub.com/uploads/monthly_2023_05/grub-customizer-ubuntu.jpg.d5eb37c61e426d4c5f18d4f95749ee0e.jpg"> </a>
</p>

<p>
	تحتاج الأداة إلى كلمة مرور لمستخدم ذي صلاحيات عالية لأنها تعدّل إعدادات مهمة خاصة بالإقلاع والتي تستدعي وجود صلاحيات مستخدم الجذر root. تظهر الواجهة الرئيسية للأداة بعد إدخال كلمة السر المناسبة.
</p>

<h3>
	تغيير ترتيب الإقلاع
</h3>

<p>
	تستخدم الأداة Grub Customizer بشكل أساسي من أجل تغيير ترتيب الإقلاع. ففي حال وجود أكثر من نظام تشغيل على الحاسب كامتلاك نسخة من نظام ويندوز Windows وتوزيعة لينكس بحيث يختار المستخدم النظام الذي يريد العمل معه عند الإقلاع أو حتى في حال وجود أكثر من <a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">توزيعة لينكس</a> على نفس الحاسب، فقد يرغب المستخدم في تغيير نظام التشغيل الافتراضي.
</p>

<p>
	نختار نظام التشغيل الذي نرغب بجعله افتراضيًا وننقله إلى أعلى القائمة،ننقر على زر الحفظ لتطبيق التعديلات. يبين الشكل التالي تحديد نظام تشغيل ويندوز ليصبح افتراضيًا عند الإقلاع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/Change_boot_order.PNG.d9d4516b835c81307436e8de0bb62e9f.PNG" data-fileid="124654" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124654" data-unique="b7xo7lwgg" alt="Change_boot_order.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/Change_boot_order.thumb.PNG.77badb32b8ecccd9ed1dab047a018c96.PNG"> </a>
</p>

<h3>
	إصلاح مشكلة إعادة التشغيل المتعددة بعد تحديث نواة نظام التشغيل
</h3>

<p>
	لا تثبت الأجهزة متعددة الإقلاع التي تستخدم نظام التشغيل ويندوز غالبًا التحديثات بشكل صحيح ما لم تتم إعادة التشغيل مباشرة في هذا النظام. يعني ذلك أنه قد يحتاج المستخدم الإقلاع وإعادة الإقلاع عدة مرات قبل أن يعود كل شيء إلى طبيعته. يمكن أن تظهر هذه المشكلة أيضًا عند استخدام <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام لينكس</a>، عندما يبدأ الجهاز بالإقلاع بواسطة نظام تشغيل خاطئ بعد عملية إعادة التشغيل، لا يتم تثبيت أحدث إصدار من نواة نظام التشغيل لينكس بشكل صحيح في بعض الأحيان.
</p>

<p>
	تقدّم الأداة Grub Customizer حلًا لهذا المشكلة. ننتقل إلى النافذة الخاصة بالإعدادات العامة "general settings" ونبحث عن خيار الإدخال الافتراضي "default entry" نبدل الخيار "predefined" إلى "previously booted entry".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/previously_booted_entry.PNG.e186b4c95518bef7b9cbffb6bb0f352c.PNG" data-fileid="124644" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124644" data-unique="gwrtraldr" alt="previously_booted_entry.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/previously_booted_entry.thumb.PNG.d4023da93f63a5d2e8ae3ad03bdb9271.PNG"> </a>
</p>

<p>
	يتم اختيار آخر نظام تشغيل تم استخدمه دومًا عند الإقلاع بعد إتمام هذا التعديل بغض النظر عن ترتيب الإقلاع المحدد ضمن الأداة Grub. لذلك بعد الانتهاء من تحديث نواة نظام التشغيل، وعند تنفيذ إعادة التشغيل سيتم دائمًا إعادة تشغيل الجهاز إلى نظام التشغيل الصحيح ولن يتلف ملف الإقلاع بسبب هذه المشكلة.
</p>

<h3>
	تغيير صورة خلفية واجهة الإقلاع Grub
</h3>

<p>
	تكون عادةً صورة الخلفية لأداة Grub عبارة عن لون أسود أو برتقالي، يستطيع المستخدم تغيير هذه الصورة بواسطة الأداة Grub Customizer. ننتقل إلى التبويب "Appearance Settings" في الشريط الجانبي الأيسر، نجد ضمنه الخيار الخاص بصورة الخلفية "background image".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/background_image.PNG.f9ed610b2d9e922c9853af8c4bf2856e.PNG" data-fileid="124655" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124655" data-ratio="66.67" data-unique="co72d6zz6" width="900" alt="background_image.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/background_image.thumb.PNG.68f8649f0f4fad1ef544c27ae18ff162.PNG"></a><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/appearance_Settings_tab.PNG.81d511019464ebd0e396adfebe8c906e.PNG" data-fileid="124656" data-fileext="PNG" rel=""> </a>
</p>

<p>
	نضغط على هذا الخيار ومن ثم نختار الصورة التي نرغب باستخدامها. نلاحظ أن الأداة تبدأ البحث انطلاقًا من مجلد الجذر، ننقل إلى الدليل الرئيسي ومن ثم إلى مكان وجود الصورة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/home_directory.PNG.0380aac435a356d1ac8fe842f8973674.PNG" data-fileid="124645" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124645" data-unique="meo0dzepk" alt="home_directory.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/home_directory.thumb.PNG.19c74b212cd483cded08d50e45c803f8.PNG"> </a>
</p>

<p>
	<strong>تحذير</strong>: قبل إجراء أي تغييرات أخرى هنا، يجب على المستخدم أن يلتقط صورة للشاشة للون النص إذا تم تغييره، فلا توجد طريقة لمعرفة لون النص الأصلي بعد الآن. هناك أيضًا خيار لتغيير الخط ولكن الأداة Grub Customizer تحذّر من استخدام هذا الخيار لهذا السبب لا يوصي أحد باستخدامه.
</p>

<p>
	يمكن أن يضطر المستخدم إلى تغيير النص ولون الخلفية لأنه قد يصبح من الصعب قراءة أسطر قائمة الأداة Grub على صورة الخلفية التي تم تغييرها. يمكن العثور على خيار تغيير النص والخلفية من أجل جميع الخيارات ضمن نفس الشريط الجانبي الذي استخدمناه قبل قليل.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/highlighted_entries.PNG.a9d9e933a22cf4e4502f465ab40827b3.PNG" data-fileid="124646" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124646" data-unique="nc8kp657m" alt="highlighted_entries.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/highlighted_entries.thumb.PNG.c6bc325283396dfe3df6fdd91c2e786c.PNG"> </a>
</p>

<p>
	نستطيع معاينة التغييرات أثناء تحديد ألوان النص، وبعد أن يختار المستخدم اللون المناسب ننقر فوق زر الحفظ save ونعيد تشغيل الحاسب. يجب أن تظهر الصورة التي تم اختيارها ضمن خلفية قائمة Grub الآن.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/Grub_load_screen.PNG.14355749fc485ebd5035030b75f514b2.PNG" data-fileid="124650" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124650" data-unique="eq51ts328" alt="Grub_load_screen.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/Grub_load_screen.thumb.PNG.e7e411b08cecff1eedc6cdf92a8d1ec2.PNG"> </a>
</p>

<h3>
	إزالة صورة خلفية واجهة الإقلاع Grub
</h3>

<p>
	يستطيع المستخدم في حالة عدم الرضا عن صورة الخلفية التي خصصها مسبقًا أن يستعيد الخلفية القديمة الخاصة بقائمة Grub عن طريق خيار مخفي ضمن قوائم الأداة.
</p>

<p>
	ننتقل إلى تبويب إعدادات المظهر "Appearance Settings" ومن ثم ننقر على خيار الإعدادات المتقدّمة "advanced settings" الكائن في الركن الأيمن السفلي. نلغي تحديد الخيار "GRUB<em>MENU</em>PICTURE" ومن ثم نحفظ التغييرات كما في الشكل التالي.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/GRUB_MENU_PICTURE_option.PNG.66932912ad1029ebdf765b2ff057870d.PNG" data-fileid="124649" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124649" data-unique="uyonjl19s" alt="GRUB_MENU_PICTURE_option.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/GRUB_MENU_PICTURE_option.thumb.PNG.735c52bd4fe83cac1a8b172472ee313d.PNG"> </a>
</p>

<h3>
	تغيير سمة الأداة Grub وإضفاء مظهر جذاب عليها
</h3>

<p>
	<strong>تحذير</strong>: تشترط الأداة Grub نوع محدد للصورة وحجم الخط والدقة وما إلى ذلك. يؤدي تغيير سمة الأداة Grub والإعدادات المتعلقة بها كثيرًا إلى الحصول على نظام تشغيل ذي ملفات إقلاع يمكن أن تتلف بسهولة، لهذا يجب أخذ <a href="https://academy.hsoub.com/apps/windows/%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%81%D9%8A-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-10-r279/" rel="">نسخة احتياطية لنظام التشغيل</a> كاملًا أو استخدام أدوات مخصصة لأخذ نسخة احتياطية لإعدادات النظام فقط وتعد الأداة Timeshift مناسبة لذلك، كما يجب أن يحتفظ المستخدم بنسخة من نظام التشغيل بحيث تكون جاهزة للإقلاع مباشرة على قرص USB خارجي لاستخدامها عند الطوارئ.
</p>

<p>
	نجد خيار السمة ضمن النافذة "Appearance Settings" في واجهة الأداة Grub Customizer، يمكن تصفح السمات القابلة للاستخدام وتفعيلها من هناك كما في الشكل التالي.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/appearance_Settings_tab.PNG.81d511019464ebd0e396adfebe8c906e.PNG" data-fileid="124656" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124656" data-unique="drxsupi9z" alt="appearance_Settings_tab.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/appearance_Settings_tab.thumb.PNG.3384dc25eeac89f871d84bf0ac514036.PNG"> </a>
</p>

<p>
	يمكن الحصول على سمات خاصة بالأداة Grub من موقع <a href="https://www.pling.com/" rel="external nofollow">Pling</a> الذي يتضمن قسمًا كاملًا مخصصًا لسمات الأداة Grub:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/Grub_themes.PNG.c2a43457ec5ffe34700a38d10ec608b1.PNG" data-fileid="124648" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124648" data-unique="t7q64gp2a" alt="Grub_themes.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/Grub_themes.thumb.PNG.66d672b84f68f82c8765a136c32fca3b.PNG"> </a>
</p>

<p>
	يمكن اتباع النصائح التالية من أجل اختيار سمات Grub مناسبة:
</p>

<ul>
	<li>
		<p>
			التأكد من أنه قد تم تحديث سمة Grub مؤخرًا ونجد هذه المعلومات على صفحة السمة.
		</p>
	</li>
	<li>
		<p>
			تقبل الأداة Grub Customizer السمات بتنسيق ‎.tar.gz فقط لذا يجب التحقق أنّ السمة متاحة بهذه اللاحقة أم لا.
		</p>
	</li>
	<li>
		<p>
			الانتباه إلى تقييم السمة حيث يشير التقييم السيء لسمة ما أن العديد من المستخدمين واجهوا مشكلة ما بسببه.
		</p>
	</li>
	<li>
		<p>
			قراءة الوصف المرفق بالسمة للحصول على معلومات وإرشادات إضافية.
		</p>
	</li>
	<li>
		<p>
			قراءة التعليقات الأخيرة المتعلقة بالسمة لمعرفة ما إذا صادف مستخدم ما أخطاء أو مشاكل عند استخدامها.
		</p>
	</li>
</ul>

<p>
	انتبه، يتم إنشاء بعض السمات لتوزيعات محددة، ولن تعمل بعض السمات على بعض التوزيعات حتى لو لم يظهر أي خطأ أو تحذير.
</p>

<p>
	عند الانتقال إلى مكان حفظ ملفات سمة الأداة Grub التي تم تنزيلها، نجد محتوياتها ضمن نافذة الأداة Grub Customizer والتي تتيح للمستخدم تعديل إعدادات الأداة Grub وذلك بالطبع إن كان المستخدم متمكنًا من ذلك، مما يتيح له تعديل الملفات وتخصيصها بشكل أكبر ولكن عادة لا يحتاج المستخدم إلى مثل هذا التعديل. يوجد خيار حذف السمة في نفس المكان الذي أضفتها فيه في حال رغبة المستخدم بالتخلص من السمة لسبب ما.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/Grub_Customizer_window.PNG.6167d94894555ea6bb7708fd66554eee.PNG" data-fileid="124651" data-fileext="PNG" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="124651" data-unique="ngulnl2jf" alt="Grub_Customizer_window.PNG" src="https://academy.hsoub.com/uploads/monthly_2023_05/Grub_Customizer_window.thumb.PNG.c20d6321beadd2575873538e3a12ee80.PNG"> </a>
</p>

<h2>
	هل يجب تخصيص الأداة Grub؟
</h2>

<p>
	شخصيًا لا نفضل تخصيص مظهر شاشة Grub ومع ذلك يمكن تغيير المهلة الافتراضية لانتقاء نظام التشغيل من 10 ثوانٍ إلى ثانيتين أو 3 ثوانٍ في حال وجود أكثر من نظام تشغيل مما يسرّع عملية الإقلاع وخصوصًا عندما لا يكون المستخدم قريبًا للضغط على مفتاح لاختيار نظام التشغيل.
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://itsfoss.com/customize-grub-linux/" rel="external nofollow">Customize Grub to Get a Better Experience With Linux</a> لصاحبه Abhishek Prakash.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%A6%D9%8A-%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r48/" rel="">الدليل النهائي لاختيار توزيعة لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%85%D8%B9-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-r576/" rel="">تثبيت لينكس مع نظام ويندوز</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%A8%D8%B3%D8%B7-%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-r575/" rel="">كيفية تثبيت توزيعة أوبنتو من لينكس بأبسط طريقة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">696</guid><pubDate>Sat, 06 May 2023 13:00:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x648; &#x645;&#x62D;&#x645;&#x644; &#x627;&#x644;&#x625;&#x642;&#x644;&#x627;&#x639; GRUB &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633; &#x648;&#x641;&#x64A;&#x645;&#x627; &#x64A;&#x633;&#x62A;&#x62E;&#x62F;&#x645;&#x61F;</title><link>https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%85%D8%AD%D9%85%D9%84-%D8%A7%D9%84%D8%A5%D9%82%D9%84%D8%A7%D8%B9-grub-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%88%D9%81%D9%8A%D9%85%D8%A7-%D9%8A%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D8%9F-r695/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_04/----Grub------.png.15612fdfd056954d0cb7d918f0a79a4b.png" /></p>
<p>
	لا بدّ أنّ أي مستخدم لنظام التشغيل لينكس قد شاهد مثل هذه الشاشة عند بدء عمل حاسبه، فهذه الشاشة هي شاشة GRUB الأساسية في نظام لينكس.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124034" href="https://academy.hsoub.com/uploads/monthly_2023_04/grub-screen-linux.png.7fc0956d374b77dc2cb04e1af3c72f6b.png" rel=""><img alt="grub-screen-linux.png" class="ipsImage ipsImage_thumbnailed" data-fileid="124034" data-unique="rbvmh3yek" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/grub-screen-linux.png.7fc0956d374b77dc2cb04e1af3c72f6b.png"> </a>
</p>

<p>
	نتعرف في هذا المقال على ماهية هذه الأداة واستخداماتها إضافة إلى الحديث عن إعدادها وتخصيصها بما يناسب المستخدم.
</p>

<h2>
	ما هي الأداة GRUB؟
</h2>

<p>
	تعد الأداة <a href="https://www.gnu.org/software/grub/" rel="external nofollow">GRUB</a> برنامجًا متكاملًا لتحميل وإدارة عملية الإقلاع وتعد هذه الأداة شائعة الاستخدام مع <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%A6%D9%8A-%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r48/" rel="">توزيعات لينكس</a> المختلفة. نعرّف برنامج محمل الإقلاع bootloader على أنّه أول برنامج يعمل عند إقلاع الحاسب، إذ يحمّل نواة <a href="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/" rel="">نظام التشغيل</a> في الذاكرة ومن ثم تهيئ النواة مكونات نظام التشغيل للعمل مثل: الصدفة Shell ومدير الإظهار وبيئة سطح المكتب وغيرها.
</p>

<h3>
	محمل الإقلاع أم مدير الإقلاع
</h3>

<p>
	يحصل الكثير من اللغط عند الحديث عن محمل الإقلاع ومدير الإقلاع boot manager، فالأول قد تم تعريفه في الفقرة السابقة أما الثاني فهو برمجية تسمح لك باختيار واحد من أنظمة التشغيل المتاحة ضمن حاسبك عند الإقلاع. يمكن للمستخدم أن يمتلك نسخة من نظام التشغيل Windows ونسخة أخرى من <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام التشغيل لينكس</a> وهنا يأتي دور مدير الإقلاع لإعطاء الخيار للمستخدم حول نظام التشغيل الذي يرغب بإقلاعه.
</p>

<p>
	تتضمن جميع توزيعات لينكس انطلاقًا من إصدار النواة رقم 3.3 محمل إقلاع EFI مدمج وفي الحقيقة يجب أن يتضمن أي نظام تشغيل قادر على العمل مع نظام EFI محمل إقلاع مناسب، حيث تتم قراءة جزء نظام EFI والتي يرمز لها بـ ESP اختصارًا إلى EFI System Partition لتحديد موقع ملفات EFI والتي تتضمن معلومات الإقلاع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124033" href="https://academy.hsoub.com/uploads/monthly_2023_04/disk-partition-gparted.png.1fdf4a9a3a849ce8710e775c76bdd76f.png" rel=""><img alt="disk-partition-gparted.png" class="ipsImage ipsImage_thumbnailed" data-fileid="124033" data-unique="9wxud59ai" style="width: 680px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/disk-partition-gparted.png.1fdf4a9a3a849ce8710e775c76bdd76f.png"> </a>
</p>

<p>
	فالأداة GRUB تنفذ الوظيفتين السابقتين معًا على الرغم مما يوحي اسمها فهذه الأحرف هي اختصار لـ GRand Unified Bootloader.
</p>

<h2>
	ما الذي تعنيه الأسطر الظاهرة ضمن شاشة GRUB؟
</h2>

<p>
	تختلف الأسطر الظاهرة ضمن الشاشة بين توزيعات لينكس وبين طرق الإعداد المختلفة التي يمكن استخدامها، نجد عادة اسم توزيعة لينكس ضمن السطر الأول كما يمكن أن نجد قائمة الخيارات المتقدمة وعند الدخول إليها نلاحظ مجموعة من الأسطر والتي تبدأ بعبارة مشابهة لـ linux-generic-x-y-z.
</p>

<p>
	من المزايا المفيدة أنّ نظام لينكس يحتفظ بإصدار واحد أقدم عندما يُحدَّث إصدار نواة نظام التشغيل. لهذا نستطيع اختيار أي نسخة نريد الإقلاع منها. ينقذ هذا الإجراء المستخدمين عندما تظهر مشاكل في النسخة الحديثة حيث يستطيعون متابعة أعمالهم دون انقطاع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="124027" href="https://academy.hsoub.com/uploads/monthly_2023_04/boot-into-recovery-mode-ubuntu-1.jpg.b02b4c8167ed781a97dcff8f4e4fd27a.jpg" rel=""><img alt="boot-into-recovery-mode-ubuntu-1.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="124027" data-unique="h8m8ookj3" src="https://academy.hsoub.com/uploads/monthly_2023_04/boot-into-recovery-mode-ubuntu-1.jpg.b02b4c8167ed781a97dcff8f4e4fd27a.jpg"> </a>
</p>

<p>
	يمكن أن نشاهد في نهاية القائمة سطرًا خاصا بإعداد النظام أو إعدادات UEFI وذلك للوصول إلى نظام BIOS الخاص بالحاسوب.
</p>

<h2>
	برامج أخرى تدير عملية الإقلاع
</h2>

<p>
	تعد أداة GRUB الأكثر شيوعًا ضمن توزيعات لينكس ولكنها ليست الوحيدة. إذ تعد الأداة rEFInd إحدى الأدوات المعروفة بين مستخدمي أنظمة لينكس. تتميز هذه الأداة بأنها قابلة للتخصيص بشكل كبير كما أنها تمتلك واجهات أجمل من تلك المستخدمة ضمن الأداة GRUB. توجد العديد من الميزات الأخرى منها ما يتعلق بالأمان والأداء ولكن تبقى الأداة GRUB متفوقة بالعديد من النواحي وأهمها أنها متاحة بشكل مباشر ضمن توزيعات لينكس بينما تحتاج الأداة rEDInd إلى دعم من جهة ثالثة Third-Party Support لتعمل بشكل صحيح.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124031" href="https://academy.hsoub.com/uploads/monthly_2023_04/refind-boot-manager.png.aac474c3bd129e72f8302af12184b688.png" rel=""><img alt="refind-boot-manager.png" class="ipsImage ipsImage_thumbnailed" data-fileid="124031" data-unique="oxfzho9ki" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/refind-boot-manager.thumb.png.76615d5dde7d8ced407303ba9463bb55.png"> </a>
</p>

<p>
	يوجد أيضًا مدير إقلاع نصي اسمه systemd-boot المعد خصيصًا لنظام تشغيل لينكس، نجد مدير الإقلاع هذا ضمن بعض توزيعات لينكس مثل Pop OS.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124028" href="https://academy.hsoub.com/uploads/monthly_2023_04/systemd-boot.png.ade016204c226f5447d363e30b8bd3ab.png" rel=""><img alt="systemd-boot.png" class="ipsImage ipsImage_thumbnailed" data-fileid="124028" data-unique="xycgxh809" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/systemd-boot.png.ade016204c226f5447d363e30b8bd3ab.png"> </a>
</p>

<h2>
	التعديل المباشر على عناصر GRUB
</h2>

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

<p>
	توجد العديد من الخيارات إضافة إلى تحديد نظام التشغيل الذي نريد الإقلاع منه، فعلى سبيل المثال يمكن أن نختار تعديل بعض المتغيرات الخاصة بنواة نظام التشغيل قبل بدء الإقلاع. من الممكن أن نعطّل التعريفات الخاصة بالإظهار في حال سببت مشكلة ما لنستطيع النفاذ إلى الحاسب وحل هذه المشكلة. يتم تحرير القائمة بالضغط على الحرف "e".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="124032" href="https://academy.hsoub.com/uploads/monthly_2023_04/editing-grub-to-fix-nvidia-issue.jpg.55ffdfb8f29fedc7432fd7e246eb412e.jpg" rel=""><img alt="editing-grub-to-fix-nvidia-issue.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="124032" data-unique="41giqntmk" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/editing-grub-to-fix-nvidia-issue.thumb.jpg.17af37fb2fb8a325e7cf01f036874d7b.jpg"> </a>
</p>

<p>
	كما يمكن الضغط على الحرف "c" للدخول إلى قائمة موجّه الأوامر الخاصة بالأداة GRUB من القائمة السابقة.
</p>

<h2>
	ملف الإعداد الخاص بالأداة GRUB
</h2>

<p>
	تكون التعديلات على قوائم الأداة GRUB مؤقتة فإذا أردنا أن تصبح دائمة فيجب تعديل ملف الإعداد الخاص بالأداة وذلك بعد إقلاع نظام التشغيل. نجد في نظام لينكس ملف الإعداد الخاص بالأداة GRUB ضمن المسار ‎/etc/default/grub وتجدر الإشارة إلى وجود مجلد أيضًا خاص بالأداة ضمن المسار ‎/etc/default/grub.d. يمكن التعديل على الملف مباشرة إلا أن ما ينصح به المختصون أن ننشئ ملفات إعداد إضافية ضمن المجلد والتي يكون لها اللاحقة ‎.cfg وتعديلها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124030" href="https://academy.hsoub.com/uploads/monthly_2023_04/default-grub-config-file.png.4cd6df58ed6decf06dfc73a39b6ca2f7.png" rel=""><img alt="default-grub-config-file.png" class="ipsImage ipsImage_thumbnailed" data-fileid="124030" data-unique="asqia50wk" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/default-grub-config-file.png.4cd6df58ed6decf06dfc73a39b6ca2f7.png"> </a>
</p>

<p>
	يجب بعد إتمام التعديلات أن نطلب من محمل الإقلاع أن يقرأ الملف الجديد، لكن هذا يحدث تلقائيًا بعد عملية تثبيت نظام تشغيل لينكس جديد إلى جانب نظام موجود حيث سيحدث محتوى الملف بشكل تلقائي بمعلومات النظام الجديد.
</p>

<h2>
	أداة تخصيص الأداة GRUB
</h2>

<p>
	يتخوف الكثير من المستخدمين وتحديدًا غير المختصين منهم من استخدام الأدوات النصية في تعديل الملفات الحساسة مثل تلك الخاصة بالإقلاع. تحل هذه المشكلة باستخدام الأداة الرسومية GRUB Customizer والتي تتيح تغيير ترتيب الإقلاع والعديد من المتغيرات المهمة وحتى يمكنها تغيير صورة الخلفية الخاصة بالأداة GRUB إذا رغب المستخدم بذلك.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpeg" data-fileid="124035" href="https://academy.hsoub.com/uploads/monthly_2023_04/make-windows-default-grub-2.jpeg.d1a819692b2c796daebdc92345b461a8.jpeg" rel=""><img alt="make-windows-default-grub-2.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="124035" data-unique="k1e6dx755" src="https://academy.hsoub.com/uploads/monthly_2023_04/make-windows-default-grub-2.jpeg.d1a819692b2c796daebdc92345b461a8.jpeg"> </a>
</p>

<h2>
	الخاتمة
</h2>

<p>
	تضمن هذا المقال تعريفًا عامًا للأداة GRUB وعملية تحميل الإقلاع وإدارته، في الحقيقة تحتوي هذه الأداة العديد من الخيارات المعقدة والتي نتركها إلى مقالة تفصيلية أخرى. يمكن عند الرغبة باكتساب معلومات تفصيلية عن هذه الأداة مراجعة التوثيق الرسمي لها ضمن موجه الأوامر الخاص بنظام لينكس عبر تنفيذ الأمر <code>info grub</code> ليظهر خرج مشابه للشكل التالي
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124029" href="https://academy.hsoub.com/uploads/monthly_2023_04/grub-manual-Linux-terminal.png.c030083588174052658608723ee651ba.png" rel=""><img alt="grub-manual-Linux-terminal.png" class="ipsImage ipsImage_thumbnailed" data-fileid="124029" data-unique="0x0c3gadh" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2023_04/grub-manual-Linux-terminal.png.c030083588174052658608723ee651ba.png"> </a>
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://itsfoss.com/what-is-grub/" rel="external nofollow">?Linux Jargon Buster: What is Grub in Linux? What is it Used for</a> لصاحبه <a href="https://itsfoss.com/author/abhishek/" rel="external nofollow">Abhishek Prakash</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%85%D8%AD%D9%85%D9%84-%D8%A7%D9%84%D8%A5%D9%82%D9%84%D8%A7%D8%B9-grub-%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%A3%D9%81%D8%B6%D9%84-%D9%85%D8%B9-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r696/" rel="">تخصيص محمل الإقلاع Grub للحصول على تجربة أفضل مع نظام لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">ما هو نظام التشغيل لينكس؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A2%D8%B1%D8%AA%D8%B4-arch-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r633/" rel="">كيفية تثبيت توزيعة آرتش Arch من لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">695</guid><pubDate>Mon, 01 May 2023 17:03:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x642;&#x633;&#x64A;&#x645; &#x627;&#x644;&#x623;&#x642;&#x631;&#x627;&#x635; &#x639;&#x644;&#x649; &#x646;&#x638;&#x627;&#x645; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%82%D8%B3%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D9%82%D8%B1%D8%A7%D8%B5-%D8%B9%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r686/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/745577586_------.jpg.cd40ac9fa1f6ee70029192d332fb36a9.jpg" /></p>
<p>
	عند شراءك لخادم وهمي خاص VPS ضمن مزودات مثل ديجيتال أوشن DigitalOcean أو OVH قد تحتاج لتخصيص طريقة التقسيم لها، ستختار عادة نظام التشغيل الذي تود استخدامه فقط وسيتم تثبيته على قسم واحد يأخذ مساحة القرص المتوفرة بالكامل، من غير الضروري الالتزام باستخدام <a href="https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%B0%D9%91%D8%A7%D9%83%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%87%D9%85%D9%8A%D9%91%D8%A9-%D9%85%D9%84%D9%81%D9%91%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%A8%D8%A7%D8%AF%D9%84-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%AE%D8%A7%D8%B5-%D9%88%D9%87%D9%85%D9%8A%D9%91-vps-r34/" rel="">خوادم ويب VPS</a> تحوي قسمًا واحدًا فقط، بل يمكن تخصيص الأقسام وإضافة <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D8%B1%D8%B5-swap-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r230/" rel="">قسم تبادل swap</a> وقسم آخر للبيانات الخاصة بنا حسب ما نريد.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119405" href="https://academy.hsoub.com/uploads/monthly_2023_02/partition-vps-server.png.9e9a907195ae74c482db835eddba7f8b.png" rel=""><img alt="قسم خادم VPS" class="ipsImage ipsImage_thumbnailed" data-fileid="119405" data-ratio="56.33" data-unique="etulrdlc4" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/partition-vps-server.png.9e9a907195ae74c482db835eddba7f8b.png"> </a>
</p>

<p>
	توفر عدة مزودات وضعًا للإنقاذ rescue mode وهو <a href="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/" rel="">نظام تشغيل</a> بديل على قرص صلب منفصل يمكننا من خلاله تعديل نظام التشغيل والقرص الصلب الرئيسيان، في هذا المقال سنعتبر أن القسم الموجود من أحد الأنواع <a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-ext4-r343/" rel="">Ext4 أو Ext3 أو Ext2</a> وهي الحالة الافتراضية عند تثبيت نظام ديبيان أو أوبنتو، ويجب تنفيذ الخطوات ضمن هذا المقال من وضع الإنقاذ فقط وليس من داخل النظام، لذا تأكد بدايةً أن مزود VPS الخاص بك يوفر طرفية بوضع الوصول هذا.
</p>

<p>
	عملية تعديل حجم نظام الملفات والتقسيم لا تمسح البيانات الموجودة سابقًا، وذلك في حال كان القياس الجديد أكبر من حجم تلك البيانات، مع ذلك يفضل إجراء <a href="https://academy.hsoub.com/apps/general/%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%88%D8%AD%D9%81%D8%B8-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A7%D9%84%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-r375/" rel="">نسخ احتياطي</a> على قرص أو جهاز أو <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">خادم</a> خارجي، وسنفرض أننا نريد تقليص حجم القسم من 40 جيجابايت إلى 2 جيجابايت (بفرض البدء من بداية القرص) وذلك لإنشاء أقسام إضافية بعده.
</p>

<h2>
	الخطوة الأولى: الدخول إلى وضع الإنقاذ rescue mode وتحديد القرص
</h2>

<p>
	أول خطوة سنقوم بها هي إعادة التشغيل والدخول إلى وضع الإنقاذ، والذي يكون عادة بأحد أنظمة جنو لينكس مثل ديبيان، حيث سيتم إعطاءنا كلمة سر مؤقتة للمستخدم الجذر root لهذا النظام، وندخل إليه عبر <a href="https://academy.hsoub.com/devops/security/ssh/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D8%AE%D8%A7%D8%AF%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%B9%D8%A8%D8%B1-ssh-r397/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr></a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119410" href="https://academy.hsoub.com/uploads/monthly_2023_02/ssh-rescue.png.159db49a02cf81bdbe928317bb3599fe.png" rel=""><img alt="الدخول إلى وضع الإنقاذ rescue mode وتحديد القرص" class="ipsImage ipsImage_thumbnailed" data-fileid="119410" data-ratio="41.19" data-unique="ryntyec1c" style="width: 556px; height: auto;" width="556" src="https://academy.hsoub.com/uploads/monthly_2023_02/ssh-rescue.png.159db49a02cf81bdbe928317bb3599fe.png"> </a>
</p>

<p>
	بعدها نحدد القرص المٌستخدم من قبل النظام الأساسي باستخدام الأمر <code>fdisk -l</code>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119402" href="https://academy.hsoub.com/uploads/monthly_2023_02/fdisk.png.2900b9b5c6f918eed565790f74d07391.png" rel=""><img alt="تحديد القرص المٌستخدم من قبل النظام الأساسي باستخدام الأمر fdisk -l" class="ipsImage ipsImage_thumbnailed" data-fileid="119402" data-ratio="87.14" data-unique="1z2mop8wl" style="width: 420px; height: auto;" width="420" src="https://academy.hsoub.com/uploads/monthly_2023_02/fdisk.png.2900b9b5c6f918eed565790f74d07391.png"> </a>
</p>

<p>
	في حالتنا القرص <code>‎/dev/sdb</code> هو الذي نريد تعديل مخطط تقسيمه والقسم <code>‎/dev/sdb1</code> هو الوحيد لدينا حاليًا، والقرص <code>‎/dev/sda</code> هو المكان المٌثبت عليه نظام وضع الإنقاذ، وفي حال كان اسم القرص للقسم لديك مختلفًا عن <code>sdb1</code> يمكنك تبديله خلال تطبيقك للخطوات التالية ضمن المقال.
</p>

<h2>
	الخطوة الثانية: تقليص نظام الملفات
</h2>

<p>
	يمكن تنفيذ الأمر <code>e2fsck -f /dev/sdb1</code> للتحقق من نظام الملفات أولًا، وإلا لن يعمل الأمر <code>resize2fs</code> عند تنفيذه لاحقًا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119401" href="https://academy.hsoub.com/uploads/monthly_2023_02/e2fsck.png.d65fa22e42655e63e3c1788b784302db.png" rel=""><img alt="تقليص نظام الملفات" class="ipsImage ipsImage_thumbnailed" data-fileid="119401" data-ratio="25.98" data-unique="w84so6jfa" style="width: 535px; height: auto;" width="535" src="https://academy.hsoub.com/uploads/monthly_2023_02/e2fsck.png.d65fa22e42655e63e3c1788b784302db.png"> </a>
</p>

<p>
	غالبًا يأتي الأمران <code>e2fsck</code> و <code>resize2fs</code> مثبتان مسبقًا ضمن نظام الإنقاذ، وفي حال لم يكونا كذلك يمكن تثبيت حزمة e2fsprogs على ديبيان بتنفيذ الأمر <code>apt install e2fsprogs</code> ويجب التأكد أيضًا أن حجم نظام الملفات لا يتجاوز 2 جيجابايت، وبفرض أن <code>‎/mnt</code> فارغ يمكننا تركيب نظام الملفات باستخدام الأمر <code>mount /dev/sdb1 /mnt</code> والتحقق من حجمه باستخدام الأمر <code>df</code>:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119400" href="https://academy.hsoub.com/uploads/monthly_2023_02/df.png.098c5dac838814edaa33d655767c27c3.png" rel=""><img alt="كيفية تقليص نظام الملفات" class="ipsImage ipsImage_thumbnailed" data-fileid="119400" data-ratio="45.38" data-unique="bo9c78pbb" style="width: 368px; height: auto;" width="368" src="https://academy.hsoub.com/uploads/monthly_2023_02/df.png.098c5dac838814edaa33d655767c27c3.png"> </a>
</p>

<p>
	بعدها يمكن إلغاء تركيب نظام الملفات بتنفيذ الأمر <code>umount /dev/sdb1</code>، وقبل تنفيذ بقية الأوامر وفي حال أجرينا أي تخصيصات على نظام التشغيل أو أضفنا أي بيانات هامة يفضل عندها إجراء نسخ احتياطي لتلك الملفات، بعدها يمكن تنفيذ الأمر التالي <code>resize2fs /dev/sdb1 2G</code>، حيث تشير الوحدة 2G إلى الحجم 2 جيجابايت، يمكننا كتابتها بوحدة الميجابايت كالتالي: 2048M.
</p>

<p>
	في الصورة التالية تم تنفيذ الأمر <code>resize2fs</code> على اعتبار أن عدد القطاعات المُمرر سيُفهم على أنه 2000M أي 2000 ميجابايت، وبحساب تلك المساحة على أن كل قطاع لديه الحجم 512 بايت، سينتج لدينا عدد القطاعات التالي 4194304 والذي يساوي 2 جيجابايت، حيث يمكن استخدام الطريقتين والحصول على النتيجة نفسها:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119409" href="https://academy.hsoub.com/uploads/monthly_2023_02/resize2fs.png.d3323ceeea3600d143d8934da2901783.png" rel=""><img alt="نتيجة تقليص نظام الملفات" class="ipsImage ipsImage_thumbnailed" data-fileid="119409" data-ratio="22.20" data-unique="nsuh9anp5" style="width: 419px; height: auto;" width="419" src="https://academy.hsoub.com/uploads/monthly_2023_02/resize2fs.png.d3323ceeea3600d143d8934da2901783.png"> </a>
</p>

<p>
	التقرير ضمن خرج تنفيذ الأمر السابق يخبرنا بتعديل حجم القسم إلى 524288 كتلة كل منها بحجم 4 كيلوبايت، وبحساب الحجم الكلي لها ‎524288 * 4096 بايت = 2 جيجابايت، وهي النتيجة المطلوبة، حيث أن 4 كيلوبايت هو حجم الكتلة الواحدة على مستوى نظام الملفات، بينما الحجم 512 بايت هو حجم القطاع الواحد على مستوى القرص، ويمكننا التأكد أن الحجم هو 512 بايت من خرج الأمر <code>fdisk</code> الذي نفذناه سابقًا.
</p>

<h2>
	الخطوة الثالثة: تقليص حجم القسم
</h2>

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

<p>
	يمكن الاستفادة من الأمر <code>parted</code> لإدارة الأقسام في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">لينكس</a>، حيث يمكن تثبيته على ديبيان بتنفيذ الأمر <code>apt install parted</code>، ويمكن استخدام هذه الأداة تفاعليًا، حيث يمكن تنفيذ الأمر بتمرير المسار <code>‎/dev/sdb</code> كمعامل له:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119403" href="https://academy.hsoub.com/uploads/monthly_2023_02/launch-parted.png.b545da569fb715077b30a25d338c91cb.png" rel=""><img alt="تقليص حجم القسم" class="ipsImage ipsImage_thumbnailed" data-fileid="119403" data-ratio="18.31" data-unique="itfrq5d99" style="width: 437px; height: auto;" width="437" src="https://academy.hsoub.com/uploads/monthly_2023_02/launch-parted.png.b545da569fb715077b30a25d338c91cb.png"> </a>
</p>

<p>
	يمكن استخدام الأمر unit <code>s</code> ليتم إظهار كافة الحجوم بعدد القطاعات داخلها بدلًا من وحدات الحجم مثل ميجابايت MiB أو جيجابايت GiB، وذلك للتحكم بالحجم بأكبر دقة ممكنة، وإلا سنواجه مشاكل مثل ظهور الرسالة التالية التي تعني أن الحجم المحدد لا يقدم أفضل أداء:
</p>

<pre class="ipsCode">"The resulting partition is not properly aligned for best performance" 
</pre>

<p>
	ويمكن الاستفادة من الأمر <code>print free</code> لمعرفة حالة القرص:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119407" href="https://academy.hsoub.com/uploads/monthly_2023_02/print-parted.png.f0b94be1525a0031f5ddd8006c9a2997.png" rel=""><img alt="كيفية تقليص حجم القسم في لينكس" class="ipsImage ipsImage_thumbnailed" data-fileid="119407" data-ratio="44.47" data-unique="mbc1mi9wg" style="width: 479px; height: auto;" width="479" src="https://academy.hsoub.com/uploads/monthly_2023_02/print-parted.png.f0b94be1525a0031f5ddd8006c9a2997.png"> </a>
</p>

<p>
	إذا أردنا تحديد حجم القسم رقم 1 إلى 2 جيجابايت ما يعادل عدد القطاعات التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_2891_31" style=""><span class="lit">2</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">1024</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">1024</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">1024</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">512</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4194304</span></pre>

<p>
	وننفذ الأمر <code>resizepart 1</code> بعدها سيتنظر منا الأمر تحديد إحداثيات النهاية للقسم على القرص مُعبَّرًا عنها بعدد القطاعات منذ بداية القرص، وبما أنه يوجد منطقة محجوزة قبل القسم تنتهي عند القطاع رقم 2047 يجب إضافة هذا الحجم إلى حجم القسم الحالي 4194304 + 2047 = 4196351s، ومن المهم إضافة اللاحقة <code>s</code> لنهاية القيمة، بعدها نجيب بنعم Yes بعد الرسالة التحذيرية، ثم ننفذ الأمر <code>print free</code> للتأكد من تغيير حجم القسم.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119408" href="https://academy.hsoub.com/uploads/monthly_2023_02/resize-parted.png.3d25a86fc760228abfc5efc89fc28b50.png" rel=""><img alt="تنفيذ الأمر print free للتأكد من تغيير حجم القسم" class="ipsImage ipsImage_thumbnailed" data-fileid="119408" data-ratio="42.93" data-unique="dn5ctptjz" style="width: 608px; height: auto;" width="608" src="https://academy.hsoub.com/uploads/monthly_2023_02/resize-parted.png.3d25a86fc760228abfc5efc89fc28b50.png"> </a>
</p>

<p>
	قد يتم إعادة القسم إلى حالته التي كان عليها قبل القيام بهذه الإعدادات في حال أعدنا التشغيل الآن، لذا للتحقق من التغييرات يفضل إضافة قسم آخر في المساحة الخالية المتبقية قبل الخروج وإعادة التشغيل.
</p>

<h2>
	الخطوة الرابعة: إضافة أقسام أخرى
</h2>

<p>
	بفرض نريد إضافة قسم بحجم 12 جيجابايت ومن نوع Ext4 بعد القسم المخصص لنظام التشغيل مباشرةً، فيجب تعريف ذلك القسم أولًا، وذلك بإضافة سجل ضمن جدول التقسيم في مكان ما داخل المنطقة المحجوزة، نستخدم لذلك الأمر <code>mkpart primary ext4</code>:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="119404" href="https://academy.hsoub.com/uploads/monthly_2023_02/mkpart-parted.png.43ca44f65e73c62095ef836d5e1b82a7.png" rel=""><img alt="إضافة أقسام أخرى لنظام التشغيل" class="ipsImage ipsImage_thumbnailed" data-fileid="119404" data-ratio="47.18" data-unique="g63ttr3q2" style="width: 479px; height: auto;" width="479" src="https://academy.hsoub.com/uploads/monthly_2023_02/mkpart-parted.png.43ca44f65e73c62095ef836d5e1b82a7.png"> </a>
</p>

<p>
	كما في المثال السابق يمكننا تحديد مكان بدء القسم بعد قطّاع واحد من نهاية القسم الذي يسبقه كي لا نهدر أي مساحة بين القسمين، حيث يكون عنوان البداية هو 4196351 + 1 = 4196352s، وعنوان النهاية بعد 12 * 1024 * 1024 * 1024 / 512 قطاعًا وهو حجم القسم بالكامل ونضيف إليه عدد قطاعات الأقسام التي تسبقه + 4196351 قطاعًا نحصل على = 29362175s قطاع.
</p>

<p>
	الآن يمكننا الخروج من parted بالضغط على Ctrl + D ثم إنشاء نظام ملفات من النوع Ext4 على sdb2، ولتطبيق إعدادات Ext4 الافتراضية ننفذ الأمر الآتي:
</p>

<pre class="ipsCode" id="ips_uid_6186_8"> mkfs.ext4 /dev/sdb2</pre>

<h2>
	خاتمة
</h2>

<p>
	أجرينا في هذا المقال تعديلًا على التقسيم لنظام الملفات عبر <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر الأوامر</a>، وركزنا على الحالة التي يحتوي فيها الخادم على قسم كبير واحد افتراضيًا ونريد تقسيمه.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/change-partition-scheme-vps-server/" rel="external nofollow">How to Change the Partition Scheme on Your Linux Server?‎</a> لفئة من المؤلفين.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-ext4-r343/" rel="">مقدمة إلى نظام ملفات لينكس EXT4</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D8%B1%D8%B5-swap-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r230/" rel="">كيفية إضافة قرص Swap على أوبنتو</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%B0%D9%91%D8%A7%D9%83%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%87%D9%85%D9%8A%D9%91%D8%A9-%D9%85%D9%84%D9%81%D9%91%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%A8%D8%A7%D8%AF%D9%84-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%AE%D8%A7%D8%B5-%D9%88%D9%87%D9%85%D9%8A%D9%91-vps-r34/" rel="">إعداد الذاكرة الوهمية (ملفّات التبادل) على خادوم خاص وهمي (VPS)</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">686</guid><pubDate>Wed, 01 Mar 2023 17:00:00 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x625;&#x62F;&#x627;&#x631;&#x629; &#x627;&#x644;&#x62D;&#x62C;&#x648;&#x645; &#x627;&#x644;&#x645;&#x646;&#x637;&#x642;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; LVM &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%AC%D9%88%D9%85-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-lvm-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r685/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/602662774_-----LVM--.jpg.7bd52d8a2bd58a39fc34e9c23d2225d4.jpg" /></p>
<p>
	سنقدم في هذا المقال دليلًا شاملًا لإدارة الحجوم المنطقية LVM في لينكس، حيث سنتعرف على فكرة <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%AF%D9%8A%D8%B1-%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%91%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D9%91%D8%A9-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lvm-r333/" rel="">LVM</a> ومكوناتها والفائدة من تطبيقها، وسنغطي الجانبين النظري والعملي عبر أمثلة عن إنشاء وإدارة الحجوم المنطقية في لينكس، حيث سيكون لديك في نهاية هذا المقال المعلومات الكافية للتطبيق العملي على الحجوم المنطقية.
</p>

<h2>
	ما هي إدارة الحجوم المنطقية LVM في لينكس
</h2>

<p>
	LVM هي اختصار لإدارة الحجوم المنطقية أو Logical Volume Management، وهي طريقة بديلة لإدارة أنظمة التخزين عن الطرق التقليدية المُعتمدة على التقسيم، فبدلًا من إنشاء الأقسام على الأقراص يمكن بسهولة إنشاء حجوم منطقية وتركيبها على نظام الملفات كما نفعل عند تقسيم القرص، لكن الاستثناء الوحيد على ذلك هو عدم إمكانية تركيب تلك الأحجام المنطقية على المسار <code>‎/boot</code> واعتماد أحدها كقرص إقلاع، وذلك لأن محمل الإقلاع GRUB الشائع استخدامه في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">لينكس</a> لا يدعم قراءة الحجوم المنطقية، ومحمل الإقلاع البديل له systemd-boot لن نتمكن من استخدامه أيضًا لأنه يدعم قراءة أنظمة الملفات من النوع vfat فقط.
</p>

<h3>
	مكونات LVM
</h3>

<p>
	يوجد ثلاث مكونات رئيسية ضمن LVM:
</p>

<ol>
	<li>
		الحجوم الفيزيائية
	</li>
	<li>
		مجموعات الحجوم
	</li>
	<li>
		الحجوم المنطقية
	</li>
</ol>

<p>
	اثنان فقط من تلك المكونات يقابلها نظير في نظام التقسيم التقليدي، الجدول التالي يوضح هذا التقابل:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				نظام تقسيم القرص
			</th>
			<th>
				LVM
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				الأقسام
			</td>
			<td>
				الحجوم المنطقية
			</td>
		</tr>
		<tr>
			<td>
				الأقراص
			</td>
			<td>
				مجموعات الحجوم
			</td>
		</tr>
	</tbody>
</table>

<p>
	أما الحجوم الفيزيائية فليس لها نظير مقابل وسنتحدث عنها.
</p>

<h3>
	لماذا نستخدم LVM؟
</h3>

<p>
	الميزة الأساسية من استخدام LVM هي سهولة تغيير حجم أو مجموعة الحجم، فهي توفر طبقة استخدام مجردة عالية المستوى تجعلنا نركز في إدارة مجمع التخزين المركزي فقط، وتتولى هي إدارة الأمور منخفضة المستوى مثل الأقسام وتفاصيل الأقراص الخام، ستلاحظ سهولة استخدام LVM في حال حاولت مسبقًا تقسيم قرص ما واختبرت الصعوبة في ذلك.
</p>

<h2>
	تحضيرات المثال العملي
</h2>

<p>
	سنركز في هذا المقال على الشق العملي بجانب النظري، وسننفذ الأوامر أثناء شرحها، لأن التطبيق العملي أفضل وسيلة للتعلم، لذا وفي حال أردت التنفيذ يفضل استخدام آلة افتراضية، لهذا يمكنك الاستفادة من ملف الإعدادات Vagrantfile لتشغيل آلة افتراضية خفيفة باستخدام برنامج VirtualBox، حيث تملك هذه الآلة ثلاث أقراص إضافية يمكن استخدامها لتطبيق الأمثلة في هذا المقال، ويمكنك إنشاء مجلد جديد في مكان ما على جهازك وحفظ المحتوى التالي في ملف بالاسم <code>Vagrantfile</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_8" style=""><span class="typ">Vagrant</span><span class="pun">.</span><span class="pln">configure </span><span class="str">"2"</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> </span><span class="pun">|</span><span class="pln">config</span><span class="pun">|</span><span class="pln">
    config</span><span class="pun">.</span><span class="pln">vm</span><span class="pun">.</span><span class="pln">box </span><span class="pun">=</span><span class="pln"> </span><span class="str">"ubuntu/focal64"</span><span class="pln">
    config</span><span class="pun">.</span><span class="pln">vm</span><span class="pun">.</span><span class="pln">hostname </span><span class="pun">=</span><span class="pln"> </span><span class="str">"lvm"</span><span class="pln">
    </span><span class="lit">3.times</span><span class="pln"> </span><span class="pun">{|</span><span class="pln">i</span><span class="pun">|</span><span class="pln"> config</span><span class="pun">.</span><span class="pln">vm</span><span class="pun">.</span><span class="pln">disk </span><span class="pun">:</span><span class="pln">disk</span><span class="pun">,</span><span class="pln"> size</span><span class="pun">:</span><span class="pln"> </span><span class="str">"5GB"</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">:</span><span class="pln"> </span><span class="str">"drive-#{i}"</span><span class="pun">}</span><span class="pln">
    config</span><span class="pun">.</span><span class="pln">vm</span><span class="pun">.</span><span class="pln">provider </span><span class="pun">:</span><span class="pln">virtualbox </span><span class="kwd">do</span><span class="pln"> </span><span class="pun">|</span><span class="pln">machine</span><span class="pun">|</span><span class="pln">
        machine</span><span class="pun">.</span><span class="pln">memory </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1024</span><span class="pln">
        machine</span><span class="pun">.</span><span class="pln">cpus </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
        machine</span><span class="pun">.</span><span class="pln">customize </span><span class="pun">[</span><span class="str">"modifyvm"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">:</span><span class="pln">id</span><span class="pun">,</span><span class="pln"> </span><span class="str">"--cpuexecutioncap"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"50"</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">end</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="com"># vi: set ft=ruby</span></pre>

<p>
	أو يمكن جلب محتوى هذا الملف باستخدام <code>wget</code> عبر تنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_10" style=""><span class="pln">wget https</span><span class="pun">:</span><span class="com">//gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile</span></pre>

<p>
	يجب التأكد أولًا من تثبيت <a href="https://www.vagrantup.com/docs/installation" rel="external nofollow">Vagrant</a> و <a href="https://www.virtualbox.org/wiki/Downloads" rel="external nofollow">VirtualBox</a> بعد حفظ ملف Vagrantfile نُعين قيمة متغير البيئة <code>VAGRANT_EXPERIMENTAL</code> إلى <code>disks</code> عبر تنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_12" style=""><span class="kwd">export</span><span class="pln"> VAGRANT_EXPERIMENTAL</span><span class="pun">=</span><span class="pln">disks</span></pre>

<p>
	أخيرًا يمكن تشغيل الآلة الافتراضية باستخدام الأمر التالي مع التأكد من تعديل مسار العمل الحالي إلى المجلد الحاوي على ملف Vagrantfile:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_14" style=""><span class="pln">vagrant up</span></pre>

<p>
	بعد تشغيل الآلة يمكننا الدخول إليها عبر <a href="https://academy.hsoub.com/devops/security/ssh/%D8%A3%D9%86%D9%81%D8%A7%D9%82-ssh%D8%8C-%D9%85%D8%A7%D9%87%D9%8A%D8%AA%D9%87%D8%A7-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D9%87%D8%A7-r76/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr></a> بتنفيذ الأمر <code>vagrant <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></abbr></code> لتنفيذ الأوامر في هذا المقال، وبعد الانتهاء يمكنك حذف الآلة عبر تنفيذ الأمر <code>vagrant destroy</code> أيضًا من داخل المجلد الحاوي على الملف Vagrantfile.
</p>

<h3>
	تثبيت LVM
</h3>

<p>
	قبل تنفيذ الأوامر يجب أولًا تثبيت الحزمة <code>lvm2</code>، وعادة تأتي تلك الحزمة مثبتة مسبقًا في معظم التوزيعات الحديثة خصوصًا المبنية على أوبنتو، ولكن يجب التأكد من تثبيتها أولًا، لذا يمكنك مراجعة توثيق التوزيعة التي تعمل منها للتحقق من طريقة تثبيت الحزمة <code>lvm2</code>.
</p>

<h2>
	المثال العملي على استخدام LVM
</h2>

<p>
	بنينا سابقًا آلة افتراضية تملك سعة تخزين 40 جيجابايت في الجذر، وتملك ثلاث أقراص خارجية سعة كل منها 5 جيجابايت وهي ما يهمنا، وتلك السعة عشوائية ولا تعني شيئًا محددًا.
</p>

<pre class="ipsCode" id="ips_uid_1220_107">vagrant@lvm:~$ lsblk -o name,size,fstype
NAME    SIZE FSTYPE
loop0  55.5M squashfs
loop1  32.3M squashfs
loop2  70.4M squashfs
sda      40G 
└─sda1   40G ext4
sdb      10M iso9660
sdc       5G 
sdd       5G 
sde       5G</pre>

<p>
	كما هو واضح من الخرج السابق الأقراص التي سنستخدمها هي <code>sdc</code> و <code>sdd</code> و <code>sde</code>، تذكر أن المكونات الرئيسية الثلاث لـ LVM هي:
</p>

<ol>
	<li>
		الحجوم الفيزيائية
	</li>
	<li>
		مجموعات الحجوم
	</li>
	<li>
		الحجوم المنطقية
	</li>
</ol>

<p>
	سنشرح تلك المكونات بالترتيب.
</p>

<h3>
	1. الحجوم الفيزيائية
</h3>

<p>
	أول مكون يجب معرفته في LVM هو الحجوم الفيزيائية، وهي الوحدة الأساسية التي تبني طبقة التجريد العليا للحجوم المنطقية، ببساطة تُمثل الحجوم الفيزيائية الوحدات المنطقية لنظام LVM، ويمكن للحجم المنطقي أن يمثل أي شيء، مثل قرص أو قسم من قرص، حيث أن إنشاء وتهيئة حجم فيزيائي يمثلان الأمر نفسه، فكل منهما يعني أننا نٌحضِّر الوحدات الأساسية مثل الأقسام أو الأقراص وغيرها لعمليات لاحقة عليها، ستتوضح هذه الفكرة لاحقًا.
</p>

<p>
	<strong>الأدوات:</strong> جميع أدوات إدارة الحجوم الفيزيائية تبدأ بالأحرف <code>pv</code> وهي اختصار للأحرف الأولى من حجم فيزيائي Physical Volume، مثل <code>pvcreate</code> و <code>pvchange</code> و <code>pvs</code> و <code>pvdisplay</code> وغيرها.
</p>

<p>
	كل الأوامر التي سنذكرها من الآن وصاعدًا مدمرة أي لا يمكن الرجوع عنها، لذا إذا لم تكن تطبق تلك الأوامر ضمن بيئة افتراضية أو خادم ضمن السحابة لا يحوي على بيانات مهمة مخزنة ضمنه أو بيانات يمكنه له الوصول إليها، ننصح بالتوقف عن التطبيق وأخذ الحذر.
</p>

<h4>
	إنشاء حجوم فيزيائية
</h4>

<p>
	يمكن إنشاء حجوم فيزيائية باستخدام قرص خام غير مقسم بعد أو باستخدام الأقسام الموجودة مسبقًا، وكما ذكرنا سابقًا لدينا ثلاث محركات أقراص خارجية متصلة بالآلة الافتراضية، لنبدأ بالقرص <code>‎/dev/sdc</code>، حيث يمكن استخدام الأمر <code>pvcreate</code> لإنشاء حجم فيزيائي، وذلك فقط عبر تمرير اسم الجهاز له كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_19" style=""><span class="pln">sudo pvcreate </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc</span></pre>

<p>
	ليظهر لنا خرج مشابه للتالي:
</p>

<pre class="ipsCode" id="ips_uid_1220_109">vagrant@lvm:~$ sudo pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.</pre>

<p>
	سنقسم الآن الجهاز <code>‎/dev/sdd</code> إلى أقسام متساوية، ويمكن استخدام العديد من الأدوات لتنفيذ ذلك مثل <code>cfdisk</code> و <code>parted</code> و <code>fdisk</code> وغيرها:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_23" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ lsblk </span><span class="pun">-</span><span class="pln">o name</span><span class="pun">,</span><span class="pln">size</span><span class="pun">,</span><span class="pln">fstype </span><span class="pun">|</span><span class="pln"> grep sdd
sdd       </span><span class="lit">5G</span><span class="pln"> 
</span><span class="pun">├─</span><span class="pln">sdd1  </span><span class="lit">2.5G</span><span class="pln"> 
</span><span class="pun">└─</span><span class="pln">sdd2  </span><span class="lit">2.5G</span></pre>

<p>
	يمكن الآن إنشاء أكثر من حجم فيزيائي من تلك الأقسام بخطوة واحدة وذلك عبر تمرير أسماء تلك الأجهزة معًا إلى الأمر <code>pvcreate</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_25" style=""><span class="pln">sudo pvcreate </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1 </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2</span></pre>

<p>
	بتنفيذ الأمر السابق يتم إنشاء القسمين معًا:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_27" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo pvcreate </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1 </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2
  </span><span class="typ">Physical</span><span class="pln"> volume </span><span class="str">"/dev/sdd1"</span><span class="pln"> successfully created</span><span class="pun">.</span><span class="pln">
  </span><span class="typ">Physical</span><span class="pln"> volume </span><span class="str">"/dev/sdd2"</span><span class="pln"> successfully created</span><span class="pun">.</span></pre>

<h4>
	عرض الحجوم الفيزيائية المتاحة
</h4>

<p>
	لعرض الحجوم الفيزيائية المتاحة يمكن استخدام أحد الأوامر الثلاثة التالية <code>pvscan</code> و <code>pvs</code> و <code>pvdisplay</code>، دون تمرير أي معاملات أو خيارات لتلك الأوامر كالتالي:
</p>

<p>
	تنفيذ الأمر <code>pvscan</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_30" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo pvscan
  PV </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc                       lvm2 </span><span class="pun">[</span><span class="lit">5.00</span><span class="pln"> </span><span class="typ">GiB</span><span class="pun">]</span><span class="pln">
  PV </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1                      lvm2 </span><span class="pun">[</span><span class="lit">2.50</span><span class="pln"> </span><span class="typ">GiB</span><span class="pun">]</span><span class="pln">
  PV </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2                      lvm2 </span><span class="pun">[&lt;</span><span class="lit">2.50</span><span class="pln"> </span><span class="typ">GiB</span><span class="pun">]</span><span class="pln">
  </span><span class="typ">Total</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">[&lt;</span><span class="lit">10.00</span><span class="pln"> </span><span class="typ">GiB</span><span class="pun">]</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="kwd">use</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">[</span><span class="lit">0</span><span class="pln">   </span><span class="pun">]</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="kwd">no</span><span class="pln"> VG</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">[&lt;</span><span class="lit">10.00</span><span class="pln"> </span><span class="typ">GiB</span><span class="pun">]</span></pre>

<p>
	تنفيذ الأمر <code>pvs</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_32" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo pvs
  PV         VG </span><span class="typ">Fmt</span><span class="pln">  </span><span class="typ">Attr</span><span class="pln"> </span><span class="typ">PSize</span><span class="pln">  </span><span class="typ">PFree</span><span class="pln"> 
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc      lvm2 </span><span class="pun">---</span><span class="pln">   </span><span class="lit">5.00g</span><span class="pln">  </span><span class="lit">5.00g</span><span class="pln">
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1     lvm2 </span><span class="pun">---</span><span class="pln">   </span><span class="lit">2.50g</span><span class="pln">  </span><span class="lit">2.50g</span><span class="pln">
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2     lvm2 </span><span class="pun">---</span><span class="pln">  </span><span class="pun">&lt;</span><span class="lit">2.50g</span><span class="pln"> </span><span class="pun">&lt;</span><span class="lit">2.50g</span></pre>

<p>
	تنفيذ الأمر <code>pvdisplay</code>:
</p>

<pre class="ipsCode" id="ips_uid_1220_111">vagrant@lvm:~$ sudo pvdisplay
  "/dev/sdc" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ

  "/dev/sdd1" is a new physical volume of "2.50 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               2.50 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS

  "/dev/sdd2" is a new physical volume of "&lt;2.50 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd2
  VG Name               
  PV Size               &lt;2.50 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB</pre>

<p>
	كما نلاحظ من الخرج تظهر لنا الحجوم الفيزيائية المتاحة مع معلومات مفيدة خاصة بها.
</p>

<h4>
	إزالة حجم فيزيائي
</h4>

<p>
	يمكن إزالة حجم فيزيائي باستخدام الأمر <code>pvremove</code>، وذلك بشكل مشابه لاستخدام الأمر <code>pvcreate</code>، حيث نمرر أسماء الأجهزة التي هيئناها كحجوم فيزيائية إلى الأمر <code>pvremove</code>، وسنطبق ذلك عبر إزالة الجهاز <code>‎/dev/sdd2</code> من قائمة الحجوم كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_36" style=""><span class="pln">sudo pvremove </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2</span></pre>

<p>
	الخرج سيكون مطابقًا للتالي:
</p>

<pre class="ipsCode" id="ips_uid_1220_113">vagrant@lvm:~$ sudo pvremove /dev/sdd2
  Labels on physical volume "/dev/sdd2" successfully wiped.</pre>

<p>
	يمكن التأكد من عملية الإزالة بعرض قائمة الحجوم الفيزيائية المتاحة عبر تنفيذ الأمر <code>sudo pvs</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_40" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo pvs
  PV         VG </span><span class="typ">Fmt</span><span class="pln">  </span><span class="typ">Attr</span><span class="pln"> </span><span class="typ">PSize</span><span class="pln"> </span><span class="typ">PFree</span><span class="pln">
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc      lvm2 </span><span class="pun">---</span><span class="pln">  </span><span class="lit">5.00g</span><span class="pln"> </span><span class="lit">5.00g</span><span class="pln">
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1     lvm2 </span><span class="pun">---</span><span class="pln">  </span><span class="lit">2.50g</span><span class="pln"> </span><span class="lit">2.50g</span></pre>

<p>
	نلاحظ عدم ظهور الحجم <code>‎/dev/sdd2</code> أي تمت إزالته.
</p>

<h3>
	2. مجموعات الحجوم
</h3>

<p>
	مجموعات الحجوم تُعبّر عن مجموعة من الحجوم الفيزيائية، وهي الطبقة الثانية من التجريد التي يوفرها LVM، مجموعات الحجوم هي مجمع التخزين الذي يدمج معًا سعات التخزين لعدة أجهزة.
</p>

<p>
	<strong>الأدوات:</strong> تبدأ أسماء جميع أدوات مجموعة الحجم بالأحرف <code>vg</code> وهي الأحرف الأولى من مجموعة حجم Volume Group، مثل <code>vgcreate</code> و <code>vgs</code> و <code>vgrename</code> وغيرها.
</p>

<h4>
	إنشاء مجموعات الحجم
</h4>

<p>
	يمكن إنشاء مجموعات الحجم باستخدام الأمر <code>vgcreate</code>، حيث نمرر له كمعامل أول اسم يتم إسناده لمجموعة الحجم، والمعاملات البقية هي الحجوم الفيزيائية التي سنضمها إلى مجمع التخزين:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_42" style=""><span class="pln">sudo vgcreate lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1</span></pre>

<p>
	مثال:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_44" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgcreate lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1
  </span><span class="typ">Volume</span><span class="pln"> </span><span class="kwd">group</span><span class="pln"> </span><span class="str">"lvm_tutorial"</span><span class="pln"> successfully created</span></pre>

<h4>
	عرض مجموعات الحجم
</h4>

<p>
	بشكل مشابه لطريقة عرض الحجوم الفيزيائية يمكننا عرض مجموعات الحجم باستخدام أوامر مختلفة تُقدِّم كل منها درجة من مختلفة التفاصيل بعد تنفيذها، أوامر مثل <code>vgdisplay</code> و <code>vgscan</code> و <code>vgs</code>:
</p>

<p>
	تنفيذ الأمر <code>vgs</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_46" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgs
  VG           </span><span class="com">#PV #LV #SN Attr   VSize VFree</span><span class="pln">
  lvm_tutorial   </span><span class="lit">2</span><span class="pln">   </span><span class="lit">0</span><span class="pln">   </span><span class="lit">0</span><span class="pln"> wz</span><span class="pun">--</span><span class="pln">n</span><span class="pun">-</span><span class="pln"> </span><span class="lit">7.49g</span><span class="pln"> </span><span class="lit">7.49g</span></pre>

<p>
	تنفيذ الأمر <code>vgscan</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_48" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgscan
  </span><span class="typ">Found</span><span class="pln"> volume </span><span class="kwd">group</span><span class="pln"> </span><span class="str">"lvm_tutorial"</span><span class="pln"> </span><span class="kwd">using</span><span class="pln"> metadata type lvm2</span></pre>

<p>
	تنفيذ الأمر <code>vgdisplay</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_50" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgdisplay 
  </span><span class="pun">---</span><span class="pln"> </span><span class="typ">Volume</span><span class="pln"> </span><span class="kwd">group</span><span class="pln"> </span><span class="pun">---</span><span class="pln">
  VG </span><span class="typ">Name</span><span class="pln">               lvm_tutorial
  </span><span class="typ">System</span><span class="pln"> ID             
  </span><span class="typ">Format</span><span class="pln">                lvm2
  </span><span class="typ">Metadata</span><span class="pln"> </span><span class="typ">Areas</span><span class="pln">        </span><span class="lit">2</span><span class="pln">
  </span><span class="typ">Metadata</span><span class="pln"> </span><span class="typ">Sequence</span><span class="pln"> </span><span class="typ">No</span><span class="pln">  </span><span class="lit">1</span><span class="pln">
  VG </span><span class="typ">Access</span><span class="pln">             read</span><span class="pun">/</span><span class="pln">write
  VG </span><span class="typ">Status</span><span class="pln">             resizable
  MAX LV                </span><span class="lit">0</span><span class="pln">
  </span><span class="typ">Cur</span><span class="pln"> LV                </span><span class="lit">0</span><span class="pln">
  </span><span class="typ">Open</span><span class="pln"> LV               </span><span class="lit">0</span><span class="pln">
  </span><span class="typ">Max</span><span class="pln"> PV                </span><span class="lit">0</span><span class="pln">
  </span><span class="typ">Cur</span><span class="pln"> PV                </span><span class="lit">2</span><span class="pln">
  </span><span class="typ">Act</span><span class="pln"> PV                </span><span class="lit">2</span><span class="pln">
  VG </span><span class="typ">Size</span><span class="pln">               </span><span class="lit">7.49</span><span class="pln"> </span><span class="typ">GiB</span><span class="pln">
  PE </span><span class="typ">Size</span><span class="pln">               </span><span class="lit">4.00</span><span class="pln"> </span><span class="typ">MiB</span><span class="pln">
  </span><span class="typ">Total</span><span class="pln"> PE              </span><span class="lit">1918</span><span class="pln">
  </span><span class="typ">Alloc</span><span class="pln"> PE </span><span class="pun">/</span><span class="pln"> </span><span class="typ">Size</span><span class="pln">       </span><span class="lit">0</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">0</span><span class="pln">   
  </span><span class="typ">Free</span><span class="pln">  PE </span><span class="pun">/</span><span class="pln"> </span><span class="typ">Size</span><span class="pln">       </span><span class="lit">1918</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">7.49</span><span class="pln"> </span><span class="typ">GiB</span><span class="pln">
  VG UUID               LYVE9P</span><span class="pun">-</span><span class="pln">vY0G</span><span class="pun">-</span><span class="pln">OAW6</span><span class="pun">-</span><span class="pln">an8q</span><span class="pun">-</span><span class="pln">yfBx</span><span class="pun">-</span><span class="pln">rrB1</span><span class="pun">-</span><span class="pln">YU61m1</span></pre>

<h4>
	عرض الحجوم الفيزيائية المرتبطة بمجموعة حجم معينة
</h4>

<p>
	يمكننا عرض الحجوم الفيزيائية المرتبطة بمجموعة حجم معينة عبر تنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_52" style=""><span class="pln">sudo pvdisplay </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=&lt;</span><span class="pln">volume_group_name</span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">-</span><span class="pln">C </span><span class="pun">-</span><span class="pln">o pv_name</span></pre>

<p>
	مثال:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_54" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo pvdisplay </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=</span><span class="pln">lvm_tutorial </span><span class="pun">-</span><span class="pln">C </span><span class="pun">-</span><span class="pln">o pv_name
  PV        
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc  
  </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1</span></pre>

<p>
	يمكن أيضًا إظهار عدد الحجوم الفيزيائية كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_57" style=""><span class="pln">sudo vgdisplay </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=&lt;</span><span class="pln">volume_group_name</span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">-</span><span class="pln">C </span><span class="pun">-</span><span class="pln">o pv_count</span></pre>

<p>
	مثال:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_59" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgdisplay </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=</span><span class="pln">lvm_tutorial </span><span class="pun">-</span><span class="pln">C </span><span class="pun">-</span><span class="pln">o pv_count
  </span><span class="com">#PV</span><span class="pln">
    </span><span class="lit">3</span></pre>

<h4>
	توسيع مجموعة حجم
</h4>

<p>
	توسيع مجموعة حجم يعني إضافة حجوم فيزيائية إضافية إلى تلك المجموعة، حيث يمكن استخدام الأمر <code>vgextend</code> لتنفيذ ذلك، وصيغة تنفيذ هذا الأمر بسيطة وهي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_63" style=""><span class="pln">vgextend </span><span class="str">&lt;volume_group&gt;</span><span class="pln"> </span><span class="str">&lt;physical_volume1&gt;</span><span class="pln"> </span><span class="str">&lt;physical_volume2&gt;</span><span class="pln"> </span><span class="pun">....</span></pre>

<p>
	لننفذ ذلك بتوسيع المجموعة <code>lvm_tutorial</code> وإضافة الحجم <code>‎/dev/sdd2</code> لها.
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_65" style=""><span class="pln">sudo vgextend lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2</span></pre>

<p>
	لاحظ خرج الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_67" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgextend lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd2
  </span><span class="typ">Physical</span><span class="pln"> volume </span><span class="str">"/dev/sdd2"</span><span class="pln"> successfully created</span><span class="pun">.</span><span class="pln">
  </span><span class="typ">Volume</span><span class="pln"> </span><span class="kwd">group</span><span class="pln"> </span><span class="str">"lvm_tutorial"</span><span class="pln"> successfully extended</span></pre>

<p>
	أزلنا في فقرة سابقة الجهاز <code>‎/dev/sdd2</code> من الحجم الفيزيائي، لذا قبل إضافة أي جهاز إلى مجموعة الحجم يجب تهيئته كحجم فيزيائي أولًا، ليتمكن LVM من إدارته كقسم من المجموعة، لذا جهّز الأمر <code>vgextend</code> لنا الجهاز <code>‎/dev/sdd2</code> كحجم فيزيائي قبل إضافته إلى المجموعة، وللتأكد يمكننا الآن عرض الحجوم الفيزيائية المرتبطة بمجموعة حجم هذه:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_69" style=""><span class="pln">sudo pvdisplay </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=</span><span class="pln">lvm_tutorial </span><span class="pun">-</span><span class="pln">C </span><span class="pun">-</span><span class="pln">o pv_name</span></pre>

<p>
	الخرج:
</p>

<pre class="ipsCode">vagrant@lvm:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
  PV        
  /dev/sdc  
  /dev/sdd1 
  /dev/sdd2
</pre>

<p>
	نلاحظ كيف تم إضافة الجهاز <code>‎/dev/sdd2</code> إلى قائمة الأجهزة المرتبطة بالمجموعة كما هو متوقع.
</p>

<h4>
	تقليص مجموعة حجم
</h4>

<p>
	على عكس عملية توسيع مجموعة حجم، فإن تقليص مجموعة حجم تعني إزالة حجم فيزيائي أو أكثر من تلك المجموعة، حيث يمكننا استخدام الأمر <code>vgreduce</code> لتنفيذ ذلك، وصيغة الأمر تكون كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_72" style=""><span class="pln">vgreduce </span><span class="str">&lt;vgname&gt;</span><span class="pln"> </span><span class="str">&lt;physical_volume1&gt;</span><span class="pln"> </span><span class="str">&lt;physical_volume2&gt;</span><span class="pln"> </span><span class="pun">....</span></pre>

<p>
	لنجرب إزالة الحجوم الفيزيائية <code>‎/dev/sdc</code> و <code>‎/dev/sdd1</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_74" style=""><span class="pln">sudo vgreduce lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1</span></pre>

<p>
	مثال:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_76" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ sudo vgreduce lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1
  </span><span class="typ">Removed</span><span class="pln"> </span><span class="str">"/dev/sdc"</span><span class="pln"> </span><span class="kwd">from</span><span class="pln"> volume </span><span class="kwd">group</span><span class="pln"> </span><span class="str">"lvm_tutorial"</span><span class="pln">
  </span><span class="typ">Removed</span><span class="pln"> </span><span class="str">"/dev/sdd1"</span><span class="pln"> </span><span class="kwd">from</span><span class="pln"> volume </span><span class="kwd">group</span><span class="pln"> </span><span class="str">"lvm_tutorial"</span></pre>

<p>
	لن نتمكن من تقليص مجموعة الحجم في حال كان يوجد ضمنها أي حجوم منطقية فعالة، والآن نعرض قائمة الحجوم الفيزيائية الموجودة:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_78" style=""><span class="pln">sudo pvdisplay </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=</span><span class="pln">lvm_tutorial </span><span class="pun">-</span><span class="pln">C </span><span class="pun">-</span><span class="pln">o pv_name</span></pre>

<p>
	الخرج:
</p>

<pre class="ipsCode">vagrant@lvm:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
  PV        
  /dev/sdd2
</pre>

<p>
	نلاحظ كيف تم إزالة الحجمين الفيزيائيين من المجموعة، لكننا سنحتاج لوجود تلك الحجوم ضمن المجموعة في الأمثلة لاحقة، لذا سنعيدها إلى المجموعة مجددًا بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_80" style=""><span class="pln">sudo vgextend lvm_tutorial </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd1</span></pre>

<h4>
	إزالة مجموعة حجم
</h4>

<p>
	يمكن إزالة حجم منطقي باستخدام الأمر <code>vgremove</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_82" style=""><span class="pln">sudo vgremove lvm_tutorial</span></pre>

<p>
	لا تنفذ الأمر حاليًا كي لا تضطر لإعادة إنشاء مجموعة الحجم مجددًا، لكن يمكنك اختبار تنفيذ هذا الأمر في نهاية المقال إذا أردت.
</p>

<h3>
	3. الحجوم المنطقية
</h3>

<p>
	وهي ما نتعامل معه في أغلب الوقت، الحجم المنطقي يشبه القسم، لكن الفرق بينهما أن الأقسام تُبنى فوق القرص مباشرة، أما الأحجام المنطقية فهي تُبنى فوق مجموعة الحجم، وهي تمكننا من:
</p>

<ul>
	<li>
		تنسيق الحجم المنطقي بأي نظام ملفات نريد.
	</li>
	<li>
		تركيبه في أي مكان نريده ضمن نظام الملفات.
	</li>
</ul>

<p>
	سنتعلم في هذا القسم الأمور التالية:
</p>

<ul>
	<li>
		كيف ننشئ الحجوم المنطقية.
	</li>
	<li>
		إجراء عمليات شائعة على الحجوم المنطقية.
	</li>
	<li>
		تعديل مساحة حجم منطقي.
	</li>
	<li>
		إزالة حجم منطقي.
	</li>
</ul>

<p>
	<strong>الأدوات:</strong> تبدأ أسماء جميع أدوات الحجوم المنطقية بالأحرف <code>vl</code> وهي الأحرف الأولى من حجم منطقي Logical Volume، مثل <code>lvcreate</code> و <code>lvs</code> و <code>lvreduce</code> وغيرها.
</p>

<h4>
	إنشاء حجوم منطقية
</h4>

<p>
	يمكن إنشاء الحجوم المنطقية باستخدام الأمر <code>lvcreate</code>، وصيغة استخدامه هي كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_84" style=""><span class="pln">sudo lvcreate </span><span class="pun">-</span><span class="pln">L </span><span class="str">&lt;size&gt;</span><span class="pln"> </span><span class="pun">-</span><span class="pln">n </span><span class="str">&lt;lvname&gt;</span><span class="pln"> </span><span class="str">&lt;vgname&gt;</span></pre>

<p>
	لنشرح أجزاء ذلك الأمر:
</p>

<ul>
	<li>
		الخيار <code>‎-L</code> يدل على الحجم الجديد للحجم المنطقي، حيث يمكن استخدام عدد متبوعًا بوحدة الحجم مثل "GB" للجيجابايت أو "MB" للميجابايت أو "KB" للكيلو بايت، مثال "1GB" وتعني 1 جيجابايت.
	</li>
	<li>
		الخيار <code>‎-n</code> يستخدم لتسمية الحجم المنطقي.
	</li>
	<li>
		أخيرًا سنحتاج لتمرير اسم مجموعة الحجم التي سينضم الحجم المنطقي هذا إليها، لذا يجب التأكد من أن الحجم المحدد للحجم المنطقي هذا متاح كمساحة فارغة ضمن مجموعة الحجم التي سينضم إليها.
	</li>
</ul>

<p>
	ننفذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_86" style=""><span class="pln">sudo lvcreate </span><span class="pun">-</span><span class="pln">L </span><span class="lit">5GB</span><span class="pln"> </span><span class="pun">-</span><span class="pln">n lv1 lvm_tutorial</span></pre>

<p>
	الخرج:
</p>

<pre class="ipsCode">vagrant@lvm:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
  Logical volume "lv1" created.
</pre>

<h4>
	عمليات شائعة على حجم منطقي
</h4>

<p>
	كما ذكرنا سابقًا يمكن وضع نظام ملفات ضمن حجم منطقي وتركيبه أيضًا في أي مكان على نظام الملفات، فبعد إنشاءه يمكننا العثور على الحجم المنطقي ضمن المسار <code>‎/dev/&lt;vgname&gt;/&lt;lvname&gt;‎</code>، في مثالنا سيكون الحجم متاحًا على المسار <code>‎/dev/lvm_tutorial/lv1</code>.
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_88" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ ls </span><span class="pun">-</span><span class="pln">l </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">lvm_tutorial</span><span class="pun">/</span><span class="pln">lv1 
lrwxrwxrwx </span><span class="lit">1</span><span class="pln"> root root </span><span class="lit">7</span><span class="pln"> </span><span class="typ">May</span><span class="pln"> </span><span class="lit">17</span><span class="pln"> </span><span class="lit">02</span><span class="pun">:</span><span class="lit">09</span><span class="pln"> </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">lvm_tutorial</span><span class="pun">/</span><span class="pln">lv1 </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="pun">../</span><span class="pln">dm</span><span class="pun">-</span><span class="lit">0</span></pre>

<p>
	يمكننا استخدامه الآن كأي قسم اعتيادي، حيث يمكننا تنسيقه بتنسيق ext4 كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_90" style=""><span class="pln">sudo mkfs</span><span class="pun">.</span><span class="pln">ext4 </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">lvm_tutorial</span><span class="pun">/</span><span class="pln">lv1</span></pre>

<p>
	وتركيبه في مكان ضمن بنية المجلدات الحالية مثل <code>‎/mnt</code>:
</p>

<pre class="ipsCode">sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt
</pre>

<h4>
	تعديل مساحة حجم منطقي
</h4>

<p>
	يمكن توسيع حجم منطقي باستخدام الأمر <code>lvextend</code> وتقليص حجمه باستخدام الأمر <code>lvreduce</code>، ويمكننا بدلًا من ذلك استخدام الأمر <code>lvresize</code> فقط لتنفيذ كلا العمليتين، أولًا نتأكد من توفر مساحة كافية في مجموعة الحجم:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_92" style=""><span class="pln">sudo vgs </span><span class="pun">-</span><span class="pln">S vgname</span><span class="pun">=</span><span class="pln">lvm_tutorial </span><span class="pun">-</span><span class="pln">o vg_free</span></pre>

<p>
	الخرج:
</p>

<pre class="ipsCode">vagrant@lvm:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
  VFree 
  &lt;4.99g
</pre>

<p>
	بحسب الخرج السابق يتوفر لدينا مساحة كافية، لذا سنزيد الحجم بمقدار 2 جيجابايت، وتذكر بأن الحجم المنطقي لا يزال مركبًا ضمن المسار <code>‎/mnt</code>.
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_94" style=""><span class="pln">vagrant@lvm</span><span class="pun">:~</span><span class="pln">$ mount </span><span class="pun">|</span><span class="pln"> grep </span><span class="str">'/mnt'</span><span class="pln">
</span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">mapper</span><span class="pun">/</span><span class="pln">lvm_tutorial</span><span class="pun">-</span><span class="pln">lv1 on </span><span class="pun">/</span><span class="pln">mnt type ext4 </span><span class="pun">(</span><span class="pln">rw</span><span class="pun">,</span><span class="pln">relatime</span><span class="pun">)</span></pre>

<p>
	باستخدام الأمر التالي يمكننا تعديل مساحة الحجم المنطقي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_96" style=""><span class="pln">sudo lvresize </span><span class="pun">-</span><span class="pln">L </span><span class="pun">+</span><span class="lit">2GB</span><span class="pln"> lvm_tutorial</span><span class="pun">/</span><span class="pln">lv1</span></pre>

<p>
	صيغة الأمر العامة تكون كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_98" style=""><span class="pln">lvresize </span><span class="pun">-</span><span class="pln">L </span><span class="pun">[+|-][</span><span class="typ">Size</span><span class="pun">]</span><span class="pln"> </span><span class="str">&lt;vgname&gt;</span><span class="pun">/&lt;</span><span class="pln">lvname</span><span class="pun">&gt;</span></pre>

<p>
	الرموز + أو - بعد الخيار <code>‎-L</code> نضيفها بحسب العملية التي سنجريها إذا كانت زيادة أو تقليص للحجم على الترتيب، فبعد زيادة الحجم يجب تعديل حجم نظام الملفات أيضًا، فلنظام ملفات من نوع ext4 يمكن استخدام الأمر <code>resize2fs</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_100" style=""><span class="pln">sudo resize2fs </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">lvm_tutorial</span><span class="pun">/</span><span class="pln">lv1</span></pre>

<p>
	الخرج:
</p>

<pre class="ipsCode">vagrant@lvm:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long.
</pre>

<p>
	لا تدعم كل أنظمة الملفات التعديل الساخن، ومن الأنظمة التي تدعم ذلك هي Ext4 و XFS، لذا ينصح باستخدامها دومًا، عملية تقليص مساحة حجم افتراضي مهمة معقدة قليلًا ولن نشرحها في هذا المقال.
</p>

<h4>
	إزالة حجم منطقي
</h4>

<p>
	يمكن إزالة حجم منطقي باستخدام الأمر <code>lvremove</code>، وصيغته تكون كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_102" style=""><span class="pln">lvremove </span><span class="str">&lt;vgname&gt;</span><span class="pun">/&lt;</span><span class="pln">lvname</span><span class="pun">&gt;</span></pre>

<p>
	بتنفيذ هذا الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1220_104" style=""><span class="pln">sudo lvremove lvm_tutorial</span><span class="pun">/</span><span class="pln">lv1</span></pre>

<p>
	نحصل على الخرج:
</p>

<pre class="ipsCode">vagrant@lvm:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
  Logical volume "lv1" successfully removed
</pre>

<h2>
	خاتمة
</h2>

<p>
	يوجد الكثير من العمليات التي يمكن تنفيذها على الحجوم المنطقية والفيزيائية ومجموعات الحجوم، وهي أكثر من أن يتم حصرها ضمن مقال واحد، حيث تبقى لدينا قرص واحد داخل الآلة الافتراضية لم ننفذ عليه أي عمليات وهو <code>‎/dev/sde</code>، يمكن استخدامه للتدرب على بعض الأوامر التي شرحناها في هذا المقال، كإنشاء مجموعة حجم جديدة وتوسيع حجم مجموعة موجودة مسبقًا.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/lvm-guide/" rel="external nofollow">The Complete Beginner's Guide to LVM in Linux</a> لصاحبه Debdut Chakraborty.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%AF%D9%8A%D8%B1-%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%91%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D9%91%D8%A9-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lvm-r333/" rel="">مدخل إلى مدير وحدات التّخزين المنطقيّة في نظام لينكس LVM</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B5%D8%B7%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r301/" rel="">مدخل إلى مصطلحات ومفاهيم التخزين في لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A8%D8%A2%D9%84%D9%8A%D9%91%D8%A9-lvm-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D9%83%D9%88%D9%91%D9%86%D8%A7%D8%AA-r334/" rel="">إدارة أجهزة التخزين بآليّة LVM على أوبونتو: عرض المكوّنات</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">685</guid><pubDate>Wed, 15 Feb 2023 17:00:00 +0000</pubDate></item><item><title>&#x645;&#x631;&#x627;&#x642;&#x628;&#x629; &#x648;&#x625;&#x62F;&#x627;&#x631;&#x629; &#x639;&#x62F;&#x629; &#x62E;&#x648;&#x627;&#x62F;&#x645; &#x644;&#x64A;&#x646;&#x643;&#x633; &#x639;&#x628;&#x631; &#x648;&#x627;&#x62C;&#x647;&#x629; &#x645;&#x62A;&#x635;&#x641;&#x62D; &#x645;&#x631;&#x626;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Cockpit</title><link>https://academy.hsoub.com/devops/linux/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D9%88%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%B9%D8%AF%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%B9%D8%A8%D8%B1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D9%85%D8%AA%D8%B5%D9%81%D8%AD-%D9%85%D8%B1%D8%A6%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-cockpit-r683/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_01/95920497_----------Cockpit.jpg.036a7420f1d64e46aa8cc17c2fe82972.jpg" /></p>
<p>
	عملية إدارة عدد من خوادم لينكس تتم عادة عبر تسجيل الدخول إليها باستخدام <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> وتنفيذ بعض أوامر لينكس لإتمام بعض المهام، وهو ما يفعله غالبًا مدراء الأنظمة، لكن البعض لا يملك الخبرة الكافية في استخدام سطر الأوامر وهم بحاجة لإدارة خوادم لينكس على الرغم من ذلك، يوجد حل لتلك المشكلة، فهناك عدة أدوات تسمح لنا بإدارة خوادم لينكس عبر واجهة مرئية بدلًا من سطر الأوامر، ومن أشهر تلك الأدوات هي Webmin و Cockpit.
</p>

<p>
	في هذا المقال سنشرح كيف يمكنك استخدام Cockpit لإدارة عدة خوادم لينكس معًا.
</p>

<h2>
	ما هو مشروع Cockpit للينكس؟
</h2>

<p>
	<a href="https://cockpit-project.org/" rel="external nofollow">Cockpit</a> هي أداة لإدارة خوادم <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">لينكس</a> بواجهة مرئية ضمن المتصفح، حيث بعد تثبيت Cockpit على الخادم يمكن الوصول لذلك الخادم من المتصفح وتنفيذ مهام الإدارة الاعتيادية كضبط إعدادات جدار النار وتغيير إعدادات الشبكة وإدارة التخزين وإدارة حسابات المستخدمين وتشغيل الحاويات وتثبيت التحديثات وتحديث البرنامج وغيرها، ويوفر أيضًا إمكانية تحليل حمل <a href="https://academy.hsoub.com/certificates/comptia/%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-r58/" rel="">وحدة المعالجة المركزية CPU</a> واستخدام الذاكرة وأداء الأقراص.
</p>

<p>
	يفيد Cockpit في حال امتلاكك خبرة بسيطة فقط في لينكس ويسمح لك بإدارة <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">الخادم</a> باستخدام واجهته المرئية، حتى لو كنت تملك الخبرة الكافية، يسمح لك Cockpit بإلقاء نظرة عامة على الخوادم التي تديرها، يوجد أدوات أخرى حديثة مثل Ansible يستخدمها الكثير مؤخرًا، لكن يبقى Cockpit خيارًا بديًلا جيدًا.
</p>

<h2>
	استخدام Cockpit لإدارة خوادم لينكس عن بعد عبر واجهته المرئية
</h2>

<p>
	سنشرح بعض إمكانيات Cockpit التي يوفرها لنا ونأخذ جولة للتعرف على أهم مزاياه.
</p>

<h3>
	تثبيت Cockpit على الخادم المُراد مراقبته
</h3>

<p>
	يجب تثبيت Cockpit على الخادم المُراد مراقبته، حيث سنرى لاحقًا كيف يمكن استخدام Cockpit لمراقبة عدة خوادم معًا، ففي هذا المقال سنثبت Cockpit على <a href="https://academy.hsoub.com/devops/linux/%D8%A3%D8%AA%D9%85%D8%AA%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A3%D9%88%D9%84%D9%8A-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-%D8%A8%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1-1804-r443/" rel="">خادم أوبنتو 18.04</a> عبر تنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3925_11" style=""><span class="pln">sudo apt </span><span class="pun">-</span><span class="pln">y install cockpit</span></pre>

<p>
	بعد انتهاء التثبيت يمكن الوصول إلى واجهة البرنامج عبر المنفذ رقم 9090، إذا كان الخادم ضمن <a href="https://academy.hsoub.com/certificates/comptia/%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D9%85%D8%AD%D9%84%D9%8A%D9%91%D9%8E%D8%A9-r66/" rel="">الشبكة المحلية</a> يمكن الوصول إليه عبر العنوان localhost ضمن المتصفح فيصبح العنوان كالتالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3925_14" style=""><span class="pln">localhost</span><span class="pun">:</span><span class="lit">9090</span></pre>

<p>
	يجب التأكد من السماح للمنفذ 9090 ضمن <a href="https://academy.hsoub.com/devops/security/firewalls/%25D9%2585%25D8%25A7-%25D9%2587%25D9%2588-%25D8%25A7%25D9%2584%25D8%25AC%25D8%25AF%25D8%25A7%25D8%25B1-%25D8%25A7%25D9%2584%25D9%2586%25D8%25A7%25D8%25B1%25D9%258A-%25D9%2588%25D9%2583%25D9%258A%25D9%2581-%25D9%258A%25D8%25B9%25D9%2585%25D9%2584%25D8%259F-r114/" rel="">الجدار الناري</a> على الخادم، أو يمكن الوصول لواجهة Cockpit عبر استخدام عنوان IP للخادم ورقم المنفذ، فإذا كان مثلًا عنوان IP للخادم هو 1.2.3.4 سيصبح عنوان الوصول للبرنامج هو التالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3925_16" style=""><span class="lit">1.2</span><span class="pun">.</span><span class="lit">3.4</span><span class="pun">:</span><span class="lit">9090</span></pre>

<p>
	قد يُظهر لك المتصفح خطأ متعلق بالاتصال الآمن باستخدام HTTPS عن محاولة الوصول للواجهة المرئية للأداة، يجب السماح بمتابعة الاتصال
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117520" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-ip-allow.png.feedcaaf990c85f9b4a72da7305f1e45.png" rel=""><img alt="ظهور خطأ متعلق بالاتصال الآمن باستخدام HTTPS" class="ipsImage ipsImage_thumbnailed" data-fileid="117520" data-ratio="62.43" data-unique="tomlfnz0e" style="width: 700px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-ip-allow.thumb.png.f7022eb511cecc965d2b9be6591c12a9.png"> </a>
</p>

<p>
	بعدها سيظهر لنا واجهة كالتالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117502" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-1.png.154aa21a40706595bae56469b3ead04c.png" rel=""><img alt="واجهة أوبنتو 18.04 ubuntu" class="ipsImage ipsImage_thumbnailed" data-fileid="117502" data-ratio="45.73" data-unique="cpnju901b" style="width: 750px; height: 343px;" width="650" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-1.thumb.png.9eb675a43038693cf39b0abe04c58f92.png"> </a>
</p>

<p>
	اسم المستخدم وكلمة السر المطلوبين هما نفس الاعتماديات الخاصة بالمستخدمين على الخادم، ونتأكد من تفعيل الخيار Reuse my password for privileged tasks قبل تسجيل الدخول، مما سيسمح بتنفيذ المهام الإدارية بعد تسجيل الدخول،
</p>

<h3>
	نظرة داخل Cockpit
</h3>

<p>
	بعد تسجيل الدخول لأول مرة ستظهر لنا صفحة النظرة العامة ضمن إعدادات الجهاز المحلي localhost.
</p>

<h4>
	نظرة عامة على النظام
</h4>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117503" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-2-2.png.81732ce12a810de17cda8de5b522f6f8.png" rel=""><img alt="واجهة نظام  Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117503" data-ratio="56.28" data-unique="03gpzeoin" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-2-2.thumb.png.762ce4de9007b7a078bd5a1b21bf2b61.png"> </a>
</p>

<h4>
	السجلات
</h4>

<p>
	ضمن قسم السجلات يمكن تصفية رسائل السجلات بناءًا على أهميتها بالمستويات التالية:
</p>

<ol>
	<li>
		الكل Everything
	</li>
	<li>
		الحالات الإسعافية فقط Only Emergency
	</li>
	<li>
		التحذيرات وما فوق Alert and above
	</li>
	<li>
		الحرجة وما فوق Critical and above
	</li>
	<li>
		الأخطاء وما فوق Error and above
	</li>
	<li>
		التحذيرات وما فوق Warning and above
	</li>
	<li>
		التنبيهات وما فوق Notice and above
	</li>
	<li>
		المعلومات وما فوق Info and above
	</li>
	<li>
		استكشاف الأخطاء وما فوق Debug and above
	</li>
</ol>

<p>
	افتراضيًا يتم إظهار السجلات بمستوى "الأخطاء وما فوق"، ويمكن تصفية الرسائل أيضًا بناءًا على الفترة الزمنية:
</p>

<ol>
	<li>
		حاليًا Current
	</li>
	<li>
		مؤخرًا Recent
	</li>
	<li>
		آخر 24 ساعة Last 24 hours
	</li>
	<li>
		آخر 7 أيام Last 7 days
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117504" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-3.png.117bac63650484032fada02e3d5071f0.png" rel=""><img alt="سجلات الأخطاء في  Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117504" data-ratio="55.90" data-unique="a5x6emxd2" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-3.thumb.png.d8f7b45a6db97eb24342ffd77c11f522.png"> </a>
</p>

<h4>
	التخزين
</h4>

<p>
	ضمن قسم التخزين يمكن رؤية نظرة عامة دقيقة عن حالة كل أجهزة التخزين، وهي مصنفة كالتالي:
</p>

<ol>
	<li>
		أنظمة الملفات Filesystems
	</li>
	<li>
		NFS المركبة على الخادم NFS Mounts
	</li>
	<li>
		سجلات التخزين Storage Logs
	</li>
	<li>
		أجهزة RAID ‏RAID Devices
	</li>
	<li>
		محركات الأقراص Drives
	</li>
	<li>
		أجهزة أخرى Other Devices
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117505" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-4.png.922f3dd04a44250573ce9893b9afd21c.png" rel=""><img alt="صفحة التخزين في  Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117505" data-ratio="56.28" data-unique="m5e8fyxe2" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-4.thumb.png.5b7f6688eb685b29b99a83cbc41ef0ae.png"> </a>
</p>

<p>
	يوجد أيضًا قسم خاص بسجلات التخزين، منفصل عن قسم السجلات العامة.
</p>

<h4>
	التشبيك
</h4>

<p>
	يمكننا الحصول على معلومات متعلقة بواجهات الشبكة:
</p>

<ol>
	<li>
		الواجهات Interfaces
	</li>
	<li>
		سجلات التشبيك Networking Logs
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117506" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-5.png.7377bcc70021c87d835e68ab47f3b934.png" rel=""><img alt="صفحة التشبيك في  Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117506" data-ratio="56.28" data-unique="xuvjosn2h" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-5.thumb.png.0979744c256c8b2d0ec7638b96a85229.png"> </a>
</p>

<p>
	سجلات التشبيك تشبه سجلات التخزين، ولكنها تعرض السجلات المتعلقة بحالات الشبكة فقط.
</p>

<h4>
	الحسابات
</h4>

<p>
	يعرض هذا القسم حسابات المستخدمين المسجلين ضمن نظام لينكس الخاص بالخادم، تمكنك هذه الواجهة من إنشاء وحذف المستخدمين.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117507" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-6.png.29631b01949b961de11652e3bb648851.png" rel=""><img alt="صفحة الحسابات في Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117507" data-ratio="56.28" data-unique="z0flcg2dc" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-6.thumb.png.1e325998657b0fecab2e19cc0d340d33.png"> </a>
</p>

<h4>
	الخدمات
</h4>

<p>
	تصنف كافة الخدمات ضمن نظام الخادم في ثلاثة أصناف إما فعالة أو معطلة أو ثابتة، يمكن تصفيتها بناءًا على:
</p>

<ol>
	<li>
		الوجهات Targets
	</li>
	<li>
		خدمات النظام System Services
	</li>
	<li>
		المقابس Sockets
	</li>
	<li>
		المؤقتات Timers
	</li>
	<li>
		المسارات Paths
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117508" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-7.png.e8c3ad0d58539f704b6c734efeb45d82.png" rel=""><img alt="صفحة الخدمات في  Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117508" data-ratio="56.28" data-unique="wh026ha2y" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-7.thumb.png.629ae4a3bf5bc1142a29ad92159b520c.png"> </a>
</p>

<h4>
	الطرفية
</h4>

<p>
	يمكن من خلال هذه الطرفية تنفيذ الأوامر، وفي حال كان لديك أمر طويل نسبيًا أحيانًا من المزعج استخدام طرفيات الويب مثل هذه، قد تواجه هذه المشكلة في طرفيات ويب أخرى مثل المتوفرة ضمن Linode المسماة Weblish و <a href="https://www.linode.com/docs/guides/using-the-linode-graphical-shell-glish/" rel="external nofollow">Glish</a>. لن تتمكن من نسخ الأمر ولصقه، بل ستضطر لكتابته يدويًا، تتميز طرفية Cockpit بأنها تتيح لنا ذلك.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117509" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-8.png.8bc9d78132e868c8099d610d56c906cd.png" rel=""><img alt="صفحة الطرفية في Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117509" data-ratio="56.28" data-unique="i2zux88on" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-8.thumb.png.536e15b67032087780f108fc624e81cd.png"> </a>
</p>

<h3>
	مراقبة حالة النظام
</h3>

<p>
	يوفر Cockpit أيضًا نظرة عامة أبسط عن الخادم ويعرض حالة الخادم بالوقت الحقيقي، وذلك ضمن قسم Dashboard
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117518" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard.png.fed83dc5915011102e9263304e66947b.png" rel=""><img alt="مراقبة حالة نظام أوبنتو 18.04 عبر Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117518" data-ratio="100.50" data-unique="6rr08lyqn" style="width: 200px; height: 201px;" width="279" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard.png.fed83dc5915011102e9263304e66947b.png"> </a>
</p>

<p>
	سنجد تصنيف حالات النظام ضمن عدة تبويبات وهي <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-%D9%88%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA%D9%87%D8%A7-%D9%81%D9%8A-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r1716/" rel="">CPU</a> والذاكرة و الشبكة و دخل/خرج الأقراص.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117515" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-disk-io-1.png.7f20102e01baf0c328769f8912bb6c75.png" rel=""><img alt="حالات نظام أوبنتو في Cockpit " class="ipsImage ipsImage_thumbnailed" data-fileid="117515" data-ratio="56.28" data-unique="e12y3vmzq" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-disk-io-1.thumb.png.bc577477dae5f070c12678c781074c3b.png"> </a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117517" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-network-1.png.420e9340a09873c27c01fb415854d3fc.png" rel=""><img alt="تبويب عرض حالات النظام في Cockpit " class="ipsImage ipsImage_thumbnailed" data-fileid="117517" data-ratio="56.28" data-unique="oipitoama" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-network-1.thumb.png.e01703d22d36b6ef1c5f2fbe5692d4fb.png"> </a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117516" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-memory-1.png.608dfcdc4e04a9b414301b0726912535.png" rel=""><img alt="تبويب عرض حالات النظام في أوبنتو 18.04 عبر Cockpit " class="ipsImage ipsImage_thumbnailed" data-fileid="117516" data-ratio="56.28" data-unique="5j6nmgljd" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-memory-1.thumb.png.0d50b6eed82e054f2a5d8e4abdb46d9c.png"> </a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117514" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-cpu-1.png.22e2f49947c057ee0c15333aee931e3b.png" rel=""><img alt="تبويب عرض حالات نظام أوبنتو في Cockpit " class="ipsImage ipsImage_thumbnailed" data-fileid="117514" data-ratio="56.28" data-unique="v41k4kau5" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-dashboard-cpu-1.thumb.png.7b76b666d031ddebdd90da348a84e3b5.png"> </a>
</p>

<h3>
	إضافة مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>
</h3>

<p>
	يمكن الضغط على اسم المستخدم في الزاوية اليمينية العليا ومن القائمة التي تظهر نختار الاستيثاق Authentication.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117513" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-authentication.png.dd29198d84f1dafa04dbfd3e2ac05fcf.png" rel=""><img alt="إضافة مفتاح SSH" class="ipsImage ipsImage_thumbnailed" data-fileid="117513" data-ratio="112.00" data-unique="jinrvx41d" style="width: 200px; height: auto;" width="200" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-authentication.png.dd29198d84f1dafa04dbfd3e2ac05fcf.png"> </a>
</p>

<p>
	في حال وجود <a href="https://academy.hsoub.com/devops/security/ssh/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-ssh-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D8%A7%D8%A1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD-r55/" rel="">مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> </a>ضمن المسار الافتراضي للمفاتيح سنلاحظ العثور عليه تلقائيًا، وإلا يمكن إضافته وتفعيله يدويًا، وهي نفس العملية التي ننفذها عادة عبر الطرفية، وإذا كنا نستخدم عبارة passphrase خاصة بـ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> محليًا، يجب إدخالها بعد الضغط على الزر الموضح في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117523" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-ssh.png.a45f409c6696d349857cdc9d55889630.png" rel=""><img alt="تفعيل الإعدادات الحالية لمفتاح SSH" class="ipsImage ipsImage_thumbnailed" data-fileid="117523" data-ratio="48.39" data-unique="jw9sygv3t" style="width: 620px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-ssh.thumb.png.fbc240619798389b5af569a4ea801c37.png"> </a>
</p>

<h3>
	إضافة خوادم أخرى إلى لوحة Cockpit
</h3>

<p>
	من اللوحة البسيطة نفسها يمكننا إضافة خوادم أخرى للمراقبة، قبل ذلك يجب التأكد من المستلزمات التالية:
</p>

<ol>
	<li>
		عند تسجيل الدخول إلى Cockpit فعلنا الخيار Reuse my password for privileged tasks.
	</li>
	<li>
		تم تثبيت Cockpit على كل الخوادم المراد إضافتها.
	</li>
	<li>
		تم إضافة وتفعيل مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>.
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117510" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-add-server.png.46b4b271a8fa7fcbc0296e679a2311e4.png" rel=""><img alt="إضافة خوادم أخرى إلى لوحة Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117510" data-ratio="46.28" data-unique="im7v6ay4x" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-add-server.thumb.png.f70f085a5306158909db034b947406ea.png"> </a>
</p>

<p>
	عند إضافة عنوان الخادم المراد مراقبته يجب استخدام منفذ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> الخاص بالخادم البعيد ضمن العنوان بدلًا من المنفذ 9090 السابق الخاص بواجهة Cockpit، حيث يكون رقم المنفذ افتراضيًا هو 22.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117512" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-adding-server.png.da85ee76feb106fcfcbad1679902d5ae.png" rel=""><img alt="استخدام منفذ ssh بلوحة Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117512" data-ratio="33.38" data-unique="9f5jf4e77" style="width: 650px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-adding-server.thumb.png.2fc87f931290ed99c3f2a73e4cd0d60f.png"> </a>
</p>

<p>
	بعد الضغط على زر الإضافة "Add" قد يظهر الخطأ التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117519" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-false-alarm-1.png.63373e35e93ed16a2cb446c8c2dfc792.png" rel=""><img alt="إضافة خوادم أخرى إلى لوحة Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117519" data-ratio="46.62" data-unique="affiz8fc9" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-false-alarm-1.thumb.png.8991382c9f3c0fcbc4e216363606cb7d.png"> </a>
</p>

<p>
	السبب هو أن Cockpit يحاول الدخول إلى الخادم البعيد باستخدام نفس اعتماديات النظام الحالي، حيث يمكننا ضمن مربع الخطأ الظاهر كما توضح الصورة السابقة تعديل اسم المستخدم إلى اسم مستخدم موجود على الخادم البعيد، وبعد ذلك وعند الضغط على زر تسجيل الدخول سيتم إضافة الخادم البعيد.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117511" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-added-server-1.png.4f94064b3a1951ed4e53c2c898b5bdaf.png" rel=""><img alt="طريقة إضافة خوادم أخرى إلى لوحة Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117511" data-ratio="38.85" data-unique="ah0crzf9w" style="width: 780px; height: 303px;" width="650" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-added-server-1.thumb.png.dc51a369ebf112bd8453d42e261b44a1.png"> </a>
</p>

<h3>
	إزالة خوادم من Cockpit
</h3>

<p>
	لإزالة الخوادم المضافة مسبقًا يمكننا الضغط على أيقونة تعديل الخادم Edit Server:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117521" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-remove-server-1.png.d706642ebc0adbe4d82e5dd4e922b6c3.png" rel=""><img alt="كيفية إزالة الخوادم من Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117521" data-ratio="18.46" data-unique="j2ks14m8r" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-remove-server-1.thumb.png.bb383e0e4065361d3f8b91f927314d16.png"> </a>
</p>

<p>
	بعد الضغط عليها يمكن إزالة الخوادم المضافة التي يظهر بجانبها علامة الحمراء، نلاحظ أن زر الإزالة للخادم الحالي معطل، لأننا لا نستطيع إزالة الخادم المتصلين به حاليًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117522" href="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-remove-server-2.png.b72aa2307b13a2aa3047b48e44e96392.png" rel=""><img alt="إزالة خوادم من Cockpit" class="ipsImage ipsImage_thumbnailed" data-fileid="117522" data-ratio="15.64" data-unique="vmovk15lk" style="width: 780px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2023_01/cockpit-remove-server-2.thumb.png.e63172a75da687d19140773afa4d5945.png"> </a>
</p>

<p>
	إزالة الخادم تعني إزالته من لوحة Cockpit فقط، ولا يزال Cockpit مثبتًا على ذلك الخادم ويمكن استخدامه والوصول إليه عبر عنوان IP للخادم ورقم المنفذ 9090، ولإزالة Cockpit نهائيًا من ذلك الخادم يجب إلغاء تثبيت Cockpit منه.
</p>

<h2>
	خاتمة
</h2>

<p>
	رأينا بساطة واجهة Cockpit وكم معلومات المراقبة التي توفرها هذه الأداة، فقد يخطر في بالك <a href="https://hub.docker.com/r/cockpit/ws" rel="external nofollow">تثبيت Cockpit كحاوية دوكر</a> على الخادم، لكنه غير مصمم لذلك، الاقتباس من GitHub في <a href="https://github.com/cockpit-project/cockpit/issues/10458#issuecomment-434608464" rel="external nofollow">هذا الرابط</a> يوضح ذلك تمامًا:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"الطريقة التي صُمم بها Cockpit تحتاج لأن يعمل على جهاز كامل وليس ضمن إجرائية تطبيق دوكر واحدة".
	</p>
</blockquote>

<p>
	لكن يمكنك تجربة ذلك من خلال <a href="https://hub.docker.com/r/markdegroot/cockpit-ubuntu" rel="external nofollow">صورة دوكر غير الرسمية</a> له، تتضمن أيضًا إعدادات دوكر compose لتمكنك من تشغيله.
</p>

<p>
	يفيد Cockpit من ليس لديهم الخبرة الكافية باستخدام <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر الأوامر</a>، ويساعد أيضًا مدراء الأنظمة في إلقاء نظرة عامة على عدة خوادم لينكس معًا ضمن لوحة واحدة.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/cockpit/" rel="external nofollow">Using Cockpit to Monitor and Manage Multiple Linux Servers Graphically From a Web Browser</a> لصاحبه Avimanyu Bandyopadhyay.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مدخل إلى خادم الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AE%D8%A7%D8%AF%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-checkmk-r584/" rel="">مراقبة خادم لينكس باستخدام أداة Checkmk</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/4-%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%85%D9%86-%D8%A3%D8%AC%D9%84-%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r523/" rel="">4 أدوات مفتوحة المصدر من أجل مراقبة نظام لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">683</guid><pubDate>Wed, 08 Feb 2023 17:00:00 +0000</pubDate></item><item><title>10 &#x623;&#x645;&#x62B;&#x644;&#x629; &#x639;&#x645;&#x644;&#x64A;&#x629; &#x639;&#x644;&#x649; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x623;&#x62F;&#x627;&#x629; Grep &#x62A;&#x641;&#x64A;&#x62F; &#x627;&#x644;&#x645;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x646;</title><link>https://academy.hsoub.com/devops/linux/10-%D8%A3%D9%85%D8%AB%D9%84%D8%A9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D8%AF%D8%A7%D8%A9-grep-%D8%AA%D9%81%D9%8A%D8%AF-%D8%A7%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86-r679/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/965274538_10-----Grep--.jpg.67de20f0f5facd79f3737c1b934fce19.jpg" /></p>
<p>
	قد تشعر كمبرمج بالضياع عند استكشافك لأول مرة شيفرة مصدرية تحتوي على الآلاف من الأسطر، في هذه الحالة سيفيدك استخدام <a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel="">الأداة grep</a> كثيرًا لحل تلك المشكلة، لذا سنستعرض في هذا المقال عدة طرق مفيدة لاستخدام الأمر <code>grep</code> على <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">لينكس</a> مع أمثلة عليها.
</p>

<h2>
	أمثلة واقعية ومفيدة للأمر grep في لينكس
</h2>

<p>
	يصف الدليل <code>man</code> الأداة <code>grep</code> على أنها أداة لطباعة الأسطر المُطابقة لنمط ما، قد ينتقص ذلك الوصف من الإمكانيات والاستخدامات العديدة للأمر <code>grep</code>، والتي تعد من أفضل الأدوات ضمن حزمة أدوات نظام يونكس، حيث ستجد نفسك بحاجة إليها في الكثير من الحالات عند تعاملك مع الملفات النصية.
</p>

<p>
	تعد الأمثلة الواقعية أفضل مُعلم، سنوضح الاستخدامات المتعددة للأداة <code>grep</code> بتطبيق أمثلتنا في هذا المقال على الشيفرة المصدرية للمكتبة <a href="https://github.com/asciidoctor/asciidoctor.js" rel="external nofollow">Asciidoctor.js</a>، يمكن تنزيل الشيفرة المصدرية للمكتبة من Github واختيار نفس الإصدار الذي تم تطبيق الأمثلة في هذا المقال عليه، وذلك للحصول على نتائج مطابقة للأمثلة المذكورة خلال تطبيق الأمثلة، يمكنك تنفيذ الأوامر التالية لتحميل الشيفرة المصدرية محليًا وتحديد الإصدار المطلوب العمل ضمنه:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_8" style=""><span class="pln">git clone https</span><span class="pun">:</span><span class="com">//github.com/asciidoctor/asciidoctor.js</span><span class="pln">
cd asciidoctor</span><span class="pun">.</span><span class="pln">js
git checkout v1</span><span class="pun">.</span><span class="lit">5.6</span><span class="pun">-</span><span class="pln">rc</span><span class="pun">.</span><span class="lit">1</span></pre>

<h3>
	1. الاستخدام الأساسي بالبحث عن نص
</h3>

<p>
	توفر Asciidoctor.js دعمًا <a href="https://ar.wikipedia.org/wiki/%D9%86%D8%A7%D8%B4%D8%B1%D9%88%D9%86_(%D9%85%D8%AD%D8%B1%D9%83_%D8%AC%D8%A7%D9%81%D8%A7_%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA)" rel="external nofollow">لمحرك جافاسكريبت Nashorn</a> لمنصة جافا، يمكننا البحث عن أماكن ذكر ذلك المحرك ضمن الشيفرة المصدرية للتعرف ولاستكشاف طريقة استخدام المكتبة له، يمكننا مثلًا البحث ضمن ملف توصيف الاعتماديات package.json عن كل ذكر لاسم المحرك Nashorn كالتالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_10" style=""><span class="pln">$ grep nashorn package</span><span class="pun">.</span><span class="pln">json
    </span><span class="str">"test"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"node npm/test/builder.js &amp;&amp; node npm/test/unsupported-features.js &amp;&amp; node npm/test/jasmine-browser.js &amp;&amp; node npm/test/jasmine-browser-min.js &amp;&amp; node npm/test/jasmine-node.js &amp;&amp; node npm/test/jasmine-webpack.js &amp;&amp; npm run test:karmaBrowserify &amp;&amp; npm run test:karmaRequirejs &amp;&amp; node npm/test/nashorn.js"</span><span class="pun">,</span></pre>

<p>
	كما نلاحظ يوجد عدة اختبارات متعلقة بـ Nashorn، في المثال التالي سنحاول البحث أكثر عن استخدامات ذلك المحرك.
</p>

<h3>
	2. بحث غير حساس لحالة الأحرف ضمن مجموعة من الملفات
</h3>

<p>
	يمكننا البحث ضمن ملفات الاختبار التي وجدنا ذكر لها في المثال السابق، التي تقع ضمن المجلد ‎./npm/test/‎ والتي تحوي على ذكر مباشر لكلمة Nashorn، في هذه الحالة البحث الغير حساس لحالة الأحرف أفضل، بحيث ستظهر لنا جميع حالات ذكر اسم المكتبة مثل "nashorn" و"Nashorn" أو أي شكل آخر للكلمة مؤلف من حروف كبيرة وصغيرة، وذلك باستخدام الخيار <code>‎-i</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_12" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">i nashorn npm</span><span class="pun">/</span><span class="pln">test</span><span class="com">/*.js
npm/test/nashorn.js:const nashornModule = require('../module/nashorn');
npm/test/nashorn.js:log.task('Nashorn');
npm/test/nashorn.js:nashornModule.nashornRun('jdk1.8.0');</span></pre>

<p>
	نلاحظ من النتائج التي ظهرت فائدة البحث الغير حساس لحالة الأحرف في تلك الحالات، حيث لم يظهر في المثال الأول ضمن النتائج العبارة التالية <code>‎‎‎require('../module/nashorn')‎</code>، سنعاين هذا الملف بالتفصيل لاحقًا.
</p>

<h3>
	3. البحث عن الملفات الغير مطابقة
</h3>

<p>
	سنحاول معرفة ما إذا كان يوجد ملفات لا تتعلق بمحرك Nashorn ضمن المجلد npm/test/‎، يمكننا عكس نتيجة البحث والاستفادة من خيار طباعة الملفات الغير مطابقة لشرط البحث <code>‎-L</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_14" style=""><span class="pln">sh$ grep </span><span class="pun">-</span><span class="pln">iL nashorn npm</span><span class="pun">/</span><span class="pln">test</span><span class="com">/*
npm/test/builder.js
npm/test/jasmine-browser-min.js
npm/test/jasmine-browser.js
npm/test/jasmine-node.js
npm/test/jasmine-webpack.js
npm/test/unsupported-features.js</span></pre>

<p>
	نلاحظ كيف أظهر لنا الأمر <code>grep</code> باستخدام الخيار <code>‎-L</code> ضمن الخرج أسماء تلك الملفات فقط، لا تحوي كل تلك الملفات على أي ذكر للنص "nashorn" ضمنها (بغض النظر عن حالة الأحرف للكلمة)، لا يعني ذلك أن تلك الملفات لا تتعلق بالمحرك nashorn، بل هي فقط لا تحوي على أحرف تلك الكلمة متتالية معًا.
</p>

<h3>
	4. البحث عن الأنماط ضمن الملفات المخفية والمجلدات الفرعية تكراريًا
</h3>

<p>
	استخدمنا في آخر مثالين نمط glob لتحديد الملفات التي نريد من الأمر <code>grep</code> البحث ضمنها، لكن استخدام رمز النجمة ("*") يمنعنا من البحث ضمن الملفات المخفية، وكذلك ضمن الملفات الموجودة داخل المجلدات الفرعية، يمكن حل تلك المشكلة بدمج الأمر <code>grep</code> مع أمر البحث عن الملفات find بدلًا من الاعتماد على تمرير نمط glob الخاص بالصَدفة بإحدى الطريقتين:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_16" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">الطريقة</span><span class="pln"> </span><span class="pun">التالية</span><span class="pln"> </span><span class="pun">غير</span><span class="pln"> </span><span class="pun">فعالة،</span><span class="pln"> </span><span class="pun">ستولد</span><span class="pln"> </span><span class="pun">إجرائية</span><span class="pln"> </span><span class="pun">جديدة</span><span class="pln"> </span><span class="pun">لكل</span><span class="pln"> </span><span class="pun">ملف</span><span class="pln">
$ find npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln"> </span><span class="pun">-</span><span class="pln">type f </span><span class="pun">-</span><span class="pln">exec grep </span><span class="pun">-</span><span class="pln">iL nashorn \{</span><span class="pun">}</span><span class="pln"> \;
</span><span class="pun">#</span><span class="pln"> </span><span class="pun">الطريقة</span><span class="pln"> </span><span class="pun">التالية</span><span class="pln"> </span><span class="pun">تسبب</span><span class="pln"> </span><span class="pun">مشاكل</span><span class="pln"> </span><span class="pun">للملفات</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">يحوي</span><span class="pln"> </span><span class="pun">اسمها</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">فراغ</span><span class="pln">
$ grep </span><span class="pun">-</span><span class="pln">iL nashorn $</span><span class="pun">(</span><span class="pln">find npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln"> </span><span class="pun">-</span><span class="pln">type f</span><span class="pun">)</span></pre>

<p>
	لكل من الطريقتين السابقتين مساوؤها كما هو مذكور ضمن التعليقات فوق الأوامر، فلحل مشكلة أسماء الملفات التي تحتوي على فراغ يمكنك البحث أكثر عن كيفية استخدام الخيار <code>grep -z</code> مع الخيار <code>‎-print0</code> للأمر <code>find</code>،لكن الحل الأمثل يكون باستخدام خيار البحث التكراري<code>‎-r</code> للأمر <code>grep</code>، وعندها يمكننا تحديد المجلد الجذر الذي نريد البحث ضمنه فقط، بدلًا من تمرير قائمة بأسماء الملفات المراد البحث فيها، سيبحث الأمر <code>grep</code> ضمن كل الملفات في المجلد المحدد، بما فيها المجلدات المخفية، ومن ثم سينزل تكراريًا إلى داخل المجلدات الفرعية ويعيد العملية:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_18" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irL nashorn npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">npm</span><span class="pun">/</span><span class="pln">
npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">builder</span><span class="pun">.</span><span class="pln">js
npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">jasmine</span><span class="pun">-</span><span class="pln">browser</span><span class="pun">-</span><span class="pln">min</span><span class="pun">.</span><span class="pln">js
npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">jasmine</span><span class="pun">-</span><span class="pln">browser</span><span class="pun">.</span><span class="pln">js
npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">jasmine</span><span class="pun">-</span><span class="pln">node</span><span class="pun">.</span><span class="pln">js
npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">jasmine</span><span class="pun">-</span><span class="pln">webpack</span><span class="pun">.</span><span class="pln">js
npm</span><span class="pun">/</span><span class="pln">test</span><span class="pun">/</span><span class="pln">unsupported</span><span class="pun">-</span><span class="pln">features</span><span class="pun">.</span><span class="pln">js</span></pre>

<p>
	يمكن باستخدام هذا الخيار البحث أيضًا ضمن المجلد الأب npm لمعرفة الملفات المتعلقة بالمحرك Nashorn المغايرة لملفات الاختبار السابقة كالتالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_20" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irL nashorn npm</span><span class="pun">/</span></pre>

<p>
	يمكنك اختبار الأمر السابق بنفسك ومشاهدة النتيجة، بحيث سيظهر لك نتائج أكثر.
</p>

<h3>
	5. تصفية الملفات بأسمائها باستخدام التعابير النمطية
</h3>

<p>
	كما لاحظنا سابقًا وجود ملفات اختبار متعلقة بالمحرك Nashorn ضمن ملفات المشروع، وبما أن محرك Nashorn مكتوب في <a href="https://academy.hsoub.com/programming/java/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%85%D8%A7-%D9%87%D9%8A%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-java-r1515/" rel="">لغة جافا</a>، فيمكننا استكشاف ملفات جافا المصدرية ضمن المشروع التي تحوي ذكرًا صريحًا لاسم المحرك، وهناك طريقتين لتنفيذ ذلك بحسب إصدار <code>grep</code> المستخدَم، الطريقة الأولى باستخدام <code>grep</code> للعثور على الملفات التي تحوي النمط "nashorn" ثم تمرير نتيجة الأمر الأول إلى أمر <code>grep</code> آخر يُصفي ملفات جافا فقط كالتالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3989_22" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">ir nashorn </span><span class="pun">./</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> grep </span><span class="str">"^[^:]*\.java"</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    </span><span class="typ">ScriptEngine</span><span class="pln"> engine </span><span class="pun">=</span><span class="pln"> engineManager</span><span class="pun">.</span><span class="pln">getEngineByName</span><span class="pun">(</span><span class="str">"nashorn"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    engine</span><span class="pun">.</span><span class="pln">eval</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">FileReader</span><span class="pun">(</span><span class="str">"./spec/nashorn/asciidoctor-convert.js"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">BasicJavascriptWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">BasicJavascriptWithNashorn</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">BasicJavascriptWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    </span><span class="typ">ScriptEngine</span><span class="pln"> engine </span><span class="pun">=</span><span class="pln"> engineManager</span><span class="pun">.</span><span class="pln">getEngineByName</span><span class="pun">(</span><span class="str">"nashorn"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">BasicJavascriptWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    engine</span><span class="pun">.</span><span class="pln">eval</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">FileReader</span><span class="pun">(</span><span class="str">"./spec/nashorn/basic.js"</span><span class="pun">));</span></pre>

<p>
	النصف الأول من الأمر تم شرحه مسبقًا، سنشرح القسم الثاني من الأمر وهو "‎^[\^:]*\.java"، حيث يعتبر الأمر <code>grep</code> افتراضيًا نمط البحث المٌمرر له <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D9%86%D9%85%D8%B7%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r1374/" rel="">تعبيرًا نمطيًا</a>، إلا إذا استخدمنا الخيار <code>‎-F</code>، مما يعني إضافةً لذكر نص صريح لمطابقته حرفيًا، يمكن استخدام محارف وصفية خاصة بالتعابير النمطية للتعبير عن أنماط بحث أعقد، فالنمط المستخدم في مثالنا تُعبر أقسامه عن التالي:
</p>

<ul>
	<li>
		<code>^</code> بداية سطر
	</li>
	<li>
		<code>‎[^:]*‎</code> متبوعة بسلسلة من المحارف لا تحوي على النقطتين (":").
	</li>
	<li>
		<code>‎\.‎</code> متبوعة بنقطة، ولأن النقطة تملك معنى مميز في التعابير النمطية يجب حمايتها باستخدام خط مائل عكسي، مما يعني مطابقة النقطة حرفيًا.
	</li>
	<li>
		<code>java</code> متبوعة بكلمة java.
	</li>
</ul>

<p>
	بما أن <code>grep</code> يفصل بين اسم الملف وسياق نتيجة البحث بمحرف النقطتين (":")، يمكننا الاستفادة من ذلك وإبقاء أسماء الملفات التي تنتهي بالامتداد<code>‎.java</code> فقط في قسم اسم الملف، ويجب الانتباه إلى أن ذلك النمط سيُطابق أيضًا الملفات ذات الامتداد <code>‎.javascript</code>، يمكنك محاولة حل تلك المشكلة بنفسك إن أردت.
</p>

<h3>
	6. تصفية الملفات بأسمائها باستخدام grep
</h3>

<p>
	التعابير النمطية قوية جدًا، لكن مثالنا بسيط ولا يحتاج لكل هذا التعقيد، في المثال السابق بحثنا في جميع الملفات عن النمط "nashorn" وتجاهلنا العديد من النتائج بعد تمريرها للقسم الثاني من الأمر، يوجد حل لتلك المشكلة في إصدار جنو GNU من الأمر <code>grep</code> الذي يكون مثبتًا عادةً ضمن أنظمة لينكس، وهو باستخدام الخيار <code>‎--include</code> الذي يوجّه الأمر <code>grep</code> للبحث ضمن الملفات التي تتطابق أسمائها مع نمط glob الممرر فقط:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3989_24" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">ir nashorn </span><span class="pun">./</span><span class="pln"> </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.java'</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    </span><span class="typ">ScriptEngine</span><span class="pln"> engine </span><span class="pun">=</span><span class="pln"> engineManager</span><span class="pun">.</span><span class="pln">getEngineByName</span><span class="pun">(</span><span class="str">"nashorn"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">AsciidoctorConvertWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    engine</span><span class="pun">.</span><span class="pln">eval</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">FileReader</span><span class="pun">(</span><span class="str">"./spec/nashorn/asciidoctor-convert.js"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">BasicJavascriptWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">BasicJavascriptWithNashorn</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">BasicJavascriptWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    </span><span class="typ">ScriptEngine</span><span class="pln"> engine </span><span class="pun">=</span><span class="pln"> engineManager</span><span class="pun">.</span><span class="pln">getEngineByName</span><span class="pun">(</span><span class="str">"nashorn"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">./</span><span class="pln">spec</span><span class="pun">/</span><span class="pln">nashorn</span><span class="pun">/</span><span class="typ">BasicJavascriptWithNashorn</span><span class="pun">.</span><span class="pln">java</span><span class="pun">:</span><span class="pln">    engine</span><span class="pun">.</span><span class="pln">eval</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">FileReader</span><span class="pun">(</span><span class="str">"./spec/nashorn/basic.js"</span><span class="pun">));</span></pre>

<h3>
	7. البحث عن كلمات
</h3>

<p>
	استُخدم في مشروع Asciidoctor.js عدة لغات برمجة أساسها <a href="https://academy.hsoub.com/programming/ruby/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-ruby-r636/" rel="">لغة روبي</a>، ولاستخدامه في <a href="https://academy.hsoub.com/programming/javascript/%d9%85%d8%a7-%d9%87%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7-%d8%b3%d9%83%d8%b1%d9%8a%d8%a8%d8%aa-%d8%9f-r524/" rel="">جافاسكريبت</a> يجب أن يُصرّف باستخدام <a href="https://opalrb.com/" rel="external nofollow">Opal</a>، وهو مُصرّف مصدر إلى مصدر من روبي إلى جافاسكريبت، يمكننا محاولة فهم <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">الواجهة البرمجية <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr></a> الخاصة بـ Opal، عبر البحث عن كل ذكر للكائن العام <code>Opal</code> ضمن ملفات جافاسكريبت في المشروع، قد يورد ذكر الكائن ضمن عبارة إسناد (<code>‎Opal =‎</code>) أو ضمن عبارة وصول للخواص الأعضاء ضمن الكائن (<code>Opal‎.‎</code>) أو ضمن سياق آخر، حيث يمكن استخدام التعابير النمطية للبحث عن ذلك، لكن الأمر <code>grep</code> يوفّر حلولًا أخف من ذلك لمثل تلك المشكلات الشائعة، فباستخدام الخيار <code>‎-w</code> سيتم مطابقة الكلمات فقط التي تُعرّف تقنيًا بأنها أنماط مسبوقة ومتبوعة بغير محارف الكلمات، تلك المحارف تكون إما محرف بداية السطر أو نهاية السطر أو أي محرف آخر ليس بحرف أو رقم أو شرطة سفلية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_29" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irw </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="pun">...</span></pre>

<h3>
	8. تلوين الخرج
</h3>

<p>
	لم ننسخ خرج الأمر السابق لوجود الكثير من النتائج، لكن يمكن تحسين الخرج الكثيف مثل هذا بتلوينه لتسهيل فهمه، في حال لم تكن هذه الميزة مُفعلة افتراضيًا على نظام التشغيل، يمكننا تفعيلها يدويًا لخرج الأمر الحالي بتمرير خيار جنو <code>‎--color‎</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3989_31" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irw </span><span class="pun">--</span><span class="pln">color</span><span class="pun">=</span><span class="kwd">auto</span><span class="pln"> </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="pun">...</span></pre>

<p>
	سيظهر نفس خرج الأمر السابق، لكن مع تلوين عبارة البحث ضمن النتيجة.
</p>

<h3>
	9. استخراج عدد الأسطر أو الملفات ضمن البحث
</h3>

<p>
	يمكننا معرفة طول نتيجة الأمر السابق الذي لم نعرضه كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_33" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irw </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> wc </span><span class="pun">-</span><span class="pln">l
</span><span class="lit">86</span></pre>

<p>
	ما يعني أن لدينا 86 سطرًا يُطابق عبارة البحث ضمن كل الملفات التي جرى البحث ضمنها، يمكننا أيضًا معرفة عدد تلك الملفات التي استخرجت منها النتائج، يمكن باستخدام الخيار <code>‎-l</code> تحديد خرج الأمر <code>grep</code> بحيث يعرض لنا أسماء الملفات التي احتوت على نتيجة فقط بدلًا من أسطر النتائج، يمكننا بذلك معرفة عدد تلك الملفات كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_35" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irwl </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> wc </span><span class="pun">-</span><span class="pln">l
</span><span class="lit">20</span></pre>

<p>
	قد يذكرنا هذا الخيار بالخيار <code>‎-L‎</code> بحرف كبير، حيث تدل عادة الأحرف الكبيرة والصغيرة للخيارات على خيارات متضادة، فيُظهر لنا الخيار <code>‎-l</code> أسماء الملفات المطابقة للبحث، بينما يظهر الخيار <code>‎-L</code> الملفات الغير مطابقة للبحث، لمثال آخر على ذلك يمكنك الرجوع إلى الدليل والتحقق من الفرق بين الخيارين <code>‎-h</code> و <code>‎-H</code>، وبالعودة لنتيجة بحثنا حصلنا على نتيجتين هما مطابقة 86 سطرًا، و 20 مِلفًا، يمكننا أيضًا معرفة طبيعة توزع تلك الأسطر ضمن تلك الملفات، فباستخدام الخيار <code>‎-c</code> للأمر <code>grep</code> سيتم عد الأسطر المُطابقة ضمن كل ملف على حدى، بما فيها الملفات التي لا تحوي على نتائج:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_39" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irwc </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="pun">...</span></pre>

<p>
	يحتاج خرج الأمر السابق لمعالجة لاستخراج المعلومات المطلوبة، لأن ترتيب النتائج ضمنه تكون بحسب ترتيب معالجة الملفات، ويتضمن أيضًا الملفات التي لا تحوي على نتائج وهو ما لا يهمنا في هذه الحالة، يمكن حل المشكلة الأخيرة بسهولة عبر تصفية الملفات التي تحوي 0 نتائج كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_37" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irwc </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> grep </span><span class="pun">-</span><span class="pln">v </span><span class="str">':0$'</span></pre>

<p>
	ولترتيب النتائج يمكننا تمرير النتيجة النهائية إلى أمر الترتيب <code>sort</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_41" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irwc </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> grep </span><span class="pun">-</span><span class="pln">v </span><span class="str">':0$'</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> sort </span><span class="pun">-</span><span class="pln">t</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="pln">k2n</span></pre>

<p>
	يمكنك الرجوع إلى دليل الأمر <code>sort</code> لمعرفة معاني الخيارات التي استخدمناها في المثال السابق.
</p>

<h3>
	10. إيجاد الفرق بين نتيجتي بحث
</h3>

<p>
	استخدمنا في أحد الأمثلة السابقة الكلمة ".Opal"، في حال بحثنا في نفس تلك الملفات هذه المرة عن الكلمة "‎Opal,‎" سنحصل على عشرين نتيجة إضافية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_43" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">irw </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> wc </span><span class="pun">-</span><span class="pln">l
</span><span class="lit">86</span><span class="pln">
$ grep </span><span class="pun">-</span><span class="pln">ir </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> wc </span><span class="pun">-</span><span class="pln">l
</span><span class="lit">105</span></pre>

<p>
	يمكننا استخراج الفرق بين عمليتي البحث، وما هي الأسطر التي تحتوي على أحرف كلمة opal الأربعة متفرقة من دون أن تشكل كلمة واحدة؟، فمن الصعب الإجابة على هذا السؤال لأنه يمكن لنفس السطر أن يحوي كلًا من كلمة opal وكلمة أكبر منها تحوي حروفها الأربعة، يمكن محاولة الإجابة على هذا السؤال مبدأيًا بتمرير النتيجة إلى أمر آخر كما فعلنا في مثال سابق:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3989_45" style=""><span class="pln">$ grep </span><span class="pun">-</span><span class="pln">ir </span><span class="pun">--</span><span class="pln">include</span><span class="pun">=</span><span class="str">'*.js'</span><span class="pln"> </span><span class="typ">Opal</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> grep </span><span class="pun">-</span><span class="pln">ivw </span><span class="typ">Opal</span><span class="pln">
</span><span class="pun">./</span><span class="pln">npm</span><span class="pun">/</span><span class="pln">examples</span><span class="pun">.</span><span class="pln">js</span><span class="pun">:</span><span class="pln">  </span><span class="kwd">const</span><span class="pln"> opalBuilder </span><span class="pun">=</span><span class="pln"> </span><span class="typ">OpalBuilder</span><span class="pun">.</span><span class="pln">create</span><span class="pun">();</span><span class="pln">
</span><span class="pun">./</span><span class="pln">npm</span><span class="pun">/</span><span class="pln">examples</span><span class="pun">.</span><span class="pln">js</span><span class="pun">:</span><span class="pln">  opalBuilder</span><span class="pun">.</span><span class="pln">appendPaths</span><span class="pun">(</span><span class="str">'build/asciidoctor/lib'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">./</span><span class="pln">npm</span><span class="pun">/</span><span class="pln">examples</span><span class="pun">.</span><span class="pln">js</span><span class="pun">:</span><span class="pln">  opalBuilder</span><span class="pun">.</span><span class="pln">appendPaths</span><span class="pun">(</span><span class="str">'lib'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">...</span></pre>

<p>
	يمكنك أيضًا محاولة البحث واستكشاف استخدامات الكائن <code>opalBuilder</code> بنفسك.
</p>

<h2>
	ختامًا
</h2>

<p>
	تنفيذك لعدد من أوامر <a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel=""><code>grep</code></a> ضمن مشروع جديد لن يمكنك من فهم ترتيب ومعمارية المشروع وبنية الشيفرات ضمنه، ولكن ستتمكن من إجراء تحليلات بسيطة مشابهة للأمثلة التي ذكرناها تفيدك في التعرف على المشاريع الجديدة، رأينا قوة الأمر <code>grep</code> واستخداماته المتعددة التي يمكنك إضافتها إلى مهاراتك.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/grep-command-examples/" rel="external nofollow">‎10 Practical Grep Command Examples for Developers</a> لصاحبه Sylvain Leroux.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel="">دليل استخدام الأمر grep في لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%88%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-grep-%D9%88egrep-fgrep-r320/" rel="">ما الفروق بين الأوامر grep و </a><a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%88%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-grep-%D9%88egrep-fgrep-r320/" rel="">egrep fgrep</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D8%B6%D9%85%D9%86-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D9%85%D8%AC%D9%84%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D8%AF%D8%A7%D8%A9-grep-r678/" rel="">البحث ضمن جميع الملفات والمجلدات في لينكس باستخدام الأداة Grep</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-rg-%D8%A8%D8%AF%D9%8A%D9%84-grep-%D8%A7%D9%84%D9%85%D8%AD%D8%B3%D9%86-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r677/" rel="">تعلم استخدام الأمر rg بديل grep المحسن في لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">679</guid><pubDate>Tue, 24 Jan 2023 17:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x628;&#x62D;&#x62B; &#x636;&#x645;&#x646; &#x62C;&#x645;&#x64A;&#x639; &#x627;&#x644;&#x645;&#x644;&#x641;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x645;&#x62C;&#x644;&#x62F;&#x627;&#x62A; &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; grep</title><link>https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D8%B6%D9%85%D9%86-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D9%85%D8%AC%D9%84%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-grep-r678/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/1173828096_------Grep.jpg.ba53d51a3455bde9499b592615e8e42d.jpg" /></p>
<p>
	تعد <a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel="">Grep</a> الأداة الأفضل للبحث ضمن محتوى الملفات في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام التشغيل لينكس</a>، حيث لها استخدامات عديدة، ومن أشيع تلك الاستخدامات هو البحث ضمن ملف ما عن مصطلح، بالصيغة التالية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_9" style=""><span class="pln">grep search_term filename</span></pre>

<p>
	وللبحث ضمن جميع الملفات ضمن مجلد ما يمكن تنفيذ الأمر كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_11" style=""><span class="pln">grep search_term </span><span class="pun">*</span></pre>

<p>
	المشكلة هنا أن عملية البحث ستتم على الملفات ضمن المجلد الحالي فقط، ولن يتم البحث ضمن المجلدات الفرعية له، يمكن حل تلك المشكلة بإجبار البحث ضمن كل الملفات وكل المجلدات الفرعية تكراريًا باستخدام الخيار <code>r-</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_13" style=""><span class="pln">grep </span><span class="pun">-</span><span class="pln">r search_term </span><span class="pun">.</span><span class="pln"> </span></pre>

<p>
	يمكن ذكر اسم المجلد المراد البحث ضمنه بشكل صريح أيضًا في حال لم يكن هو المجلد الحالي كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_15" style=""><span class="pln">grep </span><span class="pun">-</span><span class="pln">r search_term directory_path</span></pre>

<p>
	سنوضح استخدامات <code>grep</code> من خلال أمثلة عملية ضمن الفقرة التالية.
</p>

<h2>
	البحث ضمن جميع ملفات مجلد ما
</h2>

<p>
	يوضح خرج الأمر <code>tree</code> التالي بنية الملفات والمجلدات التي سنطبق عليها الأمثلة في هذا المقال، بحيث تحوي جميع الملفات الموضحة عبارة "simple"، فيما عدا الملف empty.txt فهو فارغ:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_20" style=""><span class="pln">abhishek@LHB</span><span class="pun">:~/</span><span class="pln">scripts$ tree
</span><span class="pun">.</span><span class="pln">
</span><span class="pun">├──</span><span class="pln"> dir1
</span><span class="pun">│</span><span class="pln">   </span><span class="pun">└──</span><span class="pln"> new_script</span><span class="pun">.</span><span class="pln">sh
</span><span class="pun">├──</span><span class="pln"> dir2
</span><span class="pun">│</span><span class="pln">   </span><span class="pun">└──</span><span class="pln"> your_script</span><span class="pun">.</span><span class="pln">sh
</span><span class="pun">├──</span><span class="pln"> dir3
</span><span class="pun">│</span><span class="pln">   </span><span class="pun">├──</span><span class="pln"> empty</span><span class="pun">.</span><span class="pln">txt
</span><span class="pun">│</span><span class="pln">   </span><span class="pun">└──</span><span class="pln"> linked</span><span class="pun">.</span><span class="pln">txt </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="pun">../../</span><span class="pln">sample</span><span class="pun">.</span><span class="pln">txt
</span><span class="pun">├──</span><span class="pln"> my_script</span><span class="pun">.</span><span class="pln">sh
</span><span class="pun">└──</span><span class="pln"> your_script</span><span class="pun">.</span><span class="pln">sh

</span><span class="lit">3</span><span class="pln"> directories</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> files</span></pre>

<p>
	يمكننا استخدام محرف البدل ("*") للبحث عن الكلمة "simple" ضمن جميع الملفات داخل المجلد الحالي، بحيث سيُبدّل محرف البدل بأسماء جميع الملفات والمجلدات داخل المجلد الحالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_22" style=""><span class="pln">grep simple </span><span class="pun">*</span></pre>

<p>
	الأمر السابق سيُنفذ عملية البحث ضمن جميع الملفات ضمن المجلد الحالي، ولن يدخل إلى مجلداتها الفرعية، وبما أن البحث سيطبق فقط على الملفات، فسيظهر لنا رسالة بالصيغة التالية "XYZ is a directory" تدل على تجاهل المجلدات بنفسها.
</p>

<p style="text-align: center;">
	<img alt="البحث ضمن جميع ملفات مجلد ما عبر grep" class="ipsImage ipsImage_thumbnailed" data-fileid="115302" data-ratio="39.73" data-unique="6tgadn5g0" style="width: 750px; height: auto;" width="750" src="https://academy.hsoub.com/uploads/monthly_2022_12/grep-search-all-files.thumb.png.d99ec63157eb93fd24589355e37fb83d.png">
</p>

<p>
	في حال لم يكن المجلد الحالي هو ما نريد البحث ضمنه، يمكن ذكر مسار المجلد المطلوب منتهيًا باللاحقة "*/" كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_25" style=""><span class="pln">grep search_term directory_path</span><span class="com">/*</span></pre>

<p>
	هنا استخدمنا محرف البدل في النهاية لتوسيع العناصر المستهدفة سواء كانت ملفات أو مجلدات ضمن المجلد المحدد، وبالاعتماد على ما سبق سنرى في الفقرة القادمة كيف يمكن تنفيذ بحث تكراري يدخل إلى كافة الملفات ضمن المجلدات الفرعية.
</p>

<h2>
	البحث التكراري ضمن جميع المجلدات الفرعية لمجلد
</h2>

<p>
	يمكن استخدام الخيار <code>r-</code> لتفعيل البحث التكراري، بحيث سينظر <code>grep</code> داخل جميع الملفات ضمن المجلد المستهدف وداخل جميع الملفات ضمن المجلدات الفرعية داخله أيضًا، المثال التالي يشابه مثال البحث في الفقرة السابقة لكن مع إضافة البحث التكراري، سنلاحظ ظهور نتائج من ملفات داخل المجلدات الفرعية أيضًا:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_27" style=""><span class="pln">grep </span><span class="pun">-</span><span class="pln">r simple </span><span class="pun">.</span></pre>

<p>
	خرج تنفيذ الأمر السابق:
</p>

<p style="text-align: center;">
	<img alt="البحث التكراري ضمن جميع المجلدات الفرعية لمجلد" class="ipsImage ipsImage_thumbnailed" data-fileid="115301" data-ratio="42.57" data-unique="77lhr5tva" style="width: 700px; height: 298px;" width="750" src="https://academy.hsoub.com/uploads/monthly_2022_12/grep-recursive-search.thumb.png.418ad0557d48e31ff85acb70caab2b93.png">
</p>

<p>
	يوجد أيضًا الخيار <code>R-</code> لتنفيذ البحث التكراري، وهو يعمل بشكل مطابق للخيار <code>r-</code>:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3571_32" style=""><span class="pln">grep </span><span class="pun">-</span><span class="pln">R simple </span><span class="pun">.</span></pre>

<p>
	الفرق الوحيد بين الخيارين هو أن الخيار <code>R-</code> خيار بحث بإلغاء المرجعية، يعني أنه يقوم باتباع الوصلات الرمزية إلى ملفها الأصلي الموجود في مكان آخر، ويوضح المثال التالي استخدام الخيار <code>R-</code>:
</p>

<p style="text-align: center;">
	<img alt="الخيار R- لتنفيذ البحث التكراري" class="ipsImage ipsImage_thumbnailed" data-fileid="115300" data-ratio="37.29" data-unique="88ck0file" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2022_12/grep-recursive-search-symbolic-link.thumb.png.4d44e3dae49c5d50003182817df66b17.png">
</p>

<p>
	نلاحظ الفرق في نتيجة البحث حيث ظهرت نتيجة ضمن ملف الوصلة الرمزية <code>linked.txt</code>، ولم يظهر لنا ضمن النتائج عند استخدام الخيار <code>r-</code> سابقًا، في حال لم نكن ضمن المجلد المراد البحث ضمنه يمكن ذكر المسار النسبي أو المطلق للمجلد المطلوب كالتالي:
</p>

<pre class="ipsCode">grep -r search_term path_to_directory
</pre>

<h2>
	استثناء مجلد من عملية البحث التكراري
</h2>

<p>
	يمكن توجيه <code>grep</code> لاستثناء البحث ضمن مجلد فرعي ما عند تنفيذ عملية البحث التكراري باستخدام الخيار <code>exclude-dir--</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_36" style=""><span class="pln">grep </span><span class="pun">-</span><span class="pln">r </span><span class="pun">--</span><span class="pln">exclude</span><span class="pun">-</span><span class="pln">dir</span><span class="pun">=</span><span class="pln">dir_name serach_term directory_path</span></pre>

<p>
	يمكننا أيضًا استثناء عدة مجلدات فرعية من البحث التكراري باستخدام الخيار السابق بالصيغة التالية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_3571_38" style=""><span class="pln">grep </span><span class="pun">-</span><span class="pln">r </span><span class="pun">--</span><span class="pln">exclude</span><span class="pun">-</span><span class="pln">dir</span><span class="pun">={</span><span class="pln">dir1</span><span class="pun">,</span><span class="pln">dir2</span><span class="pun">}</span><span class="pln"> serach_term directory_path</span></pre>

<p>
	وبتطبيق ذلك على مثالنا سيظهر الخرج التالي:
</p>

<p style="text-align: center;">
	<img alt="استثناء مجلد من عملية البحث التكراري في grep" class="ipsImage ipsImage_thumbnailed" data-fileid="115299" data-ratio="45.00" data-unique="kf4p9i6c5" style="width: 700px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/grep-exclude-directory-from-recursive-search.thumb.png.a4d5198090c3d65e467994046efe70ab.png">
</p>

<p>
	بحيث يعمل خيار الاستثناء مع كلًّا من خياري البحث التكراري <code>r-</code> و <code>R-</code>.
</p>

<h2>
	الخلاصة
</h2>

<p>
	الجدول التالي يتضمن خلاصة استخدامات grep للبحث ضمن كل الملفات والمجلدات، والتي شرحناها ضمن هذا المقال:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				أمر Grep
			</th>
			<th>
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<code>grep string *‎</code>
			</td>
			<td>
				البحث ضمن كل الملفات ضمن المجلد الحالي
			</td>
		</tr>
		<tr>
			<td>
				<code>grep string dir</code>
			</td>
			<td>
				البحث ضمن كل الملفات ضمن المجلد dir
			</td>
		</tr>
		<tr>
			<td>
				<code>grep -r string .‎</code>
			</td>
			<td>
				البحث التكراري ضمن كل الملفات داخل المجلدات الفرعية
			</td>
		</tr>
		<tr>
			<td>
				<code>grep -r string dir</code>
			</td>
			<td>
				البحث التكراري ضمن كل الملفات داخل المجلدات الفرعية ضمن المجلد dir
			</td>
		</tr>
		<tr>
			<td>
				<code>grep -R string .‎</code>
			</td>
			<td>
				مثل الخيار r- لكن يتبع الوصلات الرمزية
			</td>
		</tr>
	</tbody>
</table>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/grep-search-all-files-directories/" rel="external nofollow">How to Perform Grep Search on All Files and in All Directories</a> لصاحبه Abhishek Prakash.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel="">دليل استخدام الأمر grep في لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%88%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-grep-%D9%88egrep-fgrep-r320/" rel="">ما الفروق بين الأوامر grep وegrep fgrep</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-rg-%D8%A8%D8%AF%D9%8A%D9%84-grep-%D8%A7%D9%84%D9%85%D8%AD%D8%B3%D9%86-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r677/" rel="">تعلم استخدام الأمر rg بديل grep المحسن في لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">678</guid><pubDate>Tue, 17 Jan 2023 17:08:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x644;&#x645; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x623;&#x645;&#x631; rg &#x628;&#x62F;&#x64A;&#x644; grep &#x627;&#x644;&#x645;&#x62D;&#x633;&#x646; &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-rg-%D8%A8%D8%AF%D9%8A%D9%84-grep-%D8%A7%D9%84%D9%85%D8%AD%D8%B3%D9%86-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r677/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/270676674_---rg--grep---.jpg.5d41bef1a7fb583713874a58974d0352.jpg" /></p>
<p>
	طوُّرت أداة <a href="https://github.com/BurntSushi/ripgrep" rel="external nofollow">ripgrep</a> نتيجةً لجهود مطوري البرامج <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%85%D8%B5%D8%B7%D9%84%D8%AD-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-open-source%D8%9F-r885/" rel="">مفتوحة المصدر</a> ضمن حملة لإعادة كتابة البرامج <a href="https://academy.hsoub.com/programming/rust/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%B1%D8%B3%D8%AA-rust-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A7%D8%AA-r1764/" rel="">بلغة رست Rust</a> كبديل أقوى عن الأداة المعروفة <span ipsnoautolink="true">grep</span>،صيغة استخدامها كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5075_9" style=""><span class="pln">rg [files/folders] </span><span class="tag">&lt;pattern&gt;</span></pre>

<p>
	مع استبدال files/folders بأسماء الملفات أو المجلدات المُراد البحث ضمنها، وهو معامل اختياري، واستبدال pattern بنمط البحث الذي نحاول العثور على نتائج تطابقه.
</p>

<p>
	نلاحظ وخلافًا <a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel="">للأمر grep</a>، أن ذكر اسم ملف ليتم البحث ضمنه هو اختياري وغير ضروري، فعند عدم تمرير اسم ملف معين سيُبحث ضمن جميع الملفات، تفيد تلك الميزة عند نسيان أيّ من الملفات يحوي النمط الذي نبحث عنه، وهي طريقة أبسط بمقارنتها بتنفيذ نفس العملية باستخدام <code>grep</code>.
</p>

<h2>
	ما هي أداة ripgrep؟
</h2>

<p>
	هي أداة مُطابقة أنماط قياسية متكررة تأخذ بالحسبان ملفات gitignore. في حال وجود ذكر لملفات معينة أو لواحق أو مجلدات ضمن ملف gitignore. ستتجاهلها الأداة ripgrep، مما يُسرّع زمن تنفيذ عملية البحث، ومن مزايا أداة ripgrep:
</p>

<ul>
	<li>
		البحث عن الأنماط تكراريًا ضمن المجلدات.
	</li>
	<li>
		تلوين المُطابقات ضمن الخرج.
	</li>
	<li>
		دعم للعديد من صيغ الترميز مثل UTF-8 و SHIFT_JIS.
	</li>
	<li>
		القدرة على البحث ضمن الملفات المضغوطة zip.
	</li>
	<li>
		تجاهل الملفات المخفية افتراضيًا، والملفات المطابقة للأنماط ضمن ملف gitignore لتسريع عملية البحث.
	</li>
</ul>

<p>
	فهي أداة مشابهة تمامًا لأداة <code>grep</code>، لكنها موجهة للبحث ضمن محتوى الملفات بدلًا من البحث ضمن مجرى من البايتات.
</p>

<h2>
	تثبيت ripgrep
</h2>

<p>
	لا تأتي أداة ripgrep مثبتة مسبقًا ضمن نظام التشغيل كما هو الحال مع <code>grep</code>، ولكنها متاحة ضمن كافة المستودعات ضمن توزيعات لينكس الشهيرة، بحيث يمكن تثبيتها باستخدام مدير الحزم، فضمن <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A2%D8%B1%D8%AA%D8%B4-arch-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r633/" rel="">توزيعة لينكس Arch</a> يمكن تثبيتها بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_5075_14" style=""><span class="pln">pacman </span><span class="pun">-</span><span class="pln">S ripgrep</span></pre>

<p>
	وضمن جينتو Gentoo باستخدام الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_5075_18" style=""><span class="pln">emerge sys</span><span class="pun">-</span><span class="pln">apps</span><span class="pun">/</span><span class="pln">ripgrep</span></pre>

<p>
	وعلى توزيعات فيدورا وريد هات بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_5075_20" style=""><span class="pln">sudo dnf install ripgrep</span></pre>

<p>
	وضمن توزيعة أوبن سوزي إصدار 15.1 وما فوق بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_5075_22" style=""><span class="pln">sudo zypper install ripgrep</span></pre>

<p>
	وضمن توزيعة ديبيان Buster الإصدار 10 وما فوق باستخدام apt، ويمكن ضمن توزيعة أوبنتو Cosmic Cuttlefish إصدار 18.10 وما فوق تحميلها من المستودعات الرسمية للتوزيعة، باستخدام الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_5075_24" style=""><span class="pln">sudo apt install ripgrep</span></pre>

<h2>
	استخدام الأمر ripgrep
</h2>

<p>
	ستجد استخدام الأمر سهلًا في حال لديك خبرة سابقة باستخدام الأمر <code>grep</code>، بحيث نمرر له نص البحث واسم ملف، ليبحث بعدها ضمنه ويعرض لنا أماكن تطابق نص البحث مع المحتوى داخل الملف، الأمثلة ضمن هذا المقال نُفذت ضمن نسخة من مجلد <a href="https://github.com/bootandy/dust" rel="external nofollow">مستودع الأداة dust</a>.
</p>

<h3>
	عمليات البحث البسيطة
</h3>

<p>
	المثال التالي يبحث عن النص description ضمن محتوى الملف Cargo.html:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5075_27" style=""><span class="pln">$ rg description </span><span class="typ">Cargo</span><span class="pun">.</span><span class="pln">toml
</span><span class="lit">3</span><span class="pun">:</span><span class="pln">description </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A more intuitive version of du"</span><span class="pln">
</span><span class="lit">53</span><span class="pun">:</span><span class="pln">extended</span><span class="pun">-</span><span class="pln">description </span><span class="pun">=</span><span class="pln"> </span><span class="str">"""</span><span class="pln">\</span></pre>

<p>
	فبعد تنفيذ الأمر بحثت لنا الأداة ضمن الملف المذكور وعرضت الأسطر مع أرقامها التي حَوت مُطابقة مع نص البحث:
</p>

<p style="text-align: center;">
	<img alt="عمليات البحث البسيطة في ripgrep" class="ipsImage ipsImage_thumbnailed" data-fileid="115287" data-ratio="31.82" data-unique="cozgmm61l" style="width: 550px; height: 175px;" width="600" src="https://academy.hsoub.com/uploads/monthly_2022_12/01_ripgrep.thumb.png.5b86f6565e7ddefea7b04f6967274be6.png">
</p>

<p>
	عند تمرير أسماء لعدة ملفات للبحث ضمنها، أو عند عدم تمرير أسماء ملفات ما يعني البحث ضمن جميع الملفات، سيظهر ضمن الخرج أسماء الملفات التي عُثر ضمنها على مطابقات:
</p>

<p style="text-align: center;">
	<img alt="نموذج عن عمليات البحث البسيطة في ripgrep" class="ipsImage ipsImage_thumbnailed" data-fileid="115288" data-ratio="26.00" data-unique="riwyd08x2" style="width: 650px; height: 169px;" width="600" src="https://academy.hsoub.com/uploads/monthly_2022_12/02_multiple_files.thumb.png.f4ea5018ed1d8a1993ec91345eebb583.png">
</p>

<p>
	يمكن الاستفادة من استخدام الخيار <code>file--</code> للإشارة إلى ملف يحوي أكثر من نمط ليتم البحث عنها، قد نحتاج ذلك في حال كنا نكرر البحث عن عدة أنماط دومًا:
</p>

<p style="text-align: center;">
	<img alt="الاستفادة من الخيار file في عمليات البحث في ripgrep" class="ipsImage ipsImage_thumbnailed" data-fileid="115289" data-ratio="53.38" data-unique="mae9yeqdv" style="width: 650px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2022_12/03_file.thumb.png.25695839f656c03d0da8f901eb6dd9b2.png">
</p>

<h3>
	إظهار نتيجة البحث ضمن السياق
</h3>

<p>
	من المفيد والضروري أحيانًا عرض السياق الذي عُثر ضمنه على النتيجة، خصوصًا عند بحثنا ضمن مستودع أو ملفات تحوي شيفرات، نستفيد من الخيار <code>C-</code> أو <code>context--</code> لتمرير عدد يدل على عدد الأسطر التي نريد إظهارها قبل وبعد النتيجة:
</p>

<p style="text-align: center;">
	<img alt="إظهار نتيجة البحث ضمن السياق باستخدام الأمر ripgrep" class="ipsImage ipsImage_thumbnailed" data-fileid="115290" data-ratio="31.69" data-unique="ak4jd8fmt" style="width: 650px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2022_12/04_context.thumb.png.328ec40d53b56104c9b8c6890c4559c2.png">
</p>

<p>
	نحتاج أحيانًا لعرض سطر النتيجة وما فوقه، ونحتاج أحيانًا أخرى لعرض سطر النتيجة وما بعده فقط، يمكن الاستفادة من الخيار <code>A-</code> أو <code>after-context--</code> وتمرير عدد الأسطر الواجب إظهارها أسفل كل نتيجة:
</p>

<p style="text-align: center;">
	<img alt="كيفية إظهار نتيجة البحث ضمن السياق باستخدام ripgrep" class="ipsImage ipsImage_thumbnailed" data-fileid="115291" data-ratio="26.15" data-unique="0aozrk8qf" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/05_after_context.thumb.png.17c3c5caabf591edf95c99edbfbd47d9.png">
</p>

<p>
	ولإظهار الأسطر فوق النتيجة يمكن الاستفادة من الخيار <code>B-</code> أو <code>before-context--</code> وتمرير عدد الأسطر الواجب إظهارها فوق كل نتيجة:
</p>

<p style="text-align: center;">
	<img alt="إظهار نتيجة البحث ضمن السياق باستخدام الأمر ripgrep" class="ipsImage ipsImage_thumbnailed" data-fileid="115292" data-ratio="26.15" data-unique="2m2gkn2nb" style="width: 650px; height: 170px;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/06_before_context.thumb.png.2fdd9dee7f35ee0ba11ce373f086261d.png">
</p>

<h3>
	الأعمدة
</h3>

<p>
	يوفر ripgrep عدة خيارات تخص الأعمدة، منها الخيار <code>column--</code> لطباعة إحداثيات مكان النتيجة بالصيغة "رقم السطر:رقم العمود" في بداية سطر كل نتيجة، ما يفيدنا في حال استخدامنا لمحرر نصوص مثل vim:
</p>

<p style="text-align: center;">
	<img alt="خيارات الأعمدة في ripgrep " class="ipsImage ipsImage_thumbnailed" data-fileid="115293" data-ratio="19.85" data-unique="8z80dex63" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/07_column.thumb.png.ef1700a208adc11f292a31608367cd09.png">
</p>

<p>
	يوجد أيضًا الخيار <code>M-</code> أو <code>max-columns--</code> الذي يأخذ قيمة عددية تمثل عدد الأعمدة ضمن الخرج، وفي حال تجاوزت نتيجة ما في أعمدتها ذلك العدد، يتم تجاهل عرضها والاكتفاء بعرض رسالة توضيحية تعبر عن النتيجة:
</p>

<p style="text-align: center;">
	<img alt="خيارات الأعمدة في ripgrep " class="ipsImage ipsImage_thumbnailed" data-fileid="115294" data-ratio="32.22" data-unique="blryr46kn" style="width: 450px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/08_max_column.png.26c13d0d94a739a961a3faf016c0c7e9.png">
</p>

<h3>
	خيارات أخرى
</h3>

<p>
	يوجد العديد من الخيارات الممكن استخدامها مع الأمر ripgrep، مثلًا يمكن استخدام الخيار <code>s-</code> أو <code>case-sensitive--</code> لجعل عملية المطابقة حساسة لحالة الأحرف:
</p>

<p style="text-align: center;">
	<img alt="خيارات يمكن استخدامها في ripgrep " class="ipsImage ipsImage_thumbnailed" data-fileid="115295" data-ratio="46.15" data-unique="nfj9ngbly" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/09_case_sensitive.thumb.png.c43e3c79a0c0e5a58162381f7e7db854.png">
</p>

<p>
	وإذا أردنا إظهار كل النتائج وتجاهل حالة الأحرف يمكن استخدام الخيار <code>i-</code> أو <code>ignore-case--</code>:
</p>

<p style="text-align: center;">
	<img alt="نتائج خيارات يمكن استخدامها في ripgrep " class="ipsImage ipsImage_thumbnailed" data-fileid="115296" data-ratio="53.38" data-unique="pghgpoit9" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2022_12/10_case_insensitive.thumb.png.ebc4bd44fa4d71fdf18d890ea85749d3.png">
</p>

<p>
	يمكن استخدام عدة مسالك Threads معًا لتنفيذ عملية البحث، حيث يفيد ذلك عند البحث ضمن كمية كبيرة من الملفات، كمستودع كبير للشيفرة المصدرية، يمكن تحديد عدد المسالك المستخدمة في عملية البحث بتمرير عدد للخيار <code>j-</code> أو <code>threads--</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_5075_59" style=""><span class="pln">$ rg </span><span class="pun">-</span><span class="pln">j </span><span class="lit">4</span><span class="pln"> TODO</span></pre>

<p>
	لعكس نتيجة البحث أي استثناء نمط ما من نتائج البحث، يمكن استخدام الخيار <code>v-</code> أو <code>invert-match--</code>.
</p>

<p style="text-align: center;">
	<img alt="خيارات يمكن استخدامها في ripgrep " class="ipsImage ipsImage_thumbnailed" data-fileid="115297" data-ratio="59.71" data-unique="80082rx05" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2022_12/11_invert.thumb.png.1594f98c2b651e0cf896ca822515b2ab.png">
</p>

<p>
	يمكن للأداة ripgrep البحث ضمن الملفات النصية المٌحتواه داخل ملف أرشيف مضغوط باستخدام الخيار <code>z-</code> أو <code>search-zip--</code> عادة يستخدم ذلك الخيار مع الخيار <code>a-</code> لمعاملة الملفات الثنائية على أنها ملفات نصية:
</p>

<p style="text-align: center;">
	<img alt="البحث باستخدام الخيار z- أو search-zip--" class="ipsImage ipsImage_thumbnailed" data-fileid="115298" data-ratio="35.78" data-unique="trn5dg34m" style="width: 450px; height: auto;" width="550" src="https://academy.hsoub.com/uploads/monthly_2022_12/12_compressed_archive.png.2551955519a5804094817b1bd014ffbd.png">
</p>

<h2>
	في الختام
</h2>

<p>
	يمكن الاستفادة من الأداة ripgrep بشكل كبير، وخاصة لو كنت مبرمجًا تعمل على أنظمة تشغيل ببيئات شبيهة بيونكس، مع أنها لا تعتبر بديلًا عن الأداة <code>grep</code> لأن وظيفتها مختلفة، حيث لكل منهما استخداماته وتطبيقاته المفيدة.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/ripgrep/" rel="external nofollow">Using ripgrep (rg) Command in Linux</a> لفريق الموقع.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-grep-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r566/" rel="">دليل استخدام الأمر grep في لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%88%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-grep-%D9%88egrep-fgrep-r320/" rel="">ما الفروق بين الأوامر grep وegrep fgrep</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%d8%a7%d9%84%d8%af%d9%84%d9%8a%d9%84-%d8%a7%d9%84%d9%86%d9%87%d8%a7%d8%a6%d9%8a-%d9%84%d8%a7%d8%ae%d8%aa%d9%8a%d8%a7%d8%b1-%d8%aa%d9%88%d8%b2%d9%8a%d8%b9%d8%a9-%d9%84%d9%8a%d9%86%d9%83%d8%b3-r48/" rel="">الدليل النهائي لاختيار توزيعة لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">677</guid><pubDate>Tue, 10 Jan 2023 17:00:00 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x645;&#x628;&#x633;&#x637; &#x644;&#x641;&#x647;&#x645; &#x633;&#x62C;&#x644;&#x627;&#x62A; &#x627;&#x644;&#x646;&#x638;&#x627;&#x645; Syslogs &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%A8%D8%B3%D8%B7-%D9%84%D9%81%D9%87%D9%85-%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%86%D8%B8%D8%A7%D9%85-syslogs-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r676/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/1863613798_-----Syslogs--.jpg.b23161aee73bf2ba691093524c7d23f6.jpg" /></p>
<p>
	توكلت العملية syslog إدارة السجلات لفترة طويلة من الزمن، بحيث كانت تُجمّع رسائل السجلات المُرسلة من قبل إجرائيات النظام والتطبيقات إلى الجهاز الزائف ‎/dev/log، ثم تعيد توجيهها إلى ملفات السجل النصية المناسبة ضمن المجلد /var/log/‏‏، ويستدل syslogd على الملف الوجهة للسجلات من خلال البيانات الوصفية ضمن ترويسات الرسائل القادمة نفسها، والتي تتضمن معلومات إضافية أيضًا كالعلامة الزمنية للرسالة ومصدرها وأولويتها.
</p>

<p style="text-align: center;">
	<img alt="كيفية إدارة السجلات من قبل Syslogs " class="ipsImage ipsImage_thumbnailed" data-fileid="115285" data-ratio="56.29" data-unique="gim0gef4c" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2022_12/logging-with-syslogd.png.e72dbc12c5d806773f29ad2e1cfff748.png">
</p>

<p>
	ومع أن أغلب السجلات كانت تُعالج باستخدام <a href="https://academy.hsoub.com/devops/linux/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D9%85%D9%87%D9%8A%D8%AF-systemd-r284/" rel="">systemd</a>، لكن مؤخرًا أصبح المدير الرئيسي لها هو journald، والذي يتم التحكم به عن طريق الأمر الخاص <code>journalctl</code>، ولكنه لم يستبدل سجلات syslogd كليًا ولازال بالإمكان رؤية ملفات السجلات تلك ضمن المجلد /var/log/، وسنركز في هذا المقال فقط على systemd.
</p>

<h2>
	حفظ السجلات باستخدام syslogd
</h2>

<p>
	تضاف كل السجلات المُولّدة من قبل الأحداث في نظام syslogd إلى الملف ‎/var/log/syslog، وقد تُرسل أيضًا إلى ملف واحد أو عدة ملفات ضمن نفس المجلد بحسب خصائصها، حيث يعتمد نظام syslogd على محتوى ملف الإعدادات ‎50-default.conf الموجود ضمن المجلد /etc/rsyslog.d/ لتحديد طريقة توزيع تلك الرسائل.
</p>

<p>
	يوضح المثال التالي محتوى ملف الإعداد ‎50-default.conf حيث ستُكتب رسائل السجل المتعلقة بالأعمال المجدولة <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D9%87%D8%A7%D9%85%D9%83-%D8%A7%D9%84%D8%B1%D9%88%D8%AA%D9%8A%D9%86%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-cron-%D9%88-anacron-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r82/" rel="">cron</a> ضمن الملف cron.log، وتخبر علامة النجمة ("*") نظام syslogd بأن يرسل كل السجلات بمختلف مستويات أولويتها إلى الملف المذكور، وذلك على عكس تحديد مستوى معين للرسائل الواجب إرسالها، كتحديد مستوى رسائل الخطأ err أو مستوى حالات انهيار النظام emerg:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9888_7" style=""><span class="pln">cron</span><span class="pun">.*</span><span class="pln">     </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">log</span><span class="pun">/</span><span class="pln">cron</span><span class="pun">.</span><span class="pln">log</span></pre>

<p>
	على عكس <code>journalctl</code>، يمكن التعامل مع نظام ملفات سجلات syslogd مباشرةً ودون الحاجة إلى أدوات خاصة، ولاستخدامه بالشكل الأمثل يجب معرفة نوع المعلومات الموجودة ضمن ملفات السجل القياسية، الجدول التالي يوضح أشهر تلك الملفات syslogd وماذا يُخزّن ضمنها:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				اسم الملف
			</th>
			<th>
				المعلومات المخزنة
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				auth.log
			</td>
			<td>
				أحداث الأمان والاستيثاق للنظام
			</td>
		</tr>
		<tr>
			<td>
				boot.log
			</td>
			<td>
				سجل أحداث الإقلاع
			</td>
		</tr>
		<tr>
			<td>
				dmesg
			</td>
			<td>
				أحداث التخزين المؤقت لحلقة النواة، الخاصة بتعريفات الأجهزة
			</td>
		</tr>
		<tr>
			<td>
				dpkg.log
			</td>
			<td>
				أحداث برنامج إدارة الحزم
			</td>
		</tr>
		<tr>
			<td>
				kern.log
			</td>
			<td>
				أحداث نواة لينكس
			</td>
		</tr>
		<tr>
			<td>
				syslog
			</td>
			<td>
				مجموع كل السجلات
			</td>
		</tr>
		<tr>
			<td>
				wtmp
			</td>
			<td>
				متابعة جلسات المستخدم (يستفيد منها الأمران <code>who</code> و <code>last</code>)
			</td>
		</tr>
	</tbody>
</table>

<p>
	تَكتب التطبيقات عادة ضمن ملفات سجلات خاصة بها، حيث ستلاحظ غالبًا وجود مجلدات خاصة مثل /var/log/apache2/ أو /var/log/mysql/ لاستقبال بيانات تلك التطبيقات، يمكن التحكم بإعادة توجيه السجلات من خلال مستويات الأولوية الثمانية لها، إضافةً إلى رمز النجمة الذي يشير إلى كافة المستويات كما رأينا سابقًا.
</p>

<table>
	<thead>
		<tr>
			<th>
				المستوى
			</th>
			<th>
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				debug
			</td>
			<td>
				يفيد في عملية اكتشاف الأخطاء
			</td>
		</tr>
		<tr>
			<td>
				info
			</td>
			<td>
				توفير المعلومات
			</td>
		</tr>
		<tr>
			<td>
				notice
			</td>
			<td>
				الوضع الطبيعي
			</td>
		</tr>
		<tr>
			<td>
				warn
			</td>
			<td>
				الأوضاع التحذيرية
			</td>
		</tr>
		<tr>
			<td>
				err
			</td>
			<td>
				حالات الخطأ
			</td>
		</tr>
		<tr>
			<td>
				crit
			</td>
			<td>
				الأوضاع الحرجة
			</td>
		</tr>
		<tr>
			<td>
				alert
			</td>
			<td>
				الحالات التي تتطلب إجراء فوري
			</td>
		</tr>
		<tr>
			<td>
				emerg
			</td>
			<td>
				حالات انهيار النظام
			</td>
		</tr>
	</tbody>
</table>

<h2>
	إدارة ملفات السجل بواسطة syslogd
</h2>

<p>
	يُدوّر syslogd السجلات دوريًا ويضغطها ويحذفها افتراضيًا دون الحاجة لإعداده مسبقًا، ومن المفيد مع ذلك معرفة كيف تتم تلك العمليات، خاصة عند التعامل مع سجلات بحاجة لمعاملة مختلفة عن المعاملة الافتراضية، ولتوضيح الحالات التي تحتاج فيها السجلات لمعاملة خاصة سنوضح ذلك بمثال، بفرض حاجة شركة ما لاتباع قوانين متعلقة بإنشاء تقارير عن العمليات التي تجري ضمنها، قد تكون تلك القوانين تنظيمية أو معايير خاصة بمجال عمل الشركة، كمعيار Sarbanes-Oxley أو PCI-DSS، في هذه الحال يجب أن نُبقي على السجلات المتعلقة بالبنية التحتية التقنية للشركة لفترات أطول، ويجب أن نعرف كيفية البحث والعثور على ما نريده من بين ملفات السجلات المخزنة.
</p>

<p>
	ولتوضيح كيف يتم تدوير سجلات النظام يمكننا عرض بعض الملفات ضمن المجلد /var/log/، حيث سنلاحظ وجود ملف السجل auth.log الخاص بعمليات الاستيثاق على سبيل المثال بثلاث صيغ مختلفة وهي:
</p>

<ul>
	<li>
		auth.log وهي نسخة ملف السجلات الفعال حالًيا الذي تُكتب ضمنه رسائل الاستيثاق الجديدة.
	</li>
	<li>
		auth.log.1 آخر ملف تم تدويره وأصبح خارج الخدمة، ويبقى دون ضغط لتسهيل عملية استخدامه عند الضرورة.
	</li>
	<li>
		auth.log.2.gz مجموعة سجلات قديمة، ومضغوطة لتوفير المساحة كما يُلاحظ من الامتداد ‎.gz في نهاية اسم الملف.
	</li>
</ul>

<p style="text-align: center;">
	<img alt="إدارة ملفات السجل بواسطة syslogd" class="ipsImage ipsImage_thumbnailed" data-fileid="115282" data-ratio="37.57" data-unique="02zf5nams" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2022_12/contents-of-var-log-directory.png.9f293026f456265ce5982e15afcd66b3.png">
</p>

<p>
	عند قدوم موعد تدوير السجلات بعد 7 أيام، ستنفذ الخطوات التالية:
</p>

<ol>
	<li>
		يُعاد تسمية الملف auth.log.2.gz ليصبح auth.log.3.gz
	</li>
	<li>
		يُضغط الملف auth.log.1 ويعاد تسميته ليصبح auth.log.2.gz
	</li>
	<li>
		يُعاد تسمية الملف الفعال الحالي auth.log ليصبح auth.log.1
	</li>
	<li>
		يُنشئ ملف جديد لاستقبال السجلات الجديدة بالاسم auth.log.
	</li>
</ol>

<p>
	يمكن التحكم بمدة التدوير الافتراضية للسجلات من خلال ملف الإعداد ‎/etc/logrotate.conf، يوضح المحتوى التالي للملف ضبط عملية التدوير لتكون أسبوعية، وحذف السجلات التي يمضي عليها مدة أربعة أسابيع:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9888_11" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">تدوير</span><span class="pln"> </span><span class="pun">السجلات</span><span class="pln"> </span><span class="pun">أسبوعيًا</span><span class="pln">
weekly
</span><span class="pun">#</span><span class="pln"> </span><span class="pun">إبقاء</span><span class="pln"> </span><span class="pun">سجلات</span><span class="pln"> </span><span class="pun">آخر</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="pun">أسابيع</span><span class="pln">
rotate </span><span class="lit">4</span><span class="pln">
</span><span class="pun">#</span><span class="pln"> </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">ملف</span><span class="pln"> </span><span class="pun">سجلات</span><span class="pln"> </span><span class="pun">فارغ</span><span class="pln"> </span><span class="pun">جديد</span><span class="pln"> </span><span class="pun">بعد</span><span class="pln"> </span><span class="pun">تدوير</span><span class="pln"> </span><span class="pun">السجلات</span><span class="pln"> </span><span class="pun">القديمة</span><span class="pln">
create
</span><span class="pun">#</span><span class="pln"> </span><span class="pun">تضع</span><span class="pln"> </span><span class="pun">الحزم</span><span class="pln"> </span><span class="pun">معلومات</span><span class="pln"> </span><span class="pun">تدوير</span><span class="pln"> </span><span class="pun">السجلات</span><span class="pln"> </span><span class="pun">ضمن</span><span class="pln"> </span><span class="pun">المجلد</span><span class="pln"> </span><span class="pun">التالي</span><span class="pln">
include </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">logrotate</span><span class="pun">.</span></pre>

<p>
	يحوي المجلد /etc/logrotate.d/ أيضًا على ملفات إعدادات مخصصة لإدارة عملية تدوير السجلات لخدمات وتطبيقات معينة، وبتنفيذ أمر عرض محتويات ذلك المجلد سنجد الملفات التالية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_9888_18" style=""><span class="pln">$ ls </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">logrotate</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">
apache2 apt dpkg mysql</span><span class="pun">-</span><span class="pln">server
rsyslog
samba
unattended</span><span class="pun">-</span><span class="pln">upgrade</span></pre>

<p>
	يمكنك عرض محتويات تلك الملفات للاطلاع على طريقة إدارتها لعملية تدوير ملفات السجل الخاصة بالخدمات والتطبيقات المتعلقة بها، ومن الشائع إعادة توجيه السجلات إلى <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">خوادم</a> مخصصة لاستقبال ومعالجة وتحليل تلك السجلات بدلًا من تخزينها محليًا، مما يريح خوادم التطبيقات من تلك المهمة، ويُجمّع كافة بيانات السجلات في مكان مركزي سهل الوصول.
</p>

<h2>
	قراءة ملفات سجلات syslog
</h2>

<p>
	البحث يدويًا ضمن ملفات سجلات غير مجدي، فقد تحوي تلك الملفات على الملايين من الأسطر، لذا يجب تجنب الاستعانة بالأمر <code>cat</code> نهائيًا، فهو سيطبع فقط الآلاف من تلك الأسطر على الشاشة ولن نتمكن من قراءتها، يمكن الاستعانة بالأمر <code>grep</code> بدلًا منه لتصفية النص ضمن تلك الملفات، ويمكن الاستفادة من الأمر <code>tail -f</code> لمعاينة الأسطر الأخيرة من الملف مع تغييراتها بالوقت الحقيقي، وبدمجه مع الأمر <code>grep</code> يمكن تصفية الأحداث التي تهمنا منها فقط.
</p>

<p>
	نضطر أحيانًا لمعاينة محتوى ملفات السجل القديمة المضغوطة، يمكن فك ضغط تلك الملفات واستخدام الأمر <code>grep</code>مع <code>less</code> أو أوامر أخرى مشابهة له للوصول للسجلات المطلوبة، لكن الطريقة الأفضل تكون باستخدام بعض الأوامر التي تبدأ بالحرف z كالأمر <code>zcat</code> و <code>zless</code> وغيرها، بحيث تسمح لنا تلك الأوامر بالتعامل مع الملفات المضغوطة مباشرةً دون الحاجة لفك ضغطها أولًا.
</p>

<h2>
	مثال عملي على تحليل السجلات
</h2>

<p>
	كمثال يمكننا البحث عن محاولات تسجيل الدخول الفاشلة ضمن ملف السجلات الخاص بعمليات الاستيثاق auth.log، فنبحث ضمنه عن الكلمة "failure" ليظهر لنا الأسطر التي تحتوي على جملة فشل الاستيثاق "authentication failure"، نستفيد من تلك العملية للتحقق من محاولات اختراق لحسابات عبر المحاولات المتكررة الفاشلة لتخمين كلمة السر لها، بحيث يدل تكرار المحاولات على وجود محاولة للاختراق، مع تجاهل المحاولات الفاشلة القليلة التي تظهر كمرة واحدة أو مرتين التي قد تحدث مع مستخدم حقيقي عند نسيانه لكلمة السر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_9888_22" style=""><span class="pln">$ cat </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">log</span><span class="pun">/</span><span class="pln">auth</span><span class="pun">.</span><span class="pln">log </span><span class="pun">|</span><span class="pln"> grep </span><span class="str">'Authentication failure'</span><span class="pln">
</span><span class="typ">Sep</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="lit">09</span><span class="pun">:</span><span class="lit">22</span><span class="pun">:</span><span class="lit">21</span><span class="pln"> workstation su</span><span class="pun">[</span><span class="lit">21153</span><span class="pun">]:</span><span class="pln"> pam_authenticate</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Authentication</span><span class="pln"> failure</span></pre>

<p>
	في حال تجربة للأمر السابق ولم يظهر أي نتائج، السبب يكون في نجاح كل عمليات تسجيل الدخول الخاصة للمستخدمين على الجهاز ولا وجود لمحاولات فاشلة، لكن لا يزال بالإمكان التحقق من صحة تنفيذ الأمر السابق عبر توليد سجل وهمي يدويًا باستخدام برنامج يدعى logger عبر تنفيذ الأمر كالتالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9888_24" style=""><span class="pln">logger </span><span class="str">"Authentication failure"</span></pre>

<p>
	طريقة أخرى تكون بتوليد سجلات حقيقية عبر محاولة تسجيل الدخول بكلمة سر خاطئة عمدًا، لكن المعلومات التي استخرجناها تدل فقط على حدوث عملية تسجيل دخول فاشلة، ولا تخبرنا بأي معلومات مفيدة أخرى عن سياق ذلك الحدث، كالحساب الذي جرت عليه محاولة تسجيل الدخول الفاشلة، لكن يمكننا توسيع النتائج التي يٌظهرها الأمر <code>grep</code> لتشمل بعض الأسطر قبل وبعد سطر النتيجة، المثال التالي يطبع لنا نتائج البحث إضافةً إلى الأسطر حولها، نلاحظ ظهور معلومات مفيدة، كاسم الحساب david وهو الذي نفذ محاولة تسجيل دخول فاشل باستخدام الأمر <code>su</code> إلى الحساب ‎:studio
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9888_26" style=""><span class="pln">$ cat </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">log</span><span class="pun">/</span><span class="pln">auth</span><span class="pun">.</span><span class="pln">log </span><span class="pun">|</span><span class="pln"> grep </span><span class="pun">-</span><span class="pln">C1 failure
</span><span class="typ">Sep</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="lit">09</span><span class="pun">:</span><span class="lit">22</span><span class="pun">:</span><span class="lit">19</span><span class="pln"> workstation su</span><span class="pun">[</span><span class="lit">21153</span><span class="pun">]:</span><span class="pln"> pam_unix</span><span class="pun">(</span><span class="pln">su</span><span class="pun">:</span><span class="pln">auth</span><span class="pun">):</span><span class="pln"> authentication
failure</span><span class="pun">;</span><span class="pln"> logname</span><span class="pun">=</span><span class="pln"> uid</span><span class="pun">=</span><span class="lit">1000</span><span class="pln"> euid</span><span class="pun">=</span><span class="lit">0</span><span class="pln"> tty</span><span class="pun">=</span><span class="str">/dev/</span><span class="pln">pts</span><span class="pun">/</span><span class="lit">4</span><span class="pln"> ruser</span><span class="pun">=</span><span class="pln">david rhost</span><span class="pun">=</span><span class="pln">
user</span><span class="pun">=</span><span class="pln">studio
</span><span class="typ">Sep</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="lit">09</span><span class="pun">:</span><span class="lit">22</span><span class="pun">:</span><span class="lit">21</span><span class="pln"> workstation su</span><span class="pun">[</span><span class="lit">21153</span><span class="pun">]:</span><span class="pln"> pam_authenticate</span><span class="pun">:</span><span class="pln">
</span><span class="typ">Authentication</span><span class="pln"> failure
</span><span class="typ">Sep</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="lit">09</span><span class="pun">:</span><span class="lit">22</span><span class="pun">:</span><span class="lit">21</span><span class="pln"> workstation su</span><span class="pun">[</span><span class="lit">21153</span><span class="pun">]:</span><span class="pln"> FAILED su </span><span class="kwd">for</span><span class="pln"> studio by david</span></pre>

<h2>
	ختامًا
</h2>

<p>
	يمكن تطبيق الأساسيات التي تعلّمتها في هذا المقال عمليًا لتزيد من خبرتك، فهم الأساسيات من أهم المراحل التي تفيد في العديد من المواقف، بحيث أصبح بإمكانك الآن التعامل بسهولة أكبر مع ملفات السجلات المخزنة على <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">لينكس</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/syslog-guide/" rel="external nofollow">Beginner's Guide to Syslogs in Linux</a> لفئة من المؤلفين.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%A3%D9%87%D9%85-20-%D8%A3%D9%85%D8%B1%D8%A7-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%84%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86-r585/" rel="">أهم 20 أمرا في نظام التشغيل لينكس لجميع المستخدمين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%B1%D8%AC%D8%B9-%D8%A5%D9%84%D9%89-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r615/" rel="">مرجع إلى أشهر أوامر لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%B9%D8%B1%D8%B6-%D9%88%D8%AA%D8%AF%D9%8A%D8%B1-%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%88centos-r233/" rel="">كيف تستعرض وتدير سجلات لينكس على أوبنتو وCentOS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">676</guid><pubDate>Tue, 03 Jan 2023 17:00:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; Bash&#x61F;</title><link>https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%8A-bash%D8%9F-r794/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/Bash-aca2-.png.dace5e61f9e658e817181ada6e956408.png" /></p>
<p>
	سنشرح في هذا الفيديو باش Bash التي تمكننا من التعامل مع الحاسوب ونظام لينكس Linux وإجراء مختلف العمليات على الملفات والبرامج والتنقل بين مختلف المسارات عبر كتابة أوامر بسيطة وسهلة من خلال نافذة سطر الأوامر ، كما تتيح باش Bash الوصول إلى العديد من الأدوات المساعدة مما يسهل أتمتة العديد من المهام اليومية وتعد هذه الأداة أكثر فاعلية للتحكم بالحاسوب مقارنة بالواجهة الرسومية.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="603" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هي Bash" width="1072" data-embed-src="https://www.youtube.com/embed/4Ea_mFmKzi0"></iframe>
</p>

<p>
	إذا أردت التعرف أكثر على لينكس، فننصحك بالانضمام إلى <a href="https://academy.hsoub.com/learn/computer-science/" rel="">دورة علوم الحاسوب</a>، ولا تنسَ الاستعانة خلال رحلة تعلمك وعملك بتوثيقات <a href="https://wiki.hsoub.com/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9" rel="external">موسوعة حسوب</a> المجانية. وإذا أردت متابعة المعلومات البرمجية العلمية مكتوبة فيمكنك الاطلاع على <a href="https://academy.hsoub.com/programming/" rel="">قسم البرمجة في أكاديمية حسوب</a>، كما يمكنك متابعة جديد الفيديوهات التقنية المتاحة على <a href="https://www.youtube.com/@HsoubAcademy" rel="external nofollow">يوتيوب أكاديمية حسوب</a> مجانًا.
</p>
]]></description><guid isPermaLink="false">794</guid><pubDate>Thu, 06 Oct 2022 15:00:00 +0000</pubDate></item><item><title>10 &#x637;&#x631;&#x642; &#x644;&#x62A;&#x62C;&#x631;&#x628;&#x629; &#x646;&#x638;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x634;&#x63A;&#x64A;&#x644; &#x644;&#x64A;&#x646;&#x643;&#x633; Linux &#x648;&#x627;&#x633;&#x62A;&#x643;&#x634;&#x627;&#x641;&#x647;</title><link>https://academy.hsoub.com/devops/linux/10-%D8%B7%D8%B1%D9%82-%D9%84%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-%D9%88%D8%A7%D8%B3%D8%AA%D9%83%D8%B4%D8%A7%D9%81%D9%87-r638/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc1fee583_-------Linux.png.b4aa80224a5f48b698a26eeebd2b9a68.png" /></p>
<p>
	على الرغم من امتلاك نظام لينكس ميزات كثيرة إلا أن ويندوز لا يزال النظام الأكثر شيوعًا من ناحية الاستخدام، لذا نقدم في هذا المقال عشر خيارات لتجريب نظام لينكس ويتيح كل منها استكشاف النظام والتعرف عليه ومعرفة مزاياه، يمكن للمستخدم اختيار أي طريقة حسب رغبته.
</p>

<h2>
	1. تجربة صدفة لينكس Free shell
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103823" href="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc353283c_.PNG.b7c0d4d9eec49481c7a2e276d74a09cc.PNG" rel="" data-fileext="PNG"><img alt="الطريقة الأولى لاستخدام لينكس.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103823" data-unique="h9558gakq" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc35c4240_.thumb.PNG.799b9cca09de98f24d06814f6ff91df8.PNG"></a>
</p>

<p>
	يقوم العديد من مديري الأنظمة بإعادة استخدام أجهزة الحاسوب المهملة عن طريق إنشاء حسابات صدفة مجانية والتي تتيح استخدام طرفية لينكس في تعلم الأوامر وأساسيات تطوير الويب ولغة بايثون Python بالإضافة إلى كتابة <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B3%D9%83%D8%B1%D8%A8%D8%AA%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%AF%D9%81%D8%A9-shell-scripts-r252/" rel="">سكربت لينفذ في الصدفة</a>، جميع هذه الميزات مجانية وتختصر وقت عمل المستخدم، وفيما يلي قائمة ببعض الخيارات:
</p>

<ol>
	<li>
		الخيار الأول <a href="https://freeshell.de/" rel="external nofollow">Freeshell.de</a> وهو نظام لينكس متاح بشكل عام ويعمل منذ عام 2002 ويسمح للمستخدم بالحصول على وصول إلى الصدفة الآمنة عبر <a href="https://academy.hsoub.com/devops/security/ssh/%D8%AF%D9%84%D9%8A%D9%84-%D8%A8%D8%B5%D8%B1%D9%8A-%D9%84%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%86%D9%81%D8%A7%D9%82-ssh-r508/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr></a> أو IPv6 و OpenSSL لتجريبها في صدفة لينكس بالإضافة إلى إمكانية طلب قاعدة بيانات MySQL.
	</li>
	<li>
		الخيار الثاني <a href="https://blinkenshell.org/wiki/Start" rel="external nofollow">Blinkenshell</a> يعمل هذا النظام منذ عام 2006 ويوفر صدفة لينكس لتعلم يونكس Unix واستخدام الدردشة عبر الإنترنت IRC وتأمين استضافة لمواقع ويب بسيطة ومشاركة ملفات.
	</li>
	<li>
		الخيار الثالث <a href="https://sdf.org/" rel="external nofollow">نظام الوصول العام في يونكس SDF</a> تم تأسيسه عام 1987 لتقديم حسابات NetBSD مجانية حيث أن NetBSD لا يعد لينكس ولكنه يونكس مفتوح المصدر لذا يقدم تجربة مماثلة، كما أنه يمتلك العديد من التطبيقات يمكن تنزيلها بواسطة مدير الحزم homebrew مما يجعله الفاصل بين النهج القديم BBS والصدفة القديمة المجانية.
	</li>
</ol>

<p>
	غالبًا ما يُساء استخدام حسابات صدفة المجانية لذا يتوجب على مستخدمي هذه الحسابات إظهار الوفاء والاستعداد للمشاركة في نشاطات المجموعة ومن خلال طلب خاص أو تبرع صغير لإثبات حسن النية، يمكن حينها الوصول إلى المُصرّفات ولغات البرمجة المتقدمة بالإضافة إلى مشغّلات قواعد البيانات وطلب تثبيت برامج ومكتبات إضافية والتي تساعد على تحسين تجربته وتتم الموافقة على الطلب من قبل المدير المسؤول.
</p>

<p>
	على الرغم من أن هذه الطريقة تعد رائعة لتجريب نظام لينكس حقيقي ولكن لا يحصل المستخدم فيها على صلاحيات المستخدم الجذر root لذلك عليه تعلم إدارة البرامج المحلية دون الدخول في التفاصيل.
</p>

<h2>
	2. استخدام لينكس على ويندوز بواسطة WSL 2
</h2>

<p>
	بدأت شركة مايكروسوفت منذ حزيران عام 2019 بإصدار لينكس مع ويندوز مما يتيح تشغيل تطبيقات لينكس من ويندوز باعتباره التكرار الثاني لنظام ويندوز الفرعي لنظام لينكس وهو اسم الطريقة WSL 2 أي Windows Subsystem for Linux والرقم 2 يرمز إلى التكرار الثاني.
</p>

<p>
	تستهدف هذه الطريقة بشكل أساسي المطورين وسيجد مستخدمو ويندوز أن WSL 2 هي بيئة لينكس من سطح مكتب مريح ومألوف بدون طرق وهمية تستهلك موارد إضافية.
</p>

<p>
	تعتبر WSL أداة تطويرية وتعليمية وسهلة التعلم ويحصل المستخدم فيها على صلاحيات مدير النظام ويتمكن من تشغيل توزيعات لينكس وتطبيقاته لكنها لاتزال في مراحلها الأولى والعمل عليها مستمر لذا فهي عرضة للتغيير وقد يواجه المستخدم أخطاء أثناء العمل عند استخدامها في أمور معقدة، كما لا تمتلك مسارًا واضحًا للاستخدام حتى الآن ولا تغطي جميع تفاصيل التجربة الواقعية مما يجعلها تجربة غير مثالية وتناسب فقط المستخدم الذي يرغب فقط بتجريب لينكس، وتتطلب منه تعلم بعض الأوامر الأساسية في لينكس لتساعده على إنجاز الأعمال البسيطة في هذه البيئة.
</p>

<h2>
	3. تحميل لينكس على محرك أقراص عبر منفذ USB
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103822" href="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc2cd595d_.PNG.a79c704fbccaf905a679770a471c0a8e.PNG" rel="" data-fileext="PNG"><img alt="استخدام لينكس من قرص خارجي.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103822" data-unique="0ontv28qw" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc3183712_.thumb.PNG.db8ee9ac1e7a240d87af5acda6ade88e.PNG"></a>
</p>

<p>
	يحصل المستخدم في هذه الطريقة على نظام لينكس محمول، يمكن الاحتفاظ به وتشغيله على أي جهاز حاسوب في أي مكان مع عدم تأثر بيانات الجهاز المُضيف أو بيانات نظام لينكس أبدًا مما يجعلها طريقة مناسبة لأجهزة الحاسوب العامة في المدارس والمكتبات ومراكز الأعمال التجارية في الفنادق، كما يمكن استخدامها كمنصة حوسبة أساسية في رحلات السفر الخاصة بالعمل، ويمكن اعتبارها نسخة احتياطية لحالات المشاكل والأعطال التي تواجه نظام تشغيل الحاسوب، أو حتى بهدف استخدام نظام لينكس من فترة لأخرى.
</p>

<p>
	توفر هذه الطريقة توزيعة لينكس كاملة ومستقرة وموثوقة ومزودة ببيئة سطح مكتب قابلة للتخصيص وتتيح الوصول إلى جميع البرمجيات، كما تكون مشابهة تمامًا لبيئة لينكس الواقعية إلا أنه يوجد القليل من التفاصيل لا يمكن القيام بها على نظام التشغيل المحمول. تخزين البيانات فيها مستمر ولكنه يتم بشكل مختلف قليلًا، حيث يتم حفظ البيانات في نظام ملفات مضغوط والذي يتم تطبيقه بعد ذلك كتراكب على النظام عند الإقلاع، تتيح هذه المرونة خيارات في الإقلاع فإما يتم الإقلاع في الوضع الدائم، أو حفظ جميع البيانات مرة أخرى على قرص التخزين، أو الإقلاع في الوضع المؤقت والذي يختفي فيه كل ما تم تنفيذه بمجرد إيقاف التشغيل، أي استخدامه كنظام آمن ومحدود النطاق على حاسوب غير موثوق أو كنظام تشغيل محمول على أجهزة الحاسوب الموثوقة. يوجد العديد من التوزيعات المماثلة التي يمكن تجربتها يحتوي بعضها على الحد الأدنى من بيئات سطح المكتب لحواسيب منخفضة الطاقة والبعض الآخر مزود بسطح مكتب كامل، منها Porteus Linux وهي نظام تشغيل لينكس متكامل ومحسن ليتم تشغليه بهذا الشكل، ولإنشاء نسخة من التوزيعة على محرك أقراص مصغر قابل للإقلاع يجب تنزيل Fedora Media Writer مثلًا سواء على نظام ماك أو ويندوز.
</p>

<h2>
	4. التجول في لينكس والتعرف عليه بعيون الآخرين
</h2>

<p>
	مشاهدة التجربة جزء من التجربة، ومن ذلك يمكنك البحث عبر الإنترنت ومشاهدة الفيديوهات التعريفية والشروحات عن لينكس وتجربته وكل ما يتعلق به وبها تأخذ فكرة أوسع عن النظام وواجهته والتعامل معه من الآخرين وكأنك استعرت أعينهم لتنظر عبرها.
</p>

<p>
	تناسب هذه الطريقة مستخدمي لينكس الجدد وتعطيهم شعور الألفة مع النظام وتزودهم بنظرة عامة حول بيئته والتطبيقات المتاحة وشكل سطح مكتب لينكس وغير ذلك بناءً على خبرة وتجربة الآخرين لذا فهي مجرد جولة استطلاعية فعليًا قبل البدء بالتجربة العملية.
</p>

<h2>
	5. تشغيل لينكس في المتصفح بواسطة جافا سكربت JavaScript
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103821" href="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc239ebed_.PNG.a5a460fa5b5ddfc1ea4809a1446f61cf.PNG" rel="" data-fileext="PNG"><img alt="استخدام لينكس في المتصفح.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103821" data-unique="15376tjgi" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc283a1f9_.thumb.PNG.3f0693780c66c3dc37cba54327276b04.PNG"></a>
</p>

<p>
	منذ وقت ليس بعيد كانت الأنظمة الوهمية مكلفة من ناحية الحوسبة ومتاحة فقط للمستخدمين الذين يمتلكون أجهزة متميزة، أما الآن تم تحسينها لدرجة أنه يمكن تنفيذها بواسطة محرك جافا سكربت وذلك بفضل فابريس بيلارد Fabrice Bellard وهو مبتكر المحاكي الممتاز والمفتوح المصدر QEMU.
</p>

<p>
	بدأ بيلارد Bellard أيضًا مشروع JSLinux الذي يسمح بتشغيل لينكس وأنظمة التشغيل الأخرى في المتصفح ولا يزال مشروعًا تجريبيًا لكنه سيكون أعجوبة تقنية.
</p>

<p>
	تتيح هذه الطريقة تشغيل لينكس على نظام أساسي بدلًا من تشغيله على حاسوب قديم عديم المزايا، وتتطلب فتح متصفح الويب على صفحة JSLinux فقط ثم يمكن للمستخدم تشغيل صدفة لينكس أو نظام لينكس مزود بواجهة رسومية مبسطة، كما يمكنه تحميل وتنزيل الملفات إلى مضيف JSLinux الخاص بالمستخدم أو (نظريًا) إرسال الملفات إلى موقع نسخ احتياطي للشبكة لأن JSLinux لديه إمكانية الوصول إلى الإنترنت من خلال مقبس <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> (على الرغم من السرعات المحددة إلا أنها تعتمد على خدمة <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr>).
</p>

<h2>
	6. القراءة عنه
</h2>

<p>
	هذه هي الطريقة الأقل تقليدية لتجربة لينكس وتناسب المستخدم الذي يفضل ترك مسافة أمان بينه وبين كل شيء جديد عنه ويفضل المراقبة والبحث والاستفسار قبل البدء بالتجربة الفعلية، كما تناسب من لا يملك فكرة واضحة حول ما يشمله لينكس. يتوفر الكثير من المعلومات حول كيفية عمل لينكس وطريقة تشغيله واستخدامه وما يحدث في عالم لينكس، وكلما تعمق المستخدم أكثر في معرفة عالم الأنظمة والبرامج مفتوحة المصادر أصبح من السهل عليه فهم لينكس والحصول على معلومات أكثر دقة بدلًا من المعلومات الشائعة والكلام العام. يوجد الكثير من الكتب لهذا الهدف لكن يُنصح بكتاب سحر لينكس The Charm of Linux للكاتب Hazel Russman، وكتاب <a href="https://academy.hsoub.com/files/10-%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88/" rel="">دليل خوادم أوبنتو</a> وكتاب <a href="https://itwadi.com/node/2765" rel="external nofollow">سطر أوامر لينُكس</a>، بالإضافة إلى العديد من المقالات المتوفرة على <a href="https://academy.hsoub.com/devops/linux/" rel="">أكاديمية حسوب</a>.
</p>

<h2>
	7. بواسطة راسبيري باي Raspberry Pi
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103825" href="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc3d6ed4d_.PNG.a68cb34f066c25656aae1319e01ab381.PNG" rel="" data-fileext="PNG"><img alt="راسبيري باي.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103825" data-unique="bup14jv5m" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc42d5576_.thumb.PNG.a66dcddd63cff5243aedb30e6d0d2afa.PNG"></a>
</p>

<p>
	<a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A8%D8%AF%D8%A1-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-r1497/" rel="">راسبيري باي</a> مُصمّم ليكون حاسوبًا ذا تكلفة منخفضة (أقل من 100 دولار) وذو استهلاك منخفض للطاقة لذا لا يدعم إمكانية تعدد المهام كما في طرق أخرى بل يناسب الأعمال محدودة المهام. استخدامه يعني تشغيل لينكس ويمكن الاستعانة ب<a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A%20%D8%A8%D8%A7%D9%8A/" rel="">دليل إرشادي</a> عن طريق موقع الويب الخاص به للحصول على معلومات حول جميع إمكانيات راسبيري باي ولينكس. تمنح هذه الطريقة إمكانية تعلم لينكس وجميع خياراته وتعطي صورة واضحة عن قوة الحوسبة المبسّطة صغيرة الحجم والصديقة للبيئة.
</p>

<h2>
	8. بالاعتماد على الحاويات
</h2>

<p>
	يعلم الغالبية الإمكانيات المتطورة للحاويات، حيث يمكن استخدام <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3-kubernetes%D8%9F-r612/" rel="">دوكر وكوبيرنيتيس</a> على أنظمة التشغيل ويندوز وAzure وماك ولينكس ولكن مالا يعلمه الكثير هو أن الحاويات هي نفسها لينكس، حيث تعد كل من تطبيقات الحوسبة السحابية والبنية التحتية أنظمة لينكس مصغرة تعمل جزئيًا بشكل وهمي وجزئيًا في بيئة مجردة bare metal والتي تُثبّت فيها الأجهزة الافتراضية مباشرةً على العتاد hardware بدلًا من تثبيتها في داخل نظام التشغيل المضيف. فعند تشغيل حاوية فإن ما يتم تشغيله هو توزيعة لينكس مصغرة شديدة التحديد ولكن تختلف الحاويات عن الأجهزة الافتراضية أو الخوادم الفعلية بحيث لا يتم استخدامها كنظام تشغيل للأغراض العامة، ومع ذلك يمكن لمطوري الحاويات معرفة كيفية هيكلة بنية نظام لينكس ومكان حفظ الملفات المهمة والأوامر الأكثر شيوعًا. تعتبر الحاويات مصممة لتكون خاصة بمهمة واحدة ولكن باعتبارها لينكس هذا ما يجعلها مرنة ويمكن استخدمها حسب ما هي مصممة لأجله أو استخدامها بهدف تجريب لينكس ومع أنها لا تعتبر تجربة مناسبة لحاسوب المستخدم ولكنها تجربة لينكس كاملة ويمكن تجربتها عبر الانترنت.
</p>

<p>
	في هذا الصدد، يمكنك الرجوع إلى مقال <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A3%D8%A8%D8%B1%D8%B2-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r561/" rel="">أبرز المفاهيم التي يجب عليك الإلمام بها عن الحاويات</a> ومقال <a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D9%84%D9%81%D9%87%D9%85-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7-r594/" rel="">دليل لفهم حاويات لينكس وكيفية التعامل معها</a>.
</p>

<h2>
	9. تثبيت لينكس على جهاز وهمي
</h2>

<p>
	تعد برامج الأنظمة الوهمية أبسط وأسهل طريقة لتجريب أي نظام تشغيل ويوجد العديد من هذه البرامج أشهرها برنامج VirtualBox وهو مفتوح المصدر ويعمل على أي نظام تشغيل مُضيف مثل ويندوز وماك، انظر هنا مقال <a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%AF%D8%A7%D8%AE%D9%84-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-%D9%81%D9%8A-%D8%A8%D9%8A%D8%A6%D8%A9-%D9%88%D9%87%D9%85%D9%8A%D8%A9-r577/" rel="">تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية</a>.
</p>

<p>
	تمتلك هذه الطريقة كل ميزات التجربة الواقعية وتتميز بالبساطة وسهولة الاستخدام حيث يمكن استخدام هذا النظام الوهمي كما لو كان مجرد تطبيق في الحاسوب، وتُستخدم إما كنسخة تجريبية لنظام لينكس أو كحالة خاصة عند الحاجة إلى بيئة لينكس مما يوفر بديلًا عن استخدام نظامي تشغيل سويًا والتي تعد معقدة وغير مرغوبة وتتطلب عملية إعادة التشغيل مع كل مرة يحتاج المستخدم فيها لتبديل النظام الحالي إلى النظام الثاني.
</p>

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

<p>
	العيب الوحيد لهذه الطريقة هو حصر استخدام النظام في مهمات محدودة وضرورة العودة إلى نظام التشغيل المضيف لتنفيذ المهمات الأساسية.
</p>

<h2>
	10. تثبيت لينكس كنظام تشغيل أساسي
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103824" href="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc37a2b56_.PNG.c80fffdb81058af7e0da475877e278a1.PNG" rel="" data-fileext="PNG"><img alt="تثبيت لينكس كنظام أساسي.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103824" data-unique="8wribjzqy" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfbc3a9af2c_.thumb.PNG.f48e2a086ecad9b24e29dced3d28032f.PNG"></a>
</p>

<p>
	في حال عدم اتخاذ القرار بشأن الطريقة الأنسب بين الطرق المذكورة سابقًا لتجريب لينكس هناك دومًا الطريقة التقليدية وهي تنزيل لينكس كنظام التشغيل الأساسي على الحاسوب.
</p>

<p>
	نظام لينكس مفتوح المصدر مما يعني أنه يمكن لأي شخص أن يقوم بتجميع لينكس وجميع البتات والأجزاء التي تجعله قابلاً للاستخدام في ما يسمى عادةً بالتوزيعة، إذ يوجد العديد من التوزيعات ولا يمكن تحديد أي توزيعة هي الأفضل لأن الأمر نسبي تبعًا لاحتياجات المستخدم وعمله لذا ينصح عادةً بتجريب بعض التوزيعات الشائعة قبل اختيار التوزيعة الأنسب، فمثلًا عند الحاجة إلى استخدام كاميرا الويب وأثناء تجريب توزيعة فشلت في التعرف على كاميرا الويب يجب الانتقال لتوزيعة أخرى تتعرف على كاميرا الويب، كما يمكن الاطلاع على مقال <a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">عرض موجز لأشهر توزيعات لينكس</a> الذي يقترح مجموعة من توزيعات لينكس المناسبة مهما كانت خبرة وإمكانيات المستخدم.
</p>

<p>
	خطوات التثبيت سهلة ولا تتطلب خبرة سابقة وتتضمن: تنزيل التوزيعة والتي تكون عبارة عن ملف ISO، ثم تنزيل Fedora Media Writer والذي يقوم بإنشاء مثبت على قرص تخزين خارجي أو قرص DVD ومن ثم تثبيت نظام لينكس على جهاز الحاسوب، ويمكن ذلك إما عبر <a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%85%D8%B9-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-r576/" rel="">تثبيت لينكس مع نظام ويندوز</a>، أو بتثبيت لينكس بمفرده كنظام تشغيل أساسي وللفائدة يمكن الاطلاع على <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%A8%D8%B3%D8%B7-%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-r575/" rel="">خطوات تثبيت توزيعة أوبنتو من لينكس</a>.
</p>

<p>
	بعد الاستخدام سيكتشف المستخدم ميزات لا غنى عنها على الرغم من عدم معرفته بها مسبقًا.
</p>

<p>
	باختيار أي طريقة مما سبق لخوض تجربة لينكس سيجد المستخدم أن التجربة تستحق عناء التعلم.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/19/7/ways-get-started-linux" rel="external nofollow">‎10 ways to get started with Linux</a> لصاحبه Seth Kenlon.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/learn/computer-science/" rel="">دورة علوم الحاسوب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">ما هو نظام التشغيل لينكس؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%AF%D8%A7%D8%AE%D9%84-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-%D9%81%D9%8A-%D8%A8%D9%8A%D8%A6%D8%A9-%D9%88%D9%87%D9%85%D9%8A%D8%A9-r577/" rel="">تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%B1%D8%AC%D8%B9-%D8%A5%D9%84%D9%89-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r615/" rel="">مرجع إلى أشهر أوامر لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%85%D8%B9-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-r576/" rel="">تثبيت لينكس مع نظام ويندوز</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">638</guid><pubDate>Fri, 05 Aug 2022 11:02:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x641;&#x644;&#x627;&#x62A; &#x628;&#x627;&#x643; Flatpak &#x646;&#x638;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x62D;&#x632;&#x64A;&#x645; &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%81%D9%84%D8%A7%D8%AA-%D8%A8%D8%A7%D9%83-flatpak-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%AD%D8%B2%D9%8A%D9%85-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r636/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfb7315f746_-----Flatpak-----.png.31953c7cd73308373778e824cd1a6d23.png" /></p>

<p>
	أثناء قراءة التعليمات الإرشادية لتثبيت تطبيق ما ستصادف غالبًا مصطلحات مثل فلات باك Flatpak وسناب Snap وآب إيماج AppImage، وربما تكون قد استخدمت أحدها على لينكس بدون أن تعلم، فما هي هذه المصطلحات؟
</p>

<p>
	يُعَد كل من فلات باك وسناب وآب إيماج نظامًا شاملًا للتحزيم packaging، وسنخص بالذكر في هذا المقال نظام فلات باك.
</p>

<h2>
	المشكلات قبل فلات باك
</h2>

<p>
	يُعَد تثبيت وإدارة البرمجيات أحد أهم جوانب إدارة نظام لينكس، والتي تزداد صعوبتها بسبب وجود العديد من <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%A6%D9%8A-%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r48/" rel="">توزيعات لينكس</a>. وعند استخدام الأنظمة التقليدية لإدارة الحزم بتنسيقات تقليدية deb/rpm، كانت تتواجد المشكلات التالية أثناء محاولة تشغيل برنامج ما في النظام:
</p>

<ul>
<li>
		البحث عن المكتبات اللازمة لعمل البرنامج.
	</li>
	<li>
		الاعتماديات، والتي تعني اعتماد البرنامج في عمله على حزم أخرى.
	</li>
	<li>
		الحاجة لتحقيق التوافق مع مدير الحزم الجديد عند التبديل من توزيعة لينكس الأخرى.
	</li>
	<li>
		لا توفر أمانًا كبيرًا لعمليات تثبيت وإدارة البرمجيات.
	</li>
</ul>
<p>
	يمكن لمستخدمي لينكس المحترفين إيجاد أفضل طريقة للتغلب على الصعوبات، ولكن بالنسبة للمبتدئين أو المستخدمين الذين لا يمتلكون وقتًا لتعلم إدارة الحزم أو يجدون صعوبةً بتعلمها أو الخبرة بالبحث عن كل خلل وإصلاحه؛ يكون الأمر صعبًا جدًا، وهنا يأتي دور فلات باك.
</p>

<h2>
	ما هو فلات باك Flatpak بالتفصيل؟
</h2>

<p>
	أسّس ألكسندر لارسون Alexander Larsson فلات باك مفتوح المصدر في صيف عام 2007 ليكون نظامًا مُساعدًا لإدارة الحزم ويتيح نشر البرمجيات وتثبيتها وإدارتها، ويتم تثبيت البرمجيات بلا أي مشكلات ودون الحاجة إلى القلق بشأن الاعتماديات أو زمن التنفيذ أو المكتبات التي يحتاجها البرنامج في عمله أو توزيعة لينكس المستخدمة سواءً كانت التوزيعة تعتمد على ديبيان أو آرتش لذلك يوُصف بالنظام الشامل الذي وفر حلولًا لمعظم مشكلات الأنظمة التقليدية.
</p>

<h2>
	آلية عمل فلات باك
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103820" href="https://academy.hsoub.com/uploads/monthly_2022_07/62dfb7558625b_FlatpakDocumentation.png.e3f5b56727cb5798c2d534cb45a30d4f.png" rel=""><img alt="Flatpak Documentation.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103820" data-unique="psk0ksib6" src="https://academy.hsoub.com/uploads/monthly_2022_07/62dfb7558625b_FlatpakDocumentation.png.e3f5b56727cb5798c2d534cb45a30d4f.png"></a>
</p>

<p>
	تعمل تطبيقات فلات باك في <a href="https://ar.wikipedia.org/wiki/%D9%85%D9%84%D8%B9%D8%A8_(%D8%AD%D9%88%D8%B3%D8%A8%D8%A9)" rel="external nofollow">بيئة معزولة sandbox</a> تحتوي على عدة أمور لتلبية متطلبات تشغيل برنامج محدد مثل زمن التنفيذ والمكتبات المجمعة.
</p>

<p>
	وبسبب خاصية العزل، لا يمكن لتطبيقات فلات باك أن تجري أي تغييرات على النظام دون إذن من المستخدم، مما يُحسّن أمان النظام.
</p>

<h2>
	من أين يمكن الحصول على تطبيقات فلات باك؟
</h2>

<p>
	لا يمكن استخدام حزم فلات باك بدون أن توفر توزيعة لينكس المستخدمة خاصية دعم فلات باك، وتتوفر هذه الخاصية افتراضيًا في توزيعات معينة مثل فيدورا Fedora وسولس Solus، بينما تحتاج بعض التوزيعات مثل <a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-ubuntu-%D9%88%D8%A2%D8%B1%D8%AA%D8%B4-arch-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-r625/" rel="">أوبنتو Ubuntu</a> إلى تثبيت خاصية الدعم يدويًا.
</p>

<p>
	لا يقيّد فلات باك المستخدم بمصدر واحد للحصول على البرامج، حيث توجد العديد من مستودعات فلات باك وأشهرها المستودع الخارجي <a href="https://flathub.org/about" rel="external nofollow">فلات هاب Flathub</a> وهو مركز تطبيقات وبرامج أنشأه فريق فلات باك ويمكن من خلاله نشر البرمجيات وإدارتها، وتوضح الصورة التالية الصفحة الرئيسية لموقع فلات هاب:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103819" href="https://academy.hsoub.com/uploads/monthly_2022_07/Flathub.png.9306a47c71b831118a06051d906252ea.png" rel=""><img alt="Flathub.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103819" data-unique="dsfwiyk5z" src="https://academy.hsoub.com/uploads/monthly_2022_07/Flathub.thumb.png.41af93a0f1d74e33ade5f9da2195c8e9.png"></a>
</p>

<h2>
	مزايا وعيوب فلات باك
</h2>

<p>
	يمتلك فلات باك العديد من المزايا والعيوب كغيره من الأنظمة، سنناقش تاليًا العديد من هذه المزايا والعيوب:
</p>

<h3>
	مزايا استخدام فلات باك
</h3>

<ul>
<li>
		يمكن تشغيل تطبيقات فلات باك على أي توزيعة لينكس.
	</li>
	<li>
		يوفر توافقيةً مستقبليةً أي أنه يلغي مشكلة عدم عمل بعض التطبيقات عند ترقية إصدار توزيعة لينكس (فقد لا تدعم بعض التطبيقات التوزيعات الجديدة).
	</li>
	<li>
		يحل مشكلة الاعتماديات.
	</li>
	<li>
		يوفر في بعض الحالات أحدث وأهم إصدار من برنامج ما.
	</li>
	<li>
		لا يقيد المستخدمين بمورد واحد بسبب عدم اعتماد التوزيع على خادم مركزي.
	</li>
	<li>
		يُحسّن أمان النظام بسبب خاصية التطبيقات المعزولة sandboxed applications.
	</li>
	<li>
		يحقق تكامل مريح مع مركز البرمجيات الموجود على توزيعة لينكس.
	</li>
</ul>
<h3>
	عيوب استخدام فلات باك
</h3>

<ul>
<li>
		لا يدعم نسخة الخادم، أي لا تتوفر منه نسخة للخادم، وهو متاح فقط لأجهزة الحاسوب المكتبي بنظام التشغيل لينكس.
	</li>
	<li>
		امتلاء أسرع لمساحة التخزين، حيث تشغل تطبيقات فلات باك مساحة أكبر على القرص مما تشغله عادةً ملفات deb/rpm، مما يوجب إيجاد طريقة لتفريغ مساحة التخزين.
	</li>
	<li>
		تفقد بعض البرمجيات فعاليتها بسبب خاصية العمل في بيئة معزولة، فقد لا تدعم تطبيقات فلات باك مثلًا سمة GTK المخصصة حسب المستخدم.
	</li>
</ul>
<h2>
	تثبيت فلات باك
</h2>

<p>
	يكون فلات باك مثبتًا على بعض توزيعات لينكس مثل توزيعات فيدورا ولا يكون مثبتًا على توزيعات أخرى مثل أوبنتو، لذا سنشرح كيفية تثبيته وضبطه على تلك التوزيعة، أما إن كانت توزيعتك التي تستخدمها مختلفة، فاختر من صفحة <a href="https://flatpak.org/setup/" rel="external nofollow">التثبيت</a> الرسمية لفلات باك توزيعتك وطبق الأوامر.
</p>

<p>
	نفذ الأمر التالي في سطر الأوامر لتثبيت فلات باك على توزيعة أوبنتو لديك:
</p>

<pre class="ipsCode">
sudo apt install flatpak
</pre>

<p>
	يجب أن يكون إصدار التوزيعة 18.10 وما بعد ليعمل الأمر بنجاح، أو نفذ الأوامر الثلاثة التالية:
</p>

<pre class="ipsCode">
sudo add-apt-repository ppa:flatpak/stable
sudo apt update
sudo apt install flatpak
</pre>

<p>
	نزل إضافة باسم Software Flatpak حتى تتاح إمكانية تثبيت التطبيقات دون الحاجة إلى سطر الأوامر، وذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">
sudo apt install gnome-software-plugin-flatpak
</pre>

<p>
	أضف المستودع Flathub الذي أشرنا إليه سابقًا حتى تتمكن من الوصول إلى التطبيقات وتثبيتها منه:
</p>

<pre class="ipsCode">
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
</pre>

<p>
	أعد تشغيل الحاسوب حتى تكتمل عملية التثبيت، وبعدها يمكنك تثبيت التطبيقات، تصفحها من واجهة التطبيق أو جرب تصفح قائمة <a href="https://flathub.org/apps" rel="external nofollow">apps</a> في الموقع الرسمي وثبت التطبيق الذي تريد.
</p>

<h2>
	استخدام فلات باك عبر سطر الأوامر
</h2>

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

<p>
	يعد الأمر <code>flatpak</code> الأمر الأساسي المستخدم ثم تلحق به كافة الأوامر، مثلًا أمر التثبيت يكون <code>flatpak install</code> وأمر الإزالة يكون <code>flatpak uninstall</code> وهكذا.
</p>

<h3>
	البحث عن تطبيق
</h3>

<p>
	يمكنك البحث ضمن التطبيقات باستعمال الأمر <code>search</code>، فمثلًا، إن أردت البحث عن تطبيق الرسم GIMP نفذ الأمر التالي:
</p>

<pre class="ipsCode">
flatpak search gimp
</pre>

<p>
	سيعيد الأمر أي نتيجة تطابق عبارة البحث، وتمثل تلك النتيجة معرّف التطبيق والمستودع الموجود فيه وهي تفاصيل مهمة لاستعمالها في عملية التثبيت كما يلي.
</p>

<h3>
	تثبيت تطبيق
</h3>

<p>
	إن أردت تثبيت تطبيق ما وليكن تطبيق <a href="https://academy.hsoub.com/design/graphic/gimp/" rel="">الرسم GIMP</a> الذي بحثنا عنه في الأمر السابق، فاستعمل الأمر التالي:
</p>

<pre class="ipsCode">
flatpak install flathub org.gimp.GIMP
</pre>

<p>
	يشير <code>flathub</code> في الأمر إلى المستودع الذي سيثبّت التطبيق منه والجملة التي في آخره <code>org.gimp.GIMP</code> إلى معرف التطبيق وهو GIMP المراد تثبيته، ويتكون المعرف ذاك من 3 أجزاء كما هو واضح آخرها اسم التطبيق.
</p>

<p>
	تثبيت أي تطبيق آخر مشابه للعملية ولكن يختلف جزء معرِّف التطبيق أو أحيانًا المستودع المراد تثبيت التطبيق منه أيضًا، وعمومًا وبدءًا من الإصدار 1.2 من فلات باك، أصبح بإمكانك اختصار الأمر السابق بذكر اسم التطبيق فقط كما يلي:
</p>

<pre class="ipsCode">
flatpak install gimp
</pre>

<p>
	ستظهر لك رسالة باسم المستودع ومعرف التطبيق لتؤكدها قبل بدء تثبيت التطبيق.
</p>

<p>
	أضف إلى ذلك، توفر معلومات التطبيقات المراد تثبيتها عبر ملف <code>‎.flatpakref</code> والذي يمكن استعماله في عملية التثبيت أيضًا، سواءً بتحديده محليًا إن كان على الحاسوب أو تحديده عبر رابط ويب، مثلًا يمكن تثبيت تطبيق GIMP السابق بهذه الطريقة عبر الأمر التالي:
</p>

<pre class="ipsCode">
flatpak install https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref
</pre>

<h3>
	تشغيل تطبيق
</h3>

<p>
	يمكنك تشغيل التطبيق بمجرد تثبيته كما وضحنا آنفًا باستعمال الأمر <code>run</code> مع معرّف التطبيق كما يلي:
</p>

<pre class="ipsCode">
flatpak run org.gimp.GIMP
</pre>

<h3>
	تحديث التطبيقات
</h3>

<p>
	يمكنك تحديث جميع التطبيقات المثبتة عبر فلات باك باستعمال الأمر التالي:
</p>

<pre class="ipsCode">
flatpak update
</pre>

<h3>
	عرض التطبيقات المثبتة
</h3>

<p>
	استعمل الأمر التالي لعرض كافة التطبيقات المثبتة:
</p>

<pre class="ipsCode">
flatpak list --app
</pre>

<h3>
	حذف تطبيق
</h3>

<p>
	استعمل الأمر التالي لحذف تطبيق مثبّت بتحديد معرّفه:
</p>

<pre class="ipsCode">
flatpak uninstall org.gimp.GIMP
</pre>

<p>
	عرضنا إلى هنا الأوامر شائعة الاستخدام ويمكنك الرجوع إلى <a href="https://docs.flatpak.org/en/latest/using-flatpak.html" rel="external nofollow">الموقع الرسمي</a> لمزيد من التفاصيل إن احتجت لها.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://itsfoss.com/what-is-flatpak/" rel="external nofollow">What is Flatpak?‎</a> لصاحبه Ankush Das.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">عرض موجز لأشهر توزيعات لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r629/" rel="">مدخل إلى مستودعات أوبنتو</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%AF%D8%A7%D8%AE%D9%84-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-%D9%81%D9%8A-%D8%A8%D9%8A%D8%A6%D8%A9-%D9%88%D9%87%D9%85%D9%8A%D8%A9-r577/" rel="">تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B4%D8%B1%D9%88%D9%86-%D8%A3%D9%85%D8%B1%D8%A7-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%8A%D9%81%D8%AA%D8%B1%D8%B6-%D8%A3%D9%86-%D9%8A%D8%B9%D8%B1%D9%81%D9%87%D8%A7-%D9%83%D9%84-%D9%85%D8%AF%D9%8A%D8%B1-%D9%86%D8%B8%D9%85-r355/" rel="">عشرون أمرا في لينكس يفترض أن يعرفها كل مدير نظم</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">636</guid><pubDate>Tue, 26 Jul 2022 09:50:06 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x633;&#x627;&#x639;&#x62F; Ansible &#x639;&#x644;&#x649; &#x623;&#x62A;&#x645;&#x62A;&#x629; &#x645;&#x647;&#x627;&#x645; &#x628;&#x633;&#x64A;&#x637;&#x629; &#x644;&#x625;&#x62F;&#x627;&#x631;&#x629; &#x62D;&#x648;&#x627;&#x633;&#x64A;&#x628; &#x627;&#x644;&#x645;&#x646;&#x632;&#x644;</title><link>https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%A7%D8%B9%D8%AF-ansible-%D8%B9%D9%84%D9%89-%D8%A3%D8%AA%D9%85%D8%AA%D8%A9-%D9%85%D9%87%D8%A7%D9%85-%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%AD%D9%88%D8%A7%D8%B3%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%86%D8%B2%D9%84-r635/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62db8d25822d2_-----Ansible.png.a9abfd715edafcaa4cff9eb2bc6282c1.png" /></p>

<p>
	يعد <a href="https://academy.hsoub.com/devops/deployment/ansible/%D9%83%D9%8A%D9%81%D9%8A%D9%91%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%B6%D8%A8%D8%B7-ansible-%D8%B9%D9%84%D9%89-ubuntu-1804-r394/" rel="">Ansible</a> أداة لأتمتة المهام التقنية البسيطة، وسنتناول في هذا المقال كيفية الاستفادة منه لإعادة استخدام الحواسيب المحمولة القديمة وإدارتها.
</p>

<h2 id="المهمة">
	المهمة
</h2>

<p>
	تمتلك طفلة ذات سبع سنوات جهاز Dell Mini 9 مزود بنظام أوبنتو وعندما أمضت عليه الكثير من الوقت في اللعب وسماع الأغاني واكتشاف برامج جديدة مسلية ومفيدة، رغبت أختها الصغرى ذات الست سنوات بالحصول على جهاز مشابه، فاستعان الأب <a href="https://academy.hsoub.com/devops/deployment/ansible/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-ansible-%D9%84%D8%A3%D8%AA%D9%85%D8%AA%D8%A9-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%86%D8%B4%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-ubuntu-r158/" rel="">بأداة Ansible</a> لإنشاء نسخة مطابقة تمامًا من حيث إعدادات الضبط والأداء والمظهر على جهاز Dell D620 قديم، مع توثيق خطوات العمل لإتاحة إمكانية تكرارها بسهولة في حال الحاجة لها مستقبلًا عند توقف الجهاز عن العمل أو عبث الطفلة بإعدادات الجهاز أو أي خطأ من هذا النوع.
</p>

<h2 id="آلية-العمل">
	آلية العمل
</h2>

<p>
	قسّم بدايًة منهج Ansible إلى ثلاثة أجزاء: التمهيد bootstrap وإعداد الحساب وتثبيت البرنامج، كان بالإمكان وضع كل شيء في سكربت واحد عملاق لكن فصل هذه المهام يسمح بمزجها ومطابقتها مع مشاريع أخرى وتكراراها وتحسينها بشكل فردي بمرور الوقت.
</p>

<p>
	تساعد قابلية قراءة ملف YAML من Ansible على توضيح الأمور أثناء عملية تحسين الأنظمة.
</p>

<h3 id="مرحلة-التمهيد-bootstrap">
	مرحلة التمهيد bootstrap
</h3>

<p>
	استخدم توزيعة Debian بنظام 32 بت كنقطة انطلاق كونها توزيعة مناسبة لأجهزة الحاسوب القديمة، كما يمكن اختيار توزيعة مغايرة ولمعرفة التوزيعات الأنسب لهذه الحالة يمكن الاطلاع على مقال <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%A6%D9%8A-%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r48/" rel="">الدليل النهائي لاختيار توزيعة لينكس</a>. يعتمد سكربت bootstrap المكتوب بلغة YAML على حساب مستخدم آخر غير حساب الجذر ليكون متاحًا عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> ويقوم بتثبيت الحد الأدنى من حزم نظام التشغيل وهذا غير كافي بالنسبة إلى Ansible مما يستوجب تحسينها لتحقق بعض المعايير وذلك باستخدام ما يلي لتحقيق التوافق مع مضيف واحد وتسجيل الدخول الفوري مع تصعيد الصلاحيات:
</p>

<pre class="ipsCode">
$ ansible-playbook bootstrap.yml -i '192.168.0.100,' -u jfarrell -Kk
</pre>

<p>
	يستخدم السكربت <a href="https://docs.ansible.com/ansible/2.3/raw_module.html" rel="external nofollow">وحدة Ansible الأولية</a> لتعيين بعض المتطلبات الأساسية حيث يضمن توفر Python ويقوم بترقية نظام التشغيل وإنشاء حساب Ansible للتحكم ونقل مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> ويضبط تصعيد صلاحيات مدير النظام sudo، أي يجب أن يكون كل شيء جاهزًا عند اكتمال التمهيد حتى تشارك هذه العقدة بشكل كامل في قائمة Ansible.
</p>

<h3 id="مرحلة-إعداد-الحسابات">
	مرحلة إعداد الحسابات
</h3>

<p>
	يتم استخدام سكربت YAML لإعداد حسابات جميع المستخدمين أو إعادة تعيينها، كما يمكن استخدامها لإصلاح الحسابات المقفلة، ويحافظ على ثبات واتساق معرّفات هوية المستخدم UID ومعرّفات المجموعة GID ضمن العدد الصغير من الأجهزة التي لدينا، ولا حاجة لإعداد خدمة معلومات الشبكة أو <a href="https://academy.hsoub.com/certificates/redhat/rhcsa/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%8A%D8%AB%D8%A7%D9%82-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-ldap-%D8%B9%D9%84%D9%89-red-hat-enterprise-linux-r53/" rel="">استيثاق LDAP</a> كون عدد الحسابات صغير جدًا، وفيما يلي قسم إعداد الحسابات في السكربت:
</p>

<pre class="ipsCode">
---
- name: Set user accounts
  hosts: all
  gather_facts: false
  become: yes
  vars_prompt:
    - name: passwd
      prompt: "Enter the desired ansible password:"
      private: yes

  tasks:
  - name: Add child 1 account
    user:
      state: present
      name: child1
      password: "{{ passwd | password_hash('sha512') }}"
      comment: Child One
      uid: 888
      group: users
      shell: /bin/bash
      generate_ssh_key: yes
      ssh_key_bits: 2048
      update_password: always
      create_home: yes
</pre>

<p>
	يطلب قسم vars_prompt كلمة مرور ويتم وضعها في تحويل Jinja2 لإنتاج تعمية كلمة المرور المطلوبة، هذا يعني عدم الحاجة إلى توفير القيمة الخاصة بكلمات المرور في الشيفرة في ملف YAML ويمكن تشغيله لتغيير كلمات المرور حسب الحاجة.
</p>

<h3 id="مرحلة-تثبيت-البرنامج">
	مرحلة تثبيت البرنامج
</h3>

<p>
	لا يزال ملف YAML الخاص بتثبيت البرنامج قيد التطوير ويحتوي على مجموعة أدوات أساسية تساعد مدير النظام والأمور التي يحتاجها المستخدمون.
</p>

<p>
	يقوم بالتأكد من تثبيت نفس واجهة المستخدم الرسومية GUI وجميع البرامج والألعاب وملفات الوسائط نفسها على كل جهاز، وفي ما يلي مقتطف صغير من البرنامج:
</p>

<pre class="ipsCode">
- name: Install kids software
    apt:
      name: "{{ packages }}"
      state: present
    vars:
      packages:
      - lxde
      - childsplay
      - tuxpaint
      - tuxtype
      - pysycache
      - pysiogame
      - lmemory
      - bouncy
</pre>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	كتب الأب سكربتات Ansible الثلاثة السابقة بواسطة جهاز وهمي واختبرها على الجهاز الأول D620 ثم حولها بسهولة إلى الجهاز الثاني Mini 9 ليحقق التماثل في كلا النظامين، وكان أداء النظامين متشابه لفترة من الوقت ولكن بعدها اكتشفت الطفلة الكبرى ضعف أداء جهازها لذا قام الأب باستبداله بجهاز D620 آخر قديم فقام بتحسينه عن طريق استبدال بطارية BIOS وإضافة SSD جديد وترقية ذاكرة الوصول العشوائي.
</p>

<p>
	وعند البدء بإعدادات التمهيد والحساب والبرامج تم الاستعانة بسكربتات Ansible التي تم إنشاؤها سابقًا وكانت جميع الإعدادات موثقة بوضوح وجاهزة للاستخدام.
</p>

<p>
	كما ساعدت أتمتة Ansible على تسريع عملية التثبيت الجديدة حيث استغرقت عملية تثبيت الحد الأدنى من حزم نظام التشغيل ديبيان عبر منفذ يو اس بي USB stick حوالي 15 دقيقة واستغرق الشكل اللاحق للنظام باستخدام Ansible لنشر المستخدم النهائي تسع دقائق أخرى فقط.
</p>

<h2 id="النتيجة">
	النتيجة
</h2>

<p>
	تظهر هذه التجربة البسيطة القيمة الحقيقية لقدرات الأتمتة والتوثيق باستخدام Ansible، فتخصيص بعض الوقت في تعلم وممارسة Ansible يوفر الكثير من الوقت لاحقًا عند الحاجة لتوفير جهاز جديد أو إعادة استخدام جهاز ما، كما أن ملف YAML واضح وسهل الاختبار والتحسين.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/19/9/ansible-documentation-kids-laptops" rel="external nofollow">How Ansible brought peace to my home</a> لصاحبه James Farrell.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">635</guid><pubDate>Sat, 23 Jul 2022 05:59:11 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r634/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e977887a_------.png.631d90dc752decb243cd959e389a2cb9.png" /></p>

<p>
	يعتقد البعض أن تثبيت التطبيقات البرمجية في لينكس عملية صعبة لا يفهمها سوى المطورون، هذا الاعتقاد خاطئ وسنوضح في هذا المقال جميع التفاصيل اللازم معرفتها لمساعدة مستخدمي لينكس في الحصول على برامج جيدة لحواسيبهم.
</p>

<p>
	تتعدد المصادر التي يمكن من خلالها الحصول على التطبيقات حتى يكاد يكون من المستحيل إحصاء عددها وذلك بسبب تنوع طرق توزيع التطبيقات التي تستخدمها فِرق التطوير، من أبرز هذه الطرق هي المستودعات.
</p>

<h2 id="المستودعات">
	المستودعات
</h2>

<p>
	المستودع repository هو خادم عام يستضيف حزم برامج قابلة للتثبيت، وقد استخدم لينكس المستودعات لتوزيع البرمجيات لمدة تزيد عن عقد من الزمن وما تزال تعد المستودعات الطريقة الأساسية لتثبيت التطبيقات على نظام لينكس لذا فإن المستودعات خيار البحث الأول عن أي تطبيق مطلوب.
</p>

<p>
	توفر كل توزيعة لينكس أمرًا برمجيًا لعملية التثبيت وغالبًا ما يُزوّد هذا الأمر بواجهة رسومية، إذ يجلب الأمر البرنامج من الخادم ويثبته على حاسوب المستخدم، ويُعد هذا المفهوم بسيطًا لدرجة أنه يُعدّ نموذجًا معياريًا لجميع أنظمة التشغيل الرئيسية الخاصة بالهواتف المحمولة، وأصبح أيضًا النموذج المُستخدم من قبل متاجر التطبيقات الخاصة بأنظمة تشغيل أجهزة الحاسوب الرئيسية غير مفتوحة المصدر.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103429" href="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e9a70ba1_.PNG.bf2925bbd068cc06fd5cc29914eafe2f.PNG" rel=""><img alt="تنزيل برامج من المستودع.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103429" data-unique="erwvf9qlm" src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e9d9c174_.thumb.PNG.dad055ad8b61516e4849d7026d8e86a6.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يُثبّت تطبيق إنكسكيب inkscape من المستودع الموجود فيه باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
$ sudo dnf install inkscape
</pre>

<p>
	الأمر الموجود في السطر السابق هو <code><a href="https://academy.hsoub.com/devops/linux/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-apt-%D8%8Cyum-%D8%8Cdnf-%D8%8Cpkg-r231/" rel="">dnf</a></code> لأن التوزيعة المستخدمة هي فيدورا Fedora ويتغير هذا الأمر من توزيعة لأخرى، إذ تستخدم توزيعة OpenSUSE الأمر <code>zypper</code>، وتستخدم كل من <a href="https://academy.hsoub.com/devops/linux/%D9%81%D9%8A-%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AE%D8%AA%D9%84%D9%81-ubuntu-%D8%B9%D9%86-debian%D8%9F-r235/" rel="">ديبيان Debian وأوبنتو Ubuntu</a> الأمر <code>apt</code>، وتستخدم توزيعة Slackware الأمر <code>sbopkg</code>، وتستخدم توزيعة FreeBSD الأمر <code>pkg_add</code>، أما بالنسبة لتوزيعة OpenIndiana القائمة على Illumos فتستخدم الأمر <code>pkg</code>.
</p>

<p>
	لفهم الآلية بشكل أعمق، تتضمن العملية السابقة البحث عن الاسم الصحيح لما هو مطلوب تثبيته فقد يكون الاسم المعروف لبرنامج ما ليس الاسم الرسمي له أو قد لا يتفرد بهذا الاسم أي يشترك به مع تطبيق آخر، لذا يمكن في البداية البحث عنه كما في المثال التالي:
</p>

<pre class="ipsCode">
$ sudo dnf search pyqt
PyQt.x86_64 : Python bindings for Qt3
PyQt4.x86_64 : Python bindings for Qt4
python-qt5.x86_64 : PyQt5 is Python bindings for Qt5
</pre>

<p>
	فعند البحث عن المجموعة pyqt تبين وجود ثلاثة خيارات، يجب عندها تحديد اسم الحزمة المراد تثبيتها ثم استخدام أمر التثبيت <code>dnf install</code> لإجراء التنزيل الفعلي والتثبيت التلقائي بالشكل التالي:
</p>

<pre class="ipsCode">
$ sudo dnf install python-qt5
</pre>

<p>
	يمكن الحصول على تفاصيل حول تثبيت تطبيق ما من مستودع البرامج من خلال مراجعة توثيق التوزيعة المستخدمة، ولتسهيل عملية التنزيل يمكن الاعتماد على الواجهة الرسومية بدلًا من كتابة الأوامر البرمجية وفي هذه الحالة وبطريقة مشابهة لأمر التثبيت، يختلف اسم المثبت الرسومي باختلاف التوزيعة المستخدمة كما يمكن التبديل إلى مثبت آخر إذا كان لا يناسب المستخدم.
</p>

<p>
	تتميز هذه الطريقة بالاستخدام السلس والسهل إذ نكتب ببساطة اسم التطبيق المطلوب في حقل البحث ثم نبحث عنه ونثبته، وتوضح الصورة التالية عملية البحث عن نفس المجموعة pyqt المستخدمة في المثال السابق:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103425" href="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e87e53ab_.PNG.3edd9864c8a829db10b88ba8daab789d.PNG" rel=""><img alt="البحث باستخدام الواجهات الرسومية.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103425" data-unique="ip6dcgfjt" src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e8ac75a0_.thumb.PNG.f1332c4c1acac8c2de4a30d8bcfc95be.PNG" style=""></a>
</p>

<p>
	نلاحظ وجود عدة نتائج لعملية البحث وما يهمنا فقط هو التطبيق ذي الصلة بالبرنامج أو الحزمة التي بحثنا عنها، ونستطيع معرفة هذا التطبيق عادةً عن طريق وسوم يمكن العثور عليها في المشغل أو القائمة.
</p>

<h3 id="مستودعات-إضافية">
	مستودعات إضافية
</h3>

<p>
	تمتلك كل توزيعة لينكس غالبًا بالإضافة إلى المستودع المعياري مستودعات إضافية عامة، فمثلًا يخدم <a href="https://docs.fedoraproject.org/en-US/epel/" rel="external nofollow">مستودع EPEL</a> كل من مشروع Red Hat وCentOS، بينما يخدم <a href="https://rpmfusion.org/" rel="external nofollow">مستودع RPMFusion</a> توزيعة فيدورا، ويمتلك أوبنتو عدة مستودعات بالإضافة إلى شبكة أرشيف الحزم الشخصية Personal Package Archive network والتي يرمز لها اختصارًا PPA، ويوفر مدير الحزم <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-%D8%A8%D8%A7%D9%83-%D9%85%D8%A7%D9%86-pacman-%D9%81%D9%8A-%D8%A2%D8%B1%D8%AA%D8%B4-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r630/" rel="">Packman</a> برامج إضافية لتوزيعة OpenSUSE، ويوفر <a href="https://slackbuilds.org/" rel="external nofollow">SlackBuilds.org</a> سكربت لمستودعات توزيعة Slackware بهدف تخديم مستخدمي مجتمع هذه التوزيعة.
</p>

<p style="text-align: center;">
	<img alt="مستودع RPMFusion الإضافي لتوزيعة فيدورا.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103430" data-unique="lrz848bau" src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5ea02bd31_RPMFusion.PNG.11fa3b2515a7fdc7a2e41eb4abdda74f.PNG" style="width: 750px; height: auto;"></p>

<p>
	يبحث لينكس افتراضيًا في مستودعاته الرسمية فقط لتثبيت تطبيق ما، أما المستودعات الإضافية تُضاف يدويًا وتسهّل الوصول إلى مجموعة من البرامج، تتم عملية الإضافة بسهولة وبطريقة مشابهة لتثبيت حزمة برامج وذلك بالاستعانة بمدير ضبط الحزم ليضيف بيانات المستودع إلى ملف الضبط، أو يمكن تثبيت المستودع عبر سطر الأوامر، انظر الأمر التالي مثلًا (يختلف باختلاف التوزيعة):
</p>

<pre class="ipsCode">
$ sudo dnf config-manager --add-repo=http://example.com/pub/centos/7
</pre>

<p>
	عندما تُثبَّت برامج معينة مثل تطبيق المحادثة بالفيديو GNU Ring، ومتصفح الويب Vivaldi، ومتصفح غوغل كروم Google Chrome، والعديد من البرامج الأخرى فإن ما يتم تثبيته في الواقع هو الوصول إلى مستودعاتهم الخاصة، والتي يتم من خلالها تثبيت أحدث إصدار من التطبيق المطلوب على حاسوب المستخدم.
</p>

<h2 id="تثبيت-التطبيقات-من-خارج-المستودعات">
	تثبيت التطبيقات من خارج المستودعات
</h2>

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

<h3 id="حزم-لينكس">
	حزم لينكس
</h3>

<p>
	يقوم المطور أحيانًا بتوزيع البرامج بصيغ حزم لينكس الشائعة مثل RPM أو DEB، أو الصيغ الأحدث مثل FlatPak أو Snap، ولا تسمح هذه الصيغ للمستخدم بالوصول إلى المستودع وإنما يحصل على الحزمة فقط، ولا تحتاج إلى عملية تثبيت معقدة بل تتم بآلية مشابهة لتثبيتها من أحد المستودعات، ويمكن الاستعانة بمُثبِّت مزود بواجهة رسومية ليوجّه المستخدم خلال عملية التثبيت، وذلك عن طريق النقر على الحزمة نقرًا مزدوجًا بعد تنزيلها، ويمكن بدلًا من ذلك العودة إلى الطريقة التقليدية والتثبيت من خلال سطر الأوامر كما يلي:
</p>

<pre class="ipsCode">
$ sudo dnf install ~/Downloads/lwks-14.0.0-amd64.rpm
</pre>

<p>
	يُثبّت ملف الحزمة المعزول محليًّا مما يعني أن برنامج إدارة الحزم لا يحتاج إلى تنزيله لتثبيته ويعالج معظم مديري الحزم هذا الأمر بشفافية، فمثلًا يوفر محرر الفيديو <a href="https://lwks.com/" rel="external nofollow">Lightworks</a> ملفًا ذو امتداد <code>deb.</code> لمستخدمي APT وملف ذو امتداد rpm. لمستخدمي RPM وعندما يريد المستخدم التحديث عليه العودة إلى موقع الويب وتنزيل أحدث ملف مناسب وإعادة تثبيته يدويًا.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		قد تحتاج بعض التطبيقات اتخاذ خطوات إضافية لتشغيلها، يتم الاطلاع على هذه التفاصيل عن طريق قراءة التوثيق الخاص بالتطبيق الذي يتم تثبيته.
	</p>
</blockquote>

<h3 id="التثبيت-بواسطة-سكربت-شامل">
	التثبيت بواسطة سكربت شامل
</h3>

<p>
	يصدر المطور الحزم بإحدى النماذج العامة وتشمل الإمتدادات الشائعة <code>run.</code> و <code>sh.</code> ويقدم المطور وسائل تُساعد المستخدم على إتمام عملية التثبيت، وتتنوع أدوات التثبيت إذ يكون بعضها أدوات رسومية بينما يعمل البعض الآخر في سطر الأوامر ويمكن البدء بعملية التثبيت مباشرةً من سطر الأوامر كما يلي:
</p>

<pre class="ipsCode">
$ sh ./game/gog_warsow_x.y.z.sh
</pre>

<p>
	ويتوفر خيار آخر وهو البدء بعملية التثبيت من سطح المكتب مباشرةً وذلك وفق عمليات بسيطة وهي: النقر بزر الفأرة الأيمن على أيقونته والتوجه إلى خصائص ثم تفعيل خاصية قابلية التنفيذ Is executable، وتوضحها الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103427" href="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e9299d0d_.PNG.44723343568164e44f873dbfac03ca39.PNG" rel=""><img alt="تشغيل المثبت على سطح المكتب.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103427" data-unique="2ifvgtfwr" src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e9524e6a_.thumb.PNG.252a51b9e84d770f677637e254b68f58.PNG" style=""></a>
</p>

<p>
	يلي ذلك خطوة بسيطة وهي النقر نقرًا مزدوجًا فوق الأيقونة لبدء التثبيت، وبالنسبة لبقية المراحل فهي بسيطة وتتطلب فقط اتباع التعليمات التي تظهر على الشاشة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103426" href="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e8ddde86_.PNG.7ed24007cd3f50cca8ccc68616378579.PNG" rel=""><img alt="بدء التثبيت.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103426" data-unique="spk4ydl8b" src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e9013bf6_.thumb.PNG.d490f4e3f81305cb43e4cd8ff4be837d.PNG" style=""></a>
</p>

<p>
	تستخدم هذه الطريقة في تثبيت مشغل بطاقة الرسوميات نفيديا NVIDIA وحزم FX المرئية مثل Nuke وMari من شركة Foundry، بالإضافة إلى العديد من الألعاب من منصة <a href="https://www.gog.com/" rel="external nofollow">GOG</a> الخالية من الحقوق الرقمية.
</p>

<h3 id="التطبيقات-المحمولة-بصيغة-appimage">
	التطبيقات المحمولة بصيغة AppImage
</h3>

<p>
	تعد صيغة AppImage جديدة نسبيًا في لينكس، على الرغم من أن مفهومها يعتمد على كل من NeXT و Rox وفكرته بسيطة، إذ يوضع كل ما هو مطلوب لتشغيل التطبيق في مجلد واحد ثم يتم التعامل مع هذا المجلد على أنه تطبيق ثم تشغيله ببساطة عن طريق النقر نقرًا مزدوجًا على الأيقونة الخاصة به فيبدأ التشغيل ولا يتم تثبيت التطبيق بالمعنى التقليدي بل إنه يعمل من أي مكان موجود فيه على محرك الأقراص الثابتة.
</p>

<p>
	على الرغم من قدرته على العمل كتطبيق قائم بذاته، يقترح نموذج AppImage عادةً تنفيذ بعض الإجراءات البسيطة مثل إضافة أيقونة واسم التطبيق لقائمة التطبيقات المثبتة على الحاسوب، ويظهر الاقتراح كما هو موضح في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103428" href="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e97384a5_AppImage.PNG.3e027ff3300deeb2ffaaa4230a8dadf8.PNG" rel=""><img alt="تكامل نظام AppImage.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103428" data-unique="phr7rdw4p" src="https://academy.hsoub.com/uploads/monthly_2022_07/62da5e98b2d7d_AppImage.thumb.PNG.87f3d5e78435d0641255733533025b07.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	عند قبول الاقتراح سيثبت ملف ضبط صغير الحجم محلي بامتداد <code>desktop.</code> في المجلد الرئيسي الخاص بسطح المكتب وتستخدمه قائمة التطبيقات ونظام mimetype لسطح مكتب لينكس، يكون التثبيت وهمي وليس فعليًا ولكن يحصل المستخدم على جميع مزايا التثبيت الفعلي والتشغيل المحلي لتطبيق ما باعتباره تطبيق محمول.
</p>

<h3 id="مجلد-التطبيق">
	مجلد التطبيق
</h3>

<p>
	يجمع المطور أحيانًا تطبيقًا ما وينشر النتيجة كتنزيل فقط بدون سكربت خاص بالتثبيت أو حزم، وهذا ما يتطلب من المستخدم تنزيل ملف مضغوط TAR مثلًا واستخراج محتواه ثم النقر نقرًا مزدوجًا فوق الملف القابل للتشغيل، ويكون الملف المطلوب عادةً هو الملف الذي يحمل اسم البرنامج الذي تم تنزيله.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103424" href="https://academy.hsoub.com/uploads/monthly_2022_07/twine.PNG.64c899f0bfa86ab7d7b8320feef779e8.PNG" rel=""><img alt="twine.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103424" data-unique="jz863v5tt" src="https://academy.hsoub.com/uploads/monthly_2022_07/twine.thumb.PNG.9f8f67a61d53c29502754ed35a715189.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	تأتي التنزيلات غالبًا في مجلدات بأسماء ذات رقم إصدار، مثل <code>twine_2.13</code> أو <code>pcgen-v6.07.04</code> ، نظرًا لوجود احتمال كبير لتحديث التطبيق في وقت ما، فمن الجيد إما إزالة رقم الإصدار أو إنشاء وصلة رمزية symlink للمجلد، يمكن بهذه الطريقة أن يظل المشغل الذي تم إنشاؤه للتطبيق كما هو على الرغم من تحديث التطبيق نفسه.
</p>

<p>
	يمكن في هذا النمط ترك المجلد حيث تم تنزيله وتشغيله يدويًا عند الحاجة، أو إجراء تثبيت سريع ومُعَدَّل والذي يتضمن خطوتين بسيطتين:
</p>

<ol start="">
<li>
		حفظ المجلد في موقع معياري ثم تشغيله يدويًا عند الحاجة.
	</li>
	<li>
		حفظ المجلد في موقع معياري وإنشاء ملف بامتداد <code>desktop.</code> لدمجه في النظام.
	</li>
</ol>
<p>
	يتغير مكان تخزين التطبيق حسب حالات الاستخدام، فعند استخدام التطبيقات شخصيًا يُحفظ مجلد <code>bin</code> وهو اختصار لثنائي binary في المجلد الرئيسي كموقع تخزين لأي تطبيق أو سكربت مثبت محليًا، أما عند وجود مستخدمين آخرين على النظام ويحتاجون الوصول إلى هذه التطبيقات، فمن المعتاد وضع التطبيق في مجلد <code>opt/</code>.
</p>

<p>
	لإنشاء ملف مشغل بامتداد <code>desktop.</code> يجب فتح محرر نصوص وإنشاء ملف يسمى <code>twine.desktop</code> ، يتم تحديد <a href="https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html" rel="external nofollow">مواصفات إدخال ملف <code>desktop.</code></a> مثل تسمية الملف والتنسيق الأساسي له وأنواع القيم الممكنة بواسطة <a href="https://www.freedesktop.org/wiki/" rel="external nofollow">FreeDesktop.org</a>، وللتوضيح فيما يلي مشغل بسيط لبيئة تطوير متكاملة IDE تسمى Twine لتطوير لعبة، تم تثبيته في المجلد <code>opt/</code> على مستوى النظام:
</p>

<pre class="ipsCode">
[Desktop Entry]
Encoding=UTF-8
Name=Twine
GenericName=Twine
Comment=Twine
Exec=/opt/twine/Twine
Icon=/usr/share/icons/oxygen/64x64/categories/applications-games.png
Terminal=false
Type=Application
Categories=Development;IDE;
</pre>

<p>
	يجب أن يحتوي السطر <code>Exec</code> على أمر فعال لبدء التطبيق، يكون عادةً هذا المسار الكامل إلى ما تم تنزيله ولكن يكون الأمر أكثر تعقيدًا في بعض الحالات فمثلًا قد يلزم تشغيل تطبيق جافا كوسيط لجافا نفسها:
</p>

<pre class="ipsCode">
Exec=java -jar /path/to/foo.jar
</pre>

<p>
	يتضمن المشروع أحيانًا سكربت مُغلِّف يمكن تشغيله بدلًا من البحث عن الأمر الصحيح:
</p>

<pre class="ipsCode">
Exec=/opt/foo/foo-launcher.sh
</pre>

<p>
	لا توجد أيقونة مرفقة مع التنزيل في مثال Twine لذا فإن ملف <code>desktop.</code> الخاص بالمثال يعين أيقونة ألعاب عامة يتم إرفاقها مع بيئة سطح المكتب KDE، وهو ما يعتبر حلًا بديلًا ولكن يمكن للمستخدم إنشاء أيقونة خاصة به أو البحث على الإنترنت عن أيقونة مناسبة، المهم أن يكون السطر البرمجي الخاص بالأيقونة والذي يكون باسم <code>Icon</code> يشير إلى ملف PNG أو SVG لتُضبط هذه الصورة كأيقونة للتطبيق. كما يحدد السكربت فئة التطبيق ضمن فئة التطوير Development بشكل أساسي لذلك يظهر Twine ضمن فئة التطوير في KDE و GNOME ومعظم قوائم التطبيقات الأخرى.
</p>

<p>
	لكي يظهر هذا المثال في قائمة التطبيقات يجب وضع ملف <code>twine.desktop</code> في أحد المكانين التاليين:
</p>

<ul>
<li>
		ضمن <code>local/share/applications./~</code> لتخزين التطبيق في المجلد الرئيسي.
	</li>
	<li>
		ضمن <code>usr/share/applications/</code> لتخزين التطبيق في مجلد <code>opt/</code> أو أي موقع آخر على مستوى النظام ويُراد إظهاره في جميع قوائم التطبيقات الخاصة بالمستخدم.
	</li>
</ul>
<p>
	وبهذا يتم تثبيت التطبيق كما يجب أن يكون كما أنه متكامل مع بقية النظام.
</p>

<h3 id="البناء-من-المصدر">
	البناء من المصدر
</h3>

<p>
	تعد الشيفرة المصدرية صيغة تثبيت شاملة فعلية، ويُعدّ بناء تطبيق من شيفرة مصدرية طريقة رائعة لمعرفة كيف تُنظّم التطبيقات وكيف تتفاعل مع النظام وكيف يمكن تخصيصها حسب رغبة المستخدم، ولذلك فهي ليست عملية سهلة وتتطلب بيئة بناء وتثبيت مكتبات الاعتماديات وملفات الترويسات وبعض عمليات تنقيح الأخطاء.
</p>

<h2 id="خاتمة">
	خاتمة
</h2>

<p>
	يمكن في النهاية شرح عملية التثبيت باختصار أنه مجرد نسخ الملفات من مكان ما إلى الأماكن المناسبة على نظام المستخدم، ومن المهم التأكد من بساطة وأمان المُثبِّت، فمثلًا عند مصادفة مُثبِّت يحاول تثبيت برامج إضافية دون موافقة أو يطلب الموافقة ولكن بأسلوب مضلل أو يُجري عمليات فحص على النظام دون سبب واضح، يجب التراجع وعدم مواصلة عملية التثبيت عند مواجهة أي حالة منها لضمان الحصول على تثبيت آمن.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/18/1/how-install-apps-linux" rel="external nofollow">How to install software applications on Linux</a> لصاحبه Seth Kenlon.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B5%D8%B7%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r301/" rel="">مدخل إلى مصطلحات ومفاهيم التخزين في لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%d8%a7%d9%84%d8%af%d9%84%d9%8a%d9%84-%d8%a7%d9%84%d9%86%d9%87%d8%a7%d8%a6%d9%8a-%d9%84%d8%a7%d8%ae%d8%aa%d9%8a%d8%a7%d8%b1-%d8%aa%d9%88%d8%b2%d9%8a%d8%b9%d8%a9-%d9%84%d9%8a%d9%86%d9%83%d8%b3-r48/" rel="">الدليل النهائي لاختيار توزيعة لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%d9%85%d9%82%d8%af%d9%91%d9%85%d8%a9-%d8%a5%d9%84%d9%89-%d8%a3%d8%af%d9%88%d8%a7%d8%aa-%d8%b6%d8%ba%d8%b7-%d8%a7%d9%84%d9%85%d9%84%d9%81%d9%91%d8%a7%d8%aa-%d8%b9%d9%84%d9%89-%d9%86%d8%b8%d8%a7%d9%85-%d9%84%d9%8a%d9%86%d9%83%d8%b3-r67/" rel="">مقدّمة إلى أدوات ضغط الملفّات على نظام لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">634</guid><pubDate>Fri, 22 Jul 2022 11:12:37 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x62A;&#x648;&#x632;&#x64A;&#x639;&#x629; &#x622;&#x631;&#x62A;&#x634; Arch &#x645;&#x646; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A2%D8%B1%D8%AA%D8%B4-arch-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r633/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62d945eab4c00_-----Arch---.png.ff25e688c9c31631a28ba26a0840dbfd.png" /></p>

<p>
	تعد توزيعة آرتش إحدى <a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">توزيعات لينكس</a> ذات الترقية المستمرة أي تحصل على التحديثات بشكل دائم خلال فترة زمنية قصيرة، وتكون موجهة للأغراض العامة وتحظى بشعبية كبيرة لدى المستخدمين الذين يفضلون الحصول على قدر كبير من التحكم وخيارات التخصيص.
</p>

<p>
	عند تثبيت توزيعة آرتش لينكس، لا يحصل المستخدم سوى على الحد الأدنى من حزم النظام الأساسية بشكل افتراضي ويتوجب عليه ضبط النظام يدويًا، لذلك يعتبره البعض مهمة صعبة وفي نفس الوقت يعتبره آخرون فرصة تعليمية ويمكن لكلاهما اتباع الدليل التعليمي في هذا المقال لتثبيت آرتش بخطوات بسيطة وسهلة المتابعة ولكن يجب قراءة جميع التعليمات بشكل صحيح واتباع كل خطوة بدقة لتجنب نسيان إحداها والذي سيؤدي إلى صعوبات في عملية التثبيت.
</p>

<h2 id="طرق-تثبيت-توزيعة-آرتش-لينكس">
	طرق تثبيت توزيعة آرتش لينكس
</h2>

<p>
	يوجد طريقتان لتثبيت آرتش:
</p>

<ul>
<li>
		بمساعدة مثبت آرتش Archinstaller الإرشادي: وهو نظام مُعتمِد على القائمة يُعلّم المستخدم كيفية ضبط الإعدادات بسهولة لإكمال عملية التثبيت، قدمته آرتش في عام 2021.
	</li>
	<li>
		من دون المثبت الموجه: تتطلب هذه الطريقة ضبط الإعدادات يدويًا دون الحاجة إلى المثبت الإرشادي لذا تأخذ وقتًا أطول من الطريقة السابقة، وهي التي سنعتمدها في هذا المقال.
	</li>
</ul>
<h2 id="متطلبات-تثبيت-آرتش-لينكس">
	متطلبات تثبيت آرتش لينكس
</h2>

<ul>
<li>
		جهاز متوافق مع معمارية x86_64 أي 64 بت.
	</li>
	<li>
		ذاكرة وصول عشوائي لا تقل عن 512 ميجابايت ويُفضل أن تكون 2 جيجابايت.
	</li>
	<li>
		مساحة خالية على القرص تبلغ 2 جيجابايت على الأقل ويُوصى باستخدام 20 جيجابايت للاستخدام الأساسي مع بيئة سطح المكتب.
	</li>
	<li>
		اتصال إنترنت نشط.
	</li>
	<li>
		قرص تخزين خارجي عبر منفذ يو اس بي USB بسعة تخزين لا تقل عن 2 جيجابايت.
	</li>
	<li>
		معرفة بطريقة استخدام <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B7%D8%B1%D9%81%D9%8A%D9%91%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-terminal-r18/" rel="">سطر الأوامر في لينكس</a>.
	</li>
</ul>
<p>
	بمجرد التأكد من وجود جميع المتطلبات يمكن البدء بالخطوة الأولى من عملية التثبيت
</p>

<h2 id="خطوات-تثبيت-آرتش-لينكس">
	خطوات تثبيت آرتش لينكس
</h2>

<p>
	تختلف بعض خطوات التثبيت بين نظام UEFI ونظام بيوس BIOS قديم، تأتي جميع الأنظمة الجديدة مع UEFI لذا تم التركيز في هذا المقال عليه لكن سُتذكر أيضًا الخطوات المختلفة لنظام بيوس القديم.
</p>

<p>
	يجب الانتباه قبل البدء بعملية التثبيت أنها قد تمحو نظام (أو أنظمة) التشغيل الحالي من الحاسوب وتُثبِّت آرتش عليه لذا يجب نسخ الملفات احتياطيًا وإلا ستُفقد جميعها.
</p>

<h3 id="الخطوة-الأولى-تنزيل-ملف-iso">
	الخطوة الأولى: تنزيل ملف ISO
</h3>

<p>
	يمكنك تنزيل ملف ISO من <a href="https://archlinux.org/download/" rel="external nofollow">موقع آرتش الرسمي</a> الذي يوفر كل من روابط التنزيل المباشر والتورنت.
</p>

<h3 id="الخطوة-الثانية-إنشاء-نسخة-يو-اس-بي">
	الخطوة الثانية: إنشاء نسخة يو اس بي
</h3>

<p>
	نستخدم ملف ISO الذي تم تنزيله في الخطوة السابقة لإنشاء نسخة من آرتش على يو اس بي قابل للإقلاع المباشر، يمكن الاستعانة بأداة <a href="https://www.balena.io/etcher/" rel="external nofollow">Etcher</a> المزودة بواجهة رسومية لتنفيذ ذلك، وهذه الأداة متاحة لويندوز ولينكس ومناسبة للمستخدمين الذين يفضلون الواجهة الرسومية وتظهر كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103359" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d9461703aa8_.PNG.9f79051d93e74a810d193badd912dd61.PNG" rel=""><img alt="إنشاء نسخة يو اس بي.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103359" data-unique="jl9mppykg" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d9461c83fc6_.thumb.PNG.2496dd18f1a307d171ca760fa087f86d.PNG" style="width: 800px; height: auto;"></a>
</p>

<p>
	يتوفر لمستخدمي لينكس بديلًا عن أداة Etcher لتحقيق هذه الخطوة، وذلك من خلال الأمر dd. يجب استبدال path/to/archlinux.iso/ بالمسار الخاص بملف ISO، واستبدال dev/sdx/ بمشغل يو اس بي USB في المثال التالي مع أخذ كامل الحيطة والحذر قبل تنفيذه والتأكد من استخدام القرص الصحيح:
</p>

<pre class="ipsCode">
dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress &amp;&amp; sync
</pre>

<p>
	يمكن الحصول على معلومات حول محرك الأقراص باستخدام الأمر <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-sysinfo-filesystems" rel="external nofollow">lsblk</a>. عند الانتهاء من هذه الخطوة يجب إغلاق الحاسوب ثم توصيل اليو اس بي ثم تشغيل الحاسوب.
</p>

<h3 id="الخطوة-الثالثة-الإقلاع-من-نسخة-يو-اس-بي-usb">
	الخطوة الثالثة: الإقلاع من نسخة يو اس بي USB
</h3>

<p>
	بعد تشغيل الحاسوب يجب الإقلاع من نسخة يو اس بي والذي قد لا يتحقق أحيانًا بسبب تفعيل وضع الإقلاع الآمن secure boot لذا يجب تعطيله.
</p>

<p>
	نضغط أثناء التشغيل على مفتاح F2 أو F10 أو F12 (حسب نوع حاسوب المستخدم) بشكل مستمر للانتقال إلى إعدادات الإقلاع ونختار الإقلاع من يو اس بي أو قرص قابل للإزالة "boot from USB or removable disk" وبمجرد بدء تشغيل النظام سيظهر التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103362" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d946274a7e4_.PNG.878ad08660874a7d8ba4eb4c1333f452.PNG" rel=""><img alt="واجهة إقلاع آرتش لينكس.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103362" data-unique="0er9zn4ip" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d946290f47b_.thumb.PNG.85a76e25b807423b2e4421bd67e37937.PNG" style="width: 800px; height: auto;"></a>
</p>

<p>
	نختار خيار الإقلاع Arch Linux install medium (x86_64, BIOS)‎ وبعد التحقق سيقوم آرتش بالإقلاع إلى تسجيل دخول فوري كمستخدم جذر root.
</p>

<p>
	تتضمن الخطوات التالية تقسيم القرص وإنشاء نظام الملفات ووصله بنظام التشغيل.
</p>

<p>
	<strong>ملاحظة</strong>: نسق لوحة المفاتيح الافتراضي هو الولايات المتحدة لذا تعمل معظم لوحات المفاتيح باللغة الإنجليزية بشكل جيد ولكن لا يتم ذلك تلقائيًا بالنسبة للوحات المفاتيح الفرنسية والألمانية والعربية وغيرها، فعند مواجهة صعوبة يمكن تغيير النسق إن كان ذلك ضروريًا، يجب بدايةً عرض كل نسق لوحة المفاتيح المدعومة للاختيار منها كما يلي:
</p>

<pre class="ipsCode">
ls /usr/share/kbd/keymaps/**/*.map.gz
</pre>

<p>
	ثم استخدام الأمر loadkeys لتغيير النسق، فمثلًا يتم الحصول على لوحة مفاتيح ألمانية كما يلي:
</p>

<pre class="ipsCode">
loadkeys de-latin1
</pre>

<h3 id="الخطوة-الرابعة-تجزئة-الأقراص">
	الخطوة الرابعة: تجزئة الأقراص
</h3>

<p>
	نستخدم لهذه العملية مدير الأقراص fdisk المعتمد على سطر الأوامر، وبدايةً يجب عرض جميع الأقراص والأقسام في النظام بشكل قائمة باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
fdisk -l
</pre>

<p>
	يجب أن يكون القرص الصلب باسم dev/nvme0n1/ أو dev/sda/ وهو الأكثر شيوعًا، نحدد القرص المراد تهيئته وتقسيمه كما يلي:
</p>

<pre class="ipsCode">
fdisk /dev/sda
</pre>

<p>
	يُقترح حذف أي أقسام موجودة على القرص باستخدام الأمر d لإفراغ مساحة القرص بالكامل ثم إنشاء أقسام جديدة باستخدام الأمر n.
</p>

<h4 id="إنشاء-قسم-esp-خطوة-خاصة-بأنظمة-uefi-فقط">
	إنشاء قسم ESP: خطوة خاصة بأنظمة UEFI فقط
</h4>

<p>
	يجب بدايةً التحقق من تفعيل وضع UEFI باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
ls /sys/firmware/efi/efivars
</pre>

<p>
	عدم وجود هذا المجلد يعني امتلاك نظام non-UEFI وإلا فالنظام هو UEFI وعليه يجب القيام بما يلي:
</p>

<h5 id="إنشاء-قسم-esp">
	إنشاء قسم ESP
</h5>

<p>
	يجب إنشاء قسم EFI في بداية القرص، بعد إدخال n سيطلب اختيار رقم القرص، ندخل 1، نحافظ على حجم الكتلة الافتراضي، وعندما يطلب حجم القسم ندخل 512M+.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103360" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d9461fd45a4_ESP.PNG.cc6159b29e0d54a7a08053dede943c93.PNG" rel=""><img alt="إنشاء قسم ESP.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103360" data-unique="twma9bsv3" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d94620057d9_ESP.thumb.PNG.71abc99e0dffaa0e9a1eb359a764c302.PNG" style="width: 800px; height: auto;"></a>
</p>

<p>
	تتمثل إحدى الخطوات المهمة في تغيير نوع قسم EFI إلى نظام EFI بدلاً من نظام لينكس، وذلك بإدخال t لتغيير النوع، ثم إدخال L لمشاهدة جميع أنواع الأقسام المتاحة، ثم إدخال الرقم المقابل لها في نظام EFI.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103357" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d94612bf8b9_EFI.PNG.aa021a2a0caddc0f344bf40c775010ee.PNG" rel=""><img alt="تغيير نوع قسم EFI.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103357" data-unique="fxlnf7bog" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d946131cde7_EFI.thumb.PNG.66848aff61f18f3b77dcdddc0d2adf5d.PNG" style=""></a>
</p>

<h4 id="إنشاء-قسم-الجذر">
	إنشاء قسم الجذر
</h4>

<p>
	ملاحظة: هذه الخطوة مطلوبة لأنظمة UEFI والأنظمة القديمة legacy.
</p>

<p>
	تتضمن عملية التقسيم الشائعة إنشاء قسم الجذر root وقسم المبادلة swap والقسم الرئيسي home بشكل منفصل، ولكن سنقوم بإنشاء قسم جذر واحد وإنشاء ملف swap وقسم رئيسي ضمن مجلد الجذر نفسه أي سيكون لدينا قسم جذر واحد من دون قسم مبادلة أو قسم رئيسي.
</p>

<p>
	أثناء استخدام الأمر fdisk ندخل n لإنشاء قسم جديد، سيعطيه تلقائيًا رقم القسم 2 ثم يجب الاستمرار بالضغط على زر الإدخال enter لتخصيص مساحة القرص المتبقية بالكامل لقسم الجذر.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103361" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d94624ec655_.PNG.0a7fd125c2486875c6453aad3a7e0be3.PNG" rel=""><img alt="قسم جديد.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103361" data-unique="w3omu7kfh" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d946251a060_.thumb.PNG.5e3554b2b637aee171924256b63ebf52.PNG" style="width: 800px; height: auto;"></a>
</p>

<p>
	بعد الانتهاء من تقسيم القرص يجب إدخال الأمر w لحفظ التغييرات إلى القرص والخروج من أمر fdisk.
</p>

<h3 id="الخطوة-الخامسة-إنشاء-نظام-ملفات">
	الخطوة الخامسة: إنشاء نظام ملفات
</h3>

<p>
	الآن بعد أن أصبحت أقسام القرص جاهزة يجب إنشاء نظام ملفات عليها وتختلف طريقة تطبيق هذه الخطوة باختلاف النظام.
</p>

<h4 id="إنشاء-نظام-ملفات-لنظام-uefi">
	إنشاء نظام ملفات لنظام UEFI
</h4>

<p>
	يمتلك هذا النظام قسمين على القرص، الأول من نوع EFI والذي سيأخذ <a href="https://en.wikipedia.org/wiki/File_Allocation_Table" rel="external nofollow">نظام ملفات FAT32</a> باستخدام <a href="https://linuxhandbook.com/mkfs-command/" rel="external nofollow">أمر mkfs</a> التالي:
</p>

<pre class="ipsCode">
mkfs.fat -F32 /dev/sda1
</pre>

<p>
	ونهيئ قسم الجذر بنظام ملفات Ext4 كما يلي:
</p>

<pre class="ipsCode">
mkfs.ext4 /dev/sda2
</pre>

<h4 id="إنشاء-نظام-ملفات-لنظام-non-uefi">
	إنشاء نظام ملفات لنظام non-UEFI
</h4>

<p>
	يمتلك هذا النظام قسم جذر واحد فقط سنجعله ext4 كما يلي:
</p>

<pre class="ipsCode">
mkfs.ext4 /dev/sda1
</pre>

<h3 id="الخطوة-السادسة-الاتصال-بشبكة-واي-فاي-wifi">
	الخطوة السادسة: الاتصال بشبكة واي فاي WiFi
</h3>

<p>
	يمكن استخدام الأداة iwctl للاتصال بشبكة WiFi بشكل تفاعلي وبسهولة وتتطلب فقط إدخال هذا الأمر واتباع التعليمات التي تظهر على الشاشة:
</p>

<pre class="ipsCode">
iwctl
</pre>

<p>
	ثم عرض جميع البطاقات والأجهزة اللاسلكية المتصلة في قائمة باستخدام الأمر:
</p>

<pre class="ipsCode">
device list
</pre>

<p>
	ثم تحديد البطاقة اللاسلكية المفضلة ثم البحث عن الشبكة المتاحة باستخدام الأمر أدناه:
</p>

<pre class="ipsCode">
station wlan0 scan
</pre>

<p>
	لن يتمكن المستخدم من رؤية أسماء الشبكات أثناء البحث عن الشبكة، لذا لمشاهدة الاتصالات المتاحة يمكن كتابة:
</p>

<pre class="ipsCode">
station wlan0 get-networks
</pre>

<p>
	يمكن الاتصال بشبكة واي فاي محددة من بين الشبكات المدرجة بإضافة اسمها باستخدام الأمر:
</p>

<pre class="ipsCode">
station wlan0 connect "Name of Network/WiFi"
</pre>

<p>
	إذا كانت الشبكة محمية بكلمة مرور فسيُطلب إدخالها وبعد ذلك يتصل المستخدم بالشبكة، وللتأكد من الاتصال وإمكانية استخدام الإنترنت يمكن التحقق من خلال الأمر ping كما يلي:
</p>

<pre class="ipsCode">
ping google.com
</pre>

<p>
	يصل رد الأمر ping بشكل بايتات وبذلك يكون الاتصال محقق، ويستمر وصول البايتات لذا لإيقافها يجب استخدام Ctrl + C، ثم يجب الخروج من موجه الشبكة باستخدام Ctrl + D.
</p>

<h3 id="الخطوة-السابعة-اختيار-مرآة-مناسبة-لمستودع-الحزم">
	الخطوة السابعة: اختيار مرآة مناسبة لمستودع الحزم
</h3>

<p>
	غالبًا ما يواجه المستخدم عند تنزيل آرتش مشكلة بطئ التنزيلات وحتى فشله أحيانًا وذلك بسبب قائمة مرايا حزم المستودعات الموجودة في etc/pacman.d/mirrorlist/ والتي تحوي عددًا كبيرًا من المرايا ولكن ليس بترتيب جيد حيث يتم اختيار المرآة الأعلى تلقائيًا وقد لا تكون دومًا الخيار الأفضل، ويمكن الحل في الخطوات التالية:
</p>

<ul>
<li>
		مزامنة مستودع pacman لتنزيل البرنامج وتثبيته:
	</li>
</ul>
<pre class="ipsCode">
pacman -Syy
</pre>

<ul>
<li>
		عرض قائمة مرايا مستودعات الحزم الجديدة والسريعة الموجودة في بلد المستخدم ويكون البلد الافتراضي الولايات المتحدة ويمكن تغييره، وذلك بواسطة تثبيت reflector:
	</li>
</ul>
<pre class="ipsCode">
pacman -S reflector
</pre>

<ul>
<li>
		إنشاء مرآة مستودع حزم من قائمة المرايا:
	</li>
</ul>
<pre class="ipsCode">
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
</pre>

<ul>
<li>
		حفظ قائمة مرايا مستودع الحزم الجيدة مع reflector في القائمة الموجودة مسبقًا:
	</li>
</ul>
<pre class="ipsCode">
reflector -c "US" -f 12 -l 10 -n 12 --save /etc/pacman.d/mirrorlist
</pre>

<h3 id="الخطوة-الثامنة-تثبيت-آرتش">
	الخطوة الثامنة: تثبيت آرتش
</h3>

<p>
	أصبح الآن كل شيء مُهيئًا لتثبيت آرتش، وسنقوم بتثبيته في مجلد الجذر ونحتاج لوصله أولًا باستخدام اسمه كما يلي:
</p>

<pre class="ipsCode">
mount /dev/sda2 /mnt
</pre>

<p>
	هذا لأنظمة UEFI بينما في أنظمة non-UEFI نستخدم المسار dev/sda1/. يجب بعد وصل الجذر استخدام سكربت <a href="https://gitlab.archlinux.org/explore/groups" rel="external nofollow">pacstrap</a> الرائع لتثبيت جميع الحزم الضرورية كالتالي:
</p>

<pre class="ipsCode">
pacstrap /mnt base linux linux-firmware vim nano
</pre>

<p>
	سيستغرق تنزيل هذه الحزم وتثبيتها بعض الوقت وفي حال توقف التنزيلات يمكن كتابة الأمر السابق مرة أخرى وسيستأنف عملية التنزيل.
</p>

<p>
	نلاحظ في الأمر السابق أنه تم إضافة محرر نصوص <a href="https://academy.hsoub.com/programming/workflow/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-vim-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r71/" rel="">فيم Vim</a> ونانو Nano إلى القائمة، لأننا سنحتاج إلى تعديل بعض الملفات بعد التثبيت، ويمكن استخدام أي منهما حسب رغبة المستخدم ولتسهيل الاختيار يمكن مراجعة مقال <a href="https://academy.hsoub.com/programming/workflow/%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D8%B1-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D9%81%D9%8A%D9%85-vim-%D9%88%D9%86%D8%A7%D9%86%D9%88-nano-r1590/" rel="">مقارنة بين محرر النصوص فيم Vim ونانو Nano</a> لاستكشاف الاختلافات بينهما.
</p>

<h3 id="الخطوة-التاسعة-ضبط-إعدادات-النظام">
	الخطوة التاسعة: ضبط إعدادات النظام
</h3>

<p>
	يجب إنشاء <a href="https://en.wikipedia.org/wiki/Fstab" rel="external nofollow">ملف fstab</a> لتحديد كيفية وصل كل من أقسام القرص وبقية الأجهزة وأنظمة الملفات البعيدة في نظام الملفات.
</p>

<pre class="ipsCode">
genfstab -U /mnt &gt;&gt; /mnt/etc/fstab
</pre>

<p>
	ثم نستخدم <a href="https://wiki.archlinux.org/title/Chroot#Using_arch-chroot" rel="external nofollow">arch-chroot</a> وندخل القرص الموصول كمستخدم جذر وبذلك يمكننا بدء استخدام النظام الذي ثبتناه للتو على القرص، ويتوجب إجراء بعض التغييرات في إعدادات ضبط النظام المثبت حتى نتمكن من تشغيله بشكل صحيح عند الإقلاع من القرص.
</p>

<pre class="ipsCode">
arch-chroot /mnt
</pre>

<h4 id="ضبط-المنطقة-الزمنية">
	ضبط المنطقة الزمنية
</h4>

<p>
	نضبط المنطقة الزمنية بعد ذلك باستخدام الأمر timedatectl، لكن يجب أولًا البحث عن المنطقة الزمنية الخاصة بالمستخدم كما يلي:
</p>

<pre class="ipsCode">
timedatectl list-timezones
</pre>

<p>
	ثم الخروج من القائمة باستخدام Ctrl+C أو q فقط، يتم بعدها الضبط كما يلي مع استبدال Europe/Paris بمنطقتك الزمنية:
</p>

<pre class="ipsCode">
timedatectl set-timezone Europe/Paris
</pre>

<h4 id="ضبط-المحلية-locale">
	ضبط المحلية locale
</h4>

<p>
	تمثّل المحلية locale تنسيقات اللغة وشكل الأرقام وصيغة التاريخ والعملة للنظام. يحتوي الملف etc/locale.gen/ على جميع الإعدادات المحلية ولغة النظام بتنسيق تعليق أي تحتوي إشارة # في بداية كل سطر، يجب فتح الملف باستخدام محرر Vim أو Nano بواسطة الأمر التالي:
</p>

<pre class="ipsCode">
nano /etc/locale.gen
</pre>

<p>
	ويظهر الملف كما في الصورة التالية، نختار اللغة التي نريدها وفي هذا المثال اختيرت اللغة الإنجليزية en_GB.UTF-8 ثم نلغي التعليق عن طريق إزالة # من بداية سطر اللغة ثم نضغط على Ctrl + X ثم Y لحفظ التحديد والمتابعة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103356" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d94610d2280_.PNG.8e674f571acf95e47d1b78b6a1ec108d.PNG" rel=""><img alt="ضبط اللغة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103356" data-unique="43trzebkk" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d9461108ab6_.thumb.PNG.07f3dd5274052c24a6f3f124f00b6d36.PNG" style="width: 800px; height: auto;"></a>
</p>

<p>
	يجب الآن إنشاء ملف ضبط للمحلية في ملف المجلد etc/ باستخدام الأوامر التالية واحدًا تلو الآخر:
</p>

<pre class="ipsCode">
locale-gen
echo LANG=en_GB.UTF-8 &gt; /etc/locale.conf
export LANG=en_GB.UTF-8
</pre>

<p>
	يمكن تغيير إعدادات ضبط المحلية والمنطقة الزمنية لاحقًا أيضًا بعد البدء باستخدام آرتش.
</p>

<h4 id="ضبط-الشبكة">
	ضبط الشبكة
</h4>

<p>
	يتطلب ضبط الشبكة ما يلي: إنشاء ملف etc/hostname/ وإضافة مدخل تمثل اسم المضيف إلى هذا الملف، واسم المضيف هو في الأساس اسم حاسوب المستخدم على الشبكة، يمكن اختيار الاسم حسب الرغبة وسنسميه myarch في مثالنا:
</p>

<pre class="ipsCode">
echo myarch &gt; /etc/hostname
</pre>

<p>
	الجزء التالي هو إنشاء ملف المضيفين hosts:
</p>

<pre class="ipsCode">
touch /etc/hosts
</pre>

<p>
	ثم تحرير هذا الملف etc/hosts/ باستخدام محرر Vim أو Nano لإضافة الأسطر التالية إليه، مع ضرورة الانتباه إلى استبدال myarch باسم المضيف الذي اخترناه سابقًا:
</p>

<pre class="ipsCode">
127.0.0.1    localhost
::1        localhost
127.0.1.1    myarch
</pre>

<h4 id="تحديد-كلمة-سر-للجذر">
	تحديد كلمة سر للجذر
</h4>

<p>
	يجب تعيين كلمة سر لحساب الجذر باستخدام الأمر passwd، وسيُطلب إدخال وإعادة كتابة كلمة المرور الخاصة بالمستخدم:
</p>

<pre class="ipsCode">
passwd
</pre>

<h3 id="الخطوة-العاشرة-تثبيت-مُحمّل-الإقلاع-grub">
	الخطوة العاشرة: تثبيت مُحمّل الإقلاع Grub
</h3>

<p>
	تعتبر هذه الخطوة إحدى الخطوات الحاسمة وتختلف بين أنظمة UEFI وأنظمة non-UEFI:
</p>

<h4 id="تثبيت-محمل-الإقلاع-في-أنظمة-uefi">
	تثبيت محمل الإقلاع في أنظمة UEFI
</h4>

<p>
	نتأكد من استخدام arch-chroot ثم نثبت الحزم المطلوبة:
</p>

<pre class="ipsCode">
pacman -S grub efibootmgr
</pre>

<p>
	ثم إنشاء المجلد حيث سيتم وصل قسم EFI:
</p>

<pre class="ipsCode">
mkdir /boot/efi
</pre>

<p>
	الآن نقوم بوصل قسم ESP:
</p>

<pre class="ipsCode">
mount /dev/sda1 /boot/efi
</pre>

<p>
	يتم تثبيت grub كما يلي:
</p>

<pre class="ipsCode">
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi
</pre>

<p>
	يتبقى خطوة أخيرة:
</p>

<pre class="ipsCode">
grub-mkconfig -o /boot/grub/grub.cfg
</pre>

<h4 id="تثبيت-محمل-الإقلاع-في-أنظمة-غير-uefi">
	تثبيت محمل الإقلاع في أنظمة غير UEFI
</h4>

<p>
	ننزل حزمة grub أولًا:
</p>

<pre class="ipsCode">
pacman -S grub
</pre>

<p>
	ثم تثبيت grub كما يلي مع ضرورة الانتباه بعدم وضع رقم القرص sda1 بل فقط اسم القرص sda:
</p>

<pre class="ipsCode">
grub-install /dev/sda
</pre>

<p>
	الخطوة الأخيرة:
</p>

<pre class="ipsCode">
grub-mkconfig -o /boot/grub/grub.cfg
</pre>

<h3 id="الخطوة-الحادية-عشرة-إنشاء-مستخدم-إضافي-وتطبيق-الصلاحيات">
	الخطوة الحادية عشرة: إنشاء مستخدم إضافي وتطبيق الصلاحيات
</h3>

<p>
	تم إلى الآن إنشاء نظام يمتلك حساب جذر فقط، يمكن إقلاع النظام في هذه الحالة ولكن لا يُنصح بذلك لضمان الحصول على تجربة آمنة ومستقرة، فبهذه الطريقة سيحدث كل تغيير يقوم به المستخدم دون الحاجة إلى أي استيثاق والذي قد يؤدي إلى إفساد النظام، لذا يجب أن يوجد مستخدم إضافي يحصل على صلاحيات الجذر باستخدام sudo والذي يتطلب تثبيت حزمة sudo:
</p>

<pre class="ipsCode">
pacman -S sudo
</pre>

<p>
	ثم إنشاء مستخدم جديد ومنحه الأذونات، يمكن اختيار أي اسم للمستخدم الجديد في هذه المثال اخترنا الاسم "team":
</p>

<pre class="ipsCode">
useradd -m team
passwd team
</pre>

<p>
	ثم ندخل كلمة المرور لهذا المستخدم ونأكد العملية، يجب بعد ذلك ضم هذا المستخدم الجديد إلى مجموعة من المستخدمين الذين يحصلون على أذونات محددة، في المثال سنضم المستخدم team إلى المجموعة wheel إضافةً إلى غيرها كما يلي:
</p>

<pre class="ipsCode">
usermod -aG wheel,audio,video,storage team
</pre>

<p>
	نحتاج كخطوة أخيرة إلى تعديل ملف visudo والذي سُيفتح في محرر Vi افتراضيًا ونفتحه باستخدام نانو بواسطة الأمر التالي:
</p>

<pre class="ipsCode">
EDITOR=nano visudo
</pre>

<p>
	يجب أن يكون السطر الذي يشير إلى المجموعة wheel غير مُعلّق كما هو موضح في الصورة أدناه:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103358" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d946147f174_visudo.PNG.127948a7d34a32e5462c36f5a32a654d.PNG" rel=""><img alt="تعديل visudo.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103358" data-unique="qvv3ac1nh" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d94614a5b81_visudo.thumb.PNG.ae875416d41e55c8935709c5894011e7.PNG" style="width: 800px; height: auto;"></a>
</p>

<p>
	يجب بعد ذلك حفظ التغييرات والخروج من الملف.
</p>

<h3 id="الخطوة-الثانية-عشرة-تثبيت-بيئة-سطح-المكتب">
	الخطوة الثانية عشرة: تثبيت بيئة سطح المكتب
</h3>

<p>
	يجب بدايةً تثبيت Xorg كخادم عرض بالتعاون مع مدير الشبكة، يمكن الاستعانة <a href="https://wiki.archlinux.org/title/wayland" rel="external nofollow">بتوثيق Wayland الرسمي</a>، ولذلك نستخدم الأمر التالي:
</p>

<pre class="ipsCode">
pacman -S xorg networkmanager
</pre>

<p>
	ثم تثبيت بيئة سطح المكتب المطلوبة على آرتش وسنستخدم بيئة جنوم:
</p>

<pre class="ipsCode">
pacman -S gnome
</pre>

<p>
	تتضمن الخطوة الأخيرة تمكين مدير العرض GDM وتمكين مدير الشبكة:
</p>

<pre class="ipsCode">
systemctl enable gdm.service
systemctl enable NetworkManager.service
</pre>

<p>
	ثم الخروج من chroot باستخدام الأمر exit:
</p>

<pre class="ipsCode">
exit
</pre>

<p>
	أخيرًا نلغي وصل قسم الجذر باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
umount /mnt
</pre>

<p>
	أو باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
umount -l /mnt
</pre>

<p>
	ثم إغلاق النظام:
</p>

<pre class="ipsCode">
shutdown now
</pre>

<p>
	ستظهر شاشة Grub ثم شاشة تسجيل الدخول إلى جنوم إذا كانت عملية التثبيت ناجحة وتمت بلا أخطاء، ويجب الانتباه إلى إخراج USB قبل تشغيل النظام مرة أخرى.
</p>

<h2 id="خاتمة">
	خاتمة
</h2>

<p>
	نلاحظ في النهاية أن تثبيت آرتش ليس عملية سهلة كتثبيت أوبنتو مثلًا، بل يحتاج بعض الصبر وفي النهاية سيكون تجربة تعلم للمستخدم ويمكن خوض تجربة آرتش وإجراء الكثير من التعديلات فيه لمعرفة مدى قوته.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://itsfoss.com/install-arch-linux/" rel="external nofollow">How to Install Arch Linux [Step by Step Guide]</a> لصاحبه Abhishek Prakash.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r629/" rel="">مدخل إلى مستودعات أوبنتو </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-%D8%A8%D8%A7%D9%83-%D9%85%D8%A7%D9%86-pacman-%D9%81%D9%8A-%D8%A2%D8%B1%D8%AA%D8%B4-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r630/" rel="">استخدام أوامر مدير الحزم باك مان Pacman في آرتش لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/kde-plasma-%D9%85%D9%82%D8%A7%D8%A8%D9%84-gnome-%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A8%D9%8A%D8%A6%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r632/" rel="">KDE Plasma مقابل GNOME: مقارنة بين أشهر بيئات سطح المكتب في لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">633</guid><pubDate>Thu, 21 Jul 2022 12:33:00 +0000</pubDate></item><item><title>KDE Plasma &#x645;&#x642;&#x627;&#x628;&#x644; GNOME: &#x645;&#x642;&#x627;&#x631;&#x646;&#x629; &#x628;&#x64A;&#x646; &#x623;&#x634;&#x647;&#x631; &#x628;&#x64A;&#x626;&#x627;&#x62A; &#x633;&#x637;&#x62D; &#x627;&#x644;&#x645;&#x643;&#x62A;&#x628; &#x641;&#x64A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/kde-plasma-%D9%85%D9%82%D8%A7%D8%A8%D9%84-gnome-%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A8%D9%8A%D8%A6%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r632/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62d93a3e617e3_-KDE-Plasma--GNOME---------.png.ce6669242744ad85e43fe9cd29b0921e.png" /></p>

<p>
	تؤثر بيئة سطح المكتب المستخدمة في <a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">توزيعة لينكس</a> على تجربة المستخدم الكلية من ناحية الإنتاجية وسهولة الاستخدام وبالتالي سير العمل، كما تؤثر على <a href="https://academy.hsoub.com/programming/java/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D8%A7%D9%84%D8%B1%D8%B3%D9%88%D9%85%D9%8A%D8%A9-gui-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7-r1070/" rel="">واجهة المستخدم الرسومية GUI</a> كونها تُشكَّل من البيئة مع مجموعة من التطبيقات.
</p>

<p>
	يتوفر العديد من خيارات بيئة سطح المكتب ولكن تحظى كل من KDE Plasma و GNOME بالشعبية الأكبر ولكل واحدة ما يميزها، لذا يتناول هذا المقال الاختلافات الرئيسية بينهما لمساعدة القارئ على اتخاذ القرار.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: كدي هي مظلة تنضوي تحتها عدة مشاريع يعمل عليها أشخاص كثر، من بين هذه المشاريع بلازما Plasma وهو بيئة سطح المكتب التي نتحدث عنها هنا. سنقارن بين بلازما وغنوم، لكننا سندعو بيئة سطح المكتب بكدي KDE للسهولة
	</p>
</blockquote>

<h2 id="واجهة-المستخدم-الفعالية-مقابل-الجمالية">
	واجهة المستخدم: الفعالية مقابل الجمالية
</h2>

<p>
	تتضمن واجهة المستخدم الرسومية بشكل عام نوع النسق والرموز والسمات وعناصر واجهة المستخدم وبعض المكونات الأخرى.
</p>

<p>
	يوفر سطح مكتب بلازما نسق تقليدي ومشابه لتصميم ويندوز مما يجعله مريح لمعظم مستخدمي ويندوز السابقين ومع ذلك لا يهمل الفعالية حيث يتميز بالتناسق المستمر بين العاملين حتى مع كل التحسينات التي تطرأ عليه على مر السنين، توضح الصورة التالية واجهة المستخدم في بلازما:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103352" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d94101d4e43_.PNG.10814c6fc93a73977fe17591bbf496e3.PNG" rel=""><img alt="واجهة المستخدم في بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103352" data-unique="isgqsizgy" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d9410538887_.thumb.PNG.c3bb45a5ed5884fff2df87d49faac5d5.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	استوحى ويندوز من KDE في الواقع بعض تحسينات واجهة المستخدم الخاصة به مثل القدرة على ضبط مستوى الصوت عن طريق تمرير رمز الصوت في شريط المهام كما يظهر:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103343" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940d020062_.PNG.a8c2e3ea1263f5853fda2f1f3b4407b8.PNG" rel=""><img alt="التحكم بالصوت في بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103343" data-unique="twnftx09a" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940d44c94e_.thumb.PNG.ee38bbe59adafb9e058425a9edbc1e43.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	أما غنوم فيعتبر أكثر جاذبية كونه يوفر تجربة سطح مكتب فريدة بتصميم واجهة مستخدم مختلف وحديث كون الرموز والسمات والخلفيات أفضل فيما يتعلق بالمعايير الحديثة، وتوضح الصورة التالية واجهة المستخدم في غنوم:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103353" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d941083b815_.PNG.0ec49f449ca1e440f1e6a26c79a23738.PNG" rel=""><img alt="واجهة المستخدم في جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103353" data-unique="z6drfsyat" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d9410ace52c_.thumb.PNG.e2df1a0613a1fa95ad6f6fafda0601de.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يصعب على المستخدمين المُعتادين على النسق التقليدي الشبيه <a href="https://academy.hsoub.com/apps/operating-systems/windows/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-11-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%D9%87-r704/" rel="">بنظام ويندوز</a> التأقلم معه، حيث لا يوجد في غنوم شريط مهام ولا زر إبدأ أو تطبيق أو قائمة، بل يجب النقر على "نظرة عامة حول النشاط" للوصول إلى مساحات العمل الخاصة بالمستخدم أو بيئة سطح المكتب الوهمية أو قائمة التطبيقات.
</p>

<p>
	لا تعتبر واجهة المستخدم في غنوم فعالة ووافرة بالعناصر مقارنة بواجهة KDE، فمثلًا توفر عناصر واجهة المستخدم الموجودة في قائمة الوصول السريع للنظام system tray خيارات أكثر مما توفره التطبيقات المصغرة في غنوم.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103344" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940d69c5dc_.PNG.9a865fde8b6fe2b07bc749253685019d.PNG" rel=""><img alt="التحكم بالصوت في جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103344" data-unique="n869h4kxm" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940da35d37_.thumb.PNG.16c97365736b97b1821c3bfd9673a309.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	لذلك فيما يتعلق بواجهة المستخدم لا تتفوق أي منهما على الأخرى بشكل واضح، ويبقى الأمر متروكًا لتفضيلات المستخدم.
</p>

<h2 id="تكامل-تطبيقات-المنظومة">
	تكامل تطبيقات المنظومة
</h2>

<p>
	يوفر KDE الوصول إلى عدد لا يحصى من <a href="https://apps.kde.org/" rel="external nofollow">الخدمات</a> والتي قد تكون زائدة عن حاجة المستخدم ويبرز العديد من هذه التطبيقات المتاحة مثل <a href="https://academy.hsoub.com/design/graphic/krita/" rel="">كريتا Krita</a> و Kdenlive و محرر Kate وغيرها، ويبقى مجتمع KDE بأكمله مشغول دومًا للغاية بإضافة تطبيقات وأدوات جديدة إلى المستودع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103345" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940dbb91f2_.PNG.4404985b98415da79601800285be2caa.PNG" rel=""><img alt="تطبيقات بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103345" data-unique="9kbg3dmum" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940e0a668f_.thumb.PNG.8120d7d6056fdb71521a3297573bcf78.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يوفر غنوم افتراضيًا العديد من <a href="https://apps.gnome.org/en/" rel="external nofollow">التطبيقات</a> والتي تعد كافية لمعظم المستخدمين ولكنها تبقى قليلة العدد وتحصل على تحديثات أقل مقارنةً بعدد وتحديثات تطبيقات KDE.
</p>

<p>
	 
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103346" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940e2b0c1d_.PNG.cdb2736e53942e098ae615fa18aed86b.PNG" rel=""><img alt="تطبيقات جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103346" data-unique="q269ba50d" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940e464b45_.thumb.PNG.0ba1d5a2d206f696ab5bb8dccff44752.PNG" style="width: 750px; height: auto;"></a>
</p>

<h2 id="قابلية-التخصيص">
	قابلية التخصيص
</h2>

<p>
	يتيح KDE للمستخدم حرية أكبر في التخصيص حيث يسمح بالتعديل والتحكم في تجربة المستخدم من حيث تغيير السمة واللون وتأثيرات مساحة العمل وإدارة النوافذ وغيرها دون الحاجة إلى أي تطبيق أو إضافة محددة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103347" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940e54ef1f_.PNG.13528a56d66f059320bf021bfdba33d1.PNG" rel=""><img alt="خيارات التخصيص في بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103347" data-unique="g77wk19ry" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940e82e7c7_.thumb.PNG.8f89bde1e8a246030daacec22544bc62.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	أما في غنوم فيمكن تخصيص التجربة إلى حد جيد ولكن من دون الكثير من عناصر التحكم الجاهزة بل يجب على المستخدم الاعتماد على تعديلات أو امتدادات (إضافات) غنوم لإجراء التغييرات، ويستمر بالتحسين في المظهر والتجربة إصدارًا بعد إصدار مثلًا جرى إضافة الوضع الليلي على مستوى النظام.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103348" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940ea3adc3_.PNG.72d5120f18afc426240e3659caeb3568.PNG" rel=""><img alt="خيارات التخصيص في جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103348" data-unique="0iijbqu6h" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940ed7ac45_.thumb.PNG.0ce7698cecb8c5e10fa4fa0f6a801c1d.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يناسب KDE المستخدمين الذي يفضلون المزيد من خيارات التحكم والتخصيص أما غنوم فيناسب المستخدمين الذين لا يريدون العديد من الخيارات ويفضلون ما يقدمه غنوم.
</p>

<h2 id="القدرات-الإضافية">
	القدرات الإضافية
</h2>

<p>
	يقدم غنوم امتدادات (إضافات) لإضافة المزيد من الفعالية إلى إعدادات الضبط الحالية، ويمكن تحقيق ذلك من خلال التوجه إلى <a href="https://extensions.gnome.org/" rel="external nofollow">موقع الويب الخاص بامتداد صدفة غنوم</a> لاستكشاف الخيارات المتاحة ويظهر التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103351" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940fd238a9_.PNG.70e7083dbd6c8118b25dfa6f82cb7fc4.PNG" rel=""><img alt="موقع الويب الخاص بامتداد صدفة جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103351" data-unique="akrnw0yph" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940ffb20d0_.thumb.PNG.8c082fe4d2067276cb3a6c0f81d763a8.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يتوفر جميع أنواع الإضافات التي تسهل القيام بمجموعة من الأمور مثل أتمتة مساحة العمل التي سيشغلها التطبيق الذي سيفتح تاليًا من خلال إضافة auto-move window، ومع ذلك تعتمد الإضافات على إصدار صدفة غنوم وبسبب التغييرات الجذرية من إصدار إلى آخر يمكن أن تتوقف إضافات غنوم عن العمل في الإصدارات المستقبلية.
</p>

<p style="text-align: center;">
	<img alt="إضافات جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103342" data-unique="lemgs3slj" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940cf58ca3_.PNG.fa6d528b884a4b9b22837bde4e2f235b.PNG" style="width: 750px; height: auto;"></p>

<p>
	يقدم KDE حقيبة مليئة بالإضافات وعناصر واجهة المستخدم وإضافات خاصة بالتطبيقات كأدوات KDE Connect التي تصل الهاتف المحمول بجهاز الحاسوب.
</p>

<p>
	على عكس طريقة غنوم غير المريحة لإضافة ملحقات من متصفح (باستخدام إضافات متصفح آخر)، يمكن الوصول إلى الإمكانات الإضافية لـ KDE باستخدام مركز اكتشاف البرمجيات Discover Software مباشرة مما يسهل تجربة إضافة قدرة أو سمة دون اتباع مجموعة منفصلة من الخطوات.
</p>

<p style="text-align: center;">
	<img alt="إضافات بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103341" data-unique="t2an3adkw" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940ce77332_.PNG.4a5200020aa9a1a8b804e8b4b3549a65.PNG" style="width: 750px; height: auto;"></p>

<p>
	يمكن بشكل عام زيادة القدرات في كليهما ولكن يوفر KDE خيارات أكثر من غنوم.
</p>

<h2 id="خيارات-سهولة-الاستخدام">
	خيارات سهولة الاستخدام
</h2>

<p>
	على الرغم من كفاءة عمل KDE في العوامل المذكورة سابقًا، إلا أن القدرات المتاحة لتسهيل الوصول واستخدام سطح المكتب محدودة للغاية مثل عدم وجود قارئ شاشة مع النظام والذي توضحه الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103349" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940eee5c0a_.PNG.183b4e95d44aec7c8b79f37af4fe9ab1.PNG" rel=""><img alt="خيارات سهولة الوصول في بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103349" data-unique="wbu8yoqqw" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940f43fba5_.thumb.PNG.c568d192de27197e74c25339c10b765a.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	قد يختبر المطورون فعالية قارئ الشاشة باستخدام تطبيق Orca Screen Reader الذي يفحص بعض العناصر السمعية والبصرية لسطح المكتب ولكن مع إصدار KDE Plasma 5.24 فلا يعتبر هذا الخيار مفيدًا أو كافيًا.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103350" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940f77a053_.PNG.31032ff20f83573836dd929af9621463.PNG" rel=""><img alt="خيارات سهولة الوصول في جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103350" data-unique="k1lb4g3t9" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940fb605ef_.thumb.PNG.9c07c0004932a9557fedff24b1458a9c.PNG" style="width: 750px; height: auto;"></a>
</p>

<h2 id="السرعة">
	السرعة
</h2>

<p>
	لابد لإنجاز مهام متعددة من توفر بيئة سطح مكتب تعمل بكفاءة مع موارد النظام المتاحة، لذلك يعد KDE أسرع من معظم بيئات سطح المكتب الأخرى كونه قليل الاستخدام للموارد.
</p>

<p>
	ولتوضيح الأمور تم إنشاء جهازين وهميين Fedora 35 إصدار المستخدم KDE Neon، تتشابه إعدادات كل منهما في ضبط الموارد والتي تتضمن تخصيص نواتين وذاكرة 8 جيجابايت.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103340" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940c71fc98_.PNG.881e8402ce1dbdebad4736acd8016c20.PNG" rel=""><img alt="استخدام الموارد في جنوم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103340" data-unique="etra1beqt" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940cc5dd85_.thumb.PNG.d0c475a63fcc62ac02884539b1b38b6c.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	الصورة السابقة التي توضح استخدام الموارد عبارة عن توضيح للبيانات المعروضة على الشاشة مع عدم تشغيل أي شيء في الخلفية مباشرة بعد تشغيل الجهاز الوهمي.
</p>

<p>
	أثبتت توزيعة KDE Neon التي تدعمها KDE استهلاكها أقل من 1 جيجابايت من ذاكرة الوصول العشوائي RAM بدون أن يكون تطبيق spectacle الخاص بلقطة الشاشة يعمل في الخلفية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103339" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d940bfa39fa_.PNG.292c65dfda012c1d2d9e9134522f04ae.PNG" rel=""><img alt="استخدام الموارد في بلازما.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103339" data-unique="40vg4uh41" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d940c4ed3d2_.thumb.PNG.e053f931a33500cf8898e9248d51a0b0.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ولتوضيح الفكرة أكثر يوجد العديد من التقارير القديمة مثل <a href="https://www.forbes.com/sites/jasonevangelho/2019/10/23/bold-prediction-kde-will-steal-the-lightweight-linux-desktop-crown-in-2020/?sh=7a6cba9726d2" rel="external nofollow">تقرير جايسون</a> الذي ذكر أن KDE هي بيئة سطح المكتب الأصغر حجمًا حتى أكثر من واجهة XFCE أيضًا.
</p>

<h2 id="التوزيعات-المتاحة">
	التوزيعات المتاحة
</h2>

<p>
	تعتمد بعض توزيعات لينكس الشائعة مثل فيدورا وأوبنتو و Pop! _OS على غنوم كبيئة سطح المكتب الافتراضية أو حتى الوحيدة وتتوفر غنوم فيها بإصدارات مختلفة.
</p>

<p>
	أما بالنسبة إلى KDE فلا تتوفر كخيار افتراضي لمعظم التوزيعات السائدة ولكن يمكن تجربتها في Kubuntu مثلًا.
</p>

<h2 id="ما-هو-الخيار-الأفضل-بينهما؟">
	ما هو الخيار الأفضل بينهما؟
</h2>

<p>
	يعتبر KDE الخيار الأنسب للمستخدم الذي يريد البساطة والأداء بالإضافة لتعدد الخيارات والأدوات، أما المستخدم الذي يريد مظهرًا حديثًا فبيئة غنوم هي الأفضل له، وعلى الرغم من عدم منح غنوم للمستخدم قدرًا كبيرًا من التحكم إلا أنه يمكنه القيام بأشياء كثيرة وتعد توزيعة Pop! _OS مثالاً على وجود غنوم كبيئة سطح مكتب مع احتوائها على إضافات تجعلها بيئة مميزة لسطح المكتب.
</p>

<h2 id="بعض-الأسئلة-الشائعة">
	بعض الأسئلة الشائعة
</h2>

<h3 id="1-لماذا-لا-تمتلك-kde-شعبية-كبيرة؟">
	1. لماذا لا تمتلك KDE شعبية كبيرة؟
</h3>

<p>
	لأنها ليست الخيار الافتراضي للتوزيعات الشائعة مثل أوبنتو وفيدورا و Pop! _OS، ولكنها تعد ثاني أكثر بيئة سطح مكتب شعبية بعد غنوم.
</p>

<h3 id="2-هل-يعتبر-غنوم-أكثر-استقرارًا-من-kde؟">
	2. هل يعتبر غنوم أكثر استقرارًا من KDE؟
</h3>

<p>
	تم إنشاء كل من غنوم و KDE بواسطة فريق ماهر من المطورين مع قيامهم بإصلاحات وتحسينات منتظمة، وقد خضع غنوم لتغييرات جذرية متعددة حتى الآن لذلك يعتبر KDE تجربة أكثر اتساقًا واستقرارًا.
</p>

<h3 id="3-من-الأسرع-بينهما؟">
	3. من الأسرع بينهما؟
</h3>

<p>
	تعتمد سرعة الأداء على موارد النظام المتاحة وأنشطة المستخدم، فالنسبة لبعض المستخدمين تعتبر البيئة الأقل استهلاكًا للموارد هي الأفضل وبالنسبة لآخرين تتلاشى الاختلافات بينهما عند توفر المزيد من الموارد.
</p>

<h3 id="4-هل-kde-أفضل-من-غنوم؟">
	4. هل KDE أفضل من غنوم؟
</h3>

<p>
	لا يمكن تحديد الأفضل بينهما حسب مزايا بيئة سطح المكتب لأن القرار يختلف تبعًا لتفضيلات المستخدم، حيث تتميز KDE بمزيد من التطبيقات وخيارات التخصيص وفعالية أكبر وهو أمر جيد ومع ذلك قد يكون صعبًا على المستخدمين الجدد أو الذين لا يرغبون في هذه القدر من التحكم، أما إذا كان المستخدم يفضل تجربة مستخدم مرتبة توفر مظهر عصري فيعتبر غنوم الاختيار أفضل.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://itsfoss.com/kde-vs-gnome/" rel="external nofollow">KDE vs GNOME: What’s the Ultimate Linux Desktop Choice?‎</a> لصاحبه Ankush Das.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/" rel="">عرض موجز لأشهر توزيعات لينكس </a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-%D8%A8%D8%A7%D9%83-%D9%85%D8%A7%D9%86-pacman-%D9%81%D9%8A-%D8%A2%D8%B1%D8%AA%D8%B4-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r630/" rel="">استخدام أوامر مدير الحزم باك مان Pacman في آرتش لينكس </a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r629/" rel="">مدخل إلى مستودعات أوبنتو</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">632</guid><pubDate>Sun, 17 Jul 2022 22:01:00 +0000</pubDate></item><item><title>&#x639;&#x631;&#x636; &#x645;&#x648;&#x62C;&#x632; &#x644;&#x623;&#x634;&#x647;&#x631; &#x62A;&#x648;&#x632;&#x64A;&#x639;&#x627;&#x62A; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%B9%D8%B1%D8%B6-%D9%85%D9%88%D8%AC%D8%B2-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r631/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92d366bfab_------.png.f5db3b7c83064bed56ea57c7e65f4495.png" /></p>

<p>
	دومًا ما يتساءل مستخدمو لينكس الجدد عن التوزيعة الأنسب للبدء بتعلمها، وبعد أن يصبحوا قادرين على استخدام هذا النظام بطريقة جيدة تبدأ عملية البحث عن توزيعة ذات إمكانيات تتناسب مع القدرات الجديدة، وتظهر تساؤلات مشابهة في الشركات والمؤسسات لاختيار خادم لينكس يلبي احتياجات العمل، وسبب هذه الحيرة هو وجود عدد كبير من <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%A6%D9%8A-%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r48/" rel="">توزيعات لينكس</a> حتى يكاد يكون من الصعب إحصاؤها، وقد تكون بعض التوزيعات مجرد استنساخ من توزيعات أخرى وتكون بعضها الأخرى فريدة من نوعها.
</p>

<p>
	يساعد هذا المقال بالتعرف على 21 توزيعة مختلفة لنظام لينكس مقسمة في فئات تبعًا لإمكانيات المستخدم وحالات الاستخدام.
</p>

<h2 id="أشهر-توزيعات-لينكس-للمستخدم-المبتدئ">
	أشهر توزيعات لينكس للمستخدم المبتدئ
</h2>

<p>
	نذكر في هذه الفئة التوزيعات التي يمكن استخدامها فوريًا بعد تثبيتها دون الحاجة إلى التعمق وتعلم أوامر خاصة بها.
</p>

<h3 id="أوبنتو-ubuntu">
	أوبنتو Ubuntu
</h3>

<p style="text-align: center;">
	<img alt="أوبنتو.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103327" data-unique="bzayvxyfz" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e513fa34_.jpg.ed7f26a544308df70604958ff0456eb0.jpg" style="width: 750px; height: auto;"></p>

<p>
	تعد <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%A8%D8%B3%D8%B7-%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-r575/" rel="">توزيعة أوبنتو</a> من أشهر توزيعات لينكس وقد يتوفر مُثبّتًا مُسبقًا على الكثير من أجهزة الحاسوب، وتتميز بواجهة مستخدم بسيطة ومظهر قابل للتخصيص بسهولة تبعًا لمتطلبات المستخدم بالإضافة لإمكانية تثبيت سمات جاهزة.
</p>

<p>
	كما تتميز بوقوف مجتمع داعم ضخم خلفها عبر الإنترنت لمستخدميها مما يسهل عمل أي مستخدم عن طريق التوجه إلى أي منتدى وطلب المساعدة لحل المشكلة أو التساؤل.
</p>

<h3 id="لينكس-مينت-linux-mint">
	لينكس مينت Linux Mint
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103320" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e41d50e4_LinuxMint.PNG.e05edbadf4f72f75f0ac297273907ff4.PNG" rel=""><img alt="Linux Mint.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103320" data-unique="skabgm2l1" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e473818d_LinuxMint.thumb.PNG.02447924a7ea1325335c44dbdfcbe6ee.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ترتكز هذه التوزيعة على أوبنتو مما يجعلها تمتلك كل تطبيقاته كما تتفوق عليه في بعض الأمور، وتتميز بالبساطة وسهولة الاستخدام مما يجعلها خيارًا بارزًا لمستخدمي لينكس الجدد، وتعد Linux Mint Cinnamon توزيعة ببيئة سطح مكتب مناسبة لمستخدمي لينكس الجدد وخاصةً المستخدمين القادمين من ويندوز كونها أكثر توزيعة مشابهة لنظام ويندوز Windows بسبب بيئة سطح المكتب الافتراضية فيها والتي تتشابه مع ويندوز في التصميم.
</p>

<h3 id="elementary-os">
	elementary OS
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103336" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e6fcdf9a_elementaryOS.PNG.36f177b57e1b8225d4b9ee70cd1ddc65.PNG" rel=""><img alt="elementary OS.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103336" data-unique="ccsyh16eq" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e72a5383_elementaryOS.thumb.PNG.c788280bf0ecd981c6bc2ea535f3aa46.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ترتكز هذه التوزيعة على أوبنتو، وتهدف إلى تأمين بيئة لينكس سهلة الاستخدام وجذابة من حيث التصميم والعناصر البصرية مع الحفاظ على الأداء الجيد، وتتميز بتطور تدريجي مستمر عبر التحديثات المستمرة.
</p>

<p>
	تقدم واجهة مستخدم جميلة ومشابهة لواجهة نظام التشغيل ماك Mac لذا فهي مناسبة لمستخدمي ماك السابقين أو من يفضلون استخدام نمط مشابه لماك.
</p>

<h3 id="mx-linux">
	MX Linux
</h3>

<p style="text-align: center;">
	<img alt="لينكس MX.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103329" data-unique="ycpta31f5" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e5228514_MX.jpg.4e1868c9f951e584b9f86a5270830595.jpg" style="width: 750px; height: auto;"></p>

<p>
	ترتكز هذه التوزيعة على ديبيان وتعد توزيعة شائعة الاستخدام بسبب أدائها وبساطتها واستقرارها وتوفيرها أدوات MX مضمنة مما يوفر تجربة رائعة وخارجة عن المألوف.
</p>

<p>
	يعتمد MX Linux على Xfce كبيئة لسطح المكتب، وعلى مدير حزم مٌصمم بشكل مثالي لتسهيل عمليات التثبيت بنقرة واحدة، كما يتيح البحث عن حزم فلات باك Flatpak وتثبيتها فوريًا إذ يتوافر متجر فلات هب Flathub افتراضيًا في مدير الحزم كأحد المصادر.
</p>

<p>
	أهم ما يميز هذه التوزيعة هو امتلاكها الكثير من أدوات واجهة المستخدم الرسومية (أدوات MX) مما يسهل تجربة العمل على أي مستخدم سابق لويندوز أو ماك.
</p>

<h3 id="zorin-os">
	Zorin OS
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103331" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e58651e0_Zorin.PNG.0d188ad2fe4acde930d86e488ee8cc83.PNG" rel=""><img alt="نظام التشغيل Zorin.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103331" data-unique="27ibusird" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e5cb2c0a_Zorin.thumb.PNG.e027854ae294324f8bf202c7e5d91deb.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ترتكز هذه التوزيعة على أوبنتو، وتعد تقريبًا تجربة سطح مكتب مثالية تقنيًا وجماليًا، إذ تتميز بسهولة الاستخدام وتوفر عدة إصدارات لتناسب الجميع فمثلًا يناسب الإصدار Zorin OS 16 المبتدئين. كونه لا يتيح الكثير من خيارات التخصيص إذ تكون فيه غالبية عناصر واجهة المستخدم الرسومية ثابتة ولا يمكن تعديلها، ويعد الإصدار Lite مناسبًا لأجهزة الحاسوب القديمة، كما يتوفر إصدارات أخرى مثل Core و Education و Ultimate، يمكن تثبيت الإصدار Core مجانًا أما الخيار Ultimate فهو الأنسب في حال رغب المستخدم بدعم المطورين والمساعدة في تحسين Zorin.
</p>

<h3 id="توزيعة-popos">
	توزيعة Pop!_OS
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103330" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e52d76b8_Pop!_OS.PNG.30171033849788f329b69e830add8c5b.PNG" rel=""><img alt="نظام التشغيل Pop!_OS.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103330" data-unique="amtwpc0dq" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e5640066_Pop!_OS.thumb.PNG.eb6511ad12564b463d61a7e33d032726.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	وفرت شركة System76 توزيعة Pop!_OS المرتكزة على أوبنتو، وتعد خيارًا ممتازًا للمطورين والمحترفين والمبرمجين ولا يقتصر استخدامها على هؤلاء فقط بل هي توزيعة مناسبة لأي مستخدم يبحث عن تجربة سطح مكتب فريدة.
</p>

<p>
	يعتمد Pop!_OS على بيئة سطح المكتب COSMIC السهلة والسلسة، وهذه البيئة سيتم بناؤها قريبًا باستخدام لغة البرمجة Rust من الصفر، لذا يمكن للمستخدم ترقّب أحدث إصدار لها.
</p>

<h3 id="خيارات-أخرى-للمبتدئين">
	خيارات أخرى للمبتدئين
</h3>

<p>
	يوجد خيارات أخرى غير المذكورة سابقًا للمبتدئين مثل توزيعة <a href="https://www.deepin.org/en/" rel="external nofollow">Deepin</a> ونكهات أخرى من أوبنتو مثل Kubuntu و Xubuntu، كما يمكن تجربة فيدورا بدلًا من أوبنتو لتعلم المزيد ولخوض تجربة جديدة وتحدٍ جديد أيضًا.
</p>

<h2 id="أشهر-توزيعات-لينكس-للخوادم">
	أشهر توزيعات لينكس للخوادم
</h2>

<p>
	يجب مراعاة عدة عوامل عند اختيار توزيعة لينكس لتعمل كخادم ويب مثلًا أو أي خادم آخر، منها الاستقرار والأداء وتوافر الدعم وطول أمده، وفي حال كان المستخدم يريد التجربة والاطلاع فيمكنه اختيار أي توزيعة.
</p>

<h3 id="خادم-أوبنتو">
	خادم أوبنتو
</h3>

<p>
	يوفر أوبنتو خيارات مختلفة حيث يمكن للمستخدم اختيار ما يناسبه حسب المطلوب، ففي حال كان المستخدم يبحث عن حلول مخصصة لتشغيل الخادم على AWS أو Azure أو منصة غوغل Google للحوسبة السحابية فإن <a href="https://ubuntu.com/download/cloud" rel="external nofollow">سحابة أوبنتو Ubuntu Cloud</a> هي أحد الخيارات المتاحة أمامه.
</p>

<p>
	ومع ذلك يمكن اختيار حزم خادم أوبنتو وتثبيتها على الخادم الخاص بالمستخدم، ويُوصى دومًا بتنزيل الإصدارات طويلة الدعم من النواة LTS إلا عند وجود متطلبات محددة.
</p>

<h3 id="ريدهات-لينكس-الخاص-بالشركات-rhel">
	ريدهات لينكس الخاص بالشركات RHEL
</h3>

<p>
	قد لا يكون ريد هات Red Hat الخيار الأكثر شيوعًا للخوادم حسب الإحصائيات ولكنه مع ذلك نظام ممتاز من الدرجة الأولى يخدم الشركات والمؤسسات وتعتمد عليه العديد من الشركات المهمة مثل شركة لينوفو Lenovo.
</p>

<p>
	يرتبط ريد هات مع فيدورا تقنيًا، إذ يتم اختبار جميع الخيارات التي يدعمها ريدهات على فيدورا أولًا وقبل إتاحته على ريدهات. يجب التحقق من ملائَمة التوزيعة في حال وجود متطلبات مخصصة ويمكن ذلك من خلال <a href="https://developers.redhat.com/products/rhel/getting-started" rel="external nofollow">التوثيق الرسمي</a> الخاص بهم.
</p>

<h3 id="خادم-لينكس-suse-الخاص-بالشركات">
	خادم لينكس SUSE الخاص بالشركات
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103328" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e51b3de0_SUSE.jpg.6dff7c318bff4aecb6b739bd5dd00591.jpg" rel=""><img alt="خادم لينكس SUSE الخاص بالشركات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103328" data-unique="etyioxhmp" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e51c8113_SUSE.thumb.jpg.0c6ebf9779dbbbec02de7f3fa8118174.jpg" style="width: 750px; height: auto;"></a>
</p>

<p>
	غالبًا ما يُخطئ البعض بين هذا وبين OpenSUSE لأن كلاهما معروف باسم العلامة التجارية المشتركة "SUSE"، حيث OpenSUSE هو توزيعة مفتوحة المصدر موجهة لهدف معين ويتم صيانتها من قبل المجتمع الخاص بها أما خادم لينكس SUSE الخاص بالشركات فيُعدّ أحد الحلول الأكثر شيوعًا للخوادم المعتمدة على السحابة، ويجب على المستخدم اختيار اشتراك للحصول على أولوية الدعم والمساعدة لإدارة الحل مفتوح المصدر الخاص به.
</p>

<h3>
	CentOS 8 سنت أو إس
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103334" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e61f1549_CentOS8.PNG.cd0dd7e85804b11fb317a51df602c82f.PNG" rel=""><img alt="CentOS 8.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103334" data-unique="fghq9nl1o" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e6529edb_CentOS8.thumb.PNG.f12f884a9bb1e7b28c5095cde23b7806.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يرتكز سنت أو إس CentOS على نفس المصادر التي يرتكز عليها ريد هات لينكس الخاص بالشركات RHEL، لذا يُعد البديل الأفضل عنه إذ يمكن في RHEL الحصول على اشتراك مجاني يضم حتى 16 خادمًا بدون دعم فني، نظرًا لكونه إصدار موجه للشركات بينما يعد CentOS إصدارًا موجهًا للمجتمع لذا فهو مجاني بالكامل.
</p>

<h3 id="خيارات-أخرى-لتوزيعة-خادم-لينكس">
	خيارات أخرى لتوزيعة خادم لينكس
</h3>

<p>
	يمكن أيضًا استخدام <a href="https://getfedora.org/en/server/" rel="external nofollow">خادم فيدورا</a> أو <a href="https://www.debian.org/distrib/" rel="external nofollow">ديبيان</a> كبدائل لبعض التوزيعات المذكورة أعلاه.
</p>

<h2 id="أشهر-توزيعات-لينكس-للحواسيب-القديمة">
	أشهر توزيعات لينكس للحواسيب القديمة
</h2>

<p>
	إذا رغب المستخدم بتجريب نظام لينكس ولكن حاسوبه قديم أو ليس بحاجة إلى ترقية نظامه، فيمكنه اختيار إحدى توزيعات لينكس التالية.
</p>

<h3 id="puppy-linux">
	Puppy Linux
</h3>

<p style="text-align: center;">
	<img alt="Puppy Linux.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103322" data-unique="y1nqy1lut" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e49ee828_PuppyLinux.jpg.919d5ef5f7c9968fcc4b23efba56a486.jpg" style="width: 750px; height: auto;"></p>

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

<h3 id="solus-budgie">
	Solus Budgie
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103324" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e4b223d0_SolusBudgie.PNG.08146cce672de64e797793dd37886abb.PNG" rel=""><img alt="Solus Budgie.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103324" data-unique="cfeph7omp" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e4e9b66a_SolusBudgie.thumb.PNG.eee4d11337b50a5ac78dbaa7b1e4b2c8.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يعد نظام التشغيل Solus إصدارًا خاصًا بأجهزة الحواسيب ويتميز بكونه صغير الحجم ومثيرًا للإعجاب، ويقدم أفضل إصدار لبيئة سطح المكتب وهو بدجي Budgie بسبب توفيره تجربة سطح مكتب فريدة من نوعها لاحتوائه على تعديلات مثيرة للاهتمام في واجهة المستخدم الرسومية، ويعد بدجي العرض الرئيسي لنظام التشغيل ولكن يمكن اختيار بيئة سطح مكتب أخرى مثل GNOME أو MATE.
</p>

<h3 id="bodhi">
	Bodhi
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103333" href="https://academy.hsoub.com/uploads/monthly_2022_07/Bodhi.PNG.916e0e5da9cb332b9bd9bf6382a2435a.PNG" rel=""><img alt="Bodhi.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103333" data-unique="m9hpzc0jk" src="https://academy.hsoub.com/uploads/monthly_2022_07/Bodhi.thumb.PNG.ca3f11e05a8e13ad03d3fc469b815a72.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ترتكز هذه التوزيعة على أوبنتو ومع ذلك على عكس أوبنتو فهو يعمل بشكل جيد ضمن إعدادات الضبط القديمة على الأنظمة القديمة لذلك تجربة المستخدم فيه سهلة ومريحة.
</p>

<p>
	أهم ما يميز هذه التوزيعة هو بيئة سطح المكتب <a href="https://www.bodhilinux.com/moksha-desktop/" rel="external nofollow">Moksha</a> والتي تركز على بيئة سطح المكتب Enlightenment 17 لذا تعد مشابهة لها.
</p>

<h3 id="antix">
	antiX
</h3>

<p style="text-align: center;">
	<img alt="antiX.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103332" data-unique="l9j3k2unr" src="https://academy.hsoub.com/uploads/monthly_2022_07/antiX.jpg.8e26c0ae8a0a306961ba5538e92976df.jpg" style="width: 750px; height: auto;"></p>

<p>
	ترتكز هذه التوزيعة على ديبيان، وهي توزيعة صغيرة الحجم مصممة لأجهزة الحاسوب القديمة والجديدة، ويمكن استخدامها مباشرةً من قرص مضغوط أو ذاكرة USB دون الحاجة إلى تثبيتها، كما توفر محمل إقلاع مباشر وهو برنامج يقوم بتحميل نظام تشغيل عند تشغيل الحاسوب، لذلك على عكس بعض التوزيعات الأخرى يجب حفظ الإعدادات حتى لا تُفقد مع كل إعادة تشغيل، كما يمكن أيضًا حفظ التغييرات على المجلد الرئيسي (الجذر) من خلال ميزة المحافظة على التغييرات Live persistence.
</p>

<p>
	يعتمد antiX جزئيًا على MX Linux إذ أن العديد من الحزم المستخدمة في antiX منشأة أساسًا من قبل MX Linux، وواجهة المستخدم ليست مبهرة لكنها سريعة وتعمل كما هو متوقع.
</p>

<h3 id="sparky-linux">
	Sparky Linux
</h3>

<p style="text-align: center;">
	<img alt="Sparky Linux.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103325" data-unique="0ogzllzjj" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e5022981_SparkyLinux.jpg.3af4360b4ebf32ea31f88987ecb6462d.jpg" style="width: 750px; height: auto;"></p>

<p>
	ترتكز هذه التوزيعة على ديبيان وتوفر تجربة مستخدم سهلة وسريعة مما جعلها توزيعة مثالية للأنظمة منخفضة الأداء.
</p>

<p>
	تقدم العديد من الإصدارات المميزة لجميع المستخدمين، إذ توفر إصدارات ثابتة مستقرة وإصدارات متجددة خاصة بمجموعة من المستخدمين، فمثلًا إصدار Sparky Linux GameOver شائع جدًا للاعبين لاحتوائه ألعاب مثبتة مسبقًا.
</p>

<h3 id="خيارات-أخرى-للحواسيب-القديمة">
	خيارات أخرى للحواسيب القديمة
</h3>

<p>
	لتجريب أي توزيعة على حاسوب قديم يجب أن تكون صغيرة الحجم ومنها: Linux Lite و Lubuntu و Peppermint.
</p>

<h2 id="أشهر-توزيعة-linux-للمستخدمين-المحترفين">
	أشهر توزيعة Linux للمستخدمين المحترفين
</h2>

<p>
	يتطلب عمل المستخدمين المحترفين احتياجات محددة لا تلبيها التوزيعات المذكورة سابقًا لذا فيما يلي مجموعة من التوزيعات التي تفي بهذا الغرض.
</p>

<h3 id="آرتش-لينكس-arch-linux">
	آرتش لينكس Arch Linux
</h3>

<p style="text-align: center;">
	<img alt="آرتش لينكس.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103326" data-unique="pziw3s5vt" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d92e50e0a88_.jpg.1d39ccd4cbe60a1d3e556787ad0f8522.jpg" style="width: 750px; height: auto;"></p>

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

<h3 id="gentoo">
	Gentoo
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103319" href="https://academy.hsoub.com/uploads/monthly_2022_07/Gentoo.PNG.49f95c385aaf04918eddab247efd492e.PNG" rel=""><img alt="Gentoo.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103319" data-unique="bnuyq0r8x" src="https://academy.hsoub.com/uploads/monthly_2022_07/Gentoo.thumb.PNG.362ca58e89b519951d63837e795cc2b7.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يعد Gentoo توزيعة صغيرة الحجم، ويتطلب استخدامه معرفة سابقة كبيرة بالتقنية المطلوبة لعمله بهدف تحقيق أقصى استفادة منه وتجنب إضاعة الوقت، فإذا توفرت لدى المستخدم المعرفة حول كيفية بناء الشيفرة المصدرية فيمكنه البدء باستخدام Gentoo فوريًا وإلا يمكن الاستعانة <a href="https://wiki.gentoo.org/wiki/Handbook:Main_Page" rel="external nofollow">بدليل الإرشادات الرسمي</a> الذي يوفر الكثير من هذه المعلومات اللازمة.
</p>

<h3 id="slackware">
	Slackware
</h3>

<p style="text-align: center;">
	<img alt="Slackware.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103323" data-unique="zth4bnm4p" src="https://academy.hsoub.com/uploads/monthly_2022_07/Slackware.jpg.907f8de41e439f8b2c29c96fad4d6816.jpg" style="width: 750px; height: auto;"></p>

<p>
	يعد Slackware أحد أقدم توزيعات لينكس التي لا تزال ذات أهمية وقد صدر مؤخرًت الإصدار Slackware 15.
</p>

<p>
	على الرغم من انخفاض عدد المستخدمين والمطورين له بشكل كبير إلا أنه لا يزال خيارًا رائعًا للمستخدمين المحترفين الذين يمتلكون المعرفة حول تصريف البرامج أو تطويرها لإعداد بيئة مثالية حسب المتطلبات.
</p>

<h2 id="أشهر-توزيعة-لينكس-متعددة-الاستخدامات">
	أشهر توزيعة لينكس متعددة الاستخدامات
</h2>

<p>
	تتوفر بعض توزيعات لينكس التي يمكن استخدامها كنظام تشغيل من قبل المبتدئين والمحترفين لكل من أجهزة الحاسوب والخوادم.
</p>

<h3 id="فيدورا-fedora">
	فيدورا Fedora
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103318" href="https://academy.hsoub.com/uploads/monthly_2022_07/Fedora.PNG.c3a2a84844ce9887c97b83f0a25e8887.PNG" rel=""><img alt="Fedora.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103318" data-unique="ozd6zcqp2" src="https://academy.hsoub.com/uploads/monthly_2022_07/Fedora.thumb.PNG.63e950edbdc4c4edc10a6966598b8dff.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يناسب فيدورا المستخدم الذي يبحث عن نظام تشغيل سريع وسهل الاستخدام لحاسوبه وعن نظام تشغيل للخادم، حيث يقدم فيدورا إصدارين منفصلين الأول خاص بأجهزة الحاسوب المكتبية والمحمولة ويدعى Fedora Workstation والآخر للخوادم ويدعى Fedora Server.
</p>

<h3 id="manjaro">
	Manjaro
</h3>

<p style="text-align: center;">
	<img alt="Manjaro.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="103321" data-unique="0l6a2ac8m" src="https://academy.hsoub.com/uploads/monthly_2022_07/Manjaro.jpg.25d595196e3efc2c64b8098b68475648.jpg" style=""></p>

<p>
	ترتكز هذه التوزيعة على آرتش ولكنها تعد توزيعة بسيطة ومناسبة للمبتدئين على عكس آرتش المخصص للمستخدمين المحترفين.
</p>

<p>
	يمتلك Manjaro واجهة مستخدم جيدة ويوفر مجموعة من تطبيقات واجهة المستخدم الرسومية المفيدة المضمنة فيها، يمكن اختيار بيئة سطح المكتب حسب الرغبة أثناء تنزيله مثل KDE وغيرها.
</p>

<h3 id="ديبيان-debian">
	ديبيان Debian
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103335" href="https://academy.hsoub.com/uploads/monthly_2022_07/Debian.PNG.948d47de373d61f1c0631ff60b880d5a.PNG" rel=""><img alt="Debian.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103335" data-unique="j7poit3dg" src="https://academy.hsoub.com/uploads/monthly_2022_07/Debian.thumb.PNG.7c9fe383a41b00a9fd0dc93208438849.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ترتكز توزيعة أوبنتو على ديبيان مما يعني أن ديبيان توزيعة جيدة بحد ذاتها، وتعتبر توزيعة لينكس الأشهر وتعد خيارًا مثاليًا لكل من أجهزة الحاسوب المكتبية والخوادم، ومع أنها ليست أنسب توزيعة للمبتدئين ولكن يمكن لهم البدء به بسهولة من خلال الاطلاع على <a href="https://www.debian.org/releases/stable/installmanual" rel="external nofollow">التوثيق الرسمي</a>.
</p>

<p>
	يقدم الإصدار 'Debian 11 'Bullseye العديد من التغييرات والتحسينات الضرورية.
</p>

<p>
	هذه عمومًا هي توزيعات لينكس التي يُوصى بتجربتها، وطبعًا لا تتسع القائمة لذكر كل توزيعات لينكس المتاحة.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://itsfoss.com/best-linux-distributions/" rel="external nofollow">Best Linux Distributions For Everyone in 2022</a> لصاحبه Ankush Das.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مدخل إلى خادم ويب</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/networking/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D8%B3%D9%85%D8%A7%D8%A1-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r573/" rel="">مدخل إلى أسماء النطاقات على شبكة الإنترنت</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/networking/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D8%B3%D9%85%D8%A7%D8%A1-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r573/" rel="">أساسيات تحديد الكلفة المادية الكاملة لبناء موقع ويب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">631</guid><pubDate>Fri, 15 Jul 2022 22:01:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x623;&#x648;&#x627;&#x645;&#x631; &#x645;&#x62F;&#x64A;&#x631; &#x627;&#x644;&#x62D;&#x632;&#x645; &#x628;&#x627;&#x643; &#x645;&#x627;&#x646; Pacman &#x641;&#x64A; &#x622;&#x631;&#x62A;&#x634; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/linux/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-%D8%A8%D8%A7%D9%83-%D9%85%D8%A7%D9%86-pacman-%D9%81%D9%8A-%D8%A2%D8%B1%D8%AA%D8%B4-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r630/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9c4a6618_-------Pacman--.png.652553e9aaf02a40da27db4a07c7527e.png" /></p>

<p>
	يُعَد مدير الحزم <a href="https://archlinux.org/pacman/" rel="external nofollow">باك مان Pacman</a> أهم ما يميز توزيعة آرتش عن التوزيعات الرئيسية الأخرى، مثل ريد هات Red Hat و<a href="https://academy.hsoub.com/devops/linux/%D9%81%D9%8A-%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AE%D8%AA%D9%84%D9%81-ubuntu-%D8%B9%D9%86-debian%D8%9F-r235/" rel="">أوبنتو Ubuntu وديبيان Debian</a>، فهو يجمع بين صيغة حزمة ثنائية بسيطة وتصميم نظام سهل الاستخدام، كما يساعد على إدارة الحزم بسهولة إما من <a href="https://wiki.archlinux.org/title/Official_repositories" rel="external nofollow">المستودعات الرسمية</a>، أو من الحزم التي يبنيها المستخدم. ولتبسيط مفهوم باك مان، يمكن عدّ هذا المدير على أنه المكافئ لأوامر <code>apt-get</code> أو <code>apt</code> المستخدمة في أوبنتو أو التوزيعات القائمة على ديبيان.
</p>

<p>
	يُعَد تعلم استخدام أوامر باك مان خطوةً أساسيةً لمستخدمي <a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-ubuntu-%D9%88%D8%A2%D8%B1%D8%AA%D8%B4-arch-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-r625/" rel="">آرتش لينكس Arch Linux</a> الجدد، إذ تساعدهم على إدارة النظام بالكامل، وهو ما سيتم شرحه في هذه المقال.
</p>

<h2 id="أوامر-باك-مان-الأساسية">
	أوامر باك مان الأساسية
</h2>

<p>
	تتشابه إمكانيات باك مان مع أي <a href="https://academy.hsoub.com/devops/linux/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-apt-%D8%8Cyum-%D8%8Cdnf-%D8%8Cpkg-r231/" rel="">مدير حزم</a> آخر، فهو يزامن قوائم الحزم مع <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r629/" rel="">مستودعات البرامج</a>، مما يسمح للمستخدم بتنزيل الحزم وتثبيتها بواسطة أمر برمجي بسيط، والذي يقوم أيضًا بإيجاد حل لجميع الاعتماديات المطلوبة.
</p>

<p>
	تشمل أوامر باك مان الأساسية عدة عمليات مثل تثبيت حزم أو ترقيتها أو إزالتها أو تنظيف النظام.
</p>

<h3 id="تثبيت-حزم">
	تثبيت حزم
</h3>

<p>
	يمكنك تثبيت حزمة واحدة أو حزم متعددة باستخدام أوامر باك مان بهذه الطريقة:
</p>

<pre class="ipsCode">
pacman -S package_name1 package_name2 ...
</pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103290" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9e89162f_.PNG.364edd86bf7c930f1f731d9500facd1e.PNG" rel=""><img alt="تثبيت حزمة باستخدام أوامر باك مان.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103290" data-unique="k209ln9tw" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9eb9e513_.thumb.PNG.acac21862e25dd96646ad5b34710ff0c.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يرمز S- في الأمر السابق يرمز للتزامن، أي أن باك مان يقوم بالمزامنة أولًا، وبعد تثبيت الحزم تقوم قاعدة بيانات باك مان بتصنيف هذه الحزم إلى مجموعتين وفقًا لسبب تثبيتها:
</p>

<ul>
<li>
		مثبتة صراحةً explicitly-installed: الحزم التي ثُبّتت باستخدام أمر باك مان العام مع استعمال الخيار S- أو U-.
	</li>
	<li>
		الاعتماديات: الحزم التي ثُبّتت ضمنيًا لأنها مطلوبة من قِبل حزمة أخرى مثبتة صراحةً.
	</li>
</ul>
<h3 id="إزالة-حزم-مثبتة">
	إزالة حزم مثبتة
</h3>

<p>
	يمكن إزالة حزمة واحدة مع ترك جميع اعتمادياتها مثبتة عن طريق الأمر التالي:
</p>

<pre class="ipsCode">
pacman -R package_name
</pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103288" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9e1bbfed_.PNG.df8a656850651e35ce99c98219e97639.PNG" rel=""><img alt="إزالة حزمة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103288" data-unique="wh2iplu4b" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9e3e5072_.thumb.PNG.4e9732b068e1085385bc00e4d755455f.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	أما لإزالة حزمة وجميع اعتمادياتها التي لم تَعُد مطلوبةً من قبل حزمة أخرى مُثبتة، يُستخدم الأمر التالي:
</p>

<pre class="ipsCode">
pacman -Rs package_name
</pre>

<p>
	قد نحتاج لإزالة اعتماديات لم تَعُد مطلوبةً بسبب حذف الحزمة التي كانت تتطلب هذه الاعتماديات، ويمكن ذلك عن طريق الأمر التالي:
</p>

<pre class="ipsCode">
pacman -Qdtq | pacman -Rs -
</pre>

<h3 id="ترقية-حزم">
	ترقية الحزم
</h3>

<p>
	يوفر باك مان طريقةً سهلةً لتحديث آرتش بالكامل عن طريق تحديث جميع الحزم المثبتة باستخدام أمر واحد فقط، ولكن قد تستغرق عملية التحديث بعض الوقت ويختلف الوقت اللازم لإتمام العملية تبعًا لمدى حداثة النظام.
</p>

<p>
	تتم عملية التحديث باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
pacman -Syu
</pre>

<p>
	نلاحظ وجود ثلاثة خيارات في أمر التحديث ودلالتها كما يلي:
</p>

<ul>
<li>
		الخيار S يشير إلى المزامنة.
	</li>
	<li>
		الخيار y يدل على التحديث، والذي يتم على ذاكرة التخزين المؤقت المحلية.
	</li>
	<li>
		الخيار u يشير إلى تحديث النظام.
	</li>
</ul>
<p>
	يزامن الأمر السابق جدول الحزم مع المستودع المركزي والوصول إلى قاعدة بيانات الحزمة الرئيسية، ثم تحديث النسخة المحلية منها ثم تحديث جميع الحزم التي تتيح إصدار أحدث من الإصدار الموجود، ونتيجةً لذلك تٌحدّث جميع حزم النظام باستثناء الحزم المحلية، وهي الحزم غير الموجودة في المستودعات المضبوطة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103291" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9edef16c_.PNG.d562cfb717d7d663cdd7d450c9ec2934.PNG" rel=""><img alt="تحديث النظام.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103291" data-unique="99i2e9koi" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9f090ade_.thumb.PNG.94a6d942663265c38f0cd43349c82a4e.PNG" style="width: 750px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: في حال استخدام آرتش قبل التحديث، يُنصح بزيارة <a href="https://archlinux.org/" rel="external nofollow">صفحة آرتش الرئيسية</a> للتحقق من آخر اخبار التحديثات وإن كان هنالك تحديثات غير المعتاد أو تتطلب تدخلًا يدويًا وإجراء فعل ما، فقد يؤدي التحديث إلى ظهور مشكلات لم تكن، لذا تُنشر إعلانات مناسبة، ويمكن بدلاً من ذلك الاشتراك في <a href="https://archlinux.org/feeds/news/" rel="external nofollow">موجز الأخبار RSS</a> أو <a href="https://lists.archlinux.org/listinfo/arch-announce/" rel="external nofollow">القائمة البريدية الخاصة بإعلانات آرتش</a>.
	</p>
</blockquote>

<p>
	عند ظهور مشكلات تخص بعض البرمجيات الأساسية مثل النواة أو xorg أو systemd أو glibc، يجب البحث قبل ترقية هذه البرمجيات عن <a href="https://bbs.archlinux.org/" rel="external nofollow">نماذج سابقة مناسبة</a> فتحها آخرون وأجروا تحديثات.
</p>

<p>
	لا تدعم التوزيعات المتدحرجة مثل آرتش وManjaro التحديثات الجزئية، مما يعني أنه عند إتاحة إصدارات جديدة من مكتبة ما في المستودعات، يجب إعادة بناء جميع الحزم الموجودة في المستودعات. على سبيل المثال، تعتمد الحزمة X والحزمة Y في عملهما على المكتبة L، بالتالي عند تحديث المكتبة L وتحديث الحزمة X فقط، فإن هذا قد يؤدي إلى تعطيل الحزمة Y التي مازالت تعتمد على الإصدار القديم من المكتبة L.
</p>

<h3 id="البحث-عن-حزم-عبر-pacman">
	البحث عن حزم عبر pacman
</h3>

<p>
	يمكن لمدير الحزم باك مان البحث عن الحزم في قاعدة البيانات سواءً في بيانات أسماء الحزم أو في التوصيف الخاص بها. يقوم باك مان بالاستعلام عن قاعدة البيانات الخاصة بالحزمة المحلية باستخدام الخيار Q- وقاعدة بيانات الملفات باستخدام الخيار F- وقاعدة بيانات المزامنة باستخدام الخيار S-، وذلك كما يلي:
</p>

<pre class="ipsCode">
pacman -Ss string1 string2 ...
</pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103289" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9e5a4db1_.PNG.1a39e0df6dd4ded73f9c69514b92bf78.PNG" rel=""><img alt="البحث عن حزمة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103289" data-unique="wlsmi3ykp" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9e724809_.thumb.PNG.bb9db8145a0c99b866929dd86abbf4a7.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	يُستخدم الأمر التالي للبحث عن الحزم المثبتة مسبقًا:
</p>

<pre class="ipsCode">
pacman -Qs string1 string2 ...
</pre>

<p>
	يُستخدم الأمر التالي للبحث عن أسماء ملفات الحزم في الحزم البعيدة:
</p>

<pre class="ipsCode">
pacman -F string1 string2 ...
</pre>

<p>
	ويمكن عرض شجرة الاعتماديات لحزمة ما باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
pactree package_naenter code hereme
</pre>

<h3 id="مسح-ذاكرة-التخزين-المؤقت-لحزمة">
	مسح ذاكرة التخزين المؤقت لحزمة
</h3>

<p>
	يخزن باك مان الحزم التي نُزلت في المسار <code>/var/cache/pacman/pkg/</code>، ولا يقوم بإزالة أو حذف الإصدارات القديمة للحزم أو تلك التي تم إلغاء تثبيتها تلقائيًا، ويوفر هذا السلوك بعض المزايا:
</p>

<ol start="">
<li>
		يسمح للمستخدم <a href="https://wiki.archlinux.org/title/Downgrading_packages" rel="external nofollow">بتخفيض</a> إصدار الحزمة دون الحاجة إلى استرداد الإصدار السابق من مصادر أخرى.
	</li>
	<li>
		يمكن التراجع بسهولة عن إلغاء تثبيت حزمة ما وإعادة تثبيتها مباشرةً من مجلد ذاكرة التخزين المؤقت cache folder.
	</li>
</ol>
<p>
	من الضروري حتى مع هذه المزايا مسح ذاكرة التخزين المؤقت دوريًا لمنع زيادة حجم المجلد وامتلاء الذاكرة. ويمكن ذلك باستخدام سكربت <a href="https://man.archlinux.org/man/paccache.8" rel="external nofollow">(8)paccache</a> المتوفر في حزمة <a href="https://archlinux.org/packages/?name=pacman-contrib" rel="external nofollow">pacman-contrib</a>، والذي يحذف جميع الإصدارات المخزنة مؤقتًا الخاصة بالحزم المثبتة، والحزم غير المثبتة التي نزلت باسثناء آخر 3 ملفات نزلت، وهو الإعداد الافتراضي ويمكن تغييره، ولاستخدامه يُكتب الأمر بالشكل التالي:
</p>

<pre class="ipsCode">
paccache -r
</pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103292" href="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9f25f299_.PNG.7becfcf658bce92659a5820eed1f58e6.PNG" rel=""><img alt="مسح ذاكرة التخزين المؤقت.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="103292" data-unique="356wniw07" src="https://academy.hsoub.com/uploads/monthly_2022_07/62d8f9f43d148_.thumb.PNG.ade18efd3a42ff3d26b065f6618cf505.PNG" style="width: 750px; height: auto;"></a>
</p>

<p>
	ويستخدم الأمر التالي لإزالة جميع الحزم المخزنة مؤقتًا وغير المثبتة حاليًا بالإضافة إلى قاعدة بيانات المزامنة غير المُستخدَمة:
</p>

<pre class="ipsCode">
pacman -Sc
</pre>

<p>
	كما يمكن استخدام إجراء أشمل يُفرّغ ذاكرة التخزين المؤقت تمامًا عن طريق إزالة جميع الملفات الموجودة فيها، وذلك بكتابة نفس الأمر السابق مع تكرار الخيار c مرتين كما يلي:
</p>

<pre class="ipsCode">
pacman -Scc
</pre>

<h3 id="تثبيت-حزم-محلية-أو-خارجية">
	تثبيت حزم محلية أو خارجية
</h3>

<p>
	يستخدم الأمر التالي لتثبيت حزمة محلية ليست من مستودع بعيد:
</p>

<pre class="ipsCode" id="ips_uid_3748_7">
pacman -U /path/to/package/package_name-version.pkg.tar.xz
</pre>

<p>
	أما لتثبيت حزمة بعيدة غير مضمنة في مستودع رسمي يُستخدم الأمر التالي:
</p>

<pre class="ipsCode">
pacman -U http://www.example.com/repo/example.pkg.tar.xz
</pre>

<h2 id="بعض-الأخطاء-الشائعة">
	بعض الأخطاء الشائعة
</h2>

<p>
	قد تحدث بعض الأخطاء عند استخدام باك مان لإدارة الحزم، مثل حدوث فشل عند بداية الإجراء أو أثناء تنفيذه، وفيما يلي بعض هذه الحالات وطريقة إصلاحها:
</p>

<h3 id="فشل-عند-بدء-الإجراء">
	فشل عند بدء الإجراء
</h3>

<p>
	ينشئ باك مان عند تثبيت حزمة ما ملف قفل يمنع أي نسخة أخرى من باك مان من محاولة تعديل قاعدة بيانات الحزمة في نفس الوقت، ويتم وضع الملف في المسار <code>var/lib/pacman/db.lck/</code>، وهنا قد يصبح ملف القفل بلا فائدة، وذلك عندما تتم مقاطعة باك مان أثناء تغيير قاعدة البيانات، بالتالي حدوث هذا الخطأ؛ والذي يمكن إصلاحه عن طريق التحقق مما إذا كانت هناك عملية ما تحتفظ بملف القفل باستخدام الأمر <code>lsof</code> كما يلي:
</p>

<pre class="ipsCode">
lsof /var/lib/pacman/db.lck
</pre>

<p>
	يعطي خرج الأمر السابق رقم التعريف الخاص بالعملية الذي يحمل ملف القفل، والذي يمكن من خلاله إيقاف العملية ثم إزالة ملف القفل؛ أما إذا لم ينفذ الأمر السابق أي شيء، فيجب استخدام طريقة أخرى وهي حذف ملف القفل، ولكن قبل ذلك يجب التأكد من عدم تشغيل أي نسخ أخرى من باك مان ثم إزالة ملف القفل باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
rm /var/lib/pacman/db.lck
</pre>

<h3 id="فشل-تنفيذ-الإجراء">
	فشل تنفيذ الإجراء
</h3>

<p>
	بعد بدء الإجراء قد تحدث أخطاء أثناء تنفيذه، مثل وجود ملفات متعارضة أو أخطاء تتعلق بالحزم، حيث قد تكون الحزمة غير صالحة:
</p>

<h4 id="ملفات-متعارضة">
	ملفات متعارضة
</h4>

<p>
	يحدث هذا الخطأ لاكتشاف باك مان وجود تعارض في الملف ولن يقوم بتعديل الملفات، وتظهر رسالة الخطأ بالشكل التالي:
</p>

<pre class="ipsCode">
error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.
</pre>

<p>
	يوجد طريقة آمنة لتصحيحه وتتضمن التحقق أولًا مما إذا كانت حزمة أخرى تمتلك الملف، باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
pacman -Qo /path/to/file
</pre>

<p>
	فإذا كان الملف خاصًا بحزمة أخرى، عندها يجب تقديم تقرير خطأ، وإلّا يمكن حل الخطأ عن طريق إعادة تسمية الملف الموجود في نظام الملفات، ثم إعادة تنفيذ أمر التحديث. وإذا اكتمل الأمر بنجاح، فقد تتم إزالة الملف بعد ذلك.
</p>

<p>
	ويمكن بدلًا من ذلك إعادة التسمية يدويًا ثم إزالة جميع الملفات التي تنتمي إلى الحزمة المعنية، ثم إجبار باك مان على تعديل الملفات التي تطابق الاسم المطلوب كما يلي:
</p>

<pre class="ipsCode">
pacman -S –overwrite glob package
</pre>

<h4 id="حزمة-غير-صالحة-أو-تالفة">
	حزمة غير صالحة أو تالفة
</h4>

<p>
	ينتج هذا الخطأ غالبًا بسبب استخدام أمر Xfer المخصص في ملف ضبط باك مان pacman.conf، ويتعلق الأمر بملفات ذات امتداد <code>part.</code> وهي اختصار كلمة partially أي الحزم التي تم تنزيلها جزئيًا، حيث يجب البحث عن هذه الملفات في المسار <code>/var/cache/pacman/pkg</code> ثم إزالتها.
</p>

<p>
	نستنتج مما ذُكر في المقال أن تعلم أوامر باك مان الأساسية هي أول ما يجب فعله فوريًا بعد تثبيت توزيعة آرتش.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://itsfoss.com/pacman-command/" rel="external nofollow">Getting Started With Pacman Commands in Arch-based Linux Distributions</a> لصاحبه Dimitrios
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r629/" rel="">مدخل إلى مستودعات أوبنتو</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%BA%D9%8A%D9%8A%D8%B1-%D8%A7%D9%84%D9%84%D8%BA%D8%A9-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-r626/" rel="">تغيير اللغة في نظام لينكس أوبنتو إلى العربية </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%B1%D8%AC%D8%B9-%D8%A5%D9%84%D9%89-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r615/" rel="">مرجع إلى أشهر أوامر لينكس </a>
	</li>
</ul>
]]></description><guid isPermaLink="false">630</guid><pubDate>Wed, 06 Jul 2022 22:01:00 +0000</pubDate></item></channel></rss>
