اذهب إلى المحتوى

لوحة المتصدرين

  1. رشا سعد

    رشا سعد

    الأعضاء


    • نقاط

      5

    • المساهمات

      24


  2. محمد أحمد العيل

    • نقاط

      4

    • المساهمات

      308


  3. ابراهيم الخضور

    • نقاط

      2

    • المساهمات

      164


  4. Mohamed Lahlah

    Mohamed Lahlah

    الأعضاء


    • نقاط

      2

    • المساهمات

      64


المحتوى الأكثر حصولًا على سمعة جيدة

عرض المحتوى الحاصل على سمعة أكبر منذ 03/13/24 in مقالات DevOps

  1. في مقال اليوم نقدم شرحًا وافيًا عن أنواع قواعد البيانات الأكثر شيوعًا والتي يحتاج أي مطور لمعرفتها لتطوير التطبيقات المختلفة ونوضح طريقة تخزين البيانات ضمنها وأبرز مميزاتها ونذكر أمثلة متنوعة عن كل نوع منها ونساعدك على اختيار نوع قاعدة البيانات الأنسب لتخرين بياناتك. فالبيانات اليوم عصب حياتنا المعاصرة ولا غنى عنها لتسيير أعمال الأنظمة الحديثة، وجميع النشاطات التجارية في مختلف المجالات باتت تحتاج إلى تخزين كم هائل من البيانات حول عملاءها وموظفيها ومعاملاتها ومنتجاتها وفواتيرها …إلخ. ولا تقتصر أهمية البيانات على الأنشطة التجارية بل حتى الحياة الشخصية حيث تخزن الأجهزة الإلكترونية المحيطة بنا الكثير من التفاصيل عنا. لذا، كان لابد من طريقة لتخزين وتنظيم هذه البيانات وإدارتها بشكل فعال، ومن هنا ظهر مفهوم قاعدة البيانات وابتكرت أنواع مختلفة من قواعد البيانات لكل منها منهجية مختلفة في تصميمها وطريقة تعاملها مع البيانات. ما هي قواعد البيانات؟ قبل أن نتعرف على أنواع قواعد البيانات المختلفة دعنا نعرف في البداية ما معنى البيانات وما هي قاعدة البيانات وما أهميتها. البيانات اليوم أحد الركائز الأساسية لأي مجال عمل معاصر، ولتنظيم هذه البيانات وتسهيل التعامل معها يتم تخزينها ضمن قواعد بيانات Database أو بالمعنى الأدق حاوية بيانات تسهل إدارة هذه البيانات وتحافظ على أمنها وسلامتها وبالتالي قاعدة البيانات هي بمثابة مستودع أو حاوية للبيانات. وتحتاج قاعدة البيانات إلى نظام خاص لإدارتها وهو ما يعرف بنظام إدارة قواعد البيانات Database Management System أو اختصارًا DBMS كي يسمح لنا بالاتصال المباشر مع قاعدة البيانات وتخزين البيانات فيها أو استخراج البيانات المخزنة فيها أو ما يعرف بالاستعلام عن البيانات Query بالإضافة إلى معالجتها من تحديث وحذف ونقل …إلخ. من المصطلحات الأساسية المرتبطة بقواعد البيانات كذلك مخطط قاعدة البيانات Database Schema وهو عبارة عن مخطط منطقي يشبه المخطط المعماري لأي بناء يصف هيكيلة قاعدة البيانات وبنيتها من جداول وأعمدة كل جدول ونوع البيانات الذي يأخذه كل عمود والارتباطات بين أعمدة الجداول والقيود المطبقة على البيانات المدخلة أو المعالجة وغيرها من التفاصيل. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن أنواع قواعد البيانات هناك أنواع مختلفة من قواعد البيانات تعتمد على خصائص البيانات التي تخزنها وطريقة تخزين هذه البيانات ومن أهم أنواع قواعد البيانات التي يحتاج المبرمج لفهمها: قواعد البيانات العلاقية Relational Databases قواعد البيانات غير العلاقية Non-Relational Databases قواعد البيانات كائنية التوجه Object Oriented Databases قواعد البيانات السحابية Cloud Databases قواعد البيانات المركزية Centralized Databases قواعد البيانات الموزعة Distributed Databases سنتعرف في الفقرات التالية على شرح مفصل عن كل نوع من هذه الأنواع وأهم مميزاتها وحالات استخدامها. 1. قواعد البيانات العلاقية SQL قواعد البيانات العلاقية Relational Databases -أو العلائقية- أو تعرف أيضًا بقواعد بيانات SQL هي من أكثر أنواع قواعد البيانات شيوعًا واستخدامًا، وهي تخزن البيانات ضمن جداول منظمة لها مخطط ثابت، ويتكون كل جدول من مجموعة من الصفوف والأعمدة التي ترتبط بعلاقات مع بعضها البعض لتشكل قاعدة بيانات ومن هنا جاءت تسميتها بالعلاقية لتميزها بوجود تلك العلاقات بين الجداول. تمثل الأعمدة خصائص أو سمات الجدول ويمثل الصف القيمة الفعلية لهذه الخاصية ويمثل كل سطر في الجدول سجلًا ويتضمن كل جدول في قاعدة البيانات عمودًا يسمى المفتاح لا يتكرر بين سجل وآخر ويميز السجلات عن بعضها. كي تتعامل مع البيانات المخزنة في قواعد البيانات العلاقية تحتاج لاستخدام لغة الاستعلام الهيكلية SQL وهي عبارة عن لغة برمجة قياسية تستخدم للتخاطب مع قاعدة البيانات العلاقية وتخزين البيانات فيها ومعالجتها وصيانتها. تتميز قواعد البيانات العلاقية بأنها قابلة للتوسع وسهولة إضافة بيانات جديدة إلى الجداول دون التأثير على السجلات المخزنة مسبقًا كما أنها توفر حماية عالية للبيانات لأن البيانات مقسمة إلى جداول مما يمكننا من جعل بعض الجداول سرية وعدم السماح بالوصول إليها سوى من قبل مستخدمين بصلاحيات إدارية محددة. تستخدم قواعد البيانات العلاقية في العديد من التطبيقات إلا أنها تعد مناسبة أكثر لمجموعات البيانات التي لها بنية منظمة يمكن نمذجتها ضمن جداول محددة ومصممة مسبقًا، كما أنها تعتبر ملائمة لمستودعات البيانات لكونها تسهل تنفيذ استعلامات معقدة على بيانات من مصادر متعددة. من أبرز الأمثلة على قواعد البيانات العلاقية نذكر: أوراكل مايكروسوفت أكسس MySQL Microsoft SQL Serve IBM Db2 MariaDB PostgreSQL 2. قواعد البيانات غير العلاقية NoSQL نظرًا للزيادة الهائلة في حجم البيانات الموجودة والحاجة إلى تحليل البيانات الضخمة التي يتم إنشاؤها كل يوم في الشركات الكبرى وتطبيقات الويب والمتاجر الإلكترونية الضخمة، لم تعد قواعد البيانات العلاقية ملائمة للتعامل مع هذا الكم من البيانات ومعالجتها بسرعة ودعم الحوسبة السحابية لها دون تعزيزها بموارد إضافية. هذه القيود دفعت لظهور نوع جديد من أنواع قواعد البيانات عرف باسم قواعد البيانات غير العلاقية Non-Relational Database أو ما يعرف بقواعد بيانات Not Only SQL أو اختصارًا NoSQL كي تلائم مجموعات البيانات الكبيرة بشكل أفضل وسميت بهذا الاسم لأنها لا تخزن البيانات على شكل جداول فحسب بل تعتمد على طرق وأساليب مختلفة سنتعرف عليها بعد قليل، وهي قادرة على التعامل مع مشكلات الأداء في البيانات الضخمة big data وتستطيع تحليل ومعالجة كمٍّ هائل من البيانات بمرونة وكفاءة عالية. فقواعد البيانات غير العلاقية NoSQL Databases هي نوع من أنواع قواعد البيانات المستخدمة لتخزين مجموعة ضخمة من البيانات التي تتميز يكونها غير متجانسة وغير مرتبطة مع بعضها البعض وهي تعرف باسم البيانات غير المهيكلة Unstructured Data وهي بيانات يصعب الاحتفاظ بها في جداول لها مخطط ثابت ومنظم. من الأمثلة على البيانات غير المهيكلة رسائل البريد الإلكتروني وصفحات الويب التي تتضمن على كمية كبيرة من البيانات المتباينة على هيئة نصوص أو صور أو مقاطع فيديو أو روابط …إلخ. لهذا السبب برز استخدام قواعد بيانات NoSQL بشكل واسع في التطبيقات الحديثة التي تحتاج لمعالجة مثل هذه. كما تعد قواعد البيانات غير العلاقية مناسبة للاستخدام في تطبيقات نظم الزمن الحقيقي التي تتطلب سرعة في الاستجابة وتطبيقات الحوسبة السحابية وتستخدمها اليوم كبرى شركات الإنترنت مثل جوجل و أمازون لمعالجة الكم الهائل من البيانات الخاصة بها. وتتميز قاعدة بيانات NoSQL ببساطة بنائها فلا تحتاج إلى مخطط وبنية وروابط لذلك تجدها مستخدمة في التطبيقات البسيطة التي لا تحتاج إلى بناء مخطط وهيكل وروابط في قاعدة بياناتها حيث بناء قاعدة بيانات علائقية تحتاج إلى وقت وبعض الجهد بل وأحيانًا خبرة في وضع المخطط وتنفيذه فليست بالعملية السهلة مثل بناء قاعدة بيانات غير علائقية. ومن أبرز الأمثلة على قواعد بيانات غير علاقية نذكر: Redis MongoDB Oracle NoSQL HBase Neo4j OrientDB RavenDB Amazon S3 Cassandra توفر قواعد البيانات غير العلائقية عدة تنسيقات أو طرق لتخزين ونمذجة البيانات كالتالي: قواعد بيانات المفاتيح والقيمة A key-value database: وهي أبسط أنواع قواعد البيانات غير العلاقية وتعتمد على تخزين كل عنصر على شكل خاصية أو مفتاح وقيمة مرتبطة به الأمر الذي يسهل استرداد المعلومات منها من خلال استعلامات بسيطة، ومثال عليها Redis و DynanoDB. قواعد بيانات المستندات Document databases: نوع من أنواع قواعد البيانات المستخدمة لتخزين البيانات من مختلف الأنواع سواء كانت سلاسل نصية أو أرقام أو قيم منطقية أو مصفوفات أو كائنات بشكل مستندات بتنسيق JSON، وهذا النوع يساعد المطورين في تخزين البيانات باستخدام نفس تنسيق نموذج المستندات المستخدم في الشيفرات البرمجية للتطبيقات. ويعد MongoDB مثالًا شهيرًا عليها. قواعد بيانات المخطط البياني Graph Databases: يستخدم هذا النوع لتخزين كميات هائلة من البيانات ضمن رسم بياني مكون من عقد تخزن كيانات البيانات وروابط تعبر عن العلاقات بين هذه العقد، من الأمثلة عليه قواعد البيانات Neo4j و Janusgraph ومن أبرز تطبيقاتها مواقع التواصل الاجتماعي التي تربط المستخدمين فيما بينهم وتقترح الصداقات المناسبة بناء على هذه الروابط. قواعد بيانات الأعمدة Column Store Database يعرف هذا النوع كذلك باسم مخزن العمود العريض Wide column store وهو طريقة مشابهة لتمثيل البيانات في قواعد البيانات العلائقية إلا أن البيانات تخزن في جداول مكونة من صفوف وأعمدة عريضة أو ديناميكية قابلة للتوسع وتوفر قدرة تخزين إضافية فليس من الضروري أن يكون لكل صف نفس مجموعة الأعمدة، وتناسب أنواع محددة من البيانات مثل ملفات تعريف المستخدمين. ومن الأمثلة عليها Cassandra و HBase. النوعان السابقان هما أهم نوعان وأكثرهما استخدامًا، وسنتطرق لهما كثيرًا، أما الأنواع التالية فهي الأقل استخدامًا ومن الجيد التعرف عليهما عن قرب أيضًا. هل ترغب في برمجة قواعد بيانات وإدارتها بكفاءة وفاعلية؟ وظّف مبرمج قواعد بيانات محترف من مستقل أضف مشروعك الآن 3. قواعد البيانات كائنية التوجه قواعد البيانات كائنية التوجه Object Oriented Database هي نوع من قواعد البيانات قائم على مفهوم الكائنات وهو يجمع بين مبادئ البرمجة الكائنية (OOP) ومفاهيم قواعد البيانات العلاقية. ففي قاعدة البيانات العلاقية يتم تخزين البيانات في جداول مكونة من صفوف وأعمدة وبعدها تقوم لغات البرمجة الكائنية التوجه مثل Java و C++‎ بقراءة هذه البيانات وتحويلها إلى كائنات في الذاكرة ومعالجتها وإعادة تخزينها من جديد ما يتطلب وقتًا لذا تختصر قواعد البيانات كائنية التوجه الأمر وتعمل على مبدأ تخزين البيانات الكائنات مباشرة في التخزين الدائم وتخزن الكائنات بأكملها في قاعدة البيانات. ولكون البيانات تمثل وتخزن في نظام قاعدة البيانات كائنية التوجه بشكل كائنات تشبه كائنات العالم الحقيقي بشكل مشابه للأسلوب المستخدم في لغة البرمجة الكائنية وتعبر عن العلاقات بين هذه الكائنات فهذا يجعلها ملائمة لتصميم المشكلات المعقدة ويسهل عملية حفظ البيانات واسترجاعها بكفاءة ومرونة. تستخدم قواعد البيانات كائنية التوجه في التطبيقات التي تتطلب أداءً عاليًا وتحتاج لاسترداد البيانات بسرعة كالمجالات البحثية والعلمية وفي مجال الاتصالات وعلم الفلك وغيرها من المجالات التي تتطلب تخزين بيانات معقدة واسترجاعها بسرعة وإجراء حسابات معقدة عليها. هذا النوع من قواعد البيانات ليس شائع الاستخدام كقواعد البيانات العلاقية ومن أشهر قواعد البيانات كائنية التوجه هي: DB4o Objectivity/DB ObjectDB ObjectDatabase++‎ ObjectStore 4. قواعد البيانات السحابية قاعدة البيانات السحابية Cloud Database ما هي إلا قاعدة بيانات تقليدية تستفيد من ميزات الحوسبة السحابية حيث تخزن بياناتها ضمن بيئة افتراضية أو سحابة عامة أو خاصة أو هجينة ويتم تنفيذ العمليات عليها عبر منصة حوسبة سحابية عامة أو خاصة أو مختلطة تابعة لجهة خارجية. تتميز قواعد البيانات السحابية بمرونتها وقابليتها لزيادة أو إنقاص الموارد المخصصة لكل مستخدم كسعة التخزين وعرض النطاق الترددي بكل سهولة وحسب الحاجة فأنت تدفع فقط مقابل ما تحتاجه وهذا يوفر كلفة تخزين وصيانة البيانات. كما أنها تتيح للشركات دعم تطبيقات البرمجيات كخدمة SaaS والوصول لها عبر الإنترنت وتتميز بسهولة إدارتها وتوفير كلفة البنية التحتية والصيانة لأن مزود الاستضافة هو من يتولى هذا الأمر عادة لذا باتت الخيار المفضل للعديد من الشركات في الآونة الأخيرة لاسيما الشركات الناشئة التي لا تمتلك الميزانية الكافية لتنشئ بنية تحتية محلية خاصة بها. هناك العديد من المنصات والشركات الكبرى التي توفر خدمات إنشاء قواعد البيانات السحابية ومن أبرزها: خدمات أمازون ويب AWS منصة جوجل السحابية Oracle Database OpenStack *Kamatera Cloud 5. قواعد البيانات المركزية قاعدة البيانات المركزية Centralized Database هي قاعدة بيانات تخزن كافة بياناتها في مكان واحد مركزي يمكن للمستخدمين الذين يملكون الصلاحيات الوصول له من مواقع متفرقة وهذا بدوره يتيح لعدة أشخاص إمكانية العمل على نفس البيانات في الوقت ذاته. تستخدم الشركات الكبيرة قواعد البيانات المركزية لتخزين كافة البيانات التي تريد مشاركتها بين عدة مستخدمين، معلومات العملاء وبيانات المخزون والسجلات المالية للشركة. كما يمكن يتم استخدامها من قبل المؤسسات الحكومية وفي الجامعات لإنشاء قاعدة بيانات مركزية تضم كافة بيانات المكتبات لكافة الكليات ليصل لها الطلاب من مختلف التخصصات. تتميز قواعد البيانات المركزية بأنها تضمن جودة ودقة البيانات وتقلل من مخاطر التلاعب بها وتحافظ على اتساقها لأنها تدير البيانات في مستودع أو خادم مركزي شامل يتم الوصول له عادة عبر الاتصال بالإنترنت. وتكون كلفة صيانتها منخفضة، إلا أنها في ذات الوقت قد لا تكون فعالة من ناحية الوقت لأن حجمها قد يكون كبيرًا جدًا الأمر الذي يزيد من زمن الاستجابة لجلب البيانات منها كما أن حدوث أي فشل في الحاسوب المركزي الذي يخزن البيانات قد يسبب فقدان كافة البيانات. 6. قواعد البيانات الموزعة في قواعد البيانات الموزعة Distributed Database أو اختصارًا DDBs يتم تخزين البيانات في مواقع مادية مختلفة لكنها تكون متصلة ببعضها البعض بواسطة شبكة تتيح الوصول لكافة هذه البيانات المخزنة في عدة مواقع ما يجعل هذه القواعد الموزعة تبدو للمستخدمين النهائيين كأنها قاعدة بيانات مخزنة في مكان مادي واحد. تستخدم قواعد البيانات الموزعة لحل المشكلات التي قد تنشأ من استخدام جهاز واحد لتخزين قاعدة بيانات مركزية واحدة مثل زيادة الإنتاجية ووقت الاستجابة وقابلية التوسع. يمكن أن تصنف قواعد البيانات الموزعة إلى نوعين مختلفين هما: قواعد بيانات موزعة متجانسة Homogenous: تخزن قواعد البيانات في هذه الحالة على نفس أنواع الأجهزة التي تستخدم نفس أنظمة التشغيل وتستخدم برمجيات إدارة قواعد بيانات DBMS متطابقة ويكون كل موقع على علم بجميع المواقع الأخرى ويتعاون معها لمعالجة طلبات المستخدمين ويتم الوصول إلى قاعدة البيانات من خلال واجهة واحدة كما لو كانت قاعدة بيانات واحدة. قواعد بيانات موزعة غير متجانسة Heterogenous: تخزن قواعد البيانات في هذه الحالة في مواقع مختلفة وعلى أجهزة تعمل بأنظمة تشغيل متنوعة وقد تستخدم أنواع قواعد بيانات مختلفة كذلك مثل العلاقية أو كائنية التوجه كما أنها قد تستخدم برمجيات إدارة قواعد بيانات مختلفة عن بعضها البعض وقد لا يكون أحد المواقع على علم بوجود المواقع الأخرى للبيانات مما ينتج عنه محدودية في معالجة بعض الطلبات. الخلاصة تعرفنا في مقال اليوم على مفهوم قواعد البيانات وأنواعها المختلفة وألقينا نظرة متعمقة على الطرق المختلفة للتعامل كل نوع من هذه الأنواع مع البيانات وإدارتها وأسلوب تخزينها وتمثيل العلاقات فيما بينها. كما تعرفنا على حالات استخدام كل نوع من أنواع قواعد البيانات المختلفة، ولك أن تختار من بينها النوع الأنسب لمتطلبات عملك وللمزيد من المعلومات حول ماهية قواعد البيانات وأهميتها وأنواعها المختلفة يمكنك مطالعة مقال دليلك الشامل إلى قواعد البيانات. اقرأ أيضًا مدخل إلى تصميم قواعد البيانات المفاهيم الأساسية في قواعد البيانات وتصميمها
    2 نقاط
  2. تدخل العمليات الحسابية في العديد من سكربتات باش Bash Scripts، فقد تحتاج لحساب المساحة المتبقية من القرص الصلب مثلًا، أو حجوم الملفات أو عرض النطاق الترددي للشبكة، أو تواريخ انتهاء صلاحيات كلمات المرور، أو أعداد المضيفين hosts أو غير ذلك. وسنتعلم في مقالنا الخامس من سلسلة باش للمبتدئين طريقة استخدام معاملات باش bash operators لإجراء العمليات الحسابية داخل السكربت، وسنبدأ بجدول يتضمن المعاملات الحسابية: المعامل الوصف + الجمع - الطرح * الضرب / قسمة الأعداد الصحيحة بدون بواقي عشرية % قسمة المعاملات التي تُرجع باقي عملية القسمة فقط ** الأُس مثلًا x أُس y تنفيذ الجمع والطرح في باش لننشئ سكربت باش يدعى مثلًا addition.sh يجمع حجمي ملفين بالبايت Byte ويعطيك النتيجة، سنستعمل في السكربت وسطاء باش وقد شرحنا طريقة طريقة التعامل معها في مقال تمرير الوسطاء إلى سكربت باش، بالإضافة إلى الأمرين cut و du. يُستَخدَم الأمر du لمعرفة أحجام الملفات، ويمكن استخدام الراية أو الخيار d- بعد الأمر وهو اختصار لكلمة bytes لجعل المخرجات بالحجم الفعلي للملف بالبايتات فبدون هذا الخيار سيعرض du الحجم بالوحدة الافتراضية كيلوبايت. يُظهر هذا الأمر في النتيجة كلًا من اسم الملف وحجمه أي أنه يعطي عمودين أو مُخرَجَين، لذا سنحتاج الأمر cut لاقتطاع جزء النتيجة الذي نريده فقط وهو الحجم. وبالتالي سنستخدم أنبوب إعادة التوجيه | لتمرير خرج الأمر du إلى دخل الأمر cut. سيكون نص السكربت addition.sh كما يلي: #!/bin/bash fs1=$(du -b $1 | cut -f1) fs2=$(du -b $2 | cut -f1) echo "File size of $1 is: $fs1" echo "File size of $2 is: $fs2" total=$(($fs1 + $fs2)) echo "Total size is: $total" يحتاج السكربت السابق وسيطين، وهنا مرر له الملفين etc/passwd/ و etc/group/، ثم نفذنا السكربت وسنحصل على النتيجة التالية: kabary@handbook:~/scripts$ ./addition.sh /etc/passwd /etc/group File size of /etc/passwd is: 2795 File size of /etc/group is: 1065 Total size is: 3860 لاحظ السطر التالي الذي يتضمن عملية الجمع باستخدام المعامل +: total=$(($fs1 + $fs2)) ينبغي أن تكتب العمليات الحسابية دائمًا بين قوسين هلاليين مزدوجين (()) بالصيغة التالية: $((arithmetic-expression)) يمكنك استخدام معامل الطرح - بالطريقة نفسها، فمثلًا المتغير sub التالي سيحمل القيمة سبعة: sub=$((10-3)) تنفيذ عمليتي الضرب والقسمة في باش لننشئ سكربت بسيط اسمه giga2mega.sh مثلًا يجري عملية التحويل من جيجا بايت GB إلى ميجا بايت MB وفق التالي: #!/bin/bash GIGA=$1 MEGA=$(($GIGA * 1024)) echo "$GIGA GB is equal to $MEGA MB" لنُشغل السكربت الآن لنعرف كم تعادل 4 جيجا بايت بالميجا بايت: kabary@handbook:~/scripts$ ./giga2mega.sh 4 4 GB is equal to 4096 MB لقد استخدمنا معامل الضرب * لضرب عدد الجيجا بايت بالعدد 1024 للحصول على مكافئها بالميجا بايت: MEGA=$(($GIGA * 1024)) يمكنك تعديل السكربت نفسه ليحول الحجم من جيجا بايت إلى كيلو بايت: KILO=$(($GIGA * 1024 * 1024)) وبالطريقة نفسها حَوِّله إلى بايت. لنجرب الآن عملية القسمة باستخدام المعامل / كما يلي ونُخَزِّن النتيجة في المتغير div الذي سيحمل القيمة خمسة في مثالنا: div=$((20 / 4)) القسمة المستخدمة هنا هي قسمة الأعداد الصحيحة، وبالتالي ستكون النتيجة عددًا صحيحًا حتمًا، فلو قَسَّمتَ 5 على 2 باستخدام المعامل / فستحصل على 2 لأن هذه القسمة تهمل البواقي فهي لا تُرجع أعدادًا عشرية. kabary@handbook:~/scripts$ div=$((5 / 2)) kabary@handbook:~/scripts$ echo $div 2 إذا رغبت بالتعامل مع الأعداد العشرية فستحتاج للأمر bc، وهذا مثال على طريقة استخدامه مع القسمة الصحيحة: echo "5/2" | bc -l 2.50000000000000000000 وتبين الصورة أدناه استخدامه مع العمليات الحسابية الأخرى: استخدام الأس وباقي القسمة لننشئ سكربت اسمه power.sh يقبل وسيطين عدديين ليكونا مثلًا a و b، ويُظهر نتيجة b مرفوعًا للأُس b كما يلي: #!/bin/bash a=$1 b=$2 result=$((a**b)) echo "$1^$2=$result" إذًا فقد استخدمنا المعامل ** لحساب نتيجة a مرفوعًا للأس b، لنجرب السكربت على أعداد مختلفة كما يلي: kabary@handbook:~/scripts$ ./power.sh 2 3 2^3=8 kabary@handbook:~/scripts$ ./power.sh 3 2 3^2=9 kabary@handbook:~/scripts$ ./power.sh 5 2 5^2=25 kabary@handbook:~/scripts$ ./power.sh 4 2 4^2=16 سنتعلم الآن استخدام المعامل % أي باقي القسمة modulo، يرجع هذا المعامل باقي القسمة فقط ويكون عددًا صحيحًا، فالمتغير rem في المثال التالي سيحمل القيمة 2: rem=$((17%5)) الباقي هنا هو 2 لأننا نحصل على 17 بمضاعفة العدد 5 ثلاث مرات وإضافة 2 للنتيجة. إنشاء محول مقاييس لدرجات الحرارة باستخدام باش لنطبق مثالًا شاملًا يستخدم كل العمليات الحسابية التي تعلمناها في الفقرات السابقة، سنكتب سكربت جديد باسم c2f.sh يحول درجة الحرارة من درجة مئوية إلى فهرنهايت وفق المعادلة التالية: F = C x (9/5) + 32 الطريقة المستخدمة هنا هي إحدى الطرق المتبعة لكتابة هذا السكربت، مع العلم أنه توجد طرق أخرى تعطيك النتيجة نفسها، سنعرف بداية المتغيرات فالمتغيرCيمثل درجة الحرارة المئوية، والمتغيرFيمثل درجة الحرارة بالفهرنهايت. #!/bin/bash C=$1 F=$(echo "scale=2; $C * (9/5) + 32" | bc -l) echo "$C degrees Celsius is equal to $F degrees Fahrenheit." استخدمنا الأمر bc هنا لأننا نتعامل مع أعداد عشرية، والأمر scale=2 لإظهار خانتين فقط بعد الفاصلة العشرية. لنجري بعض الآن التحويلات باستخدام السكربت التالي الذي يقرأ درجة الحرارة المدخلة بالدرجة المئوية، وتحويلها إلى الفهرنهايت، ثم عرض النتيجة لكل قيمة مدخلة: kabary@handbook:~/scripts$ ./c2f.sh 2 2 degrees Celsius is equal to 35.60 degrees Fahrenheit. kabary@handbook:~/scripts$ ./c2f.sh -3 -3 degrees Celsius is equal to 26.60 degrees Fahrenheit. kabary@handbook:~/scripts$ ./c2f.sh 27 27 degrees Celsius is equal to 80.60 degrees Fahrenheit. الخلاصة إلى هنا نكون قد انتهينا من مقالنا الذي شرحنا فيه العمليات الحسابية الأساسية في سكربتات باش مع التطبيق العملي، نرجو أن يكون المقال قد قدم الفائدة المرجوة، وندعوك لمطالعة مقالنا التالي حول التعامل مع السلاسل النصية Strings في باش. ترجمة -وبتصرف- للمقال Using Arithmetic Operators in Bash Scripting. اقرأ أيضًا المقال السابق: استخدام المصفوفات في باش Bash قراءة وضبط متغيرات الصدفة Shell والبيئة في لينكس التوسعات في باش ميزات صدفة باش
    1 نقطة
  3. كتابة سكربتات باش Bash Scripting مهارة أساسية لا غنى عنها لكل مدير نظام ومهندس DevOps، فإذا كنت ترغب بتطوير مهاراتك في هذا المجال سواءً كنت مبتدئًا أو متمرسًا في نظام لينكس فإن هذه السلسلة التي تشرح Bash للمبتدئين ستلبي طلبك، بما تقدمه من أمثلة وتطبيقات عملية على أساسيات باش بدايةً من إنشاء السكريبت وحتى أتمتة تنفيذه على الخادم، وتتضمن هذه السلسلة المقالات التالية: أنشئ برنامجك النصي الأول على صدفة باش Bash المتغيرات في سكربتات الصدفة باش Bash تمرير الوسطاء إلى سكريبت باش Bash استخدام المصفوفات في باش Bash استخدام المعاملات الحسابية في سكربتات باش Bash عمليات السلاسل النصية في باش Bash الجمل الشرطية في باش Bash الحلقات في باش Bash استخدام الدوال في باش Bash أتمتة المهام باستخدام باش Bash هذا هو المقال الأول في هذه السلسلة، إذ ستتعرف فيه على كيفية إنشاء سكريبت باش bash script يفيدك في أتمتة المهام الروتينية على الخادم، إذ كثيرًا ما نجد أنفسنا ننفذ المهام نفسها مرارًا وتكرارًا، بداية من النسخ الاحتياطي للمجلدات، وتنظيف الملفات المؤقتة، وحتى استنساخ cloning قواعد البيانات. سننشئ معًا سكريبت باش بسيط ونقوم بتشغيله، ونستعرض بعض الأساسيات التي ينبغي لك معرفتها عن كتابة سكربتات الصدفة Shell عمومًا. إنشاء سكريبت Shell وتشغيله أنشئ في البداية مجلدًا جديدًا اسمه "scripts" سنُخَزِّن فيه جميع السكربتات التي سننشئها في أثناء تطبيق أمثلة المقال، ثم انتقل للعمل ضمنه، بكتابة التالي: mkdir scripts cd scripts أنشئ ضمن المجلد السابق ملفًا نصيًّا باسم hello.sh باستخدام الأمر cat وفق التالي، أو أنشئه بأي طريقة أخرى تفضلها: cat > hello.sh يمكنك الآن الكتابة ضمن الملف من الطرفية terminal مباشرةً فاكتب السطر التالي: echo 'Hello, World!' ثم اضغط على Ctrl+D لحفظ التغييرات على الملف، والخروج من الأمر cat. تستطيع الكتابة ضمن الملف بالطريقة التي تناسبك باستخدام محررات النصوص العاملة في الطرفية مثلًا وأبرزها Vim و Emacs و Nano، أو محررات النصوص ذات الواجهة الرسومية نحو Gedit إذا كنت تستخدم إحدى بيئات سطح المكتب لنظام لينكس. يعرض الأمر echo العبارة "Hello World" المكتوبة بعده على الشاشة، وهدفنا هنا تشغيل echo على أنه سكريبت shell بدلًا من تشغيله بالطريقة العادية أي بكتابته ضمن الطرفية. بعد إنشاء الملف "hello.sh" سنحوله إلى ملف تنفيذي باستخدام الأمر chmod، كما يلي: chmod u+x hello.sh يمكنك معرفة المزيد عن chmod وغيره من أوامر لينكس الشهيرة بمطالعة المقال مرجع إلى أشهر أوامر لينكس. والآن لنشغّل السكريبت بكتابة الأمر "bash" قبل اسم الملف "hello.sh"، وفق التالي: bash hello.sh ستظهر العبارة !Hello, World أمامك على الشاشة مشيرةً لنجاح تنفيذ السكربت. ألقِ نظرة على الصورة أدناه فهي تتضمن ملخصًا للأوامر التي نفذناها حتى الآن. تحويل سكريبت Shell إلى سكريبت Bash يخلط البعض بين shell و bash، وهما مرتبطان بالفعل، لكن Shell أعَمّ من باش. فكلمة باش Bash اختصار للعبارة الإنجليزية "Bourne-Again shell"، وهي واحدة من أشهر أنواع الصدفات Shells المتاحة في لينكس. أما الصدفة shell فهي مُفَسِّر interpreter لسطر الأوامر يستقبل الأوامر المدخلة من المستخدم ويُشغلها، وله عدة أنواع. فأنت إذًا تستخدم الصدفة shell في كل مرة تكتب فيها أوامر لينكس، وعندما تفتح الطرفية على حاسوبك فأنت فعليَّا تشغل الصدفة الافتراضية لنظام لينكس الذي تستعمله. وباش هو الصدفة الافتراضية لمعظم توزيعات لينكس، لذا يستخدم في معظم الأحيان مرادفًا للصدفة shell. يوجد تشابه كبير في قواعد كتابة السكربتات بين أنواع الصدفات المختلفة، ولكنها مع ذلك تتباين في بعض الأحيان، فعلى سبيل المثال تبدأ فهرسة المصفوفات من "1" في صدفة Zsh بينما تبدأ من "0" في صدفة باش، وبالتالي فأي سكريبت مكتوب لصدفة Zsh ويتضمن مصفوفات، لن يعمل بطريقة صحيحة في صدفة باش. وهنا يأتي دور شيبانج shebang وهو السطر الذي تبدأ به كل سكربتات باش، فهو يوضح للمُفَسِّر أن السكريبت مكتوب للصدفة باش وليس لغيرها. السطر Shebang في بداية كل سكريبت يُقصد بسطر shebang العبارة bin/bash/ !# التي تكتب في السطر الأول من كل سكريبت باش، ويدعوه البعض hashbang لأنه يبدأ بالمحرفين هاش "#" hash وبان "!" ban. لاحظ كيف سيبدو السكريبت الذي أنشأناه قبل قليل بعد إضافة هذا السطر: #! /bin/bash echo 'Hello, World!' إذًا يخبر السطر bin/bash/ !# نظام التشغيل بنوع الصدفة أو المُفَسِّر الذي تود أن تستخدمه لتشغيل السكربت، فبعد إضافة هذا السطر إلى ملفنا السابق "hello.sh" سيعمل مباشرة بواسطة باش دون الحاجة لكتابة كلمة "bash'' قبل اسم الملف عند استدعائه كما فعلنا سابقًا. انظر الصورة أدناه: تشغيل السكريبت من أي مجلد بإضافة مساره للمتغير PATH إذا دققت في الصورة السابقة ستجد أننا استخدمنا البادئة /. قبل اسم السكريبت المُراد تشغيله للدلالة على مساره (فهو موجود في مجلد العمل الحالي)، وفي حال حذفت البادئة فستحصل على خطأ مثل التالي: abhishek@handbook:~/scripts$ hello.sh hello.sh: command not found فقد بَدَا اسم الملف للصدفة باش على أنه أمر برمجي يدعى hello.sh، وبدأ باش يبحث عن مساره بين المسارات المحددة في المتغير PATH، فمسارات حفظ جميع الأوامر التي تُشغلها الصدفات تخزن في هذا المتغير. يمكنك استعراض محتويات المتغير PATH باستخدام الأمر echo وفق ما يلي: echo $PATH /home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin تفصل النقطتان الرأسيتان ":" بين المسارات الموجودة ضمن PATH والتي تفحصها صدفات shell عند تنفيذ أي أمر. يمكنك تشغيل أوامر لينكس مثل: echo و cat وغيرها من أي مجلد على الخادم لأن أماكن وجود ملفاتها التنفيذية معروفة للنظام فهي مُخَزَّنِة ضمن مجلدات bin، وجميع مجلدات bin مذكورة في المتغير PATH كما رأينا في خرج التعليمة السابقة، والمسارات الموجودة في PATH هي الأماكن التي يبحث فيها النظام عن الملف التنفيذي لأي أمر تطلب تشغيله. خلاصة القول إذا أردت تشغيل سكريبت باش الخاص بك من أي مجلد في نظام التشغيل كما لو أنه أمرٌ أساسي من أوامر النظام فأضف مسار وجوده إلى المتغير PATH، وفق الخطوات التالية. أولًا حدد مسار حفظ السكريبت بدقة، يمكنك استخدام الأمر pwd إذا كان السكريبت موجود في مجلد عملك الحالي: pwd بعد أن تحصل على المسار (وهو المجلد "scripts" في مثالنا)، استخدم الأمر export لإضافته إلى المتغير PATH كما يلي: export PATH=$PATH:/home/user/scripts ملاحظة: بعد إضافة المجلد scripts إلى نهاية متغير PATH، فهذا يعني أن النظام سيبحث في المجلدات القياسية أولاً قبل أن يبحث في المجلد scripts. إذا كان لديك نسخ من نفس البرنامج في عدة دلائل، فإن هذا الترتيب يضمن أن النسخة الموجودة في المجلدات القياسية، بمعنى سيفحص نظام التشغيل المجلدات التي تتواجد مساراتها في المتغير PATH بالترتيب، وبالتالي فهو يبحث أولًا في المجلدات القياسية لحفظ السكربتات، ثم يأتي إلى المجلدات المخصصة التي أضافها المستخدم. شغّل الآن السكريبت بكتابة اسمه مباشرةً في الطرفية مثل أي أمر من أوامر لينكس العادية ولاحظ النتيجة، وفق التالي: abhishek@handbook:~/scripts$ hello.sh Hello, World! وهذا ملخص للأوامر التي نفذناها هنا: تهانينا، لقد أنجزت السكريبت الأول لك في باش، تابع معنا بقية مقالات السلسلة لنتعلم أكثر عن متغيرات الصدفة، ونجرب معًا أمثلة متنوعة أخرى عن باش bash وطريقة التعامل معها بكفاءة. ترجمة -وبتصرف- للمقال Create and Run Your First Bash Shell Script. اقرأ أيضًا مدخل إلى صدفة باش Bash دليل ميَسَّر لكتابة سكربتات Shell الأخطاء الشائعة التي تحدث عند كتابة سكربتات الصدفة (Shell Scripts) تعديل سكربتات الصدفة (Shell Scripts) الموجودة على حاسوبك
    1 نقطة
  4. كوبرنيتس Kubernetes هو نظام فعّال ومفتوح المصدر لإدارة التطبيقات المغلفة داخل الحاويات والمبنية في بيئة عنقودية (Clustered environment)، طوّرته في البداية شركة جوجل ثم حظي بدعم مؤسسة CNCF أو Cloud Native Computing Foundation، وهدفه الأساسي توفير طرق مرنة لإدارة الخدمات والمكونات الموزعة في بنية تحتية متنوعة التقنيات. فإذا كنت تتساءل ما هو Kubernetes؟ وما مكوناته الأساسية وما المشكلات التي يحلّها؟ وأي نموذج يعتمد في نشر التطبيقات وتوسعتها؟ فسيُجيبك هذا المقال على كل تساؤلاتك تلك. ما هو Kubernetes؟ كوبرنيتس Kubernetes في الأساس هو نظام لتشغيل التطبيقات المغلفة في الحاويات وتنسيقها ضمن بيئة عمل مكونة من عدة خوادم. وقد صُممت منصة Kubernetes لإدارة دورة حياة التطبيقات والخدمات المغلفة في الحاويات إدارةً كاملة وبطرق فعالة تجعلها قابلة للتنبؤ، وسهلة التوسعة، وعالية التوافرية. يُمَكِّنُك كوبرنيتس Kubernetes من تحديد كيفية تشغيل تطبيقاتك، وطريقة تفاعلها مع التطبيقات الأخرى ومع المصادر الخارجية، ويمنحك القدرة على توسيع مواردها الحاسوبية أو إنقاصها حسب الحاجة، ويسهل إجراء التحديثات التدريجية rolling updates بسلاسة دون انقطاع الخدمة، وتبديل حركة مرور البيانات بين إصداراتها المختلفة لاختبار الميزات الجديدة أو للتراجع عن عمليات النشر المصحوبة بالأخطاء أو غير ذلك. وتأتي إمكاناته هذه مما يوفره لمستخدميه من واجهات استخدام، ومنصة قوية قابلة للبناء حسب تفضيلاتهم، ومختلف الأساسيات التي يحتاجونها ليُنشئوا بيئات تطبيقاتهم كما يريدون بمرونة وموثوقية عالية. ولمزيد من المعلومات حول تقنية كوبرنتيس Kubernetes والاطلاع على أكثر الأسئلة شيوعًا حولها تتصحك بمطالعة الفيديو التالي: بنية Kubernetes سنتعرّف على بنية Kubernetes وطريقة تصميمها وتنظيمها لنفهم إمكاناته الكبيرة التي يوفرها للمطورين. يشبه Kubernetes نظامًا مكوّنًا من عدة طبقات، وتُجَرِّد كل طبقة منه التعقيدات الموجودة في الطبقات الأدنى منها. سبيل المثال تتضمن كائنات Pod (التي تمثل أصغر وحدة في Kubernetes والتي سنشرحها بعد قليل) عدة حاويات، وتشير الخدمة (Service) إلى عدة كائنات Pod وتوفر نقطة وصول واحدة إليها وقِس على ذلك، فيخفف هذا التجريد على المطوّر كمية التفاصيل التي عليه التعامل معها، فنحن هنا نتعامل مع مفاهيم منطقية دون أن نربطها بآلة فيزيائية أو افتراضية معينة. يضم Kubernetes في قاعدته عنقودًا cluster من الآلات الفيزيائية أو الافتراضية (VMs) يجمعها مع بعضها شبكة اتصال مشتركة، ويُعدّ هذا العنقود المنصة الفيزيائية التي تُضبَط فيها جميع مكونات Kubernetes، وإمكاناته، وأحمال العمل workloads، ويُقصد بأحمال العمل هنا تطبيقك الذي ستُشغله ضمن الحاوية سواء كان تطبيق ويب أو أي نوع آخر من التطبيقات. تتمتع كل آلة ضمن العنقود بدورٍ خاص في نظام Kubernetes. ويعمل خادم واحد (أو مجموعة خوادم في عمليات النشر التي تتطلب توافرية عالية) دور الخادم الرئيسي master server، فيكون بمثابة بوابة العنقود أو عقله المُدبِّر، ويؤدي مهامًا مثل: إتاحة واجهة برمجة التطبيقات Kubernetes API للمستخدمين والعملاء، والتحقق من سلامة الخوادم الأخرى وتقسيم العمل عليها (بعملية تسمى "الجدولة scheduling")، بالإضافة إلى تنظيم الاتصال بين مكونات العنقود (أو ما يُعرف بتنسيق الحاويات container orchestration). إذًا فالخادم الرئيسي هو نقطة الاتصال الأساسية مع عنقود Kubernetes والمسؤول عن معظم أعماله المركزية. تدعى الآلات الأخرى في العنقود عقدًا nodes: وهي مجموعة خوادم مسؤولة عن استقبال أحمال العمل workloads وتشغيلها باستخدام الموارد الحاسوبية المتوفرة لها المحلية والخارجية. وتُجَهَّز كل عقدة ببرنامج لتشغيل الحاويات مثل دوكر Docker أو روكيت rkt، إذ إن Kubernetes يُشغِّل التطبيقات والخدمات ضمن حاويات containers ليؤمن لها المستويات المرجوة من العزل والمرونة والإدارة الفعالة، وتتلقى العقدة تعليمات العمل الخاصة بها من الخادم الرئيسي، فتُنشئ بناءً عليها حاوياتٍ جديدة أو تُدمِّر حاوياتٍ أخرى، وتُعدِّل قواعد المرور عبر الشبكة لتُوجّه حركة البيانات حسب المطلوب. تعمل التطبيقات والخدمات على العنقود وهي ضمن الحاويات (كما ذكرنا أعلاه)، وتتأكد المكونات الأساسية باستمرار من توافق الحالة المرغوبة للتطبيقات مع الحالة الفعلية للعنقود. أما المستخدمون فيتفاعلون مع العنقود عبر الاتصال مع خادم Kubernetes API الرئيسي مباشرةً أو بواسطة تطبيقات العملاء clients والمكتبات البرمجية. والخطوة الأولى التي يبدأ بها تشغيل أي تطبيق أو خدمة هي إعداد خطة تصريحية declarative plan بصيغة JSON أو YAML تتضمن ما ينبغي إنشاؤه لتشغيل التطبيق، وكيف سيُدّار. ثم يُحلل الخادم الرئيسي هذه الخطة، ويحدد أنسب الطرق لتشغيلها على البنية التحتية المتوفرة له، وذلك عبر فحص المتطلبات اللازمة والحالة الحالية للنظام والموازنة بينهما. وتمثل مجموعة التطبيقات التي خصصها المستخدم لتعمل وفق خطة محددة الطبقة الأخيرة في نظام Kubernetes. يجعل هذا النهج التصريحي من إدارة التطبيقات المعقدة أكثر سهولة وقابلية للتوسع ويسمح للمطورين بالتركيز على وصف ما يريدونه، بينما يتولى كوبرنيتس Kubernetes تفاصيل التنفيذ. مكونات الخادم الرئيسي Master Server يتحكم الخادم الرئيسي بعناقيد Kubernetes، ويؤمن نقطة اتصال رئيسية لمدراء الأنظمة administrators والمستخدمين، ويوفر العديد من الأنظمة لإدارة العقد العاملة worker nods الأقل منه تطورًا على نطاق العنقود. بالعموم، تؤدي مكونات الخادم الرئيسي مجموعةً من الوظائف أبرزها: قبول طلبات المستخدمين، وتحديد أفضل الطرق لجدولة حاويات أحمال العمل workload containers، وإجراء المصادقة بين العملاء والعقد، وضبط قواعد التوجيه والوصول الشبكي على مستوى العنقود، وإدارة مهام التوسعة والتحقق من سلامة النظام. تُثبَّت مكونات الخادم الرئيسي (التي سنذكرها تاليًا) على خادم واحد أو على عدة خوادم حسب الحالة. المَخزَّن العام للإعدادات etcd يُعدّ المَخزَّن العام للإعدادات واحدًا من أهم المكونات الضرورية لعمل عنقود Kubernetes، يوفره مشروع etcd الذي أنشأه فريق تطوير CoreOS (وهو نظام التشغيل الموجه للحاويات ويمكنك معرفة المزيد عنه بقراءة مقدّمة إلى مكونات نظام CoreOS). و etcd هو نظام لتخزين ملفات الإعدادت وإدارتها بشكل موزع، وهو عبارة عن مَخزَنَ قيم-مفاتيح موزّع على المستوى العام لنظام Kubernetes، ويتصف بأنه خفيف في استخدام الموارد، ويمكن تهيئته لتمرير الإعدادات بين عدة عقد. إذ يُخزِّن Kubernetes بيانات الإعدادات التي يُسمح لكل عقدة بالوصول إليها في مَخزَّن etcd. وتستخدم مكونات Kubernetes هذه البيانات لاكتشاف الخدمة المطلوبة، وتهيئة نفسها للعمل حسب المعطيات الجديدة، وتساهم أيضًا في الحفاظ على حالة العنقود بواسطة ميزات، مثل: اختيار القائد leader election، والقفل الموزع distributed locking وغيرها. وتجري عملية تعيين القيم أو استردادها بواسطة واجهة برمجة تطبيقات HTTP/JSON API بسيطة تجعل العملية سلسة وواضحة. يمكن بناء etcd على خادم رئيسي واحد أو جعله موزعًا على عدة آلات في بعض بيئات الإنتاج، والشرط الوحيد هو توفر اتصال شبكي يصله بجميع آلات العنقود. خادم kube-apiserver API خادم API من أهم الخدمات المحورية على الخادم الرئيسي لعنقود Kubernetes، ويُعدّ نقطة الإدارة الرئيسية للعنقود بأكمله فهو يسمح للمستخدم بإعداد أحمال العمل والوحدات التنظيمية، والتحقق من توافق تفاصيل الخدمة على الحاويات المنشورة مع البيانات الموجودة في مخزَّن etcd. يمكنك النظر إلى خادم API مثل جسر يصل المكونات ببعضها، ويعمل للحفاظ على سلامة العنقود، ولنقل المعلومات والأوامر عبره. يطبق هذا الخادم واجهة برمجة تطبيقات من نوع RESTful API، وتضع شهرتها الواسعة العديد من المكتبات والأدوات في أيدي مستخدمي Kubernetes لتيسير عليهم التخاطب مع خادم API. يتوفر لخادم kube-apiserver عميلٌ افتراضي يدعى kubectl يتيح لك الاتصال مع عنقود Kubernetes من حاسبك المحلي. مدير التحكم kube-controller-manager مدير التحكم controller manager هو خدمة عامة تتولى عدة مسؤوليات ضمن العنقود، أولها إدارة المتحكمات المختلفة التي تنظم حالة العنقود، وإدارة دورات حياة حمل العمل workload، بالإضافة لبعض المهام الروتينية الأخرى. فعلى سبيل المثال: يفحص متحكم النظائر replication controller عدد النظائر المحددة لكائن pod معين (أي عدد تكراراته أو النسخ المماثلة له)، ويتأكد أن هذا العدد مطابقٌ للعدد الفعلي المنشور حاليًا على العنقود. تُكتب تفاصيل العمليات جميعها في etcd، ويراقب مدير التحكم التغييرات التي تطرأ على المعلومات ضمنه بواسطة خادم API. عندما يحدث أي تغيير، يقرأ المتحكم المعلومات الجديدة، ويُطبق الإجراءات اللازمة للوصول إلى الحالة المطلوبة، فقد يعمل مثلًا على توسيع نطاق التطبيق أو تقليصه، أو على ضبط نقاط الوصول الخاصة به endpoints أو غير ذلك. المُجَدّوِل kube-scheduler الجدولة هي ربط أحمال العمل بالعقد؛ فتحدد خدمة المُجَدّوِل ما ستُنفذه كل عقدة. تقرأ الخدمة متطلبات تشغيل كل حمل عمل، وتُحلل مواصفات بيئة البنية التحتية الحالية المتوفرة، وبناءً على ذلك تقرر أي عقد أو مجموعة عقد هي المقبولة لتنفيذ العمل. يتتبع المُجَدّوِل الإمكانات المتاحة على كل مضيف، ليضمن أن أحمال العمل لم تُجَدول على العقد بطريقة خاطئة تتعارض مع الموارد المتاحة. وبالتالي يعرف المُجَدّوِل في كل لحظة الموارد الإجمالية المتوفرة والموارد المخصصة حاليًّا لأحمال العمل. مدير التحكم السحابي cloud-controller-manager نظام Kubernetes قابلٌ للنشر في بيئات متعددة، ويمكنه التعامل مع خدمات البنى التحتية لمزودين مختلفين، فيأخذ معلومات عن حالة الموارد الحاسوبية التي توفرها للعنقود ويديرها حسب متطلباته. ولكونه يتعامل مع تمثيلات عامة للموارد الحاسوبية مثل: موازنات الحمل Load Balancers والحجوم التخزينية وغيرها، فإنه يحتاج لربط map هذه التمثيلات بالموارد الفعلية التي يوفرها له مزودو الخدمات السحابية المتعددون. وهنا تبرز أهمية مدير التحكم السحابي، إذ يسمح لنظام Kubernetes بالتخاطب مع مزودي خدمات مختلفين في المزايا والإمكانات وواجهات API، مع الحفاظ على بنيته الداخلية عامة نوعًا ما بالرغم من تنوع الخدمات السحابية التي يتعامل معها. يعطي ذلك Kubernetes القدرة على تحديث معلومات الحالة لديه بناءً على المعلومات التي يوفرها له المزود السحابي، ويستخدمها لضبط الموارد السحابية المخصصة له لتلبي متغيرات العمل، فقد يُنشئ مثلًا خدمات سحابية إضافية عندما تزداد احتياجات العمل المطلوبة من العنقود. مكونات خادم العقدة Node Server العقد Nodes في Kubernetes هي الخوادم التي تعمل عليها حاويات التطبيق؛ تتطلب العقد بعض الضروريات لتؤدي أعمالها في التخاطب مع مكونات الخادم الرئيسي، وضبط إعدادات الاتصال الشبكي للحاويات، وتشغيل أحمال العمل التي يكلفها بها الخادم الرئيسي. بيئة تشغيل الحاوية Container Runtime بيئة تشغيل الحاوية Container Runtime من أهم مكونات العقدة، ودوكر Docker هو من أشهر بيئات التشغيل المعتمدة، لكنه ليس الوحيد، إذ يوجد بدائل له أخرى مثل rkt المطُور من قبل CoreOS وكان يُعتبر بديلاً أكثر أماناً وقابلية للتحكم مقارنة بدوكر و runc وهو مكون منخفض المستوى يستخدمه دوكر نفسه لتنفيذ الحاويات. تتولى أدوات بيئة تشغيل الحاوية عمليات بدء تشغيل الحاويات وإدارتها، والحاويات Containers هي تطبيقات خفيفة مغلفة في بيئة تشغيل معزولة، وتُعدّ المكون الأساسي في وحدات عمل عنقود Kubernetes، فتشتمل كل وحدة عمل على حاوية واحدة ينبغي نشرها أو أكثر حسب متطلبات المشروع. وعندما ترد أحمال العمل إلى العنقود تعمل بيئة تشغيل الحاوية على تشغيل الحاويات المطلوبة لتنفيذ العمل. نقطة اتصال العقدة kubelet نقطة اتصال العقدة kubelet هي صلة الوصل التي تربط كل عقدة ببقية أجزاء العنقود. وهي خدمة صغيرة تنقل المعلومات ذهابًا وإيابًا بين العقدة وخدمات مستوى التحكم على الخادم الرئيسي، وتتخاطب أيضًا مع مخزن الإعدادات etcd لقراءة بيانات العمل منه أو كتابة بيانات جديدة فيه. تتواصل kubelet مع مكونات الخادم الرئيسي لإتمام عملية المصادقة بين العقدة والعنقود، وللحصول على الأوامر وتفاصيل الأعمال المُسندة إليها، والتي تردها بصيغة بيان manifest أو خطة تحدد حمل العمل المطلوب ومعطيات parameters التشغيل. تحافظ kubelet على حالة العمل على العقدة، وتتحكم ببيئة تشغيل الحاوية لإنشاء الحاويات أو تدميرها حسب الحاجة. الوكيل kube-proxy يستخدم الوكيل لإدارة الشبكات الفرعية داخل المضيف، وجعل الخدمات متاحة بين المكونات، وهو خدمة صغيرة تدعى kube-proxy توجد على كل عقدة، توجه الطلبات الواردة إليها إلى الحاوية المسؤولة عن تنفيذها، وتجري نوعًا مبسطًا من موازنة الحمل Load Balancing، وتضمن أن سلوك الشبكة قابلًا للتنبؤ به، وأنها متاحة أو معزولة حيث ينبغي ذلك. كائنات Kubernetes وأحمال العمل يستخدم Kubernetes طبقات تجريد abstraction إضافية فوق الحاويات -التي تُعدّ الآلية الرئيسية لنشر التطبيقات المغلفة containerized applications- توفر هذه التجريدات للمستخدمين ميزات المرونة والتوسع وإدارة دورة الحياة، فبدلًا من تعاملهم مع الحاويات مباشرةً يتفاعلون مع المثيلات instances التي تتألف من مجموعة مكونات أولية يوفرها نموذج عمل كائن Kubernetes، سنعرض في هذه الفقرة كائنات Kubernetes وكيفية استخدامها للتعامل مع أحمال الحمل. الكائنات Pods الكائن Pod هو أصغر وحدة تنظيمية يتعامل معها عنقود Kubernetes، تتكون من حاوية أو مجموعة حاويات، فعند الإعداد لا نخصص الحاويات على مضيف معين، إنما نشير إليها بكائن Pod الذي تنتمي إليه. تمثل الحاويات الموجودة في Pod واحد تطبيقًا واحدًا أي أنها تعمل معًا بارتباطٍ وثيق، فتتشارك دورة الحياة، وتُجدّوَل أعمالها على عقدة واحدة، وتُدار بصفتها وحدة واحدة، وتتقاسم بيئة التشغيل والموارد مثل: المساحات التخزينية وعناوين IP. فِكِّر دائمًا بالكائن Pod على أنه تطبيق واحد متجانس بالرغم من تعدد حاوياته، لتفهم كيف يتعامل معه العنقود، ويُدّير موارده، ويُجدّول مهامه. يحتوي كل Pod على حاوية رئيسية لا غنى عنها تلبي الهدف العام من حمل العمل workload، وقد يحتوي حاويات أخرى اختيارية تؤدي مهامًا مساعدة حسب احتياجات مشروعك، تتضمن الحاويات المساعدة عادةً برامج مستقلة تعمل وتُدار فيها باستقلالية لكنها ترتبط بالمشروع بطريقة أو بأخرى، لذا توضع معه في كائن Pod واحد. على سبيل المثال: قد يتضمن Pod معين حاويةً رئيسية لتشغيل خادم التطبيق، وحاويةً مساعدة تتحسس لأي تغييرات تحدث على مستودع خارجي متعلق به، وتسحب الملفات المرتبطة منه إلى نظام الملفات المشترك داخل Pod. لا يُنصح عادةً بالتوسع الأفقي على مستوى كائنات Pods إذ تترك هذه المهمة عادة لكائنات أخرى بمستوى أعلى. لا يُدّير المستخدمون عمومًا كائنات Pods بأنفسهم، فهي لا توفر لهم المميزات التي غالبًا ما يحتاجونها لإدارة تطبيقاتهم، مثل: الإدارة المتقدمة لدورة حياة التطبيق أو إدارة عمليات التوسعة Scaling، وبالمقابل تشجعهم بنية Kubernetes على استخدام كائنات بمستوى أعلى، تستخدم بدورها كائنات Pods أو قوالب Pods لتأدية الوظائف. متحكمات النظائر ومجموعات النظائر يعمل معظم من يستخدم Kubernetes مع نظائر متعددة للكائنات Pods مطابقة لها تمامًا، بدلًا من التعامل مع Pods مفردة. تُنشئ هذه النظائر انطلاقًا من قوالب Pod، وتوسعها أفقيًا متحكماتٌ خاصة تدعى متحكمات النظائر Replication Controllers ومجموعات النظائر Replication Sets. متحكم النظائر replication controller هو أحد كائنات Kubernetes، مسؤول عن تحديد قالب Pod الذي ستُبنى النظائر انطلاقًا منه، وأيضًا عن تحديد معطيات التحكم التي تُمَكِّنهُ من إدارة التوسعة الأفقية لنظائر Pod فيزيد عدد النظائر قيد التشغيل أو ينقصها حسب الحاجة. تمثل هذه العملية طريقةً سهلة لموازنة الحمل وتحسين التوافرية availability داخل نظام Kubernetes، فالقالب الذي ستنشئ منه النظائر الجديدة، والذي يشبه إلى حدٍ كبير تعريف للكائن Pod، يكون مضمنًا embedded في إعدادات متحكم النظائر. يتأكد متحكم النظائر باستمرار من تطابق عدد Pods المنشورة فعليًّا على العنقود مع العدد المطلوب والمحدد في إعدادته. وفي حال فشل أي Pod أو مضيف، سيستجيب المتحكم على الفور، ويبدأ بتشغيل Pods جديدة لتعويض النقص. أما إذا طرأ أي تغيير على عدد النظائر المحدد في إعداداته بالزيادة أو النقصان فسيُشغِّل المتحكم حاويات جديدة أو يدمر الحاويات الموجودة أصلًا ليصل للعدد المطلوب. يؤدي متحكم النظائر أيضًا مهمة التحديثات التدريجية rolling updates فيَنقُل مجموعة Pods إلى الإصدار الجديد بالتتابع واحدًا تلو الآخر حتى لا يسبب انقطاع كلي للخدمة فيؤثر على توافرية التطبيق. مجموعات النظائر Replication sets تتمتع بتصميم مشابه لتصميم متحكم النظائر، مع مرونة أكبر في آلية تعريف المتحكم لكائنات Pods التي سيُدِّيرها. يتسع نطاق الاعتماد على مجموعات النظائر على حساب متحكمات النظائر، بسبب إمكاناتها الكبيرة في اختيار النظائر، لكنها بالمقابل قاصرة عن إجراء التحديثات التدريجية للتطبيق وترقية واجهاته الخلفية إلى إصدار جديد كما تفعل متحكمات النظائر، فقد صممت مجموعات النظائر لتعمل في وحدات تنظيمية أخرى أعلى منها مستوى تؤدي هذه المهمة. تمامًا مثل Pods، تُعدّ متحكمات النظائر ومجموعات النظائر وحداتٍ أولية في نظام Kubernetes وناردًا ما يتعامل معها المستخدم العادي، رغم أنها توفر لتطبيقاته التوسعة الأفقية والوثوقية في العمل، إلَا أنها تفتقر لمميزات إدارة دورات الحياة بطريقة سلسة يفضلها المستخدمون والموجودة في مكونات Kubernetes الأكثر تعقيدًا. النشر Deployments يُعدّ النشر Deployments واحدًا من أشهر أحمال العمل التي تُنشئ وتُدار مباشرةً على Kubernetes. تستخدم عمليات النشر مجموعات النظائر بوصفها كتلة بناء أو مكون أساسي تُبنى منه، وهذا ما يمنح مجموعات النظائر المرونة التي تفتقدها في إدارة دورة الحياة. للوهلة الأولى قد تبدو لك عمليات النشر deployments المكونة من اجتماع عدد من مجموعات النظائر مشابهة في وظائفها لمتحكمات النظائر، إلّا أنها في الواقع تعالج العديد من نقاط ضعفها في إطلاق التحديثات. فعند استخدام المتحكمات ينبغي عليك إعداد خطة لمتحكم النظائر الجديد الذي سيحل محل المتحكم الحالي، وستكون أعمال كثيرة مثل: سجلات تتبع الأحداث، واستعادة التطبيق في حال طرأ عطل في الشبكة، والتراجع عن التحديث rolling back، عملياتٍ صعبة التنفيذ أو تلقى مسؤوليتها على المستخدم. إذًا فالنشر Deployments هو كائن عالي المستوى، ومصمم لتسهيل إدارة دورة حياة نظائر Pods، وهو أكثر الكائنات التي ستعمل معها مباشرةً في Kubernetes، إذ يمكنك تعديله بسهولة حسب ما تريد فكل ما يتطلبه الأمر تعديل إعداداته، وبعدها سيضبط Kubernetes مجموعات النظائر replica sets بناءً على إعداداتك، ويدير الانتقالات بين إصدارات التطبيق مع تفعيل اختياري لميزات مثل: سجل تتبع الأحداث والتراجع الآلي عن التحديث وغيرها. مجموعات الحالة Stateful sets مجموعات الحالة Stateful sets هي pod تحكم متخصصة نوعًأ ما، تضمن ترتيب طلبات إنشاء Pods في مجموعة الحالة، وأن يمتلك كل Pod في هذه المجموعة معرفًا فريدًا خاصًا به. وتوفر للمستخدمين تحكمًا دقيقًا في المشاريع ذات المتطلبات الخاصة سواءً على صعيد النشر أو الاستقرار الشبكي أو وجود البيانات الدائمة Persistent data التي تبقى متاحة لوقت طويل دون تغيير. فغالبًا ما ترتبط مجموعات الحالة بالتطبيقات الموجهة للبيانات، مثل قواعد البيانات التي تتطلب وصولًا دائمًا لوحدات التخزين نفسها في جميع الظروف حتى إذا أُعِيدَت جدولتها على عقدة جديدة. توفر مجموعات الحالة مُعرِّفًا شبكيًا ثابتًا لكل Pod، هو اسمٌ عددي فريد يشير إلى Pod بعينها دائمًا حتى إذا انتقلت إلى عقدة أخرى. والأمر نفسه مع وحدات التخزين الدائمة التي تنتقل مع Pod إن أُعِيدَت جدولتها لسبب ما. علماً أن وحدات التخزين الدائمة هذه تبقى موجودة ولا تحذف تلقائيًا مع حذف Pod لمنع الفقدان غير المقصود للبيانات. تنفذ مجموعات الحالة العمليات المناطة بها في أثناء النشر أو ضبط التوسعة وفقًا للمُعرِّف الفريد، ويعزز ذلك إمكانية التنبؤ والتحكم بترتيب التنفيذ، ويُعدّ مفيدًا في بعض المشاريع ذات الطبيعة الخاصة. مجموعات برامج التشغيل الخلفية Daemon Sets مجموعات البرامج الخفية Daemon sets هي نموذج متخصص آخر من متحكمات pod التي تُشَغِّل نسخة من pod معين على كل عقدة (أو مجموعة عقد مترابطة) في العنقود. وتبرز فائدتها عند نشر Pods الخدمية لعقد Kubernetes مثل Pods الصيانة وغيرها. فعلى سبيل المثال تُعدّ خدمات نحو: جمع ملفات تسجيل الأحداث وإعادة توجيهها، وتنظيم المقاييس، وتشغيل الخدمات التي تزيد من إمكانات العقد وغيرها، حالات شائعة للاستفادة من مجموعات البرامج الخفية. ولا تخضع مجموعات البرامج الخفية لقيود الجدولة المفروضة على pods العادية والتي تربطها بمضيفين معينين، ذلك أنها تقدم خدمات أساسية ومطلوبة في كامل نظام Kubernetes حتى **على الخادم الرئيسي، الذي يُعدّ محظورًا على المجدول بسبب مسؤولياته الخاصة، إلّا أن مجموعات البرامج الخلفية تتجاوز هذه القيود لتتأكد من سلامة تشغيل الخدمات الرئيسية. المهام Jobs والمهام الدورية Cron Jobs تتصف معظم أحمال العمل التي أوردناها في المقال بدورة حياة طويلة الأمد تشبه دورة حياة الخدمة، لكن Kubernetes يستخدم أيضًا نوعًا آخر من أحمال العمل يسمى المهام jobs لتأمين سير عمل أشبه بالمأمورية المؤقتة task-based تخرج فيه الحاوية من الخدمة بعد مضي بعض الوقت وانتهاء مهمتها. تساعدك كائنات المهام Jobs على تنفيذ العمليات التي لا تتطلب تشغيل خدمات دائمة، مثل: العمليات الدفعية batch أو العمليات التي تُجرى لمرة واحدة. تُبنى المهام الدورية cron jobs على المهام jobs. وهي تماثل جدولة المهام بتقنية cron في لينكس وغيره من أنظمة يونيكس المشابهة التي تُنَفَذ بموجبها السكربتات وفقًا لجدول زمني محدد، إذ توفر المهام الدورية في Kubernetes واجهة لتشغيل المهام بواسطة المجدول (مكون الخادم الرئيسي الذي ذكرناه سابقًا). تستخدم المهام الدورية لضبط تنفيذ مهمة معينة بوقت محدد في المستقبل، سواء لمرة واحدة أو لتكرار تنفيذها بانتظام. ويمكنك النظر إلى المهام الدورية في Kubernetes على أنها تطبيق لمهام cron التقليدية ولكن على منصة كاملة هي العنقود بدلًا من نظام تشغيل منفرد. مكونات أخرى لنظام Kubernetes يوفر Kubernetes عددًا من التجريدات إضافةً إلى أحمال العمل تساعدك على إدارة تطبيقاتك، والتحكم بالشبكات، وتأمين الاستمرارية وغير ذلك، سنناقش بعضًا منها أدناه: خدمات Kubernetes استخدمنا مصطلح "خدمة service" بالمعنى التقليدي كما في أنظمة يونيكس، أي للدلالة على العمليات طويلة الأمد، والتي غالبًا ما تتصل بالشبكة، وتستجيب للطلبات. إنما في Kubernetes تعمل الخدمة بصفتها موازن حمل أساسي داخلي ومرسال لوحدات pods. وتجمع الخدمة مجموعات منطقية من pods التي تؤدي الوظيفة نفسها، وتقدمها بوصفها كيان واحد. يمكنك مثلًا نشر خدمة لتتبع الحاويات الخلفية من نوع معين وتوجيه الطلبات إليها. علمًا أن كل ما يحتاج المستهلكون الداخليون لمعرفته عن الخدمة هو نقطة النهاية الثابتة التي توفرها فقط دون أي تفاصيل أخرى، يتيح لك هذا التجريد توسيع نطاق وحدات العمل العاملة في الخلفية أو استبدالها حسب الحاجة، وسيبقى عنوان IP المخصص للخدمة ثابتًا بصرف النظر عن أي تغيير يطرأ على pods المرتبطة به. يكسبك نشر الخدمات قابلية الاكتشاف ويبسيط تصميم حاوياتك. تفيدك الخدمات في الحالات التي تحتاج فيها للوصول إلى pods تطبيق آخر أو للاتصال مع مستهلكين خارجيين. فعلى سبيل المثال: إذا كان لتطبيقك عددٌ من pods العاملة على خوادم الويب ويتصل بها العملاء عن طريق الإنترنت، فإن بناء خدمة خاصة بهذه الحالة سيوفر لك التجريد اللازم. وهذا مثال آخر: لنفترض أن خوادم الويب في مشروعك بحاجة لتخزين البيانات واستردادها في قاعدة بيانات معينة، فيمكنك تأمين وصولها إلى pods قاعدة البيانات عبر بناء خدمة داخلية تتكفل بالأمر. خدمات Kubernetes متاحة افتراضيًا داخل العنقود بعنوان IP الخاص بها، وإذا أردت طلبها من الخارج فيمكنك تحقيق ذلك بعدة طرق، تتمثل إحداها بفتح منفذ ثابت static port خاص بالخدمة على واجهة الشبكة الخارجية لكل عقدة، ثم توجيه حركة المرور الواردة إليه تلقائيًا إلى عنوان IP الداخلي للخدمة، وبالتالي إلى pods المناسبة. تسمى هذه الطريقة NodePort. أو يمكنك استخدام خدمة خاصة من نوع موازن حمل LoadBalancer تُنشئ لك موازن حمل خارجي يوجه حركة البيانات نحو الخدمة الداخلية المقصودة، تُنَفَذ هذه الطريقة باستخدام تكامل موازن الحمل الخاص بمزود Kubernetes السحابي، إذ ينشئ مدير التحكم السحابي الموارد اللازمة ويربطها بعناوين خدمة موازن الحمل التي تشير لخدمتنا الداخلية المقصودة. وحدات التخزين ووحدات التخزين الدائمة تُعدّ مشاركة البيانات بين أكثر من حاوية مشاركةً موثوقة، والحفاظ عليها وضمان توفرها بين عمليات إعادة تشغيل الحاويات، تحدّيًا كبيرًا في العديد من بيئات الحاويات. وتوفر بعض بيئات تشغيل الحاويات آليات خاصة ترتبط وحدات التخزين بالحاوية، وتحافظ عليها بعد انتهاء عمر الحاوية، لكن هذه الآليات تفتقد غالبًا للمرونة في التنفيذ العملي. يستخدم Kubernetes تجريدًا خاصًا لمعالجة هذا التحدّي يدعى وحدات التخزين volumes، يسمح للحاويات المغلفة في pod واحد بمشاركة البيانات فيما بينها، والإبقاء عليها متاحة لحين انتهاء عمل pod، وحتى إذا فشلت حاوية معينة أو توقفت لسبب من الأسباب فالبيانات المشتركة ستبقى قابلة للوصول طالما أن pod موجود، وعند إنهاء عمله يُحذف المجلد المشترك. يُسهّل ذلك مشاركة الملفات بين عناصر pod الواحد دون الحاجة لأي آليات خارجية معقدة، لكنه لا يُعدّ حلًا مناسبًا للبيانات الدائمة التي لا تتعلق بعمر pod بل تستمر بعدها. لذا يوفر Kubernetes تجريدًا أقوى لتخزين البيانات الدائمة، يسمى وحدات التخزين الدائمة Persistent volumes، لا يرتبط بدورة حياة pod، ويسمح لمديري النظام بإعداد موارد التخزين على مستوى العنقود ليتمكن المستخدمون من حجزها لكائنات pod التي يُشغِّلونها حسب تفضيلاتهم. ويحدد كل مستخدم سياسة الاسترداد الخاصة به، التي تقرر فيما إذا كانت وحدة التخزين وبياناتها ستُحذف يدويًا من قبله أم آليًّا عند انتهاء عمر pod. يخفف استخدام وحدات التخزين الدائمة من المخاطر المترتبطة بحالات فشل العقدة، ويساعدك على زيادة مساحات التخزين المخصصة لصالح مشروعك عمّا هو متاحٌ له محليًّا على المضيف. التعليقات التوضيحية Annotations والتسميات التوضيحية Labels التسميات التوضيحية label هي تجريد تنظيمي في Kubernetes ينظم المفاهيم الأخرى في النظام ويوضحها، وهي علاماتٌ دلالية ترفق بكائنات Kubernetes لوسمها بوسمٍ خاص يشير لانتمائها لمجموعة معينة، أي أنها تُستَخدم لتصنيف الكائنات ولاستهداف مثيلات مختلفة لأغراض الإدارة أو التوجيه أو غيرها، فمثلًا تعتمد الخدمات على التسميات التوضيحية لمعرفة pods الواجهة الخلفية التي ينبغي توجيه الطلبات إليها، وكذلك الأمر مع كائنات التحكم التي تستعمل التسميات التوضيحية لتحديد pods التي ستعمل عليها. تُوضع التسميات التوضيحية بهيئة أزواج مفتاح-قيمة، ويمكن أن تحظى الوحدة التنظيمية عدة لصائق، لكنها لا تحمل أبدًا إلّا بقيمة واحدة لكل مفتاح. ومفتاح "الاسم name" هو أشهر المفاتيح، ويُعدّ مُعَرِّفًا عامًا متعدد الأغراض، يمكنك أيضًا تصنيف الكائنات وفق معايير أخرى حسب احتياجات عملك، مثل: مرحلة التطوير، وإمكانية الوصول العام، وإصدار التطبيق… إلخ. تشبه **التعليقات التوضيحية Annotations ** التسميات التوضيحية لكنها تترك لك الحرية في إرفاق أي تعليق تريده ضمن خانة القيمة للدلالة على الكائن ما دون الالتزام بمعايير محددة، في حين تفرض عليك التسميات التوضيحية قواعد معينة في كتابة المعلومات الدلالية لتجري مطابقتها عند اختيار pod. باختصار تساعدك التعليقات التوضيحية في إضافة بيانات تعريفية غنية للكائن لكنها لا تفيدك في تصنيفه أو تحديده لأمرٍ معين. الخلاصة يتيح Kubernetes لمستخدميه تشغيل مشاريعهم المغلفة في الحاويات على منصة قوية وعالية التجريد، وبطريقة تكفل لهم قابلية التوسع والتوافرية العالية. وعندما تبدأ بالتعرف عليه ستبدو لك بنيته معقدة، ويصعب التعامل معها، لكن ما أن تفهم أساسياتها وكيفية توافق عناصرها معًا ستشعر بمرونتها وفائدتها الكبيرة للمشاريع مفتوحة المصدر والتطوير السحابي الأصلي، وبمزيد من التدريب ستصبح قادرًا على استثمار ميزاتها المتنوعة لتشغيل أحمال العمل وإدارتها على نطاق واسع، ولإنشاء تطبيقاتك السحابية الأصلية. ترجمة -وبتصرف- للمقال ?What is Kubernetes لصاحبه Justin Ellingwood. اقرأ أيضًا تعلم أساسيات Kubernetes نشر تطبيق جانغو آمن وقابل للتوسيع باستخدام كوبيرنتس Kubernetes مدخل إلى Kubernetes ما الفرق بين دوكر Docker وكوبيرنيتيس Kubernetes؟
    1 نقطة
  5. الاستضافة السحابية Cloud Hosting هي التقنية التي تتيح لك استخدام الخوادم الافتراضية حسب طلبك عبر الإنترنت، إذ يمكنك إنشاؤها أو تعديلها أو حذفها وفق ما تريد. تُستضاف الخوادم السحابية على خوادم مادية موجودة لدى مزود الخدمة، وتأخذ منها الموارد الحاسوبية التي تحتاجها من وحدات معالجة وذواكر ومساحات تخزين وغيرها، وبإمكانك تثبيت نظم التشغيل والبرمجيات التي تختارها على الخوادم السحابية. تستخدم الاستضافة السحابية عمومًا لاستضافة مواقع الويب أو التطبيقات الموزعة المعتمدة على الويب أو أي خدمات أخرى مشابهة. يتناول المقال المفاهيم الأساسية للاستضافة السحابية، ويشرح آلية عمل الحوسبة الافتراضية Virtualization مع عرضٍ لأهم مكوناتها، وأخيرًا مقارنة موجزة بين الاستضافة السحابية والاستضافات الأخرى. ما هي السحابة؟ السحابة مصطلح شائع يشير إلى الخوادم المتاحة للاستخدام العام عبر الإنترنت، وذلك إما باستئجارها استئجارًا مدفوعًا أو استخدامها بوصفها جزءًا من برنامج أو منصة خدمية. تتنوع الخدمات السحابية التي تستطيع استخدامها ومنها مثلًا: استضافة مواقع الويب، واستضافة الملفات ومشاركتها، واستضافة البرامج الموزعة وغير ذلك. تشير السحابة أيضًا إلى الحوسبة السحابية Cloud Computing، وهي التقنية التي تتيح لك توسيع نطاق المهمة التي تنفذها لتشمل خوادم متعددة، فبدلًا من تنفيذها على خادم واحد بمواصفات عالية توزع المهمة على مجموعة خوادم أصغر تسمى العقد nodes. كيف تعمل الحوسبة الافتراضية؟ تتضمن بيئة الاستضافة السحابية مكونين رئيسيين: الخوادم الافتراضية التي تستضيف التطبيقات ومواقع الويب، والمضيفين الماديين المسؤولين عن إدارة الخوادم الافتراضية، وتتمثل الحوسبة الافتراضية في العلاقة بينهما، وهي التي تمنح الاستضافة السحابية مرونتها وقابليتها للتوسع مميزةً إياها عن الاستضافات الأخرى. الخوادم الافتراضية Virtual Servers الخادم الافتراضي الخاص Virtual private server أواختصارًأ VPS هو الأسلوب الأكثر انتشارًا للاستضافة السحابية، وخادم VPS هو خادم افتراضي يكافئ في عمله الحاسوب المادي، وله نظام تشغيله الخاص وعملياته الخاصة، ورغم أن الخوادم الافتراضية الموجودة على المضيف نفسه تتشارك في موارده الفيزيائية إلّا أن عمليات كل خادم افتراضي تبقى مستقلة تمامًا عن عمليات الخوادم الافتراضية الأخرى، فلا تتأثر أو تؤثر بها. تُنشر الخوادم الافتراضية وتُدار بواسطة برنامج خاص يسمى المراقب Hypervisor ويكون موجودًا على المضيف الفيزيائي، وبواسطته تُثبت نظم التشغيل على الخوادم الافتراضية. عمليًّا يعادل استخدام الخادم الافتراضي استخدام خادم مادي مخصص فلن تشعر بفرق بينهما، رغم أن الخادم الافتراضي يتشارك موارد مضيفه مع الخوادم الافتراضية الأخرى التي تقاسمه الاستضافة. المضيفون Hosts المُضيف هو الخادم الفيزيائي أو المادي الذي يستضيف الخادم الافتراضي، ويزوده بالموارد الحاسوبية اللازمة لعمله. يستخدم المُضيف طبقة برمجية تدعى برنامج المراقب Hypervisor لإدارة الموارد الحاسوبية ونشرها ومنحها للخوادم الافتراضية الموجودة تحت سلطته. يستخدم البعض مصطلح Hypervisor للإشارة إلى المضيفين الفيزيائيين المّثبت عليهم برامج المراقب مع خوادمهم الافتراضية. يخصص المضيف كل خادم افتراضي بذاكرة، ووحدات معالجة مركزية CPU، واتصالًا شبكيًا بمجرد تشغيله، ويعمل المراقب على جدولة العمليات بين CPU الافتراضية ونوى المعالجة الحقيقية في مهمة مستمرة وعالية الدقة فقد تستخدم خوادم افتراضية متعددة نوى المعالجة الحقيقية نفسها. يوجد عدة أنواع لبرنامج المراقب، تختلف عن بعضها بطريقة جدولة العمليات ومشاركة الموارد. المراقبون Hypervisors يتوفر لمضيفي السحابة اليوم عددٌ قليل من برامج Hypervisor الشائعة، ولكل منها أساليبه الخاصة في الحوسبة الافتراضية، لكن مهما بلغت الاختلافات بينها فجميع برمجيات المراقب في نهاية الأمر تؤدي دورًا جوهريًا واحدًا، هو تأمين الأدوات التي يحتاجها المضيف لنشر الخوادم الافتراضية، وصيانتها، ونقلها، وحذفها حسب الطلب. KVM، تختصر العبارة Kernel-Based Virtual Machine أو الأجهزة الافتراضية المعتمدة على نواة لينكس. تمامًا كما يوحي الاسم فهي بنية تحتية للحوسبة الافتراضية مدمجة في نواة نظام لينكس، وبمجرد تفعيلها يتحول الخادم المثبت عليه لينكس إلى Hypervisor، ويمكنه استضافة الخوادم الافتراضية مباشرةً بدون أي إضافات أخرى. تختلف KVM عن بقية برامج Hypervisor بأنها لا تحتاج إلى القيام بعملية إنشاء أو محاكاة لمكونات نواة خاصة بالاستضافة الافتراضية. يمكنك التعرف عليها عن قرب بمراجعة المقال أساسيّات الحوسبة الافتراضيّة Virtualization باستخدام KVM على Red Hat Enterprise Linux. Xen، من أشهر برامج Hypervisor، يعتمد على نواته المصغرة الخاصة لتأمين الأدوات اللازمة لدعم الخوادم الافتراضية بدون الحاجة لإجراء أي تعديل على نواة المضيف كما في KVM، يدعم Xen طريقتين مختلفتين للحوسبة الافتراضية: تدعى الطريقة الأولى الحوسبة شبه الافتراضية Paravirtualization، ليست حوسبة افتراضية كاملة لأنها لا تجري محاكاةً للعتاد الصلب إنما فقط تعديلات على نظم تشغيل الخوادم الافتراضية لتتمكن من التخاطب معه بكفاءة، أما الطريقة الثانية تسمى الحوسبة الافتراضية بمساعدة العتاد الصلب أو HVM فإنها تستخدم ميزات خاصة موجودة في بعض أنواع العتاد الصلب لمحاكاة الخادم الافتراضي بدون أي تعديل على نظام التشغيل. لاقت HVM انتشارًا واسعًا حوالي العام 2006 وخصوصًا مع توفر المعالجات الاستهلاكية عالية الأداء التي سمحت لمعظم الحواسيب المكتبية والمحمولة بتحقيق الأداء نفسه عند تشغيلها أجهزة افتراضية أو حاويات معتمدة على النوى المصغرة مثل حاويات دوكر. ESXi، موجه للمؤسسات، طورته شركة VMware. ميزته الأساسية أنه لا يتطلب وجود نظام تشغيل على المضيف لأن ESXi نفسه يؤدي دور نظام التشغيل، يسمى هذا النوع من المراقبين بالنمط الأول type one، ويعمل بكفاءة عالية بسبب عدم وجود أي برمجية وسيطة بين العتاد الصلب والخوادم الافتراضية. Hyper-V، من أشهر تقنيات الحوسبة الافتراضية المستخدمة مع خوادم ويندوز، تجده بين خدمات النظام في ويندوز سيرفر ومعظم نسخ الويندوز الحديثة، يتوفر أيضًا بوصفه خادمًا مستقلًا يمكنك العمل معه مباشرةً بدون نظام تشغيل آخر. يمكنك قراءة المقال تطبيق Hyper-V في ويندوز 10 المتضمن خطوات إرشادية لتثبيت Hyper-V. لماذا أختار الاستضافة السحابية؟ تتبلور مميزات الحوسبة الافتراضية في بيئات الاستضافة السحابية، فيسهل في هذه البيئات بناء الخوادم الافتراضية، وإعدادها، وتخصيصها بالموارد حسب الطلب، ويمكنك مع مرور الوقت زيادة الموارد المخصصة أو إنقاصها حسب تغيرات عملك، أضف إلى ذلك ما يقدمه لك بعض مضيفي السحابة من توافرية عالية للخدمة، فيعملون على نقل الخادم الافتراضي من مراقب إلى آخر عند الحاجة بأدنى فترة ممكنة من التوقف عن العمل أو حتى دون أي توقف، ويؤمنون في بعض الحالات بديلًا عن الخادم الافتراضي يماثله تمامًا لينوب عنه في حال فشلت إحدى العقد. التخصيص يفضل المطورون غالبًا استخدام الخوادم الافتراضية الخاصة VPS لما توفره لهم من تحكم كامل ببيئتهم الافتراضية. فيحصلون افتراضيًا على حسابات الجذر ذات الصلاحيات الكاملة أو sudo، ليتمكنوا من تثبيت البرامج التي يحتاجونها أو التعديل عليها حسب طلباتهم. تبدأ أريحية التخصيص لديهم من حرية اختيار نظام التشغيل، إذ تقبل معظم برمجيات المراقب تثبيت أي نظام تشغيل على الخادم الضيف بدون قيود، بدءًا من النظم مفتوحة المصدر مثل لينكس و BSD إلى نظم المملوكة مثل ويندوز، وبعد اعتماد نظام التشغيل يستطيع كل مطور تثبيت البرمجيات التي يحتاجها بالتتابع ليصل للبنية الحاسوبية التي يحتاجها على الخادم السحابي، والتي قد تتضمن خادم ويب مثلًا أو قاعدة بيانات أو تطبيقًا جاهزًا للتوزيع أو غير ذلك. التوسعة تتميز الخوادم السحابية بمرونتها وقابليتها للتوسع أفقيًا وعموديًا، وهو أمرٌ تتفوق فيه الاستضافة السحابية على غيرها من الاستضافات، فمعظم الاستضافات الأخرى تقبل التوسعة إما أفقيًا أو عموديًا، ويرجع ذلك إلى البيئة الافتراضية المبني عليها الخادم السحابي، فموارده في نهاية الأمر جزءٌ من مجموعة موارد مادية أوسع بكثير، يمكنك نقلها إلى مراقبين آخرين أو إنشاء تكرارات عنها لديهم حسب الحاجة. التوسع الأفقي، أو scaling out هو زيادة عدد العقد في النظام العنقودي، قد يعني ذلك زيادة عدد خوادم الويب لتحسين إدارة حركة مرور البيانات إلى تطبيقك، أو إضافة خوادم لمناطق معينة لتسريع الاستجابة، أو زيادة عدد العاملين workers في قاعدة البيانات لرفع سرعة نقل البيانات أو غير ذلك. التوسع العمودي، أو scaling up يُقصد به ترقية خادم واحد، وزيادة موارده ليتمتع بمواصفات أعلى، بزيادة الذواكر المخصصة له أو نوى المعالجة المركزية أو غير ذلك، توفر هذه الموارد المحسنة البيئة اللازمة لتشغيل مثيلات البرامج الإضافية بكفاءة على الخادم، على سبيل المثال: إذا وسعت عدد عمال قاعدة البيانات، فإن ترقية الخادم عموديًا تعطيهم الموارد اللازمة للعمل بكفاءة أعلى. بقي التوسع العمودي لفترة طويلة الطريقة السائدة لرفع مواصفات الاستضافة السحابية، ثم تغير الأمر مع تقديم المزودين عروضًا اقتصادية للتوسعة الأفقية. بالنتيجة يستطيع المطورون توسعة استضافاتهم السحابية، إما أفقيًا بزيادة عدد عقد VPS التي يستخدمونها، أو عموديًا ترقية مواصفات الخادم، أو القيام بالأمرين معًا حسب احتياجات عملهم. الخلاصة نأمل أنك أخذت فكرةً جيدة عن آلية عمل الاستضافة السحابية، والعلاقة بين الخوادم الافتراضية والمراقب Hypervisor المسؤول عن إدارتها، وتبينت خصائص الاستضافة السحابية التي تميزها عن غيرها من الاستضافات، لتتمكن من اختيار الاستضافة المناسبة لحالتك. ترجمة -وبتصرف- للمقال An Introduction to Cloud Hosting لصاحبه Josh Barnett. اقرأ أيضًا المقال السابق: نظرة عامة على الحوسبة السحابية مقدمة إلى الخوادم السحابية مفهوم السحابة Cloud كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة
    1 نقطة
  6. تقدم لنا الواجهات الرسومية أو GUI تجربةً بصرية بديهية، وسهلة الاستخدام للتعامل مع الحواسيب والهواتف الذكية، والأجهزة اللوحية، فتجدنا ننتقل بين التطبيقات وصفحات الويب والمستندات والصور بنقرات بسيطة على الأيقونات والقوائم المنسدلة وبقية عناصر سطح المكتب التي توفرها نظم التشغيل المختلفة، مثل: ويندوز وماك ولينكس. وعلى الرغم من سهولة استخدامها من قبل المستخدم العادي إلّا أن واجهات المستخدم الرسومية تبقى قاصرة نوعًا ما عن منحنا التحكم الإداري الكامل بالأجهزة بالكيفية التي نريدها، فقد تمنعنا من عمليات التثبيت أو التعديل أو الحذف لبعض البرامج والميزات والملفات، وهنا يبرز دور واجهة سطر الأوامر. يشار لها بالرمز CLI وهو اختصار command-line interface، ويُعدّ إتقانها والتعود على استخدامها عبر الطرفية Terminal من أهم طرق التنقل بين حاسوبك الشخصي والخوادم السحابية، بغرض الوصول إليها والتحكم بها عن بعد بدون الحاجة للواجهات الرسومية. توجد الواجهات الطرفية (التي تكتب ضمنها الأوامر) في معظم نظم التشغيل الحاسوبية، وتتوفر لها محاكيات خاصة بهيئة تطبيقات تُثبّت على الهواتف الذكية والأجهزة اللوحية. وهي تمنح المستخدمين تحكمًا أكبر بأجهزتهم عبر تعزيز صلاحيات الوصول المتاحة لمدير النظام administrator، وزيادة قدرة المستخدم على تخصيص بيئات العمل، وأتمتة العمليات التي يحتاجها، وإعطائه إمكانية الوصول إلى الأجهزة البعيدة، مثل الخوادم السحابية. إذا كنت من مستخدمي واجهة سطر الأوامر الجدد، فسيعطيك هذا التمهيد فكرةً جيدة عن أساسيات استخدامها عبر الطرفية، وستكون في نهايته قادرًا على تطبيقها مع لينكس وماك، سواء على حاسوبك الشخصي أو على الخوادم. لمعلومات أكثر يمكنك أيضًا الاطلاع على مقال مقدمة إلى طرفية لينكس، ومقال دليل استخدام سطر الأوامر في عملية تطوير الويب من طرف العميل. فهم النافذة الطرفية عندما تستخدم حاسوبًا أو أي هاتف محمول لأول مرة عبر الواجهات الرسومية، ستبدأ رحلة التعرف عليه باستعراض التطبيقات الموجودة، وأماكن توضع الأشياء، لتتمكن من تخصيصه حسب احتياجاتك، والحالة نفسها لاستكشافه مع الطرفية، وهو ما سنتعرف عليه تباعًا ضمن المقال. الطرفية المستخدمة هنا هي طرفية أوبنتو 20.04، إحدى أشهر توزيعات لينكس، المبني أساسًا على يونيكس، فإذا كان نظام التشغيل على حاسوبك هو لينكس أو ماك يمكنك تطبيق الأمثلة الواردة هنا بحرفيتها، فطرفية النظامين مشابهة لطرفية أوبنتو المعتمدة في المقال، وكليهما مبني على يونيكس. وإذا كنت تستخدم ويندوز يمكنك الاستعانة بمقال تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية لتهيئة بيئة لينكس على حاسوبك نفسه. افتح الآن الطرفية على حاسوبك أو استخدام أحد المواقع التي توفر طرفيات تفاعلية للتجربة مثل Glitch.com، وستحصل على نافذة شبيهة بهذه الصورة. لاحظ رمز الدولار $ والمؤشر الوامض هنا ستبدأ الكتابة. تدّل الرموز الموجودة في نهاية محث الأوامر prompt على مستوى مستخدم الطرفية، وفق التالي، وهي تنطبق على معظم نظم التشغيل المعتمدة على يونيكس أو التي تسمى nix*: رمز الدولار $ للمستخدم العادي أي أنك سجلت دخول بحساب مستخدم عادي. رمز المربع# للمستخدم صاحب أعلى الامتيازات. يُعرف المستخدم ذو الرمز # بأنه مستخدم الجذر Root، ويُعدّ مستخدمًا مميزًا أو مدير النظام الافتراضي. ستجد الرمز $ في جميع الأمثلة هنا فقد طبقت بواسطة مستخدم عادي، لكنه يستطيع الحصول على امتيازات الجذر باستعمال الأمر sudo. افتح الطرفية على حاسوبك لنبدأ بالأمثلة العملية. التآلف مع المجلدات الأوامر التي نكتبها في سطر الأوامر هي تعليمات تخبر حاسوبك بما تريد تنفيذه، تكتب الأمر، ثم تضغط على زر ENTER أو RETURN ليبدأ التنفيذ. اكتب مثلًا الأمر التالي في الطرفية، واضغط ENTER: $ pwd نفذ الأمر، وستحصل على الخرج التالي: /home/sammy يرمز الأمر pwd إلى مجلد العمل الحالي، وهو اختصار للعبارة present working directory، ويساعدك على معرفة مكان وجودك الحالي ضمن نظام الملفات أي المجلد الذي تُنفذ منه الأوامر. مجلد العمل الحالي في مثالنا هو home/sammy/، وsammy هو اسم المستخدم، قد يكون أي اسم آخر، فإذا سجلت دخولًا بحساب مستخدم الجذر root صاحب أعلى الامتيازات، فسيكون مجلد العمل الحالي root/، وعلى حاسوبك الشخصي سيسمى المجلد باسم المستخدم الذي تستعمله، غالبًا ما يطلق مالك الحاسوب اسمه على المستخدم فتجد المجلد باسمه أيضًا. مجلد العمل الحالي فارغ الآن، لذا سننشئ ضمنه مجلدًا جديدًا اسمه الملفات أو files مثلًا، نخزن فيه الملفات التي ستطبق عليها أمثلة المقال. تُنشَأ المجلدات بواسطة الأمر mkdir، وهو اختصار لعبارة make directory، ثم نكتب اسم المجلد الذي نود إنشائه بعد الأمر mkdir، يلعب اسم المجلد هنا دور الوسيط، لأنه يمرر القيمة المدخلة إلى الأمر حتى يأخذ بها عند التنفيذ. يشبه الوسيط المفعول به في القواعد النحوية، فهو يمثل ما يتصرف به الفعل أو الأمر البرمجي في حالتنا. اكتب السطر التالي في الطرفية لديك، يبدأ السطر بالأمر mkdir، ويليه الوسيط files وهو اسم المجلد الذي ننشئه: $ mkdir files اضغط Enter ونفذ الأمر، وفور ظهور المؤشر الوامض في السطر التالي سيكون مجلدك الجديد قد أُنشئ، وتكون جاهزًا لكتابة الأوامر التالية، لن تحصل على خرج يخبرك بإتمام عملية الإنشاء، فقط المؤشر الوامض. عرض محتويات المجلدات وفهم صلاحيات العمل عليها سنستخدم الأمر ls المستوحى من كلمة list، لإظهار محتويات مجلد العمل الحالي (حيث أنشأنا مجلدنا الجديد)، يمكنك بهذه الطريقة التثبت من صحة إنشائه بما أنك لم تحصل على خرج صريح يؤكد ذلك. $ ls انظر الخرج، أنه يؤكد وجود المجلد files: files يعطيك هذا الأمر معلومات عامة عن محتويات مجلد العمل الحالي، وتستطيع الحصول على معلومات تفصيلية أكثر باستعمال الرايات Flags. تكتب الرايات في لينكس بشكل شرطة - متبوعة بحرف. تُمرِر الرايات للأمر الأساسي خياراتٍ إضافية أو وسطاء إضافيين. فعلى سبيل المثال يمكنك إضافة الراية l- للأمر السابق ليظهر خرجه بتنسيق قائمة طويلة فيها معلومات مفصلة عن محتويات المجلد. جرب كتابة الأمر مع الراية كما يلي: $ ls -l اضغط زر ENTER للتنفيذ، وستحصل على الخرج الآتي: total 4 drwxr-xr-x 2 sammy sammy 4096 Nov 13 18:06 files يشير السطر الأول من الخرج إلى عدد الكتل blocks المحجوزة للمجلد في ذاكرة الحاسوب، عددها هنا 4، أما السطر الثاني فيتضمن صلاحيات المستخدم على المجلد وبعض التفاصيل الأخرى. يمكنك أيضًا استعمال الراية h- أو human-readable-- لتحصل على خرج أكثر مقروئية، فيظهر الحجم المخصص للمجلد في الذاكرة مقدرًا بالكيلو بايت مثلًا أي بصيغة أسهل للقراءة والفهم، كما هو موضح أدناه. ستلاحظ عند تعاملك مع الرايات: أن الشرطة الوحيدة - تشير إلى راية يُعبر عنها بحرف وحيد، والشرطتان -- إلى الرايات التي تكتب بالكلمات، وتستخدم بعض الرايات الصيغتين فقد تكتب بحرف وحيد أو بالكلمات، يمكنك أيضًا كتابة أمر متعدد الرايات أو متعدد الوسطاء بتجميع رموز عدة رايات معًا مثل lh-. انظر الأمرين أدناه لهما المعنى نفسه تمامًا، لكن كل منهما مكتوب بطريقة: $ ls -lh $ ls -l --human-readable سيعطي كلاهما الخرج نفسه، وهو مشابه لما حصلنا عليه سابقًا مع فارقٍ وحيد، إذ سيظهر الحجم بتنسيق سهل القراءة بسبب الراية الخاصة بالمقروئية: total 4.0K drwxr-xr-x 2 sammy sammy 4.0K Nov 13 18:06 files يبين الخرج السابق مجموعة معلومات عن المجلد، مثل: حجمه في الذاكرة 4K، وصلاحيات المستخدمين عليه وغير ذلك، انظر الجدول التالي للتوضيح: نوع الملف الصلاحيات عدد الوصلات اسم المالك مجموعة العمل حجم الملف تاريخ آخر تعديل اسم الملف d rwxr-xr-x 2 sammy sammy 4.0K Nov 13 18:06 files يتضمن الجدول سطرًا واحدًا فقط، لأننا نملك مجلدًا واحدًا files في مجلد العمل الحالي home/sammy/، ولو كان لدينا عدة مجلدات أو ملفات كنت ستجد سطورًا بعددها. لنوضح الآن الرموز الموجودة في بداية السطر الثاني من الخرج: المحرف الوصف d أي مجلد أو directory، والمجلد في علم الحاسوب هو العنصر التنظيمي الذي يحتوي عدة ملفات، وإذا لم يكن العنصر مجلدًا فستجد شرطة - بدل الحرف d r تعني صلاحية القراءة read، وتسمح للمستخدم بفتح الملف وقراءته، أو باستعراض محتويات المجلد w صلاحية الكتابة write، تتيح تعديل محتويات الملف، وإضافة ملفات إلى المجلد أو حذف بعض من ملفاته أو تغيير أسمائها x صلاحية تنفيذ ملف execute أو تشغيله كبرنامج، ومن جهة المجلدات تعني الصلاحية الدخول إلى المجلد والوصول إلى ملفاته حاول الآن قراءة الخرج السابق مجددًا، فلنبدأ بسلسلة المحارف drwx، يعني المحرف الأول d أن العنصر الموصوف هو مجلد، فلو كان نوعًا آخر، لبدأت السلسلة بالشرطة - بدلًا منه على هذا الشكل rwx-، أما المحارف الثلاثة التالية مخصصة لأذونات مالك المجلد، وتعني أن المالك لديه صلاحيات القراءة والكتابة والتنفيذ على مجلده المجلد files، وإن استبدل أي محرف منها بالشرطة - فسيفقد المالك الصلاحية التي يمثلها هذا المحرف. وتمثل المحارف الثلاثة التي تليها صلاحيات مجموعة العمل، وهي r-x في حالتنا، وتعني أن لدى المستخدمين المنتمين للمجموعة صلاحيات القراءة والتنفيذ على هذا المجلد، لكن لا يمكنهم التعديل عليه أبدًا فلا يملكون صلاحية الكتابة، إذ إن المحرف w مستبدل بالشرطة -. أما المحارف الثلاثة الأخيرة r-x فيقصد بها صلاحيات مجموعات العمل الأخرى على المجلد، وكما ترى تنحصر صلاحياتهم في القراءة والتنفيذ، ولا يملكون صلاحية الكتابة على المجلد. يشير الرقم 2 (الذي يلي سلسلة المحارف) إلى عدد روابط المجلد، تشبه الروابط Links في لينكس الاختصارات التي تسهل على المستخدمين الوصول إلى نظام الملفات. وعند تنشئ أي ملف أو مجلد سيبني له لينكس تلقائيًا رابطين، رابط مطلق، ورابط ذاتي المرجع يتيح الوصول إليه عبر مسار نسبي، سيتضح لك معنى النسبي والمطلق في القسم التالي من المقال. ويمكنك معرفة المزيد عن روابط لينكس بمراجعة المقال دليل المستخدم للروابط في نظام ملفات لينكس. ستجد بعد الرقم 2 كلمة sammy مكررة مرتين، تشير الأولى منها إلى اسم مالك المجلد، وقد تعرفنا على صلاحياته قبل قليل وهيrwx، أما لماذا sammy هو المالك فالسبب أننا أنشأنا المجلد files من حسابه. يفيدك دائمًا معرفة اسم المستخدم مالك الملفات في بيئة العمل الفعلية. وتدّل كلمة sammy الثانية على اسم مجموعة العمل المستفيدة من المجلد files أي التي تملك حق الوصول إليه، وصلاحياتها كما رأينا r-x، يتطابق اسم المستخدم هنا مع اسم مجموعة العمل، لكنه ليس أمرًا إلزاميًا، فستصادف في بيئات العمل الفعلية مجموعات عمل مختلفة، مثل: مجموعة الموظفين العاديين وقد يكون اسمها staff، ومجموعة مدراء النظام باسم admin مثلًا أو غير ذلك. أما بقية المعلومات الموجودة في الخرج فهي: الحجم المخصص للمجلد في الذاكرة، وقدره 4 كيلو بايت، بالإضافة إلى تاريخ آخر تعديل أجري عليه قبل تنفيذ التعليمة. أصبح لدينا الآن أرضية ننطلق منها لقسمنا التالي المتعلق بالتنقل عبر نظام الملفات. التنقل ضمن نظام الملفات تعلمت كيف تحدد موقعك الحالي في نظام الملفات، وكيف تنشئ مجلدًا جديدًا، وتستعرض محتوياته، وتحدد صلاحيات الوصول إليه والتحكم به. سنجرب الآن التنقل بين مجلدات نظام الملفات، أنشأنا المجلد files في المجلد الأساسي للمستخدم sammy وهو home/sammy/، فما طريقة الانتقال من home/sammy/ إلى home/sammy/files/؟ يمكنك الانتقال باستعمال الأمر cd، وهو اختصار للعبارة change directory التي تعني تغيير المجلد، اكتب إذًا السطر التالي في واجهة الطرفية لديك: $ cd files لن تحصل على رسالة أو خرج يؤكد لك صحة تنفيذ الأمر، وأنك في المسار home/sammy/files/، كما هو الحال مع أمر إنشاء المجلد في القسم السابق، ستتلقى فقط المؤشر الوامض، لذا استعمل الأمر pwd لتتأكد من ذلك: $ pwd سيظهر الخرج التالي: /home/sammy/files يؤكد الخرج السابق وجودك في المجلد home/sammy/files/ الذي يقع ضمن مجلد المستخدم home/sammy/، تبدو هذه المسارات المفصولة بالشرطات المائلة مألوفة بالنسبة لك؟ ملاحظتك صحيحة لأنها تشبه عناوين URL لمواقع الويب، فهذه المواقع في نهاية الأمر تتوضع ضمن مجلدات على خوادم الويب. يساعدك الأمر / cd على الوصول إلى المجلد الرئيسي للخادم من أي مكان في نظام الملفات: $ cd / نفذ الآن الأمر التالي لتستعرض محتويات المجلد الرئيسي: $ ls ستحصل على هذا الخرج: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run s sbin srv sys tmp usr var هذه هي محتويات المجلد الرئيسي / لنظام لينكس، ويسمى أيضًا مجلد الجذر، وهو يختلف تمامًا عن مستخدم الجذر الافتراضي root، ويتمتع بأهمية كبيرة في نظام لينكس إذ يتضمن كل المجلدات الضرورية لعمل نظام التشغيل، فعلى سبيل المثال: يحتوي المجلد الفرعي sys على نواة النظام kernel، ومعلومات النظام عن نظام الملفات الافتراضي، يمكنك معرفة المزيد عن محتويات مجلد الجذر بمراجعة توثيقات لينكس الرسمية. لاحظ أن المجلد home/ الخاص بالمستخدمين موجودٌ هنا أيضًا، ويمكنك الانتقال إليه من مجلد الجذر / ثم الانتقال إلى المجلد files، أو استخدام الأمر cd والانتقال إلى files مباشرةً من مجلد الجذر / وفق التالي: $ cd /home/sammy/files نفذ الآن الأمر pwd وستحصل على home/sammy/files/ في الخرج. سنعرض الآن المسارات في لينكس، مسار الملف File Path هو توصيف لمكان وجود الملف أو المجلد على حاسوبك أو على الخادم، المسارات نوعان نسبي ومطلق، النسبي هو الذي يحدد موقع الملف أو المجلد الهدف نسبةً إلى مجلد العمل الحالي، يشبه طريقة انتقالنا إلى داخل المجلد /files عندما كنا في مجلد العمل الحالي home/sammy/. أما المسار المطلق فهو موقع الملف انطلاقًا من مجلد الجذر، كما فعلنا في الأمر أعلاه باستخدام home/sammy/files/، فقد بدأنا بمجلد الجذر /، ثم استدعينا home/sammy/، وبعدها /files الموجود بداخله، إذًأ فالمسار المطلق يبدأ دائمًا بإشارة الجذر /. النقط dot أيضًا هي أسلوب للتنقل عبر المسارات النسبية في لينكس. تشير النقطة الوحيدة . إلى مجلد العمل الحالي، والنقطتان .. إلى المجلد الأب، فمثلًا لو كنت في المجلد home/sammy/files/ يمكنك استخدام النقطتين للوصول إلى المجلد الأب home/sammy/، وفق التالي: $ cd .. يمكنك اختبار صحة التنفيذ باستخدام pwd لعرض مجلد العمل الحالي، ستحصل عندها على home/sammy/، وتستطيع أيضًا تنفيذ ls لعرض المحتويات فسيظهر لك المجلد files. يوجد رمزٌ آخر يفيدك في التنقل هو الرمز ~، ينقلك مباشرةً من أي مكان في نظام الملفات إلى المجلد الأساسي home للمستخدم الذي سجلت دخولًا باسمه، في مثالنا المسخدم هو sammy والمجلد الأساسي له يدعى home/sammy/، على حاسوبك سيكون باسم المستخدم الذي تنفذ الأوامر من حسابه. جرب الأمر التالي على الطرفية لديك، وسيأخذك بنقلة واحدة إلى المجلد الأساسي لمستخدمك: $ cd ~ سنتعلم في القسم التالي كيفية التعامل مع الملفات النصية. إنشاء الملفات النصية وتعديلها تأكد في البداية من وجدوك في المجلد /files، لديك طريقتين للقيام بذلك، إما الاستعلام عن مسار العمل الحالي بواسطة الأمر pwd، أو الانتقال مباشرة إلى المجلد بواسطة مساره المطلق وفق التالي: $ cd /home/sammy/files سننشئ الآن ملفًا نصيًا بلاحقة txt. وهي لاحقة قياسية يقرأها نظام التشغيل بدون أي برامج إضافية كما هو الحال مع ملفات doc. مثلًا. والنصوص المكتوبة ضمن الملفات من نوع txt. هي نصوص غير منسقة، يمكن استخدامها بسهولة داخل نافذة سطر الأوامر، أو عند التعامل مع النصوص برمجيًا، مثل: التحليل الآلي للنص، أو سحب المعلومات من نص معين، أو غير ذلك. سننشئ الملف بكتابة الأمر touch، المخصص لإنشاء الملفات النصية وتعديلها، ثم تمرير اسم الملف النصي بصفته وسيطًا له، وفق التالي: $ touch ocean.txt بمجرد الضغط على زر ENTER ستنتقل لسطر جديد في نافذة سطر الأوامر بدون أي رسالة تؤكد إنشاء الملف النصي، لذا يمكنك استعراض محتويات المجلد /files للتأكد من وجود الملف بداخله. $ ls وسيكون الخرج: ocean.txt أنشأنا إذًا الملف النصي ocean.txt لكنه فارغ، ولو أردنا إنشاء ملف نصي مجهز ببعض الكلمات فسيفيدنا في ذلك الأمر echo المخصص لعرض السلاسل النصية في نافذة سطر أوامر لينكس. يعمل الأمر echo على ترديد ما تكتبه بعده في نافذة سطر الأوامر. لنجرب ذلك بالعبارة المعتادة !Hello, World: $ echo Hello, World! وهذا هو الخرج: Hello, World! يأتي اسم echo أو الصدى من إيكو حورية الجبل التي تردد ما يقال لها فقط دون أي قدرة على حديث نابع من نفسها، حسب الأسطورة اليونانية القديمة في كتاب التحولات لأوفيد، والأمر echo هنا يكرر ما يكتب بعده فقط دون اجتهاد، وفي مثالنا أظهر العبارة !Hello, World كما هي في نافذة سطر الأوامر. أما لو رغبت باستخدامه لتخزين هذه العبارة أو غيرها في ملف نصي ما، فيتعين عليك كتابته بهذه الطريقة: $ echo "Sammy the Shark" > sammy.txt يبدأ السطر السابق بالأمر echo، يليه العبارة النصية التي نريد كتابتها في الملف، وبعده سهم إعادة التوجيه <، ثم اسم الملف النصي الجديد sammy.txt. تفحص الآن وجود الملف sammy.txt بواسطة الأمر ls وفق التالي: $ ls وسيكون الخرج: ocean.txt sammy.txt يظهر الخرج السابق وجود ملفين في المجلد home/sammy/files/، يمكنك استعراض الملف sammy.txt للتأكد من وجود العبارة النصية التي خزنتها فيه، وذلك باستخدام الأمر cat، وهو من أشهر أوامر لينكس، ويستعمل لعرض مضمون الملفات النصية ووظائف أخرى تتعلق بها: $ cat sammy.txt نفذ الأمر وستحصل على الخرج التالي: Sammy the Shark جرب استخدام cat مع الملف ocean.txt، لن تحصل على شيء لأنه فارغ من أي محتوى، أضف إليه أي عبارة تريدها بواسطة الأمر echo كما شرحنا سابقًا، سنضيف مثلًا اقتباسًا شهيرًا للكاتبة زورا نيل هيرستون، انظر للأمر التالي: $ echo "Some people could look at a mud puddle and see an ocean with ships." > ocean.txt استخدم cat معه مجددًا ولاحظ الفرق في الخرج: Some people could look at a mud puddle and see an ocean with ships. سنتعرف الآن على طريقة تعديل محتوى الملف النصي، ستحتاج لهذا العمل محرر نصوص يعمل مع سطر الأوامر، الخيارات متنوعة أبرزها: vim و Emacs و nano. سنستخدم هنا nano. يمكنك استدعائه بالأمر nano وتمرير اسم الملف الذي تريده تعديله بصفته وسيطًا له، انظر التالي: $ nano sammy.txt سيفتح الآن الملف sammy.txt، وتجد فيه المحتوى التالي: Sammy the Shark حرك المؤشرة باستعمال أسهم لوحة المفاتيح لتصل إلى نهاية العبارة الموجودة في الملف، واكتب ما تريده بعدها. لنفترض أنك أضفت التعديلات التالية إلى الملف: Sammy the Shark Hello, I am Sammy. I am studying computer science. Nice to meet you! حان الآن موعد الحفظ، فكيف تحفظ التعديلات؟ لاحظ الكلمات الموجودة في أسفل النافذة الطرفية لديك، تبدو مثل هذا: ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell هي تشرح نفسها نوعًا ما، فبجانب كل رمز كلمة توضح وظيفته. أو ما ينبغي معرفته أن الرمز ^ يشير لزر CTRL أو Control على لوحة المفاتيح. وما دام أننا أنهينا التعديلات سنضغط CTRL مع حرف X معًا لنحصل على مفعول Exit، ونغلق الملف، وانتبه لكتابة الحرف x حرف صغير أي بدون استخدام الزر Shift. CTRL x ستجدها في التوثيقات مكتوبة بصيغة CTRL + X أو Ctrl+x، وهي تعني الضغط على الزرين في الوقت نفسه. اضغط الزرين الآن، وستحصل مباشرةً على الرسالة التالية: Save modified buffer? Y Yes N No ^C Cancel اضغط الزر Y لحفظ التغييرات. Y وسيؤكد لك النظام عملية الحفظ بإظهار الخرج التالي: File Name to Write: sammy.txt تتضمن الرسالة خيارات إضافية مثل الضغط على CTRL + C للإلغاء، لكن إذا كنت واثقًا من رغبتك بالخروج من الملف اضغط على ENTER لحفظ التغييرات على الملف والخروج منه. لنفترض على سبيل المثال أنك تريد إنشاء عدد من الملفات النصية لطلبة أكاديمية حسوب، ملف لكل طالب، وسامي sammy هو أحد الطلاب، ستنشئ في البداية مجلدًا جديدًا يدعى الطلاب students مثلًا ضمن المجلد /files، ثم تنقل الملف sammy.txt إليه. أولًا تعليمة إنشاء المجلد: $ mkdir students والآن تعليمة النقل بواسطة الأمر mv (المستوحى من كلمة move)، يأخذ هذا الأمر وسيطين، الوسيط الأول هو الملف المراد نقله، والوسيط الثاني هو موقعه الجديد، انظر التعليمتين التاليتين فلهما النتيجة نفسها: $ mv sammy.txt students $ mv sammy.txt students/sammy.txt تعمل mv في التعليمة الأولى على نقل الملف مع الحفاظ على اسمه، أما في الثانية فيمكنك تغيير اسم الملف عند نقله إذا رغبت بذلك، تستطيع مثلًا كتابتها على الشكل التالي: mv sammy.txt students/sammy-the-shark.txt إذا استعرضت محتويات المجلد /files باستخدام الأمر ls، ستجد ضمنه الملف ocean.txt، والمجلد الجديد students، انتقل إلى المجلد /students، وفق الآتي: $ cd students أنت الآن ضمن المجلد /students، فلنفترض أنك تحتاج لاستخدام الملف sammy.txt على أنه قالب يسهل عليك إنشاء ملفات بقية الطلاب، فأول ما يتبادر إلى ذهنك هو نسخ الملف sammy.txt إلى عدة نسخ ثم التعديل عليها حسب بيانات كل طالب، تجري عملية النسخ باستخدام الأمرcp وهو اختصار لكلمة copy. وعلى غرار mv فإنه يأخذ وسيطين، الوسيط الأول اسم الملف الأصلي أي المطلوب نسخه، والوسيط الثاني اسم الملف الجديد، انظر التعليمة التالية لإنشاء نسخة من ملف الطالب سامي sammy.txt وتسميتها باسم جديد لتمثل طالب آخر أليكس alex.txt مثلًا: $ cp sammy.txt alex.txt افتح الآن الملف alex.txt باستخدام محرر النصوص، ستجد محتواه مطابق تمامًا لمحتوى الملف sammy.txt، عدّل البيانات التي تحتاج لتعديلها، ليصبح مثلًا كما هو مبين أدناه، ونود لفت انتباهك إلى قدرتك على حذف سطر كامل من الملف بخطوة واحدة، عبر الضغط على CTRL + K معًا: Alex the Leafy Seadragon Hello, I am Alex. I am studying oceanography. Nice to meet you! أغلق الملف الجديد الآن واحفظ التغييرات، بالضغط على CTRL + x ثم Y ثم ENTER. حاول إنشاء ملفات نصية أخرى للتدريب، وعندما تصبح جاهزًا انتقل معنا للقسم التالي لنتعرف على أوامر ومميزات جديدة. الإكمال التلقائي وسجل الأوامر المحفوظة توفر معظم واجهات سطر الأوامر مميزات، مثل: الإكمال التلقائي للأوامر، وإعادة استخدام الأوامر السابقة، تسهل عمل المستخدمين عليها، وتسرّع وتيرته. جرب بنفسك، حاول مثلًا كتابة الأمر cat مع الأحرف الأولى من أحد الملفات التي عملنا عليها نحو cat sa قبل أن تكمل اسم الملف sammy.txt بالكامل، اضغط على زر TAB من لوحة المفاتيح ولاحظ ميزة الإكمال التلقائي، فالطرفية ستكمل اسم الملف تلقائيًا وتظهره لك دون أن تكمل أنت كتابته، كما هو مبين أدناه: $ cat sammy.txt والآن إذا ضغطت ENTER ستنفذ التعليمة بطريقة طبيعية، ويظهر محتوى الملف النصي. حاول بعدها الضغط على السهم الأعلى UP من أسهم التمرير في لوحة المفاتيح، وشاهد ما سيظهر، ستجد أن الطرفية تعرض عليك آخر أمر نفذته، اضغط السهم UP بوتيرة أسرع وسترى الأوامر التي نفذتها مؤخرًا، يمكنك بذلك الوصول إلى الأمر الذي تريد إعادة تنفيذه دون كتابته من جديد. تستطيع أيضًا استعراض كافة الأوامر المستخدمة سابقًا في هذه الجلسة، باستخدام الأمر history: $ history ستحصل في الخرج على سجل يتضمن جميع الأوامر المحفوظة، مثل التالي: 1 pwd 2 mkdir files 3 ls 4 ls -l ... تفيدك هذه الاختصارات في رفع إنتاجيتك عند العمل مع واجهة سطر الأوامر. العمل مع الملفات عبر الويب تتيح لك واجهة سطر الأوامر، الموجودة على حاسوب متصل بالإنترنت، الوصول إلى جميع الموارد المتاحة على الويب، يمكنك مثلًا: الاتصال بخادم سحابي عن طريقها إذا كنت تعرف بيانات الاعتماد الخاصة به، أو إدارة البنية التحتية السحابية لشركتك، أو القيام بأنشطتك الخاصة بتطوير تطبيقات الويب أو غير ذلك. وما دام أنك تعلمت طريقة التعامل مع الملفات النصية، فستكون خطوتنا الأولى التعرف على كيفية سحب ملف نصي من الويب ليكون متاحًا على حاسوبك الشخصي. انتقل للمجلد /files: $ cd /home/sammy/files سنستخدم الآن الأمر crul، والذي يرمز إلى client URL، لجلب البيانات من الويب إلى طرفيتك. رفعنا -يقول كاتب المقال- ملف نصيًا لغرض التجربة يتضمن مقطعًا قصيرًا من رواية على خادم سحابي، وسنستخدم عنوان URL الخاص به في تعليمة crul التالية: $ curl https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt ما إن تضغط على زر ENTER ستتلقى محتوى الملف النصي في واجهة الطرفية، وهو في حالتنا مقطعًا من رواية، وفق التالي: "You like the sea, Captain?" "Yes; I love it! The sea is everything. It covers seven tenths of the terrestrial globe. ... "Captain Nemo," said I to my host, who had just thrown himself on one of the divans, "this is a library which would do honor to more than one of the continental palaces, and I am absolutely astounded when I consider that it can follow you to the bottom of the seas." ظهر محتوى الملف النصي على واجهتك الطرفية، لكنه في الواقع لم يخزن على حاسوبك المحلي حتى الآن، يمكنك التأكد من ذلك بواسطة الأمر ls، فما طريقة تخزينه إذًا؟ الحل هو استخدام الخيار أو الراية O- مع الأمر curl، وعندها سيُخَزَّن الملف محليًا باسم الملف البعيد نفسه. $ curl -O https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt وستحصل على رسالة في واجهة الطرفية، تخبرك بنجاح عملية التنزيل، تشبه صيغتها التالي: % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2671 100 2671 0 0 68487 0 --:--:-- --:--:-- --:--:-- 68487 يمكنك أيضًا تنزيل الملف من الويب وحفظه على الحاسب باسم مختلف عن اسمه الأصلي، بالاسم jules.txt مثلًا، وذلك بتمرير الاسم الجديد بصفة وسيط إضافي للأمر crul مع الخيار o-، وفق التالي: $ curl -o jules.txt https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt تستطيع الآن عرض الملف بواسطة cat، أو تحرير عبر nano. يفيدك أيضًا مراجعة المقال دليل استخدام سطر الأوامر في عملية تطوير الويب من طرف العميل لمزيد من الأمثلة من المعلومات المفيدة. يتناول القسم الأخير من المقال طرق حذف الملفات وإنهاء تنفيذ الأوامر. حذف الملفات وإنهاء تنفيذ الأوامر ستتعرض بالتأكيد لحالات تحتاج فيها لحذف ملف أو مجلد، أو لإنهاء تنفيذ أمر معين، أو الخروج من تطبيق تستخدمه، سنتعلم ذلك. بالعودة إلى مثال طلاب الأكاديمية، فلنفترض أنك تحتاج لحذف ملفات بعض الطلاب لأنهم تخرجوا مثلًا. تأكد أولًا من وجودك في المجلد /students، يمكنك تنفيذ الأمر التالي للانتقال إليه: $ cd /home/sammy/files/students نفذ الآن الأمر ls لاستعراض محتويات المجلد، وبما أننا أنشأنا عددًا من الملفات مسبقًا، فستحصل على الخرج التالي: alex.txt drew.txt jamie.txt jesse.txt sammy.txt taylor.txt يمكنك حذف الملفات المفردة من مجلد الطلاب /students باستخدام الأمر rm. لنحذف مثلًا الملف sammy.txt وفق الآتي: $ rm sammy.txt استعرض مجددًا محتويات المجلد باستخدام ls، ولاحظ عدم وجود الملف sammy.txt بينها: alex.txt drew.txt jamie.txt jesse.txt taylor.txt إذا رغبت بحذف المجلد /students كاملًا مع كافة محتوياته، فستحتاج للأمر rmdir الذي يختصر العبارة remove directory. انتقل في البداية إلى المجلد الأب files ونفذ أمر حذف المجلد /students من هناك، فلا يمكنك حذف أي مجلد طالما أنك تعمل ضمنه. $ cd .. نحن الآن في المجلد /home/sammy/files/، وحاول حذف مجلد الطلاب students من هنا باستخدام rmdir، وفق التالي: $ rmdir students وستحصل على رسالة الخطأ التالية في الخرج: rmdir: failed to remove 'students': Directory not empty تفيد الرسالة بعدم إمكانية حذف المجلد لأنه غير فارغ، يمكنك بالتأكيد معالجة الموضوع بحذف الملفات الفردية من المجلد students واحدًا تلو الآخر، ثم حذف المجلد، لكنها ليست بالطريقة الأمثل وخاصة إذا كان عدد الملفات كبير. بالمناسبة يمكنك إنشاء مجلد فارغ ومحاولة حذفه باستخدام الأمر rmdir والتأكد من فعاليته مع المجلدات الفارغة. أما حذف المجلدات الممتلئة، فيتطلب استخدام الأمر rm مع الراية أو الخيار r-، ترمز هذه الراية إلى الكلمة الإنكليزية recursion أو العودية التي تصف الدوال أو العمليات الحاسوبية التي تستدعي نفسها ذاتيًا مرارًا وتكرارًا، فبالتالي عند استخدامها مع أمر الحذف سيُحذَف العنصر مع كل محتوياته. اكتب إذًا الأمر التالي، ومرر اسم المجلد students بعد أمر الحذف: $ rm -r students تأكد من صحة حذف المجلد /students مع جميع ملفاته، بتنفيذ الأمر ls. أنهيت أعمالك في الطرفية سواء كنت تعمل على حاسوبك الشخصي أو تتصل بخادم بعيد وتريد الخروج منها؟ اكتب إذًا الأمر exit وفي حال كنت متيقنًا من كل شيء اضغط على زر ENTER، فمجرد مغادرتك لجلسة العمل لن تتمكن من استعادتها مجددًا. $ exit ستحصل على الخرج التالي بعد الضغط على زر إنتر، ليؤكد لك إنتهاء جلسة العمل وخروجك منها. Session ended الخلاصة قدم المقال بداية تعريفية لكل راغب ببدء العمل مع الواجهة الطرفية وسطر الأوامر، سواء لإدارة الحواسيب أو الخوادم السحابية البعيدة. يوجد العديد من المقالات المفيدة في هذا المجال على أكاديمية حسوب، استعرض قسم لينكس وقسم الحوسبة السحابية، واقرأ ما يناسبك منها. ترجمة -وبتصرف- للمقال A Linux Command Line Primer لصاحبته Lisa Tagliaferri. اقرأ أيضًا ما هو سطر الأوامر؟ مرجع إلى أشهر أوامر لينكس التعامل مع واجهة سطر الأوامر (CLI) في PHP إعداد البيئة وواجهة سطر الأوامر في بايثون
    1 نقطة
  7. يتطور مع الوقت مفهومنا لتوزيع المسؤوليات بين أعضاء الفرق المسؤولة عن تطوير المنتجات الرقمية، فسواءً كنت مبرمجًا أو مدير أنظمة قد تستفيد من تطبيق ممارسات DevOps أي إدارة العمليات Development Operations) لتحسين المنتج النهائي ولتطوير طريقة عملك ورفع الإنتاجية. في هذا المدخل الشامل ستتعرف المبادئ الأساسية لممارسات DevOps وخارطة الطريق لتعلم DevOps هذا المجال الشيق واحترافه. ما هو DevOps؟ كلمة DevOps هي اختصار لكلمتي التطوير Development، والعمليات Operations وتشير إلى الممارسات التي تهدف لدعم تطوير وتشغيل المنتجات الرقمية بمختلف أنواعها، سواءً لتسريع عملية التطوير أو لرفع جودة المنتج وصولًا لتسهيل عملية تشغيله ونشره وتوصيله للمستخدمين ثم مراقبة أدائه الفعلي وعمله، حيث كانت هذه الأعمال والمسؤوليات سابقًا موزعة على فريقين منفصلين -سنتعرف عليهما في الفقرة التالية- ما أثر على كفاءة عمل هذه الفرق وخلق مشاكل سنتعرف عليها في الفقرات القادمة. قد تتساءل، ما هي وظيفة DevOps ومن هما فريق التطوير وفريق العمليات؟ هدف DevOps الأساسي مساعدة من يتبنى تلك العمليات على رفع السرعة والكفاءة والإنتاجية في تطوير التطبيقات وبرمجتها، ففي السابق كانت تلك العمليات التي يتضمنها DevOps موزعة بين فريقين، وهما فريق التطوير المسؤول عن كتابة شيفرة البرنامج وتطويره والمحافظة على جودة الشيفرة المصدرية له، وينتهي دور الفريق عند ذلك، والفريق الآخر هو فريق العمليات المسؤول عن استلام النسخة الجديدة من البرنامج من فريق التطوير ونشرها وضبطها ضمن بيئة الإنتاج، سواء بربط وتوفير الوصول للخدمات الخارجية التي يعتمد عليها البرنامج، وحتى إعداد البرنامج نفسه في تلك البيئة وتشغيله، ووصولًا مراقبة عمل البرنامج خلال مرحلة الإنتاج والحفاظ على الأداء ومستوى الوصول العالي للبرنامج، ثم إعلام فريق التطوير بأي مشاكل تحدث أثناء التشغيل تتطلب التطوير على البرنامج لإطلاق نسخة جديدة منه. تركز مهام DevOps على زيادة التعاون بين هذين الفريقين بما يخدم كل منهما ويؤدي بالنهاية لرفع جودة وكفاءة البرنامج النهائي، أي إلغاء الفصل التام السابق بين مهام الفريقين ليتشارك كلاهما ببعض المسؤوليات والمعلومات التي تُحسّن تصميم التطبيق وإطلاقه وترفع كفاءته خدمةً للمنتج النهائي، ويمكنك التعرف على المراحل التي يمر بها المطور لتبنّي ممارسات DevOps من مقال رحلة المطور عبر DevOps. لماذا أتعلم DevOps؟ بعد أن ينتهي فريق التطوير من تحضير نسخة جديدة من المنتج الرقمي تنتهي مسؤوليته هنا، وتمرر النسخة الجديدة إلى فريق العمليات الذي يباشر بتحضير ما يلزم لنشرها للمستخدمين، لكن ماذا لو اكتشف فريق العمليات أثناء ذلك مشكلة في تلك النسخة؟ ففي هذه الحال يجب إخبار فريق التطوير بذلك كي يعدلوا على النسخة. عملية استلام النسخة ومحاولة نشرها واكتشاف الخطأ ثم إخبار فريق التطوير به تأخذ وقتًا وتحتاج لتواصل فعال لتوضيح المشكلة لكلا الفريقين، لذا يبدو أن هناك عملًا مشتركًا بين الفريقين، يبدأ منذ انتهاء تطوير نسخة جديدة من المنتج الرقمي وصولًا لنشرها ومراقبة عملها، هنا تأتي ممارسات DevOps المختلفة والتي لها علاقة بالتعاون بين المطور والمسؤول عن تشغيل المنتج، فتزيد من سرعة توصيل المنتج وترفع من جودته، كما تساعد كلا الفريقين في زيادة الإنتاجية عبر أتمتة الكثير من أعمال تسليم النسخة الجديدة من المنتج وفحصها واكتشاف الأخطاء مبكرًا وصولًا إلى نشرها، وذلك بإزالة الحاجز الذي كان موجود مسبقًا بين المطور ومسؤول العمليات. وللاطلاع أكثر على أهداف DevOps يمكنك قراءة مقال ما هي الغاية من DevOps؟. تعلم DevOps: الأساسيات سواء كنت ضمن فريق المطورين أو العمليات وتتبع ممارسات DevOps هناك بعض الأساسيات الواجب على كلا الفريقين الاطلاع عليها وتعلمها لزيادة سهولة التعاون والتواصل مع الفريق الآخر ومناقشة حلول المشكلات، يمكنك التعرف أكثر على استراتيجية DevOps من مقال ما المقصود بـ DevOps؟، والاطلاع على نموذج التفكير الذي ولّد تلك الممارسات على من مقال محاكاة عقلية DevOps. انضم لاحقًا مفهوم الأمان Security إلى ممارسات DevOps ليصبح مجموع تلك الممارسات مجتمعة تُعرف باسم DevSecOps (اختصارًا لعبارة Development Security Operations)، فبدلًا من النظر إلى نواحي الأمان للتطبيق كمرحلة أخيرة دُمج ذلك المفهوم منذ بداية عملية التطوير، كالاهتمام بطرق الاستيثاق من مستخدمي البرنامج أو تشفير البيانات المُخزنة وضمان تواصل البرنامج بقنوات مشُفرة مع الخدمات الأخرى لحماية البيانات المرسلة وغيرها من الممارسات التي يمكنك القراءة عنها وعن المفهوم بشكل عام من سلسلة مقالات تعرف على devopssec والبدء بالمقال ما هي DevSecOps؟. البنية التحتية البنية التحتية infrastructure هي مجموع المكونات الفيزيائية والافتراضية التي تدعم تطوير ونشر وعمل التطبيقات البرمجية، وتتألف المكونات الفيزيائية من الخوادم التي سنتعرف عليها في الفقرة التالية، وأجهزة التشبيك وأجهزة تخزين البيانات وكل الأجهزة الفيزيائية الداخلة في عمل التطبيقات البرمجية، والمكونات الافتراضية هي البرمجيات التي يتعامل معها التطبيق أو يعتمد عليها، لذا فالبنية التحتية هي جزء أساسي من ممارسات DevOps، فهي تخدم عملية التطوير والنشر والتوسيع للتطبيق. أساسيات الشبكات نحتاج لربط الحواسيب والأجهزة مع بعضها سواء لمشاركة البيانات أو للاستفادة من خدمات الأجهزة الأخرى، ويتم ذلك بربطها بشبكة معًا، لذا اطلاعك على أساسيات عمل شبكات الحاسوب لك كمطور عندما تطور برنامجًا يقدم خدمة أو يستفيد من خدمات أخرى عبر الشبكة، وأساسي إذا كنت ضمن فريق العمليات حيث تعتمد مهامك على إدارة الشبكة بين الخدمات وتوفير الوصول إليها وتطوير تصميم الشبكة لخدمة عمل البرنامج. يوجد عدة أنواع من الشبكات سواء من ناحية مكان تلك الأجهزة كالشبكات المحلية LAN أو الواسعة WAN كشبكة الانترنت، كما يوجد العديد من التجهيزات الخاصة بالوصل بين الأجهزة كالمبدلات Switches والموجّهات Routers، وطريقة الوصول للأجهزة عبر الشبكة تتبع عدة بروتوكولات أشهرها بروتوكول IP (اختصارًا لبروتوكول الإنترنت Internet Protocol) والذي يحدد عنوانًا مميزًا لكل جهاز على الشبكة يمكن الأجهزة من التخاطب فيما بينها، ويمكنك التعرف على أساسيات أخرى والقراءة أكثر عن الأفكار المذكورة في مجال شبكات الحاسوب من سلسلة مقالات أساسيات الشبكات. أساسيات الخوادم الخوادم servers هي كل جهاز أو برنامج يقدم خدمة لعميل، وما يميزه هو القدرة على الاستجابة لكمية مرتفعة من الطلبات، مما يتطلب توفر الموارد الكافية للخادم لأداء عمله كسعة ذاكرة كبيرة او معالج قوي، وسواء كنت مطورًا أو تعمل خصوصًا ضمن فريق العمليات ستحتاج للتعامل مع تلك الخوادم وإعدادها وفهم متطلباتها وطرق التعامل معها، بدءًا من إعداد نظام التشغيل على جهاز الخادم مرورًا بضبط إعداداته لاستضافة الخدمة كتوصيلها بالشبكة وتشغيلها. عملت أكاديمية حسوب على ترجمة أفضل مرجع لتعلم الخوادم وإدارتها وهو كتاب دليل إدارة خوادم أوبنتو. قد تحتاج في هذه النقطة إلى تعلم نظام التشغيل لينكس والتعامل مع سطر الأوامر فيه إن لم تكن تستعمله من قبل لأنه النظام الشائع والأكثر انتشارًا في إدارة الخوادم وتعلمه أساسي لكل من يريد تعلم DevOps ودخول المجال، وهو ما سنذكره في القسم الآتي. وظيفة الخوادم تعتمد معظم البرامج المطورة على التكامل مع خدمات أخرى خارجية لإتمام عملها، فمثلًا تحتاج البرامج لتخزين البيانات واسترجاعها فتعتمد على خادم تخزين قواعد البيانات، أو يعتمد على خادم الويب لإدارة الوصول إليه عبر الويب، والعديد من أنواع الخدمات الأخرى التي يختص بها كل خادم على حدى وسنتعرف على بعض أنواعها في الفقرات التالية. لغات البرمجة في الخوادم تقتصر عملية تنفيذ الأوامر يدويًا ضمن الخادم على المهام البسيطة والتي تُنفذ لمرة واحدة عادةً، لكن أتمتة العمليات على الخادم تتطلب كتابة برامج تعيد تنفيذ المهام المتكررة، ومن تلك اللغات باش Bash وبايثون Python وروبي Ruby وغو Go وغيرها من اللغات والتي يمكنك التعرف عليها وعلى وظيفتها ضمن الخادم من مقال أفضل 5 لغات برمجة لـ DevOps. خوادم الويب يختص خادم الويب بإدارة الوصول للملفات أو التطبيقات على الخادم من قبل العملاء، فهو المسؤول عن تحديد الملف مثلًا الذي يطلبه العميل وإرسال إليه، أو تحديد تطبيق الويب الذي يحاول العميل طلبه وتنفيذه وإرسال النتيجة للعميل، حيث يتم التواصل بين خادم الويب والعميل الذي يطلب تلك الخدمة عبر البروتوكول الشهير HTTP، ومن أشهر استخدامات خادم الويب هو استضافة تطبيقات ومواقع الويب، ومن أشهر خوادم الويب هما خادم أباتشي Apache وإنجن إكس Nginx، ويمكنك الاطلاع أكثر على خادم الويب واستخداماته من مقال مدخل إلى خادم الويب. خوادم قواعد البيانات يختص خادم قواعد البيانات في إدارة تخزين واسترداد البيانات التي تحتاجها التطبيقات الأخرى، فيركز على سرعة وسهولة جلب تلك البيانات بكفاءة عالية وتوفير مزايا للاستعلام ودمج وتنفيذ الحسابات لاستخلاص المعلومات التي يحتاجها التطبيق، فمثلًا ضمن تطبيق ويب للتسوق يتم تخزين بيانات المنتجات وأسعارها وبيانات الطلبات ضمن خادم قاعدة البيانات، وعندما يحتاج تطبيق الويب لجلب أي معلومة ما يسأل خادم قاعدة البيانات عنها، ومن أشهر الخوادم هي MySQL و MongoDB و Postgres، ويمكنك التعرف أكثر على قواعد البيانات من مقال التعامل مع قواعد البيانات. أنواع خوادم أخرى: SSH و Mail و Reverse Proxy إن أردت تعلم DevOps فستحتاج إلى التعامل مع العديد من الخوادم الأخرى، أشهرها خادم SSH والتي تسمح لك بالدخول إلى سطر الأوامر لخادم بطريقة آمنة ويمكنك التعرف عليه أكثر من مقال العمل مع خواديم SSH: العملاء والمفاتيح، وقد يحتاج تطبيقك لإرسال البريد الإلكتروني حيث تفوّض خادم إرسال البريد الإلكتروني Mail Server بتلك العملية، وقد تحتاج أحيانًا لتوزيع الطلبات القادمة إلى خادم معين على عدة خوادم من نفس النوع لتخفيف الحمل عليها، هنا يأتي دور خادم الوكيل العكسي Revese Proxy Server لإدارة التواصل بين العميل وعدة خوادم أخرى، ومن أشهر الخوادم لذلك هي Apache و Nginx. نظام تشغيل لينكس أنظمة التشغيل هي برامج تدير العتاد والبرامج الأخرى التي تعمل على جهاز الحاسوب، لذا واحدة من المهارات الأساسية لك كمطور أو عضو في فريق العمليات DevOps هي التعرف على مكونات نظام التشغيل وطرق التعامل معه لإدارة البرامج وعملها سواء أثناء تطوير البرنامج أو في بيئة الإنتاج، ومن أشهر أنظمة التشغيل نظام لينكس Linux وهو نظام تشغيل مفتوح المصدر يستخدم في معظم الأجهزة والخوادم وحتى حواسب سطح المكتب، ويتوفر منه عدة نسخ يتم تخصيصها لفئة مختلفة من المستخدمين تسمى توزيعات Distributions، لذا فمن المهم التعرف على نظام التشغيل لينكس، ويمكنك البدء بالتعرف على مكوناته وأشهر التوزيعات وطريقة تثبيته من مقال ما هو نظام التشغيل لينكس؟. ويمكنك دومًا الرجوع إلى قسم لينكس ففيه عشرات المقالات المفيدة والذي خصصناه لمن يريد تعلم DevOps بادئ الأمر، وننصح أيضًا بكتاب سطر أوامر لينكس. أساسيات سطر الأوامر يمكنك التخاطب مع أنظمة التشغيل والبرامج عبر الواجهة الرسومية GUI لتشغيل البرامج وضبط الإعدادات وغيرها، لكن هذه الواجهة موجهة للمستخدمين العاديين، لذا دورك كمطور أو عضو من فريق العمليات في DevOps يفرض التعامل مع نظام التشغيل والبرامج لتنفيذ مهام متقدمة لا يمكن أو من الصعب تنفيذها باستخدام الواجهة الرسومية، وهذا هو دور سطر الأوامر وهو استقبال الأوامر من المستخدم وتنفيذها، سواء كانت تلك الأوامر موجهة لنظام التشغيل أو لتنفيذ وضبط برنامج معين يوفر سطر الأوامر مزايا تزيد من كفاءة وقدرة العمليات الممكن تنفيذها. يمكنك من سطر الأوامر تنفيذ البرامج وتمرير المعاملات لها وربط نواتج تنفيذها مع بعضها لتنفيذ مهمة أعقد، ويمكنك من سطر الأوامر إدارة نظام التشغيل نفسه وضبطه، وإدارة الملفات والمجلدات، فقد تحتاج لتنفيذ تلك العمليات بنفسك يدويًا عبر سطر الأوامر، خصوصًا عند إدارة الخوادم فغالبًا لا توفر معظم الخوادم واجهة رسومية فهي موجهة للمختصين فقط كفريق DevOps من مطورين وأفراد عمليات، ويمكنك التعرف على أساسيات سطر الأوامر وأنواعه المختلفة ضمن أنظمة التشغيل من مقال مدخل إلى طرفية لينكس ومقال ما هو سطر الأوامر ؟. تعلم DevOps: التعمق في المجال تطرقنا في القسم السابق المواضيع الأساسية التي يجب على كل مهندس DevOps تعلمها حتى الاحتراف فهي من بدهيات المجال، وسنتطرق في القسم التالي إلى المواضيع الاختصاصية المتقدمة التي ينتقل إليها من يريد تعلم DevOps بعد تعلم الأساسيات وبذلك يطلق عليه مختص DevOps أو مهندس DevOps خبير. الخوادم الافتراضية Virtual Servers والحاويات Containers بدلًا من تخصيص جهاز فيزيائي مخصص لكل خادم نحتاجه، أو لكل نوع نظام تشغيل مختلف نريد تثبيته يمكننا تقسيم الجهاز الواحد إلى عدة أجهزة افتراضية نتعامل معها كما لو كانت أجهزة حقيقية منفصلة بمواردها وأنظمة تشغيلها وبيئتها، لتسهل بذلك عملية نشر البرمجيات أو إعداد البيئة لكل خدمة أو مهمة نريد تنفيذها ضمن ممارسات DevOps، ويوجد العديد من التقنيات والطرق لتقسيم موارد الجهاز وعزلها عن بعضها سنتعرف على كل منها في الفقرات التالية. الحوسبة الافتراضية VM يعتمد مبدأ الحوسبة اعتمادًا على الأجهزة الافتراضية Virtual Machine على تقسيم جهاز الحاسوب بتوزيع العتاد بين الأجهزة الافتراضية، حيث يملك كل خادم افتراضي نظام التشغيل الكامل الخاص به وجزء مخصص له من العتاد Hardware. الخوادم الافتراضية VPS الخادم الافتراضي الخاص VPS (اختصارًا للعبارة Virtual Private Server) هو بيئة افتراضية معزولة خاصة على جهاز فيزيائي معين، ليبدو كأنه خادم منفصل معزول ببيئة وعتاد خاص، بينما قد تتشارك عدة خوادم افتراضية الجهاز نفسه، يفيد ذلك في تقسيم الجهاز الواحد إلى عدة أجهزة منعزلة لاستضافة الخدمات المختلفة أو لتوزيعها على مستخدمين مختلفين. الحاويات containers الحاويات هي طريقة لتحديد البيئة ونظام التشغيل والاعتماديات التي يحتاجها برنامج ما بمعزل عن نظام التشغيل الأساسي، وهي تقنية أخف وأصغر وأسهل بالتعامل معها من الأجهزة الافتراضية VM، حيث أنها تعمل فوق نظام التشغيل الواحد وتتشارك العتاد فيما بينها ولا يتم حجز عتاد مخصص لها، ما يقلل حجمها ويزيد من سرعة تشغيلها، وتعتبر الحاويات جزء مهم في ممارسات DevOps سواء لفريق التطوير لبناء بيئات مختلفة معزولة لاختبار عمل التطبيقات أو لفريق العمليات لنشر تلك الحاويات وإدارتها وتوسيعها، ويمكنك التعرف عليها أكثر من مقال أبرز المفاهيم التي يجب عليك الإلمام بها عن الحاويات. دوكر Docker دوكر Docker هي منصة لإنشاء وإدارة وتشغيل الحاويات، والتي باستخدامها يمكننا عزل التطبيقات مع اعتمادياتها عن نظام تشغيل الجهاز وتشغيلها على مختلف أنظمة التشغيل كلينكس وويندوز وماك، حيث تُبنى تلك الحاويات من صورة image والتي تحوي داخلها على حالة نظام ما في لحظة زمنية معينة، مثًلا يمكننا بعد تثبيت وإعداد نظام تشغيل ما ثم تثبيت الاعتماديات اللازمة لعمل تطبيق ضمنه ونسخ ملفات ذلك التطبيق وبناءه أن نحفظ تلك اللحظة الزمنية ما قبل تشغيل التطبيق كصورة في دوكر، لنتمكن بعدها من إنشاء حاوية أو أكثر من تلك الصورة لتشغيل التطبيق بداخلها، بحيث ستكون تلك الحاويات معزولة تمامًا عن نظام التشغيل وعن بعضها البعض. تفيد تلك الطريقة في حل الكثير من المشاكل، فمثلًا من الصعب تشغيل تطبيقين على نفس نظام التشغيل يعتمد كل منهما على نسخة مختلفة من اعتمادية ما والذي يؤدي لتعارض في عملها، ولكن باستخدام دوكر يمكننا بناء صورة معزولة لكل من تلك التطبيقات تحوي فقط الاعتماديات التي يريدها كل تطبيق، وبعد إنشاء حاوية لكل من تلك الصور وتشغيلها يصبح وكأنما لدينا جهازين منفصلين يختص كل منهما بتشغيل تطبيق واحد فقط، ويفيد استخدام الحاويات أيضًا في عمليات التوسيع، فمثلًا إذا كان لدينا تطبيق خادم معين يعمل بأقصى طاقة استيعابية له، فالحل يكون بعمل نسخة من ذلك الخادم على جهاز جديد آخر لتوزيع الحمل على كليهما، فهنا نستفيد من سهولة إنشاء خادم جديد آخر في دوكر عبر إنشاء حاوية جديدة فقط من صورة ذلك الخادم ليصبح لدينا خادمين يعملان معًا، وهناك العديد من الحلول الأخرى التي يسمح بها دوكر بدءًا من إنشاء بيئة افتراضية للعمل ضمنها في مرحلة التطوير، مرورًا بالمساعدة في إنشاء بيئة لاختبار أو بناء التطبيقات قبل نشرها. تعتبر دوكر من أشهر منصات إدارة وتشغيل الحاويات وتخدم في معظم ممارسات DevOps سواء من قبل فريق التطوير وخصوصًا من قبل فريق العمليات، وفي أيّ فريق كنت من المهم التعرف على تلك المنصة والتعامل معها ويمكنك البدء بقراءة مقال تعرف على Docker وبمشاهدة فيديو ما هي تقنية Docker؟. كوبرنيتيز Kubernetes توفر منصة كوبرنيتيز Kubernetes (أو اختصارًا K8s) أدوات قوية تختص في إدارة الحاويات وأتمتة عمليات النشر والتوسيع لها سواء ضمن كانت على خادم واحد أو عدة خوادم موزعة، وتوفر أيضًا أدوات أخرى لتوزيع الأحمال بين الحاويات أو لنشر التحديثات عليها مع الحفاظ على استمرار عمل تلك الخدمات، حيث يركز على مهام النشر والتشغيل للخدمات ضمن ممارسات DevOps، لذا وخصوصًا إذا كنت ضمن فريق العمليات من الضروري التعرف على هذه المنصة ويمكنك البدء بقراءة مقال مدخل إلى Kubernetes. دوكر سوارم Docker Swarm يوفر دوكر بديلًا أخف وأبسط من كوبرنيتيز Kubernetes لإدارة الحاويات يدعى دوكر سوارم docker swarm، والذي يحوي مزايا لإدارة تشغيل وتوزيع الحاويات على عدة أجهزة وتوزيع الأحمال تلقائيًا بين الحاويات، لكنه يفتقر لبعض المزايا مثل المراقبة حيث يحتاج للتكامل مع خدمات إضافية لذلك، وعملية التوسعة باستخدامه تكون يدوية على عكس كوبرنيتيز الذي يوفر تلك الميزة تلقائيًا مع العديد من المزايا المتقدمة، لذا يعد دوكر سوارم مناسبًا لحالات الاستخدام البسيطة لإدارة الحاويات والتي لا نحتاج فيها لإعداد وتثبيت أداة جديدة متقدمة مثل كوبرنيتيز. مراقبة الخوادم والتسجيل بعد إعداد الخوادم ونشر التطبيق من الضروري ضمن ممارسات DevOps مراقبة عمله من قبل كلا فريقي التطوير والعمليات، وذلك لمراقبة أي مشاكل محتملة ونشر التطويرات لها لحلها أو التغيير على البنية التحتية للاستجابة للعديد من المتغيرات والحوادث، وفي الفقرات التالية سنتعرف على طرق المراقبة للخوادم وأشهر الأدوات التي تساعدنا في ذلك. مراقبة الخوادم هناك العديد من العوامل الممكن مراقبتها أثناء عمل التطبيق، فمثلًا يجب مراقبة الموارد المستخدمة والموارد المتاحة لتجنب أي خلل في عمل الخادم ورفع أداء الخدمة وسرعتها دومًا، فيمكن ذلك من خلال مراقبة مؤشرات استخدام الذاكرة والمعالج وسعة التخزين على كل خادم، ومن العوامل الأخرى المهمة هي عدد الطلبات المرسلة إلى الخدمة والزمن الوسطي للاستجابة، فقد ترشدنا تلك المؤشرات مثلًا لتوفير عدة نسخ من الخادم نفسه تكفي لاستقبال جميع الطلبات، أو قد تشير إلى خلل ضمن البرنامج ترشد فريق التطوير إلى ضرورة تغيير الخوارزميات المستخدمة ضمن التطبيق لرفع أداءه. ومن العوامل المهم مراقبتها أيضًا هي خرج التطبيق، فكل تطبيق أو خادم يولّد خرجًا يوصف العمليات التي يقوم بها، يُطبع ذلك الخرج إلى الخرج القياسي Standard Output أو إلى ملفات سجلات Logs خاصة، يفيد قراءتها وتحليلها بالحصول على نظرة واسعة على الخوادم أثناء عملها. أشهر أدوات المراقبة توفر أنظمة التشغيل بعض الأدوات المفيدة في مراقبة النظام والبرامج العاملة ضمنه والموارد، وتوجد بعض الأدوات والخدمات الخارجية التي تساعد في مراقبة عدة خوادم معًا: أدوات نظام تشغيل لينكس، أشهرها الأداة top والتي تفيد في معاينة استهلاك كل إجرائية process تعمل حاليًا من موارد الحاسوب، وهي الموجودة افتراضيًا ضمن جميع توزيعات لينكس، وفي حال أردت تفاصيل أكثر يوجد أداة شبيهة بها تدعى htop تعرض لك معلومات مفصلة إضافية، يمكنك التعرف على تلك الأدوات وأخرى متوفرة في لينكس من مقال 4 أدوات مفتوحة المصدر من أجل مراقبة نظام لينكس. أدوات Elastic وهي حزمة متكاملة لمراقبة سجلات التطبيقات والأداء للخوادم وتعد من أشهر الأدوات استخدامًا. أداة Prometheus لتجميع بيانات المراقبة من مختلف المصادر وتخزينها ضمن قاعدة بيانات بتسلسل حدوثها الزمني، ما يمكننا من الاستعلام عن كل تلك البيانات بطريقة سهلة من مصدر واحد، وتوفر هذه الأداة العديد من المزايا المهمة لعملية المراقبة كإرسال التحذيرات بناءًا على البيانات الواردة وغيرها. أداة Grafana والتي توفر لوحة لمراقبة البيانات تحوي مخططات بيانية بالعديد من الأشكال والصيغ وأدوات سهلة للاستعلام عن البيانات الواردة من مختلف المصادر التي يمكن ربطها مع هذه الأداة مثل أداة Prometheus وغيرها. الأداة Checkmk لمراقبة الخوادم والتطبيقات، حيث يتوفر نسخة مفتوحة المصدر منها يمكنك تشغيلها مجانًا، وللتعرف على الأداة وطريقة تثبيتها وإعدادها يمكنك مراجعة المقال مراقبة خادم لينكس باستخدام أداة Checkmk. توضح الصورة التالية نموذجًا عن عمل أداة Grafana: أتمتة سير العمل عبر CI/CD تركز ممارسات DevOps على أتمتة العمليات المتكررة ابتداءً بالعمليات المساعدة لتطوير البرمجيات وصولًا لعمليات النشر، تدخل أنشطة CI/CD كجزء أساسي في ممارسات DevOps وهي ما سنتعرف عليه في الفقرة التالية. التكامل المستمر والنشر المستمر CI/CD التكامل المستمر والنشر المستمر CI/CD (اختصارًا للعبارة Continuous Integration/Continuous Delivery) تدخل في صلب ممارسات DevOps حيث: التكامل المستمر: هي العمليات التي تدخل في مرحلة تطوير البرمجيات لدمج التغييرات والإضافات الصحيحة فقط ضمن الشيفرة المصدرية للتطبيق، كالتدقيق في تنسيق الشيفرة المصدرية لزيادة وضوحها وبناء نسخة من البرنامج وتنفيذ الاختبارات عليها متضمنة التغييرات الجديدة والتأكد من صحة عملها وجهوزية النسخة للنشر النشر المستمر: هي عمليات التجهيز لنشر آخر نسخة من الشيفرة المصدرية التي تنتجها مرحلة التكامل المستمر، وتتكون من بناء البرنامج وتجهيزه لبيئة الإنتاج. يمكنك التعرف أكثر على تلك العمليات من مقال مدخل إلى التكامل المستمر والنشر المستمر CI/CD، وبمتابعة الفيديو التالي: كيف نستعمل Jenkins جنكيز Jenkins هو أحد الأدوات التي تساعد في إنشاء خط pipeline للتكامل والنشر المستمر وأتمتمه جميع العمليات الخاصة بهما، حيث توفر تكاملًا مع العديد من الخدمات الأخرى باستخدام الإضافات plugins، فبدئًا من التكامل مع مستودع الشيفرة المصدرية للبرنامج سواء Github أو Gitlab وصولًا لتحضير بيئات الاختبار والنشر وتنفيذ أوامر المختلفة ضمنها، ويمكنك التعرف على طريقة تثبيته وإعداده من مقال تثبيت Jenkins على أوبنتو 18.04. أتمتة الخوادم والبنية التحتية تصل ممارسات DevOps في أتمتة وتسريع وتسهيل عمليات النشر وإدارة البنية التحتية إلى أتمتة إنشاء البنية التحتية نفسها ولا تصبح مهمة إدارة شكل البنية التحتية مقتصرًا على فريق العمليات، بل يمكن حتى لفريق التطوير المشاركة بتوصيف البنية التحتية التي يلزمها البرنامج قيد التطوير، من هنا نشأت عدة ممارسات منها توصيف البنية التحتية ضمن الشيفرة المصدرية نفسها، فيُضاف ملف خاص ضمن الشيفرة المصدرية للبرنامج يوصّف ما يحتاجه من بنية تحتية، وفي مرحلة النشر تتولى برمجيات خاصة ترجمة ملفات التوصيف تلك إلى عمليات إنشاء وإعداد البنية التحتية لها من خوادم، وتستخدم عملية الأتمتة تلك خصوصًا في البيئة السحابية، ومن الأدوات الشهيرة لذلك Terraform و Puppet و Ansible. Terraform توفر أداة Terraform المفتوحة المصدر طريقة لأتمتة عمليات إنشاء وضبط البنية التحتية في البيئات السحابية، وتقدم طريقة لتحديد النسخ المتلاحقة من أشكال البنية التحتية بشكل إصدارات يمكن التغيير بينها عند الحاجة، وتوفر تكاملًا مع الخدمات السحابية المشهورة مثل خدمات الويب لأمازون AWS. Puppet الأداة Puppet هي من الأدوات الشهيرة أيضًا لأتمتة ضبط الخوادم والبنى التحتية وتستعمل في إدارة الإعدادات والمساعدة في أتمتة الإعداد المُسبق provisioning وإعداد وإدارة البنية التحتية. يقلل التخطيط المسبق واستخدام أدوات إدارة الإعدادات مثل الأداة Puppet من الوقت المستغرق في تكرار المهام الأساسية، ويساعد على التأكد من أن الإعدادات مضبوطة بدقة، وتقوم على أساس واحد فيما بينها في جميع الخوادم والبنى التحتية. وتعمل أداة Puppet، وفق أسلوب خادم-عميل، أي أنك تحتاج لتثبيت برمجية على كل خادم تريد إدارته ليتواصل بدوره مع أداة Puppet لاستقبال أوامر المهام التي تريد تنفيذها على تلك الخوادم. ويمكنك التعرف عليها أكثر من سلسلة مقالات استخدام puppet لإدارة الخواديم. Ansible من عمليات الأتمتة المهمة التي تدخل في ممارسات DevOps هي أتمتة عمليات ضبط الخوادم التي تتكرر، فبدلًا من الدخول يدويًا إلى الخادم وضبط إعداداته عند الحاجة لإنشاء خادم جديد يمكن الاعتماد على أدوات تُنفذ عملية الضبط تلك آليًا مثل الأداة الشهيرة Ansible. أداة أنسبل Ansible من أشهر أدوات أتمتة ضبط الخوادم والتي تمكننا من وصف خطوات تنفيذ مهمة أو ضبط ما للخادم لمرة واحدة ثم إعادة تنفيذها على خادم أو أكثر آليًا، ما يوفر الوقت اللازم لضبط الخوادم ويقلل الأخطاء، فمثلًا يمكنك ترقية نظام التشغيل أو إعداد حسابات المستخدمين والصلاحيات لهم أو نشر تطبيقك أو ترقية قاعدة بيانات على خادم أو بيئة افتراضية أو أكثر عن طريقها دون الحاجة للدخول يدويًا إلى كل منها على حدى وتكرار تنفيذ نفس المهام، ومن أهم مزايا أنسبل أنه لا يحتاج لأي إعداد أو تثبيت لبرامج على الخادم، حيث يتصل ويدخل إلى الخادم ببساطة عبر اتصال SSH لإعدادها تمامًا كما لو كنت تُنفذ تلك المهام يدويًا، ويمكنك التعرف على طريقة تثبيته من مقال كيفيّة تثبيت وضبط Ansible على Ubuntu 18.04. وكما تتميز أنسبل بتوفر المكونات الجاهزة modules لها والتي تحوي على إعدادات مسبقة يمكنك تثبيتها وتنفيذها مباشرة دون الحاجة لكتابتها بنفسك، وللتعرف أكثر على هذه الوحدات وطريقة التعامل معها يمكنك قراءة مقال مدخل إلى وحدات Ansible. خارطة طريق تعلم DevOps إليك خارطة طريق كاملة من الدخول في مجال DevOps حتى احترافه، ومهما كان دورك في عملية صناعة البرمجيات ستستفيد من بعض أو كل هذه المجالات في تطوير كفاءة وسرعة عملك: سوق العمل لديك عدة خيارات وتخصصات عمل في مجال DevOps، كلها تتعلق بالممارسات التي ذكرناها من إدارة للبنية التحتية إلى تطوير أدوات تساعد الفرق التي تعمل على تطوير المنتج ومنها: مهندس DevOps: ستكون مسؤولًا عن التخطيط والتطوير للأدوات المستخدمة في ممارسات DevOps، مثلًا قد يطلب منك تجهيز آلية للاختبار والتوصيل المستمر CI/CD، أو الإشراف على عمليات الأتمتة الخاصة بإصدار نسخ جديدة من المنتج، أو تجهيز نظام مراقبة أداء وأخطاء للمنتج تساعد فرق التطوير والعمليات وحتى الإدارة. مهندس نظم سحابية Cloud Engineer: ستكون مسؤولًا عن إدارة وتطوير الخوادم في بنية سحابية خدمةً للمنتج الرقمي، وإيجاد حلول للمشاكل التقنية التي قد تحدث، كتوسيع النظام حسب الحاجة وزيادة وثوقية وأمان ومرونة النظام بشكل عام، أو قد يطلب منك نقل نظام من استضافة عادية على خادم واحد إلى نظام سحابي للاستفادة من مزاياه، أو تقديم الاستشارات والحلول المتعلقة بتخطيط وإدارة البنية التحتية لنظام ما. ختامًا تعرفنا في هذا الدليل على مفهوم DevOps والممارسات المتعلقة به، كما تعرفنا على الأساسيات المتعلقة به من بنية تحتية وخوادم بأنواعها، والتقنيات المستخدمة كالخوادم الافتراضية والحاويات وأشهر أدوات إنشاءها وإدارتها، كما تعرفنا على عدة أدوات وتقنيات تفيد في أتمتة مختلف المهام في عملية تطوير المنتج الرقمي، كأدوات أتمتة سير عملية التطوير والتوصيل عبر CI/CD وصولًا لأتمتة تحضير وتجهيز البنية التحتية اللازمة للتشغيل. مهما كان دورك في عملية تطوير المنتجات الرقمية فستجد في ممارسات DevOps ومفاهيمها الأساسية ما يساعدك على رفع سرعة تطوير المنتج وجودته وكفاءته، كما ستجد فيها ما يساعدك لرفع انتاجية عملك وكفاءته، فقد تستفيد منها كمطور لتساعدك على أتمتة بعض الأعمال اليدوية كالاختبار وتحضير بيئة تطوير محلية، أو كمسؤول عمليات في أتمتة الكثير من مهام النشر والمراقبة والتحضير لنشر المنتج، أو حتى كمدير منتج لزيادة انتاجية وكفاءة فريق العمل المسؤول عن منتجك وتوفير مراقبة تفيدك في اتخاذ قرارات حول تطوير المنتج. اقرأ أيضًا لماذا تعد DevOps الاستراتيجية التقنية الأكثر أهمية اليوم تحليل حمض DevOps النووي محاكاة عقلية DevOps
    1 نقطة
  8. يثبت مستخدمي لينكس الكثير من الحزم البرمجية باستخدام الأداة apt لما تتيحه من سهولة في العمل، فيكفي أن يكتب المستخدم اسم الحزمة لتبدأ الأداة البحث عنها ضمن مخازن البرمجيات الخاصة بنظام التشغيل أوبونتو. تكمن المشكلة الأساسية عندما لا تكون الحزمة المطلوبة موجودة ضمن مخزن البرمجيات الخاص بنظام التشغيل أوبونتو وهنا يمكن للمستخدم أن يستخدم برمجيات خارجية -مطورة من طرف ثالث Third-party كما تسمى- إن رغب بذلك كما هو الحال عند تثبيت التطبيقات باستخدام PPA ويمكن أن يتم اللجوء إلى مخزن برمجيات خارجي وتوسعة قائمة مصادر التثبيت Source List المستخدمة عند البحث عن حزمة برمجية ما. يبحث المستخدم عادة عن التعليمات اللازمة لتثبيت الحزمة فيجد مجموعة من الأوامر التي يجب عليه تنفيذها كأن يثبّت أداة ما ومن إضافة شيء ما يتعلق بمفاتيح gpg إلى قائمة مصادر التثبيت وبعدها يمكن تثبيت الحزمة البرمجية. يستعرض المثال التالي التعليمات اللازمة لتثبيت مدير الحزم الخاص بلغة جافا سكريبت JavaScript على نظام أوبونتو: sudo apt install apt-transport-https curl curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list' sudo apt update && sudo apt install yarn نجد العديد من هذه الأوامر عند تثبيت الأدوات البرمجية مباشرة من المطور وتعد المشكلة الأساسية فيها أن المستخدم ينفذ مجموعة من التعليمات الحساسة والتي تتطلب صلاحيات متقدمة بعض الشيء دون أن يدرك فعليًا دور كل أمر من الأوامر. يجب أن يدرك المستخدم الخطوات التي ينفذها مما يضمن نجاح عملية التثبيت من جهة ويسهل عملية حل المشاكل التي تصادفه. فهم إجرائية تثبيت الحزم من مخازن البرمجيات الخارجية يبين الشكل التالي توضيحًا للمخازن البرمجية ومحتوياتها ضمن نظام التشغيل لينكس. عندما نضيف مخزن برمجيات جديد إلى النظام فهذا يعني أن المستخدم يصبح قادرًا على تحميل وتثبيت الحزم البرمجية المتاحة ضمن هذا المخزن الجديد كما أنه يستطيع تحديث وترقية هذه الحزم عندما يتيحها المخزن مباشرة وذلك من ضمن عملية تحديث وترقية حزم النظام بتنفيذ الأمر apt update والأمر apt upgrade. تقسم هذه الإجرائية إلى أربعة أجزاء رئيسية وهي: الحصول على دعم بروتوكول https للأداة apt إضافة مفتاح GPG الخاص بمخزن البرمجيات البعيد إضافة عنوان مخزن البرمجيات البعيد إلى قائمة مصادر التثبيت الموثوقة تثبيت التطبيقات من المخزن البرمجي الذي تمت إضافته الجزء الأول: الحصول على دعم بروتوكول https للأداة apt بالعودة إلى التعليمات السابقة نجد أنها تبدأ بالأمر التالي: sudo apt install apt-transport-https curl تستخدم الأداة Curl لتحميل الملفات باستخدام سطر أوامر لينكس، أما الحزمة الثانية التي يتم تثبيتها فهي الأهم إذا كانت توزيعة لينكس المستخدمة قديمة بعض الشيء أما إذا كانت التوزيعة حديثة فلا داع لتنفيذ هذا الأمر. تُستخدم هذه الأداة لإجبار نظام تشغيل أوبونتو لاستخدام https بدلًا من http التي تعد البروتوكول الافتراضي. حتى أن دعم https لم يكن أساسيًا وذلك قبل الإصدار 1.5 من الأداة apt وأما بعد هذا الإصدار فلا يوجد داع لتثبيت الحزمة السابقة لأنها أصبحت مدمجة بشكل تلقائي في الأداة. يبين الشكل أدناه أنّ مخازن برمجيات أوبونتو تستخدم البروتوكول http إلا بعضًا منها التي أضافها المستخدم بشكل يدوي. إذا تضيف الحزمة "apt-transport-https" دعم https إلى الأداة apt ومن الطبيعي أن يتساءل المستخدم عن سبب غياب دعم بروتوكول https بشكل مباشر من قبل نظام أوبونتو علمًا أنه أكثر أمانًا من استخدام البروتوكول http وتجيب الفقرة التالية على هذا التساؤل. الجزء الثاني: إضافة مفتاح GPG الخاص بمخزن البرمجيات البعيد تستخدم مخازن برمجيات لينكس آلية حماية تعتمد على مفاتيح GPG المبنية ضمن مخزن البرمجيات. يضيف كل مخزن مفتاحه إلى قائمة المفاتيح الموثوقة الخاصة بمخازن البرمجيات. يتم توقيع الحزم البرمجية باستخدام هذا المفتاح وعند تثبيتها يتم التحقق من مطابقة المفتاح المخزّن لدى نظام التشغيل مع المفتاح المستخدم في عملية التوقيع للتحقق من أن الحزمة قد تم تثبيتها من المخزن البرمجي الصحيح. يظهر خطأ في حال فشل عملية التحقق ولا يثبت النظام الحزمة الجديدة أو لا يحدثها قبل ضمان نجاح عملية التحقق. نضيف في الخطوة التالية مفتاح GPG الخاص بالمخزن البرمجي البعيد إلى قائمة المفاتيح الموثوقة ضمن نظام التشغيل لينكس لكي يصبح قادرًا على الوثوق بالحزم البرمجية القادمة من ذلك المخزن وذلك بتنفيذ الأمر التالي: curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - يحمل الأمر السابق مفتاح GPG من الرابط الذي تمت إضافته، تفيد الراية sS إلى تفعيل النمط الصامت Silent mode حيث لا تظهر على الشاشة المعلومات التي يتم تبادلها أثناء عملية التحميل وتظهر منها الأخطاء فقط. يجب الانتباه إلى وجود الشريطة - في نهاية الأمر فهي المسؤولة على توجيه ما يتم تنزيله في الجزء الأول من الأمر إلى استدعاء الأداة apt-key في الأمر الثاني بدلًا من حفظه كملف. أي تتم إضافة المفتاح بشكل مباشر إلى النظام عبر تنفيذ الأمر apt-key add. يمكن استعراض مفاتيح GPG الخاصة بمخازن البرمجيات مختلفة ضمن نظام التشغيل باستخدام الأمر apt-key list فيظهر خرج مشابه لما يلي: توجد عدة طرق أخرى يمكن استخدامها لإضافة مفاتيح GPG أيضًا كما في الشكل التالي: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 يمكن أن يظهر تحذير بأن الأداة apt-key أصبحت قديمة وأنها لن تكون مدعومة بدءًا من الإصدار 22.04 الخاص بتوزيعة أوبونتو ويمكن تجاهل هذا التحذير. الجزء الثالث: إضافة عنوان مخزن البرمجيات البعيد إلى قائمة مصادر التثبيت الموثوقة يضيف الأمر التالي مُدخلًا جديدًا خاصًا بالمخزن الجديد إلى قائمة مصادر التثبيت الموثوقة من قبل نظام التشغيل، وبالتالي يتحقق نظام التشغيل من هذا المخزن عند الحاجة إلى تثبيت حزم جديدة أو تحديث وترقية الحزم القديمة. sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list' يتضمن الملف ‎/etc/apt/sources.list قائمة بعناوين مخازن البرمجيات الخاصة بنظام أوبونتو ويجب على المستخدم ألا يعدل هذا الملف نهائيًا وإنما يجب إنشاء ملف جديد على أن يكون له اللاحقة .list وتخزينه ضمن المجلد ‎/etc/apt/source.list.d كما في الشكل أدناه: تسهل هذه الإضافة عملية إدارة الحزم إذ يكفي عند الرغبة بإزالة مخزن ما من قائمة المصادر الموثوقة أن يتم حذف الملف الموافق من المجلّد السابق وبالتأكيد دون أن يتم تعديل الملف sources.list. بالعودة إلى الأمر السابق، يفيد استخدام sh إلى تشغيل الأمر ضمن نافذة جديدة من الصدفة shell. تفيد إضافة الراية ‎-c لتوجيه الأمر sh إلى قراء الأوامر من المعامل الذي يلي الراية ‎-c بدلاً من مدخلات المستخدم ومن ثم تتم إضافة السطر التالي: deb https://dl.yarnpkg.com/debian/ stable main باستخدام تعليمة echo إلى الملف ‎/etc/apt/sources.list.d/yarn.list الذي يتم إنشاؤه. توجد العديد من الطرق لتنفيذ عملية الإضافة السابقة أيضًا فيمكن الحصول على نفس النتيجة بتنفيذ الأمر التالي: echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list الجزء الرابع: تثبيت التطبيقات من المخزن البرمجي الذي تمت إضافته على الرغم من إضافة مفتاح GPG وعنوان المخزن البرمجي إلا أنّ نظام التشغيل لم يتعرّف على الحزم البرمجية الموجودة لدى هذا المخزن، لهذا يجب تحديث الذاكرة المخبئية cache الخاصة بالأداة apt للتعرف على الحزم البرمجية المتاحة وإصداراتها وذلك بتنفيذ الأمر التالي: sudo apt update يمكن البدء بتثبيت الحزم البرمجية بعد انتهاء تنفيذ الأمر السابق وعليه ننفذ الأمر التالي: sudo apt install yarn يمكن لتوفير الوقت أن يتم دمج الأمرين معًا بالشكل التالي: sudo apt update && sudo apt install yarn يضمن استخدام && أنّ الأمر الثاني لن ينفّذ قبل انتهاء تنفيذ الأمر الأول دون وجود أخطاء، وبهذا تكون قد اكتملت الإجرائية. الخلاصة يضطر معظم مستخدمي لينكس إلى إضافة مصادر تثبيت برمجيات إضافية، لهذا يجب إتقان كيفية إضافة هذه المصادر بشكل آمن إلى قائمة المصادر الموثوقة من قبل نظام التشغيل. تضمن هذا المقال تعريفًا بكيفية إضافة عنوان مخزن برمجي إلى المخازن الموثوقة من قبل نظام التشغيل المستخدم.كما تضمن مثالًا عمليًا لتثبيت حزمة برمجية غير موجودة ضمن مخازن البرمجيات الأساسية الخاصة بنظام تشغيل أوبونتو ترجمة وبتصرف للمقال Installing Packages From External Repositories in Ubuntu [Explained] لصاحبه Abhishek Prakash. اقرأ أيضًا أساسيات إدارة الحزم في أوبنتو ودبيان أساسيات إدارة الحزم: apt ،yum ،dnf ،pkg 10 أدوات مفيدة لمستخدمي لينكس ربما لم تسمع عنها من قبل
    1 نقطة
  9. يتعامل مستخدمي توزيعة ديبيان Debian وأوبونتو Ubuntu ومينت Mint وجميع مستخدمي توزيعات لينكس المعتمدة على أوبونتو أو ديبيان مع أوامر apt لتثبيت الحزم البرمجية المختلفة. نلاحظ بسهولة أنه ومنذ انطلاقة أوبونتو 16.04 قد شاع استخدام الأمر apt بشكل كبير إضافة إلى التوصية باستخدامها كمدير الحزم البرمجية ضمن نظام لينكس. يتضمن هذا المقال تعريفًا للراغبين بإتقان استخدام نظام لينكس وأدواته المختلفة وتحديدًا أداة تثبيت الحزم البرمجية والتي يضطر جميع المستخدمين الى التعامل معها عاجلًا أم آجلًا. ما هي الأداة apt؟ تمتلك كل توزيعة لينكس نظام تحزيم packaging system خاص بها والذي يتيح التطبيقات والبرامج ليثبتها المستخدم على نظام التشغيل. لا يحتاج المستخدم في كل مرة أن يبني البرنامج انطلاقًا من شيفرة المصدر. تستخدم توزيعة ديبيان نظام تحزيم اسمه dpkg ويمكن للمستخدم الاعتماد على أداة موجه الأوامر APT وهي اختصار للعبارة Advanced Package Tool للتفاعل مع نظام التحزيم الخاص بتوزيعات لينكس المبنية على أساس ديبيان. يمكن استخدام الأمر dpkg مباشرة ولكن يتيح الأمر apt المزيد من الخيارات مثل البحث عن الحزم الجديدة وترقيتها وإزالتها إضافة إلى أنها أكثر ملائمة للمستخدمين. يمكن استخدام الأوامر الخاصة بالأداة APT عن طريق تنفيذ الأمر apt في موجه الأوامر. نجد في العديد من المقالات والمراجع استخدام الأمر apt-get بدلًا من apt وذلك لتثبيت الحزم. شاع استخدام الأمر الأول لفترة طويلة من الزمن إلا أنّ الأمر الثاني قد حل مكانه بسبب بساطته وفعاليته في تنفيذ عمليات تثبيت الحزم. تحديث قاعدة بيانات الحزم باستخدام apt نستخدم في هذا المقال توزيعة أوبونتو 16.04 ولكن يمكن استخدام أية توزيعة لينكس معتمدة على أوبونتو أو ديبيان مثل مينت Mint و لايت Lite وغيرها. تستخدم الأداة apt قاعدة بيانات تتضمن الحزم المتاحة وفي حال عدم تحديث محتوى قاعدة البيانات هذه بشكل دوري فلن تعرف الأداة بأنّ إصدارات حديثة من الحزم أصبحت متاحة ولهذا يجب أن نبدأ العمل أولًا بتحديث قاعدة البيانات هذه بعد تثبيت نظام التشغيل لينكس لأول مرة. يتطلب هذا التحديث استخدام مستخدم ذي صلاحيات مناسبة Superuser ولهذا نستفيد من الأمر sudo بالشكل التالي: sudo apt update يظهر بعد تنفيذ هذا الأمر معلومات الحزم المتاحة والتي يتم الحصول عليها من عدة خوادم موزعة على أماكن جغرافية متعددة كما في الشكل التالي: نلاحظ من الشكل السابق أن معظم الأسطر التي تتعلق بالاتصال بالخوادم تبدأ بأحد الاحتمالات التالية: الإصابة Hit: يشير إلى أنّه لا يوجد تعديل بنسخة الحزمة الموجودة لدى الخادم والنسخة المثبتة على الحاسب التجاهل Ign: يشير إلى أنّه يجب تجاهل هذا التحديث إما لأنه لا يزال حديثًا وبالتالي يتم تأجيل تنفيذ هذا التحديث حتى يثبت استقرار التحديث الجديد أو أنه قد حدث خطأ ما أثناء طلب التحديث ولكن لا يمثّل هذا الخطأ خطورة ويمكن تجاهله. الجلب Get: يشير إلى أنّه تم اكتشاف إصدار أحدث وسيتم تنزيل المعلومات عن الحزم لكي يتم تثبيتها لاحقًا ويظهر في آخر السطر حجم المعلومات التي يتم تحميلها. ترقية الحزم المثبّتة باستخدام الأداة apt يمكن بعد تحديث قاعدة بيانات الحزم البدء بترقية الحزم المثبّتة على الحاسب، من المفضل أن تتم هذه الترقية بشكل دوري لجميع الحزم نظرًا لأن عمليات الترقية تحدث لحل مشاكل برمجية معينة أو لتحسين الأداء. نبدأ عملية الترقية باستخدام الأمر: sudo apt upgrade تظهر بعدها معلومات عن الحزم التي سيتم ترقيتها من حيث عدد هذه الحزم والحجم الكلي الذي سيتم تحميله من الإنترنت وكم يبلغ الحجم الإضافي الذي سيتم استهلاكه من الحاسب كما في الشكل التالي: يمكن أيضًا أن تتم عملية الترقية للحزم بتنفيذ أمر آخر على الشكل التالي: sudo apt full-upgrade يعمل هذا الأمر كسابقه إلا أنّه يثبت التحديثات المتعلّقة بترقية النظام والتي تتطلب إزالة حزمة موجودة على نظام التشغيل أما الأمر السابق فلا يستطيع تنفيذ مثل هذه العملية. ما الاختلاف بين الأمر apt update والأمر apt upgrade؟ يجب التذكر دومًا أنّ الأمر apt update يحدّث قاعدة بيانات الحزم فقط ولا يرقّي الحزم فعليًا. لنفرض أنه توجد حزمة مثبّتة على الحاسب الشخصي اسمها XYZ وكان الإصدار المثبت 1.3 فبعد تنفيذ الأمر apt update يتم تحديث قاعدة البيانات لتشير إلى الإصدار 1.4 المتاح للتثبيت، يمكن عندها تنفيذ الأمر apt upgrade لترقية الحزمة المطلوبة للإصدار الأحدث. يمكن دمج هذين الأمرين لتسريع هذه العملية بالشكل التالي: sudo apt update && sudo apt upgrade -y تثبيت الحزم الجديدة باستخدام الأداة apt يستخدم الأمر لتثبيت الحزم الجديدة التي يحتاجها المستخدم في عمله بالشكل التالي: sudo apt install <package_name> نضيف اسم الحزمة المطلوبة بدلًا من فعلى سبيل المثال يمكن من أجل تثبيت الحزمة mplayer تنفيذ الأمر التالي: sudo apt install mplayer يظهر عندها خرج مشابه للشكل التالي: تعد ميزة الإكمال التلقائي مفيدة جدًا عند عدم معرفة اسم الحزمة بشكل كامل وخصوصًا أن بعض الحزم يكون اسمها كبيرًا بعض الشيء. نكتب بضعة حروف من اسم الحزمة ومن ثم يمكن الضغط على مفتاح تاب tab ليتم اقتراح مجموعة الحزم المتاحة والتي تبدأ بالحروف التي تم إدخالها بالشكل التالي: تثبيت عدة حزم معًا باستخدام الأداة apt يمكن تثبيت دفعة من الحزم معًا وذلك في حال كان عدد الحزم المطلوبة للتثبيت كبيرًا فمن غير المجدي أن يتم تثبيتها واحدة تلو الأخرى. يتم ذكر اسم الحزم بشكل متتالي بحيث يفصل بينها فراغ واحد كما في الشكل التالي: sudo apt install <package_1> <package_2> <package_3> تنفيذ الأمر apt على حزمة مثبّتة بشكل مسبق يتم في هذه الحالة ترقية هذه الحزمة في حال وجود إصدار أحدث ضمن قاعدة البيانات ولا يسبب ذلك أية مشكلة إلا في حال عدم رغبة المستخدم أن يرقّي الحزمة لسبب ما. تثبيت الحزم دون تنفيذ عملية الترقية يمكن تثبيت حزمة ما دون الحاجة إلى تنفيذ أمر الترقية في حال رغب المستخدم بذلك عبر إضافة الخيار ‎--no-upgrade بالشكل التالي: sudo apt install <package_name> --no-upgrade يظهر عندها الخرج بالشكل التالي: ترقية حزمة موجودة دون تثبيتها في حال لم تكن مثبتة يمكن ترقية حزمة موجودة في حال وجودها بشكل مسبق على الحاسب دون أن يتم تثبيتها تلقائيًا في حال لم تكن مثبّتة بإضافة الخيار ‎--only-upgrade بالشكل التالي: sudo apt install <package_name> --only-upgrade يظهر عندها الخرج بالشكل التالي: تثبيت إصدار محدد من حزمة يتم اختيار النسخة الأحدث والأكثر استقرارًا للحزمة عند طلب المستخدم لتثبيتها بشكل افتراضي ولكن تظهر بعض الحالات التي يحتاج فيها المستخدم نسخة محددة من حزمة ما. يعد مثل هذا الشرط ضروريًا عند تجهيز وتثبيت بعض أنواع الخدمات والتي قد تشترط وجود حزمة بإصدار معين لكي تعمل بشكل صحيح حيث أنّها لا تكون متوافقة مع النسخ الأحدث. نستطيع تحقيق بالشكل التالي: sudo apt install <package_name>=<version_number> إزالة الحزم المثبّتة على باستخدام الأداة apt يستخدم الأمر apt أيضًا لإزالة الحزم المثبتة على الحاسب أيضًا، يتم ذلك بالشكل التالي: sudo apt remove <package_name> يظهر خرج مشابه للشكل التالي: يمكن الاستفادة من الإكمال التلقائي في استعراض الحزم المثبّتة وذلك بشكل مماثل لما قمنا به مسبقًا إذ يكفي كتابة بضعة أحرف من اسم الحزمة والضغط على المفتاح تاب tab ليتم عرض قائمة بالحزم المتاحة. يمكن إزالة الحزم أيضًا باستخدام الأمر purge وذلك بالشكل التالي: sudo apt purge <package_name> يحذف هذا الأمر كل ما يتعلق بالحزمة من ملفات إعداد وغيرها بينما يبقى الأمر remove على بعض ملفات الإعداد ضمن النظام إذ يعد ذلك مفيدًا في حال حذف المستخدم حزمة ما ورغب الاحتفاظ بالإعدادات التي نفّذها في حال رغبته بتثبيتها لاحقًا. أما الأمرpurge فيعد مناسبًا عندما يتم إتلاف ملفات الإعداد بشكل نهائي لا رجعة فيه وعندها يعد خيار إزالة كل ما يتعلق بالحزمة وتثبيته من البداية هو الأفضل. يتم عادة استخدام apt remove أكثر من الأمر apt purge لأن المستخدم لا يحتاج إلى تعديل إعدادات الحزم بشكل كبير. البحث عن الحزم في لينكس يمكن البحث عن حزمة محددة بكل بساطة باستخدام الأمر apt search ليتم عرض جميع الحزم التي تتضمن مصطلح البحث الذي تم إدخاله وذلك بتنفيذ الأمر: apt search <search term> ليظهر عندها الخرج بالشكل التالي: استعراض محتوى حزمة في لينكس نستعرض محتوى حزمة ما قبل إزالتها أو تثبيتها بتنفيذ الأمر التالي: apt show <package_name> تظهر عندها العديد من المعلومات المتعلقة بالحزمة مثل توصيف الحزمة واسم الحزم التي تعتمد عليها هذه الحزمة إضافة إلى رقم الإصدار الخاص بها وغيرها من المعلومات المهمة والتي يبينها الشكل التالي: استعراض قائمة الحزم الجاهزة للترقية وإصداراتها الحالية يمكن استعراض قائمة الحزم المثبّتة على الحاسب والتي يمكن ترقيتها إلى إصدار أحدث. يعد هذا الخيار مهمًا جدًا عندما يتم ترقية مجموعة من الحزم والتي تعتمد على بعضها بحيث نهتم برقم الإصدار الحالي ورقم الإصدار الجديد. نحصل على هذه القائمة بتنفيذ الأمر التالي: apt list --upgradable ليظهر عندها الخرج بالشكل التالي: كما نستطيع استعراض قائمة الحزم المثبّتة فقط على الحاسب وذلك بتنفيذ الأمر التالي: apt list --installed كما نستطيع استعراض قائمة التطبيقات المثبتة بجميع الإصدارات الموجودة على الحاسب، يعد هذا الأمر بالغ الأهمية للعودة إلى إصدار قديم من حزمة محددة كانت تعمل بشكل صحيح. نستعرض هذه القائمة بتنفيذ الأمر التالي: apt list --all-versions تنظيف النظام باستخدام الأداة apt نستخدم الأمر apt autoremove لإزالة أية حزم لم يعد هنالك حاجة لوجودها ضمن الحاسب إضافة لإزالة أية مكتبات برمجية أصبحت بلا فائدة والتي تستهلك مساحة تخزينية عند بقائها ضمن النظام. يتم ذلك بتنفيذ الأمر التالي: sudo apt autoremove لنحصل بعدها على الخرج التالي: الخاتمة تضمن هذا المقال تعريفًا بالأداة apt وتوضيحًا للخيارات العديدة التي يمكن الاستفادة منها في تثبيت الحزم وإدارتها. تعد هذه الأداة أساسية لجميع مستخدمي نظام لينكس والذين قد اختاروا توزيعات مبنية على أوبونتو أو ديبيان. ترجمة وبتصرف للمقال Using apt Commands in Linux [Complete Guide] لصاحبه Abhishek Prakash. اقرأ أيضًا ما هو نظام التشغيل لينكس؟ عشرون أمرا في لينكس يفترض أن يعرفها كل مدير نظم أساسيات إدارة الحزم: apt ،yum ،dnf ،pkg
    1 نقطة
  10. الشبكة هي عبارة عن مجموعة من الأجهزة المتصلة مع بعضها على اختلاف أنواعها باستخدام تجهيزات وبرمجيات خاصة وظيفتها أن تتيح لهذه الأجهزة التواصل وتبادل المعلومات بشكل سريع وفعال. ويمكن عدّ الشبكة أيضًا على أنها النظام الذي يحكم هذه الأجهزة لتتمكن من مشاركة الموارد فيما بينها. وعلى اختلاف أنواع الشبكات فإنها غالبًا ما تتكون من نفس العناصر الأساسية والتي من الضروري تواجدها في أي نظام شبكي. لكن ما هي عناصر ومكونات الشبكة؟ لمعرفة مكونات الشبكة، تابعوا معنا الفيديو الآتي: إذا أردت التعرف أكثر على مجال الشبكات، فننصحك بالانضمام إلى دورة علوم الحاسوب، ولا تنسَ الاستعانة خلال رحلة تعلمك وعملك بتوثيقات موسوعة حسوب المجانية. وإذا أردت متابعة المعلومات البرمجية العلمية مكتوبة فيمكنك الاطلاع على قسم البرمجة في أكاديمية حسوب، كما يمكنك متابعة جديد الفيديوهات التقنية المتاحة على يوتيوب أكاديمية حسوب مجانًا.
    1 نقطة
  11. سنجيب في هذه السلسلة من المقالات سلسلة تعلم تطوير الويب على بعض الأسئلة الأساسية حول برمجة موقع الويب من طرف الخادم، مثل ماهية البرمجة من طرف الخادم واختلافها عن البرمجة من طرف العميل وسبب فائدتها الكبيرة، كما سنقدم نظرةً عامةً على بعض أكثر أطر عمل الويب من طرف الخادم شيوعًا مع إرشادات حول كيفية اختيار إطار العمل الأنسب لإنشاء مشروعك الأول، وسنقدم مقدمةً تمهيديةً عالية المستوى حول أمان خادم الويب. المتطلبات الأساسية لا تحتاج إلى معرفة برمجة مواقع الويب من طرف الخادم أو أيّ نوع آخر من البرمجة قبل البدء، ولكن يجب أن تفهم شيئًا ما عن طريقة عمل مواقع الويب وخوادم الويب، لذلك نوصي بقراءة المقالات التالية: مدخل إلى خادم الويب. تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب. رفع ملفات موقع الويب إلى خادم على الإنترنت. ستكون جاهزًا للعمل من خلال الفهم الأساسي الذي تكتسبه من هذه المقالات. تتألف هذه السلسلة الفرعية من المقالات التالية: مدخل إلى برمجة مواقع الويب من طرف الخادم: يتناول المقال الأول برمجة موقع الويب من طرف الخادم عالية المستوى، وتجيب على أسئلة، مثل ماهية البرمجة من طرف الخادم واختلافها عن البرمجة من طرف العميل وسبب فائدتها الكبيرة. ستفهم بعد قراءة هذا المقال القدرات الإضافية المتاحة لمواقع الويب من خلال كتابة الشيفرة البرمجية من طرف الخادم. نظرة عامة على تفاعلات الخادم مع العميل في موقع ويب ديناميكي: سنختبر ما يحدث عندما يتلقى الخادم طلبًا ديناميكيًا من متصفح بعد معرفة الغرض والفوائد المحتملة من البرمجة من طرف الخادم. بما أن معظم الشيفرة البرمجية من طرف الخادم لمواقع الويب تتعامل مع الطلبات والاستجابات بطريقة مماثلة، سيساعدك ذلك على فهم ما عليك فعله عند كتابة شيفرتك البرمجية. أطر عمل الويب من طرف الخادم: أوضح المقال السابق ما يجب على تطبيق الويب من طرف الخادم فعله للاستجابة لطلبات متصفح الويب، ويشرح هذا المقال كيف يمكن لأطر عمل الويب تبسيط هذه المهام، ويساعدك على اختيار إطار العمل المناسب لأول تطبيق ويب من طرف الخادم. تعرف على أمان مواقع الويب: يتطلب أمان الموقع الحذر في جميع جوانب بناء الموقع وتشغيله. يساعدك هذا المقال التمهيدي في فهم الخطوات الأولى المهمة الممكن اتخاذها لحماية تطبيق الويب من الهجمات الأكثر شيوعًا. ملاحظة: يتناول هذا المقال أطر العمل من طرف الخادم، وكيفية استخدامها لإنشاء مواقع الويب. إذا كنت تبحث عن معلومات حول أطر عمل جافا سكريبت JavaScript من طرف العميل، فاطلع على مقال فهم أدوات تطوير الويب من طرف العميل. لا تحتوي هذه السلسلة من المقالات على أي تقييم لأننا لم نعرض لك أي شيفرة برمجية بعد، إذ يجب أن يكون لديك في هذه المرحلة فهمٌ عام للوظائف التي يمكنك تقديمها من خلال البرمجة من طرف الخادم مع اتخاذ قرار بشأن إطار عمل الويب من طرف الخادم الذي ستستخدمه لإنشاء أول تطبيق من طرف الخادم. لنبدأ بمقالنا الأول من هذه السلسلة من خلال التعرُّف على مفهوم برمجة مواقع الويب من طرف الخادم. دورة تطوير تطبيقات الويب باستخدام لغة PHP احترف تطوير النظم الخلفية والووردبريس وتطبيقات الويب من الألف إلى الياء دون الحاجة لخبرة برمجية مسبقة اشترك الآن تمهيد إلى برمجة مواقع الويب من طرف الخادم server-side المتطلبات الأساسية: المهارات الحاسوبية الأساسية، وفهم أساسي لخادم الويب. الهدف: التعرف على مفهوم برمجة مواقع الويب من طرف الخادم، وما يمكن أن تفعله، وكيف تختلف عن البرمجة من طرف العميل. تستخدم معظمُ مواقع الويب واسعة النطاق الشيفرةَ البرمجية من طرف الخادم لعرض بيانات مختلفة ديناميكيًا عند الحاجة، وتُسحَب من قاعدة البيانات المخزنة على الخادم وتُرسَل إلى العميل لعرضها باستخدام شيفرة برمجية مثل شيفرة لغتي HTML وجافا سكريبت. من أهم فوائد الشيفرة البرمجية من طرف الخادم أنها تسمح لك بتخصيص محتوى موقع الويب لكل مستخدم، إذ يمكن للمواقع الديناميكية إبراز المحتوى الأكثر صلة بناءً على تفضيلات المستخدم وعاداته، ويمكن أن تسهّل الشيفرة البرمجية من طرف الخادم استخدامَ المواقع من خلال تخزين التفضيلات والمعلومات الشخصية، مثل إعادة استخدام تفاصيل بطاقة الائتمان المخزنة لتبسيط المدفوعات اللاحقة، كما يمكنها السماح بالتفاعل مع مستخدمي الموقع وإرسال الإشعارات والتحديثات عبر البريد الإلكتروني، أو عبر قنوات أخرى، مما يتيح مشاركةً أعمق بكثير مع المستخدمين. ملاحظة: يُوصَى بشدة بالتعرف على تطوير مواقع الويب من طرف الخادم في العالم الحديث لتطوير الويب. ما هي برمجة مواقع الويب من طرف الخادم؟ تتواصل متصفحات الويب مع خوادم الويب باستخدام بروتوكول نقل النص التشعبي HyperText Transfer Protocol -أو اختصارًا HTTP، إذ يُرسَل طلب HTTP من متصفحك إلى الخادم الهدف عند النقر على رابط على صفحة ويب، أو إرسال نموذج، أو إجراء بحث. يتضمن الطلب عنوان URL يحدد المورد المتأثر، وطريقةً تحدد الفعل المطلوب، مثل الحصول على المورد، أو حذفه، أو نشره، ويمكن أن يتضمن الطلب أيضًا معلومات إضافية مشفرة في معاملات URL (أزواج حقل-قيمة field-value المرسَلة عبر سلسلة الاستعلام query string)، مثل بيانات POST (البيانات المرسَلة باستخدام طريقة POST لبروتوكول HTTP) أو في ملفات تعريف الارتباط Cookies المرتبطة بها. تنتظر خوادم الويب رسائل طلب العميل وتعالجها عند وصولها وترد على متصفح الويب برسالة استجابة HTTP، إذ تحتوي الاستجابة على سطر حالة يشير إلى نجاح الطلب من عدمه مثل السطر "HTTP/1.1 200 OK"، الذي يشير إلى النجاح. يمكن أن يحتوي متن الاستجابة على الطلب الناجح للمورد المطلوب (مثل صفحة HTML جديدة أو صورة)، والذي يمكن عرضه بعد ذلك باستخدام متصفح الويب. المواقع الساكنة static sites يوضّح الشكل الآتي معمارية خادم الويب الأساسية لموقع ساكن Static Site يعيد المحتوى الثابت نفسه من الخادم كلما طلب موردًا معينًا؛ فإذا أراد المستخدم الانتقال إلى صفحة ما، فسيرسل المتصفح طلب HTTP من النوع "GET" يحدد عنوان URL الخاص به. يسترجع الخادمُ المستندَ المطلوب من نظام ملفاته ويعيد استجابة HTTP التي تحتوي على المستند وحالة النجاح (عادةً ‎200 OK). إذا تعذّر استرجاع الملف لسبب ما، ستُعاد حالة خطأ (اطلع على كيفية استكشاف وإصلاح رموز أخطاء HTTP الشائعة). المواقع الديناميكية dynamic sites موقع الويب الديناميكي هو الموقع الذي يُنشَأ فيه بعضٌ من محتوى الاستجابة ديناميكيًا عند الحاجة فقط، إذ تُنشَأ صفحات HTML من خلال إدخال بيانات من قاعدة بيانات إلى عناصر بديلة في قوالب HTML، وتُعَد هذه الطريقة أكثر فاعلية من استخدام مواقع الويب الساكنة لتخزين كميات كبيرة من المحتوى. يمكن للموقع الديناميكي إعادة بيانات مختلفة لعنوان URL بناءً على المعلومات التي يقدّمها المستخدم أو التفضيلات المخزنة ويمكنه إجراء عمليات أخرى بوصفها جزءًا من إعادة الاستجابة مثل إرسال الإشعارات. يجب تشغيل معظم الشيفرة البرمجية لدعم موقع ويب ديناميكي على الخادم، ويُعرَف إنشاء هذه الشيفرة البرمجية باسم "البرمجة من طرف الخادم" أو "كتابة سكريبتات الواجهة الخلفية" أحيانًا. يوضّح الشكل الآتي معمارية بسيطة لموقع ويب ديناميكي، إذ ترسل المتصفحات طلبات HTTP إلى الخادم الذي يعالجها ويعيد استجابات HTTP المناسبة. يجري التعامل مع طلبات الموارد الساكنة باستخدام طريقة التعامل مع المواقع الساكنة نفسها، فالموارد الساكنة هي ملفات لا تتغير مثل ملفات CSS وجافا سكريبت والصور وملفات PDF المُنشَأة مسبقًا وإلخ. تُمرّر طلبات الموارد الديناميكية (الخطوة رقم 2) إلى الشيفرة البرمجية من طرف الخادم (الموضحة في الشكل السابق بوصفها تطبيق ويب)، بينما يفسّر الخادم الطلب الديناميكي، ويقرأ المعلومات المطلوبة من قاعدة البيانات (الخطوة رقم 3)، ويجمع البيانات المسترجعة مع قوالب HTML (الخطوة رقم 4)‎، ويرسل استجابة تحتوي على ملف HTML المُنشَأ (الخطوتين 5 و 6). هل تتشابه البرمجة من طرف الخادم مع البرمجة من طرف العميل؟ لنوجّه انتباهنا الآن إلى الشيفرة البرمجية الموجودة في البرمجة من طرف الخادم وطرف العميل، فهما مختلفتان كثيرًا للأسباب التالية: لديهما أغراض واهتمامات مختلفة. لا تستخدمان لغات البرمجة نفسها باستثناء لغة جافا سكريبت التي يمكن استخدامها من طرف الخادم ومن طرف العميل. تعملان ضمن بيئات أنظمة تشغيل مختلفة. تُعرَف الشيفرة البرمجية التي تعمل في المتصفح باسم الشيفرة البرمجية من طرف العميل وتهتم بتحسين مظهر وسلوك صفحة الويب المعروضة، ويتضمن ذلك تحديد مكونات واجهة المستخدم وتنسيقها وإنشاء التخطيطات والتنقل والتحقق من صحة النموذج وما إلى ذلك؛ بينما تتضمن برمجة مواقع الويب من طرف الخادم اختيار المحتوى المُعاد إلى المتصفح استجابةً للطلبات، إذ تعالج الشيفرة البرمجية من طرف الخادم مهامًا، مثل التحقق من صحة البيانات والطلبات المُرسَلة واستخدام قواعد البيانات لتخزين البيانات واسترجاعها وإرسال البيانات الصحيحة إلى العميل كما هو مطلوب. تُكتَب الشيفرة البرمجية من طرف العميل باستخدام لغات HTML وCSS وجافا سكريبت، وتعمل ضمن متصفح ويب ولديها وصول ضئيل أو معدوم إلى نظام التشغيل الأساسي بما في ذلك الوصول المحدود إلى نظام الملفات. لا يستطيع مطورو الويب التحكم في المتصفح الذي يمكن أن يستخدمه كل مستخدم لعرض موقع الويب، إذ توفر المتصفحات مستويات غير متناسقة من التوافق مع ميزات الشيفرة البرمجية من طرف العميل، ويُعَد التعامل مع الاختلافات في دعم المتصفحات بسلاسة جزءًا من التحدي المتمثل في البرمجة من طرف العميل. يمكن كتابة الشيفرة البرمجية من طرف الخادم باستخدام لغات برمجة متعددة، إذ تشمل أمثلة لغات الويب الشائعة من طرف الخادم لغات PHP وبايثون Python وروبي Ruby وC#‎ وجافا سكريبت (NodeJS)، وتتمتع الشيفرة البرمجية من طرف الخادم بالوصول الكامل إلى نظام تشغيل الخادم ويمكن للمطور اختيار لغة البرمجة (والإصدار المحدد) التي يرغبون في استخدامها. يكتب المطورون شيفرتهم البرمجية باستخدام أطر عمل الويب التي هي مجموعات من الدوال والكائنات والقواعد وبنيات الشيفرات البرمجية الأخرى المُصمَّمة لحل المشاكل الشائعة وتسريع التطوير وتبسيط الأنواع المختلفة من المهام التي تواجه مجالًا معينًا. تستخدم الشيفرة البرمجية لكل من العميل والخادم أطر عمل، ولكن المجالات مختلفة جدًا، وبالتالي تكون أطر العمل مختلفة أيضًا، إذ تعمل أطر عمل الويب من طرف العميل على تبسيط مهام التخطيط والعرض، بينما توفر أطر عمل الويب من طرف الخادم الكثير من وظائف خادم الويب الشائعة التي يمكن أن تضطر إلى تقديمها بنفسك، مثل دعم الجلسات ودعم المستخدمين والاستيثاق Authentication والوصول السهل إلى قاعدة البيانات ومكتبات القوالب وما إلى ذلك. ملاحظة: تُستخدَم أطر العمل من طرف العميل للمساعدة لتسريع تطوير الشيفرة البرمجية من طرف العميل، لكن يمكنك اختيار كتابة شيفرتك البرمجية يدويًا، والتي من الممكن أن تكون أسرع وأكثر فاعلية إذا أردتَ واجهة مستخدم موقع ويب صغيرة وبسيطة؛ بينما لن تفكر أبدًا في كتابة مكوِّن من طرف الخادم لتطبيق ويب بدون إطار عمل، فمن الصعب تقديم ميزة أساسية مثل خادم HTTP من الصفر باستخدام لغة بايثون، ولكن توفر أطر عمل الويب باستخدام لغة بايثون مثل إطار عمل جانغو Django ميزات مهمة إلى جانب أدوات أخرى مفيدة. فوائد واستخدامات البرمجة من طرف الخادم تُعَد البرمجة من طرف الخادم مفيدةً جدًا لأنها تتيح تقديم معلومات مُصمَّمة خصيصًا لكل مستخدم بكفاءة وبالتالي إنشاء تجربة مستخدم أفضل بكثير. تستخدم شركات مثل أمازون Amazon البرمجة من طرف الخادم لإنشاء نتائج البحث عن المنتجات، وتقديم اقتراحات المنتجات المستهدفة بناءً على تفضيلات العميل وعادات الشراء السابقة وتبسيط عمليات الشراء وما إلى ذلك؛ بينما تستخدم البنوك البرمجة من طرف الخادم لتخزين معلومات الحسابات والسماح للمستخدمين المُصرَّح لهم فقط بمشاهدة المعاملات وإجرائها؛ وتستخدم خدمات أخرى، مثل فيسبوك Facebook وتويتر Twitter وإنستغرام Instagram وويكيبيديا Wikipedia البرمجة من طرف الخادم لإظهار المحتوى ومشاركته والتحكم في الوصول إليه. سنذكر الآن بعض الاستخدامات والفوائد الشائعة للبرمجة من طرف الخادم، إذ ستلاحظ بعض التداخل بينها. تخزين المعلومات وتسليمها بفعالية هناك الكثير من المنتجات المتوفرة على أمازون والمنشورات المكتوبة على فيسبوك، وبالتالي سيكون إنشاء صفحة ساكنة منفصلة لكل منتج أو منشور غير عملي. تسمح البرمجة من طرف الخادم بتخزين المعلومات في قاعدة بيانات وبناء ملفات HTML وأنواع أخرى من الملفات (مثل ملفات PDF والصور وغيرها) وإعادتها ديناميكيًا. يمكن إعادة بيانات (JSON و XML وغيرها) لعرضها باستخدام أطر عمل الويب المناسبة من طرف العميل، وهذا يقلل من عبء المعالجة على الخادم وكمية البيانات التي يجب إرسالها. لا يقتصر عمل الخادم على إرسال المعلومات من قواعد البيانات، إذ يمكن أن يعيد نتيجة الأدوات البرمجية أو البيانات من خدمات الاتصالات، ويمكن استهداف المحتوى حسب نوع جهاز العميل الذي يستقبله. توجد المعلومات في قاعدة بيانات، لذا يمكن مشاركتها وتحديثها بسهولة أكبر مع أنظمة الأعمال الأخرى، فمثلًا يمكن أن يحدّث المتجر قاعدة بيانات مُخزنة عند بيع المنتجات إما عبر الإنترنت أو ضمن متجر. يمكنك معرفة فائدة الشيفرة البرمجية من طرف الخادم لتخزين المعلومات الفعال وتسليمها من خلال المثال التالي: اذهب إلى موقع أمازون أو أي موقع تجارة إلكترونية آخر. ابحث عن عدد من الكلمات الرئيسية ولاحظ عدم تغيّر بنية الصفحة بالرغم من تغيّر النتائج. افتح منتجين أو ثلاثة منتجات مختلفة، ولاحظ كيف أن لديها بنيةً وتخطيطًا مشتركًا مع سحب محتوى المنتجات المختلفة من قاعدة البيانات. يمكنك أن ترى فعليًا ملايين القيم المُعادة بالنسبة لمصطلح بحث شائع مثل "السمك"، إذ يسمح استخدام قاعدة البيانات بتخزينها ومشاركتها بفاعلية، كما يسمح بالتحكم في عرض المعلومات في مكان واحد فقط. تجربة مستخدم مخصصة يمكن للخوادم تخزين واستخدام المعلومات المتعلقة بالعملاء لتوفير تجربة مستخدم ملائمة ومُخصَّصة، فمثلًا تخزّن العديد من المواقع بطاقات الائتمان دون إدخال التفاصيل مرةً أخرى. يمكن لمواقع مثل خرائط جوجل استخدام المواقع المحفوظة أو الحالية لتوفير معلومات التوجيه والبحث، أو سجل السفر لإظهار الأنشطة التجارية المحلية في نتائج البحث. يمكن استخدام تحليل أعمق لعادات المستخدم لتوقّع اهتماماتهم وتخصيص الاستجابات والإشعارات، مثل تقديم قائمة بالمواقع التي زارها سابقًا أو التي يمكن أن يرغب في إلقاء نظرة عليها على الخريطة. تحفظ خرائط جوجل سجل البحث والزيارة، وتميّز المواقع التي تتكرر زيارتها، أو التي يتكرر البحث عنها أكثر من المواقع الأخرى. تُحسَّن نتائج بحث جوجل بناءً على عمليات البحث السابقة كما في المثال التالي: اذهب إلى بحث جوجل. ابحث عن "كرة القدم". حاول الآن كتابة كلمة "كرة" في مربع البحث ولاحظ توقعات البحث التي جرى إكمالها تلقائيًا. هل تعتقد أن هذه صدفة؟ حسنًا، إنها ليست كذلك. الوصول المتحكم فيه إلى المحتوى تسمح البرمجة من طرف الخادم للمواقع بتقييد الوصول إلى المستخدمين المُصرَّح لهم وتقديم المعلومات التي يُسمَح للمستخدم برؤيتها فقط. تشمل الأمثلة الواقعية مواقع الشبكات الاجتماعية التي تسمح للمستخدمين بتحديد مَن يمكنه رؤية المحتوى الذي ينشرونه على الموقع ويظهر على صفحتهم الرئيسية. ملاحظة: هناك أمثلة حقيقية أخرى، إذ يمكن التحكم في الوصول إلى المحتوى، مثل ما يمكنك رؤيته إذا ذهبت إلى موقع الإنترنت الخاص بالمصرف الذي تتعامل معه. سجّل الدخول إلى حسابك ولاحظ ما هي المعلومات الإضافية التي يمكنك رؤيتها وتعديلها، وما هي المعلومات التي يمكنك رؤيتها والتي يمكن للمصرف تغييرها فقط. تخزين معلومات الجلسة أو الحالة تسمح البرمجة من طرف الخادم للمطورين بالاستفادة من الجلسات sessions، والتي هي آلية تسمح للخادم بتخزين معلومات عن المستخدم الحالي للموقع وإرسال استجابات مختلفة بناءً على تلك المعلومات. يسمح ذلك لموقع ما مثلًا بمعرفة أن مستخدمًا قد سجل الدخول مسبقًا وعرض روابطًا إلى رسائل بريده الإلكتروني، أو رتب السجل، أو حفظ حالة لعبة بسيطة بحيث يمكن للمستخدم الانتقال إلى الموقع مرةً أخرى والمتابعة من حيث تركه. ملاحظة: زُر موقع صحيفة يحتوي على نموذج اشتراك وافتح مجموعة من النوافذ مثل موقع The Age. استمر في زيارة الموقع على مدار بضع ساعات أو أيام، ثم سيُعاد توجيهك إلى صفحات تشرح كيفية الاشتراك، ولن تتمكن من الوصول إلى المقالات. تمثل هذه المعلومات مثالًا عن معلومات الجلسة المخزنة في ملفات تعريف الارتباط. الإشعارات والاتصالات يمكن للخوادم إرسال إشعارات عامة أو خاصة بالمستخدم من خلال موقع الويب نفسه، أو عبر البريد الإلكتروني، أو الرسائل القصيرة، أو الرسائل الفورية، أو محادثات الفيديو، أو خدمات الاتصالات الأخرى، ومن الأمثلة على ذلك ما يلي: يرسل فيسبوك وتويتر رسائل بريد إلكتروني ورسائل قصيرة لإعلامك بالاتصالات الجديدة. يرسل أمازون بانتظام رسائل بريد إلكتروني خاصة بالمنتجات بحيث ثقترح منتجات مشابهة لتلك التي اشتريتها أو شاهدتها مسبقًا والتي يمكن أن تكون مهتمًا بها. يمكن أن يرسل خادم الويب رسائل تحذير إلى مسؤولي الموقع لتنبيههم بانخفاض الذاكرة على الخادم أو نشاط مستخدم مريب. ملاحظة: أكثر أنواع الإشعارات شيوعًا هو "تأكيد التسجيل". اختر أيّ موقع كبير تهتم به مثل جوجل وأمازون وإنستغرام وأنشئ حسابًا جديدًا باستخدام عنوان بريدك الإلكتروني، وستتلقى بعدها بريدًا إلكترونيًا يؤكد تسجيلك أو يطلب تأكيدًا لتفعيل حسابك. تحليل البيانات يمكن أن يجمع موقع الويب الكثير من البيانات حول المستخدمين مثل ما الذي يبحثون عنه وماذا يشترون وما يوصون به ومدة بقائهم في كل صفحة. يمكن استخدام البرمجة من طرف الخادم لتحسين الاستجابات بناءً على تحليل هذه البيانات، فمثلًا تعلن كلًا من أمازون وجوجل عن منتجات بناءً على عمليات البحث السابقة وعمليات الشراء. ملاحظة: إذا كنت من مستخدمي فيسبوك، فانتقل إلى الصفحة الرئيسية وانظر إلى المنشورات. لاحظ كيف أن بعض المنشورات ليست مرتبةً عدديًا، إذ تكون في أغلب الأحيان المشاركات التي تحتوي على عدد أكبر من الإعجابات أعلى في القائمة من المشاركات الأحدث. ألقِ نظرةً على نوع الإعلانات المعروضة، إذ يمكن أن تشاهد إعلانات عن الأشياء التي اطّلعتَ عليها على مواقع أخرى. يمكن أن تكون خوارزمية فيسبوك لإظهار المحتوى والإعلانات غامضةً بعض الشيء، ولكنها تعتمد على إعجاباتك وعادات المشاهدة. الخلاصة تعلمت الآن أن الشيفرة البرمجية من طرف الخادم تعمل على خادم ويب وأن دورها الرئيسي هو التحكم في المعلومات المُرسَلة إلى المستخدم، بينما تتعامل الشيفرة البرمجية من طرف العميل مع بنية تلك البيانات وعرضها للمستخدم، كما يجب أن تفهم أن الشيفرة البرمجية من طرف الخادم مفيدةٌ، لأنها تتيح إنشاء مواقع الويب التي تقدم معلومات مُخصَّصة لكل مستخدم بكفاءة ولديها فكرةٌ جيدةٌ عن بعض الأشياء التي يمكن أن تكون قادرًا على تطبيقها عندما تكون مبرمجًا من طرف الخادم. أخيرًا، يجب أن تفهم أنه يمكن كتابة الشيفرة البرمجية من طرف الخادم باستخدام عدد من لغات البرمجة وأنه يجب عليك استخدام إطار عمل ويب لتسهيل تلك العملية. سنساعدك في المقال التالي على اختيار أفضل إطار عمل ويب لموقعك الأول، وسنأخذك في جولة حول التفاعلات الرئيسية بين العميل والخادم بمزيدٍ من التفاصيل. ترجمة -وبتصرُّف- للمقالين Server-side website programming first steps و Introduction to the server side. اقرأ أيضًا المقال السابق: إعداد البيئة للاختبارات الآلية في مشاريع الويب للتوافق مع المتصفحات المدخل الشامل لتعلم تطوير الويب وبرمجة المواقع أساسيات إنشاء موقع ويب باستخدام تعليمات HTML رفع ملفات موقع الويب إلى خادم على الإنترنت
    1 نقطة
  12. شبكة الحاسب ببساطة هي مجموعة من أجهزة الحاسب التي تتصل ببعضها وتستخدم موارد مشتركة بينها، وتكون تلك الموارد المشتركة إما بيانات أو أجهزة حقيقية مثل الطابعات وأجهزة العرض والتسجيل أو الماكينات والآلات التي تحمل رقاقات حاسوبية بداخلها متصلة بنفس الشبكة. وصحيح أن مصطلح شبكة الحاسب على إطلاقه يشير إلى الشبكة العالمية التي نعرفها بالإنترنت، إلا أن مفهوم الشبكات أوسع من ذلك بكثير، كما سنرى في الفقرات التالية. تعريف شبكة الحاسب شبكة الحاسب computer network مؤلفة من كلمتين، الأولى شبكة ومعناها لا يخفى على أي قارئ عربي وهي بحسب قاموس صخر المعاصر ربط بين شيئين أو عدة أشياء أو يطلق على كل متداخل متشابك وتحصر كلمة الحاسب الثانية بربط الحواسيب مع بعضها بعضًا. ظهرت أول صورة من صور الحواسيب المتصلة ببعضها في أواخر الخمسينات من القرن الماضي في صورة شبكة من الحواسيب التي استُخدمت في أحد أنظمة الرادار في الجيش الأمريكي، وقد استُخدمت خطوط الهاتف العادية في نقل البيانات بواسطة جهاز مودم تجاري من شركة AT&T. تبع هذه المحاولة في تنظيم الاتصال بين الحواسيب البعيدة عن بعضها عدة محاولات أخرى في الشركات الكبرى والجامعات، وكان أغلب تلك المحاولات يحاول تنظيم الموارد المتاحة للشركة أو المؤسسة وتسهيل تطوير البيانات واتخاذ القرار من خلال تنظيم حركة تدفق البيانات بين تلك الحواسيب البعيدة. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن فوائد شبكات الحاسب لعل فوائد الشبكات بدأت تتضح مما لنا نحن كمستخدمين عاديين أو كشركات، وبدت أهمية شبكات الحاسب في نقل البيانات والمعلومات بين الدول والمؤسسات والأفراد، وكذلك في التحكم في الأجهزة والآلات عن بعد لتسهيل مراقبتها، وفيما يلي أهم تلك الفوائد: مشاركة الملفات: كما في حالة الشركات والمؤسسات، بل وفرق العمل التي تعمل عن بعد. مشاركة الموارد: كما في حالة مشاركة الطابعات، والحواسيب القوية لإجراء عمليات محاكاة أو إخراج للتصاميم الهندسية أو الإبداعية، أو العمل على برامج عمل سحابية مثل مستندات جوجل أو برامج تصميم مشترك سحابية. التواصل: حيث يستطيع المستخدمون للشبكة أن يرسلوا الرسائل والبيانات والوسائط فورًا ويستقبلون بيانات وردودًا مشابهة من غيرهم من المستخدمين في نفس الوقت. تقليل التكلفة: كما رأينا في حالة الموارد المشتركة مثل الطابعات أو الحواسيب الكبيرة أو توفير أجهزة وهمية للموظفين للعمل عليها أو خوادم وهمية لاستضافة المواقع. زيادة كفاءة المعدات وسلامة البيانات: بما أن العتاد المستخدم للشبكات يكون في الغالب ذا جودة عالية ويقوم عليه فريق صيانة متخصص، فتقل احتمالات تعطل العتاد أو خسارة البيانات نتيجة النسخ الاحتياطية المنظمة التي تُنفذ للبيانات، على عكس الحواسيب الشخصية للمستخدمين. عيوب شبكات الحاسوب رغم المنافع التي تطغى على بيئة الشبكات إلا أنها تأتي بعيوب قد يكون بعضها خطيرة وقد يكون بعضها الآخر مجرد أعباء إدارية، وفيما يلي بعض تلك العيوب لشبكات الحاسب: تحتاج شبكات الحاسب إلى الاستثمار في بنى تحتية باهظة التكلفة عند بداية إنشائها، وكلما زاد حجم الشبكة زادت التكاليف كثيرًا. تحتاج شبكات الحاسب إلى مراقبة على مدار الساعة لتجنب تعطل أجزائها أو فشل عمليات توصيل الطاقة إليها أو تبريد مراكز البيانات، أو اختراقها داخليًا من العاملين فيها أو خارجيًا من مخربين أو مخترقين عن بعد. سهولة انتقال الفيروسات والبرامج الضارة لكل الأجهزة المتصلة بالشبكة إن أصيب أحدها. المخاطر الأمنية التي قد تحصل نتيجة هجمات قد تأتي داخليًا من أحد الأجهزة المتصلة بالشبكة أو خارجيًا عبر اختراق الشبكة والأجهزة المتصلة بها. مكونات شبكات الحاسب الرئيسية صحيح أننا ذكرنا أن الشبكات الحاسوبية عبارة عن حواسيب متصلة ببعضها، لكن الأمر فيه تفصيل أكثر من هذا، فليست كل تلك الحواسيب عامة الأغراض وتشبه الحاسوب الذي لدى المستخدم العادي، بل يكون بعضها مخصصًا لوظيفة أو أكثر داخل تلك الشبكة بحيث يخدم بقية مكونات الشبكة دون أن يُستخدم هو نفسه لأي غرض آخر، بل قد يُحظر الوصول إليه أحيانًا إلا لفئات محدودة من الأشخاص لعدة أسباب أهمها الحفاظ على أمان الشبكة، وهكذا فإن المتطلبات اللازمة لإنشاء شبكة حاسوبية قد تكون أكثر تعقيدًا من مجرد توصيل بعض الأجهزة ببعضها. الخوادم Servers: أساس شبكات الحاسب لعل أجهزة الخوادم servers هي القلب النابض لشبكات الحاسوب، وهي حواسيب توضع فيها الموارد التي يراد الوصول إليها عن بعد من بقية مكونات الشبكة، وهي حواسيب أقوى من الحواسيب العادية بعشرات المرات من حيث قوة المعالجة وعدد المعالجات ومساحات التخزين والذواكر العشوائية، وتوجد في العادة في غرف مخصصة آمنة تسمى مراكز بيانات data centers. فحين تدخل إلى موقع تتصفحه مثلًا (والموقع هو جزء من شبكة الإنترنت العالمية) وليكن يوتيوب، فإنك تكتب عنوان الموقع في المتصفح، فيذهب بك إلى يوتيوب لتتصفح مقطعًا تريد مشاهدته، فهذا المقطع مخزن على خوادم شركة يوتيوب، وكذلك موقع يوتيوب نفسه مخزّن على خوادم سريعة بالغة القوة لتتحمل آلاف المقاطع التي تُرفع إليه وملايين المستخدمين الذين يتصفحونه في نفس الوقت. وتوجد أنواع عديدة من الخوادم يختص كل منها بمهمة أو عدة مهام، وأشهر تلك الأنواع ما يلي: خوادم أسماء النطاقات Domain Name Servers خوادم التطبيقات Application Servers خوادم الويب Web Servers خوادم الملفات File Servers خوادم البريد Mail Servers خوادم أسماء النطاقات Domain Name Servers وهي الخوادم التي تحتوي على عناوين المواقع التي تتصفحها، فإذا استخدمنا مثال يوتيوب السابق، فإنك تكتب Youtube.com مثلًا ثم تضغط زر الإدخال Enter ليرسل المتصفح الطلب إلى الشبكة، فيمر على خادم DNS الذي يمثل دفتر جهات الاتصال للشبكة وهي هنا شبكة الإنترنت، فيرسل بدوره الطلب إلى العنوان المقابل لهذا النطاق أو الموقع -youtube.com-، ويكون في الغالب مجموعة من الأرقام مثل 192.0.2.44. خوادم التطبيقات Application Servers تُحفظ بعض التطبيقات البرمجية على خوادم بعيدة ليتصل بها المستخدمون من حواسيبهم أينما كانوا، وتسمى الخوادم التي تُحفظ عليها باسم خوادم التطبيقات Application Servers، وتُستخدم مثل تلك التطبيقات في الغالب داخل الشركات التي تريد للموظفين أن يستفيدوا من تلك التطبيقات المركزية دون الحاجة إلى تثبيت التطبيق على حاسوب كل موظف، وهذا مفيد في تجميع بيانات العمل للموظفين في فريق واحد مثلًا ومشاركتها والتعديل عليها مباشرة دون الانتظار لرفع تلك البيانات من حاسوب كل موظف. كذلك تُستخدم في حالة الشركات التي تقدم خدمات بعيدة لمستخدميها بحيث يتصل المستخدم بالتطبيق الموجود بخوادم الشركة من أي جهاز متصل بالإنترنت دون أن يكون التطبيق مثبتًا على حاسوبه الشخصي، ومثل تلك التطبيقات تسمى تطبيقات ويب web apps لأنها تعمل في بيئة الويب في الغالب ويصل المستخدم إليها عن طريق المتصفح. خوادم الويب Web Servers خوادم الويب هي أشهر أنواع الخوادم التي تُستخدم في الوصول إلى الإنترنت، وهي المسؤولة عن نقل البيانات المخزنة في مواقع الإنترنت إلى حاسوبك أو جهازك الذي تتصفح منه، عن طريق بروتوكولات نقل بيانات مثل HTTP. خوادم الملفات File Servers تُستخدم خوادم الملفات في تخزين البيانات والملفات والبرامج داخل المؤسسات مثلًا للسماح بنقل تلك الملفات ومشاركتها بسرعة وأمان بين العاملين في تلك المؤسسة. خوادم البريد Mail Servers يخزن خادم البريد الرسائل البريدية الخاصة بالمستخدمين الذين يستخدمون خدمات بريدية مثل Gmail مثلًا، كي يتمكنوا من الوصول إليها دون الحاجة إلى استخدام برمجيات خاصة على أجهزتهم، حيث تكون تلك البرمجيات في خوادم البريد نفسها. توجد أنواع أخرى من الخوادم غير التي ذكرناها أعلاه، لكن هذه هي الأشهر والتي قد يتعامل المستخدم معها بشكل أو بآخر أثناء حياته اليومية داخل العمل وخارجه. المبدِّل Switches المبدِّل switch هو جهاز يربط أجزاء الشبكة ببعضها بواسطة أسلاك إيثرنت Ethernet أو فايبر في الغالب، فتتصل به الحواسيب الموجودة داخل مبنى مثلًا بالشبكة الموجودة داخل ذلك المبنى، ويكون هو المسؤول عن تنظيم التواصل بين تلك الحواسيب، ولمزيد من التفاصيل حول المبدل ووصله بالشبكة، يمكنك الرجوع إلى مقال شبكة الإيثرنت المبدلة Switched Ethernet. الموجِّه Router لعل هذا الجهاز الصغير هو أكثر مكونات الشبكات التي يتعامل معها المستخدم وإن كان تعاملًا غير مباشر، يليه جهاز نقطة الاتصال Access Point. يُستخدم الموجِّه أو الراوتر في الاتصال بشبكات متعددة، كما يُستخدم لمشاركة اتصال إنترنت واحد مع عدة حواسيب وأجهزة أخرى لتقليل تكلفة اتصال كل منها على حدة بالشبكة، سواء عن طريق أسلاك أو هوائيًا، ولا يكاد يخلو منزل في يومنا هذا من وجود راوتر فيه للاتصال بشبكة الإنترنت عبر مزود خدمة الإنترنت. نقطة الاتصال Access Point تُستخدم نقاط الاتصال، وهي أجهزة شبيهة بأجهزة الراوتر- لتوصيل الحواسيب والهواتف والأجهزة الأخرى بالشبكة اتصالًا لاسلكيًا، عن طريق الاتصال سلكيًا بالراوتر ثم بث إشارة الشبكة لاسلكيًا عن طريق هوائي صغير متصل بها. يمكن لتلك الأجهزة وكذلك أجهزة الراوتر أن تهيأ لتُستخدم كمكررات لإشارات الشبكات repeaters، بحيث تلتقط إشارة الشبكة لاسلكيًا وتنقيها من التشويش ثم تعيد توليدها وبثها مرة أخرى بقوة أكبر، وذلك من أجل توسيع نطاق البث للشبكة. العملاء/الأجهزة العميلة Clients الأجهزة العميلة أو الوكيلة في بيئة الشبكات هي الحواسيب والأجهزة الأخرى التي تتصل بالشبكة ومواردها المختلفة من خوادم وغيرها، وتلك الأجهزة العميلة تمثل مستخدمي الشبكات، حيث تستطيع إرسال واستقبال الطلبات من الخوادم. هل ترغب في بناء شبكة موثوقة وآمنة لشركتك؟ احصل على شبكة عالية الأداء مع مهندس شبكات خبير من مستقل أضف مشروعك الآن مكونات أخرى لشبكات الحاسب إضافة إلى ما سبق، توجد مكونات وأجهزة أخرى تمثل أجزاء لا غنى عنها للشبكة، وقد لا تكون بالضرورة أجهزة مادية، لكن المستخدم العادي قد لا يحتك بها مباشرة أو ليس له وصول إليها، وبعض تلك المكونات ما يلي: بروتوكولات شبكات الحاسب البروتوكول Protocol هو مجموعة من القواعد التي تحكم التواصل بين جهتين في الشبكة، وتكون بعض تلك البروتوكولات قياسية مثل بروتوكولات IP و TCP و FTP وغيرها. عنوان الوصول للجهاز Mac Address يمثل عنوان الماك -عنوان التحكم في الوصول إلى الوسائط Media Access Control Address- معرِّفًا وعنوانًا فريدًا لكل جهاز يتصل بالشبكة. المنفذ Port المنافذ هي قنوات منطقية يرسل المستخدمون البيانات من خلالها إلى التطبيقات أو يستقبلون بيانات منها، ويُعرَّف كل تطبيق من تلك التطبيقات باستخدام رقم المنفذ الذي يعمل من خلاله. وسائل نقل البيانات في شبكة الحاسب إذا كانت بيانات التطبيقات والمواقع والشركات تُخزَّن على خوادم وحواسيب بعيدة، وكان المستخدمون يصلون إلى تلك الخوادم من خلال حواسيبهم وهواتفهم وغيرها من الأجهزة، فكيف تُنقل تلك البيانات؟ تُرسل البيانات بطريقتين أساسيتين، إما نقلًا سلكيًا أو غير سلكي، والنقل السلكي يكون دومًا أسرع وأفضل، لكنه يحتاج إلى بنى تحتية أكثر كلفة، ويتم النقل فيه عبر كابلات من الألياف الزجاجية Fiber glass، خاصة في حالة الكابلات العابرة للمحيطات التي تربط بين القارات المختلفة، وكذلك باستخدام كابلات نحاسية مؤمنة ضد التشويش على الإشارات، تكون في صورة كابلات الإيثرنت التي نعرفها ذات الثمانية أطراف، أو الكابلات المحورية Coaxial، أو أسلاك الهاتف العادية كما كان يحدث قديمًا في اتصال Dialup. أما الاتصالات اللاسلكية فتكون باستخدام هوائيات Antennas لبث الاتصال بالشبكة المراد الاتصال بها، وتختلف المسافة التي يمكن الاتصال بالشبكة من خلالها وكذلك عدد المستخدمين الذين يمكنهم الاتصال بتلك الشبكة على نوع الهوائي المستخدم وسعة الشبكة نفسها. الجدار الناري Firewall الجدار الناري قد يكون جهازًا ماديًا أو برنامجيًا يُستخدم في التحكم في الشبكة وأمانها وقواعد الوصول إليها، وتوضع كحماية للحاسوب وما يتصل به من الشبكات الآمنة -مثل شبكات المنازل والشركات- من الاتصالات الخارجية غير المأمونة مثل الإنترنت، وتهيأ لحظر الطلبات من المصادر غير المعرَّفة للشبكة الآمنة، فهو مثل الباب الذي يفصل المنزل الداخلي الخاص عن المحيط الخارجي العام. زادت أهمية الجدر النارية كثيرًا بعد تطور الإنترنت ووصوله إلى يد كل مستخدم من خلال الهواتف الذكية وأجهزة إنترنت الأشياء، حيث زادت خطورة الهجمات السيبرانية التي قد تستهدف أولئك المستخدمين بحيث يمكن التلاعب بأجهزتهم وسرقة بياناتهم وإغلاق تلك الأجهزة لطلب فدية، كما يحدث كل مدة في حالة فيروسات الفدية التي تصيب أجهزة المستشفيات والمؤسسات المهمة والشركات الكبرى. أو حتى على مستوى الشبكات الموجودة في المنازل العادية حيث انتشرت أنظمة البيوت الذكية التي يُمكن التحكم فيها عن بعد، فيستطيع المخرب تنفيذ هجمة على المنزل بتغيير درجات الحرارة أو قطع الكهرباء أو الاتصالات أو التلاعب بالأجهزة المنزلية المتصلة بالشبكة. أنواع شبكات الحاسوب توجد عدة أنواع من الشبكات تُصنف وفقًا للحيز الجغرافي الذي تخدمه وعدد الحواسيب المتصلة فيها، وفيما يلي بعض أشهر أنواع هذه الشبكات: الشبكة الشخصية PAN‎ الشبكة المحلية LAN الشبكات واسعة النطاق WAN الشبكات الإقليمية MAN 1. الشبكة الشخصية PAN‎ الشبكات الشخصية Personal Area Network وتختصر إلى PAN هي الشبكات التي تتكون من أجهزة تتبع شخصًا واحدًا، مثل الحاسب الخاص به وهاتفه وأجهزته اللاسلكية المتصلة عبر البلوتوث، ويكون نطاقها محدودًا بالتبعية، وقد تتصل بالإنترنت لاسلكيًا. 2. الشبكة المحلية LAN الشبكات المحلية Local Area Network وتختصر إلى LAN تتكون الشبكات المحلية من مجموعة من الحواسيب والأجهزة الأخرى التي تتصل بشبكة واحدة على نطاق مبنى أو عدة مباني متجاورة تمثل مؤسسة واحدة مثل شركة أو مستشفى أو منزل أو غيره، وتكون الشبكة مقصورة على الأجهزة التي داخل تلك المباني، أي لا يمكن الوصول إليها من خارج الأجهزة المتصلة بها أو من خارج نطاق تلك الشبكة. تُستخدم تلك الشبكات في أغراض نقل الملفات واستخدام الأجهزة عن بعد مثل الطابعات والماسحات الضوئية وغيرها، ولعل أبسط صورها هو حاسوب متصل بطابعة مثلًا. لا يزيد عدد الأجهزة المتصلة في الشبكات المحلية عن 5000 جهاز. 3. الشبكات واسعة النطاق WAN الشبكات واسعة النطاق Wide Area Network وتختصر إلى WAN تمثل عدة شبكات محلية متصلة معًا، لكنها تمتد على نطاق جغرافي أكبر، كما في حالة الشركات الكبرى. تُعد شبكة الإنترنت أحد أمثلة الشبكات واسعة النطاق WAN العامة، أي التي يصل إليها كل أحد، على عكس الشبكات الواسعة التي تكون مقصورة على المؤسسات والشركات. 4. الشبكات الإقليمية MAN تنتشر الشبكات الإقليمية Metropolitan Area Network وتختصر إلى MAN على نطاق أوسع من سابقتها، حيث تمتد خلال المدن الكبيرة، وتمتد على نطاق يصل إلى خمسين كيلومترًا مثلًا، وقد تشمل شبكات LAN أو WAN، إضافة إلى شبكات أخرى متصلة عبر تقنيات الاتصال اللاسلكية الهوائية، مثل شبكات الهواتف الخليوية المتصلة عبر تقنيات الجيل الثاني والثالث. تتصل الشبكات الإقليمية في الغالب عبر كابلات ألياف زجاجية بسبب حاجتها إلى نقل البيانات بسرعات عالية. امتلك شبكة حاسوب اعتمادية وآمنة لأعمالك احصل على حلول شبكات متقدمة وسريعة بالاستعانة بأفضل خدمات الشبكات على خمسات اطلب خدمتك الآن خاتمة تُبنى التقنيات الحديثة الآن من حواسيب وشركات وبنى تحتية أحيانًا وأنظمة حكومية باستخدام شبكات الحاسب كقواعد أساسية لها، فصارت جزءًا لا يتجزأ من حياتنا اليومية سواء استخدمناها استخدامًا مباشرًا أم استفدنا من أحد تطبيقاتها. ولا يسع أحدنا اﻵن أن يجهل أبسط مبادئ علوم الحاسب التي بُنيت عليها تلك الشبكات من أجل فهم طبيعة عملها والاستفادة المثلى منها سواء في بيئة العمل أو المنزل، وكذلك تجنب مخاطرها وإغلاق ثغراتها التي قد يدخل المخربون منها. اقرأ أيضًا أمثلة عن أنظمة أمن الشبكات الحاسوبية مدخل إلى شبكات الحواسيب: مصطلحات وفهم طبقات الشبكة المتطلبات اللازمة لبناء شبكة حاسوبية أنواع شبكات الحاسب
    1 نقطة
  13. منذ بداية ظهور الشبكة العنكبوتية تغيرت حياتنا تغيرًا جذريًا سواء كنا مستهلكين أو مُنتجين اضطررنا لنقل جزء من حياتنا أو أعمالنا إلى هذه الشبكة وسرعان ما أصبحت الشبكة جزءًا رئيسيًا من حياتنا اليومية ومن أنشطتنا التجارية أيضًا، اقتصر الأمر في البداية على الحواسيب ولم تحدث القفزة الكبيرة التي عززت اندماج الإنترنت في عصرنا الحالي إلا عندما تطورت صناعة أجهزة الهواتف المحمولة وانتشرت بأيدي جميع المستهلكين فمنذ أن أعلن ستيف جوبز عن تحفته في عام 2007 وهو جهاز الآيفون ثم انتقلت صناعة الهواتف المحمولة من مجرد جهاز مخصص للاتصالات والتواصل إلى حاسوب شخصي مصغّر قادر على أداء العديد من المهام والوظائف ولكن الأهم من ذلك عرض الإعلانات! عندما أثبت ستيف جوبز بأنه يمكننا تطوير جهاز حاسوب بحجم كف اليد لم تتغير صناعة الأجهزة الذكية فحسب بل نشأ سوق جديد وهو سوق الأجهزة القابلة للارتداء ليظهر لدينا العديد من الأجهزة الذكية مثل النظارات والساعات والألبسة وأجهزة مراقبة الصحة والكثير من الأجهزة الأخرى كما تطورت الأجهزة الموجودة في الأسواق مثل الشاشات الذكية وأدوات المنزل الذكي. احتوت جميع الأجهزة الذكية على نظام تشغيل يخزن البيانات ويعالجها ويتتبع بيانات المستخدمين ويعرض بعضها إعلانات تناسب اهتماماتهم. ومع وجود هذا الكم الكبير من الأجهزة الذكية والمواقع والشبكات الاجتماعية أدى ذلك إلى توليد بيانات كبيرة جدًا لأنه في الحقيقة كل حركة حرفيًا يمكن أن تُسجل وتحفظ في قاعدة البيانات فمثلًا سواء كنت جالسًا أما تلفازك الذكي وتقلب القنوات أو ذاهبًا للركض وبيدك ساعة ذكية تراقب حركتك أو حتى عالقًا في سيارتك في وسط زحمة المرور خانقة ومشغلًا ميزة التتبع الجغرافي GPS، فإنك في كل نشاط تقريبًا تولّد بيانات يمكن استثمارها والاستفادة منها. هذه الوفرة من البيانات غيرت طبيعة المنافسة لطالما استفاد عمالقة التكنولوجيا من تأثير الشبكة فمثلًا كلما زاد عدد مستخدمي شبكة فيسبوك، زادت جاذبية الاشتراك بهذه شبكة. الأمر الذي يساعد على جمع المزيد من البيانات، وبالتالي سيكون لدى الشركة مجال أكبر لتحسين منتجاتها، والذي بدورها تجذب المزيد من المستخدمين وتضاف المزيد من البيانات وهكذا دواليك. على سبيل المثال، تجمع شركة تسلا البيانات من سياراتها الذاتية مثل معلومات حول السرعة وسجل الشحن والصيانة ومعلومات متنوعة عن أداء النظام الكهربائي للسيارة والكثير من المعلومات الأخرى الدقيقة بالإضافة إلى جمع البيانات الخاصة بنظام القيادة الآلي ولكن مشاركة هذه البيانات اختياري وليس اجباري كما صرحت الشركة، ومن خلال هذه البيانات استطاعت الشركة تطوير ميزات تنافسية مثل تحسين نظام القيادة الذاتية وإمكانية توفير أكثر من 30% من كلفة التأمين على السيارة (في حال مشاركة معلومات القيادة) وفهم أفضل لأنماط القيادة التي يتبعها المستهلكين لذلك من السهل فهم كيف استطاعت شركة تسلا أن تصل بقيمتها السوقية إلى نصف قيمة شركة جنرال موتورز وذلك في عام 2013 بالرغم من أن تسلا لم تبع سوى 25 ألف سيارة خلال 10 سنوات بالمقابل باعت شركة جنرال موتورز 450 مليون سيارة على مدى 105 سنة من تاريخ الشركة، بالطبع لا يعود الأمر كله للبيانات ولكن لعبت البيانات جزءًا كبيرًا في تقييم الشركة وهذا يدل على قوة البيانات الضخمة وكيف يمكن أن تساعد الشركات على رفع قيمتها وحفر خنادق حولها لتجنب وصول الشركات المنافسة إليها وإلى عملائها. ولكن أين تتجمع كل هذه البيانات؟ وهل تخزن جميعها وتستثمر؟ في الحقيقة تعد عملية تجميع البيانات وتنقيتها وفرزها واستخلاص المناسب منها من أصعب العمليات يمكنك تخيل الأمر على أن البيانات هي نفايات وموجودة في مكب نفايات عملاق، كيف يمكننا الاستفادة منها؟ في البداية نحتاج إلى تصميم مكب النفايات ليناسب النفايات الموجودة فيه وهذه هي عملية تصميم قواعد البيانات وبعد أن وضعنا النفايات في المكب سنحتاج إلى آلات لفرز هذه النفايات؟ وهنا يأتي دور عمليات تنقية البيانات وتنقيحها وحذف المكرر منها …إلخ، كلما اعتنينا بطريقة تصميم قواعد البيانات وطرق تنظيفها استفدنا أكثر من هذه البيانات وبالتأكيد كلما حسنا من أي خطوة في هذه السلسة مثل طريقة جمع البيانات من الأساس سهلت الخطوات التي تليها. سنستعرض في هذا المقال أهمية البيانات في عصرنا الحالي كمجال دراسي واستثمار لأصحاب الشركات على المدى الطويل وسنتعرف على خطوات تصميم قاعدة بيانات وما هي الوظائف المرتبطة بقواعد البيانات؛ وسنتبع التدرج الآتي في عرض عناصره: البيانات كمحرك رئيسي للتطوير ما هو تصميم قواعد البيانات؟ التخصصات المرتبطة بقواعد البيانات من أين أبدأ بتعلم تصميم قواعد البيانات؟ التخصص في قطاعات البيانات التوظيف وفرص العمل في تخصصات البيانات اقتصاد البيانات Data Economy البيانات كمحرك رئيسي للتطوير كلما زادت كمية البيانات التي تجمعها الشركات عن مستخدميها زادت قوة هذه الشركات وتحسنت طريقة فهمها لهم لأنه في الواقع أظهرت لنا البيانات السلوك الحقيقي للمستهلكين مثلًا في مجال التجارة الإلكترونية وبأن قرارات الشراء الخاصة بهم يمكن جدًا ألا تكون ناجمة عن تخطيط ودراسة وإنما تأثيرات خارجية لا علاقة لها بالمنتج أو الجودة أو السعر بطريقة مباشرة (لمزيد من المعلومات حول القرارات اللاعقلانية للمستهلكين ننصح بقراءة مقال مدخل إلى سلوك المستهلك). لا يتوقف الأمر عند ذلك فحسب بل إن خوارزميات الذكاء الاصطناعي Artificial Intelligence وتعلم الآلة Machine Learning تستخلص وتحلل وتستنج معلومات أكبر من حجم البيانات أحيانًا، ويمكن أن تتنبأ الخوارزميات بالوقت الذي يكون فيه العميل جاهزًا للشراء، أو عندما يحتاج محرك السيارة الذكية إلى الصيانة أو عندما يكون الشخص معرضًا لخطر الإصابة بمرض ما عندما تشير ساعته الذكية إلى اضطراب في دقات القلب، ولكن لنعود قليلًا للوراء لنرى الصورة الكبيرة للأمر ونفهم كيف حدث ذلك، وهنا لا بدّ لنا من طرح بعض الأسئلة: كيف صُممت قواعد البيانات لتتحمل هذه الكميات الكبيرة من البيانات؟ ما هي الطرق المستخدمة في التصميم؟ هل تصميم قاعدة بيانات لشركة سيارات مثلًا يختلف عن تصميم قاعدة بيانات لمحل تجاري؟ هل يجب تعهيد عملية تصميم قواعد البيانات للمختصين؟ ما هي الاستثمارات المرتبطة بقاعدة البيانات؟ كيف تؤثر قواعد البيانات بقرارات الشركات؟ من هم الموظفون الذين يمكن أن نوظفهم لتحقيق أكبر استثمار لقواعد البيانات الخاصة بنا؟ هل ستحقق قواعد البيانات العائد على الاستثمار الذي وضعناه بها؟ شكلت هذه الأسئلة وغيرها عقبة في وجه الشركات الناشئة ووضعتها في موقف صعب لأن تصميم قاعدة بيانات تعمّر في هذا الزمن المتسارع يتطلب جهدًا كبيرًا ودراسة مفصلة ولكن لحسن الحظ أن الدليل بين أيدينا ويمكن تطبيقه. هيا بنا لنتعرف على خطوات تصميم وبناء قاعدة بيانات بالتفصيل. ما هو تصميم قواعد البيانات؟ في أي نظام تراه أعيننا (سواء موقع أو متجر إلكتروني أو أي نظام إلكتروني) يوجد مرحلة أولية تشترك بها جميع الأنظمة وهي تصميم قواعد البيانات في هذه المرحلة نخطط لما ستكون عليه الجداول والأعمدة التي تحتويها وأنواع البيانات فيها والعلاقات بين الجداول والقيود المحددة لها وهكذا، ولذلك تحتل مرحلة تصميم قاعدة بيانات أهمية كبيرة في أي نظام ولا بدّ من إجراء تصميم متين ومناسب لكي نستطيع تطويره في المستقبل. تعد قواعد البيانات Database جزءًا من منظومة معلوماتية أكبر تدعى نظام المعلومات Information System والتي هي مجموعة متكاملة من المكونات لجمع البيانات وتخزينها ومعالجتها ولتوفير المعلومات والمعرفة والمنتجات الرقمية. تعتمد الشركات على أنظمة المعلومات لتنفيذ عملياتها وإدارتها، والتفاعل مع عملائها ومورديها، والمنافسة في الأسواق، وتتكون أنظمة المعلومات من الأجهزة والبرمجيات والبيانات والأشخاص والعمليات. تتكامل أنظمة المعلومات مع قواعد البيانات لتشكل لدينا نظامًا معلوماتيًا متكامل الوظائف، تتشابه دورة حياة تطوير الأنظمة Systems Development Life Cycle (ويشار إليه اختصارًا SDLC) مع دورة تطوير قواعد البيانات Database Life Cycle (ويشار إليها اختصارا DBLC)، وهي عملية مستمرة لإنشاء وتصميم قواعد البيانات ونمذجتها وتحسينها وتطويرها وصيانتها. في الحقيقة هنالك العديد من الأطر المقترحة لدورة تطوير قواعد البيانات لن نناقش الفروقات بينها وإنما سنشرحُ أعم إطار مقترح والذي تكون خطواته على الشكل التالي: تحليل متطلبات البيانات Data Requirements Analysis تصميم قاعدة البيانات Database Design 3.نمذجة قاعدة بيانات Database Modeling تنفيذ قاعدة البيانات Database Implementation اختبار قاعدة البيانات Database Testing التشغيل وإدارة قاعدة البيانات Database Operation صيانة قاعدة البيانات Database Maintenance 1. تحليل متطلبات البيانات Data Requirements Analysis تبدأ عملية تطوير قاعدة البيانات بتحليل عام لوظائف النظام الذي ستُبنى من أجله ومستخدمي هذا النظام، وطبيعة البيانات المطلوب تخزينها ومعالجتها، والتقارير المطلوب تسليمها في النظام أو المستندات الرسمية بين الأقسام الموجودة؛ لذلك من الضروري جمع الحقائق من خلال المقابلات والاستبيانات والملاحظات وفحص الوثائق المختلفة المعتمدة في الشركة أو أي نظام نحن بصدد تصميم قواعد بيانات له مثل النماذج والتقارير والمستندات الأخرى ذات الصلة، ويمكننا عندها تكوين نظرة أولية لما ستكون عليه قاعدة البيانات بصورة عامة. يجب تحديد الأهداف أو المشاكل التي نتوقع من النظام أو قاعدة البيانات حلها، ومن المرجح أن ينتج عن كل مشكلة قائمة مرتبطة بها من المشاكل. تتمثل مهمة المصمم في التأكد من أن أهداف نظام وقاعدة البيانات الخاصة به تتوافق مع تلك التي يتصورها صاحب الشركة والمستخدم (المستخدمون) النهائي، بالإضافة إلى ذلك يجب على المصمم الإجابة على الأسئلة التالية: هل سيشمل تصميم قاعدة البيانات الشركة بأكملها أو قسمًا واحدًا فقط؟ هل سيخدم النظام وظيفة واحدة لكل قسم أم كل الوظائف؟ هل ستتوسع قاعدة البيانات (أو النظام) ليضيف كل أقسام الشركة؟ هل سيتفاعل النظام مع أنظمة أخرى حالية أو مستقبلية في الشركة؟ هل سيشارك النظام البيانات مع أنظمة أو مستخدمين آخرين؟ ما هو المدة الزمنية المقدرة للتسليم؟ ما هي الميزانية المتاحة؟ تساعد الإجابة على هذه الأسئلة في معرفة النطاق والحدود الخاصة بالمشروع إذ يحدد نطاق النظام مدى حجم التصميم المطلوب لكي يعرف المصمم حجم البيانات التقديري. تساعد معرفة النطاق في تحديد هياكل البيانات المطلوبة ونوع الكيانات وعددها والحجم المادي لقاعدة البيانات وما إلى ذلك. يخضع النظام المقترح أيضًا لحدود تُعرف بالحدود الخارجية للنظام، مثل الوقت المتاح للتصميم والميزانية المتاحة. تؤثر النقاط السابقة في كيفية تصميم النظام وقاعدة البيانات المطلوبة وتتمثل مهمة المصمم في تحديد الخيارات الأفضل للنظام ضمن هذه القيود. 2. تصميم قاعدة البيانات Database Design هنالك عدة طرق لتصميم قواعد البيانات كل طريقة لها محاسنها ومساوئها يجب على المحلل النظام ومسؤول قواعد البيانات التحدث والعمل مع المستخدمين لتحديد ما هو مهم للمستخدمين ونتيجة لذلك تحديد البيانات التي يجب تخزينها في قاعدة البيانات. ما يفعله المحلل عادة هو إنشاء بعض النماذج الأولية من التقارير والواجهات الخاصة بالمستخدمين والنماذج لمساعدة المستخدمين على تصور الشكل الذي سيبدو عليه النظام وكيف سيعمل النظام، ومن أبرز طرق تصميم قواعد البيانات نذكر: تصميم قواعد البيانات من الأعلى إلى الأسفل Top-down Design تصميم قواعد البيانات من الأسفل إلى الأعلى Bottom-up design تصميم قواعد البيانات من أعلى إلى أسفل Top-down Design ويسمى أيضًا بنموذج التصميم التنازلي وتبدأ هذه الطريقة في التصميم من الأعم إلى الأخص. أي تبدأ بفكرة عامة عما هو مطلوب للنظام ثم تسأل المستخدمين النهائيين عن البيانات التي يحتاجون إلى تخزينها. سيعمل المحلل بعد ذلك مع المستخدمين لتحديد البيانات التي يجب الاحتفاظ بها في قاعدة البيانات، ويتطلب استخدام هذا الأسلوب أن يكون لدى المحلل فهمًا مفصلًا للنظام؛ لأنه في بعض الحالات يمكن أن يؤدي التصميم من أعلى إلى أسفل إلى نتائج غير مرضية لأن المحلل والمستخدمين النهائيين يمكن أن يفوتوا معلومات مهمةً وضرورية للنظام. تصميم قواعد البيانات من الأسفل إلى الأعلى Bottom-up Design ويسمى أيضًا بنموذج التصميم التصاعدي ويبدأ هذا النهج بالتفاصيل الدقيقة والمحددة للمشروع ويحاول أن يعمم الفكرة. يفحص محلل النظام في البداية جميع واجهات المستخدمين المطلوبة تنفيذها في النظام، بالإضافة إلى التقارير والمعلومات المطلوب عرضها وتخزينها ومعالجتها. سيعمل المحلل بطريقة عكسية من خلال التركيز على التفاصيل الدقيقة والانتقال تباعًا للتفاصيل الأكبر منها. لفهم الاختلافات بين هذين الأسلوبين لنأخذ بعض الأمثلة عنهما. فمثلًا في أنظمة التحليل الإحصائي يعكف المحللين على أخذ عينة بيانات صغيرة من المجتمع ومن ثم تعميم الفكرة على إجمالي عدد السكان المتبقي. كما يستخدم الأطباء أيضًا النهج التصاعدي إذ يفحصون أعراضًا معينة للمرض ثم يحددون المرض العام الذي تسببه هذه الأعراض، وبالمقابل من الأمثلة التي تتطلب نهجًا تنازليًا هي مهام إدارة المشاريع والمهام الهندسية عمومًا إذ يجب في البداية تحديد المتطلبات العامة قبل فهم التفاصيل الدقيقة فيجب على الشركات الهندسية المصنعة للسيارات اتباع نهج التنازلي لتحقيق المواصفات المطلوبة للسيارة. فمثلًا إذا كان المطلوب أن تبلغ تكلفة السيارة أقل من 17000 دولار أمريكي، وأن تقطع 29 ميلًا للغالون الواحد من البنزين، وتتسع لسبعة أشخاص، فهذه المتطلبات العامة يجب الاعتماد عليها أولًا لتلبية التصميم المتوافق معها والانتقال إلى التفاصيل الدقيقة لتصميم السيارة. يُنظر عادة للنهجان على أنهما متكاملان إذ كلاهما يوصف التفاعلات التي تحدث في النظام ولكن واحدة ستكون من المنظور الأعلى والأخرى من الأسفل وللمزيد من المعلومات حول كيفية تصميم قواعد البيانات ننصح بقراءة مقال أمثلة عملية عن كيفية تصميم قواعد البيانات. 3. نمذجة قاعدة بيانات Database Modeling هي عملية إنشاء نموذج بيانات للبيانات المراد تخزينها في قاعدة بيانات وتعد النماذج تمثيلًا مبسطًا لكائنات البيانات، والارتباطات والقواعد المختلفة الموجودة بينها، تعد نماذج البيانات تمثيلًا بسيطًا لوصف تراكيب البيانات المعقدة في الحياة العملية على شكل رسومات وأشكال دون التركيز على الجانب التقني وهي وسيلة لتوضيح الأفكار بين المصمم والمبرمج والمدير وجميع أعضاء الفريق. تساعد نماذج البيانات في تحديد الجداول العلائقية والمفاتيح الأولية والخارجية المطلوبة، كما توفر صورة واضحة للبيانات الأساسية ويمكن لمطوري قواعد البيانات استخدامها لإنشاء قاعدة بيانات فعلية، بالإضافة إلى ذلك تفيد نمذجة البيانات في تحديد البيانات المفقودة والمكررة مما يساعدنا على تقليل عمليات توحيد البيانات Normalization، ويساعد أيضًا على تطوير قاعدة البيانات وصيانتها وإصلاحها وسد الثغرات الموجودة فيها؛ لذلك يعد العمل على النماذج استثمارًا طويل الأمد بالنسبة للجهد والمال، ومن أشهر النماذج المستخدمة في تصميم قواعد البيانات والأنظمة نذكر: لغة النمذجة الموحدة Unified Modeling Language نموذج الكيان والعلاقة Entity-relationship Model لغة النمذجة الموحدة Unified Modeling Language ويشار لها اختصارًا UML‏، وهي لغة نمذجة رسومية تقدم صيغة لوصف العناصر الرئيسية للنظم البرمجية. تستخدم هذه اللغة لعمل رسوم تخطيطية لوصف برامج الحاسوب والأنظمة عمومًا وذلك من خلال توصيف العناصر المكونة لها أو خط سير العمليات الذي ينفذه البرنامج. تساعد هذه اللغة على إنشاء النماذج وتصميم نموذج متكامل لأي مشروع برمجي. يوجد نوعان رئيسيان من مخططات UML وهما: المخططات الهيكلية Structural Diagrams، والذي يحتوي بدوره على المخططات التالية: مخطط الأصناف Class Diagram. مخطط الحزمة Package Diagram. مخطط الكائنات Object Diagram. مخطط المكونات Component Diagram. مخطط الهيكل المركب Composite Structure Diagram. مخطط النشر Deployment Diagram. المخططات السلوكية Behavioral Diagrams، والذي يحتوي بدوره على المخططات التالية: مخطط النشاط Activity Diagram. مخطط التسلسل Sequence Diagram. مخطط حالات الاستخدام Use Case Diagram. مخطط الحالة State Diagram. مخطط الاتصال Communication Diagram. المخطط التفاعلي العام Interaction Overview Diagram. المخطط الزمني Timing Diagram. تهدف هذه المخططات المتنوعة على تمثيل أنواع عديدة من السيناريوهات والأنظمة وطرق التفاعل بين الكائنات. يمكن أن تكون بعض المخططات أقرب لمنهجية معينة من المخططات الأخرى مثل مخطط الكائنات أقرب للبرمجة كائنية التوجه إلا أنه عمومًا تهدف لغة النمذجة الموحدة إلى توصيف النظام بدون التطرق إلى طريقة تنفيذ البرمجيات. في المثال السابق لدينا نظام صراف آلي يحتوي على 7 أصناف Classes وهي: البنك Bank الزبون Customer جهاز الصراف الآلي ATM الحساب المجرد Account حساب التوفير (الإدخار) Saving Account حساب جاري Current Account إجراءات الصراف الآلي ATM Transactions نلاحظ أن هنالك علاقات تربط بين جميع الأصناف لكل تحدد كل علاقة طريقة تفاعل الأصناف مع بعضها بعضًا ويشير كل رمز إلى مصطلح أو مفهوم في البرمجة كائنية التوجه مما يساعد المطور على فهم النظام وتحويله إلى شيفرة برمجية مناسبة، وللمزيد من المعلومات عن هذا المخطط والرموز الموجودة به ننصحك بقراءة مقال مخططات الفئات (Class Diagram) في لغة النمذجة الموحدة UML. نموذج الكيان والعلاقة Entity-relationship Model وهو نموذج مجرد لوصف الأشياء المترابطة في مجال معين من المعرفة. يكثر استخدام هذا النموذج عند تمثيل قواعد البيانات وفي هندسة البرمجيات عند تمثيل متطلبات النظام الأولي، بالإضافة إلى ذلك يحتوي هذا النموذج على تفاصيل أقرب للمفاهيم المعلوماتية بالموازنة مع لغة التوصيف الموحدة، وعمومًا يتألف النموذج الكيان والعلاقة من المفاهيم الرئيسية التالية: الكيان Entity: وهي الجدول -أو الجداول- التي نحتاجها في قاعدة البيانات الخاصة بنا ويمكن أن تشير إلى جدول الطلاب، أو الدورات التعليمية، أو الكتب، أو الموظفين. السمات Attributes: وهي الحقائق أو الأوصاف الخاصة بالكيانات، وغالبًا ما تكون أسماء وتصبح أعمدة في الجدول. فمثلًا بالنسبة لكيان الطلاب يمكن أن تكون السمات هي الاسم الأول والاسم الأخير والبريد الإلكتروني والعنوان وأرقام الهواتف …إلخ. 3.العلاقات Relationship: وهي الارتباطات بين الكيانات وتوصف الأفعال العلاقات بين الكيانات. وهنالك خمسة أنواع من العلاقات وهي: علاقة واحد إلى واحد One to one Relationship أو ‎1:1 علاقة واحد إلى متعدد One to many Relationship أو ‎1:M علاقة متعدد إلى متعدد Many to many Relationship أو ‎M:M علاقة أحادية Unary Relationship علاقة ثلاثية n-ary عند نمذجة نظام من خلال نموذج الكيان والعلاقة يكون لدينا ثلاثة مستويات من التجريد وهي: نموذج البيانات المفاهيمي Conceptual Data Model. نموذج البيانات المنطقي Logical Data Model. نموذج البيانات المادي Physical Data Model. في البداية يعمل المحللون والمصممون على بناء نموذج مفاهيمي للبيانات لقاعدة البيانات المطلوبة ومن ثم يحولون النموذج المفاهيمي إلى منطقي ومن ثم إلى مادي وسنستعرض الفروقات بين هذه النماذج لفهم المراحل النمذجة التي تمر بها قاعدة البيانات، وللاسزادة والاطلاع على نموذج الكيان والعلاقة ننصحك بالاطلاع على مقال نموذج الكيان والعلاقة ER لتمثيل البيانات وتخزينها في قاعدة البيانات الذي يتناول بالتفصيل ويوضح كيفية بناءه. سنشرح سريعًا النماذج الثلاثة الخاصة بنموذج الكيان والعلاقة. 1. نموذج البيانات المفاهيمي Conceptual Data Model تبدأ عملية النمذجة من خلال بناء نموذج بيانات مفاهيمي بعرض منظم لمفاهيم قواعد البيانات وعلاقاتها، ويهدف هذا النموذج إلى إنشاء الكيانات وخصائصها وعلاقاتها بصورة عامة لذلك لا نجد في هذا المستوى من النمذجة أي تفاصيل متاحة حول بنية قاعدة البيانات الفعلية. عادة ما يبني هذا النموذج أصحاب الشركات التجارية، ومن خصائص نموذج البيانات المفاهيمي نذكر: يشرح معلومات أساسية ورؤية عامة لقاعدة البيانات أو المشروع. صُمم هذا النوع للأشخاص غير التقنيين من رواد الأعمال وأصحاب الشركات. طوّر هذا النموذج بطريقة مستقلة عن مواصفات الدقيقة لقاعدة البيانات. لن يشرح هذا النموذج أبدًا التفاصيل التقنية الدقيقة مثل سعة تخزين البيانات أو نوعية قواعد البيانات أو لغات البرمجة أو أنظمة إدارة قواعد البيانات Database Management Systems، وينصبُ تركيزه على تمثيل البيانات كما يراها المستخدم في العالم الحقيقي بدون الدخول للتفاصيل الدقيقة، ويمكن تنفيذها النموذج لاحقًا على أي نظام وقاعدة بيانات نريدها، ويكون النموذج الناتج مشابه للشكل التالي: 2. نموذج البيانات المنطقي Logical Data Model يستخدم نموذج البيانات المنطقية لتحديد هيكل عناصر البيانات وتعيين العلاقات فيما بينها، ويضيف نموذج البيانات المنطقي مزيدًا من المعلومات إلى عناصر نموذج البيانات المفاهيمية. يوفر هذا النموذج الأساس الأولي لتشكيل قاعدة البيانات للنموذج المادي. ومع ذلك، تظل بنية النمذجة عامة نسبيًا، ولن يتحدد في هذا المستوى من النمذجة المفاتيح الأساسية أو الثانوية بين الجداول، ومن خصائص نموذج البيانات المنطقية نذكر: يصف احتياجات البيانات لمشروع واحد ولكن يمكن أن يتكامل مع نماذج البيانات المنطقية الأخرى بناءً على نطاق المشروع. يصمم هذا النموذج ويطور بطريقة مستقلة عن نظام إدارة قواعد البيانات DBMS. يحتوي التصميم على سمات الكينونات الموجودة كأسماء بدون ذكر السعة أو النوع. تطبق عمليات التوحيد على النموذج لضبط عمليات تكرار البيانات. يحرص هذا النموذج على تجنب تكرار البيانات من خلال إجراء عملية التوحيد للوصول إلى النموذج الثالث 3NF على الأقل مع العلم أنه يوجد خمسة مراحل لعملية التوحيد، ويكون النموذج الناتج مشابه للشكل التالي: 3. نموذج البيانات المادي Physical Data Model نبني في هذه المرحلة الشكل النهائي للنموذج المقترح ويتطلب تصميم قاعدة البيانات المادية معرفة جميع التفاصيل الدقيقة ابتداءً من نظام إدارة قواعد البيانات DBMS وطريقة تنظيم السجلات وتنظيم الملفات واستخدام الفهارس …إلخ، يهدف هذا النموذج لتوفير تصميم قاعدة بيانات فعلي الذي يضمن أداءً مناسبًا، ومن خصائص نموذج البيانات المادية نذكر: يصف نموذج البيانات المادية الحاجة إلى البيانات لمشروع أو تطبيق واحد بالرغم من أنه يتكامل مع نماذج البيانات المادية الأخرى بناءً على نطاق المشروع. يحتوي نموذج البيانات على العلاقات بين الكيانات والتي ستصبح جداول. طوّر هذا النموذج لنسخة محددة من نظام إدارة قواعد البيانات أو طبقًا لتكنولوجيا محددة ما في المشروع. يجب أن تحتوي الأعمدة على أنواع بيانات دقيقة والقيم الافتراضية لبعض البيانات بحسب المطلوب. يحدد هذا النموذج المفاتيح الأساسية والثانوية والخارجية، والفهارس وملفات تعريف الوصول والتراخيص وما إلى ذلك. الهدف الرئيسي لتصميم نموذج المادي هو التأكد من أن كائنات البيانات التي يقدمها المصمم يمكن تمثيلها بدقة في نظام قاعدة البيانات المطلوب. ولمزيد من المعلومات حول طريقة نمذجة البيانات ننصح بقراءة مقال نمذجة البيانات وأنواعها في عملية تصميم قواعد البيانات. 4. تنفيذ قاعدة البيانات Database Implementation بعد اعتمادنا على التصميم المادي النهائي لقاعدة البيانات وتوضيح جميع أنواع البيانات المطلوبة في هذه المرحلة ننتقل إلى الخطوة التالية وهي تثبيت أنظمة إدارة قواعد البيانات المطلوبة على الخوادم ، وإنشاء قاعدة البيانات ونقل البيانات إليها، ويمكن أن تكون البيانات الأولية إما بيانات جديدة أو بيانات مستوردة من قاعدة بيانات قديمة، وعمومًا تتضمن هذه المرحلة النشاطات التالية: تثبيت نظام إدارة قواعد البيانات DBMS: مثل نظام MySQL أو MongoDB (تحدثنا في مقال مفصل عن الفرق بين MySQL و MongoDB ننصح بالاطلاع عليه) يمكن تثبيت النظام على خادم محلي أو استخدام خدمة قاعدة بيانات سحابية مثل Microsoft Azure SQL Database Service أو Amazon Relational Database Service (Amazon RDS)‎ أو Google Cloud SQL، يتيح هذا الجيل الجديد من الخدمات السحابية إنشاء قواعد بيانات يمكن إدارتها واختبارها وترقيتها بسهولة حسب الحاجة. ضبط الإعدادات: ضبط متغيرات الإعداد وفقًا للأجهزة والبرامج وظروف الاستخدام. إنشاء قاعدة البيانات والجداول: يمكن إنشاء قاعدة بيانات باستخدام لغة قاعدة البيانات القياسية، مثل لغة الاستعلام المهيكلة SQL الموجودة في نظام إدارة قواعد البيانات MySQL. بالإضافة إلى ذلك قدمت العديد من أنظمة إدارة قواعد البيانات DBMS ميزة الرسم التخطيطي لإنشاء قاعدة البيانات دون الحاجة إلى كتابة تعليمات يدوية، مثل أنظمة Microsoft SQL Server و Microsoft Access و Oracle وغيرها. أو يمكن استخدام حلول خارجية مثل الأداة Erwin وهي (Entity Relationship for Windows) و Embarcadero ER/Studio و SQL Power Architect وغيرها. تحميل البيانات إلى قاعدة البيانات الجديدة: يمكن أن نحتاج في بعض الأحيان إلى ترحيل البيانات أو نقلها من قواعد البيانات القديمة إلى الجديدة، وتتطلب هذه الخطوة دراسة وتخطيط دقيقين لتجنب خسارة البيانات. عندما تكون جميع البيانات من نفس النوعية مثل قاعدة البيانات العلائقية فيمكن أن تكون عملية نقل البيانات سريعة وفي حال كانت الأنواع مختلفة عندها سنحتاج إلى عملية تحويل البيانات قبل إدخالها إلى قاعدة البيانات الجديدة. تطبيق السياسات الأمنية على قاعدة البيانات: تجهيز وإعداد المستخدمين لبدء العمل وشرح المفاهيم الأمنية والخطوات اللازمة لتطبيقها (مثل الحرص على تسجيل الخروج من نظام قاعدة البيانات عند الانتهاء من العمل) بالإضافة إلى منح المستخدمين المختلفين الذين حددتهم حق الوصول المناسبة بناء على متطلباتهم. تنفيذ نظام النسخ الاحتياطي: يفضل أن يكون النسخة الاحتياطية في مخدم آخر وتجنب وضعها على نفس المخدم لأنه في حال حدوث إختراق فعندها سنخسر جميع البيانات. تهيئ هذه المرحلة قاعدة البيانات لعملية الاختبار النهائي قبل النشر. 5. اختبار قاعدة البيانات Database Testing اختبار قاعدة البيانات هو نوع من اختبار البرامج الذي يتحقق من المخطط والجداول والقوادح Triggers وسلامة البيانات واتساقها وجميع الأمور المتعلقة بها علمًا بأن القوادح هي إجراءات تُنفَّذ في الخلفية آليًا بعد كل عملية إضافة أو تعديل أو حذف على جدول ما، ويمكن أن يتضمن الاختبار إنشاء استعلامات معقدة لقياس كيفية استجابة قاعدة البيانات وقدرتها على معالجة الاستعلامات والتحقق من صحة استجابتها. يعد اختبار قاعدة البيانات مهمًا لأنه يضمن صحة قيم البيانات والمعلومات المخزنة فيها، ويساعد على تجنب فقدان البيانات وعدم الوصول غير المصرح به إلى المعلومات. يجب أن يكون لدى المختبرين معرفة جيدة بلغة الاستعلام SQL، ويمكن أن تتضمن أنشطة الاختبار ما يلي: اختبار صحة مخطط قاعدة البيانات. صحة تخزين البيانات في جداول قاعدة البيانات. أنواع الأعمدة وسعتها. المفاتيح الأساسية والثانوية والفهارس. صحة طريقة تنفيذ الإجراءات المرتبطة بالقوادح. التحقق من تكرار البيانات. كما يمكن إجراء اختبار الحمل Load Testing واختبار الإجهاد Stress Testing واختبار الأمان Security Testing واختبار سهولة الاستخدام Usability Testing واختبار التوافق Compatibility Testing وما إلى ذلك، إذ يساعد اختباري الحمل والإجهاد (يُعرف اختبار إجهاد البيانات أيضًا باسم اختبار التعذيب Torturous Testing أو اختبار التعب Fatigue Testing) على معرفة أداء قاعدة البيانات فمثلًا عندما يكون هنالك ضغطًا كبيرًا على قاعدة البيانات عندها يجب أن تتحمل قاعدة البيانات الكثير من الطلبات ويحب علينا أن نعرف فيما إذا كان هنالك نقطة ما ستنهار قاعدة البيانات عندها، إذ يساعد تحديد نقطة انهيار نظام قاعدة البيانات على معرفة محدودية النظام وإمكانياته وبالتالي جدولة التحديث اللازم له في المستقبل. كما يجب تكثيف الجهود لتجنب الإفراط في استخدام الموارد الموجودة في قاعدة البيانات. 6. التشغيل وإدارة قاعدة البيانات Database Operation تحدث مرحلة التشغيل عند اكتمال الاختبار والاستعداد النهائي لنشر قاعدة البيانات للاستخدام اليومي. يبدأ مستخدمو النظام في تشغيل النظام وتحميل البيانات وقراءة التقارير وما إلى ذلك، ومن الطبيعي جدًا أن تظهر المشاكل في هذه المرحلة، إذ يحتاج المسؤولون في هذه المرحلة إلى الإسراع في صيانة قاعدة البيانات، يذكر أن هناك العديد من الاستراتيجيات لنشر قاعدة البيانات وغالبًا ما يستخدم نهج النشر المحدود والذي يخفض عدد المستخدمين نسبيًا ولتكون عملية إصلاح الأخطاء سهلة نسبيًا، وبالرغم من كثرة عمليات الاختبار إلى أن المستخدمين غالبًا ما يجدون أخطاء لا تخطر على البال أثناء التطوير كما أن بعض الشركات أيضًا تنشر تطبيقًا تجريبيًا لكي يتجهز المستخدم لمواجهة الأخطاء بدون التأثير على علاقته بالعلامة التجارية هذا الأمر يساعد على حفاظ الشركة على سمعتها ومكانتها في الأسواق، وفي حال استقرار النظام وقاعدة البيانات ينشر التطبيق إلى بقية المستخدمين. ويمكن أن تتضمن هذه المرحلة ما يلي: مراقبة عملية تطبيق السياسات الأمنية على قاعدة البيانات والاطلاع على فهم الموظفين لحجم الخطورة الخاصة بالبيانات. مراقبة تنفيذ عمليات النسخ الاحتياطي والتحقق من صحة عملية النسخ الاحتياطي دوريًا. إحصائيات الوصول إلى قاعدة البيانات لتحسين الكفاءة وسهولة استخدام عمليات تدقيق النظام ومراقبة أداء النظام. تلخيص استخدام النظام الشهري أو ربع السنوي أو السنوي لأغراض إعداد الفواتير الداخلية أو الميزانية. في حال ظهور خطأ ما في قاعدة البيانات ننتقل عندها إلى عملية الصيانة. 7. صيانة قاعدة البيانات Database Maintenance تعد صيانة قاعدة البيانات جزءًا أساسيًا من عمليات تطوير قاعدة البيانات ولها أثر كبير على ديمومة النظام ككل لأن الصيانة الأولية لقاعدة البيانات تقينا من شر إعادة بناء القاعدة من جديد، تتضمن أنشطة الصيانة العديد من المهام المتنوعة، بالإضافة إلى ذلك عند تشغيل قاعدة البيانات وبدء الاعتماد عليها يراقب المسؤول عنها الأداء والسرعة والمشاكل التي يمكن أن تظهر في البداية لمعرفة فيما إذا حققت المعايير المطلوبة الجودة والسلامة. يجري مسؤولو قاعدة البيانات عمليات صيانة روتينية وتتضمن بعض أنشطة الصيانة الدورية المطلوبة ما يلي: الصيانة الوقائية (مثل عمليات النسخ الاحتياطي وتغيير كلمات المرور دوريًا). الصيانة التصحيحية (مثل تصحيح الأخطاء المكتشفة عند التشغيل وصيانة أنواع البيانات والفهارس). الصيانة التكيفية (مثل العمل على تحسين الأداء وإضافة الكيانات والسمات وما إلى ذلك). تخصيص أذونات الوصول وصيانتها للمستخدمين الجدد والقدامى (مثل إضافة صلاحيات مخصصة ودقيقة للمستخدمين وإزالة الصلاحيات العامة). عمليات تدقيق أمنية دورية بناءً على الإحصائيات التي ينشئها النظام. يمكن تكون هناك حاجة إلى تعديلات أخرى لقواعد البيانات مع تغير احتياجات الشركة والمستخدمين، وبالتالي ستستمر دورة الحياة بالمراقبة وإعادة التصميم والتحسين. والآن يمكن أن إلى هنا نكون فهمنا بالفعل معظم أساسيات تطوير وتصميم قواعد البيانات التي سنحتاج إليها، ولكن ماذا عن أسواق العمل وما الذي يمكن أن يضيفه طلاب التخصصات المرتبطة بقواعد البيانات إلى الشركات القديمة أو الناشئة؟ في الحقيقة هنالك الكثير من التخصصات المرتبطة بقواعد البيانات وكل تخصص يضيف قيمة مختلفة إلى الشركة، وعندما يدرس الطلاب عادة تخصص علوم الحاسوب أو التخصصات التقنية في الجامعة عمومًا لا يتخصص الطالب في مجال معين وإنما تكون التخصصات اختيارية سواء مع أو بعد دراسة علوم الحاسوب، يختار الطالب تخصصًا واحدًا أو اثنين على الأكثر، ثم يدرسونه دراسة معمقة، لذلك سننتقل تاليًا إلى شرح التخصصات المرتبطة بقواعد البيانات التي يمكن لمهندس الحاسوب أو دارس تخصص علم الحاسوب أو أي مجال قريب إليها أن يعمل ويتخصص فيها. كما ستوضح الفقرات التالية أهمية هذه التخصصات لأصحاب شركات المستقبل. التخصصات المرتبطة بقواعد البيانات لا تكاد توجد شركة في وقتنا الحالي إلا ولديها موظف على الأقل من التخصصات المرتبطة بقواعد البيانات ولا نقصد بذلك الشركات التقنية فقط وإنما جميع الشركات التجارية وهذه فرصة للطلاب لكي يتعلموا الوظائف المتاحة لهم من خلال تأسيس أنفسهم بها لإكمال دراستهم لهذه المجالات سواء كان مع دراستهم الجامعية أو حتى بعد التخرج. يتزايد اهتمام أصحاب الشركات بتوظيف الأشخاص الذين يساعدون الشركة في بناء وتصميم قاعدة بيانات قوية لأنهم يرون تزايد أهمية تقنيات الذكاء الصنعي وتعلم الآلة في تطوير الشركات وهذه التقنيات تعتمد بالدرجة الأولى على قواعد البيانات وطريقة جمع بيانات العملاء والمستخدمين. تتنوع تخصصات قواعد البيانات ابتدءًا من مدير قواعد البيانات مرورًا بمحلل أمن المعلومات وانتهاء بمهندس البيانات الضخمة وكل تخصص من هذه التخصصات لديه واجباته ومهامه المتنوعة يمكن أن يتخصص الدراس لتصميم قواعد البيانات في إحدى هذه التخصصات ويعمل بها بعد التخرج، ومن أهم تخصصات قواعد البيانات الوظيفية نذكر: مدير قواعد البيانات Database Administrator مُنمذج البيانات Data Modeler مطورو ومهندسو البرمجيات Software Developer and Engineer محلل أمن المعلومات Information Security Analyst محلل البيانات Data Analyst عالم البيانات Data Scientist مهندس البيانات الضخمة Big Data Engineer 1. مدير قواعد البيانات Database Administrator يركز مدير قواعد البيانات على إدارة وصيانة كل قواعد بيانات الخاصة بالشركة. يحتاج المرشحون لدور إدارة قاعدة البيانات إلى أسس تقنية قوية لفهم بنية وتكوين قاعدة البيانات وطريقة صيانتها، ويبحث غالبية أصحاب العمل عن أفراد لديهم معرفة وخبرة في لغات وتطبيقات قواعد البيانات العلائقية الرئيسية مثل Microsoft SQL Server وأوراكل Oracle و IBM DB2، ومن المهام مسؤول قاعدة البيانات نذكر: إدارة ومراقبة وصيانة قواعد بيانات الشركة. إجراء التغييرات والتحديثات والتعديلات المطلوبة للبيانات ولهيكل قاعدة البيانات أيضًا. ضمان أمان قاعدة البيانات وتكاملها واستقرارها وتوفرها عند الطلب. الحفاظ على البنية التحتية للنسخ الاحتياطي والاستعادة لقاعدة البيانات. يتشابه عمل مدير قواعد البيانات مع مطور قواعد البيانات Database Developer وغالبًا ما يؤدي المهمتين شخص واحد وتكون مهام مطور قواعد البيانات على الشكل التالي: تصميم قواعد بيانات مستقرة وموثوقة وفعالة. تحسين وصيانة الأنظمة القديمة. تعديل قواعد البيانات حسب الطلبات وإجراء الاختبارات. حل مشكلات استخدام قاعدة البيانات والأعطال. الاتصال بالمطورين لتحسين التطبيقات وإنشاء أفضل الممارسات. جمع متطلبات المستخدم وتحديد الميزات الجديدة. تطوير كتيبات فنية وتدريبية. توفير دعم إدارة البيانات للمستخدمين. التأكد من أن جميع برامج قواعد البيانات تلبي متطلبات الشركة والأداء. البحث واقتراح منتجات وخدمات وبروتوكولات قواعد البيانات الجديدة. تتشابه وظيفة مديرو قواعد البيانات مع مطوروها إلا أن المدير يشرف عادةً على قواعد البيانات والمستخدمين أيضًا للتأكد من أن المنظومة آمنة ومنظمة وتعمل بكفاءة وسلاسة. ويطور مديرو قواعد البيانات الأنظمة وإجراءات السلامة وإجراءات الإدارة الجيدة للبيانات، ويحللون الأجهزة والبرمجيات لضمان أمن البيانات، والتأكد من أن سياسات الأمان تتوافق مع اللوائح القانونية للشركة أو الحكومات الموجودة بها هذه الشركة. بالإضافة إلى ذلك يدرب مديرو قواعد البيانات زملائهم الموظفين على كيفية استخدام قواعد البيانات والالتزام بإرشادات الأمان وتحديث الأنظمة حسب الحاجة. 2. منمذج البيانات Data Modeler مُنمذج البيانات هو الشخص المسؤول عن تصميم قواعد البيانات وتجهيزها لنشرها للاستخدام وتحديثها وإصلاحها ومراجعتها. عادةً ما يُحلل منمذجو البيانات هياكل أو أنظمة البيانات الموجودة مسبقًا والتعامل مع مشكلات تكرار البيانات وحركة البيانات داخل النظام بصورة عامة، ويسعون لتسهيل عملية استرداد البيانات ضمن نماذج بيانات خاصة بهم، ويتعاونون مع بقية الفريق لإنشاء نماذج وقواعد بيانات لتبقى فترات طويلة ونماذج البيانات المفاهيمية والمنطقية والمادية لجميع أقسام الشركة وذلك لسهولة التحديثات والتطوير في المستقبل. ويعمل منمذج البيانات مع مهندسي ومحللي البيانات لتنفيذ حلول نمذجة البيانات من أجل تبسيط ودعم إدارة معلومات الشركة، ولضمان نجاحك كمنمذج للبيانات يجب أن يكون لديك معرفة عميقة بطريقة تخزين البيانات في قواعد البيانات، فضلًا عن مهارات التواصل لجمع المعلومات من الموظفين، وعمومًا من مسؤوليات منمذج البيانات نذكر: تحليل وترجمة احتياجات العمل إلى نماذج قواعد بيانات لبناء حلول طويلة الأمد. تقييم أنظمة البيانات الموجودة. العمل مع فريق التطوير لإنشاء نماذج بيانات وطريقة تدفق البيانات. تطوير أفضل الممارسات لترميز البيانات لضمان الاتساق داخل النظام. مراجعة تعديلات الأنظمة الموجودة للتوافق المتبادل بين قواعد بيانات الشركة. تنفيذ استراتيجيات البيانات وتطوير نماذج البيانات المادية. تحديث النماذج المحلية والبيانات الوصفية وتحسينها. تقييم أنظمة البيانات المنفذة للفروق والتناقضات والكفاءة. استكشاف الأخطاء وإصلاحها وتحسين أنظمة البيانات. 3. مهندسو ومطورو البرمجيات Software Developer and Engineer وهم الأشخاص المتخصصون في تطوير البرمجيات وتطبيقات الأعمال وأنظمة التحكم في الشبكة وأنظمة التشغيل للشركات والمؤسسات. يلتقي مهندسو البرمجيات المحترفون مع العملاء لتحديد احتياجاتهم من البرامج والأنظمة ويعملون على بناء النماذج التصميمية المناسبة للمشروع حسب الطلب سواء مخططات باستخدام لغة النمذجة الموحدة UML أو أي طريقة أخرى، كما يصمم مهندسو البرمجيات مخططات لنظام البرمجي وقاعدة البيانات وينتقلون من التصميم الأولي أو المفاهيمي إلى المنطقي ومن ثم المادي في إطار عملهم على إنتاج البرمجيات، كما يعمل مهندسو البرمجيات على صيانة برمجيات وأنظمة الشركات وإجراء إصلاحات أو تحديثات أو تغييرات أخرى حسب الحاجة، ويساعدوا موظفي الشركة على تعلم كيفية استخدام هذه الأنظمة أو يطرحوا دليل نظري لتعلمها. يتكامل عمل مهندسي البرمجيات مع مطوري البرمجيات فالأول يخطط لما ستكون عليه البرمجية والثاني ينفذها بالطريقة المناسبة ويتعاونان خلال هذه الرحلة لضمان سيرها وفقًا للمطلوب ومن مسؤوليات مهندسي مطوري البرمجيات نذكر: تعاون مع الفريق لتصميم الخوارزميات والمخططات الانسيابية. إنتاج شيفرة برمجية نظيفة وفعالة بناءً على المتطلبات. دمج مكونات مختلف برمجيات الشركة مع واجهات برمجة التطبيقات الخارجية. العمل على تصميم برمجيات تتكامل مع قواعد البيانات القديمة. تصميم وتطوير برمجيات قابلة لجمع بيانات المستخدمين وتخزينها بطريقة منظمة في قواعد البيانات. تطوير خطط التحقق من البرمجيات وإجراءات ضمان الجودة. استكشاف أخطاء البرامج الحالية وتصحيحها. جمع وتقييم ملاحظات المستخدم وتنفيذ تحسينات بناء عليها. 4. محلل أمن المعلومات Information Security Analyst وهو الشخص المسؤول عن حماية المعلومات من المتسللين والمخترقين والهجمات الإلكترونية عمومًا وتكون الحماية من خلال تحليل قواعد بيانات الشركة ومعرفة هيكلتها وصلاحيات المستخدمين وإذا كان هنالك أي خطأ أو مشكلة ما. يلعب المحلل الأمني دورًا حيويًا في الحفاظ على أمان المعلومات الحساسة للشركة الموجودة في قواعد البيانات، ويجب أن يمتلك محللو أمن المعلومات بعض المهارات الأساسية التي ستساعدهم على تنفيذ أعمالهم مثل تنفيذ أنشطة القرصنة الأخلاقية لكشف نقاط الضعف وتحديد التهديدات المحتملة حتى تتمكن الشركة من حماية نفسها من المخترقين. كما يجب على المحلل اختبار الاختراق وذلك باختبار الشبكات وأجهزة الحواسيب وتطبيقات الويب والأنظمة الأخرى لاكتشاف نقاط الضعف القابلة للاستغلال. كما يجب على المحلل الأمني منع التطفل من خلال مراقبة حركة مرور الشبكة لاكتشاف التهديدات المحتملة ثم الاستجابة لهذه التهديدات على الفور الأمر الذي يساعد على إدارة الآثار السلبية للهجوم أو الاختراق وتقليل التأثير وتغيير ضوابط الأمان للوقاية في المستقبل. كما يجري المحلل في بعض الأحيان عمليات التحاليل الجنائية الحاسوبية لاكتشاف المخترق من خلال تتبع آثار المخترق وجمع البيانات وتحليلها ليبلغ عنها في نهاية المطاف. ويجرب المحلل أيضًا عمليات الهندسة العكسية على البرمجيات؛ لذلك من الطبيعي أن تتطلب وظيفة محلل أمن المعلومات خبرة عالية، وعمومًا من أهم مسؤوليات محلل أمن المعلومات نذكر: مراقبة الوصول الأمني للموارد. إجراء تقييمات الأمان من خلال اختبار الثغرات الأمنية وتحليل المخاطر. إجراء عمليات التدقيق الأمني الداخلي والخارجي. تحليل الخروقات الأمنية لتحديد السبب الجذري للثغرات. التحديث المستمر لخطط الشركة للاستجابة للحوادث والتعافي من الكوارث. التحقق من أمان موردي برمجيات الجهات الخارجية والتعاون معهم لتلبية متطلبات الأمان. 5. محلل بيانات Data Analyst تعتمد هذه الوظيفة على جمع البيانات لتحديد الاتجاهات التي تساعد قادة الأعمال على اتخاذ قرارات استراتيجية. يركز الانضباط على إجراء التحليلات الإحصائية للمساعدة في الإجابة على الأسئلة وحل المشكلات. يستخدم محلل البيانات لغات الاستعلام مثل SQL لعمل استعلامات لقواعد البيانات العلائقية. كما ينظف محلل البيانات البيانات ويضعها في تنسيق قابل للاستخدام، أو التخلص من المعلومات غير ذات الصلة أو غير القابلة للاستخدام أو اكتشاف كيفية التعامل مع البيانات المفقودة. يعمل محلل البيانات عادةً كجزء من فريق متعدد التخصصات لتحديد أهداف المؤسسة ثم إدارة عملية التنقيب عن البيانات وتنظيفها وتحليلها، وتشمل مسؤوليات محلل البيانات الرئيسية ما يلي: الاستعلام عن البيانات باستخدام SQL أو Excel. تحليل البيانات والتنبؤ باستخدام الأساليب الإحصائية وتقديم التقارير. إنشاء لوحات معلومات باستخدام برنامج ذكاء الأعمال. إجراء أنواع مختلفة من التحليلات بما في ذلك التحليلات الوصفية أو التشخيصية أو التنبؤية أو الوصفية. تطوير وتنفيذ قواعد البيانات وأنظمة جمع البيانات. الحصول على البيانات من المصادر الأولية والثانوية والحفاظ على أنظمة البيانات. تحديد وتحليل وتفسير الاتجاهات أو الأنماط في مجموعات البيانات المعقدة. العمل مع الإدارة لتحديد أولويات الأعمال واحتياجات المعلومات. تحديد وتعريف فرص تحسين العمليات الجديدة. يسعى محلل البيانات إلى فهم الأسئلة التي تحتاج الشركة الإجابة عليها ويحدد فيما إذا كانت البيانات تستطيع الإجابة على هذه الأسئلة. يجب أن يفهم المشكلات الفنية المرتبطة بجمع البيانات وتحليل البيانات وإعداد التقارير وأن يكون قادرًا على التعرف على اتجاهات السوق وأنماط البيانات. يعمل محلل البيانات في الغالب مع البيانات المنظمة Structured Data للشركة مثل البيانات المتوفرة في قواعد البيانات، وينشئ التقارير ولوحات معلومات وتصورات أخرى حول البيانات المرتبطة بالعملاء والعمليات التجارية ويقدم هذه الرؤى للإدارة العليا وقادة الأعمال لدعم صانعي القرار. ومن بعض الأمثلة على البيانات التي يعمل هي احصائيات المخزون وتكاليف النقل والإمداد وأبحاث السوق وهوامش الربح والتكاليف وأرقام المبيعات وما إلى ذلك يمكن استخدام هذه البيانات لمساعدة الشركة في تقدير حصتها في السوق وطبيعة الزبائن والمبيعات وتحسين تكاليف النقل وما شابه. 6. عالم البيانات Data Scientist من أكثر الاختصاصات المرغوبة في وقتنا الحالي ويُعرف عالم البيانات بأنَّه الشخص الذي يستخدم الحواسيب ومعداتها وأنظمة البرمجة والخوارزميات بهدف تحليل البيانات الأولية وتحويلها إلى مجموعة بيانات سهلة القراءة والفهم كما يساهم في حل المشاكل وتفسير الظواهر الفعلية من خلال الاستعانة بنظريات من علوم أخرى مثل الرياضيات ونظم المعلومات والإحصاء وعلوم الحاسوب. يعود تاريخ نشأة هذا التخصص إلى ما يزيد على ثلاثين عامًا تقريبًا، وأكثر ما يميز عالم البيانات هو قدرته الاكتشاف أثناء سباحته في البيانات. ويجب أن يكون قادرًا على توفير هيكل لكميات كبيرة من البيانات غير النموذجية وجعل التحليل ممكنًا. كما يجب أن يستطيع تحديد مصادر البيانات الثريّة ويضموها إلى مصادر البيانات الأخرى التي يحتمل أن تكون غير مكتملة. يختلط على البعض مهام محلل البيانات مع عالم البيانات وبالرغم من أهدافهما المشتركة إلا أنه عادةً ما يكون عالم البيانات أكثر انخراطًا في تصميم عمليات نمذجة البيانات، وإنشاء الخوارزميات والنماذج التنبؤية لذلك يمكن أن يمضي علماء البيانات وقتًا أطول في تصميم الأدوات وأنظمة التشغيل الآلية وأطر البيانات. بالإضافة إلى ذلك يكون عالم البيانات أكثر تركيزًا على تطوير أدوات وطرق جديدة لاستخراج المعلومات التي تتطلبها الشركة لحل المشكلات المعقدة. يتطلب كلا المسارين درجة البكالوريوس -على الأقل- في مجالات متعلقة بالرياضيات مثل الرياضيات أو علوم الحاسوب أو الإحصاء. يمكن أن يقضي محلل البيانات الكثير من الوقت في التحليل الروتيني، وتقديم التقارير بانتظام. بينما عالم البيانات بتصميم طريقة تخزين البيانات ومعالجتها وتحليلها. ببساطة يستنتج المحلل المعلومات المنطقية من البيانات الموجودة بينما يعمل عالم البيانات على طرق جديدة لالتقاط وتحليل البيانات وتسليم هذه الطرق للمحللين. يستخدم علماء البيانات عادةً لغات البرمجة مثل بايثون Python ولغة R، بينما يستخدم محلل البيانات لغة SQL أو برنامج Excel للاستعلام عن البيانات أو تنظيفها أو فهمها. كما تختلف التقنيات والأدوات التي يستخدمونها لنمذجة البيانات، ومن المهم ملاحظة أنه يمكن أن يستخدم بعض المحللين المحترفين لغات البرمجة أو يدخلون إلى مجال عالم البيانات أو مجال مهندس البيانات الضخمة. يُنشئ علماء البيانات المحترفون نماذج التعلم الإحصائي لتقنيات البحث الخاصة بهم، والبحث عن أحدث اتجاهات التكنولوجيا والبيانات في السوق، وتعلم وسائل جديدة لتحليل البيانات لسهولة المراجعة والتواصل والتعاون مع الأقسام الأخرى داخل شركاتهم لمساعدتهم في إيجاد الحلول، مراجعة البيانات الأخرى أو تعليمهم كيفية قراءة البيانات. لذلك اعتبرت مجلة هارفارد بزنس ريفيو أن وظيفة عالم البيانات هي الوظيفة الأكثر إثارة وجاذبية في القرن الحادي والعشرين. أصبح قسم البيانات جزءًا أساسيات للعديد من الشركات كما يتضمن هذا القسم الأنشطة الأساسية مثل بناء قواعد البيانات المستدامة وإدارتها واستثمارها …إلخ، لأن القيمة التي تقدمها البيانات تصلح لأن تكون استثمارًا طويل الأمد هذا الأمر أدى ذلك إلى زيادة الطلب على علماء البيانات المهرة في مختلف الصناعات والمهن، وعمومًا من مهام عالم البيانات نذكر: تحديد مصادر البيانات ذات الصلة باحتياجات العمل. جمع البيانات المهيكلة وغير المهيكلة والبحث عن البيانات المفقودة وتعزيز عملية جمع البيانات. تنظيم البيانات في تنسيقات سهلة للاستخدام. بناء النماذج التنبؤية وخوارزميات التعلم الآلي. معالجة البيانات وتنقيتها والتحقق منها لإيجاد الأخطاء والمشاكل وحذفها باستخدام لغات البرمجة (مثل Python أو R). تحليل البيانات عن الاتجاهات والأنماط وإيجاد إجابات لأسئلة محددة. إنشاء البنية التحتية للبيانات. تطوير وتنفيذ وصيانة قواعد البيانات. تقييم جودة البيانات وإزالة البيانات أو تنظيفها. توليد المعلومات والأفكار من مجموعات البيانات وتحديد الاتجاهات والأنماط. إعداد التقارير للفرق التنفيذية وفرق المشروع. إنشاء تصورات للبيانات. التحليل الإحصائي باستخدام خوارزميات التعلم الآلي مثل معالجة اللغة الطبيعية أو الانحدار اللوجستي أو kNN أو Random Forest أو تعزيز التدرج. يواجه المدراء تحديًا حقيقيًا في معرفة كيفية تحديد تلك موهبة عالم البيانات، وكيفية جذبها إلى الشركة وجعلها منتجة. وبالرغم من أننا ذكرنا المهام الرئيسية لعالم البيانات إلا أنه يوجد ضبابية في معرفة كيفية أداء عالم البيانات وكيف يمكنه إضافة أكبر قدر من القيمة بالموازنة مع الأدوار الوظيفية الأخرى القديمة مثل المبيعات، بالإضافة إلى ذلك لا يوجد الكثير من الجامعات التي تقدم هذه الاختصاص الدقيق الأمر الذي يجعل عملية العثور على الشخص المناسب أكثر صعوبة؛ في الحقيقة يمكن تفسير هذه الصعوبات في أنها السبب المنطقي لارتفاع راتب عالم البيانات! 7. مهندس البيانات الضخمة Big Data Engineer يعد وظيفة محلل أو مهندس البيانات الضخمة من أرقى الوظائف التي تتعلق بقواعد البيانات ولفهم كيف يمكن أن تصبح مهندس بيانات ضخمة، دعنا نفهم في البداية معنى "البيانات الضخمة" Big Data. في أوائل العقد الأول من القرن الحادي والعشرين كان توليد البيانات محدودًا ولكن مع ظهور العديد من منصات الشبكات الاجتماعية والشركات العملاقة مثل فيسبوك وأمازون زادت ازديادًا كبيرًا فوفقًا لموقع Statista من المتوقع أن يصل الحجم الإجمالي للبيانات العالمية إلى 97 زيتابايت (أي 1021 بايت) في عام 2022 وسيصل في عام 2025 إلى 181 زيتابايت. وهذا بالفعل قدر كبير من البيانات. تتطلب البيانات الضخمة نهجًا هندسيًا مختلفًا عن البيانات العادية (مثل البيانات المهيكلة في قواعد البيانات) لأنها عبارة عن أطنان من المعلومات المختلطة وغير المهيكلة التي تتراكم باستمرار وبسرعة عالية، ولهذا السبب لا تستطيع طرق نقل البيانات التقليدية إدارة تدفق البيانات الضخمة بكفاءة. تعزز البيانات الضخمة تطوير أدوات جديدة لنقل وتخزين وتحليل كميات هائلة من البيانات غير المهيكلة. تعمل الشركات البارزة في العديد من القطاعات بما في ذلك المبيعات والتسويق والبحث والرعاية الصحية على جمع البيانات الضخمة بنشاط. كما يواجهون نقصًا في الخبرة اللازمة لإدارتها. لذلك شهدنا نموًا كبيرًا في الفترة الماضية لوظائف هندسة البيانات الضخمة وهي في الحقيقة تتطلب مهارات ضخمة أيضًا! يعكف مهندس البيانات الضخمة على استخراج البيانات من مصادر مختلفة وتحويلها وتحميلها على مستودع مركزي يُعرف أيضًا باسم مستودع البيانات Data Warehouse، تُخزن البيانات في هذه المستودعات لتكون جاهزة للاستخدام من فريق البيانات سواء محللين أو علماء …إلخ. غالبًا ما تكون وظيفة مهندس البيانات الضخمة خلف الكواليس وهم فعليًا الأشخاص الذين يبنون الطرق والجسور، لأنهم يجهزون البنية التحتية للبيانات الضخمة. ومن بعض مسؤولياتهم نذكر: تصميم بنية منصة البيانات الضخمة. الحفاظ على خط أنابيب البيانات. تخصيص وإدارة أدوات التكامل وقواعد البيانات والمستودعات والأنظمة التحليلية. إدارة وتنظيم البيانات. إعداد أدوات الوصول إلى البيانات لعلماء البيانات. الاجتماع مع المديرين لتحديد احتياجات البيانات الضخمة للشركة. تحميل مجموعات البيانات المتباينة وإجراء خدمات المعالجة المسبقة باستخدام Hive أو Pig. إنهاء نطاق النظام وتقديم حلول البيانات الضخمة. إدارة الاتصالات بين النظام الداخلي وبائعي البيانات (مثل بائعي الاستبيانات أو المقابلات …إلخ). التعاون مع فرق البحث والتطوير الخاصة بالبرمجيات. بناء منصات سحابية لتطوير تطبيقات الشركة. تدريب الموظفين على إدارة موارد البيانات. يجب أن يكون مهندس البيانات الضخمة ماهرًا جدًا في العديد من المجالات ومن أبرز هذه المجالات نذكر: البرمجة Programming: تعد مهارة البرمجة بديهية في قطاعات التكنولوجيا لأن البرمجة هي الطريقة المثلى لفهم كيفية التعامل مع البيانات فجميع الأجهزة والأنظمة التي حولنا ما هي إلا برمجيات وخوارزميات مختلفة صنعت لتعمل بطريقة معيّنة. يحتاج مهندس البيانات الضخمة إلى خبرة عملية في أي لغة برمجة مشهورة مثل لغة جافا Java أو C++‎ أو بايثون Python. التعامل مع قواعد البيانات ولغات SQL: بعد البرمجة تأتي المعرفة العميقة بمفاهيم قواعد البيانات وأنظمة إدارة قواعد البيانات DBMS ولغة SQL. تعد مهارة التعامل مع قواعد البيانات أساسية ساعد هذا في فهم كيفية إدارة البيانات والحفاظ عليها في قاعدة بيانات. تحتاج إلى معرفة كيفية كتابة استعلامات SQL لأي نظام إدارة قواعد بيانات علائقية مثل MySQL و Oracle Database و Microsoft SQL Server. التعامل مع مستودعات البيانات وعمليات تكامل البيانات ETL: تتمثل إحدى المسؤوليات الأساسية لمهندس البيانات الضخمة في تنفيذ عمليات ETL وهي عمليات استخراج وتحويل وتحميل Extract-Transform-Load البيانات إلى مستودع البيانات. لهذا، ستحتاج إلى معرفة كيفية إنشاء مستودع بيانات وكذلك استخدامه. ستستخرجُ البيانات من مصادر مختلفة، وتحول إلى معلومات ذات مغزى، وتحمل إلى مخازن بيانات أخرى. بعض الأدوات المستخدمة لهذا الغرض هي Talend و IBM Datastage و Pentaho و Informatica. التعامل مع أنظمة التشغيل Operating Systems: المهارة الرابعة التي تحتاجها هي معرفة أنظمة التشغيل. أدوات التشغيل هي الأساس لتشغيل أدوات البيانات الضخمة. ومن ثم فإن الفهم القوي لأنظمة Unix و Linux و Windows و Solaris أمر إلزامي. التعامل مع أدوات وأطر المخصصة للبيانات الضخمة: يجب أن يكون لديك خبرة في التحليلات المستندة إلى Hadoop والتي تعد واحدةً من أكثر أدوات هندسة البيانات الضخمة استخدامًا، لذلك من المفهوم أنك بحاجة إلى خبرة في التقنيات القائمة على Apache Hadoop مثل HDFS و MapReduce و Apache Pig و Hive و Apache HBase. التعامل مع أطر العمل أطر معالجة في الزمن الفعلي Real-time: يجب أن يكتسب مهندس البيانات الضخمة طريقة العمل مع أطر المعالجة في الوقت الفعلي مثل Apache Spark والتي تتعامل مع كميات هائلة من البيانات في الزمن الحقيقي إذ يمكنها معالجة البيانات التي تأتي من البث المباشر من عدة مصادر مثل Twitter و Instagram و Facebook وما إلى ذلك. التنقيب عن البيانات والنمذجة Data Mining and Modeling: إن مهارة التنقيب عن البيانات ومناقشة البيانات وتقنيات نمذجتها هي أساسية في مجال هندسة البيانات الضخمة. تتضمن عمليات التنقيب عن البيانات والجدل في البيانات خطوات للمعالجة المسبقة وتنظيف البيانات باستخدام طرق مختلفة والعثور على الاتجاهات والأنماط غير المرئية في البيانات وجعلها جاهزة للتحليل. والآن بعد أن تعرفنا على أهم الاختصاصات المتعلقة بقواعد البيانات لنستكشف كيف يمكننا الدخول في هذا العالم الشيّق. من أين أبدأ بتعلم تصميم قواعد البيانات؟ غالبًا ما تتضمن التخصصات الجامعية مثل علوم الحاسب وهندسة البرمجيات أو ما يشابهها من التخصصات على مواد تتعلق بقواعد البيانات يتعلم الطالب من خلالها أساسيات تصميم قواعد البيانات، وفي حال ليس لديك اطلاع على هذه أساسيات سنستعرض في هذه الفقرة المواضيع اللازمة لكل مرحلة تعليمية كما سننصحُ ببعض المقالات أو الكتب أو المساقات الدراسية. المفاهيم الأساسية في قواعد البيانات في البداية لا بد من التعرف على أساسيات تصميم قواعد البيانات والتي سيكون المواضيع على الشكل التالي: مفاهيم أساسية في قواعد البيانات: أنظمة الملفات التقليدية وعيوبها. تعريف قاعدة البيانات خصائصها ومميزاتها. الفرق بين البيانات Data والمعلومات Information والمعرفة Knowledge. أنواع قواعد البيانات. أدوات قواعد البيانات لغات قواعد البيانات. أنواع أنظمة إدارة قواعد البيانات Database Management Systems. مفاهيم نظام قواعد البيانات والهندسة المعمارية دورة حياة نظام المعلومات Systems Development Life Cycle. تطوير دورة حياة نظام قاعدة البيانات Database Life Cycle. - مفهوم نمذجة تصميم قاعدة البيانات. النمذجة باستخدام لغة النمذجة الموحدة Unified Modeling Language. النمذجة باستخدام الكيان والعلاقة Entity-Relationship. النموذج الكيان والعلاقة المحسّن Enhanced Entity-Relationship. المفاهيم المتقدمة في نموذج الكيان والعلاقة المحسّن (التعميم والتخصيص والتصنيف والميراث). مفاهيم أساسية لتحسين التصميم: الاعتماديات الوظيفية Functional Dependency. قواعد الاستدلال Inference Rules. عمليات التوحيد Normalization (النموذج الأول 1NF والثاني 2NF ..إلخ). مفهوم الجبر العلائقي Relational Algebra نشأته وأهميته. عمليات الجبر العلائقي. بعض المصادر المناسبة العربية: كتاب تصميم قواعد البيانات. كتاب ملاحظات للعاملين بلغة SQL 1.0.0 كتاب الدليل العملي إلى قواعد بيانات PostgreSQL. توثيق لغة SQL. المفاهيم المتقدمة في قواعد البيانات بعد أن تعرفنا على المفاهيم الأساسية سننتقل لاستعراض المواضيع المتقدمة المتعلقة بتصميم قواعد البيانات: إدارة الإجراءات أو المعامَلَات Transaction Management والتحكم في التزامن Concurrency Control ماهية الإجراء وتعريفه وخصائصه وحالاته. إدارة الإجراءات من خلال لغة SQL وسجل الإجراءات وطرق استردادها. مفاهيم التحكم في التزامن (التحديثات المفقودة Lost Updates - البيانات غير المثبتة Uncommitted Data - عمليات الاسترجاع غير المتسقة Inconsistent Retrievals). المجدول The Scheduler. التحكم في التزامن بطرق القفل Concurrency Control with Locking Methods التحكم في التزامن مع خلال Time Stamping. التحكم في التزامن بأساليب متفائلة. مستويات ANSI لعزل الإجراءات. إدارة عملية استعادة قاعدة البيانات. ضبط أداء قاعدة البيانات وتحسين الاستعلام مفاهيم ضبط أداء قاعدة البيانات هيكلية أنظمة إدارة قواعد البيانات أوضاع تحسين استعلام قاعدة البيانات إحصائيات قاعدة البيانات معالجة الاستعلام (طريقة تحليل استعلام SQL وتنفيذه وجلبه). مشاكل الاستعلام (اختناقات معالجة الاستعلام - الفهارس وتحسين الاستعلام). خيارات المحسن (استخدام التلميحات للتأثير على اختيارات المحسن). ضبط أداء SQL (انتقائية المؤشر - التعبيرات الشرطية). صياغة الاستعلام ضبط أداء DBMS أنظمة إدارة قواعد البيانات الموزعة Distributed Database Management Systems: تطور نظم إدارة قواعد البيانات الموزعة. خصائص أنظمة إدارة قواعد البيانات الموزعة ومكونات ومزاياها وعيوبها. المعالجة الموزعة وقواعد البيانات الموزعة. مستويات البيانات وتوزيع العمليات. الأداء وشفافية قاعدة البيانات الموزعة (شفافية التوزيع - شفافية المعاملات - شفافية الفشل). الطلبات الموزعة والإجراءات الموزعة (التحكم في التزامن الموزع - بروتوكول الالتزام ثنائي الطور). تصميم قاعدة البيانات الموزعة. مفاهيم أساسية عند تصميم قاعدة البيانات الموزعة (تجزئة البيانات Data Allocation - تكرار البيانات Data Replication - تخصيص البيانات Data Fragmentation). إدارة وأمن قواعد البيانات Database Administration and Security: مفاهيم متقدمة في أمن قواعد البيانات (نُهج الأمن Security Policies - ترقيع ثغرات أمنية). عناصر أمن قواعد البيانات ودورها (الأشخاص People - محطات العمل والمخدمات Workstation and servers - أنظمة التشغيل Operating system - التطبيقات Applications - الشبكة Network - البيانات Data). الفرق بين الحماية الأمنية في الأنظمة المجانية والمدفوعة. أدوات إدارة قواعد البيانات. الفرق بين إدارة قواعد العادية والسحابية. أهمية قاموس البيانات Data Dictionary في نهج الإدارة. تطوير إستراتيجية إدارة البيانات. أحد المصادر الجيدة التي تفيدك باللغة الإنكليزية كتاب Database Systems: Design, Implementation, & Management الطبعة الثالثة عشر لصاحبيه Steven Morris و Carlos Coronel. التخصص في قطاعات البيانات سنستعرض في هذا القسم المفاهيم الأساسية المشتركة في التخصصات المرتبطة بالبيانات وهي على الشكل التالي: ذكاء الأعمال ومستودعات البيانات Business Intelligence and Data Warehouses: الحاجة إلى تحليل البيانات. مفاهيم أساسية في ذكاء الأعمال (هندستها ومزاياها وتطورها ومستقبلها). مفاهيم أساسية بيانات دعم القرار (البيانات التشغيلية - بيانات دعم القرار). الفرق بين قواعد البيانات Database ومستودعات البيانات Data Warehouse وبحيرة البيانات Data Lake ومتاجر البيانات Data Mart. متطلبات قاعدة بيانات دعم القرار. مخطط النجمة Star Schemas (حقائق Facts - الأبعاد Dimensions - السمات Attributes). معالجة وتحليل البيانات عبر الإنترنت Online Analytical Processing. تقنيات تحليل البيانات متعددة الأبعاد. الفرق بين (تحليل البيانات Data Analytics - التنقيب في البيانات Data Mining - التحليلات التنبؤية Predictive Analytics). البيانات المرئية Data Visualization (أهمتيها - علم تصور البيانات The Science of Data Visualization). البيانات الضخمة و NoSQL: مفاهيم أساسية حول البيانات الضخمة (الحجم Volume - السرعة Velocity - التنوع Variety). قواعد البيانات المخصصة للبيانات الكبيرة (مثل NoSQL). قواعد البيانات السحابية Cloud Database: مفاهيم أساسية في اتصال قواعد البيانات وتقنيات الويب. اتصال قاعدة البيانات (ODBC و DAO و RDO). خدمات الحوسبة السحابية (خصائصها وأنواعها والفروقات بينها). أنواع قواعد البيانات السحابية. كيفية الانتقال إلى السحابة. الفرق بين قواعد البيانات القابلة للإدارة Self-Managed وقواعد البيانات المُدارة آليًا Managed Databases. كيف تتغير مهام مدير قواعد البيانات في السحابة. أمان البيانات والتطبيقات في السحابة. نقل قواعد البيانات الخاصة بك إلى السحابة (التخطيط Planning - نقل البيانات Data Movement - التحسين Optimization). بعض المصادر باللغة العربية: كتاب مدخل إلى الذكاء الصنعي وتعلم الآلة. كتاب الحوسبة السحابية أساسيات ومبادئ وتطبيقات للدكتور خالد بن ناصر آل حيان. التوظيف وفرص العمل في تخصصات البيانات يعد برنامج البكالوريوس أو المرحلة الجامعية الأولى الوسيلة التقليدية والشائعة للدخول في مجال البيانات ويمكن أن يختار بعض الطلاب إكمال دراستهم الجامعية والحصول على درجة الماجستير في المعلوماتية وعلوم البيانات في سعيهم للدخول في هذا المجال إلى أن هذا الطريق ليس الوحيد لدخول مجال البيانات، ولكن ظهرت في الآونة الأخيرة دورات تدريبية مركزة وتسمى أيضًا معسكرات تدريبية BootCamps وهي عبارة عن منهج دراسي مكثف قصير الأمد يركز على المهارات المركزة والمستندة إلى السوق بدلًا من أخذ مقدمات في مختلف التخصصات كما يحدث في برامج البكالوريوس، وبالرغم من أن المعسكرات التدريبية في بدايتها كانت تحتاج للتواجد الفيزيائي للطلاب مع الاساتذة إلى أن المشهد اليوم اختلف وأصبحت بالإمكان إجراء المعسكرات عبر الإنترنت عن بعد. في دراسة أجراها موقع إنديد Indeed جاء فيها أن 72% من أرباب العمل الذين شملهم الاستطلاع يعتقدون بأن خريجي معسكرات التدريب المستجدين مستعدين تمامًا ليكونوا ذوي أداء عالٍ مثل المرشحين الحاصلين على درجات علمية في علوم الحاسوب، كما يعتقد 12% من مدراء التوظيف بأن خريجي المعسكرات التدريبية أكثر استعدادًا من أقرانهم المدربين في الجامعات. علاوة على ذلك، يعتقد العديد من أصحاب العمل أن حضور المعسكر التدريبي يمنح المتعلمين ميزة تنافسية. ففي استطلاع أجراه موقع هكر رانك HackerRank عام 2020 على مدراء التوظيف جاء فيه أنه ما يقرب من ثلاثة أرباع مديري التوظيف الذين شملهم الاستطلاع قالوا بأن معسكرات التدريب يمكن أن تُعلم الطلاب تقنيات ولغات جديدة بسرعة، واستشهد 61% من المدراء الذين شملهم الاستطلاع بالخبرة العملية لطلاب المعسكرات التدريبية، وقال 52% بأن خريجي المعسكرات التدريبية متحمسون لتحمل مسؤوليات جديدة. يمكن للطلاب الراغبين في الدخول إلى مجال البيانات ولا يريدون هدر وقتهم في الجامعات أن يبدأوا بتعلم علوم الحاسب والتي يأخذ فيها الطالب نظرة شاملة، عملت أكاديمية حسوب على توفير دورة متكاملة عن أساسيات علوم الحاسوب هي دورة علوم الحاسوب وهي دورة شاملة مدتها أكثر من 53 ساعة تشرح هذه الدورة مختلف المفاهيم بدءًا من أبسط الأساسيات أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة وتشرح الدورة أيضًا: الخوارزميات وهياكل البيانات: والتي ستساعدنا على فهم الطريقة الصحيحة لتنظيم البيانات. البرمجة: التي ستساعدنا على كيفية التلاعب بالبيانات ومحتواها من خلال كتابة الشيفرات البرمجية بلغة بايثون Python لتعديل محتويات البيانات. تصميم وبناء قواعد البيانات: والتي تفيدنا في التأسيس إلى مجال البيانات مع شرح تفصيلي للغة SQL للتعامل معها ونظرة على قواعد بيانات NoSQL. تطوير الويب: والتي على فهم المفاهيم الأساسية التي تبنى فيها صفحات الويب. إدارة الخوادم: والتي ستساعدنا في فهم ماهية المعلومات التي يمكن أن نجمها بالإضافة إلى ذلك مفاهيم متقدمة مثل البرمجة الكائنية ومفاهيمها المختلفة الأساسية والمتقدمة عبر لغة بايثون كما ستتعلم أيضًا أنماط التصميم Design Patterns، كما أنها في تحديث وتوسعة مستمرة، ومن أبرز ميزاتها أن هناك من يتابع سَيْرَك ويجيبُ على أسئلتك على امتداد الدورة وليس فقط مجرد فيديوهات تسلسلة ولذلك فهي دورة يُبنى عليها. أضف إلى ذلك أنه يمكنك العمل كعامل مستقل على حسب الاختصاص الذي تجيده من اختصاصات البيانات؛ فلو كنت مدير أو مطور قواعد بيانات فيمكنك استعراض الفرص المتاحة عبر مواقع العمل الحر مثل مستقل، ففي العمل الحر لن يسألك أحد بتاتًا عن شهادتك الجامعية وكل ما سيسألونك عنه هو خبراتك ونماذج لأعمالك السابقة نفذتها لا أكثر. أما عن فرص العمل المتوفرة في الشركات فهي تختلف باختلاف البلدان والشركات التي تريد العمل فيها، ولكنها تنضوي جميعًا تحت قسم التخصصات الذي تحدثنا فيه بصورة موسعة عن تخصصات قواعد البيانات انظر مثلًا إلى موقع بعيد، ستجدُ فيه طلبات توظيف من شركات مختلفة حول العالم العربي، وستجد أن معظم الوظائف لا تشترط أي نوع من أنواع الشهادات، بل تشترط معرض أعمال وخبرة سابقة فقط. وتكون رواتب المتخصصين في البيانات متعلقة بعدة عوامل منها التخصص والخبرة والأعمال المنجزة ويدخل في الحساب أيضًا اختلاف الشركات والأماكن والدول، لكن يمكننا القول بصورة عامة أن رواتبهم أعلى من المهندسين الآخرين، ويمكنك البحث عن المواقع التي تَعرِض لك متوسط الرواتب التي يتلقاها الموظفون حسب المهنة في بلدك ثم البحث فيها عن التخصصات السابقة لرؤية مُعدّل الرواتب في بلدك. اقتصاد البيانات Data Economy لا يخفَ على أحد الكميات الكبيرة التي تولدها الأجهزة الذكية وشبكات التواصل الاجتماعي وجميع أنشطة مستخدمي الإنترنت ولم تشكل هذه البيانات الضخمة أداة مساعدة لعمل الشركة فقط وإنما أصبحت أصلًا Asset من أصول الشركة مثلها مثل أجهزة الحواسيب والمكاتب …إلخ، إذ فرضت هذه الأصول -غير الملموسة- نفسها كحقيقة لا مفر منها في تقييم الشركات، فمثلًا إذا اطلعنا على القيمة السوقية لشركة فيسبوك (غيرت الشركة اسمها لتصبح ميتا Meta) في عام 2021 سنجد بأنها وصلت إلى تريليون دولار، بينما بلغت قيمة أصولها الملموسة مثل المباني والعقارات والأجهزة والحواسيب …إلخ، نحو 150.7 مليار دولار، نلاحظ أن الفرق بين القيمتين يصل إلى 849.3 مليار دولار أمريكي، إلا أنه لا يمكننا قياس قيمة البيانات الحقيقية نظرًا لأن الشركة لها العديد من المنتجات الرقمية غير الملموسة مثل نظام الإعلان المؤتمت ونظام المتاجر الإلكترونية وغيرها، ولكن هذا الأمر يضعنا بطريقة غير مباشرة أمام سؤال مهم وجوهري وهو كيف نحدد قيمة البيانات؟ هل يمكننا اعتبار كمية البيانات كمصدر لقيمتها؟ أم أن تنوع البيانات له أهمية أكبر؟ ولكن ماذا عن جودة البيانات هل لها أهمية تُذكر؟ إذا أردنا الحصول على أجوبة دقيقة لا بدّ لنا من فهم دقيق لماهيّة اقتصاد البيانات Data Economy: والذي هو القيمة المالية والاقتصادية التي ينتجها تخزين كميات ضخمة من البيانات التجارية والحكومية وتحليلها واسترجاعها بسرعة كبيرة من خلال برمجيات معقدة وأدوات أخرى. سيساعدنا هذا التعريف في الانطلاق في فهم هذا الاقتصاد الجديد، وبالتأكيد لا يمكننا شرح كيفية تقييم سعر البيانات من خلال فقرة بسيطة لأن الأمر يحتاج إلى مقالات بل كتب! ازدادت النقاشات بين أوساط الاقتصاديين حول كيفية حساب قيمة البيانات والمعلومات كأصول غير ملموسة في الميزانيات، لا توجد حتى اليوم طريقة معتمدة عالميًا توفر حلًا واضحًا لتقدير قيمة البيانات والمعلومات وكل الحلول المطروحة هي اجتهاد من المستثمرين أو الباحثين، وبالرغم من أن بعض الأصول غير الملموسة الأخرى مثل براءات الاختراع وحقوق النشر وقوائم العملاء والعلامات التجارية وحقوق البث وغيرها، قابلة للإدراج في الميزانيات ولها طريقة في حساب قيمتها. في الحقيقة لا يقتصر جهلنا على قيمة البيانات فقط وإنما حتى القوانين الناظمة لها من جمع البيانات أو تنظيمها أو تداولها كل هذه الأمور ماتزال غير واضحة في بعض البلدان ويعود سبب البطء في سن القوانين هو لتجنب إعاقة الابتكار والذي بدوره يبطئ من دوران عجلة الاقتصاد. ولكن مما لا شك فيه أن الدول والشركات ستستفيد من من هذه الأصول وستُشكل بيانات المواطنين في يوم من الأيام إيرادات مستقلة تعزز من خزينة الدولة. يذكر أن قيمة سوق البيانات الضخمة قدرت بحسب موقع Research And Markets بنحو 70 مليار دولار أمريكي لعام 2020 كما توقع يصل قيمة السوق في عام 2027 إلى 243.4 مليار دولار أمريكي أي بمعدل نمو سنوي مركب قدره 10.2٪. الخاتمة تعرفنا في المقال على أهمية البيانات في عصرنا الحالي ومن هذه الأهمية جاءت أهمية قواعد البيانات التي تحتوي البيانات وتنظمها وكيف انبثق فروع جديدة من فروع علوم الحاسب وهو علوم البيانات وتصميم قواعد البيانات وإدارة قواعد البيانات …إلخ، كما اطلعنا في هذا المقال على خطوات تصميم قاعدة بيانات واستعرضنا بعدها التخصصات المرتبطة بالبيانات لننتهي بفهم كيف ستُنشئ البيانات الضخمة أسواقًا جديدة وختامًا بالرغم من أن منطقتنا العربية لا يوجد بها الكثير من الاستثمارات في البيانات إلا أن هذا الحال سيتغير في المستقبل القريب ولذلك استثمر الفرصة وكن من السباقين إلى هذا المجال. المصادر كتاب Database Systems: Design, Implementation, & Management الطبعة الثالثة عشر لصاحبيه Steven Morris و Carlos Coronel. مقال Data Modeling: Conceptual vs Logical vs Physical Data Model. مقال Data Modelling: Conceptual, Logical, Physical Data Model Types لصاحبه David Taylor. تقرير The Digitization of the World From Edge to Core. تقرير Volume of data/information created, captured, copied, and consumed worldwide from 2010 to 2025. مقال Top 10 High Paying Jobs That Demand SQL - GeeksforGeeks لمحرري الموقع. مقال Types of Database Jobs: Choose One of Them and Start Being Awesome لصاحبه Jakub Romanowski. مقال Database (Data) Testing Tutorial with Sample Test Cases لصاحبه Thomas Hamilton. مقال Database Testing Complete Guide (Why, What, and How to Test Data) لمحرري الموقع. اقرأ أيضًا دليلك الشامل إلى قواعد البيانات DataBase أمثلة عملية عن كيفية تصميم قواعد البيانات نمذجة البيانات وأنواعها في عملية تصميم قواعد البيانات النسخة العربية الكاملة من كتاب تصميم قواعد البيانات أنواع قواعد البيانات
    1 نقطة
  14. شاع في السنوات الماضية مع تطوّر التقنية في حياتنا ودخولها لكل جوانبها مصطلح الأمن السيبراني Cybersecurity، كما أن الطلب تزايد عليه بالنظر إلى أنّ أي مؤسسة تستخدم تقنيات الحاسوب بحاجة لحماية بنيتها التحتية ضدّ الهجمات الخبيثة والمخترقين. تُشير بعض الإحصاءات التي أجرتها الجمعية الدولية للضمان الاجتماعي ISSA عام 2021 آنذاك إلى أن 57 بالمئة من المؤسسات تعاني من نقص بخصوص مختصّي الأمن السيبراني، وإن دلّت هذه الأرقام على شيء فهي تدلّ على نموّ هذا المجال وتزايد الطلب عليه. فما هو اختصاص الأمن السيبراني؟ وما هي مهام مختص الأمن السيبراني؟ وكيف يمكنك البدء بتعلم هذا المجال؟ هذا ما سنناقشه ضمن هذا المقال. تاريخ الأمن السيبراني كانت الحاجة للأمن السيبراني واضحة منذ ظهور شبكة الإنترنت وانتشارها في ثمانينيات القرن الماضي، إذ شهدنا ظهور مصطلحات متعلقة بهذا المجال مثل الفايروس Virus ومضاد الفيروسات Anti-virus وغيرها، إلا أن التهديدات السيبرانية لم تكن بالتعقيد والصعوبة التي هي عليه الآن. أولى ظهور لبرمجية خبيثة malware كان في عام 1971 باسم كريبر Creeper إذ كان برنامجًا تجريبيًا كُتب بواسطة بوب توماس في شركة BBN، تلاه بعد ذلك ظهور أول مضاد فيروسات في عام 1972 باسم ريبر Reaper الذي أنشئ بواسطة راي توملنسون بهدف القضاء على البرمجية الخبيثة كريبر. مع وصول شبكة الإنترنت إلى كافة بقاع العالم ومع التحول الرقمي الحاصل في كافة قطاعات الحياة اليوم أهمها قطاعات البنى التحتية المدنية من أنظمة تحكم وأنظمة الطاقة والاتصالات والمياه وقطاع الصحة والقطاعات المالية والمصرفية وقطاع النقل والطيران وغيرها، بدأت الهجمات السيبرانية تأخذ بعدًا آخر، فتخيل ماذا سيحصل إن حصل هجوم سيبراني على أحد تلك الخدمات المهمة المفصلية أو تخيل حصول هجوم سيبراني على أحد أنظمة إدارة السدود أو الطاقة في بلد ما، هذا لا يقاس مع حصول هجمات على أفراد التي تكون دائرة الضرر فيها صغيرة جدًا، إذ ممكن أن تؤدي إلى شلل في الحياة وهنالك الكثير من أمثلة تلك الهجمات لا يسع المقال لذكرها هنا. أذكر مرة أنه حصل خلل في التراسل الشبكي في أنظمة إحدى المباني الخدمية مما أوقف العمل بشكل كامل في ذلك المبنى لتتراكم أعداد الناس وتشكل طوابير طويلة منتظرين عودة النظام للعمل أو ستتوقف معاملاتهم بالكامل، وأذكر مرة حصل خلل في نظام شبكة محطات الوقود لتخرج مجموعة كبيرة من المحطات عن العمل في المدينة وتصطف طوابير من السيارات منتظرة عودة الخدمة للعمل، وهذان مثالان عن عطل غير مقصود فما بالك لو كان مقصودًا وناجمًا عن هجوم سيبراني منظم؟ تخيل ماذا سيحصل، لذا كانت أهمية الأمن السيبراني بأهمية الحاجة إليه والضرر الحاصل دونه. ما هو الأمن السيبراني؟ يُعرف الأمن السيبراني Cybersecurity بأنه عملية تأمين وحماية الأنظمة الرقمية والشبكات الإلكترونية وكل ما يتعلق بالأجهزة الرقمية وتكنولوجيا المعلومات الرقمية ضدّ أي هجمات رقمية أو تسمى هجمات سيبرانية Cyber Attacks. تستهدف الهجمات السيبرانية تخريب أو تعطيل أو سرقة شبكة أو نظام حاسوبي، أو دخولًا غير مصرّح به إليهما، وقد يكون الهدف من هذه الهجمات الوصول إلى بيانات ما لتعديلها أو تخريبها، أو ابتزاز الفرد أو المؤسسة مقابل هذه البيانات، أو أن تكون ذات هدف تخريبي تهدف لإيقاف عمل المؤسسة. تأتي هنا مهمّة الأمن السيبراني ألا وهي وقف هذه الهجمات السيبرانية عن طريق الكشف عن الفيروسات الرقمية وتعطيلها وتأمين وسائل اتصال مشفّرة وآمنة تضمن تبادل البيانات الحساسة دون خطر تسريبها أو قدرة الوصول إليها من المخترقين. يستخدم مختصّ الأمن السيبراني لتحقيق ذلك مجموعة من الأدوات والتقنيات مثل جدران الحماية (النارية) Firewalls وأنظمة كشف التسلل Intrusion Detection Systems أو اختصارًا IDS، بالإضافة إلى إجراء اختبارات الأمان وتعريف حدود واضحة (صلاحيات المستخدم، أماكن تخزين البيانات الحساسة، …إلخ). فوائد الأمن السيبراني يستند الأمن السيبراني على ثلاث مبادئ وهي الخصوصية Confidentiality والسلامة Integrity والتوفر Availability، ويرمز إلى هذه المبادئ بشكل كامل بالاختصار CIA: الخصوصية: ضمان الوصول إلى الأنظمة والبيانات فقط للأشخاص المُصرَّح بهم، بإجراء عمليات التعديل البيانات واستعادتها والاطّلاع عليها. السلامة: ويُقصد بها سلامة البيانات وهي ضمان أن البيانات يمكن الاعتماد عليها بشكل دقيق وصحيح، دون أن تُغيَّر من قبل أطراف أخرى غير مصرّح لها بالتغيير (وهو ما يضمنه المبدأ السابق). التوفر: ضمان أن الأطراف المُصرّح لها بالوصول إلى البيانات تستطيع الوصول إليها بأي وقت دون مشاكل وبشكل مستمرّ، وهذا يتطلب المحافظة على سلامة التجهيزات (العتاد الصلب) وسلامة البنية التحتية والنظام الذي يحتوي على البيانات ويعرضها. التطبيق الصحيح للمبادئ الثلاث السابقة يضمن لنا حماية بياناتنا الشخصية ويوفّر بيئة عمل مريحة وآمنة في المؤسسات التي تعتمد على التقنيات والأنظمة الحاسوبية، مما ينعكس بالإيجاب على سمعة المؤسسة وأدائها. أضِف إلى ذلك تفادي الخسارات في حال وقوع هجوم سيبراني على المؤسسة، سواءً أكانت ماديّة (تعطّل بنى تحتية أو سرقة بيانات أو ابتزاز) أو معنويّة (خسارة المؤسسة سمعتها وثقة جمهورها). إذ تُشير إحصاءات أجرتها مجلة Cybercrime المختصة بمجال الأمن السيبراني في عام 2021 إلى أن الجرائم السيبرانية تسببت بخسائر قيمتها 6 تريليون دولار أمريكي، دعونا نقارن هذا الرقم لفهم ضخامته، إذ أنه سيأتي ثالثًا إذا أردنا وضعه ضمن الناتج المحلي الإجمالي لدول العالم بعد الولايات المتحدة الأمريكية والصين! ومن المقدّر أن تزداد الخسائر باستمرار بحلول عام 2025 إلى 10.5 تريليون دولار أمريكي. دعنا لا ننسى أيضًا مهمة مميزة للأمن السيبراني ألا وهي استرداد البيانات واسترجاعها إن حصلت عملية اختراق أو تخريب، إذ تُعدّ مهمة استعادة البيانات بسرعة من أهم مهام مختص الأمن السيبراني. وجود فريق أمن سيبراني مختص لصدّ الهجمات والتعرّف عليها أمر لا غنى عنه، خصوصًا في القطاعات الحساسة مثل المؤسسات الحكومية والبنوك وشركات الطيران. لكن هل تحتاج جميع المؤسسات إلى الأمن السيبراني بقدر متساوٍ من الأهمية؟ في الحقيقة لا، فأهمية الأمن السيبراني بالنسبة لمدوّنة أو موقع شخصي ليست بقدرٍ مساوٍ لشركة طيران أو مؤسسة مصرفيّة. ألا أن هنالك قواعد عامّة يجب اتّباعها بغض النظر عن غرض المؤسسة وطبيعة نشاطها كإدارة البيانات الحساسة وحمايتها مثل كلمات المرور والمحافظة على آخر إصدار مستقر من العتاد البرمجي المُستخدم وأخذ نُسخ احتياطية من البيانات بشكل دوري. ما هو الفرق بين أمن المعلومات والأمن السيبراني؟ قد تتساءل ما الفرق بين أمن المعلومات والأمن السيبراني؟ إذ كثيرًا ما يُطرح هذا السؤال وهو ما سنجيب عليه في هذه الفقرة. يهتمّ الأمن السيبراني كما ذكرنا سابقًا بحماية الأنظمة والأجهزة الحاسوبيّة، ويتضمن ذلك أمن الشبكات والتطبيقات والسحابة cloud والبنية التحتية، وذلك بمنع الوصول غير المصرّح له لهذه الأنظمة بهدف التحكم بها أو الحصول على البيانات التي تحتويها. يركّز مجال أمن المعلومات على المعلومات بذات نفسها وكيفية حمايتها بغض النظر عن الوسيط الذي يحتويها بخلاف الأمن السيبراني (النظام أو العتاد الصلب)، ويُعدّ مجال أمن المعلومات خط الدفاع الثاني في حال التعرض لهجوم سيبراني واختراقه بحيث لا يستفيد المخترق من البيانات حتى وإن كانت بحوزته (إذ أن خط الدفاع الأول هنا هو الأمن السيبراني). مصطلحات شائعة في مجال الأمن السيبراني نذكر هنا بعض أكثر المصطلحات شيوعًا في مجال الأمن السيبراني ومعناها بشرح مقتضب: الجريمة السيبرانية Cybercrime: هي أي هجوم يقوم بها شخص أو مجموعة من الأشخاص ويكون الهدف فيها نظام حاسوبي بهدف التحكم به أو الحصول على بيانات بشكل غير مُصرَّح به، إما بهدف التخريب أو الابتزاز. شبكة روبوتات Robot Network: تُعرف اختصارًا باسم Botnet وهي شبكة تتكون من آلاف أو ملايين الأجهزة المتصلة مع بعضها البعض والمصابة ببرمجية خبيثة malware، ويستخدم المخترقون هذه الشبكة لتنفيذ هجماتهم مثل هجمات الحرمان من الخدمة الموزّع DDoS attacks أو إرسال الرسائل المزعجة Spam. ** خرق بيانات Data Breach**: هي الحادثة التي يحصل بها المخترق على بيانات ما بعد نجاح هجمة سيبرانية، وعادةً ما تكون هذه البيانات بيانات شخصية حساسة مثل كلمات المرور أو بيانات مصرفية وغيرها. المخترق ذو القبعة البيضاء White hat وذو القبعة السوداء Black hat: يُقصد بهذين المصطلحين نيّة كل مخترق من عملية الاختراق إذ أن للمخترق ذو القبعة السوداء نيّة سيئة باستخدام البيانات التي يحصل عليها أو الثغرات الأمنية بالابتزاز المالي أو التخريب بينما يكون هدف المخترق ذو القبعة البيضاء الكشف عن هذه الثغرات وسدّها لحماية النظام بشكل أكبر وغالبًا ما تُدعى هذه الفئة من المخترقين بالمخترقين الأخلاقيين Ethical Hackers. أنواع تهديدات الأمن السيبراني على الرغم من تطوّر الهجمات السيبرانية مع مرور الوقت وزيادة تعقيدها إلا أن هناك العديد من أنواع التهديدات الشائعة التي يجب أن يكون مختصّ الأمن السيبراني ملمًّا بها وبطريقة تحصين النظام ضدها. نذكر من أشهر أنواع تهديدات الأمن السيبراني ما يلي: التصيّد الاحتيالي Phishing: هي محاولة المخترق لخداع الضحية الهدف باتخاذ إجراءات غير آمنة وخاطئة، مثل إرسال رابط لصفحة دخول إلى موقع معيّن ومطالبتهم بتسجيل الدخول بحساباتهم في هذا الموقع، إلا أن الصفحة مُستنسخة وعملية التسجيل مزيّفة مما يسمح للمخترق بالحصول على بيانات حساب الضحية. هجمات الحرمان من الخدمة الموزّعة Distributed Denial of Service: تُعرَف اختصارًا بهجمات DDoS، وهي هجمات تتمّ عن طريق إغراق خادم النظام بسيل من المعلومات غير اللازمة باستخدام مجموعة من الأجهزة Botnet وذلك بهدف تعطيل الخدمة أو إبطائها، مما يتسبب بحرمان استخدام الخدمة للمستخدم أو حجبها. البرمجيات الخبيثة malware: هي برمجية يزرعها المهاجم في النظام الضحية بحيث تُنفّذ مجموعة من الأوامر والمهام غير المصرّح بها على جهاز الضحية، نذكر من هذه البرمجيات برمجيات الفدية ransomware التي تشفّر بيانات جهاز الضحية وتمنعه من الدخول إليها بهدف الحصول على مبلغ مالي، وبرمجيات التجسس spyware التي تراقب نشاط المستخدم على حاسبه بشكل سرّي وتسرق بيانات حساسة مثل كلمات السر. هجمات كلمة المرور password attacks: هجوم يحاول فيه المخترق تخمين كلمة المرور لملفات أو نظام، وتتم عملية التخمين عادةً بمساعدة أدوات مخصصة وليس يدويًا. لذا يُنصح على الدوام بالابتعاد عن كلمات السر القصيرة والمُستخدمة بكثرة مثل password123 أو qwerty، والكلمات الموجودة في القاموس دون إضافة رموز وأرقام بينها (لأن هذه الأدوات تجرّب الكلمات الموجودة في القواميس). هجوم الوسيط man-in-the-middle attack: هجوم يستطيع المخترق عن طريقه الوصول إلى البيانات المُرسلة بين المُرسل والمُستقبل عن طريق التنصّت إلى الاتصال ما بينهما، وتتضمّن معظم بروتوكولات نقل البيانات نوعًا من التشفير والمصادقة للحماية من هذا النوع من الهجمات مثل شهادة SSL في بروتوكول HTTPS. أنواع الأمن السيبراني ينقسم مجال الأمن السيبراني إلى عدّة مجالات فرعية أخرى، إذ يختص كل مجال بعيّن بجانب من الفضاء السيبراني. نذكر من هذه المجالات ما يلي: أمن الشبكات Network Security: يُعنى هذا المجال بحماية شبكات الحاسوب ويُحقَّق ذلك عن طريق بعض التقنيات مثل منع فقدان البيانات Data Loss Prevention اختصارًا DLP وإدارة الوصول إلى الهوية Identitiy Access Managment اختصارًا IAM وغيرها من التقنيات التي تجعل من الشبكات فضاءً آمنًا لمشاركة البيانات. أمن الهواتف المحمولة Mobile Security: عادةً ما يكون لهواتف موظّفي المؤسسة أو طاقمها وصول كامل لنظام المؤسسة وبياناتها، وبالنظر إلى أن الهواتف المحمولة هي الجهاز الأكثر استخدامًا عادةً لكل فرد فهذا يُضيف أهميّة زائدة على هذا المجال، إذ يجب تأمين هذه الأجهزة ضد الهجمات الخبيثة باستخدام مختلف التطبيقات (مثل تطبيقات المراسلة وغيرها). أمن السحابة Cloud Security: بدأت كافة المؤسسات بتبني تقنيات السحابة مؤخرًا، مما جعل أمن السحابة مجالًا مهمًا. تتضمن عملية حماية السحابة شروط التحكم بها والوصول إليها وكيفية توزيع بياناتها وهيكلة البنية التحتية ويندرج كل ذلك فيما يدعى باستراتيجية أمن السحابة cloud security strategy. أمن إنترنت الأشياء IoT Security: يُقصد بإنترنت الأشياء مجموعة الأجهزة التي تتواصل مع بعضها البعض وتراقب بيئتها المحيطة باستخدام الحساسات بالإضافة إلى إمكانية التحكم بها عبر الإنترنت. يحمي أمن إنترنت الأشياء هذه الأجهزة من استغلالها من طرف المخترقين عن طريق استخدام ثغرات في الأجهزة بذات نفسها أو وسيط الاتصال فيما بينها. أمن التطبيقات Application Security: التطبيقات التي تستخدم اتصال الإنترنت معرّضة لخطر الاختراق كأي نظام آخر يستخدم شبكات الإنترنت. يعمل أمن التطبيقات على حمايتها عن طريق منع التفاعلات الخبيثة مع التطبيقات الأخرى أو الواجهات البرمجية API. مجالات الأمن السيبراني يحتوي مجال الأمن السيبراني على عدّة مسميات وظيفية فرعيّة مخصصة عنه، ولكل من هذه المسميات مهامها المحدّدة ومتطلباتها، نذكر منها أهم مجالات الأمن السيبراني مع شرح بسيط لكل منها. كبير موظفي أمن المعلومات كبير موظفي أمن المعلومات Chief Information Security Officer اختصارًا CISO هو موظف ذو خبرة كبيرة مسؤول عن أمان المعلومات ضمن المؤسسة بشكل كامل، وتضمن مهامه تطوير طرق حماية البيانات وصيانتها وإدارة برامج المخاطرة، وعادةً ما يشغل هذا المنصب شخصٌ له باعٌ طويل في مجال أمن المعلومات وعمل في واحدة أو أكثر من وظائف أمن المعلومات بحيث يمتلك على خبرة كافية تمكّنه من قيادة فريق الأمن السيبراني في المؤسسة. مهندس الأمن تتضمّن مهام مهندس الأمن Security Architect تصميم نظم الأمان المُستخدمة في الدفاع عن المؤسسة من هجمات البرمجيات الخبيثة، إذ يُجري مهندس الأمن اختبارات لكشف الثغرات ونقاط الضعف في النظام بالإضافة لتزويد المعلومات المهمة إلى أعضاء الفريق الأمني الآخرين. يتطلّب هذا العمل خبرة في مجال هندسة المعلومات والشبكات وإدارة المخاطر بالإضافة إلى بروتوكولات الأمن وتشفير المعلومات. مهندس الأمن السيبراني يعمل مهندس الأمن السيبراني Cybersecurity Engineer على الإجراءات اللازمة التي تمنع نجاح هجوم سيبراني على أنظمة المؤسسة من شبكات وأجهزة، إذ يعمل على تطوير أنظمة دفاع سيبرانية ويعمل بشكل وثيق مع باقي أقسام المؤسسة للحفاظ على أمنها العام. يتطلّب هذا المنصب فهمًا جيدًا لكيفية عمل الشبكات وإدارة نظم التشغيل وهيكلتها بالإضافة إلى إتقان لغة البرمجة C‎ (لأن لغة C تتعامل مع الحاسوب بمستوى منخفض مما يمنحك أريحية التعامل مع نظام التشغيل ومكوناته مقارنةً بلغات البرمجة عالية المستوى الأخرى مثل جافاسكربت وبايثون). محلل البرمجيات الخبيثة يعمل محلل البرمجيات الخبيثة Malware Analyst على فحص وتحليل التهديدات السيبرانية مثل الفيروسات وأحصنة طروادة Trojan horses والروبوتات bots لفهم طبيعتها وتطوير أدوات حماية للمدافعة ضدها، بالإضافة إلى توثيق طرق الحماية ضد البرمجيات الخبيثة وتجنبها. يتطلب هذا المنصب فهمًا لكل من نظام ويندوز ولينكس بالإضافة إلى معرفة بلغة البرمجة C/C++‎، واستخدام بعض الأدوات مثل IDA Pro وRegShot وTCP View. مختبر الاختراق أو المخترق الأخلاقي يُعرف مختبر الاختراق Penetration Tester بالمخترق الأخلاقي Ethical Hacker أيضًا، وهو مستشار أمني تتمثل مهامه باستغلال الثغرات الأمنية ونقاط الضعف في النظام بطريقة مماثلة لما سيفعله المخترق ذو النية السيئة التخريبية، إلا أن مختبر الاختراق يُطلِع فريق الأمان السيبراني في المؤسسة على الثغرات لتصحيحها، كما أنه يصمّم أدوات الاختراق ويوثّق نتائج الاختبار. المحلل الجنائي الرقمي يعمل المحلل الجنائي الرقمي Computer Forensics Analyst بعد حدوث هجوم سيبراني، إذ يجمع الأدلة الرقمية ويحاول استعادة البيانات المحذوفة أو المُعدَّل عليها أو المسروقة. يتطلّب هذا العمل معرفة بالشبكات والأمن السيبراني وفهم لقوانين الجرائم السيبرانية بالإضافة إلى مهارات تحليلية والانتباه للتفاصيل الدقيقة. كيف أبدأ بتعلم تخصص الأمن السيبراني؟ إن أردت البدء بتعلم الأمن السيبراني، فهذا يعني أنه عليك أن تبدأ بتعلم بعض المفاهيم والأدوات الأساسية في هذا المجال ألا وهي: تعلم أساسيات البرمجة، وذلك باختيار لغة برمجة معيّنة (يُفضّل البدء بلغة C أو C++‎ إن أردت دخول مجال الأمن السيبراني لأن اللغتين تتعامل مع الحاسوب على مستوى منخفض مما يمنحك أريحية التحكم بنظام التشغيل وأجزاء النظام الأخرى). فهم كيفية عمل أنظمة التشغيل وبنيتها، ننصحُك هنا بقراءة كتاب أنظمة التشغيل للمبرمجين كيفية عمل قواعد البيانات التي تخزّن بيانات أي نظام حاسوبي وعمليّة تصميمها، يمكنك الاطّلاع على كتاب تصميم قواعد البيانات للحصول على فهم أوّلي حول هذا الموضوع. إتقان التعامل مع سطر الأوامر command line بمختلف أوامره البسيطة والمتقدمة. فهم كيفية عمل الشبكات وكيف تتواصل الأجهزة مع بعضها البعض وتتبادل البيانات باستخدام بروتوكولات الاتصال المختلفة. التعامل مع أحد توزيعات لينكس الموجهة للأمن السيبراني والاختراقات بتمرّس، ونذكر منها توزيعة ريدهات Redhat لإدارة الخوادم (التي ستمكنك من الحصول على شهادة RHCSA وشهادة RHCE) ولينكس كالي Kali Linux، إذ تحتوي هذه التوزيعات على أدوات أساسية للتعامل مع الشبكات ومهام الأمن السيبراني. ماذا بعد؟ اختر مجالًا لتركّز عليه من المجالات السابقة التي ذكرناها، إذ أنّ مسار التعلم الخاص بك سيختلف بحسب توجهك، وهناك بعض الشهادات التي يجب أن تمتلكها لتزيد من فرصك في الحصول على عمل بحسب المجال الذي تختاره. على سبيل المثال تُعدّ شهادة CEH هامة لمختبر الاختراق -أو المخترق الأخلاقي- وشهادة CHFI هامة للمحلل الجنائي الرقمي. نرشّح لك أيضًا كتاب دليل الأمان الرقمي للاستزادة وتعلّم المزيد بخصوص الأمن السيبراني والاختراق. المصادر: What is Cybersecurity? Everything You Need to Know | TechTarget Top 20 Cybersecurity Terms You Need to Know (simplilearn.com) What Is Cybersecurity | Types and Threats Defined | Cybersecurity | CompTIA How To Learn Cybersecurity on Your Own A Basic Guide On Cyber Security For Beginners 2022 Edition | Simplilearn The Life and Times of Cybersecurity Professionals 2021 - Volume V - ISSA اقرأ أيضًا الهجمات الأمنية Security Attacks في الشبكات الحاسوبية تأمين الشبكات اللاسلكية كيف نخفف من هجمات DDoS ضد موقعنا باستخدام CloudFlare 7 تدابير أمنية لحماية خواديمك
    1 نقطة
  15. تلعب البيانات أهمية كبيرة في أعمال وشركات اليوم بل إنه يستحيل أن نجد شركة قوية ومنافسة في السوق وليس لديها قاعدة بيانات قوية، هذه هي قواعد اللعبة في عصرنا الحالي، هل تريد المنافسة والسيطرة على السوق؟ إذا جهز نفسك لبناء قاعدة بيانات قوية ومتكاملة، ولفهم أهمية قواعد البيانات لا بدّ لنا في البداية من تبسيط المفاهيم والتعرف بدقة على ماهيّة قواعد البيانات والتي ببساطة هي مجموعة من المعلومات المنظمة في شكل مهيكل (مثل جداول) أو غير مهيكل (مثل المستندات)، ويمكن الوصول إليها وإدارتها وتحديثها بسهولة من خلال أنظمة إدارة قواعد البيانات مثل MySQL و MongoDB. تكمن أهمية قواعد البيانات في أنها تخزن المعلومات المتعلقة بتفاصيل المنتج البرمجي مثلًا إذا كانت المنتج متجر إلكتروني فستكون المعلومات مثلًا عدد المبيعات ومخزون المنتجات وملفات العملاء وأنشطة التسويق …إلخ، وتساعد قواعد البيانات في جعل عملك أقوى مما يزيد من أرباح شركتك آنذاك. لنتخيل أنه ليس لديك مكان مركزي لتخزين كل هذه المعلومات التي تصدرها الشركة في هذه الحالة لن يكون لديك أدنى فكرة عما يحدث بالفعل في شركتك، وعندها ستبدأ في وضع الافتراضات لما يحدث داخل شركتك، وتتخذ القرارات بناء على تكهنات بدلًا أن يكون بناء على الحقائق. لاحظ كيف يمكن توظيف قواعد البيانات في فهم ما يحدث بالضبط في مثال المتجر السابق من خلال قراءة المعلومات وتحليلها، في الحقيقة مع اكتشاف الشركات لأهمية قواعد البيانات ازداد الاعتماد عليها، وبدأت شركات البرمجيات بتطوير قواعد البيانات وأنظمتها وجعلها تواكب متطلبات البيانات الحديثة فظهرت لدينا قواعد بيانات كثيرة بعضها للشركات الصغيرة وبعضها للكبير بعضها مغلقة المصدر وبعضها مفتوح المصدر، ومع هذا التنوع وكثرة الخيارات تزداد الحيرة والقلق من اختيار نوع خاطئ يؤدي لكوارث لاحقة للشركة، فما هو نوع قواعد البيانات المناسبة للشركات الناشئة؟ وكيف نختار ما يناسبنا في ظل هذا التنوع الكبير بين قواعد البيانات وأنظمة إدارتها؟ سنحاول في المقال تسليط الضوء على اثنين من أشهر أنظمة إدارة قواعد البيانات وهما MySQL و MongoDB والذين يديران قواعد البيانات العلائقية Relational Database وقواعد بيانات غير العلائقية Non-Relational Database على التتالي، وسنقارن بينهما ونكتشف كيف فرضا نجاحهما وجدارتهما في سوق العمل الحديث، ولنتمكن لاحقًا من استخدامهما في المشاريع التي تناسبهما، وسنسعى لتجنب التحيز بين أنظمة إدارة قواعد البيانات ولكن بالتأكيد هناك بعض المشاريع التي تناسب إحدى الأنظمة أكثر من الآخرى وهذا أمر طبيعي. نبذة موجزة عن MySQL و MongoDB تُعرف لغة SQL بأنها لغة استعلام مهيكلة تستخدم لتخزين ومعالجة واسترجاع البيانات الموجودة في قاعدة بيانات علائقية Relational Database وهذه الأخيرة وهي مجموعة من عناصر البيانات التي تترابط مع بعضها بعلاقات محددة على شكل مجموعة من الجداول ذات الأعمدة والأسطر، ويعد التعامل مع هذه اللغة واضحًا لأن قواعد البيانات مهيكلة ومنظمة حتى مع المشاريع الكبيرة. أما لغة NoSQL فهي لغة استعلام غير مهيكلة تستخدم لتخزين ومعالجة واسترجاع البيانات من قاعدة بيانات غير علائقية Non-Relational Database وهذا النوع من قواعد البيانات لا يستخدمُ المخططات Schema لبناء قواعد بيانات وإنما يستخدم نماذج مرن مثل أزواج الاسم والقيمة للمتطلبات Name-Value أو المستندات وهذا ما يمنح قاعدة البيانات المرونة العالية في التكيف مع البيانات المتغيرة للمشاريع الحديثة، ويعد التعامل مع هذه اللغة صعبًا نسبيًا في المشاريع الكبيرة. تعد أنظمة إدارة قواعد البيانات DBMS -وهي اختصارا Database Management Systems- أنظمة برمجية تُستخدم لتخزين واسترجاع وتنفيذ الاستعلامات على البيانات المخزنة في قاعدة البيانات، وتعمل هذه الأنظمة كواجهة بين المستخدم النهائي وقاعدة البيانات، مما يسمح للمستخدمين بإنشاء وقراءة وتحديث وحذف البيانات في قاعدة البيانات. قبل أن ندخل في تفاصيل الحديث عن هذين النظامين لا بدّ أن نوضح بأنه يمكن النظر إلى هذه المقارنة على أنها مقارنة بين نوعي قواعد البيانات SQL و NoSQL ولكن بطريقة غير مباشرة، كما أنه من الجدير بالذكر أن هنالك العديد من الأنظمة التي تدير قواعد البيانات من نوع SQL نذكر منها MySQL و PostgreSQL و Microsoft SQL Server وغيرها، وأيضًا هنالك أنظمة إدارة لقواعد البيانات NoSQL مثل MongoDB و BigTable و Redis و RavenDB و Cassandra و HBase و Neo4j و CouchDB وغيرها. ما هي MySQL؟ تعريف قواعد بيانات MySQL هو نظام إدارة قواعد بيانات علائقية RDBMS -وهو اختصارا Relational Database Management System- يستخدم لتحديث وإدارة وإنشاء قواعد البيانات العلائقية، صدر عام 1995 وسرعان ما بنى تاريخًا قويًا وسمعة عالية وموثوقية كبيرة بفضل مميزاته من السهولة والأمان ومع إتاحته كنظام مفتوح المصدر الأمر الذي الذي عزز شعبيته ومكّن المبرمجين من التعديل على الشيفرة البرمجية. أما قاعدة البيانات العلائقية Relational Database: فهي مجموعة من عناصر البيانات مرتبطة بعلاقات محددة مسبقًا فيما بينها، وتنظم هذه العناصر كمجموعة من الجداول ذات الأعمدة والصفوف، ويمكن تمييز كل صف في الجدول بمعرف فريد يسمى مفتاح أساسي، ويمكن جعل الصفوف الموجودة بين جداول متعددة مرتبطة باستخدام مفاتيح خارجية. يتوافق نظام إدارة MySQL مع العديد من الخوادم عبر جميع اللغات والبرامج الوسيطة، كما أن تصميمه متعدد الطبقات مع وحدات مستقلة الأمر الذي يوفر الحماية المطلوبة وهو يدعم الخيوط دعمًا كاملًا من خلال خيوط النواة Kernel Threads، كما يقدم أدوات مدمجة لتحليل الاستعلام وتحليل المساحة، ويمكنه التعامل مع كميات كبيرة من البيانات تصل حتى 50 مليون صف أو أكثر، ويعمل مع العديد من توزيعات يونكس UNIX ولينكس Linux. ما هو MongoDB؟ تعريف MongoDB هو نظام لإدارة قواعد البيانات غير العلائقية Non-Relational Databases مثل NoSQL و Cassandra، ويمكننا هذا النظام من إدارة المعلومات في قواعد البيانات سواء إضافة أو حذف أو تعديل أو استرداد، كما أن هذا النظام مفتوح المصدر وله أيضًا إصدارات تجارية أيضًا. ظهرت الشركة في البداية في عام 2007 عندما واجه المبرمجون الثلاثة وايت ميريمان وإليوت هورويتز وكيفين رايان مشكلة أثناء عمليات التطوير وقابلية التوسع لتطبيق الويب المشهور DoubleClick إذ كان يتطلب الموقع عرض 400,000 إعلان في الثانية، ولكن الاعتماد على مناهج قواعد البيانات العلائقية التقليدية أدى لبطئ كبير الأمر الذي حفزهم لتأسيس شركة 10Gen ولتطور الشركة بعدئذٍ ويغير اسمها لاحقًا إلى MongoDB Inc في عام 2013 ولتطرح اسهمها للاكتتاب العام في عام 2017. يدعم النظام أشكالًا مختلفة من البيانات وهذا لأن قواعد البيانات التي من نوع NoSQL بحد ذاتها تدعم هذه الأنواع ولا تتطلب قواعد البيانات أي مخططات مسبقة Database Schema مما يسمح بمرونة عالية في تطوير قواعد البيانات. في الواقع يمكن أن تكون المستندات في نفس المجموعة ومع ذلك لها هياكل مختلفة تمامًا فيما بينها. يعتمد نظام MongoDB أسلوبًا مختلفًا لتخزين البيانات إذ يمثل المعلومات كسلسلة من المستندات المشابهة لصيغة JSON الموجودة في لغة جافاسكربت (للتوسع في فهم صيغة JSON يمكنك الاطلاع على مقال ما هي JSON؟)، وتسمى الصياغة التي يخزن بها Binary JSON أو BSON. وتعرف BSON بأنها شكل ثنائي لتمثيل هياكل البيانات البسيطة أو المعقدة بما في ذلك المصفوفات الترابطية Associative Arrays (المعروفة أيضًا باسم أزواج الاسم والقيمة Name-Value)، والمصفوفات المفهرسة بالأرقام الصحيحة، ومجموعة من الأنواع العددية الأساسية. تتشابه الحقول الموجودة في هذه المستندات مع الأعمدة الموجودة في قاعدة البيانات العلائقية. وعادة ما يستخدم المتغير BSON لتبادل البيانات، يذكر أن شركة MongoDB طورت هذا المتغير عام 2009. مقارنة بين MySQL vs MongoDB يتشابه هذان النظامان في شكليهما إذ كلاهما نظام إدارة قواعد بيانات DBMS، وكلاهما يمكن الشركات من نشر وتوزيع تطبيقاتها السحابية أو تعديلها أو نشرها. علاوة على ذلك أنشأ مطورو كلا النظامين هذه القواعد في الأصل كقواعد بيانات مفتوحة المصدر لتكون الشيفرة البرمجية مجانية لأي شخص لاستخدامها وتوزيعها. هذه أبرز أوجه التشابه أما الاختلافات سنناقشها بالتفصيل. المجتمع والتطوير لننظر في المجتمع لتقييم تطوير هذه الأنظمة يشير المجتمع الأكبر إلى أن تطوير هذه الأطر مستمر على قدم وساق. كما أن كثرة استخدام المبرمجين لنظام قاعدة بيانات معين يجعل من السهولة الحصول على الدعم والمساعدة في المجتمعات التقنية. 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; } وجه المقارنة قواعد بيانات MySQL قواعد بيانات MongoDB الموقع الرسمي MongoDB MySQL تاريخ أول إصدار 1995 2009 رقم الاصدار الحالي (الذي كان وقت كتابة المقال) 8.0.28 5.0.5 بحسب الاستبيان السنوي لموقع Stackoverflow جاء فيه سيطرة واضحة لنظام إدارة قواعد بيانات MySQL وهذا أمر منطقي نظرًا لقدمها وفعاليتها في معظم المشاريع آنذاك، ولكن سنجد أيضًا صعود قوي وسريع لنظام إدارة قواعد بيانات MongoDB على مر السنوات الماضية وذلك لأن تقنيات الويب تغيرت جدًا وأصبح كل شيء يتفاعل معه المستخدم في الموقع يولد بيانات وهذا الكم الكبير من البيانات تصعبُ إدارته من خلال MySQL، ولذلك ومع أن MySQL ستفوز في سباق الشعبية إلا أن MongoDB ستحجز لنفسها مكانًا في أوائل الأنظمة تطوير قواعد بيانات في المستقبل، وبحسب الاستبيان أيضًا نجد توافق بين جميع المستجيبين والمطورين المحترفين لقواعد بيانات الأكثر شيوعًا، والاختلاف الوحيد الذي نجده هو أن المطورين المحترفين يميلون أكثر قليلًا إلى استخدام Microsoft SQL Server على MongoDB. قابلية التوسع غالبًا ما يواجه المهندسون والمطورون تحديًا عندما يحتاج المشروع للتوسعة أو عند الزيادة الكبيرة لعدد المستخدمين والطلبات، ويكون ضمان توفر موارد موقع (سواء من قواعد بيانات أو الصور ..,إلخ) من أصعب التحديات، وهذا الأمر يحتاج للدراسة والتخطيط للتعامل مع عدد الزوار الكبير في أوقات ذروة الطلبات. في هكذا مواقف أول ما يخطر ببال المهندسين أننا سنحتاج لتوسيع قوة معالجة الخادم وسعة التخزين ومستويات التوفر للخادم …إلخ، ولكن هل تطوير الخادم هو الخيار الوحيد الذي لدينا؟ أم أن لدينا خيارات أخرى؟ وما هو التوسع بقواعد البيانات أفقيًا وعموديًا؟ ظهر مفهومي التوسع أفقيًا أو التوسع عموديًا في قواعد البيانات عند الزيادة الكبيرة في الاعتماد عليها وكمية البيانات الضخمة وعدد الزوار الكبير لمواقع وتطبيقات الويب الذين يطلبون البيانات ويمكن أن يختلط الأمر على المبتدئين بين لأن كليهما يشتملان على إضافة موارد إلى البنية التحتية التي نضع عليها قواعد البيانات، ولكن هناك فروقات واضحة بين الاثنين من حيث التنفيذ والأداء. يشير التوسع العمودي Vertical Scaling إلى التوسعة من خلال زيادة إمكانيات المكونات المادية للمخدم مثل زيادة قدرة وحدة المعالجة المركزية أو ذاكرة الوصول العشوائي …إلخ، بينما يشير التوسع الأفقي Horizontal Scaling إلى التوسع من خلال إضافة المزيد من الخوادم وتوزيع الحمولة عليها. أحد الاختلافات الأساسية بين الاثنين هو أن القياس الأفقي يتطلب تغيير منطق قاعدة البيانات وجعلها في أجزاء صغيرة من أجل وضعها بالتوازي عبر أجهزة متعددة وتوزيع الحمولة بينها، وغالبًا ما يكون التوسع الرأسي أسهل لأن المنطق لا يحتاج إلى التغيير وإنما فقط توسعة عدد المعالجات والأجهزة. يمكن لقواعد البيانات MySQL التوسع عموديًا وهذا الأمر يجعلها غير محبذة للمشاريع الضخمة أو التي تتغير بنيتها باستمرار، بينما نجد بأن قواعد MongoDB يمكنها التوسع أفقيًا وعموديًا ولذلك نجدها في المشاريع الكبيرة، ومن الجدير بالذكر أن هنالك عدة فروقات أخرى بين التوسع الأفقي والرأسي لن نناقشها في هذا المقال لكي لا يطول ونخرج عن الموضوع ويمكنك البحث عنها. بالرغم من ذلك هنالك بعض المبرمجين يحاولون المواربة عن مشكلة عدم إتاحة نظام قاعدة بيانات MySQL توزيع البيانات على مجموعة من المخدمات للقراءة فقط ولكن هذه الترقيعات لا يمكن مقارنتها مع الدعم الأصيل الموجود في MongoDB، ونشير أيضًا إلى أن التوسع العمودي في قواعد البيانات له حد أعظمي سواء من قدرة المعالج أو سعة الذاكرة العشوائية …إلخ. مخطط البيانات وتنوع البيانات في نظام قواعد البيانات MongoDB تعرض البيانات في أزواج مثل مستندات JSON، مما يتيح لقاعدة البيانات قيودًا أقل ومرونة أكبر بالمقارنة مع الطرق الأساسية بالتصميم والتي تعتمد على المخطط وأنواع البيانات والقيود والروابط، ولكن الأمر يتغير بالنسبة لنظام قواعد البيانات MySQL، فبالرغم من إمكانية تغيير المخطط مع مرور الزمن، إلا أن التعديلات ليست مرنة وديناميكية كما هو الحال في قواعد بيانات القائمة على المستندات مثل NoSQL. كما تتطلب MySQL إنشاءً مسبقًا لمخطط قواعد وتنظيم الجداول والأعمدة قبل تخزين أي بيانات، بالإضافة إلى ذلك يتطلب تعديل مخطط البيانات إعادة التفكير بعناية بكيفية تنفيذ التعديل من خلال لغة تعريف البيانات DDL (وهي اختصار Data Definition Language) أو لغة معالجة البيانات DML (وهي اختصار Data Manipulation Language) لأن نظام التعديل الذي تفرضه قواعد بيانات SQL صارم لذلك عندما يتغير مخطط قاعدة البيانات خصوصًا إن كانت التغييرات كبيرة، فنعيد بناء قاعدة البيانات ثم ننقل البيانات عليها من جديد، وفي الواقع هذا الاتساق هو من أكثر نقاط القوة في MySQL لأنه يحافظ على البيانات منظمة ومتسقة. وأما بالنسبة لتنوع البيانات فإن قاعدة بيانات MongoDB تسمح بتخزين المستندات والتي تختلف في المحتوى والحجم، أما MySQL نظرًا لأن مخطط البيانات أكثر تقييدًا وصرامة، فإن كل صف داخل الجدول يتطلب نفس الأعمدة (أي مثلًا يجب لعمود الاسم في جدول بيانات MySQL أن يأخذ نفس نوع البيانات ونفس الحجم وفي حالتنا كون Varchar(50) أي بحجم 50 محرف فقط‎) والتي يمكن أن تكون صعبة، ولذلك تتفوق قاعدة بيانات MongoDB على قاعدة بيانات MySQL عند التعامل مع كميات متنوعة وكبيرة من البيانات المعقدة. الأداء والسرعة تحتل سرعة وأداء قواعد البيانات مكانة كبيرة في سباق المقارنة وفي الحقيقة لا تتطلب كل المشاريع البرمجية سرعة كبيرة لنتخيل مثلًا نشاطًا تجاريًا يعمل بكميات صغيرة من البيانات ذات تنوع بسيط سنُلاحظ بأن السرعة ليست بالضرورة أمرًا مهمًا نظرًا لأن الميزات الأخرى (مثل الموثوقية واتساق البيانات)، ولذلك فإن الخيار الأفضل في هذه الحالة هو قواعد البيانات. تقبل MongoDB كميات أكبر من البيانات المهيكلة أو غير المهيكلة كما أنها أسرع من MySQL. ومع ذلك لا ينظر المهندسون إلى السرعة كعنصر محوري بقدر ما أنها ميزة إضافية لمميزات إحدى قواعد البيانات، في الحقيقة إن المقارنة بين السرعة ستكون منطقية في حال المقارنة بين نوعين من قواعد البيانات المهيكلة ولن نستطيع تطبيق ذلك لأن هذا سيُعد ظلمًا لقواعد البيانات MongoDB بإهمال أفضل ميزة بها وهي قواعد البيانات غير المهيكلة، وعمومًا تتمتع MySQL بسرعة جيدة في قواعد البيانات المهيكلة وتتحسن سرعتها من خلال الاستخدام الصحيح للفهارس، كما تتمتع MongoDB بأداء مرِن وسرعة كبيرة للبيانات غير المهيكلة، ولكن إنشاء فهارس على سمات بيانات متنوعة يصبح أمرًا صعبًا، الأمر الذي يجعل MongoDB تتطلب تحسينًا متكررًا لمخطط البيانات، ولذلك يكون هناك مخاطرة بمشاكل تتعلق باتساق البيانات. الحماية تستخدم نظام قواعد البيانات MySQL نموذج أمان قائم على الامتيازات Privileges، والذي يتطلب مصادقة المستخدم أي أن النظام يتطلب عمليات أمان وهي المصادقة Authentication والتفويض Authorization والتحقق Verification، بالإضافة إلى ذلك تستخدم قواعد البيانات MySQL اتصالات مشفرة بين العملاء والخادم وذلك من خلال طبقة مآخذ التوصيل الآمنة SSL بروتوكول أمان. تتشابه طريقة الحماية التي يوفرها نظام قواعد البيانات MongoDB إذ هو الآخر يعتمد على الامتيازات. بالإضافة إلى ذلك إذا كان التشفير مطلوبًا فيمكن تطبيق بروتوكول طبقة التوصيل الآمنة SSL أو تعطيله إن لزم الأمر، في الحقيقة يوفر نظامي MongoDB و MySQL نماذج أمان قوية والفارق غالبًا ما يكون في طريقة تطبيق المطورين والمهندسين للمارسات الأمنية الشائعة أما قواعد البيانات وأنظمتها فهي ذات أمان قوي. خصائص ACID تعد خصائص ACID وهي اختصار للكلمات التالية: الذرية Atomicity والاتساق Consistency والعزل Isolation والمتانة Durability من الخصائص المهمة جدًا عند التعامل مع قواعد البيانات، ويعد توافر هذه الشروط أساسيًا للوثوق بتعاملات قاعدة البيانات يذكر أن أول من طرح هذه الشروط هو العالم جيم جراي Jim Gray وذلك في أواخر الستينات القرن العشرين. تتكون تعاملات قواعد البيانات Database Transaction من مجموعة من العمليات المفردة. فمثلًا عند تحويل مبلغ من حساب بنكي إلى آخر، يخصم المبلغ من حساب المصدر ويضاف في الحساب المستقبل. فيكون لدينا عمليتان لكنهما معا تشكلات تعاملًا واحدًا، وعمومًا لنشرح بالضبط أهمية كل خاصية من هذه الخواص: الذرية Atomicity: وتعني أن تعاملات قاعدة البيانات إما أن تنفذ جميع عملياتها بصورة كاملة أو لا تُنفذ أيًا منها، بمعنى أنه لا يوجد حل وسط، ففي مثال التحويل البنكي إما أن تنفذ عمليتي الخصم والإيداع أو لا تُنفذ أية واحدة منها لأن تنفيذ أحدهما وفشل الآخر سينتجُ عنه خلل في صحة البيانات. الاتساق Consistency: وتعني أن تظل قاعدة الباينات ملتزمة بقوانين تكامل البيانات كما حددها مصمم قاعدة البيانات بعد تنفيذ التعامل، فمثلًا إذا حُدد الحد الأدنى للرصيد بمبلغ معين يجب أن ترفض قاعدة البيانات أي تعامل ينتج عنه في النهاية إخلال بهذا القانون. العزل Isolation: وتعني أن تنفذ التعاملات المختلفة بمعزل عن بعضها بعضًا، ويختص هذا الشرط بقواعد البيانات التي تنفذ عدة تعليمات متزامنة، فمثلًا إذا أراد العميل الكشف عن رصيده أثناء أجراء تعامل التحويل مالي يجب أن تمنحه قاعدة البيانات إما البيانات التي سبقت التحويل أو التي نتجت عنه (بفرض أنها نفذت بنجاح). المتانة Durability: وهي إذا ظهر للمستخدم نتيجة مفادها أن التعامل نُفذّ بنجاح، فإن ذلك يعني أن التعامل لن يُتراجع عنه مهما حدث، حتى في حالة حدوث أي أعطال لاحقة في قاعدة البيانات. يوفر كلا النظامين خصائص ACID وبالرغم من أن MongoDB تأخرت سنة كاملة لإضافتها ولكنها الآن متاحة، كما أن نظام قواعد البيانات جعل MongoDB هذه الخصائص غير مفعلة بصورة افتراضية إلا أنه يمكننا تفعيلها، ولكن تنفيذ هكذا خصائص سيتطلب التضحية بالسرعة والتوافر العالي. طريقة كتابة الاستعلام يعد الفرق بين البيانات المهيكلة وغير المهيكلة نقطة انطلاق مفيدة لأن البيانات المنظمة تتبع نموذجًا أو مخططًا محددًا جيدًا. بينما نجد بأن البيانات غير المهيكلة ليست منظمة وفقًا لأي نموذج محدد مسبقًا. ولذلك من المنطقي أن نجد نظام قواعد البيانات MySQL يستخدم لغة الاستعلام المهيكلة SQL عند طلب معلومات من جدول قاعدة بيانات، كما أنه لإنشاء جداول في قاعدة البيانات يتطلب معرفة بلغة تعريف البيانات DDL، ولتعديل البيانات يجب تعلم لغة معالجة البيانات DML وبذلك نستطيع التحكم الكامل بقواعد البيانات. أما بالنسبة لنظام قواعد البيانات MongoDB فهي تعتمد على لغة استعلام غير مهيكلة وهي MongoDB Query Language، والتي تعتمد بدورها على جافاسكربت وتحديدًا طريقة تبادل البيانات JSON الأمر الذي يجعل MongoDB تدعم لغات متعددة (مثل بايثون وجافا و C#‎ و Perl و PHP وروبي وجافاسكربت) ويمكن كتابة استعلام مركب ومحدد لمختلف الحقول داخل مستندات المجموعة باستخدام عوامل تشغيل الاستعلام. لنستعرض المثال التالي لفهم كيفية الاختلافات التي تحدث بين الاستعلامات لنفترض أن لدينا قاعدة بيانات تحتوي على جدول به الأعمدة التالية: الاسم العنوان رقم حساب متوسط كمية الطلب السعر عدد مخزون المنتجات من قراءة سريعة للتسميات يمكننا معرفة أو توقع المدخلات في كل عمود وبالتالي يمكننا الاستعلام عن البيانات وتحليلها بسهولة لأن تدفق البيانات محدد جيدًا. أما بالنسبة للقواعد البيانات غير المهيكلة فإن البيانات بها لا تتناسب بدقة مع الأعمدة. فمثلًا يمكن أن يتضمن جدول بيانات غير مهيكلة ما يلي: مقاطع فيديو نشاط الجهاز المحمول استخدام وسائل التواصل الاجتماعي مستندات نصية صور هل هنالك طريقة لمعرفة ما هو مقطع الفيديو أو الأغنية الشائعة التي أدخلها المستخدم؟ غالبًا لا يمكننا معرفة أو توقع ذلك، ولهذا السبب لا يمكننا استخدام الأدوات التقليدية للاستعلام عنه لأن تغير البيانات ينتج عنه تغير طريقة التعامل معها، وعمومًا الجدول التالي سيمنحنا المعرفة مبدئية للفوارق بين طريقة طريقة الاستعلام في MySQL و MongoDB. وهذه نظرة سريعة لبعض التعليمات في كل من نظام إدارة قواعد البيانات MySQL و MongoDB. الاستعلام عن جميع الموظفين: من خلال MySQL تكون التعليمة: select * from Employee;‎ من خلال MongoDB تكون التعليمة: db.Employee.find()‎ الاستعلام في بنية قواعد البيانات المعقدة: من خلال MySQL تكون التعليمة: SELECT E.* from Employee E inner join Dept D on E.EMPID=D.EMPID Where D.City=’Irving’ من خلال MongoDB تكون التعليمة: db.Employee.find( { "Address.City" : "Irving" }).pretty()‎ ادخال مجموعة من البيانات: من خلال MySQL تكون التعليمة: Insert into Employee values (‘Brian Lockwood’,45, ‘A’),(‘Charles’,35,’A’) من خلال MongoDB تكون التعليمة: document = [ { "Name" : "Brian Lockwood","Age" : "45", status:"A"}, { "Name" : "Charles","Age" : "35", status:"A"}] طريقة استخدام distinct لتصفية النتائج المكررة من استعلام معين: من خلال MySQL تكون التعليمة: Select distinct status from Employee;‎ من خلال MongoDB تكون التعليمة: db.Employee.distinct( "status");‎ طريقة الاستعلام مشروط: في MySQL تكون التعليمة: Select * from Employee where Age>30 في MongoDB تكون التعليمة: db.Employee.find ( { Age: {$gt : "30"} });‎ يمكننا في MySQL تطبيق تعليمات الدمج لاسترداد البيانات من جدولين أو أكثر من جداول قاعدة البيانات كما أن تعليمة الدمج JOIN توفر العديد من أنواع الدمج مثل الدمج الداخلي أو الخارجي أو اليساري أو اليمني أو المتقاطع، بينما لا تقدم MongoDB عمليات دمج لنتائج الاستعلام وليس لديها تعليمات تعادل هذه الوظيفة بالإضافة إلى ذلك لا توفر MongoDB القوادح Triggers والتي هي وحدات منطقية مقادة بالأحداث مزروعة في قاعدة البيانات، وتُنفذُ قاعدة البيانات أوامر القوادح أوتوماتيكيًا وتكون هذه التعليمات خاصة بالتعامل مع بيانات موجودة في جداول محددة بينما MySQL توفرها. سهولة التعلم للمبتدئين يعد نظام قواعد بيانات MySQL سهل نسبيًا وذلك بسبب أنه متسق ومنظم وهيكليته واضحة ولذلك من الطبيعي أن يكون تعلمه سهل وبسيط رغم طول منحنى تعلمه لكثرة المفاهيم فيه (وأحيانًا تعقيدها) بينما في المقابل نجد بأن البنية غير المهيكلة والمرونة العالية يمكن أن تجعل عملية التعلم أصعب نظرًا لكثرة التفاصيل والسيناريوهات رغم أن تعلم بدء استعمالها وتنفيذها سهل وسريع ويكون غالبًا مدمجًا مع اللغة البرمجية نفسها (أي تكتب الاستعلامات بلغة جافاسكربت بدلًا من لغة SQL) لما تخفي عن المستخدم التعقيد الداخلي. أيهما أفضل MySQL vs MongoDB؟ يعد كل من نظامي MySQL و MongoDB من الأنظمة القوية لإدارة قواعد البيانات، وتعمل كل واحدة منها بصورة مختلفة عن الأخرى نظرًا للاختلاف في نوع قواعد البيانات التي يتعاملان معها، ومن الصعوبة تحديد قاعدة البيانات الأفضل إذ يعتمد الأمر كله على السياق بعض الشركات تعتمد على كلا النظامين للتعامل مع مهام مختلفة وهذا أمر جيد والبعض الآخر يفضل التعامل فقط مع MongoDB لزيادة التركيز وتخفيف التشتت. متى نستخدم MySQL و MongoDB؟ بالرغم من المزايا العديدة التي يتمتع بها نظام MongoDB إلا أن MySQL تفوقت عليها في الموثوقية واتساق البيانات. وإذا كان الأمان يمثل أيضًا أولوية فإن MySQL معترف به على نطاق واسع كواحد من أكثر نظم إدارة قواعد البيانات أمانًا. تعد قواعد البيانات العلائقية الخيار الأنسب للتطبيقات متعددة المستخدمين وكل مستخدم له صلاحيات مختلفة وتتطلب أمان عال وموثوقية، مثل أنظمة المحاسبة والمصارف والبنوك لأن MySQL تركز على الوفاء بخصائص ACID وسلامة المعاملات، بينما تركز MongoDB على السماح بمعدل معاملات مرتفع ولذلك نجدها لا تدعم خصائص ACID في الوضع الافتراضي، وعمومًا يوصى باستخدام نظام MySQL للشركات أو المؤسسات أو المشاريع ذات مخطط البيانات الثابت والتي لا تنوي توسيع نطاق تنوع البيانات، مما يتطلب صيانة سهلة ومنخفضة مع ضمان سلامة البيانات وموثوقيتها، وهي مناسبة أيضًا لمشاريع التجارة الإلكترونية والمواقع التي تتطلب بروتوكولات أمان وموثوقية عالية مثل المشاريع الحكومية. أما نظام إدارة قواعد البيانات MongoDB فهو الخيار الأنسب للشركات الحديثة أو المشاريع التقنية المتطورة ذات المخطط غير مستقر لأن طبيعة البيانات غير العلائقية تسمح باستخدام قواعد البيانات بحرية وبدون بنية محددة مسبقًا الأمر الذي يسهل التحديث البنية أو تطويرها، وتستخدم غالبًا في المشاريع التي تتطلب إدارة المحتوى المتنوع، ومشاريع إنترنت الأشياء Internet of Things، ومواقع التحليلات والإحصائيات في الزمن الحقيقي Real-Time، والمواقع والتطبيقات عالية الاستخدام إجمالًا. يعد موقع Shutterfly مثلًا مميزًا لكيفية الانتقال إلى قواعد البيانات MongoDB، وهو واحدٌ من أشهر مواقع مشاركة للصور عبر الإنترنت، واعتمد في البداية على استخدام قواعد البيانات العلائقية المقدمة من شركة أوراكل لكن قواعد البيانات العلائقية غير مرنة لطبيعة عمل الموقع ومكلفة عند التوسع، كما تسببت في بعض الأحيان باختناقات خصيصًا عند التعامل مع عدد كبير من البيانات، لأن الشركة لديها أكثر من 6 مليارات صورة بالإضافة إلى معدل عمليات يصل إلى 10000 عملية في الثانية، وسرعان ما أدركت الشركة بأن الانتقال إلى قاعدة بيانات غير علائقية تعتمد على المستندات سيُساعدها على زيادة قابلية تطوير الموقع وتحسين أدائه وزيادة إنتاجية وقت البرمجة. يتيح نموذج مستند MongoDB للمطورين تخزين البيانات بالطريقة التي هي عليها بدلًا من محاولة تحويلها لتناسب نوع قواعد بيانات معين، من خلال عملية Normalization وهي عملية تنظيم البيانات في قاعدة البيانات (لمزيد من المعلومات يمكنك الاطلاع على مقال فهم عملية التوحيد Normalization المستخدمة عند تصميم قاعدة البيانات)، قارنت الشركة بين العديد من أنظمة قواعد البيانات البديلة الأخرى مثل BerkeleyDB أو CouchDB أو Cassandra لتستقر في النهاية على MongoDB لإدارة وتخزين بيناتها وأكدت الشركة أنها مسرورة بقرارها الانتقال من Oracle إلى MongoDB واستطاعت توفير 20% من النفقات المتعلقة بقواعد البيانات بعد هذا الانتقال بحسب تصريح أحد مهندسيها. إذا أردت الاطلاع على مقارنة شاملة وسريعة حول كل من MongoDB و MySQL، فيمكنك مشاهدة الفيديو الآتي: الخاتمة تعرفنا في هذا المقال على أهمية قواعد البيانات في الشركات وأخذنا نظرة سريعة إلى سرعة تطورها مع كثرة الاعتماد عليها وبعدها اطلعنا على نظامي إدارة قواعد البيانات MySQL و MongoDB وتعمقنا في فهم الاختلافات والتشابه بينهما من خلال الاطلاع على المجتمع والشعبية وقابلية التوسع ومن ثم فهمنا بين مخطط البيانات وتنوعها بين كِلا النظامين كما تعرفنا على تشابه سرعة وأداء النظامين ولنتعرف بعدها على طريقة حماية قواعد البيانات وإيفاء كل نظام بخصائص ACID ولندخل بعدها بالعمق أكثر من خلال معرفة كيفية كتابة الاستعلامات بينها ومن ثم سهولة تعلم المبتدئين لهذين النظامين وأجبنا بعدها على السؤال المكرر في الأوساط التقنية وهو أيهما أفضل MySQL vs MongoDB؟ كما اختتمنا المقال من خلال معرفة متى نستخدم كل منهما. وختامًا يعتمد القرار النهائي على متطلبات المشروع ونوعية بياناته الذي نعكف على تطويره لذلك يجب أن تكون متطلبات المشروع واضحة، وعمومًا ستقدم كلتا قاعدتي البيانات أداءً مُرضيًا للغاية إذا طبقت في سياق يناسبها. المصادر مقال ?What is MongoDB لصاحبه Jack Vaughan. مقال ?THE WORLD HAS CHANGED – WHY HAVEN’T DATABASE DESIGNS لكاتبه Avishai Ish-Shalom. مقال MongoDB vs MySQL: The Differences Explained لكاتبه Mauro Chojrin. مقال ?What are the main differences between MongoDB and MySQL لمحرري الموقع. مقال How to work with data using MongoDB Query Language لصاحبه Prashanth Jayaram. مقال MongoDB Query Language لمحرري الموقع. اقرأ أيضًا كتاب تصميم قواعد البيانات كتاب الدليل العملي إلى قواعد بيانات PostgreSQL توثيق SQL
    1 نقطة
  16. تُعد أسماء النطاقات جزءًا مفتاحيًا من أجزاء البنية التحتية للإنترنت، فهي التي تزوّد المستخدم بعناوين مقروءة لأي خادم ويب موجود على الإنترنت. يمكن الوصول إلى أي حاسوب متصل بالإنترنت من خلال عنوان آي بي IP Address سواء بنسخته الرابعة IPv4 (مثل 173.194.121.32) أو السادسة IPv6 (مثل 2027:0da8:8b73:0000:0000:8a2e:0370:1337 ). يمكن أن تتعامل الحواسيب مع هذه العناوين بسهولة، ولكن الأمر صعب بالنسبة للمستخدم الذي يحاول إيجاد من يدير الخادم أو ما هي الخدمات التي يقدمها موقع ويب، فعناوين آي بي صعبة التذكر ويمكن أن تتغير مع الوقت. لحل هذه الإشكالات نستخدم عناوين سهلة على المستخدمين ومقروءة تدعى أسماء النطاقات. إذًا، نهدف في هذا المقال إلى التعرف على مفهوم اسم النطاق Domain Name وكيف يعمل وأهميته في تقانة الويب. ننصحك قبل الشروع في قراءة المقال أن تطلع على مقال كيف تعمل شبكات الإنترنت؟، وأن تكون تفاصيل عنوان URL واضحة بالنسبة لك. بنية أسماء النطاقات يتكون اسم النطاق من بنية بسيطة مكونة من عدة أجزاء، ويمكن تتكون من جزء واحد فقط أو اثنين أو ثلاثة …إلخ، وتفصل بينها نقاط وتقرأ من اليمين إلى اليسار: يزودنا كل جزء من هذه الأجزاء بمعلومات محددة عن اسم النطاق عمومًا. نطاق المستوى الأعلى TLD توضح نطاقات المستويات الأعلى Top-Level Domain واختصارًا TLD الغاية من الخدمة التي يقدمها النطاق عمومًا. لا تتطلب أكثر النطاقات العليا شيوعًا (com. وorg. وnet.) أية خدمات ويب لتحقق معايير محددة، بالمقابل تطبق بعض النطاقات العليا الأخرى سياسات أكثر صرامة، وبالتالي ستكون الغاية من استخدام هذه النطاقات واضحة أكثر. يمكن أن تفرض النطاقات العليا المحلية (الخاصة بالدول) مثل us. أو fr. أو se. أن تكون الخدمات أو الموارد بلغة محددة، أو مُستاضفة في بلد محدد، بينما لا يُسمح باستخدام النطاقات العليا gov. إلّا للمنظمات الحكومية، وكذلك الأمر بالنسبة للنطاقات التي تتضمن edu، فهي مسموحة للاستخدام مع المؤسسات التعليمية والأكاديمية فقط. تتكون أسماء النطاقات العليا من 36 محرفًا كحد أقصى علمًا أن معظمها مكون من محرفين أو ثلاثة، كما يمكن أن تضم محارفًا خاصة مثل الأحرف اللاتينية. يمكنك الاطلاع على القائمة الكاملة بأسماء النطاقات العليا على موقع ICANN. العنوان (أو المكون) تأتي العناوين بعد أسماء النطاقات العليا مباشرة على شكل سلسلة من المحارف غير الحساسة لحالة الأحرف والتي يمكن أن يتراوح عددها بين محرف وحتى 63 محرفًا. تتضمن هذه المحارف الحروف الأبجدية اللاتينية من A حتى Z والأرقام من 0 حتى 9 والمحرف - الذي لا يجوز أن يتواجد في بداية أو نهاية سلسلة المحارف. يمكن أن يكون العنوان على سبيل المثال a أو 97 أو hello-strange-person-16-how-are-you. يُدعى العنوان الأقرب إلى النطاق الأعلى بنطاق المستوى الثاني Secondary Level Name واختصارًا SLD، ويمكن لاسم النطاق أن يضم عدة عناوين (أو مكونات). ليس من الضروري إطلاقًا أن يتكون اسم النطاق من ثلاثة عناوين، فاسم النطاق www.inf.ed.ac.uk هو اسم صحيح، كما أن اسم النطاق hsoub.com صحيح أيضًا. وتجدر الإشارة إلى إمكانية إنشاء نطاقات فرعية Subdomains وهي مواقع ويب لها محتوياتها الخاصة ضمن الموقع ذاته باستخدام العناوين كالتالي: Academy.hsoub.com أو accounts.hasoub.com. شراء اسم نطاق بعد أن تعرفنا على هيكلية أسماء النطاقات لنتعرف كيف يمكننا شراء نطاق معين. من يمتلك أسماء النطاقات؟ يمكن شراء أي اسم نطاق غير محجوز وفي حال كان اسم نطاق مستخدم بالفعل فلا يمكنك شراءه حتى يتخلى صاحبه عنه، بالاضافة إلى ذلك لا يمكننا شراء النطاق إلى الأبد لأن ذلك سيؤدي لامتلاء الويب بأسماء غير مستخدمة ومغلقة لا يمكن استخدامها مجددًا. بدلًا من شراء أسماء النطاقات للأبد يمكنك دفع مبلغ معين مقابل حصولك على حق استخدام اسم النطاق الذي تريده لمدة زمنية محددة (عام أو أكثر)، كما يمكنك تجديد حق الاستخدام والذي سيمنح الأولوية لطلبك على طلبات الآخرين، ولكن تذكر بأنك لا تملك اسم النطاق هذا للأبد. تستخدم بعض الشركات التي تُدعى "مُسجِّلات Registrar" سجلات أسماء النطاقات لتتبع المعلومات التقنية والإدارية التي تربطك باسم النطاق الذي تحجزه. العثور على اسم نطاق لتتأكد أن اسم النطاق الذي تختاره متاح للاستخدام أم محجوز اتبع الخطوات التالية: ادخل على موقع شركة مسجّلة فهي تقدم خدمة تدعى “whois” أو "هو إز" تخبرك عن توفر اسم نطاق معين أم لا. إن كنت تستخدم نظام تشغيل مزوّد بمفسّر أوامر Shell، افتح المفسر واكتب الأمر whois يتبعه اسم النطاق ثم اضغط الزر "Enter". إليك مثالًا عمليًا وليكن اسم النطاق الذي نريد البحث عنه هو hsoub.com سيكون الأمر والنتيجة على الشكل التالي: $ whois Hsoub.com Domain Name: HSOUB.COM Registry Domain ID: 1623716742_DOMAIN_COM-VRSN Updated Date: 2019-09-29T14:11:16Z Creation Date: 2010-11-03T21:39:38Z Registrar Registration Expiration Date: 2028-11-03T21:39:38Z Registrar: Name.com, Inc. Registrar IANA ID: 625 Reseller: Domain Status: clientTransferProhibited Registry Registrant ID: Not Available From Registry Registrant Name: Whois Agent Registrant Organization: Domain Protection Services, Inc. Registrant Street: PO Box 1769 Registrant City: Denver Registrant State/Province: CO Registrant Postal Code: 80201 Registrant Country: US Registrant Phone: +1.7208009072 Registrant Fax: +1.7209758725 Registrant Email: https://www.name.com/contact-domain-whois/hsoub.com كما ترى، لا يمكن تسجيل اسم النطاق لأن شركة "حسوب Hsoub" حجزته بالفعل. لنرى إن كان بالإمكان تسجيل اسم النطاق afunkydomainname.org: $ whois afunkydomainname.org NOT FOUND كما ترى لا وجود لاسم النطاق هذا في قاعدة بيانات whois (حتى لحظة الكتابة) وبالتالي يمكنك الاستعلام عنه وحجزه! الحصول على اسم نطاق العملية مباشرة وفق الخطوات التالي: افتح موقع ويب إحدى الشركات المسجِّلة. ستجد عادة زر أو رابط دائمًا بعنوان "احصل على اسم نطاق Get a domain name". إملأ الاستمارة التي تظهر بالمعلومات المطلوبة، وتأكد من أنك لم تخطئ كتابة اسم النطاق الذي ترغب بحجزه، فبمجرد أن تدفع لن تتمكن من التراجع! ستعلمك الشركة المسجّلة متى أصبح اسم النطاق الذي حجزته مسجّلًا وجاهزًا للاستخدام. خلال عدة ساعات ستتعرف كل خوادم أسماء النطاقات Domain Name System اختصارًا DNS على معلومات اسم النطاق الذي حجزته. تحديث خوادم أسماء النطاقات تُخزن قواعد بيانات دي إن إس في جميع خوادم أسماء النطاقات في العالم وترتبط هذه الخوادم جميعها بعدة خوادم خاصة تدعى "خوادم أسماء النطاقات الموثقة Authoritative Name Servers" أو "خوادم دي إن إس المستوى الأعلى Top-Level DNS Servers" وهذه الخوادم بمثابة المدراء للمنظومة ككل. عندما تسجل أي شركة مسجّلة اسم نطاق أو تحدث اسمًا موجودًا فلا بدّ من تحديث المعلومات في قواعد البيانات لجميع خوادم أسماء النطاقات. فعندما يعرف خادم أسماء النطاقات بوجود اسم نطاق ما فسيخزنُ معلوماته لبعض الوقت قبل أن يتأكد من سلامتها ثم يحدّثها (يستعلم خادم أسماء النطاقات من خادم أسماء النطاقات الموثوقة عن اسم النطاق ويحضر المعلومات المحدثة منه). لهذا تستغرق العملية بعض الوقت ليحصل خادم أسماء النطاقات على المعلومات المحدثة لاسم نطاق مسجل لديه (يعلم بوجوده). آلية عمل استعلام دي إن إس DNS كما رأينا سابقًا من السهل أن تكتب اسم النطاق في شريط عنوان المتصفح عندما تريد الوصول إلى صفحة ويب بدلًا من عنوان آي بي لها. لنلق نظرة على العملية: اكتب مثلًا Hsoub.com في شريط عنوان متصفحك. يسأل المتصفح حاسوبك إن كان على دراية بعنوان آي بي الذي يحدده اسم النطاق الذي كتبته (من خلال البحث في ذاكرة دي إن إس مؤقتة على الحاسوب). إن وجدت المعلومات يترجم المتصفح اسم النطاق إلى عنوان آي بي الموجود في الذاكرة المؤقتة ثم يحضر المتصفح المحتوى المطلوب من الخادم المحدد بعنوان آي بي. إن لم يتعرف حاسوبك على عنوان آي بي المرتبط باسم النطاق الذي كتبته سيتوجه المتصفح إلى خادم أسماء النطاقات لسؤاله، لأن عمله بالتحديد هو معرفة عنوان آي بي لكل اسم نطاق مسجل لديه. يعرف حاسوبك الآن عنوان آي بي المطلوب وبالتالي سيتمكن المتصفح من إحضار المحتوى المطلوب من خادم ويب الصحيح. ترجمة -وبتصرف- للمقال What is a Domain Name. اقرأ أيضًا الفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث. ما هي الأدوات المستخدمة في بناء مواقع ويب؟ ما التكلفة المادية الكاملة لبناء موقع ويب؟ ما هي أدوات مطوري الويب المدمجة في المتصفحات؟
    1 نقطة
  17. تُعد شبكة الإنترنت العمود الفقري للويب والبنية التحتية التقنية التي جعلت الويب واقعًا معاشًا. ببساطة شديدة يمكن أن نعرّف الإنترنت بأنها شبكة ضخمة من الحواسيب التي تتواصل مع بعضها. يلف الغموض نوعًا ما تاريخ الإنترنت نظرًا لبدايته كمشروع بحثي مولَه الجيش الأمريكي في ستينات القرن الماضي، ثم تحوّل إلى بنية تحتية عمومية في ثمانينات القرن ذاته بدعم من عدة جامعات حكومية وشركات خاصة. تطورت مع الوقت تقنيات متنوعة تدعم الإنترنت، لكن آلية عملها لم تتغير كثيرًا: فالإنترنت وسيلة لربط الحواسيب مع بعضها بعضًا وتضمن بقاء هذه الحواسب متصلة ببعضها مهما حدث. سنناقش في هذا المقال ماهية الإنترنت وآلية عمله. لفهم مبادئ البنية التحتية التقنية للويب ولمعرفة الفرق الدقيق بينها وبين الإنترنت. الشبكة البسيطة عندما تريد من حاسوبين التواصل، لابد من وصلهما سلكيًا عبر كابل شبكة (أو كما يُعرف باسم كابل إيثرنت) أو لاسلكيًا عبر أنظمة اتصالات لاسلكية مثل تقنية الواي-فاي أو البلوتوث. وستجد أن معظم الحواسب الحديثة تدعم كل وسائل الاتصال التي ذكرناها. يمكن لهذه الشبكة أن تربط حاسوبين مع أي عدد تريده من الحواسب، لكن الوضع سيتعقد بسرعة. فلو حاولت أن تربط 10 حواسب مثلًا ستحتاج إلى 45 كابلًا وتسعة مقابس لوصلها لكل حاسوب. لحل هذه المشكلة يتصل كل حاسوب على الشبكة بجهاز حاسوبي صغير خاص يُدعى الموجّه Router، وهذا الجهاز له وظيفة واحدة: وهي التأكد أنّ الرسالة التي يرسلها حاسوب معين ستصل إلى وجهتها الصحيحة؛ أي إلى الحاسوب الصحيح. فعند ارسال رسالة من الحاسوب A إلى الحاسوب B ستخرج الرسالة من الحاسوب A إلى الموجّه الذي سيحوّل الرسالة بدوره إلى الحاسوب B ويتأكد أن الرسالة لن تحوّل إلى حاسوب آخر مثل C. عند إضافة موجّه إلى الشبكة المكونة من عشرة حواسب، سينخفض عدد الكابلات المطلوبة إلى 10 ومقبس واحد لكل حاسوب، كما سنحتاج إلى موجّه بعشرة مقابس. شبكة مكونة من عدة شبكات نلاحظ أن الأمر بسيط مع عشرة حواسيب، ولكن ماذا عن وصل مئات أو آلاف أو ملايين الحواسيب؟ لن يكفي موّجه واحد بالطبع، وطالما أن الموجّه هو حاسوب كبقية الحواسيب، فما المانع من وصل موجّهين معًا؟ لا شيء. عندما نوصل الحواسيب إلى موجهات ونوصل الموجهات ببعضها يمكننا توسيع الشبكة إلى ما لانهاية نظريًا. تتشابه هذه الشبكة التي بنيناها لشبكة الإنترنت، لكن ينقصها شيء ما. فعندما بنينا شبكتنا الخاصة التي تخدم أغراضنا، نسينا الشبكات الأخرى التي سيبنيها الآخرون لأن كل شخص قادر على بناء شبكته الخاصة ومن غير الممكن مثلًا توصيل كابلات بين منزلك وكل الشبكات المحيطة، فكيف سنحل الأمر إذًا؟ في الحقيقة هناك كابلات متعددة تصل بالفعل إلى منزلك مثل كابل الطاقة الكهربائية وكابل الهاتف. فالبنية التحتية للاتصالات الهاتفية تربط منزلك بالفعل مع أي شخص في العالم وبالتالي سيكون كابل الهاتف الخيار المثالي الذي نحتاج إليه. ولوصل شبكتنا بالبنية التحتية الهاتفية نحتاج إلى جهاز يدعى المودم Modem وهو يحول المعلومات التي توّلدها شبكتنا إلى معلومات تستطيع البنية التحتية الهاتفية فهمها وإدارتها والعكس بالعكس. بعد اتصالنا بالبنية التحتية الهاتفية ستكون الخطوة التالية هي توصيل الرسائل من شبكتنا إلى الشبكة التي نريدها. ولإتمام هذا الأمر سنصل شبكتنا أولًا بما يسمى مزود خدمة الإنترنت Internet Service Provider واختصارًا ISP. ومزود خدمة الإنترنت هي شركة تدير مجموعة خاصة من الموجهات المرتبطة ببعضها ولديها القدرة على الولوج إلى الموجهات الموجودة في مزودات خدمة أخرى. وهكذا تنتقل الرسائل من شبكتنا إلى الشبكة التي نريدها عبر شبكات مزود خدمة الإنترنت. تتكون الإنترنت من هذه البنية التحتية من الشبكات. إيجاد حاسوب معين إذا أردنا إرسال رسالة إلى حاسوب ما، علينا أن تحدد تمامًا من هو مستقبل الرسالة. لهذا السبب يمتلك كل حاسوب متصل إلى الشبكة عنوانًا فريدًا يميزه عن غيره من الحواسيب يدعى عنوان آي بي IP address (وهو اختصار للعبارة Internet Protocol أي بروتوكول إنترنت). يتكون عنوان آي بي من مجموعات مكونة من أربع أرقام تفصل بينها نقاط كالعنوان التالي: 192.168.2.10. تتذكر الحواسيب هذه العناوين جيدًا لكن يصعب على البشر تذكرها. ولتسهيل هذا الأمر يمكن تحويل هذه العناوين المؤلفة من أرقام إلى أسماء يفهمها البشر تُدعى أسماء النطاقات Domain names. فمثلًا (حتى لحظة كتابة هذه السطور ولأن عناوين آي بي تتغير) يرتبط اسم النطاق google.com بعنوان آي بي 142.250.190.78. وهكذا يُسهل اسم النطاق الوصول إلى حاسوب عبر الإنترنت. ما الفرق بين الإنترنت والويب؟ لا بدّ وأنك لاحظت أننا نستخدم أسماء النطاقات عادة عندما نتصفح الويب من خلال المتصفحات، فهل يعني ذلك أنّ الإنترنت والويب هو الشيء ذاته؟ في الحقيقة الأمر ليس بهذه البساطة. يعد الإنترنت كما رأيناه كبنية تحتية تقنية تسمح لمليارات الحواسيب بأن تتواصل مع بعضها، ويمكن لبعض هذه الحواسب والتي تدعى خوادم ويب Web servers أن توصل رسائل مفهومة بالنسبة لمتصفحات الويب، وبالتالي فالإنترنت هي البنية التحتية الأساسية بينما الويب هي خدمات مبنية على هذه البنية. ومن المفيد الإشارة إلى وجود خدمات أخرى مبنية على الإنترنت مثل خدمة البريد الإلكتروني وخدمة المحادثة المبنية على إنترنت Internet Relay Chat واختصارًا IRC. الشبكات الداخلية (إنترانيت) والخارجية (إكسترانت) الإنترانت Intranet هي شبكات خاصة تسمح لأشخاص محددين فقط من منظمة محددة الوصول إليها. تشكل هذه الشبكات بوابة خاصة تساعد الأعضاء على الوصول إلى موارد مشتركة بطريقة آمنة وتسمح لهم التعاون والتواصل فيما بينهم، فيمكن أن تستضيف منظمات شبكة إنترانت خاصة بها لمشاركة صفحات ومعلومات ضمن القسم أو الفريق ومشاركة السواقات لإدارة المستندات الهامة وبوابات لإدارة مهام تتعلق بالأعمال وأدوات للتعاون مثل المنشورات التعاونية wikis ومنصات النقاش ومنظومات الرسائل. تشبه الإكسترانت Extranet الإنترانت إلا أن الإكسترانت تتيح الوصول إلى شبكتها الخاصة كليًا أو جزئيًا للتعاون مع منظمات أخرى وتُستخدم بصورة أساسية لمشاركة المعلومات بأمان وسرية مع العملاء والمضاربين، وتتشابه وظيفيًا في الكثير من الأحيان مع الإنترانت فيما يتعلق بمشاركة الملفات والمعلومات وأدوات التعاون ومنصات النقاش وغيرها. تعمل كلتا الشبكتين على البنية التحتية نفسها التي تعمل عليها الإنترنت كما تستخدم البروتوكولات ذاتها، وبالتالي يمكن الوصول إليها من قبل الأعضاء المفوضين بذلك ومن مواقع فيزيائية مختلفة. ترجمة -وبتصرف- للمقال How does Internet work اقرأ أيضًا ما هو عنوان URL في الويب؟ الفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث؟ ما هي أسماء النطاقات في شبكة الإنترنت؟
    1 نقطة
  18. مقدمة يعدّ توزيع الحِمل Load balancing مكوِّنا أساسيًّا في البنى التحتية عالية التوفر Highly-available، إذ يكثر استخدامه لتحسين الأداء والثبات في مختلف الخدمات على الشبكة؛ بما في ذلك مواقع الوِب، التطبيقات، قواعد البيانات وغيرها. يقوم مبدأ توزيع الحِمل على الاعتماد على أكثر من خادوم وتوزيع العمل المطلوب إنجازه بينها. يوضّح المخطّط التالي بنية تحتية لموقع وِب بدون توزيع حِمل. يتصل الزائر في هذا المثال بخادوم الوِب مباشرة، على العنوان yourdomain.com. إن حدث خلل يجعل الخادوم المضيّف للموقع yourdomain.com غير قادر على العمل فإن الوصول إلى هذا الموقع لن يكون متاحا. علاوةً على ذلك؛ إن أراد الكثير من الزوّار الوصول إلى الموقع في نفس اللحظة ولم يستطع الخادوم التعامل معهم بالسرعة المطلوبة فإن تنزيل صفحات الموقع سيصير بطيئًا، وربما يصبح خارج الخدمة. يمثّل الخادوم في هذه الحالة نقطة إخفاق Point of failure بالنسبة للبنية التحتية، فتوقفه عن العمل يجعل البنية بجميع مكوّناتها خارج الخدمة. يمكن التخفيف من تأثير نقطة الإخفاق الوحيدة هذه بإضافة موزّع حِمل Load balancer وخادوم وِب آخر على الأقل إلى السند الخلفي Backend. تقدّم جميع الخواديم في السند الخلفي نفس المحتوى، فيحصُل الزائر بالتالي على محتوى متجانس بغضّ النظر عن خادوم الوِب الذي أجاب عن طلبه. يتصل الزائر في المخطط أعلاه أولا بموزّع الحِمل الذي يوجّه طلب الزائر إلى خادوم في السند الخلفي. يجيب الخادوم الذي وُجِّه إليه الطلبُ الزائرَ مباشرة. يصبح موزّع الحِمل في هذه الحالة هو نقطة الإخفاق، بمعنى أن توقفه عن العمل يجعل كامل البنية التحتية تتوقف عن العمل. يمكن التغلب على هذا المشكل بإدراج موزّع حِمل ثان؛ إلا أننا سنشرح - قبل أن نناقش هذه الإمكانية - كيفية عمل موزّع الحِمل. ما نوع حركة البيانات التي يمكن لموزع الحمل التعامل معها؟ يستخدم مديرو الأنظمة موزّعات الحمل لإنشاء قواعد توجيه تتعامل أساسا مع أنواع البيانات الأربعة التالية: HTTP: تُوجَّه حركة البيانات في هذه الحالة اعتمادًا على الآليات المعيارية لميثاق HTTP. يعيّن موزّع الحِمل قيم الترويسات X-Forwarded-For، X-Forwarded-Proto وX-Forwarded-Port من أجل تمرير المعلومات الأصلية عن الطلب، أي تلك القادمة من الزائر، إلى الخادوم الذي سيردّ على الطلب . HTTPS: يشبه هذا النوع النوعَ السابق، مع فرق أنه يستخدم التعميّة Encryption. تُعالَج البيانات المعمّاة بإحدى طريقتيْن: تمرير SSL +(أو SSL Passthrough)وتعتمد هذه الطريقة على الاحتفاظ بالتعميّة إلى أن تصل البيانات للخادوم الذي سيجيب على الطلب؛ أما الثانيّة فتُدعى إنهاء SSL (أو SSL Termination) ويوضَع عبء التعميّة وفكّها على موزّع الحمل، غير أن البيانات بين موزّع الحمل وخادوم الوِب تُنقَل دون تعميّة، عكس الطريقة الأولى. TCP: يمكن استخدام ميثاق TCP لتوزيع حركة البيانات بين تطبيقات لا تستخدم HTTP أو HTTPS؛ مثلا بين عنقود Cluster من خواديم قواعد البيانات. UDP: تدعم بعض موزعات الحمل الحديثة توجيه البيانات الخاصّة بمواثيق الإنترنت التي تستخدم حزم UDP مثل نظام أسماء النطاقات DNS وsyslogd. تعرّف قواعدُ التوجيه الميثاقَ والمنفَذ Port على موزّع الحمل وتربطهما بميثاق ومنفَذ موجودين على الخادوم الذي يختاره موزّع الحِمل للإجابة على طلب الزائر. كيف يختار موزّع الحمل خادوما في السند الخلفي؟ يختار موزّع الحمل الخادوم الذي سيتولّى الإجابة على الطلب بناء على عاملَيْن: أولاً؛ يتأكّد موزّع الحمل من قدرة الخادوم على الإجابة على الطلبات التي ترده، ثم يستخدم مجموعة من القواعد المضبوطة مسبقا لاختيار خادوم من بين الخواديم القادرة على الإجابة على الطلب. التحقق من قدرة الخادوم لا يجوز أن توجِّه موزعات الحِمل الطلبات إلى خادوم ليست لديه القدرة على التعامل معها. يراقب موزّع الحمل حالة الخواديم في السند الخلفي بمحاولة الاتصال بها مستخدما الميثاق والمنفَذ المعرَّفيْن في قواعد التوجيه المضبوطة عليه. إن أخفق خادوم في الإجابة على محاولات موزّع الحمل للاتصال به فإن موزع الحمل يعدّه غير قادر على معالجة الطلبات، ويحذفه بالتالي من قائمة الخواديم لديه، فلا يُوجِّه له أي طلب؛ إلى أن يجيب بطريقة مناسبة على محاولات الاتّصال اللاحقة. خوارزميّات توزيع الحِمل تحدّد خوارزميّة خادوما - من بين الخواديم الجاهزة للإجابة - لتوجيه الطلب إليه. تعدّ الخوارزميّات التالية من بين الخوارزميّات الأكثر استخداما في توزيع الحمل: الاختيار الدوري Round robin: تُختار الخواديم في هذه الخوارزميّة بالتتالي. يوجّه موزع الحمل عند استخدام هذه الخوارزمية أول طلب إلى أول خادوم في قائمته، ثم عند وصول الطلب الثاني يوجّهه إلى الخادوم الموالي، وهكذا إلى أن يصل لآخر خادوم في القائمة فيعود للأول. الأقل اتصالات Least connections: يُنصَح بهذه الخوارزميّة عندما تأخذ جلسات الاتصال Sessions آمادا طويلة. يختار الموزّع في هذه الحالة الخادوم ذا الاتصالات النشطة اﻷقل عددا. حسب المصدر Source: يختار موزّع الحمل عند استخدام هذه الخوارزميّة الخادومَ الذي سيجيب على الطلب بناءً على عنوان IP المصدَر، مثلا؛ عنوان IP الزائر. يعني استخدامُ هذه الخوارزميّة أن طلبات زائر معيَّن ستُوجَّه دوما إلى نفس الخادوم. تختلف الخوارزميّات المتاحة للاختيار بينها، حسب التقنيات المستخدمة في موزّع الحمل. كيف تتعامل موزّعات الحِمل مع الحالة State؟ تطلب بعض التطبيقات أن يواصل الزائر الاتصال بنفس الخادوم خلال جلسة الاتصال الواحدة. يمكن عند الاقتضاء استخدام خوارزميّة الاختيار حسب المصدر التي تركّز على عنوان الزائر. توجد طريقة أخرى لتلبية هذه الحاجة، وذلك بتنفيذها على مستوى تطبيق الوِب عبر الجلسات الملتصقة Sticky sessions. إذ يعيّن موزّع الحمل ملف تتبّع Cookie خاصّ بكل جلسة ثم يوجّه الطلبات التابعة لنفس الجلسة إلى نفس الخادوم، اعتمادا على ملف التتبع. تكرار موزّعات الحمل ذكرنا سابقا أن موزّع الحِمل يمكن أن يمثّل نقطة إخفاق إن كان وحيدا، وأنه يمكن تصحيح هذه الوضعية بإضافة موزّع حمل ثان. يتصل موزّع الحِمل الجديد بالأوّل لتشكيل عنقود من خادومَيْ توزيع حِمل يراقب كلّ منهما الآخر ويتأكّد من جاهزيّته لتلقي الطلبات وتوجيهها إلى الخادوم المناسب في المنتهى الخلفي. يمكن لكلٍّ من الخادوميْن في هذه الحالة اكتشاف إخفاق الآخر وعودته إلى العمل. يُحيل نظام أسماء النطاقات DNS المستخدمين إلى موزّع الحِمل الثاني في حال توقّف الأول عن العمل؛ إلا أنّ سجلات أسماء النطاقات يمكن أن تأخذ وقتا حتى يكتمل تحديثها لدى المستخدمين في جميع أنحاء العالم. يلجأ كثير من مديري الأنظمة، للتغلّب على هذا المشكل، إلى وسائل تتيح إعادة تعيين عناوين IP بمرونة، مثل عناوين IP العائمة Floating IPs. تتخلّص هذه الوسائل من مشاكل انتشار السجلات وتحديث التخبئة في سجلات DNS بتوفير عنوان IP ثابت يمكن إعادة تعيينه حسب الحاجة، وبسرعة. لا تغيّر إعادة تعيين IP من العنوان الذي تشير إليه سجلات DNS، إلا أنها تجعل من الممكن نقل عنوان IP نفسه بين خواديم مختلفة. ترجمة - بتصرف - لمقال What is Load Balancing? لصاحبته Melissa Anderson.
    1 نقطة
  19. منذ زمن سحيق، كانت الذاكرةُ أكثر وظيفة نحتاجها ونعتمد عليها في الحاسوب. ورغم اختلاف التقنيات وأساليب التنفيذ الكامنة وراءها، إلّا أنّ معظم الحواسيب تأتي بالعتاد الضروريّ لمعالجة المعلومات وحفظها بأمان لاستخدامها في المستقبل متى احتجنا لها. لقد صار من المستحيل في عالمنا الحديث تخيل أيّ عمل لا يستفيد من هذه القدرة في الأجهزة، سواء كانت خواديم أو حواسيب شخصية أو كفّيّة. تُعالَج البيانات وتُسجَّل وتُسترجَع مع كل عملية، وفي كل مكان من الألعاب إلى الأدوات المتعلقة بالأعمال، بما فيها المواقع. أنظمة إدارة قواعد البيانات (DataBase Management Systems – DBMS) هي برمجيات عالية المستوى تعمل مع واجهات برمجة تطبيقات (APIs) أدنى منها في المستوى، وتلك الواجهات بدورها تهتم بهذه العمليات. لقد تم تطوير العديد من أنظمة إدارة قواعد البيانات (كقواعد البيانات العلائقيّة relational databases، وnoSQL، وغيرها) لعقود من الزمن للمساعدة على حلّ المشكلات المختلفة، إضافة إلى برامج لها (مثل MySQL ,PostgreSQL ,MongoDB ,Redis، إلخ). سنقوم في هذا المقال بالمرور على أساسيّات قواعد البيانات وأنظمة إدارة قواعد البيانات. وسنتعرف من خلالها على المنطق الذي تعمل به قواعد البيانات المختلفة، وكيفية التفرقة بينها. أنظمة إدارة قواعد البياناتإن مفهوم نظام إدارة قاعدة البيانات مظلّةٌ تندرج تحتها كلّ الأدوات المختلفة أنواعها (كبرامج الحاسوب والمكتبات المضمّنة)، والتي غالبًا تعمل بطرق مختلفة وفريدة جدًّا. تتعامل هذه التطبيقات مع مجموعات من المعلومات، أو تساعد بكثرة في التعامل معها. وحيث أن المعلومات (أو البيانات) يُمكِن إن تأتي بأشكال وأحجام مختلفة، فقد تم تطوير العشرات من أنظمة قواعد البيانات، ومعها أعداد هائلة من تطبيقات قواعد البيانات منذ بداية النصف الثاني من القرن الحادي والعشرين، وذلك من أجل تلبية الاحتياجات الحوسبيّة والبرمجية المختلفة. تُبنى أنظمة إدارة قواعد البيانات على نماذج لقواعد البيانات: وهي بُنى محدّدة للتعامل مع البيانات. وكل تطبيق ونظام إدارة محتوى جديد أنشئ لتطبيق أساليبها يعمل بطريقة مختلفة فيما يتعلق بالتعريفات وعمليات التخزين والاسترجاع للمعلومات المُعطاة. ورغم أنّ هناك عددًا كبيرًا من الحلول التي تُنشئ أنظمة إدارة قواعد بيانات مختلفة، إلّا أنّ كلّ مدة زمنية تضمّنت خيارات محدودة صارت شائعة جدًّا وبقيت قيد الاستخدام لمدة أطول، والغالب أنّ أكثرها هيمنة على هذه الساحة خلال العقدين الأخيرين (وربما أكثر من ذلك) هي أنظمة إدارة قواعد البيانات العلائقيّة (Relational Database Management Systems – RDBMS). أنواع قواعد البياناتيستخدم كلُّ نظام إدارة بياناتٍ نموذجًا لقواعد البيانات لترتيب البيانات التي يديرها منطقيًّا. هذه النماذج (أو الأنواع) هي الخطوة الأولى والمحدّد الأهم لكيفية عمل تطبيق قواعد البيانات وكيفية تعامله مع المعلومات وتصرفه بها. هناك بعض الأنواع المختلفة لنماذج لقواعد البيانات التي تعرض بوضوع ودقّة معنى هيكلة البيانات، والغالب أن أكثر هذه الأنواع شهرةً قواعدُ البيانات العلائقيّة. ورغم أنّ النموذج العلائقيّ وقواعد البيانات العلائقيّة (relational databases) مرنة وقويّة للغاية –عندما يعلم المبرمج كيف يستخدمها–، إلّا أنّ هناك بعض المشكلات التي واجهات عديدين، وبعض المزايا التي لم تقدمها هذه الحلول. لقد بدأت حديثًا مجموعة من التطبيقات والأنظمة المختلفة المدعوّة بقواعد بيانات NoSQL بالاشتهار بسرعة كبيرة، والتي قدمت وعودًا لحل هذه المشكلات وتقديم بعض الوظائف المثيرة للاهتمام بشدّة. بالتخلص من البيانات المهيكلة بطريقة متصلّبة (بإبقاء النمط المعرّف في النموذج العلائقيّ (relational model))، تعمل هذه الأنظمة بتقديم طريقة حرّة أكثر في التعامل مع المعلومات، وبهذا توفّر سهولة ومرونة عاليتين جدًّا؛ رغم أنّها تأتي بمشاكل خاصة بها –والتي تكون بعضها جدّيّة– فيما يتعلق بطبيعة البيانات الهامّة والتي لا غنى عنها. النموذج العلائقيّيقدّم النظام العلائقيّ الذي ظهر في تسعينات القرن الماضي طريقة مناسبة للرياضيات في هيكلة وحفظ واستخدام البيانات. توسّع هذه الطريقة من التصاميم القديمة، كالنموذج المسطّح (flat)، والشبكيّ، وغيرها، وذلك بتقديمها مفهوم "العلاقات". تقدّم العلاقات فوائد تتعلق بتجميع البيانات كمجموعات مقيّدة، تربط فيها جداول البيانات –المحتوية على معلومات بطريقة منظمة (كاسم شخص وعنوانه مثلاً)– كل المدخلات بإعطاء قيم للصفات (كرقم هوية الشخص مثلًا). وبفضل عقود من البحث والتطوير، تعمل أنظمة قواعد البيانات التي تستخدم النموذج العلائقيّ بكفاءة وموثوقيّة عاليتين جدًّا. أضف إلى ذلك الخبرة الطويلة للمبرمجين ومديري قواعد البيانات في التعامل مع هذه الأدوات؛ لقد أدّى هذا إلى أن يصبح استخدام تطبيقات قواعد البيانات العلائقيّة الخيار الأمثل للتطبيقات ذات المهام الحرجة، والتي لا يمكنها احتمال فقدان أيّة بيانات تحت أيّ ظرف، وخاصة كنتيجة لخلل ما أو لطبيعة التطبيق نفسه الذي قد يكون أكثر عرضة للأخطاء. ورغم طبيعتها الصارمة المتعلقة بتشكيل والتعامل مع البيانات، يمكن لقواعد البيانات العلائقيّة أن تكون مرنة للغاية وأن تقدم الكثير، وذلك بتقديم قدر ضئيل من المجهود. التوجّه عديم النموذج (Model-less) أو NoSQLتعتمد طريقة NoSQL في هيكلة البيانات على التخلص من هذه القيود، حيث تحرر أساليب حفظ، واستعلام، واستخدام المعلومات. تسعى قواعد بيانات NoSQL إلى التخلص من العلائقات المعقدة، وتقدم أنواع عديدة من الطرق للحفاظ على البيانات والعمل عليها لحالات استخدام معينة بكفاءة (كتخزين مستندات كاملة النصوص)، وذلك من خلال استخدامها توجّها غير منظم (أو الهيكلة على الطريق / أثناء العمل). أنظمة إدارة قواعد بيانات شائعةهدفنا في هذا المقال هو أن نقدم لك نماذج عن بعض أشهر حلول قواعد البيانات وأكثرها استخدامًا. ورغم صعوبة الوصول إلى نتيجة بخصوص نسبة الاستخدام، يمكننا بوضوح افتراض أنّه بالنسبة لغالب الناس، تقع الاختيارات بين محرّكات قواعد البيانات العلائقيّة، أو محرك NoSQL أحدث. لكن قبل البدء بشرح الفروقات بين التطبيقات المختلفة لكل منهما، دعنا نرى ما يجري خلف الستار. أنظمة إدارة قواعد البيانات العلائقيّةلقد حصلت أنظمة إدارة قواعد البيانات العلائقيّة على اسمها من النموذج الذي تعتمد عليه، وهو النموذج العلائقيّ الذي ناقشناه أعلاه. إنّ هذه الأنظمة –الآن، وستبقى لمدة من الزمن في المستقبل– الخيار المفضّل للحفاظ على البيانات موثوقة وآمنة؛ وهي كذلك كفؤة. تتطلب أنظمة إدارة قواعد البيانات العلائقيّة مخططات معرفة ومحددة جيدًا –ولا يجب أن يختلط الأمر مع تعريف PostgreSQL الخاص بهذه الأنظمة– لقبول هذه البيانات. تشكّل هذه الهيئات التي يحددها المستخدم كيفية حفظ واستخدام البيانات. إنّ هذه المخططات شبيهة جدًّا بالجداول، وفيها أعمدة تمثّل عدد ونوع المعلومات التي تنتمي لكل سجل، والصفوف التي تمثّل المدخلات. من أنظمة إدارة قواعد البيانات الشائعة نذكر: SQLite: نظام إدارة قواعد بيانات علائقيّة مضمّن قويّ جدًّا.MySQL: نظام إدارة قواعد بيانات علائقيّة الأكثر شهرة والشائع استخدامه.PostgreSQL: أكثر نظام إدارة قواعد بيانات علائقيّة كيانيّ (objective-RDBMS) متقدم وهو متوافق مع SQL ومفتوح المصدر.ملاحظة: لمعرفة المزيد عن أنظمة إدارة قواعد بيانات NoSQL، راجع المقالة التالية عن الموضوع: A Comparison Of NoSQL Database Management Systems. أنظمة قواعد بيانات NoSQL (أو NewSQL)لا تأتي أنظمة قواعد بيانات NoSQL بنموذج كالمستخدم في (أو الذي تحتاجه) الحلول العلائقيّة المهيكلة. هناك العديد من التطبيقات، وكلّ منها تعمل بطريقة مختلفة كليًّا، وتخدم احتياجات محدّدة. هذه الحلول عديمة المخططات (schema-less) إمّا تسمح تشكيلات غير محدودة للمدخلات، أو –على العكس– بسيطة جدًّا ولكنها كفؤة للغاية كمخازن قيم معتمد على المفاتيح (key based value stores) مفيدة. على خلاف قواعد البيانات العلائقيّة التقليديّة، يمكن تجميع مجموعات من البينات معًا باستخدام قواعد بيانات NoSQL، كـ MongoDB مثلًا. تُبقي مخازن المستندات هذه كل قطعة من البيانات مع بعضها كمجموعة واحدة (أي كملف) في قاعدة البيانات. يمكن تمثيل هذه المستندات ككيانات بيانات منفردة، مثلها في ذلك كمثل JSON، ومع ذلك تبقى كراسات، وذلك يعتمد على خصائصها. ليس لقواعد بيانات NoSQL طريقة موحدة للاستعلام عن البيانات (مثل SQL لقواعد البيانات العلائقيّة) ويقدم كلّ من الحلول طريقته الخاصّة للاستعلام. ملاحظة: لمعرفة المزيد عن أنظمة إدارة قواعد البيانات العلائقيّة، ألق نظرة على هذه المقالة المتعلقة بالموضوع: A Comparison Of Relational Database Management Systems. مقارنة بين أنظمة إدارة قواعد بيانات SQL و NoSQLمن أجل الوصول إلى نتيجة بسيطة ومفهومة، لنحلّل أولًا الاختلافات بين أنظمة إدارة قواعد البيانات: هيكلية ونوع البيانات المحتفظ بها:تتطلب قواعد البيانات العلائقيّة SQL هيكلة ذات خصائص محدّدة للحفاظ على البيانات، على خلاف قواعد بيانات NoSQL التي تسمح بعمليات انسياب حُرّ (free-flow operations). الاستعلام: وبغضّ النظر عن تراخيصها، تستخدم كلّ قواعد البيانات العلائقيّة معيار SQL إلى حدّ ما، ولهذا يمكن الاستعلام فيها بلغة SQL (أي Structured Query Language). أما قواعد بيانات NoSQL فلا تستخدم طريقة محدّدة للعمل على البيانات التي تديرها. التحجيم: يمكن تحجيم كلي الحلين عموديًّا (أي بزيادة موارد النظام). لكن لكون حلول NoSQL تطبيقات أحدث (وأبسط)، فهذا يجعلها تقدّم وسائل أسهل بكثير لتحجيمها أفقيًّا (أي بإنشاء شبكة عنقودية cluster من أجهزة متعدّدة). المتانة Reliability: عندما يتعلق الأمر بالمتانة والثقة الآمنة بالقَيد المنفّذ، تبقى قواعد بيانات SQL الخيار الأفضل. الدعم: لأنظمة إدارة قواعد البيانات العلائقيّة تاريخ طويل استمر لعقود من الزمن. إنها شائعة جدًّا، ومن السهل إيجاد دعم سواء مجانيّ أو مدفوع. إذا حدثت مشكلة، فمن الأسهل حلّها عليها من قواعد بيانات NoSQL التي شاعت حديثًا، وخاصة إذا كان الحلّ موضع السؤال ذا طبيعة معقّدة (مثل MongoDB). احتياجات حفظ واستعلام البيانات المعقدة: إنّ قواعد البيانات العلائقيّة بطبيعتها الخيار الأمثل لاحتياجات حفظ البيانات والاستعلامات المعقّدة. إنها أكثر كفاءة وتتفوق في هذا المجال. ترجمة -وبتصرّف- للمقال Understanding SQL And NoSQL Databases And Different Database Models لصاحبه O.S. Tezer.
    1 نقطة
  20. هذا المقال هو الجزء الأول من جزأين يشرحان موضوع الحوسبة السحابيّة. يناقش هذا المقال المتطلبات المسبقة وما تحتاج إلى معرفته قبل بدء رحلتك في الحوسبة السحابية. ويناقش كذلك بعض الافتراضات الخاطئة المتعلقة بالحوسبة السحابية، ويعمل على تصحيح المفاهيم المتعلقة بها، كما ويوضح مفهومي الأجهزة الافتراضيّة (الأجهزة الظاهريّة)، والحوسبة السحابيّة العامّة والخاصّة. ومن ثمّ يناقش أحد المفاهيم المتعلّقة بالحوسبة السحابية والتي تتردّد كثيرًا، وهو مفهوم "مهندس حوسبة سحابية" (Cloud Architect)؛ سنناقش في هذا المقال ما يقوم به مهندس الحوسبة السحابية، وسنحلّل المهارات والشهادات اللازمة لتصبح مهندس حوسبة سحابيّة. وسنذكر كذلك بعض أنواع الوظائف المتاحة إذا قرّرت جعل هذا المجال حرفتك. المتطلبات المسبقة لتعلم الحوسبة السحابية يسأل العديد من المهتمين: "ما المتطلبات والمعرفة المسبقة اللازمة لبدء تعلم الحوسبة السحابية؟" سنعطي - في هذا المقال - المعلومات اللازمة للإجابة على هذا السؤال، لتكون جاهزًا لبدء تعلم الحوسبة السحابية دون قلق. يشير مفهوم الحوسبة السحابية إلى مجال واسع من تقنية المعلومات تشمل: البنية التحتية العتادية، والبنية التحتية البرمجية، ومنشآت مراكز البيانات (data centers)، وتقنيات الأجهزة الافتراضية (أو الأجهزة الظاهرية - Virtualization)، ومفاهيم هندسة البرمجيات. كلّ هذه المجالات متصلة ببعضها وتوفر لك معرفة أولية جيدة تسهّل عليك رحلتك في استكشاف وتعلّم استخدام منصات الحوسبة السحابية والعمل فيها؛ ولكننا سنركّز في هذا المقال على مزودي خدمة البنية التحتية السحابية (Infrastructure as a Service - IaaS)، مثل خدمات أمازون (Amazon Web Services - AWS)، و Microsoft Azure، و Google Compute Engine و Rackspace Cloud، وكذلك على مزودي خدمة المنصة السحابية (Platform as a Service - PaaS)، مثل Salesforce.com، و Microsoft Azure، و Google App Engine. يمكننا البدء بافتراض أنّك لن تحتاج شهادة جامعية في أحد مجالات الحاسوب لتعلم الحوسبة السحابية. يمكنك بدء تعلم الحوسبة السحابية من الصفر حتى وإن كانت مهاراتك في تقنية المعلومات بسيطة جدًّا. افتراضات مغلوطة عن الحوسبة السحابية 1. لتعلم الحوسبة السحابية يجب أن تجيد البرمجة يمكنك أن تبدأ تعلم الحوسبة السحابية باستخدام خدمة حوسبة سحابية - عامّة أو خاصّة - حتّى وإن لم تكن مطوّر برمجيات. 2. يجب أن تكون لديك خبرة سابقة في عالم تقنية المعلومات الحوسبة السحابية تقنية مستخدمة في كل المجالات وحول العالم، ومن شأن فهمها أن يساعد الجميع، وليس فقط ذوي الاهتمامات التقنيّة؛ بل غالب الظنّ أنك تعمل في مؤسّسة تستخدم الحوسبة السحابية بالفعل. 3. الحوسبة السحابية فقط للتقنيين ومطوري البرمجيات إنّ الحوسبة السحابيّة تغيّر طريقة بناء الشركات لأنظمة المعلومات لديها، وكيفية استخدامها لها، بما في ذلك كلّ برمجياتها، ويجب على المدراء، والمسوّقين، ومدراء الأنظمة، والمطورين تعلّمها؛ ولكن - بالطبع- بتوجّهات مختلفة، مركّزين على الجوانب المتعلّقة بأدوارهم ومسؤوليّاتهم. أنظمة التشغيل والأجهزة الافتراضيّة والشبكة بما أنّ الحوسبة السحابية مجالها واسع، لكي تتعلّم الحوسبة السحابية تحتاج لبعض المهارات تتعلق بالمفاهيم الأساسيّة لأنظمة التشغيل وكيف تعمل (دون الخوض في تفاصيلها الدقيقة)، مثل Windows ولينُكس ومفاهيم بسيطة تتعلّق بهما. إذا كانت معرفتك جيدة في هذه الأمور، فأنت تعرف أنّ التقنيات المتعلّقة باستخدام الأجهزة الافتراضيّة (أو الأجهزة الظاهريّة Virtualization) لها دورً مهمّ عندما نتحدّث عن الحوسبة السحابيّة. لا توجد تجربة تضاهي تشغيل جهاز افتراضيّ بنفسك (يمكنك فعل ذلك باستخدام VirtualBox) لتفهم كيف تعمل بيئة الأجهزة الافتراضيّة. تمكّنك هذه التقنيّات من إنشاء بيئة ظاهريّة تحدّد فيها عدد وسرعة المعالجات المركزية (CPU) والذاكرة الرئيسيّة (RAM) ومساحة التخزين، وكذلك نظام التشغيل الذي يعمل عليها مثل Windows أو Linux. تتشارك الأجهزة الافتراضيّة في العتاد الحقيقيّ وأجهزة الشبكة ولكنّها منفصلة عن بعضها. من أوائل الشركات الرائدة في هذا المجال شركة تُدعى VMWare. لقد كانت الحوسبة الظاهريّة (أو الأجهزة الافتراضيّة) معروفة جيّدًا قبل VMWare، ولكنّ هذه الشركة غيّرت السوق المتعلّق بها، حيث حوّلت هذه التقنيّة إلى حزمة برمجيّة جاهزة للاستخدام ممّا جعلها شائعة في الشركات صغيرة كانت أم كبيرة. لقد قدّمت هذه التقنيّة مفهومًا اقتصاديًّا واستراتيجيًّا جديدًا، وهو Consolidation، ويعني حرفيًّا الدمج أو الجَمع، ويشير إلى جمع أكثر من خدمة وأكثر من جهاز افتراضيّ على جهاز حقيقيّ واحد. ويعني هذا أن الشركات حول العالم لم يعد واجبًا عليها توفير خادم حقيقيّ لكل نوع من التطبيقات أو الأحمال التي يشغّلونها، بل صار بإمكانهم مشاركة الموارد وتقسيمها بين عدد من الأجهزة الافتراضيّة. مفاهيم أساسيّة عليك معرفتها عن الأجهزة الافتراضيّة Hypervisor: هو قلب نظام الأجهزة الافتراضيّة والذي يشغّل كلّ الأجهزة الافتراضيّة. ومن الأمثلة عليه VMWare وKVM وXen و OpenVZ. تستخدم كلّ بيئات الحوسبة السحابيّة hypervisor معدّل. أمازون مثلًا تستخدم Xen. الجهاز الافتراضيّ (أو الجهاز الظاهريّ، وبالإنجليزيّة: Virtual Machine): وهو العنصر الأساسيّ في هذه التقنيّة. اعلَم أنّ للجهاز الافتراضيّ نظام تشغيل ومعالج وذاكرة وقرص تخزين والعديد من الإعدادات المتعلّقة بالشبكة. مزايا استخدام الأجهزة الافتراضيّة: الجَمع (جمع أكثر من جهاز على عتاد واحد)، وإمكانيّة نقل الأجهزة الافتراضيّة بين الخوادم الحقيقيّة (والتي تسمّى أيضًا بالعُقَد physical nodes)، والمرونة في إضافة موارد جديدة إلى جهاز افتراضيّ موجود. ما إن تصبِح ملمًّا بأساسيّات تقنيّات الحوسبة الظاهريّة (الأجهزة الافتراضيّة) وأنظمة التشغيل، فعليك بأخذ مساق مقدمة في الشبكات، ومن ثمّ ستتعلّم الحوسبة السحابية بسهولة. يمكن أن يكون مجال الشبكات صعبًا، وسيحتاج حتّى ذوو المهارات العالية بعض الوقت لفهمه بالكامل. راجع القسم المتعلّق بالشبكات في هذا المقال لفهم المتطلبات اللازمة للخوض في هذا المجال. وفي النهاية، نريد تكوين فكرة واضحة عن معنى كلّ من الحوسبة السحابيّة العامّة والخاصّة. السحابة العامّة: تشير إلى البنية التحتية التي من الممكن للعموم الوصول إليها وتخزين بيانات وأجهزة افتراضيّة وأيّ نوع من الموارد السحابيّة. يمكنك استخدامها بنفسك، ولست بحاجة إلى الاستثمار في العتاد والبنية التحتيّة من أجل ذلك. يمكنك استخدام السحابات العامّة والدفع حسب الاستخدام. وهذا يشبه استئجار السيّارة لمدّة معينة من الوقت بدلًا من شرائها وامتلاكها. السحابة الخاصّة: تحتاج الشركات إلى كلّ المرونة والمزايا التي تقدمها الحوسبة السحابيّة، ولكن قد تكون لديها بنيتها التحتيّة ومركز البيانات (data center) الخاصّ بها. في هذه الحالة، تكون الشركة مسؤولة عن إدارة كلّ شيء فيها. ما هي هندسة الحوسبة السحابيّة يشير مفهوم معمارية الحوسبة السحابيّة (أو هندسة الحوسبة السحابيّة) إلى المكوّنات الرئيسيّة والفرعيّة التي تحتاجها الحوسبة السحابيّة. وتتكون هذه المكوّنات عادة من منصّة الواجهة، والمنصّة الخلفيّة، ونظام التوصيل السحابيّ للمحتوى (cloud-based delivery) والشبكة. وتشكّل هذه المكوّنات مجتمعة معماريّة الحوسبة السحابيّة. ويعتمد تصميم حلول الحوسبة السحابيّة على أساليب وإجراءات هندسيّة تمّ تطويرها على مدى العقدين الماضيين. مهندس الحوسبة السحابية مسؤول عن تحويل المتطلبات التقنيّة للمشروع إلى معماريّة وتصميم يوجّهان سير العمل للوصول إلى المنتج النهائيّ. وغالبًا يكون مهندس الحوسبة السحابية مسؤولًا أيضًا عن رأبِ الصدعِ بين المشكلات المركّبة المتعلّقة بالأعمال وبين الحلول المعتمدة على الحوسبة السحابيّة. ويعمل الأعضاء الآخرون في الفريق التقنيّ - بما فيهم مهندس دعم المطورين DevOps والمطورون - مع مهندس الحوسبة السحابيّة للتأكد من بناء الحلّ أو الحلول التقنيّة المناسبة. ما المهارات المطلوبة في البداية؟ إذا كنت تفكر بأن تغدو مهندس حوسبة سحابية، فيفترض بأن لديك بالفعل معرفة مسبقة قويّة في الحوسبة السحابيّة أو مجال تقنيّ مشابه. إذا كنت ترى المفاهيم التالية مفهومة بالنسبة لك، أو على الأقل بعضها، فغالبًا أنت على الطريق الصحيح. أمّا إذا لم تكن كذلك، فأنصحك أوّلًا بدراسة أو العمل في مجال قريب قبل أن تسعى إلى أن تغدو مهندس حوسبة سحابيّة. معرفة جيّدة في واحد من أنظمة التشغيل على الأقل: لينُكس، يونكس، سولاريس، أو ويندوز. ما أنصحك به هو نظام التشغيل لينُكس بأيّ من توزيعاته (سواء بتوزيعة دبيانيّة أو ردهاتيّة أو غيرها). وجود خبرة مسبقة كمدير نظام أو مهندس نظم لأيّ من أنظمة التشغيل المعروفة قد يفيدك أيضًا. فهم جيّد في الشبكات: TCP/IP و HTTP و DNS. أقترح أن تتعرف على المفاهيم المتعلقة بها قبل السعي لأن تصبح مهندس حوسبة سحابية. لغة برمجة: ستحتاج على الأقل إلى فهم بسيط للغة برمجة مفسّرة (scripting language). غالبًا هذا ليس إلزاميًّا، ولكنه بكل تأكيد سيفيدك. الأمن: أمن المعلومات مهم في الحوسبة السحابيّة، ولهذا، يجب أن يكون لديك فهم جيّد للمفاهيم الأساسيّة في مجال أمن المعلومات، كجدران الحماية مثلًا. إن القائمة المذكورة أعلاه ليست كاملة أبدًا. إن العبرة من ذكرها هو ضرورة أن تكون لديك معرفة تقنيّة قويّة إذا كنت تفكّر بدخول مجال هندسة الحوسبة السحابيّة. يقدّم موقع Could Roster قائمة محدّثة بالمهارات التقنيّة الدارجة، ويشرح ما تقوم به هندسة الحوسبة السحابيّة، ويوضّح الخصائص والتوقّعات اليوميّة، ويعرض قائمة بالمهارات التي يحتاجها السوق. يتم تحديث القائمة شهريًّا، لذا تأكّد من مراجعتها قُبَيلَ بدئك في السعي نحو الحصول على شهادة في المجال. [001-Cloud-Roster-Features.gif] ما الخطوة التالية؟ لنفترض بأنّك تحقّق بعض المتطلّبات المذكورة أعلاه؛ ماذا تفعل الآن لتغدو مهندس حوسبة سحابيّة مؤهّلًا؟ يعتمد هذا على المنصّة التي تفضّلها: خدمات أمازون السحابيّة - AWS مهندس معتمد لحلول خدمات أمازون السحابيّة (AWS Certified Solutions Architect – Associate) - تحقِّق هذه الشهادة الخبرات التقنيّة في تصميم ونشر نظام قابل للتوسعة، ومتاح دائمًا، ومقاوم للأخطاء على منصّة AWS التابعة لأمازون. يوضّح هذا المقال كيفيّة التحضير للاختبار بالتفصيل، ويتعمّق أكثر فيما يتعلّق بالمصادر المتاحة على Cloud Academy التي من شأنها مساعدتك على النجاح في الاختبار. Microsoft Azure مهندس حلول حوسبة سحابية لمنصّة Microsoft Azure (بالإنجليزيّة Microsoft Azure Solutions Architect - إنّ منصّة Microsoft Azure رياديّةٌ في هذا السوق الصاعِد، وتتطلّب شهادتها خبرة في الحوسبة، والشبكات، والتخزين، والأمن، وذلك من أجل تصميم حلول تعمل على Azure. للحصول على شهادة مهندس حلول Azure، ستحتاج إلى النجاح في اختبارين، وهما: AZ-300 و AZ-301. لا تحتاج إلى اجتياز أيّ امتحانات أقلّ درجة من أجل التقدم إلى هذين الامتحانين. يركّز اختبار AZ-300 على تقنيات Azure، بينما يركّز اختبار AZ-301 على التصميم. خدمات Google السحابيّة - Google Cloud Platform مهندس مختصّ في الحوسبة السحابيّ: يمكّن المهندسُ المختصّ في الحوسبة السحابيّة (Profestional Cloud Architect) المؤسساتِ من الاستفادة من التقنيات التي تتيحها خدمات Google السحابية. يمكن لهذا المهندس - بفهمه العميق لمعمارية الحوسبة السحابية ومنصّة Google للخدمات السحابيّة - أن يصمّم ويطوّر ويدير حلول تقنيّة متينة وآمنة وقابلة للتوسعة ومتاحة دائمًا ومرنة وذلك لتحقيق أهداف المؤسسة. لقد غدوتُ مهندس حوسبة سحابية مؤهَّلًا - ماذا أفعل الآن؟ ما إن تتخطى اختبار التأهيل، ستُفتَح أمامك العديد من فُرَص العمل التي ربما لم تفكِّر فيها حتّى. إنّ بعض الشركات الأكثر ابتكارًا في مجال البيانات الضخمة (big data) ليس بوسعها تحقيق أيّ شيء دون مهندس حوسبة سحابيّة مؤهّل لإحدى منصّات الحوسبة السحابية المذكورة. تُقدِّم AWS المرونة وإمكانيّة التوسعة والرزانة المطلوبة لأكثر من مليون زبون. من الشركات التي تستفيد من خدمات AWS في مجال البيانات الضخمة كلّ من General Motors، وIBM، وSplunk، وWeather Company. قد تجد نفسك يومًا ما تعمل لدى شركة طبيّة لبناء نظام لتحليل الحمض النووي (الجينات) لتوقع الأمراض من خلالها. إذا كنت تحب السّفر، فقد تعمل في يوم ما لدى شركة Expedia، التي تستخدم AWS لاستضافة خدمتها (Expedia Service)، وهي خدمة متخصّصة بتقديم الاقتراحات المتعلّقة بالسياحة. ولكي لا ننسى أحد أكبر زبائن AWS، وهي Netflix، تستخدم منصة AWS في نظام توصيل محتوى متاح دائمًا ومقاوم للأخطاء لخدمة بثّ الأفلام والبرامج التلفازيّة التي تقدّمها. تعتمد Netflix على إمكانات البنية التحتيّة لأمازون في التوسّع السريع والخوادم وتخزين البيانات، وذلك بسبب الكمّ الهائل ونمط الاستخدام المتأرجح لزبائنها. لا يسعنا إلا أن نتخيّل أنّهم يوظّفون مئات إن لم يكن آلاف مهندسي حلول الحوسبة السحابيّة لمنصّة AWS. إنّ منصّة Microsoft Azure أسرع مزوّدي الخدمات السحابيّة نموًّا لبناء واختبار ونشر وإدارة التطبيقات والخدمات عبر مراكز بيانات تديرها Microsoft. من الشركات التي تستخدم Azure كلّ من Adobe، وApple، وiCloud، وEbay، وTravelocity، وSamsung، وXerox، وNFL، وNBC. ما إن تصبح مهندس حوسبة سحابيّة مؤهًلًا لمنصّة Microsoft Azure، فسيكون باستطاعتك التقدّم لأيّ من آلاف الشواغر المتاحة لـمهندسي الحوسبة السحابيّة لمنصّة Azure. إنّ منصّة Google للحوسبة السحابيّة هي حقيبة كاملة من خدمات الحوسبة السحابيّة التي تعمل على نفس البنية التحتيّة التي تستخدمها Google من أجل خدماتها التي تقدّمها للمستخدمين الأفراد، وتستخدمها كذلك كلّ من Target، وPayPal، و20th Century Fox، وTwitter. إذا صرت مؤهلًا في هندسة الحوسبة السحابية لمنصة Google، فبإمكانك التقدّم للوظائف ذات العلاقة. إنّ مهندس الحوسبة السحابيّة لَذو دور هامّ، وهناك حاجة ماسّة في السوق لهذا التخصّص، والإمكانات فيه غير محدودة. وتشير التوقعات أيضًا إلى نموّ هائل في هذا المجال في السنوات القليلة القادمة، ولهذا نعتقد بأنّ الحصول على مؤهّل في هندسة الحوسبة السحابية خطوة في الاتجاه الصحيح، سواء للعمل في المجال، أو للتعرف على أيّ تقنيات حديثة ومذهلة تنشأ في حلبة الحوسبة السحابيّة. ترجمة -وبتصرف- للمقالين: What Exactly Is a Cloud Architect and How Do You Become One?‎ لصاحبه Michael Sheehy Prerequisites to Learn Cloud Computing – Introduction لصاحبه Stefano Bellasio
    1 نقطة
  21. تُستخدَم كلمة DevOps (اختصارٌ للكلمتين Development و Operations) لوصف مجموعةٍ من أنشطة التكنولوجيا الحديثة التي تسعى إلى تقريب مطوري البرمجيات وموظفي العمليات من بعضهم بعضًا بشكلٍ أوثق بغية العمل بصورة أكثر تعاونية على نفس المشروع. الهدف من ذلك هو خلال كسر الحواجز التقليدية الموجودة بين هذين الفريقين التقنيين، مما يمكِّن المؤسسات من تقليل الوقت وزيادة الانخراط في تقديم ونشر إصدارات جديدة من البرمجيات. سيؤدي هذا الجهد بديهيًا إلى دورات تطوير أقصر مما قد يوفر الوقت والمال بشكل مثالي، ويمنح المؤسسة ميزة تنافسية تُنافِس بها المؤسسات الأخرى التي تعتمد دورات التطوير الطويلة والأكثر تقليديةً. لماذا ينبغي اتباع استراتيجية DevOps؟ لم تعد عملية الابتكار السريع موضوعًا اختياريًا. فبغض النظر عن مجال عمل مؤسستك، أصبح من شبه المؤكّد أنّه مجال يشهد تقلبات في الأنشطة التجارية التقليدية نتيجة الانتقال إلى الاقتصاد القائم على البرمجيات. فبدءًا من النقل إلى التصنيع، ومن التعدين إلى الزراعة، ومن التمويل إلى الرعاية الصحية، تجعل البيانات الضخمة، والحوسبة السحابية، والتطبيقات المحمولة، وعدد كبير من التقنيات الأخرى من البرمجيات هي ما يشكل الفارق الرئيسي بين الأعمال والمؤسسات التي تتقدم إلى الأمام وتلك التي تتراجع وتتخلف عن الركب. حتى وإن لم تكن مؤسستك تنافس في سوق البرمجيات قبل عقد من الزمن، فهي اليوم كذلك، والطريقة للمضي قدمًا هي في استخدام حلول أفضل للتقدم بشكل أسرع. كيف أبدأ؟ تتمثل الخطوات الأولى في مجال DevOps في فحص ثقافتك وممارساتك، وتحديد العوائق التي تحول دون التواصل والتنسيق بين الفريق، واتخاذ الخطوات اللازمة لتوطيد التواصل بين فِرق التطوير والعمليات لديك. إن تحقيق ذلك يمثل تحدّيًا لا يمكنك بلوغه بين عشية وضحاها. ابدأ بإلقاء نظرة على منهجياتك الحالية ثم قم بتنقيحها وتقويمها. على الرغم من أنّ DevOps يتمحور بشكل رئيسي حول الثقافة التنظيمية، فإنّ تحديد أدوات البرامج الصحيحة والمناسبة يعدّ خطوةً مهمةً أيضًا. فهل تستخدم مؤسستك أدوات للتحكم بالإصدار والمراجعة مثل Git لمساعدتك في إدارة الشيفرة البرمجية؟ هل تعتمد أدوات البناء و «التركيب المتواصل» (continuous integration) لجعل التحرك من المصدر وحتى الاختبار سلسًا قدر الإمكان؟ وماذا عن الأدوات المستخدمة لأتمتة الاختبار وتحزيم البرامج تلقائيًا، أو لاختبارات النشر والحماية؟ هل تبحث عن طرق لإدارة البنية الأساسيّة الخاصّة بك مثل الشيفرة البرمجية باستخدام «أدوات إدارة التكوين» (configuration management tools)، لتوسيع نطاق البيئات وتكرارها بسهولة؟ وماذا عن أدوات المراقبة لمتابعة كامل العملية بدءًا من التطوير وحتى الإنتاج؟ تستفيد DevOps من إيجاد الأدوات المناسبة للحفاظ على عمل فِرق التطوير والعمليات الخاصة بك معًا وتحركها بشكل أسرع إذا كنت بحاجةٍ إلى دليل لحماية تقنية «حاويات لينكس» (Linux container)، ألق نظرة على قائمة التحقق المرجعيّة هذه: 4 خطوات لبدء رحلتك مع الحاويات. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن أين يمكنني تعلم المزيد؟ سننشر عددًا من المقالات تشرح ماهية DevOps وتُعرِّفك عليها؛ راجع الوسم «تعرف على DevOps» أو بعضًا من المقالات الأكثر شيوعًا أدناه. ما الهدف من DevOps؟: توضح نظرة موجزة لتاريخ DevOps الحاجة إلى التفكير بطريقة مختلفة حول العمل التعاوني في مجال تكنولوجيا المعلومات. 3 خطوات لحماية DevOps مفتوحة المصدر: المفتاح الرئيسي لتأمين تطوير التطبيق هو «الإزاحة نحو اليسار» (shift left) - انقل اختبار الأمان بعيدًا عن مرحلة الإنتاج المتأخرة وعُد إلى التصميم والتطوير. أفضل 5 لغات برمجة لـ DevOps: نجمع هنا خمسًا من أفضل لغات البرمجة لـ DevOps وبعضًا من الموارد التعليمية المفيدة لكل منها. رحلة المطور عبر DevOps: انتهت أيام التطوير المنعزلة لفرق التشغيل والعمليات. لماذا تعد DevOps الاستراتيجية التقنية الأكثر أهمية اليوم: إزالة بعض الالتباس حول مفهوم DevOps. تقنيات DevOps المحميّة «للخدمات المصغرة» (microservices): أحدثت الحاويات والخدمات المصغّرة ثورةً في تطوير التطبيقات وإدارة البنية التحتية. ربما يمكنك أيضًا إيجاد الفائدة في هذه الموارد الخارجية التي توفّر المزيد من المعلومات. التحديث بسرعة تطبيقات المصدر المفتوح باستخدام DevOps 9 عبارات مفتاحية لـ DevOps تحديث أسرع اعتمادا على DevOps كتاب إلكتروني مجاني: كتاب إلكتروني مجاني: DevOps with OpenShi. ترجمة وبتصرف للمقال: What is DevOps اقرأ أيضًا المقال التالي: ما الهدف من DevOps؟
    1 نقطة
  22. نشرح طريقة تثبيت وإعداد خادم Nginx على توزيعة أوبنتو، وسنستعمله لتخديم صفحات HTML الخاصة بنا. لتثبيت خادم أباتشي راجع فيديو تثبيت وضبط خادم Apache في أكاديمية حسوب. قسم خوادم الويب في أكاديمية حسوب غني بالمقالات المفيدة للتعامل معها.
    1 نقطة
  23. Sqlite هي عبارة عن محرك SQL مفتوح المصدر سريع وبسيط جدا، يشرح هذا الدرس متى يكون من الأمثل استخدام Sqlite كبديل لأنظمة إدارة قواعد البيانات الارتباطية RDBMS مثل MySQL أو Postgres، بالإضافة إلى كيفية تثبيتها وأمثلة عن استخداماتها الأساسية، تُغطي عمليات CRUD: الإنشاء Create، القراءة Read، التحديث Update، والحذف Delete. مفاهيم خاطئةلا يجب أن ننخدع بالاعتقاد أن Sqlite تستَخدم فقط للاختبار والتطوير، فعلى سبيل المثال تعمل Sqlite بشكل جيد لمواقع الإنترنت التي تتلقى 100,000 زائر يوميا، وهذا هو الحد المُحافظ. إن الحد الأقصى لحجم قاعدة بيانات Sqlite هو 140 تيرابايت (والذي من المفترض أن يكون كافيًا، أليس كذلك؟)، وبإمكانها أن تكون أسرع بكثير من RDBMS، يتم تخزين قاعدة البيانات كاملةمع كافة البيانات الضرورية في ملف عادي في نظام ملفات المضيف Host، ولذلك لا توجد حاجة لعملية خادوم Server منفصلة (الاستغناء عن الحاجة إلى الاتصالات البطيئة بين العمليّات). الاستخدام الأمثل على VPS الخاص بناتركز Sqlite على البساطة، وبما أنها تعمل داخليا internal بشكلٍ تام، فهي غالبًا ما تكون أسرع بكثير من البدائل الأخرى، إن كنا نبحث عن قابلية النقل portability (فيما يتعلق باللغات والمنصّات معًا)، البساطة، السرعة، والاستهلاك القليل للذاكرة فإن Sqlite مثاليّة لهذا، فعيوبها تكون واضحة فقط عند الحاجة لتزامن عال بالقراءة أو الكتابة. حيث تستطيع Sqlite أن تدعم كاتب writer واحد فقط في نفس الوقت، وقد يكون زمن الوصول latency لنظام الملفات المرتَفِع عادة غير مُلائِم إن كانت هناك حاجة لنفاذ access العديد من العملاء إلى قاعدة بيانات Sqlite في نفس الوقت. العيب الأخير المُحتَمل وجوده في Sqlite هو صياغتها syntax الفريدة، بالرغم من تشابهها مع أنظمة SQL الأخرى، ومن البديهي عند الانتقال إلى نظام آخر -إن قمنا باستخدام Sqlite والتي تتطوّر بسرعة- أن نجد بعض العقبات في المرحلة الانتقاليّة. تثبيت Sqlite على VPS الخاص بناإن وحدة sqlite3 module هي جزء من مكتبة بايثون المعيارية، لذلك لا نحتاج لأي تثبيت آخر على توزيعة Ubuntu المعيارية أو على أي نظام آخر مُثبّت عليه بايثون، ولتثبيت واجهة سطر الأوامر لـ Sqlite على Ubuntu نستخدم هذه الأوامر: sudo apt-get update sudo apt-get install sqlite3 libsqlite3-devإن كُنّا نريد تصريفه Compile من المصدر Source يجب علينا الحصول على آخر إصدار من autoconf من الرّابط sqlite.org/download.html، وهو الإصدار المتوفّر وقت كتابة هذا الدّرس: wget http://sqlite.org/2013/sqlite-autoconf-3080100.tar.gz tar xvfz sqlite-autoconf-3080100.tar.gz cd sqlite-autoconf-3080100 ./configure make make installملاحظات من أجل البناء من المصدر: لا يجب أن نقوم بفعل هذا على توزيعة Ubuntu معياريّة لأنّه من المُحتمل أن نتلقّى خطأ عن عدم التّوافق في إصدار التّرويسة Header والمصدر "header and source version mismatch" بسبب التّعارض بين الإصدار المُثبّت حاليًّا والإصدار الجّديد الذي نريد تثبيته.إن كان يبدو أنّ الأمر make ينتظر المزيد من المُدخلات منك فكُن صبورًا فقط، حيث أنّ تصريف Compile المصدر قد يستغرق بعض الوقت.الاستخدامات الأساسية لواجهة سطر الأوامرلإنشاء قاعدة بيانات نقوم بتنفيذ الأمر التالي: sqlite3 database.dbحيث يكون database هو اسم قاعدة البيانات لدينا، وإن كان الملف database.db موجودًا مُسبقًا ستقوم Sqlite بإنشاء اتصال معه، وإن لم يكن موجودًا سيتمّ إنشاؤه، يجب أن يكون الخرج Output مُشابهًا لما يلي: SQLite version 3.8.1 2013-10-17 12:57:35 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>فلنقم الآن بإنشاء جدول Table وإدخال بعض البيانات إليه، يملك هذا الجدول المُسمَّى الأندية clubs أربعة أعمدة columns، من أجل id، اسم النادي name، مدرّبه coach، وبلد النّادي country، سنقوم بإدخال بيانات ثلاثة أندية كرة قدم إلى قاعدة بياناتنا: CREATE TABLE clubs (id integer, name varchar(30), coach varchar(20), country varchar(20)); INSERT INTO clubs VALUES (1, "Real Madrid", "Benitez", "Spain"); INSERT INTO clubs VALUES (2, "Barcelona", "Enrique", "Spain"); INSERT INTO clubs VALUES (3, "Chelsea", "Mourinho", "England");لقد أنشأنا قاعدة بيانات، جدول، وبعض الإدخالات، نضغط الآن Ctrl+D للخروج من Sqlite ونكتب ما يلي (يجب هنا أيضًا أن نضع اسم قاعدة بياناتنا بدلًا من 'database') والذي سيقوم بإعادة الاتصال إلى قاعدة البيانات التي أنشأناها للتو: sqlite3 database.dbالآن نكتب: SELECT * FROM clubs;يجب أن نرى هنا الإدخالات التي قُمنا بها: 1|Real Madrid|Benitez|Spain 2|Barcelona|Enrique|Spain 3|Chelsea|Mourinho|Englandرائع، هذا هو كلّ شيء فيما يتعلّق بالإنشاء Creating والقراءة Reading، فلنقم الآن بالتّحديث Update والحذف Delete: UPDATE clubs SET country="Spain" WHERE country="England";سيقوم هذا الأمر بتحديث قاعدة البيانات بحيث يجعل الأندية المُدرَجة على أنّها من إنكلترا يتم إدراجها وكأنّها أندية من إسبانيا، فلنتأكّد من النتائج باستخدام الأمر: SELECT * FROM clubs;يجب أن نرى: 1|Real Madrid|Benitez|Spain 2|Barcelona|Enrique|Spain 3|Chelsea|Mourinho|Spainأصبحت لدينا الآن كل الأندية من إسبانيا، فلنقم بحذف Chelsea من قاعدة بياناتنا كونه النادي الوحيد الذي في الحقيقة ليس من إسبانيا: DELETE FROM clubs WHERE id=3; SELECT * FROM clubs;ينبغي أن نجد الآن عدد الأندية لدينا أقل بواحد من السّابق: 1|Real Madrid|Benitez|Spain 2|Barcelona|Enrique|Spainيُغطِّي هذا جميع العمليّات الأساسيّة لقواعد البيانات، وقبل أن ننتهي دعونا نجرّب مثالًا آخر أقل بديهيّة بقليل، والذي يستخدم جدولين وانضمام join أساسي بينهما. فلنخرج الآن من Sqlite باستخدام الأمر Ctrl+D ونعيد الاتصال إلى قاعدة بيانات جديدة باستخدام: sqlite3 database2.dbسنقوم بإنشاء جدول مشابه جدًّا لجدول الأندية clubs ولكنّنا سننشئ أيضًا جدول للدول countries، والذي يقوم بتخزين اسم الدّولة ورئيسها الحالي، فلنقم أولًا بإنشاء جدول الدّول countries وإدخال إسبانيا وفرنسا إليه باستخدام ما يلي (لاحظ أنّنا نستطيع نسخ ولصق عدّة أسطر من شيفرة sqlite دفعة واحدة): CREATE TABLE countries (id integer, name varchar(30), president varchar(30)); INSERT INTO countries VALUES (1, "Spain", "Rajoy Brey"); INSERT INTO countries VALUES(2, "France", "Francois Hollande");ونستطيع بعدها إعادة إنشاء الجدول clubs باستخدام ما يلي: CREATE TABLE clubs (id integer, name varchar(30), country_id integer); INSERT INTO clubs VALUES (1, "Real Madrid", 1); INSERT INTO clubs VALUES (2, "Barcelona", 1); INSERT INTO clubs VALUES (3, "Chelsea", 2);دعونا الآن نرى ما هي الأندية الموجودة في إسبانيا باستخدام: SELECT name FROM clubs JOIN countries ON country_id=countries.id WHERE countries.name="Spain";ينبغي أن نشاهد ما يلي: Real Madrid Barcelonaيُغطّي هذا موضوع الانضمام الأساسي basic join، فلنلاحظ أنّ sqlite تفعل الكثير من أجلنا، ففي التّعبير السّابق يرمز الانضمام Join افتراضيًّا إلى INNER JOIN بالرغم من أنّنا استخدمنا فقط الكلمة المفتاحيّة JOIN، ولا يجب علينا أيضًا تحديد clubs.country_id لأنّها واضحة لا لبس فيها، من ناحية أخرى إن جرّبنا هذا الأمر: SELECT name FROM clubs JOIN countries ON country_id=id WHERE country_id=1;سنتلقّى رسالة خطأ: "Error: ambiguous column name: id" وهو خطأ معقول بما فيه الكفاية لأنّ الجدولين لدينا كلاهما يملكان عمود id، ولكن بشكلٍ عام sqlite متسامحة مع الأخطاء إلى حد ما، فرسائل الأخطاء فيها تميل إلى أن تجعل تحديد مكان أيّ مشاكل وإصلاحها شيئًا بديهيا إلى حد ما، وهذا يُساعد على تسريع عمليّة التّطوير. للمزيد من المساعدة في موضوع الصّياغة Syntax فإنّ الوثائق الرّسميّة لها مليئة بالمخطّطات البيانيّة diagrams مثل هذا sqlite.org/langdelete.html، والتي من الممكن أن تكون مفيدة. وفي الختام، تملك sqlite أغلفة wrappers وتعريفات في جميع اللغات الرئيسيّة، ويُمكن تشغيلها على معظم الأنظمة، نستطيع إيجاد قائمة بالعديد من هذه اللغات هنا، حظًّا سعيدًا واستمتع بوقتك. ترجمة -وبتصرّف- للمقال How and When to Use Sqlite لصاحبه Gareth Dwyer.
    1 نقطة
  24. مقدمة يُستخدم ميثاق (بروتوكول) الوِب TLS (اختصار لـ Transport Layer Security، أمان طبقة النقل) وسلفه SSL (اختصار لـ Secure Sockets Layer، طبقة المقابس الآمنة) لتغليف البيانات العاديّة ضمن إطار محميّ وآمن. يمكن للخواديم باستخدام هذه التقنية أن تؤمّن تبادل البيانات بينها وبين العملاء حتى ولو اعتُرِضت طريقُ الرسائل بين الخادوم والعميل. يساعد نظام الشهادات الأمنية Certificates المستخدِمين والزوار في التحقّق من أمان المواقع التي يتّصلون بها. سنقدّم في هذا الدليل الخطوات اللازمة لإعداد شهادة أمنيّة موقَّعة ذاتيًّا Self-signed certificate لاستخدامها مع خادوم الوِب Apache على أوبونتو 16.04. ملحوظة: تعمّي الشهادات الموقَّعة ذاتيًّا الاتصالات بين الخادوم والعملاء؛ لكن لن يمكنَ للعملاء استخدامُها للتحقّق من التحقّق من هويّة خادومك تلقائيًّا، إذ أنه لم تُوقّعها سلطة معترف بها. تتضمَّن المتصفّحات مثل فيرفكس وكروم قائمة بالسلطات المعترف بها والمخوَّلة إصدار شهادات TLS. يُناسب استخدام الشهادات الموقَّعة ذاتيًّا بيئات الاختبار، على الحاسوب الشخصي أو عندما لا يكون لديك نطاق Domain؛ مثلا في واجهات الوِب غير المتاحة للعموم. إن كان لديك نطاق فالأفضل أن تستخدم شهادة أمنية من سطلة معترف بها. يمكنك الحصول على شهادة مجانيّة من Let’s encrypt وإعدادها. المتطلبات ستحتاج قبل البدء بتنفيذ الخطوات الواردة في هذا الدرس إلى إعداد مستخدم إداري بامتيازات sudo غير المستخدم الجذر. راجع درس الإعداد الابتدائي لخادوم أوبونتو لمعرفة كيفية ذلك. ستحتاج أيضا لتثبيت خادوم الوِب Apache. إن رغبت في تثبيت كامل حزم LAMP (أي لينكس Linux، أباتش Apache، وMySQL وPHP) فالدرس كيف تثبت حزم MySQL ،Apache ،Linux :LAMP و PHP موجود لهذا الغرض؛ أما إن كنت ترغب في تثبيت Apache لوحده فيمكنك الاعتماد على الدرس المُشار إليه مع ترك الخطوات الخاصّة بكلّ من MySQL وPHP. تأكّد من توفّرك على المتطلّبات ثم نفّذ الخطوات المشروحة أدناه. الخطوة اﻷولى: إنشاء شهادة SSL يعمل بروتكول TLS (وسلفه SSL) باستخدام مفتاحيْن للتعميّة واحد عمومي Public وآخر خاصّ (أو سرّي) Private. يُخزَّن المفتاح السّري على الخادوم ولا يجوز أن يطّلع عليه أي عميل فهو خاصّ بالخادوم الذي يستخدمه لتعميّة المحتوى المُرسَل إلى العملاء. يُمكن لأيّ عميل الاطّلاع على شهادة TLS. تحوي هذه الشهادة المفتاح العموميّ الذي يُستخدَم لفكّ التعميّة عن المحتوى القادم من الخادوم. ملحوظة: رغم أن استخدام البروتكول SSL يقلّ يومًا بعد يوم إلا أن المصطلح “شهادة SSL” لا يزال يُستَخدَم كثيرًا، ويُقصَد به - في الغالب - TLS، الذي هو نسخة محسَّنة من SSL. تتيح مكتبة OpenSSL (مكتبة برمجيّة توفّر أدوات للتعامل مع شهادات SSL/TLS) إنشاء مفتاح تعميّة موقَّع ذاتيًّا بالأمر التالي: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt ستُطرَح عليك مجموعة من الأسئلة، ولكن قبل النظر في تلك الأسئلة سنشرح الخيارات المذكورة في الأمر السابق: openssl: هذا هو الأمر الأساسي لإنشاء الشهادات، المفاتيح وبقية الملفات وإدارتها في OpenSSL. req: يحدّد هذا الأمر الفرعي المعيار X.509 لاستخدامه في البنية التحتيّة التي نريد استخدامها لإدارة المفاتيح العموميّة. يعتمد الميثاقان SSL وTLS المعيار X.509 لإدارة المفاتيح العمومية. نستخدم هذا الأمر الفرعي لطلب إنشاء شهادة تتوافق مع هذا المعيار. x.509: يغيّر هذا الخيار طريقة عمل الأمر الفرعي السابق ليخبره أننا في طور إنشاء شهادة موّقَّعة ذاتيًّا بدلا من إرسال طلب لتوقيع شهادة الذي هو السلوك المبدئي للأمر الفرعي. nodes: يطلُب هذا الخيار من openssl تجاوز خيار تأمين الشهادة بعبارة سرّ Passphrase. نريد أن يكون Apache قادرا على قراءة الشهادة بدون تدخّل من المستخدم عند بدْء تشغيل الخادوم. يمنع وجود عبارة سرّ Apache من قراءة ملفّ الشهادة وسنحتاج عند وجودها لإدخالها في كلّ مرة نعيد فيها تشغيل الخادوم. days 365: يحدّد هذا الخيار مدّة صلاحيّة الشهادة. اخترنا سنة. newkey rsa:2048: يخبر هذا الخيار الأمر openssl أننا نريد توليد شهادة ومفتاح جديد في نفس الوقت. بما أننا لم نولّد المفتاح المطلوب لتوقيع الشهادة في خطوة منفصلة فإننا نحتاج لإنشائه مع الشهادة. يحدّد الجزء rsa:2048 نوعيّة المفتاح بـ RSA وطوله بـ 2048 بت. keyout: يحدّد المسار الذي نريد حفظ المفتاح الخاصّ فيه. out: يحدّد المسار الذي نريد حفظ الشهادة فيه. ستنشئ هذه الخيارات مفاتيح التعميّة والشهادة. يطلُب الأمر كما أسلفنا الإجابة على بضعة أسئلة كما في الصورة التالية. تتعلّق الأسئلة بمعلومات عامة من قبيل الدولة والمدينة والمؤسّسة والمنظَّمة المُصدِرة للشهادة إضافة إلى معلومات عن الخادوم. يتعلّق أهمّ الأسئلة المطروحة - السطر Common Name - بالخادوم. يجب أن تجيب باسم النطاق الذي يعمل عليه الخادوم أو - وهو الأكثر شيوعا - عنوان IP العمومي للخادوم. يبدو المحثّ Prompt على النحو التالي: Country Name (2 letter code) [AU]:حرفان يمثّلان الدولة State or Province Name (full name) [Some-State]:اسم المنطقة (المحافظة أو الولاية) Locality Name (eg, city) []:اسم المدينة Organization Name (eg, company) [Internet Widgits Pty Ltd]:اسم المنظَّمة أو الشركة Organizational Unit Name (eg, section) []:اسم الفرع Common Name (e.g. server FQDN or YOUR name) []:عنوان الخادوم Email Address []:بريد المسؤول سيوضع الملفان المنشآن في مجلّدات فرعيّة من المجلّد etc/ ssl/ حسب ماهو محدَّد في الأمر. سنحتاج أيضًا - ما دمنا نتحدَّث عن OpenSSL - إلى إنشاء مجموعة Diffie-Hellman قويّة لتُستخدَم عندما يُناقش الخادوم طريقة نقل البيانات مع العملاء (خطوة من خطوات عدّة ضمن تقنيّة SSL/TLS لتأمين نقل البيانات). ينشئ اﻷمر التالي المطلوب: sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 يمكن أن يستغرق الأمر بضعة دقائق، نحصُل بعدها على مجموعة Diffie-Hellman مناسبة (على المسار etc/ssl/certs/dhparam.pem/) لاستعمالها في إعداداتنا. الخطوة الثانية: إعداد Apache لاستخدام SSL أنشأنا في الخطوة السابقة ملفّيْ الشهادة والمفتاح الخاصّ. نحتاج الآن لضبط Apache للاستفادة من هذيْن الملفّيْن. سنعدّل بضعة إعدادات: سننشئ مقطعا جديدًا في إعدادات Apache لتحديد خيارات إعداد مبدئيّة آمنة لـ SSL. سنعدّل المضيف الافتراضي Virtual host الخاص بـ SSL للإشارة إلى شهادة SSL التي أنشأناها في الخطوة السابقة. سنعدّل المضيف الافتراضي غير المُعمَّى ليعيد توجيه جميع الطلبات إلى المضيف الافتراضي المُعمَّى (الخاص بـ SSL). يُنصَح بهذا الإجراء لجعل جميع الاتصالات القادمة إلى الموقع آمنة (تمرّ عبر شهادة SSL). يجدر بالإعدادات التي سنحصُل عليها بعد تنفيذ النقاط المُشار إليها أعلاه أن تكون آمنة. تحديد خيارات إعداد مبدئيّة آمنة في Apache سننشئ أولا ملفّ إعداد جديدًا في Apache نعرّف فيه بعض إعدادات SSL. سنضبُط Apache للعمل بخوارزميّات تعميّة فعّالة ونفعّل بعض الميزات المتقدّمة لمساعدتنا في إبقاء خادومنا آمنا. سيُمكن لأيّ مضيف افتراضي يفعّل SSL. أنشئ ملفّ إعداد جديد ضمن المجلَّد etc/apache2/conf-available/ (مجلَّد إعدادات Apache). سنسمّي هذا الملف بـssl-params.conf حتى يكون واضحًا أنه يتعلّق بمعطيات Parameters إعداد SSL. sudo nano /etc/apache2/conf-available/ssl-params.conf سنعتمد لضبط إعدادات Apache بطريقة آمنة على توصيّات Remy van Elst من موقع Cipherli.st. جُهِّز هذا الموقع لتوفير إعدادات تعميّة جاهزة للاستعمال في أكثر البرمجيّات شيوعًا على الخواديم. ملحوظة توفّر الإعدادات المُقترَحة مبدئيًّا في الموقع أعلاه درجة أمان عاليّة. يمكن أن تأتي هذه الدرجة من الأمان على حساب التوافق مع البرامج العميلة (المتصفّحات أو أنظمة التشغيل القديمة). إن أردت دعم إصدارات قديمة من هذه البرامج فإن الموقع يوفّر إعدادات بديلة للإعدادات المبدئيّة، يمكنك الحصول عليها بالنقر على الرابط “Yes, give me a ciphersuite that works with legacy / old software” وستلاحظ أن الإعدادات تبدّلت. يعتمد الخيار بين النسخة المبدئية من الإعدادات والنسخة البديلة على نوعيّة العملاء التي تريد دعمها. توفّر النسختان أمانًا جيّدًا. سننسخ - لأغراض هذا الدرس - الإعدادات المقترحة، مع إجراء تعديليْن عليها. سنعدّل التعليمة SSLOpenSSLConfCmd DHParameters لتشير إلى ملف Diffie-Hellman الذي أنشأناه في الخطوة الأولى. سنعدّل أيضًا تعليمات الترويسة لتغيير عمل الخاصيّة Strict-Transport-Security وذلك بحذف التعليمة preload. توفّر هذه الخاصيّة أمانًا عاليَّا جدًّا إلا أنها يمكن إن فُعِّلت بدون وعي أو بطريقة غير صحيحة - خصوصًا عند استخدام الميزة preload - أن تؤدّي إلى اختلالات كبيرة في عمل الخادوم. تأكّد عندما تفعِّل هذه الميزة أنك تدرك جيّدًا ما تفعله. # from https://cipherli.st/ # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On # تعطيل التعليمة preload في الخاصيّة Strict-Transport-Security # يمكنك إن أردت تفعيل هذه الخاصية وذلك بنزع علامة التعليق # من بداية السطر #Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" # نفس التعليمة السابقة ولكن دون preload Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLSessionTickets Off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # أضفنا هنا المسار إلى ملفّ Diffie-Hellman SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" احفظ الملفّ ثم أغلقه عندما تكون جاهزا لذلك. تعديل ملف مضيف SSL الافتراضي المبدئي ننتقل الآن إلى الملف المبدئي Default لمضيف SSL الافتراضي الموجود على المسار etc/apache2/sites-available/default-ssl.conf/. إن كنت تستخدم مضيفا اقتراضيًّا آخر فأبدله بالمضيف الافتراضي المبدئي في الأمر أدناه. نأخذ أولًا نسخة احتياطية من الملف: sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak ثم نفتح ملف المضيف الافتراضي لتحريره: sudo nano /etc/apache2/sites-available/default-ssl.conf يبدو محتوى الملف، بعد نزع أغلب التعليقات، على النحو التالي: <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # BrowserMatch "MSIE [2-6]" \ # nokeepalive ssl-unclean-shutdown \ # downgrade-1.0 force-response-1.0 </VirtualHost> </IfModule> سنعدّل قليلا على الملف بإعداد تعليمات بريد مدير الخادوم، عنوان، اسم الخادوم… إلخ. كما سنعدّل تعليمة SSL لتشير إلى مسار ملفّيْ الشهادة والمفاتيح. نختُم بنزع التعليق عن خيار يوفّر الدعم للمتصفّحات القديمة لتفعيله. يبدو الملف بعد التعديلات كالتالي: <IfModule mod_ssl.c> <VirtualHost _default_:443> # بريد مدير الخادوم ServerAdmin your_email@example.com # نطاق الخادوم أو عنوان IP الخاص به ServerName server_domain_or_IP DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # دعم المتصفحات القديمة BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost> </IfModule> احفظ الملف ثم أغلقه. إعادة توجيه طلبات HTTP (غير المُعمَّاة) إلى HTTPS يجيب الخادوم بإعداداته الحاليّة على الطلبات الآمنة (HTTPS) وغير الآمنة (HTTP) على حدّ السواء. يُنصَح في أغلب الحالات من أجل أمان أعلى أن تُوجَّه طلبات HTTP تلقائيَّا إلى HTTPS. نفتح ملف المضيف الافتراضي - أو المضيف الذي تريده - لتحريره: sudo nano /etc/apache2/sites-available/000-default.conf كلّ ما نحتاجه هو إضافة تعليمة إعادة إعادة التوجيه Redirect داخل إعداد الوسم VirtualHost والإشارة إلى النسخة الآمنة من الموقع (https): <VirtualHost *:80> . . . Redirect "/" "https://your_domain_or_IP/" . . . </VirtualHost> احفظ الملف ثم أغلقه. الخطوة الثالثة: تعديل الجدار الناري إن كان جدار ufw الناري مفعّلًا، وهو ما توصي به الدروس المُشار إليها في المتطلّبات، فقد تحتاج لتعديل إعداداتِه من أجل السماح للبيانات المُؤَمَّنة (عبر SSL). يُسجّل Apache أثناء تثبيته مجموعات من المعلومات المختصرة Profiles لدى جدار ufw الناري. يمكننا عرض المجموعات المتوفّرة بالأمر التالي: sudo ufw app list تظهر مُخرجات الأمر : Available applications: Apache Apache Full Apache Secure OpenSSH يمكنك عرض الإعداد الحالي بالأمر sudo ufw status إن كان إعدادك الحالي يسمح لطلبات HTTP فقط فستبدو إعداداتك كالتالي” Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6) يمكننا تفعيل المجموعة Apache Full للسماح لطلبات HTTPS وHTTP معًا، ثم حذف المجموعة Apache لأننا لم نعد بحاجة إليها، فهي متَضَمَّنة في المجموعة Apache Full : sudo ufw allow 'Apache Full' sudo ufw delete allow 'Apache' ملحوظة: يمكنك استخدام الأمر sudo ufw app info PROFILE حيث PROFILE اسم مجموعة المعلومات لمعرفة المنافذ Ports والبروتوكولات التي تسمح المجموعة للطلبات بالمرور عبرها. يجب أن تبدو حالة الجدار الناري الآن على النحو التالي: sudo ufw status المخرجات: Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6) الخطوة الرابعة: اعتماد التغييرات في Apache نحن جاهزون الآن، بعد أن عدّلنا الإعدادات، لتفعيل وحدات Modules الترويسات Headers وSSL في Apache، وتفعيل المضيف الافتراضي الجاهز لاستخدام SSL ثم إعادة تشغيل Apache. يفعّل الأمران التاليّان على التوالي mod_ssl (وحدة SSL في Apache) وmod_headers (وحدة الترويسات) اللتين تحتاجهما إعداداتنا للعمل: sudo a2enmod ssl sudo a2enmod headers ثم نفعّل المضيف الافتراضي (ضع اسم المضيف مكان default-ssl إن كنت تستخدم مضيفًا غير المضيف المبدئي): sudo a2ensite default-ssl نحتاج أيضًا لتفعيل ملفّ الإعداد ssl-params الذي أنشأناه سابقا: sudo a2enconf ssl-params يجدر بالوحدات المطلوبة أن تكون الآن مفعَّلة وجاهزة للعمل، بقي لنا فقط اعتماد التغييرات. لكن قبل ذلك سنتأكّد من أنه لا توجد أخطاء صياغة في الملفات التي أعددناها وذلك بتنفيذ الأمر التالي: sudo apache2ctl configtest إن جرى كلّ شيء على ما يُرام فستظهر رسالة تشبه ما يلي: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK السطر الأول ليس سوى رسالة تفيد بأنّ التعليمة ServerName غير مضبوطة لتعمل على كامل الخادوم (مثلا مضبوطة في المضيفات الافتراضية فقط). يمكنك التخلّص من هذه الرسالة - إن أردت - بضبط قيمة التعليمة ServerName على نطاق الخادوم أو عنوان IP الخاصّ به في ملف الإعدادات العام etc/apache2/apache2.conf/. هذا الإعداد اختياري، فالرسالة لا تتسبّب في أي خلل. تظهر في السطر الثاني نتيجة التحقّق من الصياغة Syntax OK وتفيد بأنه لا توجد مشكلة من هذه الناحيّة. يمكننا إذن إعادة تشغيل خادوم الوِب لاعتماد التعديلات: sudo systemctl restart apache2 الخطوة الخامسة: اختبار التعمية افتح متصفّح الوِب وأدخل العنوان //:https متبوعًا باسم نطاق الخادوم أو عنوان IP الخاصّ به: https://server_domain_or_IP بما أنّ الشهادة الأمنيّة التي أنشأناه لا تصدُر من سلطة شهادات يثق بها المتصفّح فستظهر صفحة مخيفة عند زيارة الموقع تحمل الرسالة التالية. هذا السلوك متوقَّع وطبيعي. نهتمّ في هذا الدرس بجانب التعميّة من الشهادات الأمنيّة دون جانب التحقّق من هويّة المضيف (الموقع) الذي توفّره سلطات الشهادات (وهو جانب مهمّ أيضًا لأمان التصفّح). انقر على زرّ ADVANCED ثم انقر على الرابط الذي ينقلك إلى موقعك (يوجد عادة أسفل الصفحة). ستُنقَل إلى صفحة الموقع. إن نظرت إلى شريط العناوين في المتصفّح فسترى صورة قفل عليه علامة x أمام عنوان الموقع. يعني هذا الرّمز أن المتصفّح لم يستطع التحقّق من هوية الشهادة، إلا أنه يعمّي الاتصال بينك والخادوم. إن أعددتَ إعادة توجيه طلبات HTTP إلى HTTPS فيمكنك التحقق من نجاح الأمر بالذهاب إلى العنوان http://server_domain_or_IP (بدون حرف s في http). إن ظهرت نفس الأيقونة السابقة في شريط العناوين فهذا يعني نجاح الإعداد. الخطوة السادسة: جعل إعادة التوجيه دائما إن كنت متأكّدًا من رغبتك في السماح للطلبات الآمنة فقط (القادمة عبر HTTPS)، وتحقّقت في الخطوة السابقة من عمل توجيه طلبات HTTP إلى HTTPS فيجب عليك جعل إعادة التوجيه دائمة. افتح ملف إعداد المضيف الافتراضي الذي نريد: sudo nano /etc/apache2/sites-available/000-default.conf نبحث عن سطر إعادة التوجيه الذي أضفناه في خطوة سابقة ثم نضيف إليه الكلمة المفتاحية permanent على النحو التالي: <VirtualHost *:80> . . . Redirect permanent "/" "https://your_domain_or_IP/" . . . </VirtualHost> احفظ الملف ثم أغلقه. ملحوظة: إعادة التوجيه التي أعددناها في الخطوة الثانية باستخدام التعليمة Redirect فقط هي من النوع 302. تصبح إعادة التوجيه هذه من النوع 301 (الفرق بين إعادة التوجيه 301و302) عند إضافة الكلمة المفتاحية permanent (دائم) إلى التعليمة. نتحقّق من خلو الإعدادات من أخطاء في الصياغة: sudo apache2ctl configtest ثم عندما يكون كلّ شيء على ما يرام نعيد تشغيل خادوم الوِب: sudo systemctl restart apache2 ترجمة - بتصرّف للمقال How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04 لصاحبه Justin Ellingwood.
    1 نقطة
  25. مقدمة إن التعوّد على سطر الأوامر هي الخطوة الأولى نحو الاستفادة من قوة منصة خادوم لينكس، وهو شرط أساسي لجميع نشاطات المرتبطة بالخواديم والتي قد تتمنى القيام بها في هذه البيئة. على الرغم من وجود بدائل رسومية للعديد من الأدوات إلا أن تعلم سطر الأوامر مهارة ستسمح لك بالعمل بكفاءة وسرعة ومرونة بطريقة لا يمكنك فعلها مع أغلب الواجهات الرسومية (GUI). يجب علينا أن نبدء من مكان ما، لذلك في هذا المقال سوف نغطي الأساسيات: كيف تتنقل في النظام واكتشاف ما حولنا. متطلبات أساسية هذا المقال بسيط وأساسي، لذلك فهو لا يتطلب الكثير من المعرفة المسبقة، ومع ذلك، ستحتاج إلى تسجيل الدخول إلى خادومك الخاص لتبدأ الاستكشاف. الخيارات التي لديك للقيام بهذا تعتمد على نظام التشغيل الذي تستخدمه في المنزل. عندما تنشئ DigitalOcean droplet جديد، سوف يرسلون رسالة عبر البريد الإلكتروني تحتوي على كلمة السر و عنوان IP خاص للوصول إلى خادومك الجديد، استخدم هذا الرابط لمعرفة كيفية الاتصال بخادوم VPS الخاص بك. ssh root@your_IP وثمة خيار آخر عن طريق استخدام زر “Console Access” في الزاوية العلوية على اليمين من لوحة تحكم DigitalOcean، هذا الأمر سينشئ لك طرفية افتراضية مباشرة في نافذة متصفحك. معرفة موقعك عن طريق pwd في هذه المرحلة، يجب أن تكون قد سجلت دخولك إلى خادوم لينكس الخاص بك، وسوف ترى في الغالب شيئا مشابهًا لهذا: root@your_hostname:~# هذا هو الموجه (prompt) حيث نكتب الأوامر، وليس هذا فقط، بل أنت حاليا في مكان محدد في نظام ملفات الخادوم حيث ستكون دائما في مكان معين في التسلسل الهرمي للملفات وهذا الأمر يؤثر على كيفية عمل الأوامر التي تكتبها. هذا الأمر يشبه قيامك بفتح متصفح الملفات في حاسوبك المحلي، يمكنك الضغط على مختلف المجلدات للانتقال إلى مناطق مختلفة من نظام الملفات، وإذا ذهبت إلى قائمة التعديل (edit menu) في متصفح الملفات، سوف تجد بعض الخيارات التي ستُطبق على العناصر الموجودة في المجلد التي أنت فيه، وسطر الأوامر هو تمثيل نصي لنفس الفكرة. فأين نحن الآن بالضبط في نظام ملفاتنا؟ هنالك دليل واحد موجود في الموجه نفسه، فقبل رمز # أو $ في نهاية الموجه (هذا سيعتمد على المستخدم الذي سجّل دخوله)، سوف ترى رمزًا خاصًا ~ وهذا يعني أنك موجود في مجلد المنزل (home). مجلد المنزل هو المكان الذي يتم تخزين ملفات المستخدم، فالرمز ~ هو اختصار لهذا المجلد. هنالك طريقة أخرى لمعرفة موقعنا في نظام الملفات وهي عن طريق استخدام الأمر pwd وهذا الأمر سيكون أول أمر سنتعلمه. اكتب هذه الحروف على الطرفية واضغط على زر الإدخال (Enter): pwd /root إن /root هو مجلد المنزل للمستخدم للمستخدم الجذر (المدير)، إذا كنت قد سجّلت دخولك باستخدام مستخدم آخر، فسوف ترى شيئًا مشابهًا لهذا: pwd /home/your_username في هذا الدرس، لا يهم المستخدم الذي سجّلت دخولك به، فأي من النتيجتين ظهرت لك فهي مناسبة. النظر حولك باستخدام ls الآن أنت تعرف مكانك وفي أي مجلد أنت، لكن لازلت تجهل ما هي المحتويات الأخرى الموجودة في ذلك المجلد، فكيف تستطيع معرفة ذلك؟ ببساطة يمكننا سؤال الخادوم عن الملفات والمجلدات الموجودة في المجلد الحالي عن طريق استخدام الأمر ls، أكتبه الآن على الموجه: ls بعد كتابة هذا الأمر ستعود (في الغالب) إلى موجه الأوامر ولن تحصل على أية معلومات، فهل فشلت عملية تنفيذ هذا الأمر؟ لا، على العكس فقد نجحت لكنه ببساطة ليس هنالك أية ملفات أو مجلدات في مجلدك الحالي. دعونا ننشئ بعض ملفات التجريبية لنرى كيف يعمل الأمر ls عند وجود ملفات في المجلد، أكتب هذا الأمر لإنشاء بضعة ملفات: touch file{1..5} السطر السابق سينشئ لنا 5 ملفات بأسماء file1 و file2… في مجلدك الحالي. لنُجرب الأمر ls لنرى كيف سيتصرف الآن: ls file1 file2 file3 file4 file5 رائع، تعرّف الآن أمر ls على الملفات الموجودة في مجلد المنزل. أغلب الأوامر لديها سلوكيات افتراضية يتم تنفيذها عند استدعائها كما فعلنا في الأعلى، ومع ذلك، فإن أغلب سلوكيات الأمر يمكن التحكم بها عن طريق تمرير المعاملات الاختيارية إليها، وهذه الأخيرة يشار إليها بأسماء عديدة مثل الخيارات “options” والمعاملات “arguments/parameters” والأعلام “flags”… في بعض الأحيان، هذه المعاملات تُفعّل الوظائف الاختيارية المتاحة من خلال الأمر وفي أحيان آخرى تحدد الكائن الذي يجب على الأمر أن يتجنبه. لنبدأ مع الحالة الأولى. استكشاف خيارات ls تقريبا جميع الأوامر تملك خيار المساعدة، وفي أغلب الأوقات يمكنك الوصول إليه عن طريق إضافة --help أو -h إلى نهاية الأمر، يمكنك الآن تجربة هذا مع أمر ls: ls --help Usage: ls [OPTION]... [FILE]... List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --author with -l, print the author of each file -b, --escape print C-style escapes for nongraphic characters --block-size=SIZE scale sizes by SIZE before printing them. E.g., . . . سيعطيك هذا بعض الإرشادات حول الاستخدام الصحيح للأمر بالإضافة إلى لمحة حول الخيارات المتاحة لتغيير السلوك الإفتراضي للأوامر. العمود الأيسر يعطيك الحروف التي يجب كتابتها وتمريرها إلى الأمر لتنفيذ ما يوجد في وصف العمود الأيمن. إن --help التي قمنا بإضافتها هي مثال لخيار يمكننا تمريره. ومن الطرق الأخرى لمعرفة الخيارات المتاحة لأمر معين هي عن طريق التحقق من الدليل “manual”، ويمكنك فعل ذلك عن طريق كتابة man متبوعا بالأمر الذي تريد معرفة خياراته. قم بتجربة هذا الآن: man ls يمكنك التنقل في الصفحة كما تشاء عن طريق مفاتيح الأسهم والخروج عن طريق كتابة q. كما ترى، يمتلك ls بضعة خيارات يمكنك تمريرها إلى الأمر لتغيير سلوكه، دعونا نجرب بعضها. ls -l -rw-r--r-- 1 root root 0 Feb 28 19:45 file1 -rw-r--r-- 1 root root 0 Feb 28 19:45 file2 -rw-r--r-- 1 root root 0 Feb 28 19:45 file3 -rw-r--r-- 1 root root 0 Feb 28 19:45 file4 -rw-r--r-- 1 root root 0 Feb 28 19:45 file5 السطر السابق يعرض لنا نفس الملفات الخمسة السابقة لكنه يعرضها بشكل أطول، وهذا الأمر يعطينا المزيد من المعلومات حول الملفات مثل المالك (“root” الأولى)، والمجموعة المالكة (“root” الثانية)، وحجم الملف (0) بالإضافة إلى تاريخ آخر تعديل وبعض المعلومات الأخرى. لنجرب خيارًا آخر: ls -a . .aptitude .bashrc file2 file4 .profile .ssh .. .bash_history file1 file3 file5 .rnd .viminfo عرض لنا هذا الخيار ملفات لم نرها من قبل، إن المعامل -a مرادف للمعامل –all والذي يعرض لنا جميع الملفات الموجودة في المجلد الحالي بما في ذلك الملفات المخفية. في أنظمة لينكس، جميع الملفات التي يبدأ اسمها بنقطة سيتم إخفائها بشكل افتراضي، وهذه الملفات ليست سرية ويمكن لأي شخص إيجادها وتم الحفاظ عليها بهذه الطريقة لتسهيل عملية إدارة الملفات، وعند تمرير -a فسنأمر ls بعرض هذه الملفات المخفية أيضا. يمكننا تمرير عدة معاملات كذلك، وذلك عن طريق وضعهم معا كالتالي: ls -l -a drwx------ 4 root root 4096 Feb 28 19:45 . drwxr-xr-x 23 root root 4096 May 3 2013 .. drwx------ 2 root root 4096 Feb 28 17:19 .aptitude -rw------- 1 root root 2036 Feb 28 18:20 .bash_history -rw-r--r-- 1 root root 570 Jan 31 2010 .bashrc -rw-r--r-- 1 root root 0 Feb 28 19:45 file1 . . . الأمر السابق سيعمل بدون مشاكل، لكن يمكننا أيضا دمج المعاملات كالتالي: ls -la هذه الطريقة ستعمل بالضبط كالطريقة الأولى وتتطلّب وقت أقل للكتابة. ومن الخيارات الأخرى المفيدة خيار -R والذي سيعرض جميع الملفات والمجلدات (ومحتوياتها)، وبما أن المجلدات الموجودة في مجلد المنزل الخاص بنا مخفية، فسنمرر خيار -a أيضا: ls -Ra .: . .aptitude .bashrc file2 file4 .profile .ssh .. .bash_history file1 file3 file5 .rnd .viminfo ./.aptitude: . .. cache config ./.ssh: . .. authorized_keys الآن عرفنا كيف نغير سلوكيات ls، لنغير الآن “الكائن” الذي يعمل عليه ls. استخدام ls في مجلدات أخرى افتراضيا، سيعرض ls محتويات المجلد الحالي، ومع ذلك يمكنك تمرير اسم أي مجلد تريد أن ترى محتوياته في نهاية الأمر. على سبيل المثال، يمكننا رؤية محتويات مجلد /etc الموجود في جميع أنظمة لينكس بكتابة السطر التالي: ls /etc acpi fstab magic rc.local adduser.conf fstab.d magic.mime rc.local.orig aliases fuse.conf mailcap rcS.d aliases.db gai.conf mailcap.order reportbug.conf alternatives groff mailname resolvconf anacrontab group mail.rc resolv.conf apm group- manpath.config rmt . . . كما ترى فإن هنالك الكثير من الملفات في هذا المجلد. أي مسار لمجلد يبدأ بخط مائل (/) يُعرف على أنه مسار “مطلق” وسبب ذلك أنه يشير إلى أعلى مسار المجلد والذي هو مجلد الجذر. ومن الطرق الأخرى للإشارة إلى مجلد هي عن طريق استخدام المسار “النسبي”، وهذا سوف يبحث عن مجلد نسبي مرتبط بالمجلد الذي تتواجد به أنت الآن، وهذه المجلدات لا تبدأ بخط مائل. لا نملك أية مجلدات غير مخفية في مجلدنا الحالي لذلك سننشئ بعضها بسرعة وسنضيف بعض الملفات داخلها، لا تقلق حول عدم فهمك لهذه الأوامر في الوقت الحالي، فهذه الأوامر لإنشاء ملفات فقط لاستعمالها في الاستكشاف، لذلك أُكتبها كما هي: mkdir dir{1..3} touch dir{1..3}/test{A,B,C} سينشئ لنا هذا بعض المجلدات بداخلها ملفات، يمكننا رؤية هذه المجلدات باستخدام أمر ls عادي: ls dir1 dir2 dir3 file1 file2 file3 file4 file5 حتى نتمكن من رؤية ما بداخل مجلد dir1، يمكننا أن نعطي مسارًا مُطلقًا كما في المثال السابق، بإضافة المجلد الذي نريد رؤيته إلى نهاية قيمة مجلدنا الحالي، وسنتمكن من معرفة مجلدنا الحالي عن طريق الأمر التالي: pwd /root وبعد ذلك أضف المجلد الذي نهتم به إلى النهاية: ls /root/dir1 testA testB testC لم نكن مُجبرين على القيام بذلك، يمكننا ببساطة الإشارة إلى المجلدات الموجودة داخل مجلدنا الحالي بأسمائها فقط، كالتالي: ls dir1 testA testB testC إذا لم نبدأ المسار بخط مائل، فسيبحث نظام التشغيل على المسار المجلد الذي يبدأ بمجلدنا الحالي. التجوال في المكان حتى الآن، تعلمنا كيف نجد موقعنا في نظام الملفات كما أننا تعلمنا كيف نستخدم الأمر ls لمعرفة بعض المعلومات حول الملفات الموجودة في مجلدات معينة. لكن كيف نغيّر مجلد عملنا؟ تغيير مجلد عملنا سيسمح لنا باستخدام مسارات مترابطة من أماكن مختلفة ﻷنه في العادة، سيكون من السهل إدارة الملفات في المجلد الذي يحتويها. يمكننا التنقل حول التسلسل الهرمي للملفات باستخدام الأمر cd، هذا الأمر يغيّر المجلد الحالي إلى أي مجلد آخر. هذا أبسط استخدام لهذا الأمر: cd لا يبدو أن هنالك أية نتيجة، في الحقيقة، لم يحدث أي شيء، فعند تنفيذ الأمر cd بدون معلومات إضافية فسيغير موقعك الحالي إلى مجلد المنزل، وبما أننا في مجلد المنزل فلن يقوم الأمر بأي شيء. الطريقة الأساسية لاستخدام هذا الأمر هي كالتالي: cd /path/to/directory في هذا المثال، يمكنك استبدال /path/to/directory بمسار المجلد الذي تريد الانتقال إليه، فعلى سبيل المثال، إذا أردت الانتقال إلى مجلد الجذر، والذي سيكون مساره مجرد خط مائل / لأنه في أعلى شجرة الملفات، يمكننا كتابة التالي: cd / ملاحظة: المجلد الجذر (الذي أشرنا إليه بخط مائل /) يختلف عن مجلد المنزل للمستخدم الجذر (الموجود في /root)، وهذا الأمر سيربكك في البداية، لكن تذكر فقط أن المجلد الأعلى في شجرة نظام الملفات يدعى بالجذر. ستلاحظ أن موجه الأوامر قد تغير، بالضبط قبل رموز # أو $، فالمجلد قد تغير من ~ (تذكر أن رمز ~ يشير إلى مجلد المنزل للمستخدم) إلى مجلد الجذر لنظام الملفات. يمكننا التأكد من موقعنا عن طريق استخدام الأمر pwd مرة أخرى: pwd / كما يمكننا التحقق من الملفات الموجودة في مجلدنا الجديد: ls bin etc lib media proc sbin sys var boot home lib64 mnt root selinux tmp vmlinuz dev initrd.img lost+found opt run srv usr نجحنا بالتحرك نحو مكان جديد، لنحاول الآن الانتقال إلى مجلد جديد باستخدام المسار النسبي (relative path)، هنالك مجلد يدعى usr داخل مجلدنا الحالي، لننتقل إليه عن طريق كتابة: cd usr كما ترون، يمكننا استخدام المسار النسبي مع cd أيضا، والآن كيف نستطيع العودة إلى مجلد الجذر مرة أخرى؟ يمكننا كتابة نفس الأمر الذي استخدمناه سابقا cd /، لكننا سنجرب شيئًا مُختلفًا. لنجرب الانتقال إلى أعلى الشجرة باستخدام المسارات النسبيّة، فكيف نشير إلى المجلد الذي يحتوي مجلدنا الحالي باستخدام المسارات النسبيّة؟ ببساطة يمكننا الإشارة إلى المجلد الذي يحتوي على مجلدنا الحالي والذي يدعى بمجلد الأب باستخدام نقطتين (..). لنعد بمقدار مستوى واحد إلى الأعلى: cd .. pwd / كما ترى عدنا إلى مجلد الجذر. يمكننا أيضا الإشارة إلى مجلدنا الحالي باستخدام نقطة واحدة: ls . bin etc lib media proc sbin sys var boot home lib64 mnt root selinux tmp vmlinuz dev initrd.img lost+found opt run srv usr ستكون هذه مفيدة جدا في العديد من الحالات والتي لن نتعلمها في هذه المرحلة لكنك ستتمكن من الإشارة إلى مجلدك الحالي بسهولة في مراحل لاحقة. كما قلنا سابقا، إن رمز “~” يشير إلى مجلد المنزل، لنستخدم ذلك كبداية لمسار مجلد “dir1” الموجود داخل مجلد المنزل: cd ~/dir1 pwd /root/dir1 انتقلنا الآن إلى مجلد داخل مجلد المنزل بطريقة سهلة باستخدام رمز “~” التي وضعناها في الجزء الأول من المسار. لكن ماذا لو نسيت القيام بشيء في المجلد السابق وتريد العودة إليه؟ يمككنا العودة إلى مجلدنا السابق بكتابة التالي: cd - pwd / عدنا إلى مجلدنا السابق. لنختم الدرس بالعودة إلى مجلد المنزل، يمكننا فعل ذلك باستخدام ~ كمسار للتبديل أو يمكنك أيضا استخدام الوضع الافتراضي لـ cd للعودة إلى مجلد المنزل إذا لم نضف أي مسار إلى الأمر، لنجرب ذلك: cd pwd /root كما ترى، نجحنا في العودة إلى مجلد المنزل. الخاتمة ستمتلك الآن الأدوات التي تحتاجها لاستكشاف نظام الملفات، فعلى الرغم من أنك لم تكتشف كيف تقرأ الملفات إلا أنك أصبحت قادرا على التجوال وتصفح النظام بسهولة بالإضافة إلى قدرتك على معرفة مكانك والملفات حولك. ترجمة -وبتصرف- للمقال: How To Use cd, pwd, and ls to Explore the File System on a Linux Server لصاحبه Justin Ellingwood
    1 نقطة
  26. سنتحدثُ في هذا الدّرس عن الطرق التي يُوفّرها لك كلّ من Bash، نظام لينكس والطرفيّة Terminal للتّحكم بالوظائف والعمليّات. ذكرنا في درس إدارة العمليات في لينكس باستخدام الطرفية كيفية استعمال الأوامر ps ،kill و nice للتحكم بالمهام على نظامك. سنُركّز في هذا المقال على إدارة عمليّات المُقدّمة وعمليّات الخلفيّة وسنشرح كيف ترفع من مُستواك في التّحكم بالوظائف والمهام لتحصل على مُرونة أكثر عند تنفيذك للأوامر. إدارة عمليات المقدمة مُعظمُ العمليّات التي تُشغّلها على لينكس ستُنفّذ في المُقدّمة. سيبدأ الأمر بالتّنفيذ ما يمنعك من تنفيذ أي أمر آخر طوال مدة تنفيذ العمليّة. يُمكن أن تسمح العمليّة بتَفاعلِ المُستخدم، أو يُمكن أن تُنفّذ إجراءًا معيّنا ثم تنتهي. وسيُعرض أي مُستخرج على شاشة الطرفية افتراضيّا، سنتطرّق إلى الطريقة المُبسّطة لإدارة عمليّات المُقدّمة أسفله. تشغيل عملية تُشَغّلُ العمليّات في المُقدّمة افتراضيا إلى أن تنتهي أو عند تغيّر الحالة، وأثناء تشغيل العمليّات لن تتمكن من التفاعل مع الصّدفة Shell. بعض أوامر المُقدّمة تنتهي بسرعة مُرجعة المُستخدم إلى واجهة الصدفة آنيّاً، وهذا الأمر هو مثال على ذلك: echo "Hello World" هذا الأمر سيطبع "مرحبا بالعالم" على شاشة الطرفيّة ثم يرجعك إلى شاشة الأوامر. بعض أوامر المُقدمة الأخرى تأخذ وقتا أطول للتنفيذ، مانعة الولوج إلى الصّدفة أثناء التشغيل. يُمكن أن يعود السبب إلى أن الأمر يُشغل عمليّة أعقد أو أنّ العمليّة مُبرمجة للتنفيذ إلى أن تتوقف بشكل واضح أو إلى أن تتلقى مُدخلات من المُستخدم. تُعتبر أداة top من الأوامر التي تنفذ لوقت غير محدود، فبعد تشغيلها ستستمر في التنفيذ وتحديث عناصر الشاشة إلى أن يقوم المُستخدم بإنهاء العملية: top يُمكنك الخروج بالضّغط على "q". بعض العمليّات لا تملك طريقة للخروج ولتوقفها سيجب عليك استخدام طريقة أخرى. إنهاء عملية لنفترض أننا قمنا بتشغيل حلقة تكرار بسيطة في سطر الأوامر، يُمكننا تشغيل حلقة تكرار تقوم بطباعة "Hello World" كل عشر ثوان. هذه الحلقة ستستمر في الطّباعة إلى أن تُوقَف إجباريّاً: while true; do echo "Hello World"; sleep 10; done حلقات التكرار كهذه لا تملك أي زر للإلغاء، سيتوجّب علينا أن نوقف العمليّة بارسال ما يسمّى بـ الإشارة signal. تستطيع النواة في لينكس إرسال إشارات إلى العمليّات لطلب إيقاف نهائيّ للعملية أو تغيير الحالة فقط، طرفيّات لينكس عادة ما تكون مضبوطة لإرسال إشارة "SIGNT" (الإشارة رقم 2) لعمليّة المُقدّمة الحاليّة عند ضغط تركيبة المفتاحين CTRL+C. تُخبر إشارة "SIGNT" البرنامج بأن المستخدم قد طلب إنهاء العمليّة مُستخدما لوحة المفاتيح. لإيقاف حلقة التكرار التي بدأناها اضغط على مفتاحي CTRL و"c": CTRL+C سيتم إغلاق حلقة التكرار و ستتمكن من التحكم بالصّدفة Shell مجددا. إشارة "SIGNT" المُرسلة عن طريق تركيبة CTRL+C واحدة من الإشارات المتعدّدة التي يمكن إرسالها إلى البرامج، مُعظم الإشارات لا تملك تركيبة مفاتيح مُرتبطة بها، وعليك إرسال هذه الإشارات باستخدام الأمر kill عوضا عن ذلك (سوف نغطي ذلك لاحقاً). تعليق العمليات ذكرنا أعلاه أن عمليّات المُقدّمة تمنعك من تنفيذ أي أمر آخر طوال مدة تنفيذ العمليّة. ماذا لو أدركنا أنّنا نحتاج إلى شاشة الطرفية بعد أن نُشغّل عملية في المُقدمة؟ إشارة "SIGTSTP" (الإشارة رقم 20) هي إشارة من الإشارات التي يمكن إرسالها إلى عمليّات المُقدّمة. عندما نضغط تركيبة مفاتيح CTRL+Z، تُسجل الطرفيّة أمر "تعليق"، الذي يرسل إشارة "SIGTSTP" إلى عملية المُقدمة. هذا الأمر سيوقف مؤقّتا تنفيذ الأمر ويعيد التحكم بالطرفيّة. كمثال على ذلك، لنستخدم أمر ping للاتّصال ب google.com كلّ 5 ثوان. سوف نُسبق الأمر بكلمة command، ما يُخولُ لنا تجاوز أي كُنيات للصدفة (shell aliases) يُمكن لها وضع عدّ أقصى على الأمر : command ping -i 5 google.com عوضا عن إنهاء العملية باستعمال CTRL+C، أدخل CTRL+Z بدلا من ذلك. CTRL+Z سيكون المُخرج هكذا: [1]+ Stopped ping -i 5 google.com لقد تم إيقاف الأمر ping مؤقّتاً، وبذلك تستطيع الوصول إلى جلسة الصّدفة shell لكتابة الأوامر مُجدّداً. يُمكننا استعمال أداة إدارة العمليّات ps لعرضها: ps T PID TTY STAT TIME COMMAND 26904 pts/3 Ss 0:00 /bin/bash 29633 pts/3 T 0:00 ping -i 5 google.com 29643 pts/3 R+ 0:00 ps t يُمكننا ملاحظة أن عمليّة ping لا تزال ضمن القائمة، لكن العمود STAT (الخاص بحالة العمليّة) يحمل القيمة "T". صفحة الدليل الخاصة بـ ps تخبرنا أن هذا الحرف يعني أن العملية قد أوقفت عن طريق إشارة "التحكم بالعمليات". سوف نتحدّث بعمق أكثر عن كيفية تغيير حالة العمليّة،لكن في الوقت الحالي يُمكننا استئناف تنفيذ العمليّة في المُقدمة بكتابة: fg عند استكمال التنفيذ، أنهِ العمليّة باستعمال CTRL+C: CTRL+C إدارة عمليات الخلفية البديل الرئيسي لتنفيذ عمليّة في المُقدمة هو تشغيلها في الخلفيّة، عمليّة الخلفية مرتبطة بالطرفيّة التي شغّلتها منها، لكنّها لا تمنعك من الوصول إلى الصّدفة (سطر الأوامر)، عوضا عن ذلك، تُنفّذ العمليّة في الخلفيّة، تاركة لمُستخدم حريّة التفاعل مع النظام أثناء تشغيل العمليّة. بسبب الطريقة التي تتعامل بها عمليّات المقدمة مع الطرفيّة، يمكن أن تُشغّل عمليّة واحدة فقط لكل نافذة من نوافذ الطرفية. ولأن عمليّات الخلفية ترجع التحكم بالصّدفة Shell مباشرة بدون انتظار انتهاء العمليّة، يُمكن تشغيل العديد من العمليّات في الخلفيّة في الآن ذاته. تشغيل العمليات يُمكنك تشغيل عمليّة في المُقدّمة بإلحاق محرف"&" عند نهاية الأمر. يُخبر هذا الصّدفة shell بألّا تنتظر إلى حين انتهاء العملية بل تشغيلها وإرجاع التحكم بالطرفيّة للمُستخدم فوراً. ستبقى المُخرجات تُعرض على شاشة الطرفية (إلا إذا قمت بـإعادة توجيهها) لكنّك ستتمكن من كتابة أوامر إضافية أثناء استمرار تنفيذ عمليّة الخلفيّة. على سبيل المثال، يُمكن أن نبدأ أمر ping نفسه من القسم السّابق في الخلفيّة: command ping -i 5 google.com & سترى مخرجا يبدو هكذا من نظام bash للتحكم بالعمليّات : [1] 4287 وسترى أيضا المُخرج العادي من طرف الأمر ping: PING google.com (74.125.226.71) 56(84) bytes of data. 64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=1 ttl=55 time=12.3 ms 64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=2 ttl=55 time=11.1 ms 64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=3 ttl=55 time=9.98 ms رغم هذا ستتمكن من كتابة الأوامر في الوقت عينه. سوف يُمزج المُخرج من عمليّة الخلفيّة مع المدخلات والمخرجات الخاصة بعمليّة المُقدمة التي بدأتها، لكنّها لن تتداخل مع تنفيذ عمليّة المقدّمة. جدولة عمليات الخلفية لرؤية جميع العمليّات المُتوقفة أو عمليّات الخلفية، يمكنك استعمال الأمر jobs: jobs إذا كان الأمر ping مُشغّلا في الخلفية ستكون المخرجات على الشكل التالي: [1]+ Running command ping -i 5 google.com & يُبيّن هذا أنّنا نملك عمليّة واحدة في الخلفيّة. [1] تمثّل الـ "job spec" أو رقم الوظيفة. يُمكننا الإشارة إلى هذه العمليّة عند استعمال أوامر التحكم بالعمليّات مثل kill ،fg ،bg بإضافة سابقة "%" إلى رقم الوظيفة. في هذه الحالة سنشير إلى هذه الوظيفة بالإشارة 1%. إيقاف عمليات الخلفية يُمكننا إيقاف عمليّات الخلفيّة بعدّة طرق، أكثر طريقة نجاعة هي استخدام الأمر kill مع رقم الوظيفة. كمثال، يمكن أن نوقف أمرنا المُشغَّل في الخلفيّة بكتابة: kill %1 حسب طريقة ضبط الطرفيّة التي تستخدمها، إما مُباشرة أو بعض ضغط ENTER للمرة الثانية، ستشاهدُ حالة إيقاف الوظيفة على الطرفيّة: [1]+ Terminated command ping -i 5 google.com إذا تحققنا بالأمر jobs، سنلاحظ عدم وجود أي عمليّة. تغيير حالة العملية بعد أن تعرفنا على كيفية تشغيل عمليّة أو إيقافها في الخلفيّة، يُمكننا التحدث عن كيفية تغيير حالة العمليّة. شرحنا تغيير حالة واحدة قبل قليل عند التطرق لكيفيّة إيقاف مُهمّة أو تعليق عملها باستخدام CTRL+Z. يُمكننا نقل عمليّات المقدّمة إلى الخلفيّة أو العكس عندما تكون العمليّة في حالة توقّف. نقل عمليات المقدمة إلى الخلفية إذا نسيت أن تنهي الأمر بحرف العطف "&"، لا تزال قادرا على نقل هذه العمليّة إلى الخلفيّة. الخطوة الأولى هي إيقاف العمليّة باستخدام CTRL+Z: CTRL+Z عندما تتوقف العمليّة، يُمكننا استعمال الأمر bg لتشغيلها مجدّدا في الخلفيّة: bg ستشاهد حالة الوظيفة مع حرف العطف "&" ملحقا في الأخير: [1]+ ping -i 5 google.com & يعمل الأمر bg افتراضيّا مع آخر عمليّة تمت إيقافها، إذا أوقفت العديد من العمليّات بشكل متتالٍ بدون تشغيلها مجدّدا يُمكنك الإشارة إلى العمليّة برقم الوظيفة لإرسال العمليّة الصحيحة إلى الخلفيّة. لاحظ أنّه ليست كل العمليّات قابلة للإرسال إلى الخلفيّة. ستتوقف بعض العمليّات آليّاً إذا كشفت أنها نُفّذت مع إدخال ومخرج معياري متصلة مُباشرة مع طرفيّة نشطة. نقل عمليات الخلفية إلى المقدمة يُمكننا أيضاً نقل عمليّات الخلفيّة إلى المُقدّمة باستخدام الأمر fg: fg هذا الأمر يعمل مع آخر عمليّة منقولة إلى الخلفيّة، يُشار إليها بعلامة "+" في مخرجات jobs. الأمر يقوم فوراً بتعليق العمليّة ووضعها في المُقدّمة. لتحديد وظيفة أخرى استعمل رقم الوظيفة: fg %2 عندما تُنقل الوظيفة إلى المُقدّمة يُمكنك إمّا إنهاؤها مع CTRL+C، أو تركها لتكتمل أو تعليقها وإرسالها إلى الخلفيّة من جديد. التعامل مع إشارات SIGHUP سواء كانت العمليّة في المقدّمة أو في الخلفيّة، فستبقى مرتبطة بالطرفيّة التي بدأت العمليّة منها، عندما تغلق الطرفيّة فإنها ترسل إشارة SIGHUP لجميع العمليّات (في المُقدمة، في الخلفيّة، أو المتوقّفة) المرتبطة بها. ما يُشير إلى العمليّات بالإنهاء لأن الطرفيّة المُتحكِّمة ستصبح غير مُتوفرة قريباً، ماذا لو أردت إغلاق طرفيّة مع إبقاء تنفيذ عمليّات الخلفيّة؟ هناك العديد من الطرق للقيّام بذلك، أكثر الطرق مرونة هي باستعمال مُضاعف طرفيّة (terminal multiplexer) مثل tmux أو screen، أو استعمل أداة تمنح خاصية الفصل مثل dtach. على الرغم من هذا فهذه الطرق ليست دائما خيّارا ممكنا، ففي بعض الأوقات قد لا تكون هذه البرمجيات متوفرة أو أنّك قد سبق وبدأت العمليّة التي تريدها أن تستمر في التنفيذ بعد إغلاق الطرفيّة. استعمال nohup إذا كنت تعلم أنك عند تشغيل العمليّة سترغب في إغلاق الطرفيّة قبل انتهاء العمليّة، يُمكنك تنفيذها باستخدام أمر nohup، هذا الأمر يؤمّن العمليّة من التعرض إلى الإنهاء من طرف إشارة SIGHUP وستستمر في التنفيذ عندما تُغلق الطرفيّة. وستسجل كابن للنظام الأساسي: nohup ping -i 5 google.com & سترى سطرا يبدو كالتالي، مبيّنا أن مُخرجات الأمر ستُكتب في ملف يسمى nohup.out (في المجلّد الحالي إذا ما كان قابلا للكتابة عليه، في حالة لم يكن قابلا للكتابة عليه فسيُنشئه في مُجلّد المنزل): nohup: ignoring input and appending output to 'nohup.out' والغرض منه التأكد من أن المخرجات ليست مفقودة بعد إغلاق الطرفيّة. إذا أغلقت نافذة الطرفية وفتحت أخرى، ستبقى العمليّة في طور التنفيذ، ولن تتمكن من رؤيتها في مخرجات الأمر jobs لأن كل طرفيّة تحمل صفّ وظائف خاص بها، إغلاق الطرفيّة سبّب تدمير الوظيفة ping رغم أن العمليّة ping لا تزال تُنفّذ. لإيقاف عمليّة ping، يجب عليك البحث عن معرّف العمليّة (process ID) أو PID الخاص بها، يُمكنك القيّام بذلك بالاستعانة بالأمر pggrep (هناك أيضا الأمر pkill، لكنّنا بهذه الطريقة المقسّمة إلى خطوتين نكون متأكدين من أننّا سنوقف العمليّة التي نريدها فقط). استعمل pgrep مع a- للبحث عن العمليّة: pgrep -a ping المُخرجات: 7360 ping -i 5 google.com يُمكنك بعدها إيقاف العمليّة بإلحاق معرف العمليّة (الرقم في العمود الأول) بالأمر kill: kill 7360 قد ترغب في حذف ملف nohup.out إذا لم تكن تريده بعد الآن. استعمال disown يكون الأمر nohup مُفيدا فقط عندما تعلم أنّك ستحتاج إليه عند بدأ عمليّة ما. نظام إدارة الوظائف الخاص بـ bash يتيح لنا طرقا أخرى للحصول على نتائج مماثلة مع أمر diswon. عند الضبط الافتراضي للأمر disown، يقوم الأمر بحذف الوظيفة من طابور الوظائف الخاص بالطرفيّة. ما يعني أنك لن تستطيع إدارة العمليّة باستعمال التقنيّات التي تطرقنا إليها (مثل fg ،bg ،CTRL+Z ،CTRL+C). سيُحذف فوريّا من قائمة مخرجات الأمر jobs ولن يكون مرتبطا بالطرفيّة بعد ذلك. يُستعمل الأمر عن طريق تحديد العمليّة بالاستعانة برقم وظيفتها، على سبيل المثال، لتتبرر (disown) من الوظيفة رقم 2، يمكننا كتابة: disown %2 هذا الأمر سيترك الوظيفة في حالة مثل الأمر nohup، الاستثناء الوحيد هو أن جميع المُخرجات ستُفقد بعد إغلاق الطرفيّة في حالة لم يتم إعادة توجيهها إلى ملف ما. لن ترغب عادة في حذف العمليّة من قائمة التحكم بالوظائف إذا لم تكن تريد إغلاق نافذة الطرفيّة فورا.يمكنك إضافة h- للأمر لتقوم العمليّة بتجاهل إشارات SIGHUP، وتستمرَّ في العمل كوظيفة عاديّة: disown -h %1 في هذه الحالة، يُمكنك استعمال تقنيّات التحكم بالوظائف للاستمرار في التحكم بالوظيفة إلى حين إغلاق الطرفيّة، عند إغلاق الطرفيّة، ستكون عالقا -مرة أخرى- مع عمليّة دون أي مُخرجات إذا لم تعِد توجيهها إلى ملف عندما بدأتها. للعمل على ذلك، يمكنك محاولة إعادة توجيه مخرجات العمليّة بعد أن شغلتها. هذا الأمر خارج مجال هذا الدرس. يمكنك الإطلاع على الدرس مقدمة إلى إعادة توجيه الإدخال/الإخراج (I/O) في لينكس لمزيد من المعلومات. استعمال خيار الصدفة: huponexit هناك أيضا طريقة أخرى في Bash لتجنّب مشكلة إشارات SIGHUP للعمليّة الابن، يتحكم خيّار huponexit في ما إذا كان bash سيرسل إشارة SIGHUP للعمليّة الابن عند الخروج أو لا. ملاحظة: خيّار huponexit يؤثّر على طريقة تصرف إشارات SIGHUP فقط إذا كان إغلاق جلسة الصّدفة من داخل الصّدفة نفسه. يعتبر الأمر exit أو CTRL+D من الأمثلة على إغلاق الجلسة من داخل الصّدفة. عند إنهاء جلسة صدفة من برنامج الطرفيّة (بإغلاق النافذة، ...)، لن يكون للأمر huponexit أي تأثير، عوضا عن ترك اتخاذ قرار إرسال إشارة SIGHUP لـ bash سترسل الطرفيّة بنفسها الإشارة إلى bash، والتي ستبثّ (بشكل صحيح) الإشارة إلى العمليّة الابن. رغم المحاذير أعلاه، يعتبر خيار huponexit أسهل من الطرق. يُمكنك معرفة ما إذا كانت هذه الخاصية مُشغّلة أو لا بكتابة: shopt huponexit لتشغيل الخاصيّة: shopt -s huponexit الآن، إذا قمت بالخروج من الجلسة بالأمر exit، فإن العمليّات ستستمر في العمل: exit لدى هذا الأمر نفس المحاذير حول المُخرجات مع الخيّار السابق، لذلك تأكد أنّك قمت بتوجيه مُخرجات العمليّة قبل إغلاق الطرفيّة إذا كانت مُهمّة. خاتمة سيمنحك تعلّم التحكم بالوظائف وكيفيّة إدارة عمليّات المُقدمة وعمليّات الخلفيّة مرونة أكثر عند تشغيل البرامج من سطر الأوامر. عوضا عن فتح عدّة طرفيّات أو جلسات SSH، تستطيع أن تدبّر الأمر ببضع أوامر إيقاف وإرسال إلى الخلفيّة. ترجمة -وبتصرّف- للمقال How To Use Bash's Job Control to Manage Foreground and Background Processes لصاحبه Justin Ellingwood.
    1 نقطة
  27. يعدّ أمر tar من بين الأدوات التي يشيع استخدامها في سطر أوامر لينكس، إلا أن جوانب مفيدة كثيرة في الأمر تبقى مجهولة. نعرض في هذا المقال بعض أشهر استخدامات الأمر tar إضافة إلى استخدامات رائعة أخرى يقل الانتباه إليها. أول ما تجب معرفته هو الغرض الأساسي من tar؛ إذ يعمل الأمر على جمع الكثير من الملفات في واحد. إذا نفذت أمر tar على مجلّد من 37 ملفّا فستحصُل على ملفّ واحد يضمّها جميعا وبالتي يسهُل مشاركتها مع الآخرين. كما أن الأمر يحافظ على بنية المجلّد ويمكن أن يحافظ على الأذونات ومعلومات الوقت والزمن كذلك. الخيارات في ما يلي قائمة بأهم الخيارات التي يمكن استخدامها مع tar. c: إنشاء ملف أرشيف. f: استخدام مُخرج الأمر لإنشاء ملف. تظهر مخرجات الأمر في الطرفية فقط إن لم يٍُستخدَم هذا الخيار. x: استخراج محتويات ملف أرشيف. j: استخدام خوارزمية bzip2 لضغط الملفات. z: استخدام خوارزمية gzip لضغط الملفات. p: الحفاظ على الأذونات عند استخراج الملفات. t: الحصول على قائمة بمحتويات ملف الأرشيف. v: عرض تقدّم عمل الأمر أثناء تنفيذه. d: عرض الفروق بين ملف الأرشيف ونظام الملفات. إنشاء ملف أرشيف إنشاء ملف أرشيف لمجلّد: tar cf directory.tar directory إنشاء ملفّ أرشيف انطلاقا من مجموعة ملفات: tar cf directory.tar file1 file2 file3 إنشاء ملف أرشيف مضغوط بخوارزمية bzip لملفات mp3 الموجودة في المجلّد الحالي: tar -cvf mp3collection.tar ./*.mp3 إنشاء ملف أرشيف من المجلد /home/academy/ مع الحفاظ على الأذونات: tar cvpf academy.tar /home/academy/ إنشاء أرشيف من المجلد etc/ مع استبعاد المجلد الفرعيّ apache2: tar cvf etc_without_apache.tar –exclude='/etc/apache2/' ضغط الملفات إنشاء ملف مضغوط بـbzip2 مع عرض تقدّم عمل الأمر في الطرفية: tar cjvf directory.tar.bz2 directory/ إنشاء ملف مضغوط بـgzip مع عرض تقدّم عمل الأمر في الطرفية: tar czvf directory.tar.gz directory/ عرض محتوى أرشيف عرض محتوى ملف الأرشيف directory: tar tvf directory.tar.bz2 ... bluewaters_1440x900.jpg cloudyday_1440x900.jpg fragile_1600x1200.jpg coolemoticon_1440x900.jpg cloudyday_1440x900.jpg ... الاستخراج من ملفات الأرشيف استخراج محتوى ملف أرشيف: tar xvf directory.tar.bz2 استخراج ملف passwd فقط من أرشيف etc: tar xvf etc.tar.bz2 passwd استخراج مجلد postfix فقط من أرشيف etc: tar xvf etc.tar.bz2 /etc/postfix/ استخراج ملفات php فقط من أرشيف htdocs: tar xvf htdocs.tar.bz2 –wildcards '*.php' الفروق الفرق بين ملف أرشيف ومجلّد (في حال عدم ذكر المجلد فالمقارنة تكون مع مجلد بنفس اسم الأرشيف في المجلد الحالي): tar df directory.tar.bz2 البحث عن ملف في الأرشيف: tar df directory.tar.bz2 directory/file1 ملحوظة: يجب في إصداراتٍ من tar تمرير خيار خوارزمية الضغط أثناء استخراج الملفات أو أثناء النظر في فروق ملفات أرشيف مضغوطة)؛ إلا أن الأمر اختياري في أغلب الإصدارات الأخيرة. مثلا: tar xjvf etc.tar.bz2 /etc/postfix/ بدلا من: tar xvf etc.tar.bz2 /etc/postfix/ ترجمة -وبتصرّف- لمقال A tar Primer لصاحبه Daniel Miessler.
    1 نقطة
  28. يحتاج لينكس، مثل غيره من أنظمة التشغيل متعدّدة المستخدمين Multi-user system إلى طريقة للتحكّم في وصول المستخدمين إلى مختلف الملفات. ليس من المحبّذ مثلا أن يعدّل مستخدم آخر على ملفات الإعداد التي أخذ ضبطها كثيرا من وقتك. يُطبَّق مبدأُ الفصلِ هذا على نظام تشغيل لينكس بآلية الأذونات Permissions. كيف تعمل الأذونات يُخزَّن كلّ ملف على النظام بأذوناته الخاصّة. كيف تُمثَّل؟ من الراجح أنك صادفتها أثناء عملك على نظام لينكس: drwxr-xr-x -r-w-rwrw- -rwxr--r-- تظهر الأذونات عند تنفيذ أوامر مثل ls -l. تخبر سلسلة المحارف Charcters بمعلومات الملف؛ يمكن تقسيم سلسلة المحارف الخاصّة بمعلومات الملف إلى أربعة أقسام: القسم الأول: هو المِحرف الأول الذي يدلّ على نوع الملفّ. القسم الثاني: يحوي المحارف من 2 إلى 4؛ وهي أذونات المستخدِم مالك الملف؛ أي ما يحقّ لهذا المستخدم فعله على الملف. القسم الثالث: المحارف من 5 إلى 7؛ وهي أذونات المجموعة مالكة الملف. القسم الرابع: المحارف من 8 إلى 10؛ وهي أذونات بقية المستخدمين (ليسوا مالك الملف ولا ينتمون للمجموعة مالكة الملف). يمكن للمحرف الأول أن يكون أحد المحارف التالية: - للملفات العادية. d: للمجلّدات. l: للوصلات الرمزية Symbolic link. s: لمقابس Socket يونكس. p: لأنابيب الاتّصال. c: للأجهزة الطرفيّة المحرفيّة Character device file. b: للأجهزة الطرفيّة الكتليّة Block device file. توضّح المحارف التسعة التالية لنوع الملف الأذونات في ثلاثة أقسام من ثلاثة محارف (القسم الثاني، الثالث والرابع المذكورة أعلاه): تعرض المحارف الثلاثة الأولى أذونات القراءة، الكتابة والتنفيذ بالنسبة لمالك الملف. تعرض المحارف الثلاثة الموالية نفس الأذونات ولكن بالنسبة للمجموعة مالكة الملف؛ والمحارف الثلاثة الأخيرة الأذونات بالنسبة لبقية المستخدمين. يعني المحرف الأول من كل قسم من إذن القراءة (r)، المحرف الثاني إذن الكتابة (w) والمحرف الثالث إذن التنفيذ (x). يدلّ ذكر المحرف (w، r وx) على وجود الإذن أما غياب الإذن فيُشار إليه بعارضة -. يعني وجود عارضة مكان إذن القراءة (أو الكتابة أو التنفيذ) أن المعني (المالك، المجموعة أو الآخرين) ليس لديه هذا الإذن. بالعودة إلى المثال: drwxr-xr-x يعني هذا السطر أننا أمام مجلّد (المحرف الأول d)، لدى مالك الملف (المحارف من 2 إلى 4) جميع الأذونات (rwx)، لدى المجموعة المالكة (المحارف من 5 إلى 7) إذنا القراءة والتنفيذ ولكن ليس لديها إذن الكتابة (r-x)، ونفس الشيء بالنسبة لبقية المستخدمين. تعديل الأذونات يُستخدَم أمر chmod لتعديل الأذونات. توجد طريقتان لذلك: الأولى باستخدام الأحرف المذكورة أعلاه (w، r وx)، والثانية باستخدام أرقام. سنشرح الطريقة الأخيرة هنا لأنها أسرع كثيرا. chmod 775 ~/my/file نلقي نظرة على القائمة التالية لفهم معنى الأرقام: 4 = r 2 = w 1 = w = إذن غير موجود نجمع الأرقام للحصول على الأذونات. بالنسبة لإذن rwx فيجب أن يكون 4+2+1=7؛ إذن r-x يجب أن يكون 4+0+1=5 وهكذا. بما أن لدينا ثلاثة أقسام من الأذونات (المستخدِم المالك، المجموعة المالكة وبقية المستخدمين) فسنحتاج إلى ثلاثة أرقام، رقم لكلّ قسم. أي أننا نجمع الأرقام المقابلة لأذونات كل قسم ونضعها جنبا إلى جنب في عدد من ثلاثة أرقام: الرّقم على اليسار لأذونات المستخدم المالك، الرقم في الوسط للمجموعة المالكة والرقم على اليمين لبقية المستخدمين. نعرف، بتنفيذ المبدأ أعلاه ، أن الأمر السابق يعدّل أذونات الملف /my/file/~ لتصبح كالتالي (طبقنا الأمر على ملف عادي، وبالتالي تظهر - في معلومات الملف تليها الأذونات): -rwxrwxr-x تعديل ملكية ملف يوجد أمران لتعديل ملكية الملف، الأول وهو chown يغيّر المستخدم المالك والثاني chgrp ويغيّر المجموعة المالكة. تغيير المستخدم المالك (المالك الجديد للملف /my/file/~ هو user): chown user ~/my/file تغيير المجموعة المالكة (المجموعة الجديدة هي group): chgrp group ~/my/file إن لم تكن مالكَ الملف أو تنفذ الأمرين أعلاه بصلاحيات المستخدم الأعلى root فلن ينجح تنفيذ الأمر. ترجمة -وبتصرّف- للمقال Linux File Permissions Explained لصاحبه Radek Pazdera.
    1 نقطة
  29. توفر معظم الأنظمة الشبيهة بيونكس آلية مركزية لإيجاد وتثبيت البرمجيات. تُوزَع البرمجيات عادة في شكل حزم، مُخزنة في مستودعات. التعامل مع الحزم يُعرَف بإدارة الحزم. توفر الحزم المكونات الأساسية لنظام التشغيل، مع المكتبات المشتركة، التطبيقات، الخدمات والوثائق. يقوم نظام إدارة الحزم بأكثر من تثبيت البرمجيات لمرة واحدة. فهو يوفر أيضًا أدوات لترقية الحزم المثبتة حاليًا. تُساعد مستودعات الحزم على التأكد من أن الشيفرة فُحِصَت للاستخدام على نظامك، وأن المطورين والمشرفين وافقوا على نُسخ البرمجيات المُثبتة. عند ضبط الخواديم أو بيئات التطوير، غالبًا ما يكون النظر لما وراء المستودعات الرسمية ضروريًا. فقد تكون الحزم في الإصدار المُستقر من التوزيعة قديمة، خصوصًا عندما تكون البرمجيات المعنية سريعة التغيُر. وبالرغم من هذا، فإن إدارة الحزم هي مهارة حيوية لمدراء الأنظمة والمطورين، ووفرة البرمجيات المُحزّمة للتوزيعات الرئيسية هي مورد هائل. اُعد هذا الدّليل ليكون مرجعًا سريعًا لأساسيات إيجاد، تثبيت وترقية الحزم على مجموعة متنوعة من التوزيعات، وينبغي أن يساعدك على ترجمة هذه المعرفة بين الأنظمة. أنظمة إدارة الحزم: لمحة موجزة معظم أنظمة الحزم تُبنَى من مجموعات من ملفات الحزم. ملف الحزمة هو أرشيف يحتوي على ملفات ثُنائية مُترجمة ومصادر أخرى تُشكل البرنامج، مع سكربتات التثبيت. تحتوي الحزم أيضًا على بيانات وصفية قيّمة، تتضمن اعتمادياتها وقائمة من الحزم الأخرى المطلوبة لتثبيتها وتشغيلها. على الرغم من تشابه وظائف وفوائد تنسيقات وأدوات التحزيم إلى حد بعيد، إلا أنها تختلف باختلاف المنصات: نظام التشغيل التنسيق الأدوات Debian .deb apt, apt-cache, apt-get, dpkg Ubuntu .deb apt, apt-cache, apt-get, dpkg CentOS .rpm yum Fedora .rpm dnf FreeBSD Ports, .txz make, pkg تنسيق الحزم في دبيان والأنظمة المبنية عليها مثل أوبنتو، لينكس منت وراسبيان يكون كملف .deb. تُوفر أداة الحزم المُتقدمة APT أوامر لمعظم العمليات الشائعة: البحث بالمستودعات، تثبيت مجموعات من الحزم واعتمادياتها وإدارة الترقيات. تعمل أوامر APT كواجهة أمامية للأداة منخفضة المستوى dpkg، والتي تقوم بتثبيت ملفات .deb الفردية على النظام محليًا، وأحيانًا تُستدعى مباشرةً. تَستخدم CentOS، فيدورا والتوّزيعات الأخرى في عائلة Red Hat ملفات بتنسيق RPM. يُستخدم yum في CentOS للتفاعل مع ملفات الحزم الفردية والمستودعات. في النُسخ الحديثة من فيدورا حل dnf محل yum، وهو مُشتق حديث يحتفظ بمعظم خصائص واجهة yum النصية. يُدار نظام الحزم الثنائية في FreeBSD بالأمر pkg. ويوفر FreeBSD كذلك ما يُطلق عليه اسم Ports Collection، وهو هيكل مُجلدات محلية وأدوات تسمح للمُستَخدِم بجلب، تجميع وتثبيت الحزم مباشرة من المصدر باستخدام ملفاتMakefile. استخدام pkg مُريح غالبًا، ولكن أحيانًا لا تتوافر حزم مُترجمة مسبقًا، أو قد تُريد تغيير الخيارات بوقت الترجمة. تحديث قوائم الحزم تحتفظ معظم الأنظمة بقاعدة بيانات محلية للحزم المتوافرة بالمستودعات البعيدة. من الأفضل تحديث قاعدة البيانات قبل ترقية الحزم. وكاستثناء جزئي لهذا النمط، سيتحقق yum و dnf من وجود تحديثات قبل القيام ببعض العمليات، لكن يمكنك سؤالها عن توافر التحديثات بأي وقت. النظام الأمر Debian / Ubuntu sudo apt-get update CentOS yum check-update Fedora dnf check-update FreeBSD Packages sudo pkg update FreeBSD Ports sudo portsnap fetch update ترقية الحزم المثبتة التأكد من حداثة البرمجيات المُثبتة على النظام ستكون مهمة ضخمة بدون نظام حزم. ستضطر أن تتتبع تغييرات المنبع والتنبيهات الأمنية لمئات من الحزم المختلفة. على الرغم من أن مدير الحزم لن يحل كل مشكلة ستقابلها عند ترقية البرمجيات، إلا أنه يُمَكِنُك من صيانة معظم مكونات النظام بأوامر قليلة. ترقية الـ port المُثبتة على FreeBSD يمكن أن تُؤدي إلى إدخال أعطال أو تتطلب خطوات ضبط يدوية. من الأفضل أن تقرأ usr/ports/UPDATING/ قبل الترقية باستخدام portmaster. النظام الأمر ملاحظات Debian / Ubuntu sudo apt-get upgrade يُرقي الحزم الجديدة فقط، إن كان بالإمكان. sudo apt-get dist-upgrade قد يُضيف أو يحذف حزم لتلبية الاعتماديات الجديدة. CentOS sudo yum update Fedora sudo dnf upgrade FreeBSD Packages sudo pkg upgrade FreeBSD Ports less /usr/ports/UPDATING يُستخدم الأمر less لعرض ملاحظات التحديث للمنافذ. استخدم مفاتيح الأسهم للانتقال، اضغط q للخروج. cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a يُثبت portmaster ويستخدمه لتحديث المنافذ المُثبتة. إيجاد حزمة توفر معظم التوزيعات واجهة رسومية لمجموعات الحزم. هذه طريقة جيدة للتصفح بالفئة واكتشاف برمجيات جديدة. على الرغم من أنه غالبًا تكون الطريقة الأسرع والأكثر كفاءة لإيجاد حزمة هي البحث باستخدام أدوات سطر الأوامر. النظام الأوامر ملاحظات Debian / Ubuntu apt-cache search search_string CentOS yum search search_string yum search all search_string يبحث بجميع الحقول، من ضمنها الوصف. Fedora dnf search search_string dnf search all search_string يبحث بجميع الحقول، من ضمنها الوصف. FreeBSD Packages pkg search search_string يبحث بالاسم. pkg search -f search_string يبحث بالاسم، ويُعيد وصف كامل. pkg search -D search_string يبحث بالوصف. FreeBSD Ports cd /usr/ports && make search name=package يبحث بالاسم. cd /usr/ports && make search key=search_string يبحث في الأسماء، الأوصاف والاعتماديات. عرض معلومات عن حزمة محددة من المفيد قراءة أوصاف تفصيلية عن الحزم التي قررت تثبيتها. إلى جانب نص قابل للقراءة، يتضمن غالبًا بيانات وصفية مثل أرقام النُسخ وقائمة من اعتماديات الحزم. النظام الأمر ملاحظات Debian / Ubuntu apt-cache show package يعرض المعلومات المُخزنة محليًا عن الحزمة package. dpkg -s package يعرض حالة التثبيت الحالية للحزمة package. CentOS yum info package yum deplist package يسرد اعتماديات الحزمة package. Fedora dnf info package dnf repoquery –requires package يسرد اعتماديات الحزمة package. FreeBSD Packages pkg info package يعرض معلومات عن الحزمة المُثبتة package. FreeBSD Ports cd /usr/ports/category/port && cat pkg-descr تثبيت حزمة من المستودعات بمجرد معرفة اسم الحزمة، يمكن تثبيت الحزمة واعتمادياتها بأمر واحد. عمومًا، يمكنك طلب تثبيت حزم عديدة ببساطة عن طريق ذكرها جميعًا. النظام الأمر ملاحظات Debian / Ubuntu sudo apt-get install package sudo apt-get install package1 package2 … يُثبت كل الحزم المذكورة package1 package2 … sudo apt-get install -y package يُجيب بنعم عندما يطلب apt الاستمرار. CentOS sudo yum install package sudo yum install package1 package2 … يُثبت كل الحزم المذكورة package1 package2 … sudo yum install -y package يُجيب بنعم عندما يطلب yum الاستمرار. Fedora sudo dnf install package sudo dnf install package1 package2 … يُثبت كل الحزم المذكورة package1 package2 … sudo dnf install -y package يُجيب بنعم عندما يطلب dnf الاستمرار. FreeBSD Packages sudo pkg install package sudo pkg install package1 package2 … يُثبت كل الحزم المذكورة package1 package2 … FreeBSD Ports cd /usr/ports/category/port && sudo make install يبني ويُثبت منفذ من المصدر. تثبيت حزمة من نظام الملفات المحلي أحيانًا، بالرغم من عدم تحزيم البرمجيات رسميًا لنظام معين، سيوفر المطور أو البائع ملفات الحزم للتحميل. يمكنك الحصول عليهم عبر المتصفح، أو من خلال curl على سطر الأوامر. بمجرد وجود الحزمة على النظام، يمكن عادة تثبيتها بأمر واحد. يتعامل dpkg مع ملفات الحزم الفردية على الأنظمة الدبيانية. إذا كان هناك اعتماديات ناقصة لحزمة، فيمكن استخدام gdebi لجلب هذه الاعتماديات من المستودعات الرسمية. يُستخدم yum و dnf على أنظمة فيدورا و CentOS لتثبيت ملفات الحزم الفردية، ومُعالجة الاعتماديات المطلوبة أيضًا. النظام الأمر ملاحظات Debian / Ubuntu sudo dpkg -i package.deb sudo apt-get install -y gdebi && sudo gdebi package.deb يُثبت ويستخدم gdebi لتثبيت الحزمة package.deb ويَحصُل على أي اعتماديات ناقصة. CentOS sudo yum install package.rpm Fedora sudo dnf install package.rpm FreeBSD Packages sudo pkg add package.txz sudo pkg add -f package.txz يُثبت الحزمة package حتى وإن كانت مُثبتة. إزالة حزمة واحدة أو أكثر بما أن مدير الحزم يعرف الملفات التي تأتي مع حزمة مُعينة، فيمكن إزالة هذه الملفات بشكل نظيف من النظام إذا لم يعد هناك حاجة لهذه الحزمة. النظام الأمر ملاحظات Debian / Ubuntu sudo apt-get remove package sudo apt-get autoremove يُزيل الحزم غير الضرورية. CentOS sudo yum remove package Fedora sudo dnf erase package FreeBSD Packages sudo pkg delete package sudo pkg autoremove يُزيل الحزم غير الضرورية. FreeBSD Ports sudo pkg delete package cd /usr/ports/path_to_port && make deinstall يلغي تثبيت منفذ مُثبت. الحصول على المساعدة بالإضافة إلى التوثيقات المتوافرة على الشبكة، ضع في اعتبارك أن صفحات دليل يونكس (يُشار إليها بصفحات الدليل) متوافرة لمعظم الأوامر من الصدفة. استخدم man لقراءة صفحة page على النّحو التّالي: $ man page يمكنك الانتقال بمفاتيح الأسهم في man. اضغط / للبحث عن نص في الصفحة، و q للخروج. النظام الأمر ملاحظات Debian / Ubuntu man apt-get تحديث قاعدة البيانات المحلية والتعامل مع الحزم. man apt-cache الاستعلام في قاعدة بيانات الحزم المحلية. man dpkg التعامل مع ملفات الحزم الفردية والاستعلام عن الحزم المُثبتة. CentOS man yum Fedora man dnf FreeBSD Packages man pkg التعامل مع الحزم الثنائية المُترجمة مُسبقًا. FreeBSD Ports man ports التعامل مع مجموعات المنافذ. خاتمة ولمزيد من القراءة عرضنا العمليات الأساسية التي يمكن استخدامها كمرجع بين الأنظمة، لكننا لم نتطرّق سوى إلى أساسيات الأمر. للحصول على مزيد من التفاصيل لنظام معين، راجع المصادر التالية: يُغطي هذا الدليل إدارة حزم دبيان وأوبنتو بالتفصيل. هناك دليل CentOS الرسمي لإدارة البرمجيات باستخدام yum. هناك صفحة wiki فيدورا عن dnf، ودليل dnf الرسمي. يُغطي هذا الدليل إدارة حزم FreeBSD باستخدام pkg. يحتوي دفتر FreeBSD على قسم لاستخدام مجموعات المنافذ. ترجمة -وبتصرّف- للمقال Package Management Basics: apt, yum, dnf, pkg لصاحبه Brennen Bearnes.
    1 نقطة
  30. سنرى في هذا الدرس كيفية تثبيت وإعداد Mailpile، الذي هو عميل ويب سريع وآمن وجميل للبريد للإلكتروني، على نظام أوبنتو Ubuntu 14.04. عميل ويب للبريد الإلكتروني مثل Mailpile هو طريقةٌ ممتازةٌ للتأكد أنك تستطيع الوصول إلى بريدك من أي مكان دون الفوضى التي تحدث عند ضبط عميل بريد قياسي؛ Mailpile هو مجرد عميل بريد، مما يعني أنه يدير حسابات البريد الموجودة مسبقًا فقط. ستحصل، في نهاية هذا الدرس، على خدمة سحابية تعمل عملًا تامًا تشغِّل Mailpile مع خادم Nginx كخادم وسيط عكسي (reverse proxy). ابقِ في ذهنك خلال قراءتك لهذا الدرس أن Mailpile ما يزال تجريبيًّا (في مرحلة beta)، الذي يعني أنك ربما تواجه عللًا وصعوباتٍ أخرى في الطريق... لا يحتفظ Mailpile بمعلوماتك بين الجلسات (أي أن عليك إعادة إدخال معلومات حسابك في كل مرة تعيد فيها تشغيل Mailpile). ولا يحتوي أيضًا على طريقة سهلة لتشغيله كخدمة (service)؛ افتراضيًا، يمكنه أن يعمل فقط كسكربت تفاعلي في جلسة SSH؛ لكننا ضمّنا سكربت Upstart يستخدم Screen لتشغيله في الخلفية، لذلك يمكنك ترك عميل الويب للبريد يعمل إلى أن تشاء إغلاقه؛ لكن ذلك ليس طريقةً مستحسنةً للتشغيل في بيئة إنتاجية. المتطلبات المسبقةسنحتاج إلى بضعة أشياء قبل البدء: خادوم (Droplet) يعمل بنظام أوبنتو 14.04، من المستحسن أن يكون لديك 512 ميغابايت من ذاكرة الوصول العشوائي على الأقل لكي يستطيع Mailpile إدارة عدِّة صناديق بريد إلكتروني؛ إذا كنت تتوقع استخدامه من أكثر من مستخدمَين، فربما تريد زيادة الحجم.مستخدم يملك امتيازات الجذر (root)، راجع هذا الدرس لتعليمات حول إعداد مستخدم يملك امتيازات الجذر عبر sudo في أوبنتو 14.04شهادة SSL لإبقاء بريدك آمنًا؛ يمكنك شراء واحدة من Namecheap أو سلطة شهادات (certificate authority) أخرى؛ إذا لم تكن تريد إنفاق المال، فيمكنك إنشاء شهادتك لاستخدامها مع Nginx أو يمكنك الحصول على واحدة من StartSSL.اسم نطاق.إذا كنت تملك نطاقًا، فأنشِئ سجل A للإشارة إلى خادومك (على سبيل المثال mailpile.example.com).الحظ أماكن وجود شهادة SSL الخاصة بك والمفاتيح؛ إذا اتبعت الدرس التعليمي لإنشاء شهادات لاستخدامها مع Nginx، فسيكونوا موجودين في: /etc/nginx/ssl/nginx.crt و /etc/nginx/ssl/nginx.keyهذا كل ما في الأمر، إذا كان لديك كل شيء جاهزًا، فأكمل إلى الخطوة الأولى. الخطوة الأولى – تنزيل Mailpileسنُحضِّر في هذا القسم بيئة العمل لتثبيت Mailpile. علينا أولًا تسجيل الدخول إلى خادومنا، تأكد أنك سجلت دخولك بمستخدم لديه امتيازات الجذر عبر sudo. علينا بادئ الأمر تثبيت Git، سنستخدم Git لنسخ كود Mailpile المصدري من GitHub. حدِّث فهرس حزم مستودعات أوبنتو: sudo apt-get updateثبِّت Git: sudo apt-get install gitالآن بعد تثبيت Git، لنغيّر مجلد العمل الحالي إلى مكانٍ آخر لكي نجري أعمالنا فيه؛ في هذه الحالة، سنستخدم المجلد ‎/var: cd /varانسخ (clone) كود Mailpile: sudo git clone https://github.com/mailpile/Mailpile.gitستحتاج إلى استخدام sudo للسماح للأمر Git بإنشاء مجلد داخل ‎/var، الذي هو مجلد نظام. كاد أن يصبح نظامك جاهزًا لتشغيل Mailpile، انتقل الآن إلى الخطوة الثانية لاستعرض المزيد من المتطلبات. الخطوة الثانية – ضبط متطلبات Mailpileسنثبت ونضبط في هذا القسم متطلبات Mailpile. أولًا، لنثبت pip؛ إن pip هو مدير حزم لبايثون: sudo apt-get -y install python-pipسيسمح pip لنا بتثبيت متطلبات Mailpile بطريقة أسهل؛ سترى كيف يتم ذلك خلال دقيقة، لكن علينا أولًا تثبيت المزيد من الأشياء. علينا الآن تثبيت lxml؛ إن lxml هو من متطلبات Mailpile الذي يُثبَّت عادةً بواسطة pip، لكننا وجدنا أنه يسبب فشل التثبيت لأسبابٍ غير معروفة؛ وبسبب ذلك، سنُثبِّته عبر apt-get: sudo apt-get install python-lxmlيجب تثبيت بعض الحزم الأخرى يدويًا أيضًا، بما في ذلك GnuPG و OpenSSL؛ ستجعل هذه الحزم البيئة أكثر أمانًا لبريدنا. يمكن أن تكون بعض الحزم مثبتةً افتراضيًا، لكننا سنتأكد من ذلك على أيّة حال تحسبًا لعدم وجودها: sudo apt-get install gnupg openssl libssl-devبدِّل الآن مجل العمل الحالي إلى مجلد Mailpile: cd /var/Mailpileإننا جاهزون الآن لاستغلال إمكانيات pip لتثبيت بقية المتطلبات. يحتوي Mailpile على ملف باسم requirements.txt، الذي هو قائمة بمتطلباته؛ يملك pip القدرة على قراءة تلك القائمة وتثبيت كل واحدٍ فيها تلقائيًّا؛ لنفعل ذلك إذًا: sudo pip install -r /var/Mailpile/requirements.txtلقد إنتهينا، لقد ثبتنا جميع المتطلبات، وأصبح Mailpile جاهزًا للاستخدام، لكن قبل أن نشغِّله، علينا إجراء بعض الخطوات الإضافية لتزيد من الأمان. الخطوة الثالثة – ضبط وسيط عكسي عبر Nginxسنضبط Nginx في هذا القسم كوسيط عكسي لخدمة Mailpile؛ وهذا ما سيجعل Mailpile أكثر أمانًا، سامحًا لنا باستخدام شهادة SSL، وبتسهيل الوصول إلى عميل الويب للبريد. باستخدام Nginx –بدلًا من الوصول إلى Mailpile بزيارة http://example.com:33411– فستستطيع استخدام https://mailpile.example.com، لنبدأ! علينا أولًا تثبيت Nginx لأننا سنستخدمه لإنجاز معظم الأعمال؛ لذلك لنحصل على Nginx قبل أي شي: sudo apt-get install nginxالآن، وبعد أن ثبّتنا Nginx، يمكننا ضبط خادم الوسيط العكسي؛ لنعدل ضبط Nginx لتوجيه النطاق الفرعي إلى Mailpile. ربما تريد أن تحذف ملف ضبط Nginx الافتراضي، لأنه مليئ بأشياءٍ لا نحتاجها؛ لكن أولًا، لنُنشِئ نسخةً احتياطيةً؛ أنشِئ أولًا المجلد: sudo mkdir /home/backupثم خذ نسخةً احتياطيةً: sudo cp -b /etc/nginx/sites-enabled/default /home/backupيمكنك الآن حذف الملف بحرية دون عواقب وخيمة: sudo rm /etc/nginx/sites-available/defaultلنتأكد من أن الملف قد حُذِف: ls /etc/nginx/sites-available/إذا ثبَّتتَ Nginx الآن، فيجب ألّا يعيد الأمر السابق أيّة مخرجات. لننشِئ الآن ملفًا جديدًا: sudo nano /etc/nginx/sites-available/defaultحان الآن الوقت لضبط الوسيط العكسي؛ لنبدأ بالقسم الأول. أضف ما يلي إلى بداية الملف (سنشرح ماذا يفعل بعد ثوانٍ): /etc/nginx/sites-available/default server { listen 80; return 301 https://$host$request_uri; }ما سبق يخبر Nginx أن يعيد توجيه الطلبيات التي تأتي إليه إلى HTTPS؛ لكنه في الواقع يعيد التوجيه إلى شيءٍ غير موجودٍ بعد؛ لننشِئ ذلك: /etc/nginx/sites-available/default server { listen 443; server_name mailpile.example.com; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; access_log /var/log/nginx/mailpile.access.log; تأكد من أن الشهادة والمفتاح موجودان في ‎/etc/nginx/ssl/nginx.crt و ‎/etc/nginx/ssl/nginx.key؛ عدا ذلك، فحَدِّث المسارات بعد ssl_certificate و ssl_certificate_key لمطابقة مسارات الشهادة والمفتاح. ما أدخلناه في الأعلى يخبر Nginx أن يستمع إلى المنفذ 443 (المنفذ المستعمل للوصول إلى مواقع الويب عبر SSL، على النقيض من المنفذ 80)، ويستخدم شهادة SSL الخاصة بنا، ويشغِّل SSL. يجب علينا الآن أن نخدِّم شيئًا ما لعنوان HTTPS URL الذي أعدنا التوجيه إليه وفعّلنا SSL عليه؛ وهذا ما سنفعله في الخطوة الآتية. أضف ما يلي إلى الكتلتين النصيتين السابقتين: /etc/nginx/sites-available/default location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Fix the "It appears that your reverse proxy set up is broken" error. proxy_pass http://localhost:33411; proxy_read_timeout 90; proxy_redirect http://localhost:33411 https://webmail.example.com; } }بعد أن تنتهي من ذلك، يجب أن يبدو ملف الضبط كما يلي: /etc/nginx/sites-available/default server { listen 80; return 301 https://$host$request_uri; } server { listen 443; server_name mailpile.example.com; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; access_log /var/log/nginx/mailpile.access.log; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Fix the "It appears that your reverse proxy set up is broken" error. proxy_pass http://localhost:33411; proxy_read_timeout 90; proxy_redirect http://localhost:33411 https://webmail.example.com; } }إذا لم تستبدل الموقع الافتراضي، لكنك أنشَأت «server block file» باسمٍ مختلف، فيمكنك تفعيله كما يلي: sudo ln -s /etc/nginx/sites-available/mailpile.example.com /etc/nginx/sites-enabled/يجب أن يكون الموقع الافتراضي مفعلًا افتراضيًّا. الآن أعد تشغيل Nginx لإعادة تحميل الضبط: sudo service nginx restartهذا كل ما في الأمر؛ يمكن الوصول إلى Mailpile الآن عبر https://mailpile.example.com؛ ربما عليك قبول تحذير SSL إذا استخدمتَ شهادةً موقعةً ذاتيًا (self-singed certificate). ولو حاولت أيضًا الوصول عبر http://mailpile.example.com فستحوَّل تلقائيًّا إلى نسخة SSL من الموقع. لم نشغِّل Mailpile بعد، لذلك إذا زرت هذه العناوين الآن، فستشاهد الخطأ «502 Bad Gateway»، أكثر سبب شائع لهذا الخطأ هو أن تطبيق Mailpile لا يعمل. انتقل الآن إلى الخطوة الرابعة لتشغيل Mailpile. الخطوة الرابعة – ضبط وتشغيل Mailpileسنشغل في هذا القسم Mailpile، ونضبطه ليعمل مع الخادم الوسيط. لنتأكد أننا في المجلد الصحيح: cd /var/Mailpileلتشغيل Mailpile، أدخِل الأمر: ./mpتستطيع الآن البدء في استكشاف Mailpile عبر الواجهة السطرية أو واجهة الويب. تحذير: لن يحفظ Mailpile الضبط الذي أجريته عندما يتوقف عن العمل؛ لذلك قبل أن تقضي وقتًا في ضبطه؛ ربما تريد أن تنجز الخطوة الإضافية لتشغيله كخدمة تعمل في الخلفية. أصبح Mailpile يعمل الآن، ويمكنك الوصول إليه عبر https://mailpile.example.com، وحتى يمكنه إعادة التوجيه إلى HTTPS مُستخدِمًا شهادة SSL الخاصة بك. تهانينا! يمكنك استخدام Ctrl+C ثم كتابة quit للخروج من Mailpile. خطوة اختيارية – اجعل Mailpile يعمل كخدمة مع Upstartللتأكد من أن Mailpile يعمل دائمًا وجاهزٌ للتعامل مع بريدك؛ يمكنك تحويل Mailpile إلى خدمة باستخدام Upstart. لمّا كان Mailpile ما يزال تجريبيًّا، فإنه لم يصبح على شكل خدمة بعد؛ حيث يتطلب وجود سطر أوامر تفاعلي، لذلك لا تستطيع أن تشغل سكربت بايثون مباشرةً. سكربت Upstart الآتي هو طريقة ملتوية لتشغيل تطبيق بايثون كخدمة عبر Screen: sudo nano /etc/init/mailpile.conf /etc/init/mailpile.conf description "Mailpile Webmail Client" author "Sharon Campbell" start on filesystem or runlevel [2345] stop on shutdown script echo $$ > /var/run/mailpile.pid exec /usr/bin/screen -dmS mailpile_init /var/Mailpile/mp end script pre-start script echo "[`date`] Mailpile Starting" >> /var/log/mailpile.log end script pre-stop script rm /var/run/mailpile.pid echo "[`date`] Mailpile Stopping" >> /var/log/mailpile.log end scriptسيبدأ السكربت السابق Mailpile ويبقى يعمل ما دامت جلسة Screen تعمل؛ لا يمكن للسكربت أن يوقِف جلسة Screen إيقافًا سَلِسًا، لذلك عليك إيقاف جلسة Screen يدويًا إذا أردت إيقاف تشغيل Mailpile. مستخدمًا هذا السكربت، يمكنك تشغيل Mailpile عبر: sudo start mailpileمما يؤدي إلى إنشاء جلسة Screen باسم 12345‎.mailpile_init مملوكة من المستخدم الجذر (root). لكن لن تعمل أوامر Upstart الأخرى؛ عليك إنهاء جلسة Screen يدويًا، ولو انهارت الخدمة أو توقفت، فعليك أن تعيد تشغيلها من جديد وتضبط جميع خصائصها. الخطوة الخامسة – التعامل مع Mailpileيوضح هذا القسم كيفية استخدام Mailpile من واجهة الويب، عبر https://mailpile.example.com. هذه هي الشاشة التي ستشاهدها عندما تشغِّل Mailpile لأول مرة. اختر اللغة من القائمة المنسدلة.اضغط على زر «Begin».أنشِئ كلمة مرور جديدة، وأدخلها مرتين.اضغط على زر «Start using Mailpile».في شاشة الدخول: رجاءً أدخِل كلمة المرور التي أنشأتها منذ قليل. أضف حسابًا عبر زر «‎+ Add Account». من هنا، ستحتاج إلى إدخال بيانات حساب البريد الذي تملكه؛ عليك إدخال عنوان البريد الإلكتروني وكلمة المرور لذاك الحساب؛ ثم سيحاول Mailpile أن يتصل إلى حسابك بهذه المعلومات، الأمر الذي قد يستغرق بضع دقائق. يمكنك إدخال بيانات «Sending Mail» و «Receiving Mail» يدويًا، إذا لم يتمكن Mailpile من تحديدها تلقائيًا. تنويه: إن Gmail يحجب Mailpile من استخدام حسابك في Gmail؛ لذلك لن تستطيع إضافة حساب Gmail إلى Mailpile – ليس بسهولة على الأقل. بعد أن تُسجِّل دخولك، فستظهر لك هذه الشاشة: حاول إرسال واستقبال رسالة بريدية تجريبيّة إلى الحساب الذي أضفته إلى Mailpile من حساب بريد إلكتروني آخر؛ إذا نجح ذلك، فاعلم أن Mailpile يعمل مع حساب بريدك الإلكتروني بنجاح. ميزات Mailpile أخرىيوفِّر Mailpile أيضًا تشكيلةً واسعةً من خيارات التشفير: الخلاصةلكي تبدأ مشوارك مع Mailpile، فراجع الأسئلة الشائعة له. للمزيد من خيارات الضبط، نفِّذ الأمر help من سطر أوامر Mailpile. تهانينا، لقد حصلت على عميل ويب للبريد الإلكتروني الخاص بك، الذي يعمل على خادوم أوبنتو 14.04؛ ويعمل تمامًا مع SSL ويعيد التوجيه تلقائيًا إلى نسخة HTTPS من موقعك. يمكنك الآن ضبط حسابات بريدك الإلكتروني وإدارة جهات الاتصال، والبريد، والتصنيفات، والمزيد من واجهة Mailpile الجميلة. استمتع! ترجمة -وبتصرّف- للمقال How To Install Mailpile on Ubuntu 14.04‎ لصاحبه Kellan.
    1 نقطة
  31. عند الاتصال بخادوم ويب أو تطبيق، يتم الردّ على كلّ طلب HTTP يتمّ استقباله من طرف الخادوم برمز حالة HTTP أو “HTTP status codes”. رموز حالة HTTP هي عبارة عن رموز مكوّنة من 3 أرقام يتم تصنيفها إلى 5 أصناف مختلفة. يمكن أن يتمّ التعرّف على صنف رمز الحالة بسرعة عبر الرقم الأوّل منه: 1xx: معلومة 2xx: نجاح 3xx: إعادة توجيه 4xx: خطأ من طرف جهاز العميل 5xx: خطأ من طرف الخادوميركّز هذا الدرس على استكشاف أبرز رموز أخطاء HTTP التي قد تصادفك مثل 4xx و5xx وإصلاحها. من منظور مدير النظام، هناك العديد من الحالات التي قد تجعل خادوم الويب يجيب طلبًا معيّنًا برمز خطأ معيّن، سنقوم بتغطية أكثر الأسباب الشائعة التي تؤدي إلى ذلك بالإضافة إلى حلولها. لمحة عامة عن أخطاء العميل والخادومأخطاء العميل، أو رموز حالة HTTP من 400 إلى 499، هي نتيجة لطلبات HTTP تمّ إرسالها بواسطة جهاز مستخدم (مثل متصفح ويب أو أيّ عميل HTTP آخر), صحيح أنّ هذا النوع من الأخطاء مرتبط بالعميل، إلّا أنّه سيكون من المفيد معرفة رمز الخطأ الذي يصادف المستخدم للتحقق مما إذا كان يمكن إصلاح المشكلة من إعدادات الخادوم. يتم إرجاع أخطاء الخادوم أو بالأحرى رموز حالة HTTP من 500 إلى 599 بواسطة خادوم الويب عندما يكتشف حصول مشكلة، وإلّا فإنّه لن يكون قادرًا على معالجة الطلب. نصائح عامة عن اكتشاف الأخطاء وإصلاحهاعند استخدام متصفّح ويب لاختبار خادوم ويب، قم بتحديث المتصفّح بعد تطبيق التغييرات على الخادوم.تحقق من سجلات الخادوم للمزيد من التفاصيل عن كيفية قيام الخادوم بمعالجة الطلبات. كمثال، تُنتِج خواديم الويب مثل Apache وNginx ملفّين اثنين يدعيان access.log وerror.log يمكن أن يتم فحصهما للحصول على المعلومات منهما.تذكّر أنّ تعريفات رموز حالة HTTP هي جزء من معيار مُضمَّن من قبل التطبيق الذي يخدم الطلبات. هذا يعني أنّ رمز الحالة الذي يتم إرجاعه إليك يعتمد على كيفية معالجة برنامج الخادوم لخطأ معيّن. سيفيدك هذا الدرس عمومًا لتوجيهك في المسار الصحيح بخصوص ذلك.الآن وبعد أن امتلكت فهمًا جيدًا لرموز حالة HTTP، سنلقي نظرةً على الأخطاء الشائعة التي قد تصافدك. 400 Bad Requestرمز الحالة 400، أو خطأ Bad Request، يعني أنّ طلب الـHTTP الذي تمّ إرساله إلى الخادوم كان يحوي دوالًا ومُعامِلات غير صحيحة. إليك بعض الأمثلة التي قد يطرأ فيها خطأ Bad Request والذي رقمه 400: كعكة المستخدم (Cookie) المرتبطة بالموقع تالفة، مسح خبيئة المتصفّح والكعكات قد يحلّ هذه المشكلة. طلب تالف بسبب متصفّح ويب سيء وقديم مثلًا. طلب تالف بسبب خطأٍ بشري مثل عند تشكيل طلبات HTTP بشكلٍ يدوي (مثل استعمال curl بطريقة غير صحيحة).401 Unauthorizedرمز الحالة 401، أو خطأ Unauthorized أو عدم التصريح يعني أنّ المستخدم يحاول الوصول إلى صفحة أو مادّة غير مخوّل له بالوصول إليها أو لم يتم السماح له بذلك بشكلٍ صحيح. يعني هذا أنّه يجب على المستخدم توفير بيانات الدخول ليتمكّن من رؤية البيانات والموارد المحمية. كمثال، إذا حاول مستخدم الوصول إلى صفحة محمية باستيثاق HTTP، كما في درسنا كيفية إعداد استيثاق http مع nginx على 14.04 ubuntu، ففي هذه الحالة، سيتلقّى المستخدم رمز الحالة "401" إلى أن يقوم بتوفير اسم مستخدم وكلمة مرور (تلك الموجودة في ملفّ htpasswd.) لخادوم الويب. 403 Forbiddenرمز الحالة 403، أو خطأ Forbidden أو "محظور"، يعني أنّ المستخدم قام بطلبٍ خاطئ إلّا أنّ الخادوم يرفض تنفيذه على كلّ حال بسبب عدم توفّر الصلاحيات الكافية للوصول إلى الصفحة المطلوبة. إذا كنت تواجه خطأ 403 بشكلٍ غير متوقّع، فهناك بضع أسباب يمكن أن نشرحها هنا. صلاحيات الملفاتتطرأ أخطاء 403 عادةً عندما يكون المستخدم الذي يشغّل عملية خادوم الويب لا يمتلك الصلاحيات الكافية لقراءة الملفّ الذي تمّ طلبه. لإعطاء مثال عن الكشف عن هذا الخطأ وإصلاحه، افترض حصول الوضع التالي: يحاول المستخدم الوصول إلى ملفّ الفهرس الخاصّ بالخادوم من http://example.com/index.htmlعملية تشغيل خادوم الويب مملوكة للمستخدم www-dataيوجد ملفّ الفهرس على الخادوم بالمسار usr/share/nginx/html/index.html/إذا كان المستخدم يحصل على خطأ 403، فتأكّد أنّ المستخدم www-data يمتلك الصلاحيات الكافية لقراءة ذلك الملفّ. يعني هذا عادةً أنّه يجب ضبط صلاحيات "الآخرين" أو الـ"Others" إلى السماح بالقراءة ليتم حلّ المشكلة، هناك عدّة طرق لتنفيذ هذا، ولكنّ هذا الأمر سيعمل في هذه الحالة: sudo chmod o=r /usr/share/nginx/html/index.html htaccess.سببٌ آخر قد يكون وراء خطأ 403 وغالبًا ما يحصل عن غير قصد، هو الاستخدام الخاطئ لملفّ htaccess.، يمكن أن يتمّ استخدام ملفّ htaccess. لمنع الوصول إلى صفحاتٍ أو موارد معيّنة من قبل عناوين IP محددة أو نطاقات، استخدام هذا الملفّ بشكلٍ غير صحيح قد يكون المشكلة مثلًا. إذا كان المستخدم يحصل على خطأ 403 بشكلٍ غير متوقع، فتأكّد من أنّ ملفّ الـhtaccess. الخاصّ بك ليس المسؤول عن ذلك. ملف الفهرس غير موجودإذا كان المستخدم يحاول الوصول إلى مجلّد لا يمتلك بداخله ملفّ فهرس افتراضيًا، ولم يكن خيار السماح بسرد محتويات المجلّدات مفعّلًا، فإنّ خادوم الويب سيُرجع خطأ حظر 403. كمثال، إذا كان المستخدم يحاول الوصول إلى http://example.com/emptydir ولم يكن هناك ملفّ فهرس في المجلّد emptydir على الخادوم، فإنّه سيتم إرجاع رمز حالة 403. إذا كنت تريد تفعيل خيار سرد محتويات المجلّدات في حال عدم وجود ملفّ فهرس بداخلها، فيمكنك القيام بذلك من إعدادات خادوم الويب الخاصّ بك. 404 Not Foundرمز الحالة 404، أو خطأ Not Found، يعني أنّ المستخدم كان قادرًا على التواصل مع الخادوم إلّا أنّه لم يتمكن من إيجاد الملفّ المطلوب أو الصفحة المنشودة. يمكن أن تطرأ أخطاء 404 في الكثير من الحالات. إذا كان المستخدم يتلقّى خطأ 404 بشكلٍ غير متوقّع، فإليك بعض الأسئلة التي يجب أن تسألها للمساعدة في تفحّص المشكلة وإصلاحها: هل الرابط الذي وجّهَ المستخدم إلى خادمك يحتوي على خطأ بالكتابة؟ هل قام المستخدم بكتابة العنوان الخاطئ؟ هل الملفّ موجود في المسار الحالي للخادوم؟ وهل تمّ نقله أو نقل الصفحة المطلوبة إلى مكانٍ آخر أو حذفها من الخادوم؟ هل تمّ ضبط إعدادات الخادوم إلى مسار الجذر الرئيسي المطلوب؟ هل المستخدم الذي يملك العملية المُشغّلة لخادوم الويب يمتلك الصلاحيات اللازمة للوصول إلى المسار الذي يحوي الملفّ بداخله؟ (تلميح: تتطلب المجلّدات صلاحيات القراءة والتنفيذ لتستطيع الوصول إليها). هل يتمّ الوصول إلى الملفّ أو الصفحة عبر وصلة رمزية (symbolic link)؟ إذا كان الأمر كذلك، فتحقق من أن خادوم الويب مضبوط ليتبع الوصلات الرمزية.500 Internal Server Errorرمز الحالة 500، أو 500 Internal Server Error يعني أنّ الخادوم غير قادر على معالجة الطلب لسببٍ مجهول. أحيانًا سيظهر هذا الرمز عندما تكون أخطاء 5xx أكثر عرضةً لتكون هي سبب المشكلة. عادةً ما يكون أبرز سببٍ مسبب لهذا الخطأ هو وجود مشكلة في إعدادات الخادوم (مثل ملفّ htaccess. تالف) أو حزم ناقصة (مثل محاولة تنفيذ سكربت PHP دون وجود حزمة PHP مثبّتة بشكلٍ صحيح على الخادوم). 502 Bad Gatewayرمز الحالة 502، أو 502 Bad Gateway، يعني أنّ الخادوم هو عبارة عن خادوم بوّابة أو وسيط (proxy)، وأنّه لا يتلقّى ردًا صحيحًا من خواديم الواجهة الخلفية (backend servers) التي يجب أن تقوم بمعالجة الطلب. إذا كان الخادوم المطلوب هو عبارة عن خادوم وسيط عكسي (reverse proxy server)، مثل موازِن للحِمل، فإليك بعض الأمور التي يمكنك التحقق منها: أنّ خواديم الواجهة الخلفية (حيث يتم توجيه طلبات HTTP) تعمل بشكلٍ صحيح. أنّ الخادوم العكسي مضبوط بشكلٍ صحيح، مع تحديد الخواديم الصحيحة للواجهة الخلفية. أنّ اتصال الشبكة بين خواديم الواجهة الخلفية وبين خادوم الوسيط العكسي يعمل بشكلٍ جيّد. إذا كان بإمكان الخواديم أن تتواصل عن طريق منافذ أخرى، فتأكّد أنّ الجدار الناري يسمح بمرور التدفّق (Traffic) بينها. إذا كان تطبيق الويب الخاصّ بك مضبوطًا للاستماع إلى socket، فتأكّد أنّ الـsocket موجودة في المسار الحالي وأنّها تمتلك الصلاحيات الكافية.503 Service Unavailableرمز الحالة 503، أو خطأ Service Unavailable، يعني أنّ الخادوم قد تحمّل فوق طاقته أو أنّه تحت الصيانة، يوحي هذا الخطأ أنّ الخدمة يجب أن تعود إلى العمل في وقتٍ ما من الزمن. إذا لم يكن الخادوم تحت الصيانة، يمكن لهذا أن يشير إلى أنّ الخادوم لا يملك الموارد الكافية من المعالج والذاكرة العشوائية لمعالجة جميع الطلبات الواردة، أو أنّ خادوم الويب يحتاج إلى أنّ يتم إعداده ليسمح بالمزيد من المستخدمين والعمليات. 504 Gateway Timeoutرمز الحالة 504، أو خطأ Gateway Timeout، يعني أنّ الخادوم هو عبارة عن خادوم بوّابة أو خادوم وسيط (proxy)، وأنّه لا يتلقّى ردًا من خواديم الواجهة الخلفية في فترة الوقت المسموح بها. يمكن لهذا الخطأ عادةً أن يحصل في الحالات التالية: اتصال الشبكة بين الخواديم ضعيف. خواديم الواجهة الخلفية التي تقوم بتنفيذ الطلب بطيئة جدًا، بسبب الأداء الضعيف. فترة المهلة لخادوم البوابة أو الوسيط قصيرة جدًا.الخاتمةيجب أن تكون قد صرتَ الآن مُدركًا لأبرز رموز أخطاء HTTP وأبرز الحلول المتوفّرة لهذه الأخطاء، يجب أن تمتلك أساسياتٍ جيّدة لاكتشاف الأخطاء وإصلاحها على خواديم الويب الخاصّة بك أو تطبيقاتك. ترجمة -وبتصرف- للمقال How To Troubleshoot Common HTTP Error Codes لصاحبه Mitchell Anicas.
    1 نقطة
×
×
  • أضف...