الفرق بين المراجعتين لصفحة: «Bash/shell initialization files»

من موسوعة حسوب
مراجعة 4: تعديل الروابط
مراجعة 5: تصحيح ترجمة sourcing
سطر 198: سطر 198:
'''شكل 3.1 : محثات مختلفة لكل مستخدم.'''
'''شكل 3.1 : محثات مختلفة لكل مستخدم.'''
[[ملف:prompts.png|وصلة=https://wiki.hsoub.com/%D9%85%D9%84%D9%81:prompts.png|بديل=صدفة bash بها أمثلة لبيان اختلاف محث المستخدم العادي عن المستخدم الجذر|مركز]]
[[ملف:prompts.png|وصلة=https://wiki.hsoub.com/%D9%85%D9%84%D9%81:prompts.png|بديل=صدفة bash بها أمثلة لبيان اختلاف محث المستخدم العادي عن المستخدم الجذر|مركز]]
تُنفَّذ أغلب برامج bash في بيئات خاصة حيث لا تكتسب العمليات الفرعية المتغيرات إلا إن صُدِّرت من قِبَل الصدفة الأم. كذلك فإن تصدير الملف (sourcing) الذي يحتوي أوامر الصدفة هو إحدى طرق تطبيق التعديلات على بيئتك وضبط المتغيرات في الصدفة الحالية.
تُنفَّذ أغلب برامج bash في بيئات خاصة حيث لا تكتسب العمليات الفرعية المتغيرات إلا إن جعلتها الصدفة الأم مصدرًا (sourcing). كذلك فإن جعل الملف الذي يحتوي أوامر الصدفة مصدرًا هو إحدى طرق تطبيق التعديلات على بيئتك وضبط المتغيرات في الصدفة الحالية.


ويشرح ذلك المثال أيضًا استخدام المحثات المختلفة لكل مستخدم، وفي الحالة التي لدينا فإن علامة <code>#</code> تعني أنك الآن في طور المستخدم الجذر، فيجب أن تحذر من كل أمر تدخله إذ أن الجهاز لن يتردد في تنفيذه حتى لو عنى ذلك تدمير ملفات من صلب النظام، على عكس محث <code>$</code> الخاص بالمستخدم العادي الذي له صلاحيات محدودة في تنفيذ الأوامر التي يدخلها.
ويشرح ذلك المثال أيضًا استخدام المحثات المختلفة لكل مستخدم، وفي الحالة التي لدينا فإن علامة <code>#</code> تعني أنك الآن في طور المستخدم الجذر، فيجب أن تحذر من كل أمر تدخله إذ أن الجهاز لن يتردد في تنفيذه حتى لو عنى ذلك تدمير ملفات من صلب النظام، على عكس محث <code>$</code> الخاص بالمستخدم العادي الذي له صلاحيات محدودة في تنفيذ الأوامر التي يدخلها.

مراجعة 11:33، 6 سبتمبر 2018

ملفات الإعدادات على مستوى النظام System-wide Configuration files

etc/profile/

تقرأ Bash التعليمات الموجودة في etc/profile/ إن استدعيْت بشكل تفاعلي عبر خيار login-- أو إن استدعيْت كـ sh ، تضبط تلك التعليمات عادة المتغيرات PATH - USER - MAIL - HOSTNAME - HISTSIZE ، وهي متغيرات تابعة للصدفة.

كذلك تُضبط قيمة umask في etc/profile/ على بعض الأنظمة، أما في بعضها الآخر فإن هذا الملف يحتوي على موجّهات (pointers) لملفات الإعدادات الأخرى مثل:

  • ملف etc/inputrc/ ، وهو ملف تهيئة على مستوى النظام لأمر readline، حيث يمكنك تهيئة أسلوب الجرس (bell style) لسطر الأوامر.
  • مجلد etc/profile.d/ ، وهو يحتوي الملفات التي تضبط سلوك برامج محددة على مستوى النظام.

يجب أن تكون كل الإعدادات التي تريد تطبيقها على جميع المستخدمين في النظام لديك موجودة في ذلك الملف -etc/profile/-، وقد يكون شكله مشابهًا لما يلي:

# /etc/profile

# System wide environment and startup programs, for login setup

PATH=$PATH:/usr/X11R6/bin

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

# Keyboard, bell, display style: the readline config file:
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
    INPUTRC=/etc/inputrc
fi

PS1="\u@\h \W"

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1

# Source initialization files for specific programs (ls, vim, less, ...)
for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        . $i
    fi
done

# Settings for program initialization
source /etc/java.conf
export NPX_PLUGIN_PATH="$JRE_HOME/plugin/ns4plugin/:/usr/lib/netscape/plugins"

PAGER="/usr/bin/less"

unset i

ويضبط ملف التهيئة ذاك بعض متغيرات الصدفة الأساسية إضافة إلى بعض المتغيرات التي يطلبها أي مستخدم يشغّل جافا أو أي تطبيقات جافا في متصفحه. انظر المتغيرات في Bash.

انظر البُنى الشرطية في Bash للمزيد عن عبارة if الشرطية التي استُخدمت في المثال السابق، و المهام التكرارية في Bash الذي يناقش الحلقات التكرارية مثل for.

يحتوي مصدر Bash على نماذج لملفات profile من أجل الاستخدام العام أو الفردي، وتمر تلك الملفات -والملف في المثال بالأعلى- على عدة تغييرات قبل استخدامها في بيئتك.

etc/bashrc/

ربما يكون من الأفضل أن تضع الملفات الخاصة بتهيئة Bash في هذا الملف إن كنت تعمل على أنظمة بها أنواعًا مختلفة من الصدفات، ذلك أن الصدفات الأخرى -صدفة بورن مثلًا- تقرأ ملف etc/profile/.

ويمكن تلافي حدوث الأخطاء التي تولّدها الصدفات التي لا تفهم البنية اللغوية (syntax) لصدفة bash بفصل ملفات الإعدادات (configuration files) للأنواع المختلفة من الصدفات، ويشير ملف bashrc./~ الخاص بالمستخدم في تلك الحالات إلى etc/bashrc/ من أجل تضمينه في عملية تهيئة الصدفة (shell initialization) عند تسجيل الدخول.

قد تجد أن ملف etc/profile/ الموجود في نظامك لا يحتوي إلا على إعدادات بيئة الصدفة وإعدادات بدء تشغيل البرنامج، بينما يحتوي etc/bashrc/ على تعريفات على مستوى النظام (system-wide definitions) لدوال الصدفة وأوامرها البديلة. أيضًا قد يشار إلى ملف etc/bashrc/ داخل ملف etc/profile/ أو في ملفات تهيئة الصدفة الخاصة بالمستخدم.

يحتوي المصدر على نماذج لملفات bashrc، كما ستجد نسخة منه في usr/share/doc/bash-2.05b/startup-files/ . إليك جزءًا مما يكون في ملف bashrc الذي يأتي مع توثيق Bash:

alias ll='ls -l'
alias dir='ls -ba'
alias c='clear'
alias ls='ls --color'

alias mroe='more'
alias pdw='pwd'
alias sl='ls --color'

pskill()
{
    local pid

    pid=$(ps -ax | grep $1 | grep -v grep | gawk '{ print $1 }')
    echo -n "killing $1 (process $pid)..."
    kill -9 $pid
    echo "slaughtered."
}

وهو يحتوي على أوامر بديلة (aliases) مفيدة إضافة إلى الأوامر البديلة العامة، إذ أنها تضمن تنفيذ الأمر الذي تدخله حتى لو أخطأت في تهجئته، انظر إنشاء الأوامر البديلة وحذفها. يحتوي هذا الملف أيضًا على دالة pskill، انظر الدوال في Bash لمزيد من الشرح عن الدوال.

ملفات إعدادات المستخدم

لا أجد تلك الملفات على حاسوبي!؟

قد لا تجد تلك الملفات في مجلد المنزل (home) لديك، فأنشئها بنفسك إن كانت غير موجودة.

bash_profile./~

يفضّل استخدام هذا الملف في حالة إعداد البيئات لكل مستخدم على حدة، وللمستخدمين هنا أن يضيفوا خيارات إضافية أو يغيروا الإعدادات الافتراضية:

hsoub~> cat .bash_profile
#################################################################
#                                                               #
#   .bash_profile file                                          #
#                                                               #
#   Executed from the bash shell when you log in.               #
#                                                               #
#################################################################

source ~/.bashrc
source ~/.bash_login
case "$OS" in
  IRIX)
    stty sane dec
    stty erase
    ;;
#  SunOS)
#    stty erase
#    ;;
  *)
    stty sane
    ;;
esac

يضبط هذا المستخدم -صاحب الإعدادات أعلاه- زر backspace لتسجيل الدخول على أنظمة تشغيل مختلفة، وإضافة إلى ذلك فإن ملفات bashrc. وbash_login. الخاصة بالمستخدم قد قُرِأت.

bash_login./~

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

#######################################################################
#                                                                     #
#   Bash_login file                                                   #
#                                                                     #
#   commands to perform from the bash shell at login time             #
#   (sourced from .bash_profile)                                      #
#                                                                     #
#######################################################################
#   file protection
umask 002       # all to me, read to group and others
#   miscellaneous
w
cal `date +"%m"` `date +"%Y"`

وسيُقرأ هذا الملف في غياب bash_profile./~ .

profile./~

يُقرأ ملف profile./~ في غياب ملفي bash_profile./~ و bash_login./~ ، وقد يحتوي هذا الملف على نفس الإعدادات التي -في تلك الحالة- تستطيع الصدفات الأخرى الوصول إليها. لاحظ أن تلك الصدفات قد لا تفهم البنية اللغوية لصدفة bash .

bashrc./~

من المعتاد الآن أن ترى صدفة non-login بسبب تسجيل المستخدم للدخول من الواجهات الرسومية، ولا يُدخل المستخدم بياناته في تلك الحالة -اسم المستخدم وكلمة المرور- فلا تتم عملية المصادقة، وعندها تبحث Bash عن ملف bashrc./~، لذا فإن ذلك الملف يشار إليه في الملفات المقروءة عند تسجيل الدخول مما يعني أنك لا تحتاج إلى إدخال نفس الإعدادات في عدة ملفات.

وفي المثال التالي لملف bashrc. لمستخدم ما، تجد أنه قد حُدِّدت بعض الأوامر البديلة وضُبطَت متغيرات لبرامج محددة، بعد قراءة ملف etc/bashrc/ :

hsoub ~> cat .bashrc
# /home/franky/.bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
       . /etc/bashrc

fi

# shell options

set -o noclobber

# my shell variables

export PS1="\[\033[1;44m\]\u \w\[\033[0m\] "
export PATH="$PATH:~/bin:~/scripts"

# my aliases

alias cdrecord='cdrecord -dev 0,0,0 -speed=8'
alias ss='ssh octarine'
alias ll='ls -la'

# mozilla fix

MOZILLA_FIVE_HOME=/usr/lib/mozilla
LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins
MOZ_DIST_BIN=/usr/lib/mozilla
MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin
export MOZILLA_FIVE_HOME LD_LIBRARY_PATH MOZ_DIST_BIN MOZ_PROGRAM

# font fix
alias xt='xterm -bg black -fg white &'

# BitchX settings
export IRCNAME="frnk"

# THE END
hsoub ~>

ستجد أمثلة أكثر في حزمة Bash، وتذكر أن نماذج الملفات الموجودة قد تحتاج إلى تعديلات قبل استخدامها من أجل أن تعمل في بيئتك.

bash_logout./~

يحتوي هذا الملف على تعليمات محددة لإجراء تسجيل الخروج، وفي المثال التالي فإنها تعليمة واحدة "clear" لتترك النافذة خالية بعد إغلاقها، ومثل ذلك الأمر مفيد في الاتصالات عن بعد (remote connections):

hsoub ~> cat .bash_logout
#######################################################################
#                                                                     #
#   Bash_logout file                                                  #
#                                                                     #
#   commands to perform from the bash shell at logout time            #
#                                                                     #
#######################################################################
clear
hsoub ~>

تغيير ملفات إعدادات الصدفة

يجب أن يعاود المستخدم الاتصال بالنظام عند تعديل أي من الملفات التي ذكرناها بالأعلى من أجل تفعيل تلك التعديلات، أو كطريقة أخرى يستخدم أمر source على الملف الذي عدّله، وتُطبَّق التعديلات على جلسة الصدفة الحالية عند تفسير برنامج bash بتلك الطريقة:

شكل 3.1 : محثات مختلفة لكل مستخدم.

صدفة bash بها أمثلة لبيان اختلاف محث المستخدم العادي عن المستخدم الجذر

تُنفَّذ أغلب برامج bash في بيئات خاصة حيث لا تكتسب العمليات الفرعية المتغيرات إلا إن جعلتها الصدفة الأم مصدرًا (sourcing). كذلك فإن جعل الملف الذي يحتوي أوامر الصدفة مصدرًا هو إحدى طرق تطبيق التعديلات على بيئتك وضبط المتغيرات في الصدفة الحالية.

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

لاحظ أن source resourcefile هو نفسه resourcefile. .

في حال اشتبهت عليك تلك الإعدادات الكثيرة ورأيت إعدادات لا تعرف أين أصلها، فاستخدم أمر echo تمامًا كما تفعل من أجل تنقيح برامج bash (انظر تنقيح أجزاء من برامج Bash)، فمثلًا يمكنك إضافة سطر مثل هذا:

echo "Now executing .bash_profile.."

أو

echo "Now setting PS1 in .bashrc:"
export PS1="[some value]"
echo "PS1 is now set to $PS1"

انظر أيضًا

مصادر