صندوق الأدوات

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

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

جيفري إم. بيركل

  • Published online:

Illustration by The Project Twins

بدأت القصة بطلبٍ بسيط من الباحث الرئيس المشرف على جينيفر جونسون، العالِمة المتخصصة في نُظُم المعلومات الحيوية من جامعة إلينوي في مدينة أربانا-شامبين الأمريكية. فمنذ عام 2018، تمكَّن فريقهما من تحديد تسلسلات الحمض النووي لحوالي 1300 عينة مأخوذة من الثعالب الفضية Vulpes vulpes، وقد أراد مدير المُختَبَر أن يعرف بدقة عدد قواعد الحمض النووي التي جمعها الفريق، ومدى اتفاق تلك القواعد مع الجينوم المرجعي لذلك النوع من الثعالب.

كانت جونسون تملك البيانات اللازمة للإجابة عن تلك الأسئلة، لكنَّ البيانات كانت مبعثرةً في أرجاء القرص الصلب لحاسوبها. وأكثر الحلول بداهةً كان هو أيضًا أكثرها مشقة، متمثلًا في: أن تفتح كل ملف، وتعثر على المعلومات المطلوبة، ثم تغلقه، وتُكرِّر تلك العملية 1300 مرة. لذا، قررت جونسون أن تسلك سبيلًا آخر، وهو أن تستعين بما يُعرَف بواجهة الأوامر النصية.

هذه الواجهة، التي تُسمّى أيضًا بنظام "الغلاف" shell، هي واجهة برمجية فعَّالة مبنية على نصوص، يُصْدِر المستخدمون من خلالها تعليماتٍ مُقتَضَبة لإنشاء الملفات، والعثور عليها، وفرزها، والتحكم فيها، كل ذلك بدون استخدام الفأرة. وهي تأتي مُدمَجةً في نظامَي التشغيل "ماك أو إس" macOS، و"يونكس" Unix. كما تتوفر على نظام "ويندوز" Windows من خلال أدواتٍ مثل الأداة المجانية "ويندوز سابسيستم فور لينكس" Windows Subsystem for Linux، وأداة "موباكس تيرم" MobaXterm. وفي الواقع، توجد أنظمةٌ عديدة مختلفة من هذه الواجهات (لكنَّها تتوافق مع بعضها بعضًا إلى حد كبير)، من أشهرها النظام المعروف باسم "باش" Bash، الذي يُعَد اسمه اختصارًا لكلمة Bourne again shell، في إشارةٍ إلى نظام "بورن شيل" Bourne shell، الذي حل محله نظام "باش" في عام 1989.

ونظام "باش" هو لغة برمجة تتسم بالكمال من جميع النواحي، ويتضمن -في الوقت نفسه- مجموعةً من البرمجيات المصممة لأداء مهام روتينية، مثل أداة grep، وهي أداة قوية للبحث في النصوص، وأداة for loops، التي تتيح للمستخدمين تكرار الإجراءات نفسها على ملفات متعددة. ومن خلال هذه الأدوات، وَجَّهَت جونسون تعليماتٍ إلى محطتها الطرفية الحاسوبية، لتبحث في قرصها الصلب عن ملفات بيانات تسلسلات الأحماض النووية، ثم تستخرج المعلومات المطلوبة، وتُحَوِّلها إلى جدول بيانات مُنظَّم. تقول الباحثة عن ذلك: "استغرق هذا مِنِّي أقل من 10 دقائق"، بينما كان إجراء هذه العمليات الحوسبية على البيانات من جديد سيستغرق يومًا كاملًا.

تعتمد مجالاتٌ حوسبية عديدة اعتمادًا كبيرًا على واجهة الأوامر النصية، منها مجال نُظُم المعلومات الحيوية، غير أنَّ جميع الباحثين الذين يستخدمون أجهزة الحاسوب يمكنهم الاستفادة منها، حسبما قال يوين يانسنز، كبير المحاضرين في شركة "داتا ساينس ووركشوبس" Data Science Workshops بمدينة روتردام الهولندية، ومؤلف كتاب "واجهة الأوامر النصية: حيلة من عِلْم البيانات" Data Science at the Command Line، الصادر في عام 2014. فقد أوضح يانسنز هذا قائلًا: "لا يمكنك زيادة قدر العمل الذي تؤديه الفأرة". فعلى سبيل المثال، يمكنك بالطبع أن تعيد تسمية ملفٍ عن طريق الإشارة إليه بالفأرة والنقر عليه، إلا أنَّ هذه المهمة تصير مُضجِرةً ورتيبة عندما تُنفَّذ على مئاتٍ أو آلافٍ من الملفات.

وهنا، نسلط الضوء على خمسِ طرق، يُمكِن بها لواجهة الأوامر النصية أن تُيسِّر عليك إجراء العمليات الحوسبية في أبحاثك.

تهيئة الملفات

ربما تكون أقوى ميزة في واجهة الأوامر النصية (الغلاف) هي قدرتها على تكرار تنفيذ المهام البسيطة على عديدٍ من الملفات. فعلى سبيل المثال، يمكن للباحثين باستخدامها أن يعيدوا تسمية ملفاتهم بطريقةٍ منهجية، لإضافة وَسْمٍ خاص بالتاريخ مثلًا، أو أن يحولوها من صيغةٍ إلى أخرى (كمثالٍ على تلك الأكواد، انظر: https://github.com/jperkel/nature_bash).

يتجلَّى هذا فيما حدث مع الباحث كايسي جرين خلال دراساته التي أجراها بعد الدكتوراة، إذ أصر مستشاره الأكاديمي أن تكون جميع صور الأشكال التوضيحية المُستخدَمة في العروض التَّقديمية ذات خلفيةٍ سوداء. وحسبما أوضح جرين، فقد أصبح بارعًا في فتح ملفات الأشكال التَّوضيحية باستخدام برنامجٍ لتعديل الصور، ثم قلبها وتغيير ألوانها من خلال عملية البرمجة المعروفة باسم "تدوير الألوان" colour-rotating، وتكرار تلك العمليات مع كل ملف، لكنّ الباحث، الذي يدير الآن مركز الذكاء الاصطناعي في مجال الصحة، التابع لكلية طب جامعة كولورادو بمدينة أورورا الأمريكية، أضاف قائلًا: "في مرحلةٍ ما، يتضح لك أنَّ الحياة أقصر مِن أنْ تضيعها في أنْ تستمر في فتح الملفات، وتدوير ألوان الأشكال، حتى إذا فعلت ذلك باستخدام برنامجٍ مجاني سهل الاستخدام نسبيًّا". ولهذا السبب، لجأ جرين إلى واجهة الأوامر النصية، واستخدم -على وجه التحديد- أداة "إيمدج ماجيك" ImageMagick المجانية مفتوحة المصدر لمعالجة الصور، مستعينًا معها بأداة for loops لتكرار العملية على جميع ملفاته. وإليك الأمر الذي استخدمه:

for file in *.png; do convert $file -channel RGB -negate -modulate 100,100,200 out_$file; done;

التعامل مع البيانات الضخمة

هناك مجموعات بيانات تكون كبيرةً للغاية، إلى درجةٍ تُصعِّب التعامل معها. فعلى سبيل المثال.. في مشروعٍ لدراسة البيانات الوصفية لمُعَرِّفات الوثائق الرقمية (DOI)، تمكنت الباحثة إليزابيث ويكز، المتخصصة في مجال المعلومات من جامعة إلينوي في مدينة أربانا-شامبين الأمريكية، من جمْع ملايين الملفات بصيغة XML. لكنَّ إمكانات نظامها لم تكن كافيةً لتحميل تلك الملفات على مستودعٍ للتحكم في النُّسَخ. وتقول عن ذلك: "تَعَطَّل على حاسوبي تطبيق "جيت هاب دِسك توب" GitHub Desktop، وبرنامج الفهرسة في نظام التشغيل الذي استخدمته أثناء تنفيذ تلك العملية"، لكنْ بالاستعانة بأداة الأوامر النصية "جيت" git، حلَّت إليزابيث هذه المشكلة خلال ساعةٍ ونصف الساعة.

وواجهت المشكلة ذاتها الباحثة لينيت ستريكلاند، عالِمة البيولوجيا التطورية من جامعة تكساس إيه آند إم في مدينة كوربوس كريستي الأمريكية. كانت ستريكلاند قد وثَّقت تفاصيل عن الملايين من المتغيرات الجينية، للاستعانة بها في بحثها حول نوعٍ من أسماك الأسد الغازية (من الجنس المعروف باسم Pterois). وكان حجم البيانات ضخمًا إلى حد حالَ دون تخزينه في برنامج "مايكروسوفت إكسل" Microsoft Excel، الذي يضع حدًّا أقصى لجداول البيانات، بحيث لا تزيد على حوالي مليون صف. لذلك، استخدمت ستريكلاند واجهة الأوامر النصية لتحديد البيانات المسجلة (صفوف الجداول) التي تجاوزت حدًّا معينًا حددته كمعيارٍ للجودة، ثم استخلاص أعمدة الجداول التي تحتاجها فقط، وحفظ البيانات في ملفٍ جديد، وذلك باستخدام أمرٍ كالتالي: (بافتراض أنَّ درجة الجودة تُسجَّل في العمود رقم 4، وحد الجودة الفاصل قيمته 50، والأعمدة التي تحتاجها هي الأعمدة من رقم 1 إلى 4):

awk -F, ‘{ if ($4 > 50) print $0 }’ datafile.csv | cut -d, -f1-4 > newdatafile.csv

وتقول ستريكلاند عن ذلك: "من خلال استخلاص المعلومات المُحَدَّدة التي أحتاجها من الجداول باستخدام نظام الغلاف، يمكِنني اختصار البيانات بشدة، وتحويلها إلى صورةٍ أستطيع بالفعل استخدامها وتمثيلها".

التحكُّم في جداول البيانات

تبدو العمليات التي تنفذها واجهة الأوامر النصية بسيطةً. فالأمر cut -على سبيل المثال- يستخلص عمودًا واحدًا أو أكثر من جداول البيانات، أمَّا الأمر wc، فيحسب عدد الكلمات، أو الأسطر، أو الحروف، والأمر awk يفرز الملفات بحثًا عن الأسطر التي تتوافق مع شرطٍ معين، والأمر sed يتحكم في التسلسلات النصية، إلا أنه يُمكِن أيضًا صنع سلسلةٍ من هذه الأوامر البسيطة باستخدام الأمر pipe (الذي يُرمَّز له بالرمز "|")، وهو خاصيةٌ في واجهة الأوامر النصية، تُحوِّل مخرجات كل أمرٍ إلى مدخلاتٍ بالنسبة إلى الأمر التالي له، فتُنتِج أنظمةً فعالة لسير العمل، مُصمَّمة حسب الحاجة. وعن ذلك، يقول توم رايدر، مدير الأنظمة المقيم في مدينة بالمرستون نورث النيوزيلندية، الذي ألَّف كتاب "دليلك للبدء سريعًا في استخدام نظام باش" Bash Quick Start Guide، الصادر في عام 2018: "هذا جيدٌ جدًّا لإنجاز المهام بسرعة، وتطوير النماذج الأوَّليّة".

والأمر التَّالي، على سبيل المثال، يجمع بين خمس برمجياتٍ من تلك المصممة لأداء المهام الروتينية، وذلك لحساب عدد أسماء الجينات الفريدة في مجموعة بيانات خاصة بعمليات التعبير الجيني:

cut -f1 GEOdataset.csv | sed -E ‘s/^>//’ | sort | uniq | wc -l

تستخرج هذه الخطوات (بالأمر cut) العمود الأول من جدول البيانات (العمود المحتوي على الاسم)، ثم تحذف رمز "أكبر من <" الذي يسبق الأسماء في ذلك العمود (بالأمر sed)، وبعدها ترتب القائمة أبجديًّا، ثم تختزلها إلى قيمها الفريدة (بالأمر uniq)، وأخيرًا تطبع العدد الإجمالي للأسطر (أي أسماء الجينات) على الشاشة (بالأمر wc).

"يمكِن تخزين أوامر نظام "الغلاف" في ملفاتٍ نصية تُسَمَّى "البرامج النصية" scripts. وهذه الملفات يُمكِن حفظها، ومشاركتها، والتحكم في نُسخها".

أداء المهام على التوازي

وثمة استخدامٌ آخر مفيد لهذه الأنظمة، توضحه لنا كريستينا كوخ، المسؤولة عن تيسير مهام الحوسبة في الأبحاث العلمية بجامعة ويسكونسن-ماديسون الأمريكية. تعمل كوخ في مركز حوسبة يوفر للباحثين إمكانية استخدام حوالي 14 ألف عقدة بيانات وتيرابايت من الذاكرة عن بُعد. وتقول إنَّه لو افترضنا أنَّ متخصصًا في مجال نُظُم المعلومات الحيوية لديه نظامٌ حوسبي لسير العمل، مُصمَّم لتحليل مجموعات بيانات خاصة بعمليات التعبير الجيني، وأنَّ كل مجموعة بيانات منها تستغرق معالجتها يومًا على حاسوبه، وأنَّ لديه 60 مجموعة بيانات، فإنَّ مهمة تحليل مجموعات البيانات تلك "ستستغرق شهرين من العمل المستمر". أما بإرسال المهمة إلى عنقودٍ من الحواسيب بالاستعانة بالأمر secure shell، أو ssh، الذي يفتح بوابة مُشَفَّرة تقود إلى ذلك النظام الذي يُستخدَم عن بُعد، يستطيع الباحث أن يُجْرِي عمليات الحوسبة على التوازي عبر 60 حاسوبًا في الوقت نفسه. وتضيف قائلةً: "ستستغرق المهمة بهذا الشكل يومًا واحدًا فقط، بدلًا من شهرين".

وحتى في غياب هذه القدرة الحوسبية الضخمة، يتيح أمر ssh إمكانية العمل عن بُعد، وهي ميزةٌ مفيدة بالأخص في فترات الجوائح. وعلى سبيل المثال، في العام الماضي، حين لاحت احتمالية فرض تدابير الإغلاق بسبب جائحة "كوفيد-19"، عمل جابرييل ديفينيي -وهو مسؤول أنظمة ومبرمج في مستشفى معهد دوجلاس الجامعي للصحة العقلية بمدينة مونتريال الكندية- على ضمان استعداد الباحثين في منشأته للاستمرار في أعمالهم متى شاءت الظروف، وأنْ يخضعوا لإجراءات الحجر الصحي. ويقول عن ذلك: "في غياب تلك الإمكانات، كان الطلاب كلهم سيعجزون عن تأدية أعمالهم".

التشغيل الآلي للمهام

يُمكِن تخزين أوامر نظام "الغلاف" في ملفاتٍ نصية تُسَمَّى البرامج النصية scripts. وهذه الملفات يُمكِن حفظها، ومشاركتها، والتحكم في نُسخها، وهو ما يُعزِّز إمكانية نسخها وإعادة استخدامها. كما يُمكِن تشغيل تلك البرامج النصية آليًّا، إذ يستطيع المستخدمون بالاستعانة بالأمر cron أن يُجَدْوِلوا البرامج النَّصيّة لتشغيلها في الأوقات التي تناسبهم. فعلى سبيل المثال، تقول ويكز إنَّ بعض المواقع الإلكترونية يطلب من المستخدمين الذين يخططون لـ"استخلاص" محتواها أن يفعلوا ذلك خارج ساعات الذروة، أي –على سبيل المثال- بين التاسعة مساءً، والخامسة صباحًا بالتوقيت الشرقي للولايات المتحدة في حال قاعدة بيانات المؤلفات العلمية "بَب مِد" PubMed. وتضيف ويكز قائلةً: "يُمكِنَك أن تختار عدم تشغيل "البرنامج النصي"، إلا في الأوقات التي يُسمَح لك فيها بذلك". كما أنَّ المستخدمين يمكنهم تنزيل البيانات كبديل على حواسيبهم الأساسية يوميًّا، لأنَّ كثيرًا من الأنظمة المشتركة يحذف الملفات القديمة كإجراء روتيني.

تحذير: لا مجال للتراجع

يتمثل الجانب السلبي لهذه الإمكانات الكبيرة التي يتمتع بها نظام الغلاف في واجهته المخيفة، التي غالبًا ما تتكون فقط من رمز الدولار، وعلامة المؤشر. ويقول يانسنز عن هذا: "يخيف ذلك بعض الناس"، كما أنَّ النظام لا يقدم سوى القليل من الإرشادات. ويضيف يانسنز أنه أحيانًا "لا يتيح أي فرصةٍ تقريبًا لتصحيح الأخطاء". فعلى سبيل المثال، يمكن لمسافةٍ موضوعة في مكانٍ خاطئ أن تغيِّر معنى الأمر الذي تستخدمه، إضافةً إلى أنَّ معظم الأوامر لا يسأل المستخدِم تلقائيًّا عمَّا إذا كان يعي ما يفعل. ويقول ديفينيي عن ذلك: "عندما يُسمح لك بتنفيذ عمليةٍ ما في النظام، فإنَّ الغلاف يفترض أنَّك قصدت تنفيذها كما كتبت الأمر. وبهذا، فإنَّك قد تنفذ الكثير من العمليات الخطرة المختلفة".

المثال التقليدي لهذه المخاطر هو الأمر rm –rf *، الذي يحذف جميع الملفات من موقع يحدده المستخدِم على الحاسوب، ومن جميع المجلدات الموجودة داخل هذا الموقع. وإذا نُفِّذَ هذا الأمر على موقعٍ خاطئ، فيُمكِن للمستخدِم أن يفقد ملفاتٍ حيوية بالنسبة له. وتقول جونسون عن ذلك: "لقد وَقَعْنا جميعًا في هذا الخطأ". ولذا، عليك أنْ تَستخدِم تلك الأوامر بحذر.

ومن الحيل البسيطة للحيلولة دون حدوث ذلك أنْ تَستخدِم الأمر echo للتأكد من أنَّك قد حددت الملفات التي تريدها بالفعل. ويقول جرين عن ذلك: "استخدام أمر echo قبل التنفيذ هو من القواعد المُجرَّبة الرائعة". كما أنَّ بعض الأوامر يوفر نمطًا للتشغيل التجريبي، يوضح للمستخدِم ما ستنفذه، وبعضها يوفر نمطًا تفاعليًّا بجانب النمط السالف، أو بدونه. وهذا النمط التفاعلي يطلب مدخلاتٍ من المستخدِم، قبل إجراء أي تغييرات. ويُمكِن للمستخدِمين تعيين ما يُعرف بالمتغيِّرات، لمنع الحاسوب من استبدال الملفات، أو للخروج من البرنامج عند وجود خطأ (باستخدام أمر noclobber في الحالة الأولى، وpipefail في الحالة الثانية). وينبغي كذلك على المستخدمين ألَّا يشغِّلوا أي أوامر، طالما كانت لديهم امتيازاتٌ إدارية.

وختامًا، تقول ويكز: "تمطرنا الحياة بالمسؤوليات سريعًا، وقد تفعل ذلك أبحاثنا العلمية أيضًا في بعض الأحيان"، لكنَّ واجهة الأوامر النصية تتيح لنا التعامل مع تلك المهام غير المتوقعة. وفضلًا عن ذلك، فإنَّ استخدامها ممتع، حسبما ترى كوخ، التي تضيف قائلةً: "إنَّها فعالةٌ للغاية، وأشعر بأنَّني عبقريةٌ حاذقة عندما أستخدمها، فهي تجعلك أحيانًا تشعر بأنَّك تتحلى بالكفاءة".

جيفري إم. بيركل

محرر التكنولوجيا في دورية Nature.