وحدة 9 / 11

إنشاء البرامج النصية والأتمتة: Bash وPython وPowerShell

المكاسب:

  • القدرة على فهم نقاط القوة في Bash وPython وPowerShell والحصول على الذكاء الاصطناعي لإنتاج مسودات نصية آمنة ومحمية
  • القدرة على إضافة حواجز الحماية إلى البرامج النصية مثل set -euo Pipefail، والتحقق من المتغيرات الفارغة، ووضع التشغيل الجاف، والتسجيل
  • القدرة على قراءة الأوامر التدميرية وتجربتها في بيئة معزولة ومع التشغيل التجريبي أولاً، وتطبيق نظام عدم تضمين السر في البرنامج النصي.

تتلخص روح DevOps في جملة واحدة: "أتمتة العمل الذي تقوم به مرتين". أي مهمة متكررة يتم إجراؤها يدويًا - تنظيف السجل، وأخذ النسخ الاحتياطي، والتحقق من صحة الخادم، ومعالجة الملفات الدفعية - تستغرق وقتًا وتتلف في النهاية بسبب خطأ بشري. تتولى البرامج النصية هذه الوظائف: برامج صغيرة تنفذ سلسلة من الأوامر بطريقة متسلسلة وموثوقة وقابلة للتكرار. يستخدم محترف DevOps بشكل متكرر ثلاث لغات: Bash (لبرامج Linux/Unix shell النصية)، وPython (للمنطق المعقد، واستدعاء واجهة برمجة التطبيقات، ومعالجة البيانات)، وPowerShell (لإدارة Windows والسحابة).

ربما يكون الذكاء الاصطناعي هو المكان الذي يقدم فيه القيمة الأكثر عملية في إنشاء النصوص البرمجية: إنتاج مسودة عمل من وصف مكون من جملة واحدة، وحل خطأ غامض، وترجمة النص إلى لغة أخرى. لكن البرنامج النصي يكون خطيرًا عند تشغيله بشكل أعمى - سيؤدي خطأ rm، وRemove-Item -Recurse إلى حذف الملفات بشكل لا رجعة فيه. ولهذا السبب فإن شعار هذه الوحدة هو: دع الذكاء الاصطناعي يكتب النص، تقرأه أنت، جربه في الوضع الآمن أولاً، ثم قم بتشغيله.

أي لغة تختار ومتى؟ قاعدة تقريبية: إذا كانت المهمة تتكون من تشغيل عدة أوامر نظام متتالية (نسخ ملف، إعادة تشغيل الخدمة، استرداد الأرشيف)، فإن Bash هو الخيار الأكثر طبيعية لأن Linux موجود في كل مكان على الخوادم. إذا كانت المهمة تتضمن منطق القرار، أو التكرار، أو تحويل البيانات، أو طلب واجهة برمجة التطبيقات (API)، أو معالجة JSON - أي منطق يتجاوز 20 سطرًا - تتميز بايثون بسهولة قراءتها ومكتباتها الغنية؛ سرعان ما يصبح نص Bash المعقد غير مفهوم، بينما تظل لغة Python سهلة الصيانة. إذا كانت المهمة تتضمن إدارة خوادم Windows أو Active Directory أو Azure، فإن PowerShell هي البيئة الطبيعية لأن طبيعته الموجهة للكائنات تتكامل بعمق مع هذه الأنظمة الأساسية. إن تحديد اللغة التي اخترتها وسبب اختيارك عند طلب برنامج نصي إلى الذكاء الاصطناعي يضمن أن الإخراج مناسب واصطلاحي لبيئتك.

خطوة بخطوة: إنشاء البرنامج النصي الآمن

  1. وصف المهمة والبيئة. ماذا ستفعل، أي نظام تشغيل/قشرة، ما هي القيود؟
  2. اطلب درابزين الأمان. في bash، set -euo Pipefail (توقف عند الخطأ، توقف عند متغير غير محدد)، مطالبة التأكيد للعمليات الخطيرة، تحرك أولاً بدلاً من الحذف.
  3. طلب وضع التشغيل الجاف. اسمح للبرنامج النصي بكتابة ما يجب فعله بـ --dry-run، لكن لا تفعل ذلك.
  4. اقرأ وافهم. تحقق مما يفعله كل صف، وخاصة عمليات الحذف/النقل/الشبكة.
  5. جربه في بيئة معزولة. في مجلد الاختبار، قم بتشغيله باستخدام بيانات العينة.
  6. أضف إلى التسجيل. اسمح للبرنامج النصي بتسجيل ما يفعله حتى يمكن مشاهدته لاحقًا.

أساسيات البرمجة النصية الآمنة

يجب أن يشتمل نص الإنتاج على حواجز الحماية هذه:

  • التوقف في حالة الخطأ. باش: set -euo Pipefail. بوويرشيل: $ErrorActionPreference = 'Stop'. إذا فشلت إحدى الخطوات، فلن تنجح الخطوات التالية.
  • العجز (التكرار). إذا تم تشغيل البرنامج النصي مرتين، فلا ينبغي أن يسبب ضررًا مزدوجًا؛ منطق "إذا كان لديك بالفعل، تخطيه".
  • الموافقة والتشغيل الجاف. بالنسبة للعمليات التدميرية "هل أنت متأكد؟" أو علامة --dry-run.
  • التحقق من صحة الإدخال. هل المعلمات كما هو متوقع؟ يمكن للمتغير الفارغ تحويل rm -rf "$DIR"/ إلى rm -rf / كارثة.
  • التسجيل. سجل ما تم ومتى.
نصيحة: أخطر خطأ في Bash هو الحذف بمتغير فارغ. يحاول rm -rf "$DIR" حذف الدليل الجذر إذا كان $DIR فارغًا. set -u (التوقف عند متغير غير محدد) والتحقق من [ -n "$DIR"] قبل الحذف هو المنقذ. اطلب هذه الحماية بشكل صريح عند طلب البرامج النصية من الذكاء الاصطناعي.

الأمن: الأوامر السرية والمدمرة

خطران كبيران:

  1. تضمين السر في البرنامج النصي. يجب ألا تكون كلمة المرور نصًا عاديًا ضمن البرنامج النصي للرمز المميز؛ يجب قراءتها من متغير البيئة أو القبو. تدخل البرامج النصية إلى Git؛ السر المدفون هو التسرب الدائم.
  2. أوامر مدمرة rm -rf، Remove-Item -Recurse -Force، DROP TABLE، terraform Destroy - عندما ترى هذه الأشياء في البرنامج النصي، توقف وفكر مرتين. لا تحاول أبدًا تجربة الأمر المدمر الذي تم إنشاؤه بواسطة الذكاء الاصطناعي في المنتج أولاً.
تحذير: عندما تطلب من الذكاء الاصطناعي "كتابة برنامج نصي ينظف هذه الملفات"، اقرأ بعناية نطاق البحث عن ... -delete أو الأمر rm الذي ينتجه. سيؤدي حرف البدل (*) أو المسار الخاطئ إلى حذف أكثر مما تريد حذفه. قم دائمًا بتشغيل البرنامج النصي أولاً باستخدام وضع "قائمة الحذف" بدلاً من الحذف.

مقارنة بين ثلاث لغات

المعيار

باش

بايثون

بوويرشيل

حيث أنه الأفضل

قذيفة لينكس، سلسلة الأوامر

المنطق المعقد، API، البيانات

إدارة سحابة ويندوز

منحنى التعلم

متوسطة (محاصرة)

سهل

متوسطة

معالجة الأخطاء

مجموعة -euo Pipefail

حاول/باستثناء

حاول/قبض، -ErrorAction

قابلية النقل

يونيكس/لينكس/ماك

في كل مكان

عبر الأنظمة الأساسية (PS 7+)

متى

باختصار، يعمل النظام

منطق أطول من 20 سطرًا

ويندوز/م/أزور

ثلاث حالات صغيرة

الحالة 1 - ساعتين من الحرفة في 5 دقائق. كان أحد المهندسين يقضي ساعتين في جمع السجلات وأرشفتها من 40 خادمًا كل أسبوع. لقد طلب من الذكاء الاصطناعي وصف المهمة وتعيين -euo Pipefail + حماية التشغيل الجاف وإنشاء نص Bash. أولاً، تم التحقق من صحة البرنامج النصي من خلال التشغيل الجاف، ثم ربطه بالمهمة المجدولة (cron). يتم تقليل العمل الأسبوعي إلى 5 دقائق ويتم التخلص من الخطأ البشري.

الحالة 2 - تم تجنب كارثة المتغير الفارغ. كان هناك rm -rf "$TARGET"/* في نص التنظيف الذي أنتجه الذكاء الاصطناعي، ولكن إذا لم يتم تعيين TARGET في مكان ما، فسيظل فارغًا. لقد أدرك ذلك أثناء دراسته كمهندس. set -u و [ -n "$TARGET" ] || تمت إضافة التحكم في الخروج 1. أثناء الاختبار، ظل المتغير فارغًا وتوقف البرنامج النصي بأمان وليس بشكل كارثي.

الحالة 3 - تم التقاط الرمز المميز المضمن. للراحة، أضاف الذكاء الاصطناعي سطر TOKEN = "ghp_realtoken" إلى برنامج Python النصي الذي يطلب واجهة برمجة التطبيقات (كمثال). قام المهندس بإزالة هذا وتغييره إلى القراءة من متغير البيئة باستخدام os.environ["TOKEN"] وقام بإلغاء الرمز المميز وتجديده. إذا ذهب البرنامج النصي إلى Git، فسيكون الرمز مميزًا للعامة.

أربعة قوالب قابلة للنسخ

1) تأمين البرنامج النصي باش:

اكتب نص Bash: [TASK]. القواعد الإلزامية: - `set -euo Pipefail` في البداية. - تأكد من أن المتغير ليس فارغًا عند الحذف/النقل. - علامة `--dry-run`: اكتب ما يجب فعله في هذا الوضع ولكن لا تفعله. - لا تقم بتضمين السر؛ القراءة من متغير البيئة. - طباعة سجل إعلامي في كل خطوة. قم بالتعليق على النص وحدد السطر الأكثر خطورة.

2) وصف/تحكم البرنامج النصي:

قم بوصف سطر البرنامج النصي التالي سطرًا وتحقق من الأمان: السر المضمن، الأمر المدمر (rm/Remove-Item/DROP)، الإدخال غير المعتمد، عدم معالجة الأخطاء؟ اكتب كل خطر حسب الأهمية والتصحيح. البرنامج النصي: [الكود]

3) الترجمة اللغوية:

قم بترجمة البرنامج النصي [SOURCE LANGUAGE] إلى [TARGET LANGUAGE]. احتفظ بالسلوك حرفيًا، واستخدم معالجة الأخطاء الاصطلاحية للغة الهدف، وانقل أي أسرار مضمنة إلى متغير البيئة. لاحظ النقاط التي قد تتصرف بشكل مختلف. البرنامج النصي: [CODE]

4) المهمة المخططة (كرون/مهمة مجدولة):

استخدم هذا البرنامج النصي [التكرار: على سبيل المثال. اكتب تعريف الجدول الزمني ([cron / systemd timer / Windows Task جدولة]) الذي سيتم تشغيله [في الساعة 02:00 كل ليلة]. أضف كيفية تحذيري عند الفشل (التسجيل/رمز الخروج/الإشعار) وكيفية منع التداخل.

موجه ضعيف / موجه قوي

ضعيف: "اكتب برنامجًا نصيًا يحذف الملفات القديمة."

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

قوي: "اكتب برنامج نصي bash لحذف ملفات .log الأقدم من 30 يومًا ضمن /var/log/app. استخدم set -euo Pipefail، وتوقف إذا كان الدليل الهدف فارغًا، وأدرج ما تريد حذفه باستخدام --dry-run أولاً، وسجل كل معاملة، ولا تقم بتضمين السر. ضع علامة على السطر الأكثر خطورة."

الفرق: المطالبة الثانية تعطي النطاق الكامل وحواجز الأمان وتوقعات التشغيل الجاف؛ يمكن تشغيل الإخراج بأمان.

الأخطاء الشائعة

  • تشغيل البرنامج النصي دون قراءته. يؤدي حذف/نقل الصفوف بشكل خاص إلى كارثة.
  • عدم التحقق من المتغيرات الفارغة. الكارثة الكلاسيكية لحذف الدليل الجذر باستخدام rm -rf "$X"/.
  • تخطي `set -euo Pipefail` / `-ErrorAction Stop`. تنطلق خطوة، ويستمر السيناريو بشكل أعمى.
  • تضمين السر في البرنامج النصي. تسرب مستمر إلى Git.
  • عملية مدمرة دون التشغيل الجاف. أولاً "أرني ما يجب أن أفعله"، ثم افعله.
  • إجراء المحاولة الأولى في همز. التشغيل بدون بيئة اختبار معزولة.

في ملخص

DevOps هو فن الأتمتة؛ يتم تفويض العمل المتكرر إلى البرامج النصية Bash وPython وPowerShell. يعد الذكاء الاصطناعي مفيدًا جدًا في صياغة البرامج النصية وتصحيح الأخطاء وترجمة اللغات - ولكن يجب أن يتضمن البرنامج النصي الآمن أدوات حماية من الأخطاء مثل set -euo Pipefail، والتحقق من المتغيرات الخالية، ووضع التشغيل الجاف، والسر المضمن، والتسجيل. تقع على عاتقك مسؤولية قراءة كل برنامج نصي واختباره، خاصة تلك التي تحتوي على أوامر مدمرة، في بيئة معزولة والتشغيل التجريبي أولاً.

مهمة التطبيق

اختر مهمة متكررة (أرشفة السجل، النسخ الاحتياطي، التنظيف). (1) اطلب من الذكاء الاصطناعي إنشاء برنامج نصي محمي باستخدام قالب "Secure Bash script". (2) قم بالتحقق من أمان البرنامج النصي نفسه مثل قالب "وصف البرنامج النصي/تدقيقه" وابحث عن السطر الأكثر خطورة الذي قام الذكاء الاصطناعي بوضع علامة عليه. (3) تحقق من سلوكه عن طريق تشغيل البرنامج النصي باستخدام ملفات نموذجية في مجلد اختبار، أولاً باستخدام --dry-run.

قائمة مرجعية

  • [ ] كتبت المهمة التي لا أريدها، نظام التشغيل/الصدفة وحواجز الحماية الأمنية.
  • [ ] يحتوي البرنامج النصي على خطأ في التوقف مثل set -euo Pipefail / -ErrorAction Stop.
  • [ ] أضفت متغيرًا فارغًا وتحقق من الإدخال قبل الحذف/النقل.
  • [ ] توجد آلية --dry-run/confirmation للعمليات التدميرية.
  • [ ] لا يوجد سر مضمن في البرنامج النصي؛ القيم تأتي من متغير البيئة/الحالة.
  • [ ] لقد أجريت الاختبار الأول في بيئة اختبار معزولة مع التشغيل الجاف.