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

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

الأعضاء
  • المساهمات

    308
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    27

أجوبة بواسطة محمد أحمد العيل

  1. يُتيح كل من الأمرين تنفيذ أوامر بصلاحيات عليا مع فروق بين الاثنين.

    عند كتابة sudo أمام أمر، مثلا
     

    sudo command


     فإنك تطلب تنفيذ الأمر command بصلاحيات عليا يحددها ملف sudoers. يستخدم مديرو الأنظمة ملف sudoers لإعطاء مستخدم أو مجموعة مستخدمين صلاحيات إدارية غير متاحة للحسابات العادية. عند استخدام أمر sudo تُطلَب كلمة مرور المستخدم الذي نفذ الأمر.

    بالنسبة لأمر su فإنه يمكن من الانتقال إلى مستخدم آخر (فتح جلسة Shell جديدة داخل الجلسة الحالية):

    su user

    ستُطلب منك كلمة مرور المستخدم user. يمكن أيضا تنفيذ أمر بصلاحيات المستخدم user دون فتح جلسة Shell، مثلا:
     

    su user -c command



    في المثال أعلاه ننفذ الأمر command بصلاحيات المستخدم user.

    ملحوظة: عند تنفيذ أمر su دون خيارات تنتقل إلى المستخدم الجذر.



     

  2. نفذ الأمر التالي (على فرض أنك توجد في المجلد الذي تريد عرض مساره):

    pwd

    يعرِض الأمر مسار مجلد العمل، أي المسار الذي تتواجد فيه عند تنفيذه.

    إن لم تكن تعرف كيف تنتقل إلى المجلد فيتوجب عليك حينها البحث عنه باستخدام أحد الأمرين locate أو find .

  3. تمكن معرفة مواصفات وحدة المعالجة المركزية (عدد الأنوية، المعالجات في كل نواة، المُصنِّع، ... إلخ) عن طريق تنفيذ الأمر:

    cat /proc/cpuinfo

    بطريقة مشابهة تمكن معرفة خصائص الذاكرة العشواشية:

    cat /proc/meminfo

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

  4. نظام أسماء النطاقات المعروف اختصارًا ب"DNS" هو نظام التشبيك المُستخدَم لتحويل أسماء سهلة التذكّر إلى عناوين فريدة.

    يجري التخاطب بين الشبكات عبر عناوين IP والتي هي مجموعة من الأرقام تخضع لقيود معروفة، مثلا 145.45.67.89 عنوان IP لجهاز موجود على شبكة ما. دور نظام أسماء النطاقات هو توفير آلية تجعل من الممكن استخدام أسماء يسهل على الإنسان تذكرها.

    لولا وجود DNS لوجب عليك تذكر العنوان 52.16.48.7 بدلا من academy.hsoub.com.

    راجع مقال مقدّمة إلى مُصطَلحات وعناصر ومفاهيم نظام أسماء النطاقات لتفصيل أكثر عن آلية عمل النظام.

    • أعجبني 1
  5. استخدم الأمر التّالي:
     

    sudo update-alternatives --config editor



    ستظهر قائمة ببرامج تحرير نصوص للاختيّار بينها، أدخل رقم المحرّر الّذي تُريد.

    إن لم يظهر المحرّر في القائمة استخدم الأمر التّالي لإضافته إليها (في المثال إضافة محرّر Geany، يجب أن يكون مثبَّتًا مسبقًا):
     

    sudo update-alternatives --install /usr/bin/editor editor /usr/bin/geany 10



    أبدِل usr/bin/geany/ بمسار المحرّر الّذي تُريده.

  6. يجب التنبيه أوّلًا أنّ أمر adduser يوجد في التّوزيعات الدّبيانيّة فقط. في حال كتابة سكربتات عابرة للتّوزيعات يجب استخدام useradd بدلًا منه.

    يوفّر أمر adduser سهولة أكبر من useradd فهو يجمع وظائف أوامر عدّة معًا. مثلًا الأمر التّالي:
     

    adduser username

    يؤدّي الوظائف التّاليّة:

    • إنشاء اسم مستخدم باسم username
    • إنشاء مجلَّد شخصيّ للمستخدِم
    • إنشاء مجموعة بنفس الاسم وإضافة المستخدم إليها.
    • طلب كلمة سرّ من المستخدم
    • طلب معلومات إضافيّة اختيّاريّة من المستخدم


    يمكن لأمر useradd تأديّة الكثير من هذه المهامّ، لكنّه يحتاج لخيّارات إضافيّة. بعض المهامّ السّابقة يحتاج تنفيذ أوامر أخرى:

    للحصول على نفس الوظائف السّابقة يجب تنفيذ الأوامر التّاليّة:
     

    useradd -m -U username
    passwd username
    chfn username



    إضافةً لذلك يتأكّد الأمر adduser من أنّ معرّفات المستخدمين تتبع سيّاسة دبيان بهذا الخصوص.

     

    • أعجبني 1
  7. ملحوظة: يوجد عنوان MAC لكلّ واجهة في الجهاز. يُمكن أن تكون في الجهاز الواحد أكثر من واجهة، وبالتّالي أكثر من عنوان MAC.

    لمعرفة عنوان MAC واجهة معيَّنة يُمكن استخدام الأمر التّاليّ:
     

    cat /sys/class/net/NIC/address



    حيثُ NIC اسم واجهة، مثلا لواجهة eth0 يكون الأمر:
     

    cat /sys/class/net/eth0/address



    نفّذ الأمر التّالي للحصول على لائحة بالواجهات المتوفّرة:

     

    ls /sys/class/net

     

  8. هذا تحذير سببه عدم ذكر قيمة لتعليمة ServerName في إعدادات Apache. للتخلّص من رسالة الخطأ نفّذ الأمر التّالي الّذي يُنشئ ملفًّا للإعداد ويُضيف إليه سطرًا يحوي قيمة لتعليمة ServerName:
     

    echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf



    اعتمد ملفّ الإعداد:
     

    sudo a2enconf fqdn



    ثمّ أعد تحميل Apache لأخذ التّغييرات في الحسبان:

     

    sudo service apache2 reload

     

    • أعجبني 1
  9. تدلّ كتابة علامة التّعجّب !! مرّتين على طلب إعادة تنفيذ آخر أمر. جرّب التّالي مثلًا:
     

    echo "Abderrzak"
    !!



    سيُستعاض في المثال أعلاه عن !! بالأمر echo المنفَّذ قبلها. بالعودة إلى الأمر :
     

    sudo apt-get install !!



    فربّما يكون المستخدم حاول تنفيذ أمر مّا ولكنّه وجد أنّه غير مثبَّت على النّظام فثبّته مع الاختصار؛ على النّحو التّالي مثلًا:
     

    program



    بما أنّ البرنامج غير مثبَّت تظهر رسالة بالهيئة التّاليّة:
     

    The program 'program' is currently not installed. You can install it by typing:
    sudo apt-get install program


    فيثبّته عن طريق الأمر:

     

    sudo apt-get install !!

     

    • أعجبني 2
  10. لتثبيت حزمة بصيغة deb استخدم الأمر التالي:
     

    sudo dpkg -i package.deb



    حيثُ package.deb اسم الحزمة. قد تحتاج الحزمة لاعتماديّات (حزم أخرى يجب تثبيتها قبل إمكانيّة تثبيت هذه الحزمة) في هذه الحالة ستظهر رسالة خطأ بالأمر، يُمكن تنفيذ الأمر التّالي لتنزيل الاعتماديّات ثمّ تثبيتها:
     

    sudo apt-get install -f

    يُمكن أن تظهر رسائل خطأ بعد تنفيذ الأمر أعلاه، في هذه الحالة تجب عليك معرفة السّبب وإصلاحُه قبل تثبيت البرنامج.

    • أعجبني 1
  11. أوّلًا الخادمان وسيطان Proxy، أيّ أنّ الخادوم في كلتا الحالتيْن يؤدّي وظيفة لحاسوب آخر.

    يوجد نوعان من الخواديم الوسيطة:

    • خادوم وسيط لإعادة التّوجيه Forwarding proxy server: ويُطلَق عليه عادةً خاجوم وسيط دون ذكر إعادة التّوجيه. من جهة يوجد العميل (A) وفي الجهة الأخرى يوجد الخادوم (C) الّذي يُريد العميل الوصول إليه، والخادوم الوسيط بينهما (B). يتّصل A ب B لكي يصِل إلى C. في حالة وسيط لإعادة التّوجيه فإنّ العميل A يجب أن يُعدَّ للاتّصال بالخادوم الوسيط B ويطلُب منه الاتّصال ب C وإرسال نتيجة الطّلب إليه. يُستخدَم هذا النّوع من الوسطاء كثيرًا في المؤسّسات لمنع الموظّفين من زيارة مواقع محدّدة. كما يُستخدَم لتجاوز الحظر أيضًا (موقع ممنوع في الدّولة X، تستخدم خادومًا وسيطًا في دولة Y لا تمنع هذا الموقع لتجاوز الحظر).
    • خادوم وسيط عكسيّ Reverse proxy server: يوجد لدينا نفس المخطَّط في الحالة السّابقة: من جهة يوجد العميل (A) وفي الجهة الأخرى يوجد الخادوم (C) الّذي يُريد العميل الوصول إليه، والخادوم الوسيط بينهما (B). لكن الفرق هنا أنّ العميل A لا يحسّ بوجود C، بالنّسبة له يوجد فقط B (الخادوم الوسيط). يُرسل العميل طلباته إلى الخادوم الوسيط (دون أن يكون على علم بأنّ هذا الخادوم وسيط) الّذي يُحيلها إلى الخادوم C؛ ثمّ يُعيد الخادوم الوسيط إرسال الإجابة على الطّلب إلى العميل بعد تلقّيها من الخادوم C. تُستخدَم الخواديم الوسيطة العكسيّة للوصول إلى خواديم موجودة خلف جدار ناريّ أو لتوزيع الحمل بين خواديم عديدة.
    • أعجبني 3
  12. تُقسَّم أوامر Shell إلى نوعين:

    • أوامر داخليّة (مضمّنة): توجد هذه الأوامر(أو الدّوالّ) ضمن Shell نفسه الّذي يُنفّذها مياشرةً.
    • أوامر خارجيّة: وهي برامج (سكربتات) توجد خارج Shell. عند استدعاء أمر من هذه الأوامر فإنّ Shell يبحث عن البرنامج ثمّ ينفّذه. يُحدّد متغيّرالبيئة PATH المسارات الّتي يبحث فيها Shell عن الأوامر الخارجيّة.

    أمر cd مثال على الأوامر الدّاخليّة وecho مثال على الأوامر الخارجيّة.

    لا توجد فقرات بالنّسبة للأوامر الدّاخليّة ضمن الدّليل (Manual) وعليه تظهر رسالة الخطأ المذكورة عند تنفيذ أمر:

    man cd

    يُمكن الحصول على المساعدة في استعمال cd عبر اﻷمر:

    help cd

     

  13. هذه إشارة لإعادة توجيه التّدفّق. ما يلي اقتباس من درس مقدّمة إلى إعادة توجيه الإدخال/الإخراج :

    يتم توزيع الإدخال والإخراج في بيئة لينكس عبر ثلاث تدفّقات (streams) أساسية:

    • إدخال معياري (stdin).
    • إخراج معياري (stdout).
    • خطأ معياري (stderr).

    هذه التدفّقات أيضًا مرقّمة وفق التالي:

    • (stdin (0.
    • (stdout (1.
    • (stderr (2.

    بالعودة إلى السّؤال، تًستخدَم الإشارة التّالية:

    >&

    لإعادة توجيه تدفّق إلى آخر. في الحالة التّاليّة توجّه الإخراج المعياريّ stdout إلى الخطأ المعياري stderr:

    1>&2

    أو العكس (الخطأ المعياريّ إلى الإخراج المعياريّ)

    2>&1

     

    راجع الدّرس المذكور أعلاه لمعلومات أكثر عن وحدات الإدخال والإخراج.

    • أعجبني 1
  14. تحدّث كلّ من upgrade وdist-upgrade الحزم انطلاقًا من المصادر الموجودة في الملفّ

     /etc/apt/sources.list

    يمكن الفرق بين الاثنين أنّ عمل upgrade يقتصر على إصدارات جديدة من الحزم المثبَّتة، أيّ أنّه لن يُضيف حزما غير موجودة. أمّا dist-upgrade فيُمكن أن يُضيف أو يحذف حزمًا جديدة. فلنفرض أنّ الإصدار الجديد من برنامج مثبَّت يتطلّب اعتماديّات (حزم) جديدة؛ في هذه الحالة لن يؤدّي تنفيذ أمر

    sudo apt-get upgrade

     إلى تثبيت الإصدار الجديد من البرنامج لأنّ ذلك يستدعي إضافة حزم جديدة؛ أمّا أمر

    sudo apt-get dist-upgrade

    فسيُثبّت الإصدار الجديد واعتماديّاته.

    ملحوظة: من الأفضل قبل تثبيت الحزم عبر أحد الأمرين السّابقين، تحديثُ لائحة الحزم وعناوين مستودعاتها عبر الأمر:

    sudo apt-get update

     

    • أعجبني 1
  15. توجد طريقة سهلة، استخدم الأمر:
     

    mysql -u root -e 'use db_test'

    إذا كانت قاعدة البيانات موجدة فلن يظهر أي خطأ، إن لم تكن موجودة فستحصُل أخطاء. انطلاقًا من هذه الملاحظة يُمكنك اختبار رمز العودة Return code إذا كان 0 فهذا يعني ألّا أخطاء؛ أو على النّحو التّالي مثلًا:

     

    if ! mysql -u root -e 'use db_test'; then
      ## إن لم تكن قاعدة البيانات موجودة فسيُنفَّذ هذا الجزء من البرنامج
    fi

     

    • أعجبني 1
  16. يمرّ الطّلب بعدّة مراحل:

    - ترجمة اسم النّطاق إلى عنوان IP

    - يُرسل العميل (المتصفّح مثلا) طلبًا إلى عنوان IP الخادوم الّذي يوجد عليه الموقع.

    - يستخدم خادوم ويب Apache مستضيفات افتراضيّة، كلّ مستضيف افتراضيّ يُمكن أن يكون موقعا. في طلب HTTP يوجد ما يُعرف بالتّرويسات Headers والّتي تتضمّن معلومات عن الطّلب، منها المستضيف Host (اسم النّطاق مثلا) ومعرّف المورد URI (الصّفحة المطلوبة) وغيرها. يستخدِم خادوم الويب هذه المعلومات لمعرفة الموقع المطلوب ثمّ يمرّر الطّلب إلى المستضيف الافتراضيّ الّذي يتولّى الموقع. توجد آليّة مشابهة على خادوم ويب Nginx.

    راجع المقالين التّاليين:

    كيفية ضبط المستضيفات الافتراضية في خادوم وب Apache على أوبنتو 14.04
    فهم آلية عمل خوارزميّة الاختيار في كُتل Server لإعدادات خادوم Nginx

    والسّؤال التّالي:

    استضافة عدة نطاقات بنفس IP على Nginx

  17. نعم يُمكن ذلك عبر ضبط إعدادات كتلة Server. المثال التّالي يُقدّم خطوطًا عامّة لهذا الإعداد:

    server {
        listen      80;
        server_name www.domain1.com;
        root /var/www/domain1;
    }
    
    server {
        listen       80;
        server_name www.domain2.com;
        root /var/www/domain2;
    }


    توجد ملفّات الموقع www.domain1.com في المجلّد var/www/domain1/، أمّا الموقع www.domain2.com فتوجد ملفّاته في المجلّد var/www/domain2/. عند طلب الموقع www.domain.com فإنّ Nginx يختار كتلة Server الأولى لتتولّى التّعامل مع الطّلب، بالنّسبة لwww.domain2.com فإنّ الاختيّار يقع على الكتلة الثّانيّة. للمزيد راجع هذا المقال

    • أعجبني 1
  18. توجد ثلاث حالات للمتغيّرات في Bash:

    - متغيّر غير معرَّف (لم تُعطَ له قيمة)
    - متغيّر معرَّف وقيمته سلسلة محارف خاويّة (طولها يُساوي صفرًا)
    - متغيّر معرَّف وقيمته سلسلة محارف غير خاويّة (طولها يُساوي واحدًا أو أكثر).

    إذا كنت لا تهتمّ بالتفريق بين ما إذا كان المتغيّر غير معرَّف وما إذا كان فارغًا يُمكن استخدام الصّيغة (الاختبار صحيح في الحالتين الأولييْن):

    if [ -z "$var" ]

    أمّا إذا كنت تهتم بالتّفريق بين الاثنين فاستخدم الاختبار التّالي لمعرفة هل المتغيّر معرَّف (الاختبار صحيح إذا كان المتغير غير معرّف):
     

    if [ -z ${var+x} ]

    الاختبار التّالي صحيح إذا كان المتغيّر معرّفًا وقيمته فارغة (لاحظ الفرق بين الاثنين، علامة - بدلا من +):

    if [ -z ${var-x} ]

    وبالنّسبة للحالة الأخرى (معرَّف وقيمته سلسلة محارف غير فارغة):
     

    if [ -n "$var" ]

    سكربت قصير لتجربة هذه الحالات الأربع على التّوالي:
     

    #!/bin/bash
    VAR="VARIABLE"
    echo "$VAR"
    if [ -z "${VAR}" ]; then
        echo "VAR is unset or set to the empty string"
    fi
    if [ -z "${VAR+set}" ]; then
        echo "VAR is unset"
    fi
    if [ -z "${VAR-set}" ]; then
        echo "VAR is set to the empty string"
    fi
    if [ -n "$VAR" ]; then
       echo "VAR is set to a non emty string"
    fi



    جرّب قيّمًا عدّة للمتغيّر VAR (أعطه قيمة فارغة مرة، واحذفه مرة وأعطه قيمة غير فارغة مرة).
     

    • أعجبني 1
  19. على العموم ليست لدى العمليّة Process بحدّ ذاتها صلاحيّات ولكنّها تعمل بصلاحيّات المستخدم الّذي يُشغّلها.

    إذا أرادت العمليّة قراءة أو تغيير ملفّ فإنّ نظام التّشغيل ينظُر في صلاحيّات المستخدِم الّذي نفّذ العمليّة ثمّ يقرّر هل يسمح لها بذلك أم لا.

    تشغيل العمليّات بصلاحيّات وصول عاليّة يعني تشغيلها بمستخدم لديه صلاحيّات عاليّة (المستخدم الجذر Root مثلا). بالنسبة للأخطار فهي كثيرة، ويكفي أن أذكر بعض الأمثلة:

    - افترض أنّه في أحد البرامج توجد ثغرة تحذف الملفّات الّتي يُتاح له الوصول إليها (في عالم البرمجة لا يوجد برنامج خال من الثّغرات 100%، هذه من المسلّمات): إذا كان يعمل بصلاحيّات غير محدودة فستُحذَف جميع ملفّاتك.

    - استخدم أحدهم ثغرة للوصول إلى خادوم الويب، إذا كان خادوم الويب يعمل بصلاحيّات عاليّة فسيُمكن للمتسلّل الدّخول إلى كامل النّظام بدلا من حصر الخسائر في خادوم الويب.

  20. توجد خيّارات عدّة للتّعامل مع سجلّ الأوامر في الطّرفيّة:

    - لتجاهل أمر واحد وعدم حفظه في سجلّ الأوامر يُمكن أن تضبُط ملفّ bashrc. بحيث لا يحفظ الأوامر الّتي تبدأ بمسافة:
     

    nano ~/.bashrc
    export HISTCONTROL='ignoreboth:erasedups'


    ثمّ الخروج من الطّرفيّة وفتحها من جديد لاعتماد التّغييرات. كلّ ما عليك فعله لكي لا يُحفظ الأمر في سجلّ الأوامر هو إضافة مسافة أمامه.

    - لتجاهل أوامر جلسة Session كاملة، نفّذ الأمر التّالي في الطّرفيّة:
     

    export HISTSIZE=0


    - لتجاهل أوامر معيّنة يُمكن تنفيذ الأمر التّالي ليسري مفعوله على الجلسة الحاليّة فقط أو إضافته إلى ملفّ bashrc. وإعادة تشغيل الطّرفيّة ليكون المفعول دائمًا:
     

    export HISTIGNORE="ls:passwd: "


    في المثال لن تُحفظ أوامر ls وpasswd في سجلّ الأوامر.

  21. ما تريده يتطلّب البحث عن المجلّدات الفارغة، ولا أفضل من find لهذه المهمّة:

    find -depth -type d -empty -exec rmdir {} \;


    يبحث الأمر عن المجلّدات (type d-) الفارغة (empty-) ثمّ يحذفها (أمر rmdir يُستخدم لحذف المجلّدات الخاويّة فقط).

    هناك خيّار مهمّ آخر في الأمر أعلاه وهو خيّار depth-: يطلب هذا الخيّار معالجة محتوى المجلّد أوّلًا قبل التّعامل مع المجلّد نفسه؛ يعني هذا أنّه إذا كان لديك مجلّد Folder1 به مجلّدان فرعيّان Folder1A وFolder1B فإنّ أمر find سيُعالج محتوى Folder1A وFolder1B أوّلًا، أيّ ف حالتنا يحذف المجلّد إذا كان خاويًّا.

    لو لم نستخدم depth- لظهرت رسائل خطأ نظرًا أنّ rmdir لا يحذف سوى المجلّدات الفارغة (لا يوجد بها ملفّ أو مجلّدات فرعيّة).

  22. الأحوط هو أن تتّبع الخطوات التّالية:

    - اعرض قائمة بالمستخدمين:
     

    select user,host from mysql.user;


    - اعرض امتيّازات مستخدم معيّن:
     

    show grants for 'user'@'host';



    - قبل تغيير امتيّازات مستخدم، ألغِ الامتيّازات الموجودة:
     

    revoke all privileges on *.* from 'user'@'host';



    - امنح الامتيّازات المطلوبة للمستخدم (مثال: SELECT, INSERT, UPDATE و DELETE):
     

    grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'user'@'host';



    - اعتمد التّعديلات:

     

    flush privileges;

     

    • أعجبني 1
×
×
  • أضف...