متغيرات البيئة و PATH
💡 دليل التعلم: في كل مرة تكتب فيها
gitأوpythonفي الطرفية، يجب على النظام البحث عن مكان هذا البرنامج. وكلما استدعى كودك واجهة برمجة تطبيقات نموذج لغوي كبير، يحتاج البرنامج لمعرفة أي مفتاح يستخدم. كلتا المسألتين تعتمدان على نفس الآلية — متغيرات البيئة.
0. كل برنامج يحمل معه مجموعة من الإعدادات
كل برنامج قيد التشغيل يحمل مجموعة إعدادات على شكل «مفتاح=قيمة» تُسمى متغيرات البيئة. يمكن للبرنامج قراءة هذه الإعدادات في أي وقت لفهم بيئة التشغيل الحالية.
انقر على أي متغير في القائمة أدناه لـ "عرض" قيمته في الطرفية:
1. PATH: كيف يجد Shell الأوامر التي تكتبها
PATH هو متغير بيئة خاص يخزن قائمة مسارات أدلة (مفصولة بنقطتين). عند كتابة git، يمر Shell عبر هذه الأدلة بالترتيب بحثاً عن ملف تنفيذي اسمه git — ويتوقف عند إيجاد الأول.
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinاختر أمراً ولاحظ عملية البحث دليلاً بدليل:
ثلاث قواعد أساسية:
- الدليل الأقرب لبداية PATH له الأولوية الأعلى
- يتوقف عند إيجاد التطابق الأول دون إكمال البحث
- إذا لم يوجد في أي دليل ←
command not found
2. لماذا يجب إعادة تشغيل الطرفية بعد تثبيت أداة؟
عند تثبيت أدوات مثل nvm أو Homebrew أو conda، يضيف سكربت التثبيت تلقائياً سطراً في ~/.zshrc لإدراج دليله في PATH:
# محتوى يُكتب تلقائياً بواسطة سكربت التثبيت (مثال)
export PATH="/usr/local/opt/python@3.12/bin:$PATH"هذا السطر يُنفذ فقط عند بدء Shell جديد. نوافذ الطرفية المفتوحة لا تتأثر، لذا:
# بدون إعادة تشغيل يمكن جعله سارياً فوراً
source ~/.zshrcمواقف شائعة مع أدوات تطوير الذكاء الاصطناعي:
# Ollama / pipx مثبتان لكن تعطي command not found
which ollama # عرض موقع التثبيت الفعلي
# مسار أدوات CLI المثبتة بـ pip (أضف إلى PATH)
# macOS: ~/Library/Python/3.x/bin
# Linux: ~/.local/bin
export PATH="$PATH:$HOME/.local/bin"
# يُنصح باستخدام pipx لتثبيت أدوات سطر الأوامر، يدير PATH تلقائياً
pipx install aider-chat3. نطاق المتغيرات: من يمكنه رؤية هذا المتغير؟
متغيرات البيئة لا تُبث لجميع البرامج — كل عملية تمتلك نسختها الخاصة، موروثة من العملية الأصلية. تعديل نسختك لا يؤثر على العملية الأصلية.
المخطط التالي يوضح ثلاث مستويات. على "مستوى المستخدم"، صدّر متغيراً جديداً وتحقق من ظهوره على "مستوى العملية":
/etc/environment~/.zshrc4. export: يحدد ما إذا كانت العملية الفرعية يمكنها قراءة هذا المتغير
عند تعيين متغير، إضافة export أو عدم إضافتها تحدث فرقاً جوهرياً:
لجعل المتغير دائماً بين الجلسات، اكتب export في ملف التهيئة:
# macOS (zsh)
echo 'export MY_VAR="value"' >> ~/.zshrc
source ~/.zshrc # يسري فوراً دون إعادة فتح الطرفية
# Linux (bash)
echo 'export MY_VAR="value"' >> ~/.bashrc
source ~/.bashrc5. مفاتيح API: لا تكتبها أبداً في الكود
عند استدعاء واجهات برمجة التطبيقات مثل OpenAI و Anthropic و DeepSeek، المفتاح هو "هويتك + بطاقتك الائتمانية". في حالة تسربه، يمكن للآخرين استخدام حصتك وأنت تدفع الفاتورة.
الخطأ الأكثر شيوعاً هو كتابة المفتاح مباشرة في الكود:
6. التطوير المحلي: استخدم ملف .env لإدارة المفاتيح
في التطوير المحلي، ضع المفاتيح في ملف .env في جذر المشروع؛ يقرأ الكود المفاتيح عبر مكتبة dotenv. يجب إضافة .env إلى .gitignore ولا يجب رفعه أبداً إلى Git.
اكتب الإعدادات على اليمين واقرأها على اليسار — بدّل اللغة لمشاهدة كلتا الطريقتين:
7. بيئة الإنتاج: دع منصة التشغيل تحقن المفاتيح
.env هي أداة ملائمة لمرحلة التطوير. على الخوادم والمنصات السحابية، يجب أن تتحمل بيئة التشغيل مسؤولية حقن المفاتيح؛ الكود نفسه لا يحتاج لمعرفة مكان تخزينها:
8. استكشاف الأخطاء العملي
command not found
# الخطوة 1: تأكد من وجوده في PATH
which python3 # إذا ظهر ناتج فقد وُجد
# الخطوة 2: ابحث عن الموقع الفعلي للبرنامج (macOS)
brew list python | grep bin
# الخطوة 3: أضف الدليل إلى PATH
export PATH="/المسار/الموجود:$PATH"
source ~/.zshrc # تذكر source بعد الكتابة في ملف التهيئةمثبت إصداران لكنه لا يستخدم الذي أريده
which python
# /usr/bin/python ← الإصدار القديم من النظام، أقرب في PATH
# ضع دليل الإصدار الجديد في بداية PATH
export PATH="/usr/local/bin:$PATH"
which python
# /usr/local/bin/python ← الإصدار الجديد، أصبح له الأولوية الآنالمتغير معين لكن البرنامج لا يقرأه
| السبب | الحل |
|---|---|
نسيت export | أضف export وحاول مجدداً |
عدّلت ~/.zshrc لكن لم يُسري | source ~/.zshrc |
تستخدم .env لكن dotenv غير مثبت | pip install python-dotenv / npm install dotenv |
| على الخادم يعمل فقط في جلسة SSH | استخدم EnvironmentFile من systemd |
مسرد المصطلحات
| المصطلح | المعنى |
|---|---|
| PATH | يخزن قائمة الأدلة حيث يبحث Shell عن الملفات التنفيذية، مفصولة بنقطتين، الترتيب يحدد الأولوية |
| export | يحدد المتغير كقابل للتوريث؛ العمليات الفرعية تحصل تلقائياً على نسخة عند البدء |
| source | يُعيد تنفيذ ملف التهيئة في Shell الحالي، مما يجعل التغييرات سارية فوراً |
| which | يعرض مسار الملف التنفيذي المقابل لأمر (نتيجة البحث في PATH) |
| .env | ملف تهيئة محلي للمشروع، يخزن مفاتيح التطوير؛ يجب إضافته إلى .gitignore |
| .env.example | قالب بأسماء متغيرات كاملة وقيم فارغة؛ يمكن رفعه إلى Git بأمان |
| chmod 600 | صلاحيات الملف: فقط المالك يمكنه القراءة والكتابة؛ مناسب لحماية ملفات المفاتيح |
| Secret Scanner | فحص تلقائي لتسريبات المفاتيح على GitHub وغيرها؛ يُبلغ الموردين للإلغاء |