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

مدخل إلى صدفة باش Bash


محمد الخضور

تتعرف نواة Kernel نظام التشغيل سواءً كان Mach، أو BSD، أو لينكس Linux، أو NT على كافّة التجهيزات والعتاد المتصلة بالحاسوب عند إقلاعه باستخدام برنامج رئيسي، وتمكّنها من التواصل مع بعضها بعضًا، كما تضمن عملها على نحوٍ متناغم؛ إذ تؤدّي مجموعة التعليمات الرئيسية هذه مجموعةً من المهام، مثل إبقاء الحاسوب في حالة تشغيل وبوضعٍ آمن من خلال تشغيل مراوح التبريد دوريًا لتجنّب زيادة درجة الحرارة مثلًا، إضافةً لاستخدامها أنظمةً فرعيةً مسؤولةً عن مراقبة مساحة القرص الصلب أو التنبّه عند وصل أجهزة جديدة بالحاسوب وغيرها من العمليات. ولكن ليس هذا جلّ ما يفعله الحاسوب، وإلا كانت أهميته مثل أهمية الفرن في المنزل.

أدرك علماء الحواسيب مبكرًا أهمية جعل البشر قادرين على التفاعل مع الحاسوب متى أرادوا ذلك، لذا طوروا صدفةً Shell خاصّةً بالحواسيب العاملة على نظام يونكس Unix؛ إذ تعمل هذه الصدفة خارج النواة أو حولها مثل مبدأ الصدفة في الطبيعة، وقد شكّلت هذه الصدفة تطورًا مهمًا في الوقت الذي كان الناس فيه يوجهون الأوامر للحواسيب باستخدام البطاقات المثقبّة، وتعدّ Bash واحدةً من أكثر الصدفات shells شعبيةً وأكثرها فعاليةً وسهولةً.

باش Bash هو تطبيق

عندما تفتح طرفيةً Terminal تُشغِّل صدفة باش، مثل GNOME Terminal، أو Konsole في نظام لينكس، أو iTerm2 في نظام ماك، أو إس macOS، فسُيرَحب بك غالبًا من خلال محث prompt؛ والذي يكون عادةً رمزًا وهو إشارة ($)، والذي يعني أن الصدفة بانتظارك لإدخال أمر. ولا بُد بالتأكيد من معرفة ما عليك كتابته من أوامر، وهذه الأوامر موضوعٌ مستقلٌ تمامًا كما سنرى.

قد يكون التعبير التالي غير لطيف، إلّا أنّه يمثّل بدقة عدّة دلالاتٍ متعلقّة بمصطلح باش؛ إذ لا يميز كثيرٌ من المستخدمين الجدد بين مفهوم باش ومفهوم لينكس أو يونكس؛ فبالنسبة لهم باش هو الشاشة السوداء ذات الكتابة الخضراء التي تُكتب فيها الشيفرة اللازمة لإعطاء الأوامر للحاسوب. هذا المفهوم فيه خلطٌ ما بين صدفة باش والأوامر التي نكتبها داخل الصدفة، ومن المهم فهم أنهما مفهومان مستقلان؛ إذ أنّ باش مجرّد تطبيقٍ مهمته الرئيسية تشغيل التطبيقات الأخرى ضمن نفس النظام (من خلال أوامر).

إذًا، يمكنك تعلّم باش في سياق تعلّم نظام التشغيل الذي يعمل عليه، ولكن لا يمكنك استخدامه فعليًا ما لم تتعرف على الأوامر.

أوامر نظام لينكس

تُخزَّن معظم الأوامر افتراضيًا في مجلدات النظام في الأنظمة المعتمدة على يونكس ولينكس (نظام BSD و macOS) في مساراتٍ، مثل "usr/bin/" و "bin/"، ولا تتعدى معرفة باش بهذه الأوامر لمعرفتك باللغة السنسكريتية، ولكن كما بإمكانك البحث وترجمة أي كلمة من اللغة السنسكريتية، يمكن لـلغة باش البحث عن الأوامر؛ فعند كتابتك لأمرٍ ما يبحث باش ضمن مسارات مجلدات محدّدة في نظامك ليرى ما إذا كان هذا الأمر موجودًا وعندها ينفذّه.

تمثّل كلمة Bash بحد ذاتها أحد الأوامر، وهو الأمر الذي ينفّذ افتراضيًا عندما تفتح الطرفية أو عند دخولك إلى محرر نصوص الطرفية Console (وهو جهازٌ حقيقي أو وهمي يستقبل الرسائل والتنبيهات من النواة ويسمح بتسجيل الدخول بوضع المستخدم الوحيد).

يمكنك معرفة مكان تخزين أي أمرٍ بما في ذلك الأمر Bash على نظامك باستخدام الأمر which في الطرفية على النحو التالي:

$ which bash
/usr/bin/bash
$ which ls
/usr/bin/ls

تُبنى بعض الأوامر داخليًا ضمن باش نفسه، وتكون معظم الأوامر داخلية البناء خاصّةً بالبرمجة النصيّة لباش أو لإعدادات البيئة منخفضة المستوى، إلّا أنّ استخدام بعضٍ منها مفيدٌ في الوظائف العامّة، مثل الأمر cd الخاص بتغيير مسار المجلدات change directory. لا تظهر الأوامر داخلية البناء عندما تبحث عنها لأنّها غير موجودةٍ في مسار التنفيذ الاعتيادي:

$ which bash
which: no cd in (/usr/local/bin:/usr/bin:/bin:
[...]

إلّا أنّ عدم العثور عليها في البحث لا يعني عدم توفرها، فهي مبنيةٌ ضمن باش الذي تشغلِّه أصلًا.

تشغيل باش

توفّر معظم توزيعات لينكس ويونكس صدفة باش افتراضيًا، نظرًا لكون باش معروفٌ وشعبي جدًا، إضافةً لامتلاكه كثيرًا من الوظائف المريحة التي لا توفرّها الصدفات الأخرى؛ إلّا أنّ بعض الأنظمة توفّر حافظةً أُخرى افتراضيًا؛ ولمعرفة فيما إذا كانت الحافظة لديك من نوع باش، ما عليك سوى استخدام الأمر echo مع متغير variable خاص يُظهر اسم العملية المنفّذة حاليًا:

$ echo $0
bash

إذا كان باش غير متوفّر لديك ورغبت بتجربته، فمن الممكن تنزيله وتثبيته من مركز إدارة البرمجيات لديك، أو بإمكانك استخدام مدير الحزم Chocolatey إذا كان نظام التشغيل لديك ويندوز Windows؛ أو Homebrew في حال كان نظامك ماك أو إس؛ وفي حال فشل كل الطرق السابقة، فلا بُد من زيارة الصفحة الرئيسية لباش على الإنترنت للحصول على مزيدٍ من المعلومات.

العمل في باش

واجهة باش متوفرّةٌ في حاسوبك، فهي ليست حكرًا على مديري الخوادم أو المبرمجين، كما أنها قادرةٌ على أن تحل محل سطح مكتبك وتطبيقات تحرير النصوص والرسوميات وغيرها؛ إذ يستخدم الأشخاص باش أكثر من استخدامهم لتطبيقات سطح المكتب.

يوجد المئات من التعليمات المتاحة لأنظمة لينكس ويونكس التي ستفاجئك بتنوعها؛ إذ يمكنك مثلًا باستخدام باش اقتصاص وإعادة تعيين حجم صورة دون فتح الصورة ضمن عارضٍ أو محرر صور:

$ mogrify -geometry 1600^x800 \
  -gravity Center \
  -crop 1600x800+0+0 myphoto.jpg

يمكنك تشغيل الموسيقى باستخدام أمرٍ، مثل ogg123، أو mpg321؛ أو تحويل الصوت باستخدام الأمر sox؛ أو تعديل وتحرير الفيديوهات باستخدام ffmpeg؛ أو تحرير النصوص باستخدام emacs، أو vim؛ أو التحقق من رسائل البريد الإلكتروني باستخدام pine أو mutt؛ أو تصفّح الإنترنت باستخدام elinks؛ وكذلك تصفّح الملفات باستخدام ranger أو midnightcommander، وغيرها، إذ يوفِّر باش كل هذه الإمكانات باستخدام الأوامر التي ستجدها في نظامك أو في مستودع البرمجيات الخاص بك.

برمجة باش النصية

أحد أهم أسباب كون باش ونظام لينكس ككل فعّالًا هو كونه قابلًا للبرمجة والتوسع إذ يمكنك كتابة تعليمات جديدة ضمن باش يدويًا، أو من خلال إنشاء قائمةٍ ضمن ملف نصي عادي وسيشغلها باش؛ فبدلًا من قضاء ساعات في كتابة وتنفيذ مئات التعليمات، يمكنك كتابة التعليمات في ملف نصي عادي وترك الأمر لحاسوبك لتنفيذها مرارًا وتكرارًا.

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

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

عندما يقول المستخدمون المتمرسّون أنّهم يريدون تعلّم باش دون تعلّم أوامر لينكس، فهم يقصدون غالبًا أنّهم يريدون تحسين طريقة كتابة الأوامر. ينقل النص البرمجي التالي مثلًا ملفًا مؤقتًا (وهو ملف مُنشأ بعملية أخرى منفصلة) إلى مسار محدّد:

#!/usr/bin/bash
cp tmp.png ~/public_html/`date +%Y%m%d`.png

يمكنك التحقّق من هذا الأمر من خلال نسخ السطر الأخير (الأمر الذي يبدأ بـ cp) إلى طرفية، حيث سيعمل هذا الأمر في حال وجود ملفٍ يُدعى tmp.png ومسار مجلد يُدعى ‎~/public_html.

إذًا، يعتمد تعلُّم باش على فهم كيفية تحويل أمرٍ بسيط كهذا إلى عملية أتمتة فعلية؛ فلن يعمل النص البرمجي مثلًا في حال عدم توفّر الملف "tmp.png"؛ وعلى فرض أنّ هذا النص البرمجي مكوّنٌ أساسيٌ لمدونةٍ تتطلب صورةً جديدةً يوميًا لإنشاء صورة ترويسة مخصّصة، ففي هذه الحالة سيكون عدم تنفيذ النص البرمجي ذا تأثيرٍ كارثي على كل أجزاء المدونة. يستطيع المُستخدم الذي يعرف باش إضفاء المرونة على نصه البرمجي باستخدام بناء التعليمات في باش.

#!/usr/bin/bash
IMG="tmp.png"
[[ -e tmp.png ]] || IMG="generic.png"
cp ~/"${IMG}" ~/public_html/`date +%Y%m%d`.png

يُعَد هذا مجرّد مثالٍ وحيد لعملية تعلّم كتابة النصوص البرمجية في باش، إلّا أنّه يوضّح حقيقة كون تعلّم كل من باش ولينكس مفيدًا بنفس الدرجة، وهي عملية متكاملة ولا يمكن عدُّ كلٍ منهما مهمّةً مستقلة.

نقاط قوة باش

تُعَد باش صدفةً فعّالةً مثل غيرها، إلّا أنها تمتاز بوجود عدة دوالٍ مريحة، مثل استخدام الأقواس المزدوجة ([[ و]]) في الترميز البرمجي، وهذه التفاصيل الخاصّة بـها هي المفضّلة لدى مستخدميها، لأنّهم يتجنبون بناء الجمل الطويل المُربك كما في الصدفات الأُخرى، مثل tcsh أو ash؛ إلّا أنّ هذه التعليمات الخاصّة بباش قد تسبّب مشاكل في التوافق عند استخدامها على الأنظمة التي لا تستخدمه، ولكن بما أنّ باش مجاني ومفتوح المصدر، فبإمكان أي مستخدمٍ تثبيته عند الحاجة لاستخدامه، وتفرض مشكلة عدم التوافق هذه فقط اعتمادًا إضافيًا على باش دون منع أي أحدٍ من استخدام البرمجة النصية.

    ترجمة -وبتصرف- للمقال What is Bash?‎ من موقع opensource.com.

    اقرأ أيضًا

    إذا أردت تعلّم باش يمكنك الاطلاع على توثيقها التفصيلي في موسوعة حسوب، كما ننصحك بالإطلاع على المقالات التالية:


    تفاعل الأعضاء

    أفضل التعليقات

    لا توجد أية تعليقات بعد



    انضم إلى النقاش

    يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

    زائر
    أضف تعليق

    ×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   جرى استعادة المحتوى السابق..   امسح المحرر

    ×   You cannot paste images directly. Upload or insert images from URL.


    ×
    ×
    • أضف...