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

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

  1. Ail Ahmed

    Ail Ahmed

    الأعضاء


    • نقاط

      13

    • المساهمات

      1193


  2. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      6

    • المساهمات

      13185


  3. ياسر مسكين

    ياسر مسكين

    الأعضاء


    • نقاط

      5

    • المساهمات

      1071


  4. Raghad Jamal

    Raghad Jamal

    الأعضاء


    • نقاط

      2

    • المساهمات

      224


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

المحتوى الأعلى تقييمًا في 10/27/24 في كل الموقع

  1. لدي مشكله لماذا لا يضهر لي الطرفيه او عند ما انقر على run لا يستجيب
    2 نقاط
  2. اهلا انا اعمل على مشروع backend with node js و frontend with react واريد اضافة فكرة ان يقوم المدير بتحميل صور معينة وحفظها في قاعدة البيانات ومن تم يقوم الزبون في جهة اخرى برؤية هذه الصور فقط دون تحميل اي صورة، فهل هناك طرق معينه يتم فيها التعامل مع الصور؟ ام فقط اقوم بتخزينها في قواعد بيانات mongodb بصيغةtype String ومن تم اقوم بعرضها؟ لانني رايت انه يوجد طرق تخزين خارجيه ولم افهم كيف يتم التعامل مع الصور؟
    2 نقاط
  3. السلام عليكم انا عاوز اتطور مهارات مامبرمج انا مش عاوز بس ان اكتاب كود وخالص الا انا عاوز افهم ازي الكود ده هشتغل علي اي حهاز وهكذا فا انا عاوز اتعلم نظم التشغيل والشبكات فا اي الافضل شهادات جوجل الامن السبراني والا دعم تكنولوجيا المعلومات ؟
    2 نقاط
  4. السلام عليكم هو اي البرنامج ده Google MENA Internship Program ؟ وهل اقدر اشارك فيه وانا من مصر ؟
    2 نقاط
  5. السلام عليكم هي اي الرياضيات الا يفضل اكون عرفها كامبرمج ؟ او يعني بدرس في الكليات ؟
    2 نقاط
  6. السلام عليكم اي هي JOIN في استعلامات SQL ؟
    2 نقاط
  7. ماهو Gitpod ؟ وكيف يمكن استخدامه؟ ومالفرق بينه وبين Github؟ وهل هو مهم أو مفيد للمبرمج؟
    2 نقاط
  8. السلام عليكم، هل هناك تطبيق للمنصة يسمح بتحميل الدروس لمشاهدتها لاحقًا دون الحاجة لاتصال مستمر بالإنترنت؟ ستكون هذه الميزة مفيدة للغاية، خاصة في المناطق التي تعاني من ضعف الإنترنت، مما يتيح متابعة الدروس بجودة عالية وتركيز أفضل. وشكرًا لكم.
    2 نقاط
  9. وعليكم السلام ورحمة الله وبركاته. من المفيد جداً لأي مبرمج أن يتعلم أساسيات الأمن السيبراني وستكون إضافة قوية له في ال cv الخاص به وفي عمله عموما حتى لو كان ينوي العمل في مجالات مثل تطوير الويب أو الموبايل أو تحليل البيانات. حيث ستساعدك الأساسيات في حماية المعلومات الحساسة والمستخدمين وأيضا إكتشاف وتجنب الثغرات المعروفة . ولكن لا بئس إذا لم تكن لديك الأساسيات ولكن يتوجب عليك معرفة أشهر أنواع الثغرات وكيفية حلها في مجالك فمثلا في مجال الويت أشهر الثغرات الموجودة هي SQL Injection و CSRF ( Cross-site request forgery) والعديد من الثغرات المشهورة لذلك يجب معرفتها وكيفية تجنبها . أما بخصوص شهادة Google Cybersecurity Professional Certificate فهي برنامج تعليمي يقدمه جوجل عبر منصة Coursera و يهدف إلى تزويد المشاركين بأساسيات ومهارات الأمن السيبراني. تشمل محتويات البرنامج: مقدمة للأمن السيبراني: فهم التهديدات والهجمات الشائعة. أساسيات الشبكات: التعرف على كيفية عمل الشبكات وكيفية تأمينها. تحليل المخاطر: كيفية تحديد وتحليل المخاطر المحتملة. أدوات الأمن السيبراني: تعلم استخدام الأدوات والتقنيات المستخدمة في المجال. استجابة الحوادث: كيفية التعامل مع الحوادث الأمنية والاستجابة لها. والكورس مصمم للمبتدئين ولا يتطلب أى خبرة سابقة في المجال ويمكنك مشاهدة محتويات الكورس على منصة Coursera لتفاصيل أكثر
    2 نقاط
  10. هل موجود Dark Theme في هذا الموقع ان لم يكن موجودا نتمنى اضافته ..
    1 نقطة
  11. أرى أن الطريقة المثالية هي أن يتم تحميل الصور وتخزينها في نظام تخزين خارجي ك Amazon S3 أو Cloudinary والحصول على رابط URL للصور المحملة ثم يتم بعد ذلك حفظ الروابط في قاعدة بيانات MongoDB بدلا من تخزين الصور نفسها. يمكنك رفع الصورة في الجزء الخاص بالـ backend من خلال استخدام مكتبة مثل Multer لتحميل الملفات (للتعامل مع ملفات الصورة عند رفعها من قبل المدير) وتخزين الصورة في خدمة تخزين خارجية من خلال واجهة API الخاصة ب Amazon S3 مثلا لتحميل الصورة وتخزينها وبعد رفع الصورة بنجاح، ستحصلين على رابط URL للصورة ثم تحفظين رابط ال URL في قاعدة البيانات ك String مثلما قلت بالضبط. وفي الجزء الخاص بـ frontend، يمكنك عرض الصور باستخدام عنصر <img src={imageURL} />، بحيث يمثل imageURL الرابط المخزن. وهذا الاستعمال لأنه في حال ما إذا كنت ستعرضين عددا كبيرا من الصور دفعة واحدة، فمن الأفضل استخدام الخدمات الخارجية مثلما أشرنا مع استخدام CDN وهذا بغية تسريع تحميل الصور على واجهة المستخدم وأيضا يمكنك البحث عن طرق التسريع الأخرى مثلا يمكنك أيضا إضافة آليات مثل التحميل عند التمرير (lazy loading) في الواجهة الأمامية لتقليل الحمل على الخادم.
    1 نقطة
  12. انا مش عارف اوصل ليه MENA ممكن حضرتك تساعدني؟
    1 نقطة
  13. تمام , جدا شكراا جدا لحضرتكم انا دراست كورس cs50 بس ده كانت مقدمه ؟ فا كانت عاوز حاجه اعمق يعني ؟
    1 نقطة
  14. أساسيات الرياضيات فقط أي ما تم دراسته في المرحلة الأساسية من تعليمك، تستطيع البحث على اليوتيوب عن الأساسيات ومراجعتها. بالنسبة للخوارزميات فما تحتاجه هو دراسة discreet math فقط، وهي الرياضيات المنفصلة وذلك فرع من الرياضيات يهتم بدراسة الكيانات المنفصلة، أي الكيانات التي يمكن عدها بشكل منفصل. على عكس الرياضيات المستمرة التي تتعامل مع الكميات المتصلة مثل الأرقام الحقيقية مثل درجة الحرارة، يمكن أن تكون 20 درجة مئوية، أو 20.5 درجة مئوية، أو 20.123 درجة مئوية، وهكذا. تركز الرياضيات المنفصلة على الكيانات المنفصلة مثل الأعداد الصحيحة، الرسوم البيانية، المجموعات، والأنظمة المنطقية، مثل عدد الطلاب في الفصل، يمكن أن يكون 20 طالبًا، أو 21 طالبًا، لكن لا يمكن أن يكون 20.5 طالبًا. وهي مهمة لأنها توفر الأدوات الأساسية لفهم وفك تشفير العالم الرقمي الذي نعيش فيه، وتستخدم مفاهيمها في العديد من التطبيقات العملية، من تصميم مواقع الويب إلى تطوير الألعاب إلى تحليل البيانات.
    1 نقطة
  15. 1 نقطة
  16. Gitpod هو بيئة تطوير متكاملة أي أنه عبارة عن IDE وهي مستندة إلى السحابة، توفر بيئة جاهزة لتطوير البرمجيات على الإنترنت مما يتيح العمل على المشاريع في أي مكان، دون الحاجة إلى إعداد بيئة تطوير محلية كما يوفر إمكانية الوصول إلى الشيفرات المصدرية وبناء التطبيقات، وإجراء الاختبارات بشكل متزامن مع فريق العمل. وباختصار، GitHub هو المكان الذي تحتفظ فيه بالشيفرات المصدرية، بينما Gitpod هو المكان الذي يمكنك فيه تطوير تلك الشيفرات بشكل مباشر.
    1 نقطة
  17. كلاهما يقدمان خدمة مختلفة، منصة GitHub هي خاصة بإدارة إصدارات الكود المصدري من خلال GIT وتخزين الكود ومشاركة المشاريع وتسهيل العمل بين فريق العمل. بينما Gitpod هو بيئة تطوير سحابية Cloud IDE لتشغيل مشاريع Git بشكل تلقائي في حاويات Docker، أي المكان الذي تعمل على كتابة الكود به، أي عند فتح مشروع في Gitpod، فإنه يُنشئ بيئة تطوير مُخصصة في حاوية Docker. وللعلم تستطيع تشغيل المنصة على حاسوبك أيضًا وليس على السحابة فقط. وتوفر مجموعة من الأدوات الأساسية لتطوير البرمجيات، مثل محرر الكود، وترجمة الكود، واختبار الكود، وإدارة الإصدارات، وتستطيع الوصول إلى بيئة التطوير من أي جهاز متصل بالإنترنت، دون الحاجة إلى تثبيت أي برامج، فلا حاجة لتثبيت بيئة تطوير محلية. أو يمكنك التطوير بشكل محلي لكن بشكل أسرع بسبب استخدام حاويات Docker. وتتيح لك الربط مع مستودعات Git مثل GitHub، GitLab، Bitbucket، وغيرها.
    1 نقطة
  18. لنفترض أن لدينا جدولين جدول للموظفين وآخر للأقسام كالتالي: جدول الموظفين: لعرض معلومات كل موظف. CREATE TABLE Employees ( EmpID int, EmpName varchar(50), DeptID int ); جدول الأقسام: لعرض الموظفين وأقسامهم. SELECT Employees.EmpName, Departments.DeptName FROM Employees INNER JOIN Departments ON Employees.DeptID = Departments.DeptID; JOIN هو أمر في SQL يستخدم لربط جدولين أو أكثر معا بناء على عمود مشترك بينهم فمثلا INNER JOIN يأخذ فقط البيانات المشتركة بين الجدولين مثلا عندما نريد معرفة الموظفين الذين لديهم أقسام فقط بينما LEFT JOIN يأخذ كل البيانات من الجدول الأيسر + البيانات المتطابقة من الجدول الأيمن مثلا عندما نريد معرفة كل الموظفين حتى لو لم يكن لديهم قسم. لاحظ RIGHT JOIN فهو يأخذ كل البيانات من الجدول الأيمن + البيانات المتطابقة من الجدول الأيسر ونستعمله عندما نريد معرفة كل الأقسام حتى لو لم يكن فيها موظفين بينما FULL JOIN فهو يأخذ كل البيانات من كلا الجدولين إضافة أنه يظهر NULL للقيم غير المتطابقة. وهذا مثال لكود كيفية استعمال كل نوع كما شرحنا الآن لنبدأ ب INNER JOIN: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.id = Table2.id; LEFT JOIN أو (LEFT OUTER JOIN): SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.id = Table2.id; RIGHT JOIN أو (RIGHT OUTER JOIN): SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1.id = Table2.id; FULL JOIN أو (FULL OUTER JOIN): SELECT * FROM Table1 FULL OUTER JOIN Table2 ON Table1.id = Table2.id; ال CROSS JOIN: وهو يقوم بعمل ضرب ديكارتي (Cartesian product) بين الجدولين فيربط كل صف في الجدول الأول مع كل صف في الجدول الثاني كالتالي: SELECT * FROM Table1 CROSS JOIN Table2; أي أننا يمكننا استخدام كل من: INNER JOIN عندما نريد فقط البيانات المتطابقة LEFT JOIN عندما نريد جميع البيانات من الجدول الأول حتى لو لم يكن لها تطابق RIGHT JOIN عندما نريد جميع البيانات من الجدول الثاني FULL JOIN للحصول على جميع البيانات من كلا الجدولين لكن يجب أن نتجنب استخدام CROSS JOIN إلا في حالات خاصة لأنه ينتج عددا كبيرا من السجلات.
    1 نقطة
  19. دمج البيانات مثل ربط قطع البازل، أي لدينا مجموعة من قطع البازل، كل قطعة تمثل جدولًا في قاعدة البيانات، لكي تُكمل الصورة الكاملة، تحتاج إلى ربط هذه القطع معًا. هنا يأتي دور JOIN في SQL. أي JOIN هي عبارة SQL تُستخدم لدمج البيانات من جداول متعددة بناءًا على علاقة مشتركة بينها، مثل ربط قطع البازل معًا لإنشاء صورة كاملة. ويوجد أنواع لـ JOIN، أولها INNER JOIN مثل ربط قطعتين من البازل تتناسبان تمامًا معًا، ويعرض فقط الصفوف التي تتطابق قيمها في مفتاح الربط في كلا الجدولين. مثل جدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب). جدول الدرجات يحتوي على معلومات عن درجات الطلاب (رقم الطالب، اسم المادة، الدرجة). SELECT Students.Name, Grades.Subject, Grades.Grade FROM Students INNER JOIN Grades ON Students.StudentID = Grades.StudentID; سيُظهر الاستعلام أسماء الطلاب والمواد التي درسها كل طالب والدرجات التي حصل عليها. النوع الثاني هو LEFT JOIN مثل ربط قطعة من البازل مع قطعة أخرى وقد تكون هناك فراغات Null، ويعرض جميع صفوف الجدول الأيسر، مع إمكانية عرض البيانات المتوافقة من الجدول الأيمن. مثل جدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب). وجدول الأنشطة يحتوي على معلومات عن الأنشطة التي يشارك فيها الطلاب (رقم الطالب، اسم النشاط). SELECT Students.Name, Activities.ActivityName FROM Students LEFT JOIN Activities ON Students.StudentID = Activities.StudentID; النتيجة هي أسماء جميع الطلاب، مع عرض أسماء الأنشطة التي يشارك فيها كل طالب إن وجدت، وإن لم يشارك طالب في أي أنشطة، ستُظهر قيمًا فارغة (NULL) في عمود "اسم النشاط". النوع الثالث هو RIGHT JOIN مثل ربط قطعة من البازل مع قطعة أخرى وقد تكون هناك فراغات Null، ويعرض جميع صفوف الجدول الأيمن، مع إمكانية عرض البيانات المتوافقة من الجدول الأيسر. مثل جدول الأنشطة يحتوي على معلومات عن الأنشطة التي يشارك فيها الطلاب (رقم الطالب، اسم النشاط). وجدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب). SELECT Activities.ActivityName, Students.Name FROM Activities RIGHT JOIN Students ON Activities.StudentID = Students.StudentID; نتيجة الاستعلام هي أسماء جميع الأنشطة، مع عرض أسماء الطلاب الذين يشاركون فيها إن وجدت، وفي حال لم يكن هناك طالب مرتبط بنشاط معين، ستُظهر قيمًا فارغة (NULL) في عمود "اسم الطالب". النوع الأخير هو FULL JOIN مثل ربط جميع قطع البازل معًا، بغض النظر عن وجود فراغات، ويعرض جميع صفوف كلا الجدولين، سواء كانت متوافقة أم لا. مثل جدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب). وجدول المعلمين يحتوي على معلومات عن المعلمين (اسم المعلم، رقم المعلم). SELECT Activities.ActivityName, Students.Name FROM Activities RIGHT JOIN Students ON Activities.StudentID = Students.StudentID; ستحصل على أسماء جميع الطلاب والمعلمين، مع عرض البيانات المتوافقة بينهما، وإن لم يكن هناك تطابق، ستُظهر قيمًا فارغة (NULL) في الأعمدة من الجدول الآخر.
    1 نقطة
  20. و عليكم السلام ال JOIN: هي عملية تستخدم لربط الجداول مع بعضها البعض بناءً على علاقة مشتركة. و غالبًا ما تُستخدم عندما يكون لديك بيانات موزعة في جداول متعددة وترغب في جلبها معًا في استعلام واحد لتقديم نتائج مفيدة. و هناك عدة انواع له: INNER JOIN: يتم إرجاع السجلات التي لها قيم مطابقة في كلا الجدولين فقط. إذا لم يكن هناك تطابق، فلن يتم عرض السجل في النتيجة. LEFT JOIN (LEFT OUTER JOIN): يتم إرجاع جميع السجلات من الجدول الأيسر (Left Table)، مع السجلات المطابقة من الجدول الأيمن (Right Table). إذا لم يكن هناك تطابق، فستحتوي الأعمدة من الجدول الأيمن على قيمة NULL. RIGHT JOIN (RIGHT OUTER JOIN): يعمل بشكل مشابه لـ LEFT JOIN، لكن يتم إرجاع جميع السجلات من الجدول الأيمن، مع السجلات المطابقة من الجدول الأيسر. إذا لم يكن هناك تطابق، ستكون القيم من الجدول الأيسر هي NULL. FULL JOIN (FULL OUTER JOIN): يجمع نتائج كل من LEFT JOIN و RIGHT JOIN، حيث يتم إرجاع جميع السجلات من كلا الجدولين. إذا لم يكن هناك تطابق، فسيتم ملء القيم غير الموجودة بـ NULL.
    1 نقطة
  21. مجالين مختلفين تمامًا. Google Cybersecurity Professional Certificate تركيزها على مهارات الأمن السيبراني الأساسية، مثل تحديد نقاط الضعف، التحقيق في الحوادث، والاستجابة لها، ومناسبة لمن يرغب في بدء مسيرته المهنية في مجال الأمن السيبراني أو تحسين مهاراته في المجال مثل تحليل المخاطر، اختبار الاختراق، إدارة الأحداث الأمنية، وتشفير البيانات. وتُمكنك من الحصول على وظائف مثل محلل أمن المعلومات، مهندس أمن المعلومات، أو مسؤول أمن المعلومات. بينما Google IT Support Professional Certificate تختص بمهارات دعم تكنولوجيا المعلومات الأساسية، مثل حل مشكلات الأجهزة والبرامج، دعم المستخدمين، وإدارة الشبكات. ومناسبة للحصول على وظائف مثل فني دعم تكنولوجيا المعلومات، مساعد تقني، أو مسؤول دعم تقني.
    1 نقطة
  22. الفرق هنا بين مهندس برمجيات وبين مبرمج، فالأول لديه دراية كبيرة بين الأساسيات ويستطيع تعلم أي شيء، والثاني لديه دراية بالتقنيات فقط (الإطارات والمكتبات). بالطبع أي شخص خارج الكلية يستطيع تعلم نفس الشيء لا مشكلة، الفكرة هي في الإلتزام. في حال كان الشخص الذي يدرس بكلية خاصة بالبرمجة مهتم بالبرمجة بالفعل، فسيصبح أفضل من الشخص العادي الذي تعلم البرمجة من خلال مسار تعليمي دونّ تأسيس لمدة سنة مثلاً أو حتى 6 أشهر، ففي الجامعى يتم دراسة علوم الحاسوب بشكل متعمق. لكن للعلم أيضًا أغلب المناهج قديمة، وستحتاج إلى الدراسة بجانب الكلية لتحديث معلوماتك فالتقنية يتم تطويرها بشكل متسارع، لذا ذكرت (شخص مهتم بالبرمجة) وليس شخص يدرس من أجل النجاح بالكلية فقط. فلا حاجة لدراسة 4 سنوات لتصبح مبرمج بالطبع، المنهج المفيد لك تستطيع إنهائه في 6 أشهر أو سنة حسب الخبرة السابقة لديك، ستجد منهج لذلك على GItHub مثل Open Source Society University: https://github.com/ossu/computer-science الكلية توفر لك أشخاص مهتمين بنفس اهتماماتك وأيضًا تشجيعك على الدراسة.
    1 نقطة
  23. الجامعة لا تعلّمك البرمجة فقط، البرمجة هي جزء من المادة التعليمية وليست متمحورة حولها، يعني لن تعطيك إلا الشيء القليل من كلّ شيء، ثم يأتي دور المتعلّم أو الطالب من خلال البحث وتطوير نفسه ومهاراته سواء، أي أنّ دراسة علوم الحاسوب في الجامعة لا يعني أن تستغني عن التطوير الذاتي في هذا المجال. الجامعة ستأخذ منك وقتا طويلا لكنها ستعلمك المبادئ الأساسية من خوازرميات وجبر وتلقّنك المفاهيم الرياضياتية والإحصاء وغيرها التي تحتاجها في هذا المجال، ثم ستعطيك لمحة عن كلّ شيء تقريبا لكن أحيانا في جامعاتنا العربية يتمّ تدريس بعض المقاييس بأشياء أكل عليها الدهر وشرب وكما نعرف فهذا المجال في تطور مستمر والتحديثات فيه لا تكاد تتوقف، لكن التدريس بتلك الطريقة له غايته ميزاته وعيوبه، فالجامعة تريدك أن تجد المشكل بنفسك ثم تأتي الحلول فيما بعد، فعلمك كيف تصل إلى التفكير المنطقي، فلو تدرسك مباشرة بأطر العمل الحديثة فقد لا يكون الأمر مثل التدريس بالخوارزميات القديمة أو بالأحرى الأساسية والتي منها تطورت اللغات والبرمجة. أنصحك باختيار مجال معين سواء أكان ضمن مجالك الدراسي في الجامعة أو لم يكن، ثم قم بتطوير نفسك فيه بالتزامن مع دراساتك الجامعية، وحتما ستسفيد من الجامعة من خلال دراستك للخوارزميات وقواعد البيانات والبنى وغيرها. الفرق الجوهري الذي أراه بين الاثنين هو أن الطالب في الجامعة هو مشروع مهندس وليس مبرمج وشتّان بين الاثنين، لكن في الجامعة ما ينقص خريجي الهندسة هو التجربة العملية والخبرات، وهنا قد تظن أن المبرمج خارج الجامعة لديه إمكانيات وخبرات أكثر لكن الفرق هو أنّ الخبرات لدى المتعلم في الجامعة مرتبة ومنظمة لأن البرنامج المعد في الجامعة مدروس ومسطر ليصل إلى أهداف معينة، بينما الذي خارج الجامعة فأفكاره قد تجدها مبعثرة وأحيانا تجده قد حفظ ما يفعله نتيجة التكرار ونتيجة المشاريع الكثيرة التي أنجزها.
    1 نقطة
  24. أمر عادي جدا قد يتعلم المبرمج أساسيات الأمن السيبراني حتى لو لم يكن سيعمل في هذا المجال بل سيكون ذلك مفيدا كثيرا بالنسبة له ولمساره، فمن ناحية الحماية سيتكون لديه فهم لكيفية حماية التطبيقات التي يقوم بتطويرها مما سيساعده على تجنب الأخطاء الشائعة التي قد تؤدي إلى ثغرات أمنية ومنه سيسعى لكتابة كود أكثر أمانا منذ البداية وسيساهم في تطبيق أفضل الممارسات الأمنية في التطوير. أما بخصوص Google Cybersecurity Professional Certificate فهي شهادة احترافية تقدمها شركة Google وتغطي: أساسيات الأمن السيبراني وشبكات الحاسب وأمنها بالإضافة إلى نظم التشغيل وأمنها وأمن البنية التحتية وحسب ما أتذكر أيضا لغة بايثون للأمن السيبراني وغيرها ولكني أعتقد أنك ستحتاج إلى التحضير بشكل مكثف لاجتياز اختبار الشهادة.
    1 نقطة
  25. كتابة سكربتات باش Bash Scripting مهارة أساسية لا غنى عنها لكل مدير نظام ومهندس DevOps، فإذا كنت ترغب بتطوير مهاراتك في هذا المجال سواءً كنت مبتدئًا أو متمرسًا في نظام لينكس فإن هذه السلسلة التي تشرح Bash للمبتدئين ستلبي طلبك، بما تقدمه من أمثلة وتطبيقات عملية على أساسيات باش بدايةً من إنشاء السكريبت وحتى أتمتة تنفيذه على الخادم، وتتضمن هذه السلسلة المقالات التالية: أنشئ برنامجك النصي الأول على صدفة باش Bash. المتغيرات في سكربتات الصدفة باش Bash. تمرير الوسطاء إلى سكريبت باش Bash. استخدام المصفوفات في باش Bash. استخدام المعاملات الحسابية في سكربتات باش Bash. عمليات السلاسل النصية في باش Bash. الجمل الشرطية If و Else و Case في باش 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 نقطة
×
×
  • أضف...