يشتهر سطر أوامر لينكس لأدائه العالي في أداء المهمّات، فيكفي تنفيذ أمرٍ أو اثنين لإجراء تغييراتٍ كبيرة على نظامك. بالكاد تتواجد مثل هذه الميزة على الأنظمة الأخرى مثل ويندوز، ولهذا فإنّ سطر أوامر لينكس من أوائل الأمور التي عليك تعلّمها - ولو كمدخل فقط - عند بدء استعمال لينكس.
دعنا نبدأ بشرح معنى مصطلح “صَدَفَة يونكس”. الصَدَفَة (Shell) هي مفسّر سطر الأوامر الذي يمكّن المستخدم من إدارة النظام عبر الأوامر التي يكتبها، ويمكن أن تعتبرها كقناة تواصل بينك وبين نظام التشغيل. سُميت بـ“الصَدَفَة” لأنها تجلس خارج نواة نظام التشغيل وتحيط بها تمامًا كصدفة سلطعون البحر.
لقد كان يونكس نظام تشغيل في سبعينيات القرن الماضي صادرًا عن شركة اسمها AT&T. لم يبقى يونكس نظام تشغيلٍ واحد بعد بضع سنواتٍ على إطلاقه بل صار مجموعةً من أنظمة التشغيل المختلفة التي تتبع معايير نظام يونكس وتصميمه وفلسفته. ظهرت أنظمة تشغيل أخرى مع مرور الوقت اسمها “الأنظمة الشبيهة بيونكس”؛ وهي الأنظمة التي تتبع معايير تصميم نظام يونكس وفلسفته لكنّها ليست مبنيةً عليه (أي أنها لا تستعمل نواة نظام التشغيل الخاصّة به، بل فقط معايير التصميم وفلسفة التطوير). منها نظام لينكس، وهو نظام شبيه بيونكس.
امتلك نظام يونكس في معايير تصميمه ما يُعرف بصدفة يونكس، وهي اللغة التي يكتبها المستخدم في سطر الأوامر لجعل النظام يتفاعل معه بطرقٍ مختلفة. يمكنك كتابة هذه الأوامر مباشرةً في سطر الأوامر وتنفيذها مباشرةً، أو حفظها في ملفٍ ما وتنفيذها لاحقًا، وهو ما يُعرف بالشل سكربت (Shell Script).
هناك العديد من صدفات يونكس اليوم وليس واحدة فقط، ولكل واحدةٍ منها مميزاتها وعيوبها. أشهر واحدة منها هي صدفة Bash، وهي الافتراضية تقريبًا على جميع توزيعات لينكس. غالبًا ما يكون المقصود هو أوامر باش وسكربتات باش عندما يتحدث أحدهم عن سطر أوامر لينكس.
لأنه عملي جدًا؛ يمكنك أن تفعل الكثير من الأمور في وقتٍ قصيرٍ جدًا على لينكس عبر سطر الأوامر.
يفضّل الكثير من الناس التعامل مع الواجهات الرسومية، ولكن قد لا توجد هذه الواجهات لكل شيء، وبالتالي ستضطر في بعض الأحيان إلى استخدام سطر الأوامر لتنفيذ المهام المطلوبة بأقصى سرعة ممكنة.
كما أنه يمكنك أتمتة العديد من الأشياء في حياتك بسطر الأوامر، مثل تحميل مجموعة من الملفات التي تريدها أو أخذ نسخة احتياطية عنها، أو تجميع بيانات من مختلف مواقع الويب وعرضها لك مباشرةً في الطرفية، أو جمع معلومات من مختلف أجزاء نظامك وحفظها بطريقة معينة وعرضها لك كيفما ومتى ما تشاء.
ستتمكن أيضًا من القيام بالمهام أسرع: يمكنك إعادة تسمية 10 آلاف صورة إلى اسمٍ مختلف بأمرٍ واحدٍ فقط بسطر الأوامر، كما أن تحويل ملف .avi إلى .mp4 مثلًا لن يستغرق أكثر من دقيقة، وفصل الصوت عن الفيديو لأي ملف ملتيميديا تريده إلى ملفين اثنين منفصلين سيصبح سهلًا للغاية، وكذلك ينطبق الأمر على استبدل نص معيّن في ألف ملف نصّي أو البحث عن كلمة أو جملة في الآلاف من الملفات على نظامك…
لا حدود لما يُمكن فعله؛ كل من يستخدم سطر أوامر لينكس من مهندسين وأطباء وأساتذة جامعات وطلّاب ومختصين تقنيين سيتمكنون من فعل أي شيء يريدونه بوقتٍ أقل وجهدٍ أقل.
سنبدأ الآن في تعلم بعض أساسيات صدفة Bash والمبادئ العامة لسطر أوامر لينكس.
ستُفتح لك جلسة صدفة جديدة بعد أن يُقلع نظامك (بغض النظر عن التوزيعة التي تستعملها) لتعمل أثناء كامل مدة استخدامك للنظام.
جلسة الصَدَفَة (Shell Session) هي بيئة تمكّن البرامج والخدمات من التواصل بين بعضها البعض وبين كامل أجزاء النظام الأخرى. يمكنك أن تفتح عدة جلسات صدفة في نفس الوقت، وبعضها قد يكون أبًا لصدفات أخرى، وهو ما سيسبب مثلًا إيقاف العمليات المُشغّلة حاليًا إذا توقّفت جلسة الصدفة الأب.
دعنا نبدأ بفتح تطبيق “محاكي الطرفية” أو “Terminal Emulator” ، والذي سيفتح لنا جلسة صدفة جديدة في نافذة منفصلة. ابحث عن “الطرفية” أو “Terminal” في قائمة التطبيقات على نظامك وشغّله لتجد نافذة تفتح لك كالتالي:
النص قبل كل أمر تكتبه في الطرفية هو أول ما ستراه في معظم محاكيات الطرفيّة التي قد تستعملها، وهو يتكون من 3 أجزاء:
دعنا نبدأ بكتابة أمر بسيط مثل هذا:
cd /home/
يتكّون الأمر السابق من شيئين:
ستلاحظ أن المجلد الحالي لجلسة الصدفة سيتغير إلى مجلد /home/ بعد أن تكتب الأمر السابق في الطرفية وتضغط Enter، وهو ما يعني أنه سيصبح مجلد العمل الحالي للصدفة.
يمكنك تمرير العديد من المعطيات في الكثير من الأحيان إلى الأمر الأساسي لأداء أمور متعددة؛ فمثلًا سيسرد الأمر التالي محتويات مجلديّ /etc و/home سويةً:
ls /etc /home
ويمكنك أيضًا تمرير بعض الخيارات (Options) للأوامر لجعلها تقوم بالمطلوب بشكل محدد، فمثلًا إن أُضيف خيار -a إلى الأمر ls فسيُظهر الملفّات المخفية - في حال وجودها - في المسار المطلوب (والتي تبدأ أسماؤها بالنقطة .):
ls -a ~
الفرق بين المُعطيات (Arguments) والخيارات (Options) هو أن المُعطيات هي المُدخلات التي يعطيها المستخدم للأمر المطلوب لينفّذ الإجراء عليها، بينما الخيارات تغيّر من طريقة التنفيذ أو شكله فقط. ويمكن غالبًا على معظم الأنظمة الشبيهة بيونكس تنفيذ الأوامر الأساسية كما هي بخياراتها الافتراضية دون الحاجة إلى خيارات أخرى من المستخدم، لكن الأوامر لن تعمل من دون مُعطيات.
على لينكس لا يوجد شيء اسمه “مجلدات” حقيقةً، بل نُطلق عليها اسم “مسارات” أو “Directories”، ولكننا قد نشير إليها بالاسمين من باب التجوّز.
هناك رموز خاصّة على سطر أوامر لينكس تفهم منها الصَدَفَة أمورًا معيّنة، وبالتالي لا تعالجها على أنها مجرد رموز عادية بل على أنها أشبه بالمتغيّرات.
الرمز | الشرح | الأمثلة |
---|---|---|
~ | مساوٍ لمجلد المنزل للمستخدم الحالي لجلسة الصدفة، مثل /home/mhsabbagh/ | cd ~ ls ~ |
* | يرمز لـ“كل شيء”؛ فلنفرض أنك تريد حذف جميع الصور التي تنتهي بامتداد .jpg من مجلد التنزيلات الخاصّ بك والتي يبدأ اسمها بحرف “E”، حينها يمكنك استخدام هذا الرمز للإشارة إلى كل الحروف الأخرى (انظر المثال). | rm ~/Downloads/E*.jpg ls /etc/*c |
& | لتشغيل أمرٍ ما في الخلفية مما سيمكنك من متابعة العمل وكتابة المزيد من الأوامر في الطرفية دون الحاجة لانتظار الأمر السابق لينتهي. ستعيد الطرفية لك رقم العملية المرتبط بالأمر الذي نفّذته لكنك لن ترى مخرجات الأمر. | sudo apt update & |
&& | إن استخدمت هذين الرمزين هكذا سويةً فهذا يعني أنك تريد تنفيذ أمرين اثنين، فيُنفّذ الأمر الأول وبعد أن ينتهي سيُنفّذ الأمر الثاني. | sudo apt update && sudo apt upgrade |
\ | يسمح لك بمتابعة كتابة الأمر الذي تكتبه في سطرٍ جديد في الطرفية. | sudo \ apt \ update |
.. | يشير إلى المسار الأعلى من المسار الحالي، فمثلًا إن كنت في /home/mhsabbagh فستكون النقطتان .. تشيران إلى /home/ | cd .. |
. | يشير إلى المجلد الحالي للصدفة. | cd . |
# | يُعتبر كل شيء بعد هذا الرمز في سطر الأوامر تعليقًا (Comment)؛ أي أنه لا يُعالج من سطر الأوامر ولا يعتبر أمرًا، بل يمكنك كتابة أي شيء تريده بعده (ميزة مفيدة في كتابة البرامج). | cd # This is nothing more than a comment for the cd command. |
| | يسمح هذا الرمز باستخدام ميزة الـPiping أو “النقل بالأنابيب”؛ وهي ببساطة قائمة على أخذ مُخرجات أمرٍ ما ثمّ تحويلها مباشرةً لتكون مدخلات أمرٍ آخر. | cat /etc/profile | grep bash |
< | لأخذ مخرجات أمرٍ ما وتحويلها إلى ملف (ستحذف جميع محتويات الملف إن كان موجودًا ويُكتب فوقها). | ls ~ > output.txt |
> | لقراءة محتويات ملفٍ ما لتصبح مُدخلات أمر في الطرفية. | grep bash < /etc/profile |
<< | لإضافة نص إلى نهاية ملف معيّن (مثل أخذ مخرجات أمرٍ ما وإضافتها إلى نهاية ملف نصي لكن دون حذفه أو حذف جميع محتوياته، بل فقط الإضافة إلى نهايته). | echo “First Line” > output.txt echo “See this is the last line” >> output.txt |
في هذا الجدول ستجد بعض الأوامر الأساسية للتنقّل بين المسارات:
الأمر الأساسي | الشرح | بعض الخيارات الشهيرة | أمثلة |
---|---|---|---|
cd | يسمح لك بالتنقّل بين المسارات الموجودة على نظامك (المجلدات)، وهذا لتتمكن من العمل على الملفات الموجودة فيها. | - | cd /etc/ cd ~ cd ../.. _ |
ls | يسرد الملفات والمسارات الموجودة في المسار الحالي أو في مسار محدد. | -a لإظهار الملفات والمجلدات المخفية. -l لإظهار بعض البيانات الوصفية عن الملفات والمجلدات كالحجم وتاريخ التعديل والصلاحيات. | ls -a ~ |
pwd | يعطيك المسار الحالي لجلسة الصدفة. | - | - |
ويظهر هذا الجدول أوامر مختلفة مفيدة:
الأمر الأساسي | الشرح | بعض الخيارات الشهيرة | أمثلة |
---|---|---|---|
touch | لإنشاء ملف جديد | - | touch text.txt |
mkdir | لإنشاء مجلد جديد | -p لإنشاء المجلد في المسار المطلوب بغض النظر عن وجود المسار الأب أم لا (لأنه افتراضيًا سيعطيك الأمر خطأ إن حاولت إنشاء مجلد فرعي في مجلد غير موجود أساسًا، لكن هذا الخيار سيقوم بإنشائهما معًا كما في المسار). | mkdir newfolder mkdir something\ with\ spaces mkdir -p newfolder/subfolder/subsubfolder |
rm | لحذف ملف | -rf لإضافة إمكانية حذف المسارات وجميع محتوياتها. | rm file.txt rm -rf foldername |
head | لجلب أول س أسطر من ملفٍ ما | -n لتحديد عدد الأسطر المطلوب إحضارها من بداية الملف. | head /etc/profile head -n 19 /etc/profile |
tail | لجلب آخر ع أسطر من ملفٍ ما | -n لتحديد عدد الأسطر المطلوب إحضارها من نهاية الملف. | tail /etc/profile tail -n 18 /etc/profile |
cat | عرض جميع محتويات ملفٍ ما | - | cat /etc/profile |
grep | عرض الأسطر التي تحوي نصً معينًا فقط | - | grep 'bash' /etc/profile |
chmod | لتغيير صلاحيات ملف. | +x لجعل الملف قابل للتنفيذ (Executable). 755 للسماح بالوصول إلى الملف من جميع المستخدمين، لكن الكتابة عليه أو تنفيذه مسموح لمنشئ الملف أو مجموعة المستخدمين المالكين للملف فقط. | chmod +x test.sh chmod 755 test.sh |
قد ترى العديد من المستخدمين يتبادلون مختلف الأوامر على الإنترنت فيما بينهم أو على المقالات المنشورة في المواقع الإلكترونية، وبما أنك مستخدم جديد فقد لا تفهم ماذا تعمل هذه الأوامر على نظامك وبالتالي كيف تضمن أنها لن تؤذيه؟
الجواب في موقع ExplainShell.com.
لنقل أنك صادفت أمرًا طويلًا أثناء تصفّح مقالة على الشبكة أو قراءة كتاب ولم تعرف ما يفعله هذا الأمر وكيف؟ فقط انسخه والصقه في هذا الموقع وستجد أنه سيخبرك بالضبط بوظيفته ويشرح لك كل جزء منه، بما في ذلك الخيارات والمُعاملات. إنه موقعٌ رائع لشرح أوامر لينكس.
هناك أيضًا أمر على لينكس يريك كل معلومات التوثيق المتوفرة عن أمرٍ معين، واسمه man. يمكنك مثلًا تطبيقه على الأمرين ls وrm لترى الوثائق الخاصّة بهما وتفهم طريقة عمل هذه الأوامر:
man ls man rm
يمكنك تصفح معلومات التوثيق باستخدام أزرار فوق وأسفل، وللخروج استعمل زر Q.
سنغوص الآن في بعض الأفكار والمبادئ الأكثر تقدمًا فيما يتعلق بصدفة باش وأوامرها.
شفرة الصدفة أو Shell Script ما هي إلا ملف نصي يحوي مجموعةً من أوامر باش منظمةً بطريقة معيّنة وبهدف أداء مهمة معيّنة. والأمر فعلًا لا يتعدى أن تفتح محرر النصوص وتكتب الأوامر التي تريد تنفيذها بالترتيب ثم تحفظ الملف بامتداد .sh، ثم تشغّل الملف لاحقًا في أي وقت تريد فيه تنفيذ هذه الأوامر.
يمكنك وضع رمز الـ# في أي مكانٍ تريده في الملف، وهذا ليكون أي شيء بعده (في نفس السطر) هو تعليق لن يُنفّذ. يُستثنى من ذلك إن كان الرمز # متبوعًا بـ! وموضوعًا في أول سطر من الملف، وهو ما سيعني للصدفة حينها أنك تريد استخدام مفسّر صدفة معيّن لقراءة شفرة الصدفة هذه (لأنه كما قلنا، هناك صدفات أخرى وليس باش فقط، وبالتالي يمكنك أن تختار تشغيل ملفات الشل سكربت عليها).
تبدأ جميع ملفات شفرات الصدفة بسطر #!/bin/bash، وهذا مهم لتحديد مسار مفسّر الصدفة الذي سيُستعمل لقراءة وتفسير الأوامر التي كتبتها في الملف النصّي.
افتح محرر نصوصك المفضّل واكتب الأوامر التالية فيه:
#!/bin/bash cd ~ # Go to the current home directory. ls # List the current files. echo "Done!" # Print "Done!"
واحفظ الملف باسم test.sh في مجلد المنزل الخاصّ بك، ثمّ نفذّه عن طريق الأمر:
source ~/test.sh
ينفّذ الأمر source أي ملف تريده في نفس الصدفة التي تعمل عليها حاليًا. يمكنك أيضًا أن تستخدم النقطة . كاختصار للأمر source لتنفيذ نفس الملف:
. ~/test.sh
يمكنك أيضًا تشغيل شفرة السكربت عن طريق ./test.sh لكن تذكّر أنه عليك أن تكون موجودًا في نفس المسار الذي يوجد به الملف، وإلا لن يعمل معك. المتغيّرات في باش (Bash)
يمكنك أيضًا تعريف المتغيرات في باش واستدعاؤها والاستفادة منها، وإليك بعض الأمثلة.
myvar="Test" echo $myvar echo "This is a: $myvar" echo myvar
لاحظ كيف أن بعضًا من هذه الأمثلة سيعطيك الخرج المطلوب بينما آخر واحد منها لن يعطيك ما تتوقعه. عليك أن تكون حذرًا عندما تكتب الأوامر والسكربتات في باش وهذا لأن كل فراغ وكل رمز قد يؤثر بصورة كبيرة على عمل الأوامر التي تكتبها. استعمل رمز $ للإشارة إلى أسماء المتغيرات التي تعرّفها في السكربتات، وانظر كيف أنه هناك فرق بين علامتيّ تنصيص وعلامة تنصيص واحدة:
test="Something" echo "This is: $test" echo 'This is: $test'
لن تعالج باش المتغيّر في الحالة الأخيرة بل ستعتبرها مجرد جملة نصية، وهذا بسبب علامة التنصيص الوحيدة.
قد تكون بعض المتغيّرات المُعرّفة بالفعل مفيدة في باش، فمثلًا متغيّر $HOME يشير دومًا إلى مجلد المنزل الخاص بالمستخدم الحالي للصدفة، ولهذا يمكنك استعماله والاستفادة منه في كتابة سكربتاتك:
cd $HOME ls $HOME
يمكنك طباعة جميع المتغيّرات المُعرّفة بالفعل في جلسة الصدفة الافتراضية عبر كتابة الأمر التالي:
env
إليك في هذا القسم بعض المصادر الإضافية للاستزادة في موضوع سطر أوامر لينكس.
هناك الكثير من الكتب والفيديوهات والمساقات على الشبكة لشرح سطر أوامر لينكس، وإليك قائمة صغيرة بأبرزها:
يمكنك أيضًا متابعة الحسابات التالية على تويتر للاستزادة من سطر الأوامر وتعلم المزيد:
هنا تنتهي هذه المقدمة الشاملة إلى سطر أوامر لينكس، وإن كان لديك أي سؤال بالمادة المطروحة فيمكنك كتابته بالتعليقات.