النقاط الرئيسية
- PATH هو قائمة بالمواقع التي يتحقق منها نظام التشغيل الخاص بك عند تشغيل أمر ما، مما يسمح لك بتشغيل الملفات القابلة للتنفيذ دون تحديد موقعها الدقيق يدويًا.
- يبحث shell عن الملفات القابلة للتنفيذ في PATH بترتيب معين، بدءًا من المكونات المضمنة في shell، ثم البحث عبر الدلائل المدرجة من اليسار إلى اليمين.
- يمكنك إضافة الدلائل إلى PATH باستخدام أمر التصدير، إما مؤقتًا أو بشكل دائم عن طريق تحرير ملفات .bashrc أو .profile. فقط احرص على عدم إضافة علامة النقطتين الأولى لتجنب المخاطر الأمنية.
PATH
يعد هذا أحد المتلاعبين الصامتين في خلفية جهاز الكمبيوتر الذي يعمل بنظام Linux. فهو يؤثر بهدوء على تجربة المستخدم الخاصة بك، ولكن لا يوجد شيء مشبوه بشأنه. سنشرح ما يفعله وكيف يمكنك تعديله.
ما هو PATH على Linux، وكيف يعمل؟
إن مسارك هو عبارة عن قائمة بالمواقع التي سيتحقق منها نظام التشغيل الخاص بك في أي وقت تحاول فيه تشغيل أمر ما. إذا كان الملف القابل للتنفيذ الذي تحاول تشغيله موجودًا في مجلد مضمن في مسارك، فيمكن تشغيل الملف القابل للتنفيذ دون تحديد موقعه الدقيق يدويًا، حيث إن نظام التشغيل الخاص بك يعرف مكانه بالفعل.
إذن كيف يعمل هذا الأمر فعليا من الناحية الوظيفية؟
عندما تكتب أمرًا في نافذة المحطة الطرفية وتضغط على مفتاح الإدخال، فأنت تبدأ قدرًا كبيرًا من النشاط قبل أن يتم تنفيذ الأمر حتى.
سحق هو الغلاف الافتراضي في أغلب توزيعات لينكس. فهو يفسر سطر النص الذي أدخلته ويحدد أسماء الأوامر المختلطة بالمعلمات والأنابيب إعادة التوجيه، وأي شيء آخر موجود هناك. ثم يقوم بتحديد الملفات الثنائية القابلة للتنفيذ لتلك الأوامر وتشغيلها بالمعلمات التي قدمتها.
الخطوة الأولى التي تتخذها shell لتحديد موقع الملف القابل للتنفيذ هي تحديد ما إذا كان هناك ملف ثنائي متضمنًا. إذا كان الأمر الذي تستخدمه موجودًا داخل shell نفسه (ملف ثنائي) “shell مدمج”) لا حاجة لمزيد من البحث.
تعتبر عناصر Shell المدمجة هي الأسهل في العثور عليها لأنها جزء لا يتجزأ من Shell. الأمر أشبه بوجودها في حزام الأدوات — فهي معك دائمًا.
إذا كنت بحاجة إلى إحدى أدواتك الأخرى، فعليك أن تبحث في الورشة للعثور عليها. هل هي على طاولة العمل الخاصة بك أم معلقة على الحائط؟ هذا ما تبحث عنه. PATH
متغير البيئة يقوم بذلك. فهو يحتوي على قائمة بالأماكن التي تبحث فيها shell والترتيب الذي سيتم البحث فيه.
إذا كنت تريد معرفة ما إذا كان الأمر هو shell مدمج، أو اسم مستعار، أو وظيفة، أو ملف ثنائي مستقل mv /work/unfile، يمكنك استخدام type
الأمر كما هو موضح أدناه:
type clear
type cd
هذا يخبرنا أن clear
هو ملف ثنائي، والملف الأول الموجود في المسار يقع في /usr/bin
قد يكون لديك أكثر من إصدار واحد من clear
تم تثبيته على جهاز الكمبيوتر الخاص بك، ولكن هذا هو ما سيحاول shell استخدامه.
ومن غير المستغرب، cd
هو غلاف مدمج.
كيفية إدراج مسارك
من السهل رؤية ما يوجد في طريقك. ما عليك سوى كتابة ما يلي لاستخدام echo
يأمر وطباعة القيمة عقدت في $PATH
عامل:
echo $PATH
المخرج هو قائمة من النقطتين (:
) مواقع نظام الملفات المحددة. يبحث shell من اليسار إلى اليمين عبر المسار، ويتحقق من كل موقع نظام ملفات للعثور على ملف قابل للتنفيذ مطابق لتنفيذ الأمر الخاص بك.
يمكننا اختيار طريقنا عبر القائمة لرؤية مواقع نظام الملفات التي سيتم البحث فيها، والترتيب الذي سيتم البحث فيه:
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
قد لا يكون من الواضح على الفور أن عملية البحث لا تبدأ في دليل العمل الحالي. بل إنها تنتقل عبر الدلائل المدرجة، والدلائل المدرجة فقط.
إذا لم يكن دليل العمل الحالي موجودًا في مسارك، فلن يتم البحث فيه. أيضًا، إذا كانت لديك أوامر مخزنة في أدلة ليست في المسار، فلن يتمكن shell من العثور عليها.
ولإثبات ذلك، قمنا بإنشاء برنامج صغير يسمى rf
. عند التنفيذ، rf
يطبع اسم الدليل الذي تم تشغيله منه في نافذة المحطة الطرفية. وهو موجود في /usr/local/bin
لدينا أيضًا إصدارًا أحدث في /dave/work
دليل.
نكتب ما يلي which
يأمر لإظهار لنا أي إصدار من برنامجنا سوف تجد القشرة وتستخدم:
which rf
يقوم shell بإبلاغ أن الإصدار الذي وجده هو الإصدار الموجود في الدليل الموجود في المسار.
نكتب ما يلي لتشغيله:
rf
الإصدار 1.0 من rf
يعمل ويؤكد صحة توقعاتنا. الإصدار الذي تم العثور عليه وتنفيذه موجود في /usr/local/bin
.
لتشغيل أي إصدار آخر من rf
على هذا الكمبيوتر، سيتعين علينا استخدام المسار إلى الملف القابل للتنفيذ على سطر الأوامر، كما هو موضح أدناه:
./work/rf
الآن بعد أن أخبرنا الغلاف عن مكان العثور على الإصدار rf
نريد تشغيله، فهو يستخدم الإصدار 1.1. إذا فضلنا هذا الإصدار، فيمكننا نسخه إلى /usr/local/bin
الدليل واستبدال الدليل القديم.
لنفترض أننا نقوم بتطوير إصدار جديد من rf
سوف نحتاج إلى تشغيله بشكل متكرر أثناء تطويره واختباره، ولكننا لا نريد نسخ إصدار تطوير غير مُصدر إلى البيئة المباشرة.
أو ربما قمنا بتنزيل إصدار جديد من rf
ونريد أن نجري بعض اختبارات التحقق عليه قبل أن نجعله متاحًا للعامة.
إذا أضفنا دليل العمل الخاص بنا إلى المسار، فإننا نجعل الغلاف يبحث عن إصدارنا. وهذا التغيير لن يؤثر علينا إلا نحن — سيظل الآخرون يستخدمون إصدار rf
في /usr/local/bin
.
أضف دليلاً إلى PATH الخاص بك
يمكنك استخدام export
أمر إلى إضافة دليل الى PATH
. يتم بعد ذلك تضمين الدليل في قائمة مواقع نظام الملفات التي يبحث عنها shell. عندما يجد shell ملفًا قابلاً للتنفيذ مطابقًا، فإنه يتوقف عن البحث، لذا يجب التأكد من أنه يبحث في الدليل الخاص بك أولاً، قبل /usr/local/bin
.
من السهل القيام بذلك. في مثالنا، نكتب ما يلي لإضافة الدليل الخاص بنا إلى بداية المسار حتى يصبح الموقع الأول الذي يتم البحث فيه:
export PATH=/home/dave/work:$PATH
هذا الأمر يحدد $PATH
لكي يكون مساويًا للدليل الذي نضيفه، /home/dave/work
، ومن ثم المسار الحالي بأكمله.
الأول PATH
ليس له علامة الدولار ($
). لقد حددنا القيمة لـ PATH
. النهائي $PATH
يوجد علامة الدولار لأننا نشير إلى المحتويات المخزنة في PATH
متغير. لاحظ أيضًا النقطتين (:
) بين الدليل الجديد و $PATH
اسم المتغير.
دعونا نرى كيف يبدو المسار الآن:
echo $PATH
ملكنا /home/dave/work
تمت إضافة الدليل إلى بداية المسار. تفصله العلامة النقطية التي قدمناها عن بقية المسار.
نكتب ما يلي للتحقق من إصدارنا rf
هو أول واحد تم العثور عليه:
which rf
الدليل في الحلوى يجري rf
كما هو موضح أدناه:
rf
يجد shell الإصدار 1.1 وينفذه من /home/dave/work
.
لإضافة الدليل الخاص بنا إلى نهاية المسار، علينا فقط نقله إلى نهاية الأمر، كما يلي:
export PATH=$PATH:/home/dave/work
كيفية إضافة شيء ما إلى PATH بشكل دائم
مثل بيث بروك-مارسينياك قال “النجاح أمر جيد، لكن النجاح عابر”. في اللحظة التي تغلق فيها نافذة المحطة الطرفية، سيتم حذف أي تغييرات أجريتها على $PATH
لقد ولت. ولجعلها دائمة، عليك أن تضع export
الأمر في ملف التكوين.
عندما تضع export
الأمر في الخاص بك .bashrc
الملف، فهو يحدد المسار في كل مرة تفتح فيها نافذة المحطة الطرفية. على عكس SSH
الجلسات، والتي يتعين عليك تسجيل الدخول إليها، تسمى جلسات “تفاعلية”.
في الماضي، كنت تضع export
الأمر في الخاص بك .profile
ملف لتعيين المسار لتسجيل الدخول إلى جلسات المحطة الطرفية.
ومع ذلك، وجدنا أنه إذا وضعنا export
الأمر في أي منهما .bashrc
أو .profile
الملفات، فقد تم تعيين المسار بشكل صحيح لكل من جلسات المحطة الطرفية التفاعلية وجلسات تسجيل الدخول. قد تكون تجربتك مختلفة. للتعامل مع كافة الاحتمالات، سنوضح لك كيفية القيام بذلك في كلا الملفين.
استخدم الأمر التالي في جهازك /home
دليل لتحرير .bashrc
ملف:
gedit .bashrc
ال gedit
يفتح المحرر بـ .bashrc
تم تحميل الملف.
انتقل إلى أسفل الملف، ثم أضف أمر التصدير التالي الذي استخدمناه سابقًا:
export PATH=/home/dave/work:$PATH
احفظ الملف. بعد ذلك، إما أن تغلق نافذة المحطة الطرفية ثم تعيد فتحها أو تستخدم dot
أمر لقراءة .bashrc
الملف على النحو التالي:
. .bashrc
ثم اكتب ما يلي echo
الأمر للتحقق من المسار:
echo $PATH
وهذا يضيف /home/dave/work
الدليل إلى بداية المسار.
عملية إضافة الأمر إلى .profile
الملف هو نفسه. اكتب الأمر التالي:
gedit .profile
ال gedit
يبدأ المحرر بـ .profile
تم تحميل الملف.
أضف export
الأمر إلى أسفل الملف، ثم احفظه. إن إغلاق نافذة طرفية جديدة وفتحها لا يكفي لإجبار .profile
الملف المراد إعادة قراءته. لكي تسري الإعدادات الجديدة، يجب عليك تسجيل الخروج ثم تسجيل الدخول مرة أخرى أو استخدام dot
الأمر كما هو موضح أدناه:
. .profile
تحديد المسار للجميع
لتعيين المسار لكل من يستخدم النظام، يمكنك تحرير /etc/profile
ملف.
سوف تحتاج إلى استخدام sudo
على النحو التالي:
sudo gedit /etc/profile
عندما gedit
عند تشغيل المحرر، قم بإضافة أمر التصدير إلى أسفل الملف.
احفظ الملف وأغلقه. ستسري التغييرات على الآخرين في المرة التالية التي يقومون فيها بتسجيل الدخول.
ملاحظة حول الأمن
تأكد من عدم إضافة علامة القولون الرئيسية عن طريق الخطأ:
“إلى المسار كما هو موضح أدناه.
إذا قمت بذلك، فسيؤدي هذا إلى البحث في الدليل الحالي أولاً، مما يعرضك لمخاطر أمنية. لنفترض أنك قمت بتنزيل ملف أرشيف وفككت ضغطه في دليل. ثم تنظر إلى الملفات وترى ملفًا مضغوطًا آخر. ثم تستدعي الأمر unzip مرة أخرى لاستخراج هذا الأرشيف.
إذا كان الأرشيف الأول يحتوي على ملف قابل للتنفيذ يسمى unzip
كان هذا ملفًا تنفيذيًا ضارًا، وقد قمت بتشغيله عن طريق الخطأ بدلاً من الملف الحقيقي unzip
يمكن أن يحدث هذا لأن shell سيبحث في الدليل الحالي أولاً.
لذا، كن دائمًا حذرًا عند كتابة export
الأوامر. استخدم echo
$PATH لمراجعتها والتأكد من أنها بالطريقة التي تريدها أن تكون.