تشغيل باش بالتفصيل

إذا عثرت على هذه الصفحة أثناء البحث، فمن المحتمل أنك تحاول حل بعض المشكلات أثناء تشغيل bash.

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

على أية حال، الهدف من هذه المذكرة هو توضيح الإجراء الخاص ببدء تشغيل bash بأبسط ما يمكن حتى تتمكن من التعامل مع المشكلات.

Диаграмма

يلخص هذا المخطط الانسيابي جميع العمليات عند تشغيل bash.

تشغيل باش بالتفصيل

الآن دعونا نلقي نظرة فاحصة على كل جزء.

تسجيل الدخول شل؟

تحتاج أولاً إلى اختيار ما إذا كنت في غلاف تسجيل الدخول أم لا.

غلاف تسجيل الدخول هو الغلاف الأول الذي تدخله عند تسجيل الدخول لجلسة تفاعلية. لا يتطلب غلاف تسجيل الدخول اسم مستخدم وكلمة مرور. يمكنك فرض بدء تشغيل Shell تسجيل الدخول عن طريق إضافة علامة --login عندما دعا bashعلى سبيل المثال:

باش --تسجيل الدخول

تقوم قذيفة تسجيل الدخول بإعداد البيئة الأساسية عند بدء تشغيل bash shell لأول مرة.

تفاعلية؟

ثم عليك تحديد ما إذا كانت الصدفة تفاعلية أم لا.

ويمكن التحقق من ذلك من خلال وجود المتغير PS1 (يقوم بتثبيت وظيفة إدخال الأوامر):

إذا [ "${PS1-}"]؛ ثم صدى تفاعلي وإلا صدى غير تفاعلي

أو معرفة ما إذا تم تعيين الخيار -i، باستخدام متغير واصلة خاصة - في باش، على سبيل المثال:

$صدى$-

إذا كان هناك رمز في الإخراج i، فالصدفة تفاعلية.

في قذيفة تسجيل الدخول؟

إذا كنت في واجهة تسجيل الدخول، فسيبحث bash عن الملف /etc/profile ويعمل إذا كان موجودا.

ثم يبحث عن أي من هذه الملفات الثلاثة بالترتيب التالي:

~/.bash_profile ~/.bash_login ~/.profile

عندما يجد واحدة، فإنه يبدأ ويتخطى الآخرين.

في قذيفة تفاعلية؟

إذا كنت في Shell غير لتسجيل الدخول، فمن المفترض أنك كنت بالفعل في Shell لتسجيل الدخول، وتم تكوين البيئة وسيتم توريثها.

وفي هذه الحالة يتم تنفيذ الملفين التاليين بالترتيب، إن وجدا:

/etc/bash.bashrc ~/.bashrc

لا خيار؟

إذا لم تكن في غلاف تسجيل الدخول أو الصدفة التفاعلية، فستكون البيئة الخاصة بك فارغة بالفعل. وهذا يسبب الكثير من الارتباك (انظر أدناه حول وظائف cron).

في هذه الحالة ينظر باش إلى المتغير BASH_ENV بيئتك ويقوم بإنشاء الملف المقابل المحدد هناك.

الصعوبات المشتركة وقواعد الإبهام

كرون الوظائف

95% من الحالات التي أقوم فيها بتصحيح أخطاء بدء تشغيل bash يكون السبب هو أن وظيفة cron لا تعمل كما هو متوقع.

هذه المهمة اللعينة يعمل بشكل جيد عندما أقوم بتشغيله في سطر الأوامر، لكنه يفشل عندما أقوم بتشغيله في crontab.

ومن سببان:

  • وظائف كرون ليست تفاعلية.
  • على عكس البرامج النصية لسطر الأوامر، لا ترث وظائف cron بيئة الصدفة.

عادةً لن تلاحظ أو تهتم بأن نص الصدفة ليس تفاعليًا لأن البيئة ترث من الصدفة التفاعلية. وهذا يعني أن كل شيء PATH и alias تكوينها كما كنت تتوقع.

هذا هو السبب في أنه من الضروري في كثير من الأحيان تعيين محدد PATH لمهمة كرون مثل هنا:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

البرامج النصية تدعو بعضها البعض

مشكلة شائعة أخرى هي عندما يتم تكوين البرامج النصية عن طريق الخطأ للاتصال ببعضها البعض. على سبيل المثال، /etc/profile مناشدات ل ~/.bashrc.

يحدث هذا عادةً عندما يحاول شخص ما إصلاح بعض الأخطاء ويبدو أن كل شيء يعمل. لسوء الحظ، عندما تحتاج إلى فصل هذه الأنواع المختلفة من الجلسات، تنشأ مشاكل جديدة.

صورة عامل الحماية في وضع الحماية

لتجربة تشغيل الصدفة، قمت بإنشاء صورة Docker يمكن استخدامها لتصحيح أخطاء تشغيل الصدفة في بيئة آمنة.

تشغيل:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

يقع ملف Dockerfile هنا.

لفرض تسجيل الدخول ومحاكاة shell لتسجيل الدخول:

$ bash --login

لاختبار مجموعة من المتغيرات BASH_ENV:

$ env | grep BASH_ENV

لتصحيح الأخطاء crontab سيتم تنفيذ برنامج نصي بسيط كل دقيقة (في /root/ascript):

$ crontab -l
$ cat /var/log/script.log

المصدر: www.habr.com

إضافة تعليق