NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
AR

أوامر Linux ومهارات Shell

Bash Scripting: من 'يعمل على صندوقي' إلى الإنتاج

يكتسب Bash مكانه عندما تكون المهمة ملتصقة: تنسيق الأوامر، ومناقشة النص البسيط، والبقاء بالكامل على الصندوق. تأتي سمعتها الصناعية من الهبوط، وليس من الفكرة: يتم شحن خطوط الأنابيب غير المختبرة إلى cron على خادم حيث لم يتم تعيين متغير واحد أو يحتوي اسم ملف واحد على مسافة. النظام ميكانيكي ورخيص، ويتكون من أربعة أجزاء: الوضع الصارم، والاقتباس، والتحقق من الصدفة، والتسجيل بالطريقة التي ستقرأها العمليات لاحقًا.

النقاط الرئيسية

  • يتم فتح كل برنامج نصي جدي باستخدام set -euo Pipefail: تفشل المتغيرات غير المحددة، ويوقف فشل الأوامر البرنامج النصي، ويظهر خط الأنابيب على السطح؛ وبدونها تمر الأخطاء بصمت حتى تصل إلى مرحلة الإنتاج.
  • متغيرات الاقتباس وبدائل الأوامر: "$var" و"$(cmd)"; يعد تقسيم الكلمات على المسافات أمرًا كلاسيكيًا على الإطلاق، كما أن تلاعب IFS الذي توصي به بعض المواقع هو خطأ تختار تذكره.
  • يحدث توسيع الأقواس قبل المتغيرات: rm -rf "${CLEANUP:?}"/{a,b} مع إلغاء تعيين CLEANUP يتوسع بشكل مختلف عن المقصود ويزيل الأشياء التي كنت تنوي الاحتفاظ بها؛ إن عمليات التحقق ${VAR:?} هي لغة rm-safety التي تستحق التعلم مرة واحدة.
  • يكتسب فحص الصدفة مكانه في كل تغيير: فهو يلتقط الكرات غير المقتبسة، والتعليمات البرمجية التي لا يمكن الوصول إليها، وأنماط 'for f في $(ls)' التي تأكل أسماء الملفات بمسافات؛ قم بتشغيله في CI وتتوقف الأخطاء عن الوصول إلى cron.
  • يتم إقران العمل المؤقت والتنظيف: TMP=$(mktemp -d)، و trap 'rm -rf "$TMP"' EXIT، ولا يوجد أي دليل خدش معزول بالإضافة إلى عدم رش "إذا حدث خطأ ثم قم بإزالة" على كل فرع.
  • حلقات القراءة بالطريقة الآمنة: while IFS= read -r -d '' f يعالج أسماء الملفات بأسطر جديدة ومسافات عبر find -print0؛ "for f in $(ls)" هي أعلام فحص الأخطاء والنصوص القديمة التي لا تزال تحملها في كل مكان.
  • رموز الخروج والسجلات تتحدث إلى العمليات: فشل الصدى لـ stderr (>&2) مع اسم المرحلة، والخروج غير الصفر عند الفشل الحقيقي، ودع بريد cron أو Journald يعرض لك السطر الوحيد الذي تحتاجه بالفعل في الساعة 3 صباحًا.
  • التصعيد مبكرًا: تحليل JSON، أو ثلاثة مستويات إضافية من التداخل، أو مكالمات HTTP، أو أي منطق ذو حالة ينتمي إلى Python أو awk؛ bash عازمة على لغة ذات أغراض عامة حيث اكتسبت سمعتها.

ملاحظة ميدانية

ندبة توسيع الدعامة الخاصة بنا: rm -rf "${CLEANUP}"/{a,b} مع إلغاء تعيين CLEANUP توسعت تمامًا بالطريقة التي أرادتها الصدفة، وليس القصد. كل مسار مثل هذا يحمل الآن حارس ${VAR:?}، ولم يدفع أحد هذه الفاتورة مرتين.

أسئلة شائعة

#!/bin/bash أو #!/usr/bin/env bash؟

يفوز env عبر الحاويات وعمليات تثبيت macOS حيث يعيش bash في مكان آخر؛ إن Shebang أقل أهمية من وجود فشل الأنابيب set -euo فعليًا والتحقق من مرور كل تغيير.

يعمل البرنامج النصي الخاص بي يدويًا ولكنه يفشل في cron. لماذا؟

يعمل Cron في بيئة مجردة: PATH قصير، ولا يوجد ملف تعريف لتسجيل الدخول، والمسارات النسبية تشير إلى المنزل الخطأ. استخدم المسارات المطلقة، وقم بتعيين PATH بشكل صريح، واستمر في إعادة تشغيل bash -x لتصحيح الأخطاء.

Bash أو Python لمهام الخادم؟

Bash لخطوط الأنابيب التي تقوم في الغالب بتنسيق أدوات النظام الحالية وتظل صغيرة؛ Python للبيانات المنظمة وواجهات برمجة التطبيقات ومعالجة الأخطاء التي يجب أن تكون عند الطلب. إن إجبار bash على تشغيل Python هو الطريقة التي تحصل بها الحوادث على الأسماء.

كيف يمكنني كتابة عمليات الحذف بأمان؟

اقتبس كل متغير، واستهدف فقط المسارات التي تم إنتاجها بواسطة mktemp أو التي تم تكوينها بشكل صريح، وقم بتشغيل وضع التشغيل الجاف الذي يطبع ما سيزيله، واترك ${VAR:?} يحرس المتغيرات غير المحددة قبل أن يراها rm.

كيف تساعدك Kinetikatech في أوامر linux ومهارات shell

هذا ما نقوم به كل يوم: الأوامر وعادات البرمجة النصية التي تحدد ما إذا كان المسؤول يشغل الخادم أم يحاربه: البحث عن النصوص والعمليات وتحويلها ونقلها والإشراف عليها باستخدام الأدوات الموجودة في كل تثبيت أساسي. تغطي خدمة أمن خوادم لينكس و إدارة الخوادم ذلك من البداية إلى النهاية: التقييم والتنفيذ والمراقبة على مدار الساعة والاستجابة للطوارئ خلال 30 دقيقة.

تحدث مع مهندس

مشكلة في الخادم؟ موقع مخترق؟ موقع بطيء؟

نرد على الحالات الحرجة خلال 30 دقيقة — على مدار الساعة طوال الأسبوع.

اطلب دعم الطوارئ support@kinetikatech.com