كيفية استخدام رموز خروج Linux لاستكشاف نظام Linux الخاص بك

تعد رموز الخروج ، المعروفة أيضًا باسم رموز الإرجاع أو حالات الخروج ، إشارات رقمية أن البرنامج أو الأمر أو البرنامج النصي الذي يرسله إلى نظام التشغيل (أو عملية الاتصال) عند الانتهاء من التشغيل. لا تحتاج إلى الحفر من خلال ملفات السجل الطويلة المحتملة لتشخيص الفشل – غالبًا ما يوفر رمز الخروج فكرة سريعة عن طبيعة المشكلة.
إن الاتفاقية المقبولة عالميًا هي أنه عندما يتم تشغيل البرنامج بنجاح ، فإنه يعيد رمز خروج 0. أي رقم آخر ، عادةً ضمن النطاق القياسي من 1 إلى 255 ، يشير إلى أن هناك خطأ ما.
أبسط طريقة للتحقق من رمز الخروج من آخر أمر مقدمة تم تنفيذه في قذائف تشبه UNIX (مثل Bash أو ZSH) هي عن طريق فحص متغير القشرة الخاصة $?
. على سبيل المثال ، قم أولاً بتشغيل أي أمر ثم تحقق من رمز الخروج الخاص به:
ls /nonexistent_directory
echo $?
الصدى $?
يعرض الأمر رمز الخروج العددي المخزن في $?
عامل. إذا رأيت 0 ، فهذا يعني الانتهاء من الأمر السابق بنجاح. تشير قيمة غير صفرية مثل 1 أو 2 أو 127 إلى وجود خطأ ، ويقدم الرقم المحدد فكرة عن نوع المشكلة-ربما ملف مفقود أو دليل غير موجود أو أذونات غير كافية.
تصحيح البرنامج النصي الخاص بك مع رموز الخروج
تعتبر رموز الخروج مفيدة بشكل خاص عند كتابة نصوص الصدفة. إنها تساعد البرنامج النصي الخاص بك في تحديد ما إذا كان هناك شيء ما صواب أم خطأ ، مما يسمح له بتحديد ما يجب القيام به بعد ذلك.
فيما يلي مثال بسيط يقوم بنسخ ملف إلى مجلد النسخ الاحتياطي ويبلغ ما إذا كانت النسخة ناجحة:
#!/bin/bash
# Try to copy the file
cp important_file.txt backup/# Check if the copy was successful using the exit code ($? holds the exit code from the last command)
if [ $? -eq 0 ]; then
echo "Backup successful!"
else
echo "Backup failed with exit code $?"
exit 1 # Exit the script with an error code to indicate something went wrong.
fi
عندما cp
يعمل الأمر ، ويعيد رمز الخروج. رمز الخروج من 0 يعني كل شيء سار بسلاسة. إذا لم يكن الرمز 0 ، فقد حدث خطأ ما – ويطبع البرنامج النصي رسالة خطأ ويخرج برمز 1.
تعيين رموز الخروج الخاصة بك
بالإضافة إلى التحقق من رموز الخروج من الأوامر ، يمكنك تحديد رموز الخروج الخاصة بك للإشارة إلى أنواع مختلفة من الأخطاء. هذه الممارسة تجعل البرامج النصية الخاصة بك أكثر إفادة ، مما يسمح لأي شخص يستخدمها بفهم نوع المشكلة التي حدثت بالضبط.
النظر في هذا البرنامج النصي:
#!/bin/bash
# Verify that an argument (filename) is provided.
if [ -z "$1" ]; then
echo "Usage: $0 <filename>"
exit 1 # Exit code 1 indicates that no argument was provided.
fi# Check if the file provided as the first argument exists.
if [ ! -f "$1" ]; then
echo "Error: File not found"
exit 2 # Custom exit code 2 indicates that the file was not found.
fi
إذا قام شخص ما بتشغيل البرنامج النصي الخاص بك ، وفشل ، فيمكنه الرجوع إلى رمز الخروج لتحديد الخطأ الدقيق. في هذا المثال ، يشير رمز الخروج 1 إلى أن المستخدم لم يقدم وسيطة مطلوبة ، بينما يشير رمز الخروج 2 بشكل صريح إلى أنه لم يتم العثور على الملف. يكون هذا النهج المنظم مفيدًا بشكل خاص عندما يكون البرنامج النصي الخاص بك جزءًا من نظام أكبر أو عندما يعتمد برنامج نصي آخر على إخراجه.
قائمة رموز الخروج الشائعة
على الرغم من أن البرامج المختلفة يمكن أن تحدد رموز الخروج الخاصة بها ، إلا أن هناك بعض الأنماط الشائعة التي ستراها عبر العديد من أدوات خط الأوامر-خاصة في أنظمة Linux و UNIX. فيما يلي بعض من أكثرها مواجهة:
- 0: كل شيء جيد! ركض البرنامج دون أي مشاكل.
- 1: حدث خطأ ما ، لكن الخطأ ليس محددًا. هذا يشبه الصيد من رموز الخروج.
- 2: سوء استخدام الصدفة بنيت. يمكن أن يحدث هذا إذا كنت تستخدم الأمر بشكل غير صحيح ، مثل نسيان المعلمات المطلوبة.
- 126: يوجد الأمر ، لكن ليس لديك إذن لتشغيله.
- 127: الأمر غير موجود. هذا يعني أن الأمر غير موجود أو ليس في مسار النظام. تحقق مزدوج هجاء الخاص بك.
- 128: حجة خروج غير صالحة. لقد استخدمت رقمًا لا معنى له كرمز خروج.
- 130: تم إنهاء البرنامج بواسطة كنترول + ج. يحدث هذا عندما تتوقف يدويًا عن البرنامج.
- 137: حالة خارج الذاكرة (OOM).
- 255: حاول البرنامج إرجاع رمز الخروج خارج النطاق الصحيح.
بعض البرامج المحددة لها رموز الخروج الفريدة الخاصة بها. على سبيل المثال ، يعيد GREP 0 عندما يجد المطابقات ، 1 عندما لا يجد أي تطابقات ، و 2 عندما يكون هناك خطأ. أيضًا ، يمكن للمطورين استخدام أي رقم تقريبًا (عادة ما يكون 0 إلى 255 على أنظمة تشبه UNIX).
أوامر التسلسل بناءً على النجاح أو الفشل
يوفر Bash أيضًا اثنين من العوامل المفيدة &&
و ||
يتيح لك ذلك توتر أوامر معا اعتمادًا على ما إذا كان الناجح السابق قد نجح أو فشل:
- && (والمشغل): يدير الأمر التالي فقط إذا نجح النظام السابق (رمز الخروج 0).
- || (أو المشغل): يدير الأمر التالي فقط إذا فشل النظام السابق (رمز الخروج غير الصفر).
على سبيل المثال ، افترض أنك تريد إنشاء دليل ثم تغييره على الفور. إذا فشل إنشاء الدليل أو التغيير فيه لا يعمل ، فقد ترغب في عرض رسالة خطأ:
mkdir new_directory && cd new_directory || echo "Failed to create and access directory"
هنا، mkdir new_directory
يحاول إنشاء المجلد. إذا نجح ذلك ، فإن الكود يعمل على الفور cd new_directory
. إذا فشل أي خطوة ، ||
يشغل المشغل ويطبع رسالة الخطأ.
الأفكار النهائية
قد تبدو رموز الخروج بمثابة تفاصيل صغيرة ، لكنها جزء مما يجعل أدوات خط الأوامر قوية للغاية. أنها تخلق لغة مشتركة للبرامج للتواصل حول النجاح والفشل ، وهو أمر ضروري لبناء أنظمة معقدة.
إذا كنت جديدًا في عمل خط الأوامر ، فابدأ بالتعتاد على التحقق echo $?
عندما لا تتصرف الأوامر كما هو متوقع. قريباً ، ستستخدم رموز الخروج في البرامج النصية الخاصة بك وتقدير نظام الاتصالات البسيط والفعال.