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

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

  1. Ail Ahmed

    Ail Ahmed

    الأعضاء


    • نقاط

      4

    • المساهمات

      1202


  2. شهد

    شهد

    الأعضاء


    • نقاط

      3

    • المساهمات

      7


  3. Omar Hammami

    Omar Hammami

    الأعضاء


    • نقاط

      2

    • المساهمات

      2


  4. Ahmed Alsalih

    Ahmed Alsalih

    الأعضاء


    • نقاط

      2

    • المساهمات

      118


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

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

  1. عندي الواجهة فيا صورة متحركة وصورة ثاتبة فوقا.. كل وحدة ب div الصورة الثابتة مابتتحرك من طرف اليسار؟ هي تنسيق css الصورة احتاج مساعدة
    2 نقاط
  2. السلام عليكم اخواني لقد اتممت بفضل الله ثم هذه الاكاديميه المحترمه و المحترفه دوره جافاسكريبت و قد حصلت علي الشهاده الحمد لله في الاول عملت المشاريع التطبيقيه مع المحاضر ولاكن فقط اخذت الفكره و تبقطها باسلوبي حتي اتمكن من تقويه نفسي و تعزيز الكود الحاص بي قد تواصلت مع خدمه العملاء و كانوا سريعين في الرد جزاهم الله كل خير انتظرت حتي يتم مراجعت مشاريعي و الحمد لله تم الموافقه عليها اتاني موعد الانترفيو الصوتي و كان مع الباشمهندس عبدالحميد و احب ان اقول يالها من مقابله مع شخص خلوق ذو خبره ربنا يبارك له و يزيده من علمه انتظرت فقط يوم واحد حتي يتم ابلاغي بالنتيجه و التي كانت بفضل الله بالقبول اتاني مشروع التخرج و كان علي ان اسلمه خلال 15 يوما و يلزم رفعه علي استضافه ليعمل مثل اي موقع الحمد لله قبل المده بكثير تم تسليم المشروع انتظرت عده ايام حتي يتم مراجعه الكود بالكامل و الحمد لله بعد مراجعه الكود كان يوجد ملاحظات تم حلها الحمد لله ثم تواصل معي مدير الاكاديميه الباشمهندس عبداللطيف الله يكرم الباشمهندس و يحقق ليه كل امانيه و يزيده من علمه فقد نصحني بماذا افعل في المستقبل و لكي احصل علي الشهاده و لكي يعطيني باقي الخطوات الان قد انهيت مغامراتي مع Django ايضا هنا في كورس Python و الان في مغامره جديده مع Ruby on rails احب ان اشكر حضراتكم و اشكر هذه الاكاديميه من كل قلبي فانا الان اسعد انسان لان اخيرا قد تحقق حلمي بعد مجهود و تعب دام قرابه السنه
    1 نقطة
  3. السلام عليكم ورحمة الله لدي مشكلة ارجو منك مساعدتي في حلها ان كنت متفرغا انا اتدرب منذ فترة على صناعة متجر الكتروني ارفقته بهذه الرسالة قمت بكتابة كود لقسم المنتجات اسمه product section حيث ان هذا الكود يتكون من عنوان القسم وتحته المنتجات الخاصة به واستعملت مكتبة swiper التي اخبرتني عنها سابقا للتمرير بين المنتجات وهي تعمل بشكل رائع في جميع صفحات الموقع الا صفحة واحدة وهي صفحة product-details.html حيث ان القسم الخاص بالمنتجات المشابهة لا يمكن التمرير به لسبب لم اتمكن من معرفته. بالمقابل القسم الخاص ب استبدال نقاطي يعمل بشكل رائع على الرغم من انهم نفس الكود بالضبط والفرق في العنوان فقط ارفقت لك فديو لتوضيح المشكلة بشكل اكبر ارجو منك مساعدتي ان استطعت ذلك. مقطع فيديو بدون عنوان - تم تصميمه باستخدام Clipchamp.mp4 Fikra_store.zip
    1 نقطة
  4. My project is accepted Now, what I should do?
    1 نقطة
  5. مرحبا، انا طالب هندسة برمجيات وايضا مشترك في دورة جافا سكربت. ودائما ما اسمع كثييير من الناس يقولون انه عندما ينهي الطالب درستة الجامعية فلن يكون مهيئ ل سوق العمل. وان الشهادة الجامعية غير مفيدة. كيف ذلك؟ الا يفترض ان ما نتعلمة من لغات برمجة ودروس هو نفسة الموجود في سوق العمل؟
    1 نقطة
  6. هل ينفع ادخل كلية حاسبات من معهد حاسبات
    1 نقطة
  7. لدي كود التيلويند هذا, انه يقوم بما اريد, لكن اريد ان اسال, هل كون الامر يقوم بما اريد كافي عندما يتعلق الامر بالتصميم؟ <div class="flex flex-wrap gap-3 justify-center mt-16"> @for ($i = 0; $i < 6; $i++) <div class="border border-black"> <div class=" relative bg-slate-100 h-72 w-[450]"> <div class=" relative h-36 bg-black w-[450] "> {{-- /////////////////////////////////////////////////////////////////////////////////////////////////////////// --}} {{-- text --}} <div class="absolute right-20 top-9"> <h1 class=" font-mono text-2xl text-white hover:underline"> True Love </h1> <p class=" relative left-1 text-neutral-400 hover:underline"> Cool Music </p> </div> <div class="absolute right-40 bottom-4 font-semibold"> <h1 class=" font-mono text-lg text-green-500"><i class="fa-solid fa-dollar-sign"></i>12 </h1> </div> <div class=" absolute text-green-500 text-sm/[1px] w-min right-[140] bottom-[29] "> .00 </div> {{-- end of text --}} {{-- //////////////////////////////////////////////////////////////////////////////////////////////////// --}} {{-- the image box --}} <div class=" bg-green-500 w-48 h-48 relative border top-9 left-10 border-black justify-self-center"> <div class=" absolute w-48 h-48 bottom-1 right-1 border border-black border-r-2 border-b-2 hover:border-white"> <img src="https://mir-s3-cdn-cf.behance.net/project_modules/disp/fe529a64193929.5aca8500ba9ab.jpg" alt=""> </div> </div> {{-- end of the image box --}} </div> <button type="button" class=" absolute right-4 bottom-4 cursor-pointer whitespace-nowrap bg-transparent rounded-md border bg-indigo-400 border-black px-4 py-2 text-sm font-medium tracking-wide text-black transition hover:opacity-75 text-center focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-black active:opacity-100 active:outline-offset-0 disabled:opacity-75 disabled:cursor-not-allowed dark:border-white dark:text-white dark:focus-visible:outline-white">Buy</button> <button type="button" class=" absolute right-20 bottom-4 cursor-pointer whitespace-nowrap bg-transparent rounded-md border bg-green-400 border-black px-4 py-2 text-sm font-medium tracking-wide text-black transition hover:opacity-75 text-center focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-black active:opacity-100 active:outline-offset-0 disabled:opacity-75 disabled:cursor-not-allowed dark:border-white dark:text-white dark:focus-visible:outline-white">To the Cart</button> </div> </div> {{-- end of the card --}} @endfor {{-- starting of the card --}} </div> @Mustafa Suleimanبالمناسبة شكرا لك, تعرفت على ال TALL stack بسببك
    1 نقطة
  8. اريد التخصص للباك اند فانا اميل لها جدا, لكن الواقع يقول لا بد من الفرونت اند ان كنت تريد ان تحترف, فوجدت الحل هو TALL stack بما انه يستخدم اثنان من اسهل الاطارات اضافة ل livewire
    1 نقطة
  9. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
    1 نقطة
  10. محمد عاطف17 بارك الله فيك ونفع بك ,اشكرك من اعماق قلبي🫂
    1 نقطة
  11. السلام عليكم لقد بحثت كثيرا و لم اجد الطريقة لعمل مثل هذه الخريطة مثل خريطة البروق في موقع رادار المملكة هذا هو رابط تلك الصفحة https://www.yanbuweather.com/pages/lightning/ ارجوا المساعدة بذلك بشكل مفصل
    1 نقطة
  12. وعليكم السلام ورحمة الله وبركاته . إذا ذهبت إلى صفحة product-details.html و قمت بفتح ال console في المتصفح ستجد أخطاء ظهرت في ملف main.js وستجد خطأ يظهر في سطر 412 والكود الخاص بال swipper الذي يقوم بإنشاءه في سطر رقم 482 ولهذا يتوقف الكود عند سطر 412 ولا يستمر إلى 482 لهذا لا يعمل معك . من المفترض تقسيم ملف main.js إلى عدة ملفات كل ملف خاص بصفحة معينة وملف يحوى جميع الأكواد المشتركة في جميع الصفحات . حيث أنك تقوم بالبحث عن عناصر في الصفحة وتضع حدث عليها أو تقوم بتعديل التنسيق الخاص بها وإذا لم توجد تلك العناصر يحدث خطأ لديك ويمنع تنفيذ باقي الأكواد . يمكنك قبل العمل على أي عنصر التحقق من وجوده أم لا إذا لم ترد فصل الكود إلى عدة ملفات . وحاليا لحل مشكلتك يرجى نقل كود ال swipper في سطر 482 إلى ما قبل سطر 12 ويفضل نقل جميع ال swipper إلى دالة منفصلة و تنفيذها حتي لا تحدث مشاكل . ولقد قمت بإرفاق ملف main.js بعد تعديله . main.js
    1 نقطة
  13. ليش طلع لي خطاء مع ان الكود اشتغل؟
    1 نقطة
  14. المحتويات من اليمين الى اليسار كيف حلها
    1 نقطة
  15. ماهو ناتج تنفيذ التعليمة البرمجية التالية بلغة الاسمبلي: MOV CX ,10 MOV AX , 2 L:INC AX TEST AX,CX LOOPNZ L
    1 نقطة
  16. فالحقيقه ما اعرف كيف ارسل سؤال اسفل الدرس
    1 نقطة
  17. السلام عليكم هي اي الداله next() الموجود في باثيون ؟ اي الفايد من الداله ده
    1 نقطة
  18. اتمام جدا الف شكراا لحضرتك جمعه مباركه
    1 نقطة
  19. و عليكم السلام، الهدف منها هو الحصول على العنصر التالي. مثلًا في حال كنت تستعمل generator. مثال على ذلك: def odd_numbers(start, end): for i in range(start, end): if i % 2 == 1: yield i odd_generator = odd_numbers(0, 100) print(next(odd_generator)) # 1 print(next(odd_generator)) # 3 بشكل عام أي غرض يدعى iterator يمكننا تطبيق هذا عليه. هذا التابع لن تحتاج إلى استعماله في البرامج العادية، بشكل عام من الممكن أن تضطر إلى استعماله في حال كنت تريد كتابة صنف خاص بك يدعم فكرة ال iterator.. و هو شيء متقدم نوعًا ما. تحياتي.
    1 نقطة
  20. السلام عليكم ازي اعمل راس لعمود لملف csv بلغه باثيون ؟ مش بشكل يدوي
    1 نقطة
  21. الف شكرااا لحضرتك جدا جزاك الله خير
    1 نقطة
  22. و عليكم السلام، في حال كانت جميع الأعمدة لا تحوي على رأس header فيمكنك القيام بذلك بسهولة بالشكل التالي: pd.read_csv("path/to/file.csv", names=["Column_1", "Column_2", "Column_3", "Column_4"]) أما في حال كان هناك بعض الأعمدة لا تحوي على رأس و بعضها الآخر يحوي، فهذه مشكلة كبيرة في الملف ذاته، يمكنك حلها عن طريق قراءة الملف و أخذ أسماء الأعمدة كلها، و استبدال الفارغ منها، و لكن ينصح بالقيام بذلك بشكل يدوي، فالمشكلة هي في الملف نفسه و يجب إصلاحها فيه، كما أن اصلاحها فيه أسهل بكثير من كتابة كود للقيام بذلك. تحياتي.
    1 نقطة
  23. ليش اسمه عندي كذا علما انه يعمل بشكل جيد
    1 نقطة
  24. شكرًا، طيب يا بشمهندس محمد ينفع اشتغل لما اخلص دورتين علوم الحاسب والذكاء الاصطناعي بجانب الدراسة ، عشان اتحمل تكاليفي الدراسية ؟ طيب اتعلم c++ منين أفضل مصدر ؟ ، ويا ريت تكون عندي صديق على الفيس.
    1 نقطة
  25. تقدم لنا الواجهات الرسومية أو 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 نقطة
  26. السلام عليكم اريد بعض المساعدة لعمل تاثير معين بداخل صفحة ف قسم works يوجد بعض الصور اريد عند الضغط علي علامة + بداخل الصوره يظهر popout ل model كل صوره لها مودل لاختلاف الصور كيف اقوم بفعهلها باستخدام js قمت بعمل كود لها وتم الامر ولكنه طويل غير اني اعامل كل صوره علي حدي ف كود ال js اعتقد انة يوجد طريقه ابسط بال js 2- ال counter لا يعمل علي الرغم من انه كان يعمل عند انشاءة ولم اعدل عليه ابدا قمت بارفاق صورة portfolio.zip
    1 نقطة
  27. بعد أن تعلّمنا في الدّرس السّابق كيفيّة التعامل مع كل من الصفوف، المجموعات والقواميس في لغة بايثون ، سنكمل مشوار تعلّم هذه اللغة الجميلة. سنتعلّم في هذا الدّرس كيفيّة التّعامل مع التّعابير الشّرطية، و كيفيّة استعمال الجمل الشّرطية في برامجنا وكيفّية القيّام بإزاحة مناسبة عند التّعامل مع أجزاء متعدّدة من الشّيفرة، وسنكمل هذا الدّرس بمثال تطبيقي يتجلى في برنامج تسجيل حساب والولوج إليه. مع التذكير بأنّ جميع الشّيفرات التّي تبدأ بعلامة <<< يجب أن تنفّذ على مفسر بايثون. التعابير الشرطية Conditional Expressions توفّر لنا لغة بايثون عدّة مُعاملات لمُقارنة القيّم، ونتيجة المُقارنة تكون قيمة منطقيّة Boolean إمّا True أو False. >>> 2 < 3 False >>> 2 > 3 True إليك قائمة بالمُعاملات المُتوفّرة في لغة بايثون. == يُساوي =! لا يُساوي > أصغر من < أكبر من => أصغر من أو تُساوي =< أكبر من أو تُساوي ويُمكن استعمال هذه المُعاملات أكثر من مرّة في السّطر الواحد: >>> x = 5 >>> 2 < x < 10 True >>> 2 < 3 < 4 < 5 < 6 True وتعمل المعاملات على السّلاسل النّصية كذلك (التّرتيب يكون بشكل معجمي، أي حسب ترتيب الكلمات في المُعجم). >>> "python" > "perl" True >>> "python" > "java" True يُمكن الجمع بين القيّم المنطقيّة بمعاملات منطقيّة: a and b: صحيح فقط إذا كان كل من a و b يحملان القيمة True. a or b: صحيح إذا كانت إحدى القيمتين صحيحة. not a: صحيح فقط إذا كان a يحمل القيمة False. وإليك مثالا على المُعاملات المنطقيّة: >>> True and True True >>> True and False False >>> 2 < 3 and 5 < 4 False >>> 2 < 3 or 5 < 4 True الجملة الشرطية If تُستعمل الجملة الشّرطيّة If (إذا كان) لتنفيذ جزء من الشّيفرة إذا كان الشّرط مُحقّقا: >>> if x % 2 == 0: ... print 'even' ... even >>> في المثال أعلاه طُبعَت الكلمة even لأنّ باقي قسمة 42 على 2 يُساوي صفرا (x % 2 == 0)، وبالتّالي فقد تحقّق الشّرط، فلو أنّ الشّرط لم يتحقّق لما أرجع المُفسّر أي نتيجة. يُمكن استخدام If كشرط لتنفيذ جزء منفصل من الشيفرة بالإزاحة (انظر فصل الإزاحة والمساحات أسفله)، ويكون هذا الأمر مُفيدا عندما يحتوي برنامجك على الكثير من الجمل. لاحظ بأنّ الجمل التّابعة للسّطر if x % 2 == 0 مُزاحةٌ بأربع مسافات بيضاء. الجملة else يُمكن أن تزيد على جملة If بند else وترجمته (وإلّا / إذا لم يكن ذلك صحيحًا)، والتي تنفّذ الشيفرة التّي من بعدها إذا كان الشّرط الأول خاطئا. >>> x = 3 >>> if x % 2 == 0: ... print 'even' ... else: ... print 'odd' ... odd >>> في المثال أعلاه، كان الشّرط الأول خاطئا لأن باقي قسمة 3 على 2 لا يُساوي صفرًا، ولذلك انتقل البرنامج لتنفيذ الشّيفرة بعد جملة else وقام بطباعة كلمة odd. الجملة elif يُمكن كذلك أن تزيد جملة elif وهي اختصار لـ else if والتّي تعني "إذا لم يتحقّق الشرط فانظر الشّرط التّالي": >>> x = 42 >>> if x < 10: ... print 'one digit number' ... elif x < 100: ... print 'two digit number' ... else: ... print 'big number' ... two digit number >>> في المثال أعلاه، هناك شرطان مختلفان، أولا عند تحقّق شرط كون قيمة المتغيّر x أصغر من العدد 10 فسيطبع البرنامج الجملة التي تقول بأنّ قيمة المتغير x عبارة عن رقم واحد، إذا لم يتحقّق الشّرط السّابق فسينتقل البرنامج إلى الشّرط الذي يليه وهو ما يتبع الجملة elif أي إذا كانت قيمة المتغيّر x أصغر من 100 فسيطبع البرنامج الجملة التي تفيد بأنّ قيمة المتغير x عبارة عن رقمين والجملة else تنفَّذُ إذا لم يتحقّق أي شرط وتفيد بأنّ قيمة المتغيّر x عبارة عن عدد كبير (لأنّه يتكون من 3 أرقام فأكثر). المساحة والمسافات والإزاحة المساحات التّي تسبق الشّيفرات في بايثون مُهمّة جدّا لترتيب شيفرة البرنامج ولتسهيل قراءته، كما أنّها تكون ضروريّة في بايثون، فإن لم تتّبع قوانين الإزاحة فلن يعمل البرنامج، وتُستعمل هذه الطّريقة لفصل الشّيفرات التّابعة لجزء معيّن من البرنامج، والإزاحة تكون بكتابة الشّيفرة بعد عدد معيّن من المسافات، ومن المُفضّل أن تكون أربع مسافات بيضاء، انظر المثال: هل الشّرط محقّق؟ .... نعم الشّرط محقّق .... لا الشرط غير محقق انتهى البرنامج في المثال أعلاه، الجملتان "نعم الشّرط محقّق" و "لا الشّرط غير محقّق" تابعتان للجملة "هل الشّرط محقّق؟" أمّا الجملة "انتهى البرنامج" فتابعة للبرنامج عامّة. وقد اعتمدت على النّقاط لتوضيح فكرة الإزاحة فقط وعليك أن تستبدل النّقاط بالمسافات في ملفّات بايثون. يُمكن كذلك أن تكون الشّيفرة تابعة لجملة ما، والتّي بدورها تابعة لجملة أخرى، لتتّضحك الأمور أكثر، فكّر في شجرة عائلة تتكوّن من الآباء والأولاد: جدّ ....أب 1 ........ابن 1.1 ........ابن 1.2 ....أب 2 ........ابن 2.1 ........ابن 2.2 للجد ابنان، ولكل ابن ابنان، نستنتج من هذا أنّ كلّ ابن تابع لأبيه بإزاحة أربع مسافات، أمّا الحفيد فتابع للجدّ بثماني مسافات. وإلى الآن تعرّفنا على موضع واحد تكون فيه الإزاحة إجباريّة وهي الجمل الشّرطيّة، فمثلا البرنامج التّالي: x = 42 if x % 2 == 0: print 'even' print 'Hello World' في المثال أعلاه جميع السّطور المزاحة بأربع مسافات (أي الجملة التي تطبع كلمة even) تُنفّذ عند تحقّق الشّرط فقط، أي أنّها جزء مرتبط بالشّرط في البرنامج، أمّا الشيفرة التي لم تُسبق بمسافات فتنفّذ بشكل طبيعي وتعتبر ضمن البرنامج عامّة. أمّا إذا أردنا أن نطبع جملة بعد التّحقّق من شرطين فسيكون البرنامج كالتّالي: الشّرط الأول محقّق، إذن انتقل إلى الشّرط الثّاني. الشّرط الأول غير محقّق، إذن لا تنتقل إلى الشّرط الثّاني. إليك تطبيقا للأمر في لغة بايثون: # البرنامج x = 42 if x % 2 == 0: print 'even' if x / 2 == 21: print '42/2 = 21 Is true' print 'Hello World' # المُخرج even 42/2 = 21 Is true Hello World في المثال أعلاه، قمنا بالتّحقّق من أنّ باقي قسمة العدد 42/2 يساوي 0، وبما أنّ الشّرط مُحقّق فقد طبعت الكلمة even وانتقل المُفسّر إلى الشّرط التّالي وهو التّحقّق من أن 42/2 يُساوي 21 وبما أنّه بدوره شرط مُحقّق أيضا فقد قام البرنامج طباعة الجملة 42/2 = 21 Is true وبعدها قام بطباعة الجملة Hello World لأنّها غير مُرتبطة بأي شرط. وبطبيعة الحال إذا لم يكن الشّرط الأول محقّقا، فلن ينتقل المُفسّر للشّرط التّالي ولن يقوم بأي شيء حتّى ولو كان الشّرط مُحقّقا. الحصول على قيم من مستخدم البرنامج يُمكن أن تطلب من المُستخدم أن يُدخل قيمة معيّنة، ثمّ تسند هذه القيمة إلى مُتغيّر في البرنامج، فمثلا لنقل بأنّك ترغب بالتّرحيب بالمُستخدم، أولا يجب أن تطلب منه أن يُدخل اسمه، بعدها تقوم بطباعة الجملة "Hello, Person"، بحيث تستبدل Person بالقيمة التّي أدخلها المُستخدم، انظر المثال: >>> person = raw_input('Enter your name: ') >>> 'Hello ', person إذا نفّذت البرنامج فسيكون المُخرج كالتّالي: Enter your name: وبعد إدخال اسمي والضّغط على مفتاح ENTER، فإنّ المُخرج سيكون كالتّالي: Hello Abdelhadi ما يحدث هو أن البرنامج يأخذ القيمة المُدخلة ويُسندها للمُتغيّر person وبعدها تستطيع أنت أن تطبع المُتغيّر للمُستخدم. تطبيق لنطبّق ما تعلّمناه ولننشئ برنامجا بسيطًا لجدولة مُقابلات العمل: سنطلب من المُستخدم توفير المعلومات التّاليّة: اسم المُتقدّم اسم المسؤول عن المُقابلة وقتُ المُقابلة وبعدها سنطبع جملة تحتوي على جميع المعلومات التّي قدّمها المُستخدم، افتح ملفّا باسم interview.py واكتب فيه التّالي: applicant = raw_input('Enter the applicant name: ') interviewer = raw_input('Enter the interviewer name: ') time = raw_input('Enter the appointment time: ') print interviewer, "will interview", applicant, "at", time في المثال أعلاه نطلب أولا من مُستخدم البرنامج أن يُدخل اسم المُتقدّم ثمّ تُسندُ القيمة إلى المتغيّر applicant، بعد ذلك يُطلب اسم المسؤول عن المُقابلة وتُسند قيمته إلى المُتغيّر interviewer وبعد ذلك نحصل على وقتُ المُقابلة من المُستخدم ونُسند القيمة إلى المُتغيّر time، وفي النّهاية نطبع الجملة الجامعة لكل المعلومات وتقديمها بشكل أسهل. جرّب الأمر بنفسك، وأسند القيّم التّي تريد، وانظر إلى النّتيجة، العب بالشّيفرة، أضف مميّزات أخرى كالتّحقّق من أن عُمر المُتقدّم أكبر من 18 عاما مثلا، وتذكّر بأنّ التعلّم بالتّطبيق أفضل من أي طريقة أخرى. تطبيق عملي: إنشاء برنامج تسجيل دخول بسيط الآن حان الوقت لنطبّق ما تعلّمناه، ولنقم بكتابة برنامج تسجيل دخول بسيط، ومبدأه كالتّالي: يُرحب البرنامج بالمُستخدم. يطلبُ منه معلومات التّسجيل. يفيد البرنامج المُستخدم بأنّ التّسجيل قد تم بنجاح أو بعكس ذلك. يطلب البرنامج معلومات الدّخول. يتحقّق البرنامج من أنّ المعلومات التّي أدخلها صحيحة. إذا كانت صحيحة، يطبع البرنامج رسالة نجاح. إذا كانت خاطئة، يطبع البرنامج رسالة فشل. المُتغيّرات التّي سنعتمد عليها: username: اسم المُستخدم password: كلمة المرور password_verification: تأكيد كلمة المرور (فقط للتّأكد من أنّ المُستخدم أدخل نفس كلمة المرور وأنّه يتذكّرها دون مشاكل). أولا جملة التّرحيب: print 'Hello User, this is a basic sign up/login Program' ثانيّا لنطلب من المُستخدم توفير قيّم المتغيرّات (username: اسم المُستخدم، password: كلمة المرور، password_verification: تأكيد كلمة المرور): username = raw_input('Enter your username please: ') password = raw_input('Enter the your password please: ') password_verification = raw_input('Verify password: ') الآن لنتحقق من أنّ كلمة المرور التّي أدخلها المستخدم في البداية هي نفسها التّي أدخلها عند تأكيد كلمة المرور وذلك بمقارنة المتغيّرين password و password_verification فإذا كانا يحملان نفس القيمة فهذا يعني بأنّ التّسجيل ناجح وسنطبع للمُستخدم جملة تفيد بأنّ عملية التّسجيل قد نجحت. أما إذا لم تكن القيم متساوية سنطبع جملة تفيد المستخدم بأنّ كلمة المرور وتأكيدها لا يتوافقان، ويمكن القيام بالأمر بالأسطر الآتية: if password == password_verification: print 'You have been successfully signed up!' else: print 'The password and the password verification don't match! Please try again' لقد انتهينا الآن من برمجة نظام التّسجيل، ويجب علينا الانتقال إلى الخطوة التّالية وهي مرحلة تسجيل الدّخول. بعد طباعة الجملة التّي تفيد بأنّ المستخدم قام بالتّسجيل بنجاح (انظر الشّيفرة أعلاه) سنطلب منه معلومات الولوج وذلك بإدخال اسم مُستخدمه وكلمة المرور، سنعيّن هذه القيم المدخلة حديثا إلى متغيّرين جديدين، وذلك لمقارنتهما مع قيم المتغيّرين القديمين، إذا كانت القيم توافق ما أدخله قبل قليل فسنطبع جملة تفيد بأنّ عمليّة الولوج قد نجحت، إذا لم يكن الأمر كذلك سنطبع جملة تفيد المستخدم بأنّ القيم التّي أدخلها خاطئة ثمّ يتوقّف البرنامج. الآن، لنطوّر الشّيفرة أعلاه وندخل عليها التّعديلات المطلوبة لإجراء عمليّة الولوج: if password == password_verification: print 'You have Successfully Signed up! \n' username_sign_in = raw_input('Enter your username please: ') password_sign_in = raw_input('Enter your password please: ') if username_sign_in == username and password_sign_in == password: print 'You have Successfully Signed in!' else: print 'username or password do not match! Please try again!' else: print 'The password and the password verification do not match! Please try again' لاحظ استخدام المعامل المنطقي and عند التّحقّق من أنّ اسم المستخدم وكلمة المرور المدخلتان (المخزّنة في المتغيّرين username_sign_in و password_sign_in) توافقان ما تم إدخاله من قبل. العامل and يحرص على أنّ كلا الشّرطين محققان. وبهذا نكون قد انتهينا من البرمجية الصغيرة والبسيطة، وهذه هي الشّيفرة الكاملة: print 'Hello User, this is a basic sign up/login Program' username = raw_input('Enter your username please: ') password = raw_input('Enter the your password please: ') password_verification = raw_input('Verify password: ') if password == password_verification: print 'You have Successfully Signed up! \n' username_sign_in = raw_input('Enter your username please: ') password_sign_in = raw_input('Enter your password please: ') if username_sign_in == username and password_sign_in == password: print 'You have Successfully Signed in!' else: print 'username or password do not match! Please try again!' else: print 'The password and the password verification do not match! Please try again' تمارين تمرين 1 ما مُخرجات البرنامج التّالي: print 2 < 3 and 3 > 1 print 2 < 3 or 3 > 1 print 2 < 3 or not 3 > 1 print 2 < 3 and not 3 > 1 تمرين 2 ما مُخرجات البرنامج التّالي: x = 4 y = 5 p = x < y or x < z print p تمرين 3 ما مُخرجات البرنامج التّالي: x = 4 y = 5 p = x < y or x < z print p تمرين 4 ماذا سيحدث بعد تنفيذ الشّيفرة التّالية، هل ستحدث أي أخطاء؟ علّل جوابك. x = 2 if x == 2: print x else: print y تمرين 5 ماذا سيحدث بعد تنفيذ الشّيفرة التّالية، هل ستحدث أي أخطاء؟ علّل جوابك. x = 2 if x == 2: print x else: x + تمرين 6 هل الإزاحة في البرنامج التّالي صحيحة؟ إذا لم يكن الأمر كذلك، فأصلح الخطأ. x = 2 if x == 2: print x if x+1 == 3: print 'x+1 = 3' else: print x + 2 مصادر درس Input and Output للكاتب Dr. Andrew N. Harrington. كتاب Python Practice Book لكاتبه Anand Chitipothu.
    1 نقطة
×
×
  • أضف...