دليل أوامر لينكس الشامل: تعلم أساسيات Bash للمبتدئين

دقائق القراءة: 47

مرحبًا بك في دليل أوامر لينكس الشامل للمبتدئين! يهدف هذا الدليل، الذي أعده فلافيا كوبس، إلى تزويدك بالمعرفة الأساسية لـ 60 أمرًا من أوامر Bash الجوهرية التي لا غنى عنها لأي مطور. يتضمن كل أمر شروحات وافية، أمثلة عملية، ونصائح قيمة حول متى وكيف تستخدمه بفعالية.

نتبع في هذا الدليل “قاعدة 80/20″، حيث نركز على تعليمك 80% من المعلومات الأساسية التي ستحتاجها في 20% فقط من الوقت الذي تستغرقه في التعلم. يضمن هذا النهج حصولك على فهم شامل ومركز، دون الإغراق في التفاصيل غير الضرورية.

لا يهدف هذا الدليل إلى تغطية كل ما يتعلق بلينكس وأوامره. بل يركز على مجموعة صغيرة من الأوامر الأساسية التي ستستخدمها في 80% إلى 90% من وقتك، مع تبسيط استخدام الأوامر الأكثر تعقيدًا.

جميع الأوامر المذكورة هنا تعمل بسلاسة على أنظمة Linux و macOS و WSL (نظام ويندوز الفرعي للينكس)، وأي بيئة UNIX أخرى. نأمل أن يساعدك هذا الدليل في تحقيق هدفك: أن تصبح مرتاحًا ومتمكنًا في استخدام لينكس. يمكنك حفظ هذه الصفحة في متصفحك للرجوع إليها مستقبلاً، كما يمكنك تحميل هذا الدليل بصيغة PDF أو ePUB أو Mobi مجانًا. استمتع بالتعلم!

مقدمة إلى لينكس وواجهات الأوامر (Shells)

ما هو لينكس؟

لينكس هو نظام تشغيل، شأنه شأن macOS أو Windows. إنه أيضًا نظام التشغيل مفتوح المصدر الأكثر شعبية، ويوفر لك قدرًا كبيرًا من الحرية. يشغل لينكس الغالبية العظمى من الخوادم التي تشكل شبكة الإنترنت، وهو الأساس الذي بُني عليه كل شيء تقريبًا. ليس هذا فحسب، بل إن نظام Android مبني على نسخة معدلة من لينكس.

وُلد “نواة” لينكس (المعروفة باسم kernel) في عام 1991 في فنلندا، وقد قطع شوطًا طويلاً منذ بداياته المتواضعة. ثم أصبح نواة نظام التشغيل GNU، ليشكّل الثنائي GNU/Linux.

هناك شيء واحد يميز لينكس لا تستطيع شركات مثل Microsoft و Apple و Google تقديمه أبدًا: حرية فعل ما تريد بجهاز الكمبيوتر الخاص بك. بل إن هذه الشركات تتجه في الاتجاه المعاكس، حيث تبني “حدائق مغلقة”، خاصة على جانب الأجهزة المحمولة. لينكس هو قمة الحرية.

يتم تطوير لينكس بواسطة متطوعين، بعضهم يتقاضى أجورًا من شركات تعتمد عليه، وبعضهم يعمل بشكل مستقل. ولكن لا توجد شركة تجارية واحدة يمكنها أن تملي ما يجب أن يتضمنه لينكس، أو تحدد أولويات المشروع.

يمكنك أيضًا استخدام لينكس كجهاز كمبيوتر يومي. أستخدم macOS لأنني أستمتع حقًا بالتطبيقات والتصميم (وكنت في السابق مطورًا لتطبيقات iOS و Mac). ولكن قبل استخدام macOS، كنت أستخدم لينكس كنظام تشغيل رئيسي لجهازي. لا أحد يستطيع أن يملي عليك التطبيقات التي يمكنك تشغيلها، أو “الاتصال بالمنزل” بتطبيقات تتتبعك وموقعك والمزيد.

لينكس مميز أيضًا لأنه ليس هناك “لينكس واحد” فقط، كما هو الحال مع Windows أو macOS. بدلاً من ذلك، لدينا distributions (توزيعات). يتم إنشاء “توزيعة” بواسطة شركة أو منظمة وتقوم بتجميع نواة لينكس مع برامج وأدوات إضافية. على سبيل المثال، لديك Debian و Red Hat و Ubuntu، وهي على الأرجح التوزيعات الأكثر شعبية. ولكن هناك الكثير والكثير غيرها. يمكنك أيضًا إنشاء توزيعتك الخاصة. ولكن على الأرجح ستستخدم واحدة شعبية لديها الكثير من المستخدمين ومجتمع من الأشخاص حولها. يتيح لك هذا القيام بما تحتاج إليه دون إضاعة الكثير من الوقت في إعادة اختراع العجلة وإيجاد حلول للمشكلات الشائعة.

تأتي بعض أجهزة الكمبيوتر المكتبية والمحمولة مثبتة مسبقًا بنظام لينكس. أو يمكنك تثبيته على جهاز الكمبيوتر الذي يعمل بنظام Windows، أو على جهاز Mac. ولكن لا تحتاج إلى تعطيل جهاز الكمبيوتر الحالي الخاص بك لمجرد الحصول على فكرة عن كيفية عمل لينكس. أنا لا أمتلك جهاز كمبيوتر يعمل بنظام لينكس. إذا كنت تستخدم جهاز Mac، فكل ما عليك معرفته هو أن macOS هو نظام تشغيل UNIX تحت الغطاء. وهو يتشارك الكثير من الأفكار والبرامج نفسها التي يستخدمها نظام GNU/Linux، لأن GNU/Linux هو بديل مجاني لـ UNIX.

UNIX هو مصطلح شامل يجمع العديد من أنظمة التشغيل المستخدمة في الشركات والمؤسسات الكبيرة، بدءًا من السبعينيات. تمنحك محطة macOS الطرفية إمكانية الوصول إلى نفس الأوامر تمامًا التي سأصفها في بقية هذا الدليل.

لدى Microsoft نظام Windows Subsystem for Linux (نظام ويندوز الفرعي للينكس) الرسمي الذي يمكنك (ويجب عليك!) تثبيته على Windows. سيعطيك هذا القدرة على تشغيل لينكس بطريقة سهلة جدًا على جهاز الكمبيوتر الخاص بك. ولكن في الغالبية العظمى من الأحيان، ستقوم بتشغيل جهاز كمبيوتر يعمل بنظام لينكس في السحابة عبر خادم افتراضي خاص VPS (Virtual Private Server) مثل DigitalOcean.

ما هي واجهة أوامر لينكس (Linux Shell)؟

واجهة الأوامر shell هي مترجم أوامر يوفر واجهة للمستخدم للتعامل مع نظام التشغيل الأساسي. تتيح لك تنفيذ العمليات باستخدام النصوص والأوامر، وتوفر للمستخدمين ميزات متقدمة مثل القدرة على إنشاء السكريبتات.

هذا أمر مهم: تتيح لك واجهات الأوامر أداء المهام بطريقة أكثر تحسينًا مما يمكن أن تتيحه واجهة المستخدم الرسومية GUI (Graphical User Interface) على الإطلاق. يمكن لأدوات سطر الأوامر أن تقدم العديد من خيارات التكوين المختلفة دون أن تكون معقدة للغاية في الاستخدام.

هناك أنواع مختلفة عديدة من واجهات الأوامر. يركز هذا المقال على واجهات أوامر Unix، وهي تلك التي ستجدها عادةً على أجهزة لينكس و macOS. تم إنشاء العديد من أنواع واجهات الأوامر المختلفة لهذه الأنظمة بمرور الوقت، وتهيمن بعضها على الساحة: Bash و Csh و Zsh و Fish وغيرها الكثير!

جميع واجهات الأوامر تنبع من Bourne Shell، والتي تسمى sh. “Bourne” لأن مبتكرها كان ستيف بورن. Bash تعني Bourne-again shell. كان sh ملكيًا وغير مفتوح المصدر، وتم إنشاء Bash في عام 1989 لإنشاء بديل مجاني لمشروع GNU ومؤسسة البرمجيات الحرة. نظرًا لأن المشاريع كانت تدفع لاستخدام Bourne shell، أصبح Bash شائعًا جدًا.

إذا كنت تستخدم جهاز Mac، حاول فتح محطة Mac الطرفية الخاصة بك. بشكل افتراضي، يقوم بتشغيل ZSH (أو، قبل Catalina، Bash). يمكنك إعداد نظامك لتشغيل أي نوع من واجهات الأوامر – على سبيل المثال، أستخدم Fish shell.

كل واجهة أوامر لها ميزاتها الفريدة واستخداماتها المتقدمة، ولكنها جميعًا تتشارك وظيفة مشتركة: يمكنها السماح لك بتنفيذ البرامج، ويمكن برمجتها. في بقية هذا الدليل، سنرى بالتفصيل الأوامر الأكثر شيوعًا التي ستستخدمها.

أمر Linux man: دليلك الشامل للأوامر

يُعد أمر man (اختصارًا لكلمة manual، أي دليل) نقطة البداية المثالية لفهم جميع أوامر لينكس الأخرى. في كل مرة تحتاج فيها إلى معرفة كيفية استخدام أمر معين، يمكنك ببساطة كتابة man <command> للحصول على دليله التفصيلي:

man <command>

صفحة دليل man لأمر ls تعرض معلومات مفصلة عن الأمر

صفحات man هي أداة أساسية لأي مطور، فهي تحتوي على كمية هائلة من المعلومات قد تبدو أحيانًا مفرطة. على سبيل المثال، لقطة الشاشة أعلاه هي جزء واحد فقط من 14 شاشة شرح لأمر ls.

في كثير من الأحيان، عندما أحتاج إلى فهم أمر بسرعة، أستخدم موقع tldr pages. وهو أمر يمكنك تثبيته وتشغيله بالشكل التالي: tldr <command>. يوفر هذا الأمر نظرة عامة سريعة جدًا على الأمر، مع أمثلة عملية لسيناريوهات الاستخدام الشائعة:

tldr <command>

مثال على صفحة tldr لأمر ls تعرض استخدامات شائعة

هذه الأداة ليست بديلاً لـ man، بل هي وسيلة مساعدة لتجنب الضياع في الكم الهائل من المعلومات الموجودة في صفحة man. بعد الحصول على نظرة عامة سريعة، يمكنك العودة إلى صفحة man لاستكشاف جميع الخيارات والمعاملات المختلفة التي يمكنك استخدامها مع الأمر.

أمر Linux ls: عرض محتويات الدلائل

داخل أي مجلد، يمكنك سرد جميع الملفات التي يحتويها باستخدام أمر ls:

ls

إذا أضفت اسم مجلد أو مسار، فسيعرض محتويات ذلك المجلد:

ls /bin

مثال على إخراج أمر ls /bin يعرض محتويات مجلد bin

يقبل أمر ls العديد من الخيارات. إحدى مجموعاتي المفضلة هي -al. جربها:

ls -al /bin

مثال على إخراج أمر ls -al /bin يعرض تفاصيل أكثر عن الملفات

مقارنة بأمر ls العادي، يعرض هذا الأمر معلومات أكثر بكثير. لديك، من اليسار إلى اليمين:

  • أذونات الملف (وإذا كان نظامك يدعم ACLs، فستحصل أيضًا على علامة ACL)
  • عدد الروابط إلى ذلك الملف
  • مالك الملف
  • مجموعة الملف
  • حجم الملف بالبايت
  • تاريخ ووقت آخر تعديل للملف
  • اسم الملف

يتم إنشاء هذه المجموعة من البيانات بواسطة الخيار l. أما الخيار a فيعرض أيضًا الملفات المخفية. الملفات المخفية هي الملفات التي تبدأ بنقطة (.).

أمر Linux cd: التنقل بين الدلائل

بمجرد أن يكون لديك مجلد، يمكنك الانتقال إليه باستخدام أمر cd. cd تعني change directory (تغيير الدليل). يمكنك استدعاؤه بتحديد مجلد للانتقال إليه. يمكنك تحديد اسم مجلد، أو مسار كامل. مثال:

mkdir fruits
cd fruits

الآن أنت في مجلد fruits. يمكنك استخدام المسار الخاص .. للإشارة إلى المجلد الأصل:

cd .. #العودة إلى المجلد الرئيسي

يشير الحرف # إلى بداية التعليق، الذي يستمر لبقية السطر بعد العثور عليه. يمكنك استخدامه لتكوين مسار:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

هناك مؤشر مسار خاص آخر وهو .، ويشير إلى المجلد الحالي. يمكنك أيضًا استخدام المسارات المطلقة، التي تبدأ من المجلد الجذر /:

cd /etc

أمر Linux pwd: معرفة موقعك الحالي

كلما شعرت بالضياع في نظام الملفات، استخدم أمر pwd لمعرفة مكانك:

pwd

سيعرض مسار المجلد الحالي.

أمر Linux mkdir: إنشاء مجلدات جديدة

يمكنك إنشاء مجلدات باستخدام أمر mkdir:

mkdir fruits

يمكنك إنشاء مجلدات متعددة بأمر واحد:

mkdir dogs cars

يمكنك أيضًا إنشاء مجلدات متداخلة متعددة بإضافة الخيار -p:

mkdir -p fruits/apples

تتخذ الخيارات في أوامر UNIX عادة هذا الشكل. تضيفها مباشرة بعد اسم الأمر، وتغير كيفية سلوك الأمر. يمكنك غالبًا دمج خيارات متعددة أيضًا. يمكنك معرفة الخيارات التي يدعمها الأمر بكتابة man <commandname>. جرب الآن مع man mkdir على سبيل المثال (اضغط على المفتاح q للخروج من صفحة man). صفحات man هي المساعدة المدمجة الرائعة لـ UNIX.

أمر Linux rmdir: حذف مجلدات فارغة

كما يمكنك إنشاء مجلد باستخدام mkdir، يمكنك حذف مجلد باستخدام rmdir:

mkdir fruits
rmdir fruits

يمكنك أيضًا حذف مجلدات متعددة دفعة واحدة:

mkdir fruits cars
rmdir fruits cars

يجب أن يكون المجلد الذي تحذفه فارغًا. لحذف المجلدات التي تحتوي على ملفات، سنستخدم الأمر الأكثر عمومية rm الذي يحذف الملفات والمجلدات، باستخدام الخيار -rf:

rm -rf fruits cars

تحذير: كن حذرًا للغاية عند استخدام هذا الأمر، فهو لا يطلب تأكيدًا وسيقوم بإزالة أي شيء تطلبه فورًا دون نقله إلى سلة المهملات. استعادة الملفات المحذوفة بهذه الطريقة قد يكون صعبًا للغاية.

أمر Linux mv: نقل وإعادة تسمية الملفات

بمجرد أن يكون لديك ملف، يمكنك نقله باستخدام أمر mv. تحدد المسار الحالي للملف، ومساره الجديد:

touch test
mv pear new_pear

تم نقل ملف pear الآن إلى new_pear. هذه هي الطريقة التي تعيد بها تسمية الملفات والمجلدات. إذا كانت المعلمة الأخيرة هي مجلد، فسيتم نقل الملف الموجود في مسار المعلمة الأولى إلى ذلك المجلد. في هذه الحالة، يمكنك تحديد قائمة بالملفات وسيتم نقلها جميعًا إلى مسار المجلد المحدد بالمعلمة الأخيرة:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #تم نقل pear و apple إلى مجلد fruits

أمر Linux cp: نسخ الملفات والدلائل

يمكنك نسخ ملف باستخدام أمر cp:

touch test
cp apple another_apple

لنسخ المجلدات، تحتاج إلى إضافة الخيار -r لنسخ محتويات المجلد بالكامل بشكل متكرر:

mkdir fruits
cp -r fruits cars

أمر Linux open: فتح الملفات والتطبيقات

يتيح لك أمر open فتح ملف باستخدام هذا التركيب:

open <filename>

يمكنك أيضًا فتح دليل، والذي يقوم في نظام macOS بفتح تطبيق Finder مع الدليل الحالي:

open <directory name>

أستخدمه طوال الوقت لفتح الدليل الحالي:

open .

يرمز الرمز الخاص . إلى الدليل الحالي، بينما يرمز .. إلى الدليل الأصل. يمكن استخدام نفس الأمر أيضًا لتشغيل تطبيق:

open <application name>

أمر Linux touch: إنشاء ملفات فارغة وتحديث الطوابع الزمنية

يمكنك إنشاء ملف فارغ باستخدام أمر touch:

touch apple

إذا كان الملف موجودًا بالفعل، فإنه يفتح الملف في وضع الكتابة، ويتم تحديث الطابع الزمني للملف.

أمر Linux find: البحث عن الملفات والدلائل

يمكن استخدام أمر find للبحث عن ملفات أو مجلدات تتطابق مع نمط بحث معين. يبحث بشكل متكرر. دعنا نتعلم كيفية استخدامه بالأمثلة.

ابحث عن جميع الملفات تحت الشجرة الحالية التي لها امتداد .js واطبع المسار النسبي لكل ملف يتطابق:

find . -name '*.js'

من المهم استخدام علامات الاقتباس حول الأحرف الخاصة مثل * لتجنب تفسير الواجهة لها.

ابحث عن الدلائل تحت الشجرة الحالية التي تتطابق مع الاسم “src“:

find . -type d -name src

استخدم -type f للبحث عن الملفات فقط، أو -type l للبحث عن الروابط الرمزية فقط. -name حساس لحالة الأحرف. استخدم -iname لإجراء بحث غير حساس لحالة الأحرف.

يمكنك البحث تحت أشجار جذر متعددة:

find folder1 folder2 -name filename.txt

ابحث عن الدلائل تحت الشجرة الحالية التي تتطابق مع الاسم “node_modules” أو “public“:

find . -type d -name node_modules -or -name public

يمكنك أيضًا استبعاد مسار باستخدام -not -path:

find . -type d -name '*.md' -not -path 'node_modules/*'

يمكنك البحث عن الملفات التي تحتوي على أكثر من 100 حرف (بايت) فيها:

find . -type f -size +100c

ابحث عن الملفات الأكبر من 100 كيلوبايت ولكن الأصغر من 1 ميغابايت:

find . -type f -size +100k -size -1M

ابحث عن الملفات التي تم تعديلها قبل أكثر من 3 أيام:

find . -type f -mtime +3

ابحث عن الملفات التي تم تعديلها في آخر 24 ساعة:

find . -type f -mtime -1

يمكنك حذف جميع الملفات التي تتطابق مع بحث بإضافة الخيار -delete. هذا يحذف جميع الملفات التي تم تعديلها في آخر 24 ساعة:

find . -type f -mtime -1 -delete

يمكنك تنفيذ أمر على كل نتيجة من نتائج البحث. في هذا المثال، نقوم بتشغيل cat لطباعة محتوى الملف:

find . -type f -exec cat {} \;

لاحظ الرمز \; الذي ينهي الأمر. يتم ملء {} باسم الملف وقت التنفيذ.

أمر Linux ln: إنشاء الروابط (Links)

أمر ln هو جزء من أوامر نظام ملفات لينكس. يستخدم لإنشاء الروابط. ما هو الرابط؟ إنه يشبه مؤشرًا لملف آخر، أو ملفًا يشير إلى ملف آخر. قد تكون على دراية باختصارات Windows. إنها متشابهة.

لدينا نوعان من الروابط: الروابط الصلبة (hard links) والروابط الرمزية (soft links).

الروابط الصلبة (Hard links)

نادرًا ما تستخدم الروابط الصلبة. لديها بعض القيود: لا يمكنك الربط بالدلائل، ولا يمكنك الربط بأنظمة ملفات خارجية (أقراص). يتم إنشاء الرابط الصلب باستخدام التركيب التالي:

ln <original> <link>

على سبيل المثال، لنفترض أن لديك ملفًا يسمى recipes.txt. يمكنك إنشاء رابط صلب له باستخدام:

ln recipes.txt newrecipes.txt

الرابط الصلب الجديد الذي أنشأته لا يمكن تمييزه عن الملف العادي:

عرض لملفين recipes.txt و newrecipes.txt يبدوان متطابقين بعد إنشاء رابط صلب

الآن في أي وقت تقوم فيه بتحرير أي من هذه الملفات، سيتم تحديث المحتوى لكلاهما. إذا حذفت الملف الأصلي، فسيظل الرابط يحتوي على محتوى الملف الأصلي، حيث لا يتم إزالته حتى لا يبقى أي رابط صلب يشير إليه.

عرض يوضح أن الملف المرتبط صلبًا لا يزال موجودًا بعد حذف الملف الأصلي

الروابط الرمزية (Soft links)

تختلف الروابط الرمزية. إنها أكثر قوة حيث يمكنك الربط بأنظمة ملفات أخرى وبالدلائل. ولكن تذكر أنه عند إزالة الملف الأصلي، سينكسر الرابط. يمكنك إنشاء الروابط الرمزية باستخدام الخيار -s من أمر ln:

ln -s <original> <link>

على سبيل المثال، لنفترض أن لديك ملفًا يسمى recipes.txt. يمكنك إنشاء رابط رمزي له باستخدام:

ln -s recipes.txt newrecipes.txt

في هذه الحالة، يمكنك رؤية وجود علامة l خاصة عند سرد الملف باستخدام ls -al. ينتهي اسم الملف بعلامة @، ويتم تلوينه أيضًا بشكل مختلف إذا كانت لديك الألوان ممكّنة:

عرض لأمر ls -al يظهر رابطًا رمزيًا مع علامة l ورمز @

الآن إذا حذفت الملف الأصلي، فستنكسر الروابط، وستخبرك الواجهة “No such file or directory” إذا حاولت الوصول إليه:

رسالة خطأ No such file or directory عند محاولة الوصول إلى رابط رمزي مكسور

أمر Linux gzip: ضغط الملفات

يمكنك ضغط ملف باستخدام بروتوكول الضغط gzip المسمى LZ77 باستخدام أمر gzip. إليك أبسط استخدام:

gzip filename

سيؤدي هذا إلى ضغط الملف، وإضافة امتداد .gz إليه. يتم حذف الملف الأصلي. لمنع ذلك، يمكنك استخدام الخيار -c واستخدام إعادة توجيه الإخراج لكتابة الإخراج إلى ملف filename.gz:

gzip -c filename > filename.gz

يحدد الخيار -c أن الإخراج سيذهب إلى تيار الإخراج القياسي، مع ترك الملف الأصلي سليمًا. أو يمكنك استخدام الخيار -k:

gzip -k filename

هناك مستويات مختلفة من الضغط. كلما زاد الضغط، كلما استغرق وقتًا أطول للضغط (وفك الضغط). تتراوح المستويات من 1 (الأسرع، أسوأ ضغط) إلى 9 (الأبطأ، أفضل ضغط)، والقيمة الافتراضية هي 6. يمكنك اختيار مستوى معين باستخدام الخيار -<NUMBER>:

gzip -1 filename

يمكنك ضغط ملفات متعددة عن طريق إدراجها:

gzip filename1 filename2

يمكنك ضغط جميع الملفات في دليل، بشكل متكرر، باستخدام الخيار -r:

gzip -r a_folder

يعرض الخيار -v معلومات نسبة الضغط. إليك مثال على استخدامه مع الخيار -k (للحفاظ على الملف الأصلي):

إخراج أمر gzip -kv يظهر نسبة الضغط لملف

يمكن أيضًا استخدام gzip لفك ضغط ملف، باستخدام الخيار -d:

gzip -d filename.gz

أمر Linux gunzip: فك ضغط الملفات

أمر gunzip مكافئ بشكل أساسي لأمر gzip، باستثناء أن الخيار -d ممكّن دائمًا بشكل افتراضي. يمكن استدعاء الأمر بهذه الطريقة:

gunzip filename.gz

سيؤدي هذا إلى فك ضغط الملف وإزالة امتداد .gz، ووضع النتيجة في ملف filename. إذا كان هذا الملف موجودًا، فسوف يقوم بالكتابة فوقه. يمكنك الاستخراج إلى اسم ملف مختلف باستخدام إعادة توجيه الإخراج باستخدام الخيار -c:

gunzip -c filename.gz > anotherfilename

أمر Linux tar: إنشاء واستخراج الأرشيفات

يستخدم أمر tar لإنشاء أرشيف، يجمع ملفات متعددة في ملف واحد. يأتي اسمه من الماضي ويعني tape archive (أرشيف الشريط، عندما كانت الأرشيفات تخزن على الأشرطة). ينشئ هذا الأمر أرشيفًا باسم archive.tar بمحتوى file1 و file2:

tar -cf archive.tar file1 file2

يرمز الخيار c إلى create (إنشاء). يستخدم الخيار f للكتابة إلى ملف الأرشيف. لاستخراج الملفات من أرشيف في المجلد الحالي، استخدم:

tar -xf archive.tar

يرمز الخيار x إلى extract (استخراج). ولاستخراجها إلى دليل معين، استخدم:

tar -xf archive.tar -C directory

يمكنك أيضًا فقط سرد الملفات الموجودة في أرشيف:

إخراج أمر tar -tf archive.tar.gz يعرض قائمة الملفات داخل الأرشيف

يستخدم tar غالبًا لإنشاء أرشيف مضغوط، وذلك بضغط الأرشيف باستخدام gzip. يتم ذلك باستخدام الخيار z:

tar -czf archive.tar.gz file1 file2

هذا يشبه تمامًا إنشاء أرشيف tar، ثم تشغيل gzip عليه. لفك ضغط أرشيف مضغوط بـ gzip، يمكنك استخدام gunzip، أو gzip -d، ثم فك أرشفته. ولكن tar -xf سيتعرف على أنه أرشيف مضغوط بـ gzip، وسيقوم بذلك نيابة عنك:

tar -xf archive.tar.gz

أمر Linux alias: إنشاء اختصارات للأوامر

من الشائع دائمًا تشغيل برنامج بمجموعة من الخيارات التي تفضلها. على سبيل المثال، خذ أمر ls. بشكل افتراضي، يعرض معلومات قليلة جدًا:

إخراج أمر ls العادي يعرض أسماء الملفات فقط

ولكن إذا استخدمت الخيار -al، فسيعرض شيئًا أكثر فائدة، بما في ذلك تاريخ تعديل الملف، وحجمه، ومالكه، وأذوناته. سيسرد أيضًا الملفات المخفية (الملفات التي تبدأ بـ .):

إخراج أمر ls -al يعرض تفاصيل الملفات بما في ذلك الأذونات والمالك والحجم والتاريخ

يمكنك إنشاء أمر جديد، على سبيل المثال، أحب أن أسميه ll، وهو اسم مستعار لـ ls -al. تفعل ذلك بهذه الطريقة:

alias ll='ls -al'

بمجرد القيام بذلك، يمكنك استدعاء ll تمامًا كما لو كان أمر UNIX عاديًا:

إخراج الأمر ll الذي يعمل كاختصار لـ ls -al

الآن، استدعاء alias بدون أي خيار سيسرد الأسماء المستعارة المعرفة:

إخراج أمر alias يعرض قائمة بالأسماء المستعارة المعرفة

سيعمل الاسم المستعار حتى يتم إغلاق جلسة الطرفية. لجعله دائمًا، تحتاج إلى إضافته إلى تكوين الواجهة. قد يكون هذا ~/.bashrc أو ~/.profile أو ~/.bash_profile إذا كنت تستخدم واجهة Bash، اعتمادًا على حالة الاستخدام.

كن حذرًا مع علامات الاقتباس إذا كانت لديك متغيرات في الأمر: إذا استخدمت علامات اقتباس مزدوجة، يتم حل المتغير وقت التعريف. إذا استخدمت علامات اقتباس مفردة، يتم حلها وقت الاستدعاء. هذان مختلفان:

alias lsthis="ls $PWD"
alias lscurrent='ls $PWD'

يشير $PWD إلى المجلد الحالي الذي توجد فيه الواجهة. إذا انتقلت الآن إلى مجلد جديد، فإن lscurrent يسرد الملفات في المجلد الجديد، بينما لا يزال lsthis يسرد الملفات في المجلد الذي كنت فيه عندما قمت بتعريف الاسم المستعار.

أمر Linux cat: عرض ودمج الملفات

على غرار أمر tail بطرق معينة، لدينا أمر cat. ولكن cat يمكنه أيضًا إضافة محتوى إلى ملف، وهذا يجعله قويًا للغاية. في أبسط استخداماته، يطبع cat محتوى الملف إلى الإخراج القياسي:

cat file

يمكنك طباعة محتوى ملفات متعددة:

cat file1 file2

باستخدام عامل إعادة توجيه الإخراج >، يمكنك دمج محتوى ملفات متعددة في ملف جديد:

cat file1 file2 > file3

باستخدام >>، يمكنك إلحاق محتوى ملفات متعددة بملف جديد، وإنشائه إذا لم يكن موجودًا:

cat file1 file2 >> file3

عندما تنظر إلى ملفات التعليمات البرمجية المصدر، من المفيد رؤية أرقام الأسطر. يمكنك جعل cat يطبعها باستخدام الخيار -n:

cat -n file1

يمكنك فقط إضافة رقم إلى الأسطر غير الفارغة باستخدام -b، أو يمكنك أيضًا إزالة جميع الأسطر الفارغة المتعددة باستخدام -s. غالبًا ما يستخدم cat بالاشتراك مع عامل الأنبوب | لتغذية محتوى الملف كمدخل لأمر آخر: cat file1 | anothercommand.

أمر Linux less: استعراض الملفات الكبيرة

أمر less هو أمر أستخدمه كثيرًا. يعرض لك المحتوى المخزن داخل ملف، في واجهة مستخدم جميلة وتفاعلية. الاستخدام: less <filename>.

واجهة أمر less تعرض محتوى ملف مع خيارات التنقل

بمجرد أن تكون داخل جلسة less، يمكنك الخروج بالضغط على المفتاح q. يمكنك التنقل في محتويات الملف باستخدام مفتاحي up و down، أو باستخدام مفتاح space bar و b للتنقل صفحة بصفحة. يمكنك أيضًا القفز إلى نهاية الملف بالضغط على G والعودة إلى البداية بالضغط على g.

يمكنك البحث عن محتويات داخل الملف بالضغط على / وكتابة كلمة للبحث. هذا يبحث إلى الأمام. يمكنك البحث إلى الخلف باستخدام الرمز ? وكتابة كلمة. هذا الأمر يعرض فقط محتوى الملف. يمكنك فتح محرر مباشرة بالضغط على v. سيستخدم محرر النظام، والذي يكون في معظم الحالات vim.

الضغط على المفتاح F يدخل وضع المتابعة (follow mode)، أو وضع المراقبة (watch mode). عندما يتم تغيير الملف بواسطة شخص آخر، مثل من برنامج آخر، يمكنك رؤية التغييرات مباشرة. هذا لا يحدث بشكل افتراضي، وترى فقط نسخة الملف في الوقت الذي فتحته فيه. تحتاج إلى الضغط على Ctrl-C للخروج من هذا الوضع. في هذه الحالة، يكون السلوك مشابهًا لتشغيل الأمر tail -f <filename>.

يمكنك فتح ملفات متعددة، والتنقل بينها باستخدام :n (للانتقال إلى الملف التالي) و :p (للانتقال إلى الملف السابق).

أمر Linux tail: عرض نهاية الملفات ومراقبتها

أفضل استخدام لأمر tail في رأيي هو عندما يتم استدعاؤه مع الخيار -f. يفتح الملف من نهايته، ويراقب التغييرات في الملف. في أي وقت يكون هناك محتوى جديد في الملف، يتم طباعته في النافذة. هذا رائع لمراقبة ملفات السجل، على سبيل المثال:

tail -f /var/log/system.log

للخروج، اضغط على Ctrl-C.

يمكنك طباعة آخر 10 أسطر في ملف:

tail -n 10 <filename>

يمكنك طباعة محتوى الملف بالكامل بدءًا من سطر معين باستخدام + قبل رقم السطر:

tail -n +10 <filename>

يمكن لأمر tail أن يفعل أكثر من ذلك بكثير، وكما هو الحال دائمًا، نصيحتي هي التحقق من man tail.

أمر Linux wc: عد الكلمات، الأسطر، والبايتات

يمنحنا أمر wc معلومات مفيدة حول ملف أو مدخلات يتلقاها عبر الأنابيب.

echo test >> test.txt
wc test.txt
1 1 5 test.txt

مثال عبر الأنابيب، يمكننا عد إخراج تشغيل أمر ls -al:

ls -al | wc
6 47 284

العمود الأول الذي يتم إرجاعه هو عدد الأسطر. الثاني هو عدد الكلمات. الثالث هو عدد البايتات. يمكننا أن نطلب منه عد الأسطر فقط:

wc -l test.txt

أو الكلمات فقط:

wc -w test.txt

أو البايتات فقط:

wc -c test.txt

تتساوى البايتات في مجموعات أحرف ASCII مع الأحرف. ولكن مع مجموعات الأحرف غير ASCII، قد يختلف عدد الأحرف لأن بعض الأحرف قد تستغرق بايتات متعددة (على سبيل المثال، يحدث هذا في Unicode). في هذه الحالة، سيساعدك الخيار -m في الحصول على القيمة الصحيحة:

wc -m test.txt

أمر Linux grep: البحث عن النصوص باستخدام التعبيرات المنتظمة

أمر grep هو أداة مفيدة جدًا. عندما تتقنه، سيساعدك بشكل كبير في عملك اليومي في البرمجة. إذا كنت تتساءل، فإن grep تعني global regular expression print (طباعة التعبير المنتظم العام). يمكنك استخدام grep للبحث في الملفات، أو دمجه مع الأنابيب لتصفية إخراج أمر آخر.

على سبيل المثال، إليك كيفية العثور على تكرارات السطر document.getElementById في ملف index.md:

grep document.getElementById index.md

إخراج أمر grep يبحث عن نص معين في ملف

باستخدام الخيار -n، سيعرض أرقام الأسطر:

grep -n document.getElementById index.md

إخراج أمر grep -n يعرض أرقام الأسطر المطابقة

شيء مفيد جدًا هو أن تطلب من grep طباعة سطرين قبل وسطرين بعد السطر المطابق لمنحك المزيد من السياق. يتم ذلك باستخدام الخيار -C، الذي يقبل عددًا من الأسطر:

grep -nC 2 document.getElementById index.md

إخراج أمر grep -nC 2 يعرض الأسطر المطابقة مع سياق من سطرين قبل وبعد

البحث حساس لحالة الأحرف بشكل افتراضي. استخدم الخيار -i لجعله غير حساس لحالة الأحرف. كما ذكرنا، يمكنك استخدام grep لتصفية إخراج أمر آخر. يمكننا تكرار نفس الوظيفة المذكورة أعلاه باستخدام:

less index.md | grep -n document.getElementById

إخراج أمر less | grep -n يعرض الأسطر المطابقة مع أرقامها

يمكن أن تكون سلسلة البحث تعبيرًا منتظمًا، وهذا يجعل grep قويًا جدًا. شيء آخر قد تجده مفيدًا جدًا هو عكس النتيجة، واستبعاد الأسطر التي تتطابق مع سلسلة معينة، باستخدام الخيار -v:

إخراج أمر grep -v يظهر الأسطر التي لا تتطابق مع النص

أمر Linux sort: فرز الأسطر في الملفات

لنفترض أن لديك ملفًا نصيًا يحتوي على أسماء كلاب:

ملف نصي dogs.txt يحتوي على قائمة غير مرتبة من أسماء الكلاب

هذه القائمة غير مرتبة. يساعدك أمر sort في فرزها حسب الاسم:

إخراج أمر sort dogs.txt يعرض قائمة الكلاب مرتبة أبجديًا

استخدم الخيار r لعكس الترتيب:

إخراج أمر sort -r dogs.txt يعرض قائمة الكلاب مرتبة أبجديًا عكسيًا

الفرز افتراضيًا حساس لحالة الأحرف، وأبجدي. استخدم الخيار --ignore-case للفرز غير الحساس لحالة الأحرف، والخيار -n للفرز باستخدام ترتيب رقمي.

إذا كان الملف يحتوي على أسطر مكررة:

ملف نصي dogs.txt يحتوي على أسماء كلاب مكررة

يمكنك استخدام الخيار -u لإزالتها:

إخراج أمر sort -u dogs.txt يعرض قائمة الكلاب بعد إزالة التكرارات

لا يعمل sort على الملفات فقط، كما تفعل العديد من أوامر UNIX – بل يعمل أيضًا مع الأنابيب. لذا يمكنك استخدامه على إخراج أمر آخر. على سبيل المثال، يمكنك ترتيب الملفات التي يعرضها ls باستخدام:

ls | sort

أمر sort قوي جدًا ولديه الكثير من الخيارات الأخرى، والتي يمكنك استكشافها عن طريق استدعاء man sort.

صفحة دليل man لأمر sort تعرض خياراته المتعددة

أمر Linux uniq: إزالة وعرض الأسطر الفريدة أو المكررة

uniq هو أمر يساعدك في فرز أسطر النص. يمكنك الحصول على هذه الأسطر من ملف، أو باستخدام الأنابيب من إخراج أمر آخر:

uniq dogs.txt
ls | uniq

تحتاج إلى مراعاة هذا الأمر الأساسي: سيكتشف uniq فقط الأسطر المكررة المتجاورة. هذا يعني أنك على الأرجح ستستخدمه مع sort:

sort dogs.txt | uniq

يحتوي أمر sort على طريقته الخاصة لإزالة التكرارات باستخدام الخيار -u (unique). ولكن uniq لديه قوة أكبر. بشكل افتراضي، يزيل الأسطر المكررة:

إخراج أمر sort dogs.txt | uniq يظهر الأسطر الفريدة بعد الفرز

يمكنك أن تطلب منه عرض الأسطر المكررة فقط، على سبيل المثال، باستخدام الخيار -d:

sort dogs.txt | uniq -d

إخراج أمر sort dogs.txt | uniq -d يظهر فقط الأسطر المكررة

يمكنك استخدام الخيار -u لعرض الأسطر غير المكررة فقط:

إخراج أمر sort dogs.txt | uniq -u يظهر فقط الأسطر الفريدة

يمكنك عد تكرارات كل سطر باستخدام الخيار -c:

إخراج أمر sort dogs.txt | uniq -c يظهر عدد تكرار كل سطر

استخدم التركيبة الخاصة:

sort dogs.txt | uniq -c | sort -nr

لفرز تلك الأسطر حسب الأكثر تكرارًا:

إخراج أمر sort dogs.txt | uniq -c | sort -nr يظهر الأسطر مرتبة حسب تكرارها تنازليًا

أمر Linux diff: مقارنة الملفات والدلائل

diff هو أمر مفيد. لنفترض أن لديك ملفين يحتويان على نفس المعلومات تقريبًا، ولكن لا يمكنك العثور على الفرق بينهما. سيعالج diff الملفين وسيخبرك بالفرق. لنفترض أن لديك ملفين: dogs.txt و moredogs.txt. الفرق هو أن moredogs.txt يحتوي على اسم كلب إضافي واحد:

ملفان نصيان dogs.txt و moredogs.txt يظهران اختلاف سطر واحد

diff dogs.txt moredogs.txt سيخبرك أن الملف الثاني يحتوي على سطر إضافي واحد، السطر 3 مع السطر Vanille:

إخراج أمر diff dogs.txt moredogs.txt يظهر السطر الإضافي في الملف الثاني

إذا عكست ترتيب الملفات، فسيخبرك أن الملف الثاني يفتقد السطر 3، الذي محتواه Vanille:

إخراج أمر diff moredogs.txt dogs.txt يظهر السطر المفقود في الملف الثاني

باستخدام الخيار -y، سيقارن الملفين سطرًا بسطر:

إخراج أمر diff -y dogs.txt moredogs.txt يقارن الملفين سطرًا بسطر

الخيار -u سيكون أكثر دراية لك، لأنه نفس الخيار المستخدم بواسطة نظام التحكم في الإصدار Git لعرض الاختلافات بين الإصدارات:

إخراج أمر diff -u dogs.txt moredogs.txt بتنسيق Git diff

مقارنة الدلائل تعمل بنفس الطريقة. يجب عليك استخدام الخيار -r للمقارنة بشكل متكرر (الدخول إلى الدلائل الفرعية):

إخراج أمر diff -r directory1 directory2 يقارن الدلائل بشكل متكرر

في حال كنت مهتمًا بالملفات التي تختلف، بدلاً من المحتوى، استخدم الخيارين r و q:

إخراج أمر diff -rq directory1 directory2 يظهر فقط أسماء الملفات المختلفة

هناك العديد من الخيارات الأخرى التي يمكنك استكشافها في صفحة الدليل عن طريق تشغيل man diff:

صفحة دليل man لأمر diff تعرض خياراته المتعددة

أمر Linux echo: طباعة النصوص والمتغيرات

يقوم أمر echo بمهمة بسيطة واحدة: يطبع إلى الإخراج الوسيطة التي تم تمريرها إليه. هذا المثال:

echo "hello"

سيقوم بطباعة hello إلى الطرفية. يمكننا إلحاق الإخراج بملف:

echo "hello" >> output.txt

يمكننا استيفاء متغيرات البيئة:

echo "The path variable is $PATH"

إخراج أمر echo يظهر قيمة متغير البيئة PATH

احذر أن الأحرف الخاصة تحتاج إلى الهروب باستخدام شرطة مائلة عكسية \. $ على سبيل المثال:

إخراج أمر echo يظهر كيفية الهروب من رمز الدولار

هذه مجرد البداية. يمكننا القيام ببعض الأشياء الرائعة عندما يتعلق الأمر بالتفاعل مع ميزات الواجهة. يمكننا عرض الملفات في المجلد الحالي:

echo *

يمكننا عرض الملفات في المجلد الحالي التي تبدأ بالحرف o:

echo o*

يمكن استخدام أي أمر وميزة صالحة في Bash (أو أي واجهة تستخدمها) هنا. يمكنك طباعة مسار مجلدك الرئيسي:

echo ~

إخراج أمر echo ~ يظهر مسار المجلد الرئيسي للمستخدم

يمكنك أيضًا تنفيذ الأوامر، وطباعة النتيجة إلى الإخراج القياسي (أو إلى ملف، كما رأيت):

echo $(ls -al)

إخراج أمر echo $(ls -al) يظهر قائمة الملفات بتنسيق سطر واحد

لاحظ أن المسافات البيضاء لا يتم الاحتفاظ بها بشكل افتراضي. تحتاج إلى تضمين الأمر بعلامات اقتباس مزدوجة للقيام بذلك:

إخراج أمر echo

يمكنك إنشاء قائمة من السلاسل، على سبيل المثال نطاقات:

echo {1..5}

إخراج أمر echo {1..5} يظهر سلسلة من الأرقام

أمر Linux chown: تغيير مالك الملفات والمجموعات

كل ملف/دليل في نظام تشغيل مثل لينكس أو macOS (وكل نظام UNIX بشكل عام) له مالك. يمكن لمالك الملف فعل كل شيء به. يمكنه تحديد مصير ذلك الملف. يمكن للمالك (والمستخدم root) تغيير المالك إلى مستخدم آخر أيضًا، باستخدام أمر chown:

chown <owner> <file>

مثل هذا:

chown flavio test.txt

على سبيل المثال، إذا كان لديك ملف يملكه root، فلا يمكنك الكتابة فيه كمستخدم آخر:

محاولة الكتابة إلى ملف يملكه root تفشل بسبب الأذونات

يمكنك استخدام chown لنقل الملكية إليك:

استخدام chown لتغيير ملكية الملف ثم الكتابة إليه بنجاح

من الشائع جدًا أن تحتاج إلى تغيير ملكية دليل، وجميع الملفات الموجودة فيه بشكل متكرر، بالإضافة إلى جميع الدلائل الفرعية والملفات الموجودة فيها أيضًا. يمكنك القيام بذلك باستخدام الخيار -R:

chown -R <owner> <file>

لا تمتلك الملفات/الدلائل مالكًا فقط، بل تمتلك أيضًا مجموعة. من خلال هذا الأمر، يمكنك تغيير ذلك في نفس الوقت الذي تغير فيه المالك:

chown <owner>:<group> <file>

مثال:

chown flavio:users test.txt

يمكنك أيضًا تغيير مجموعة ملف فقط باستخدام أمر chgrp:

chgrp <group> <filename>

أمر Linux chmod: إدارة أذونات الملفات

كل ملف في أنظمة تشغيل لينكس / macOS (وأنظمة UNIX بشكل عام) لديه 3 أذونات: القراءة (read)، الكتابة (write)، والتنفيذ (execute). ادخل إلى مجلد، وقم بتشغيل أمر ls -al.

إخراج أمر ls -al يظهر أذونات الملفات والدلائل

السلاسل الغريبة التي تراها في كل سطر ملف، مثل drwxr-xr-x، تحدد أذونات الملف أو المجلد. دعنا نحللها.

يشير الحرف الأول إلى نوع الملف:

  • - يعني أنه ملف عادي
  • d يعني أنه دليل
  • l يعني أنه رابط

ثم لديك 3 مجموعات من القيم:

  • المجموعة الأولى تمثل أذونات مالك الملف
  • المجموعة الثانية تمثل أذونات أعضاء المجموعة المرتبط بها الملف
  • المجموعة الثالثة تمثل أذونات كل شخص آخر

تتكون هذه المجموعات من 3 قيم. rwx تعني أن هذا الشخص المحدد لديه حق الوصول للقراءة والكتابة والتنفيذ. أي شيء يتم إزالته يتم استبداله بـ -، مما يتيح لك تكوين مجموعات مختلفة من القيم والأذونات النسبية: rw-، r--، r-x، وهكذا.

يمكنك تغيير الأذونات الممنوحة لملف باستخدام أمر chmod. يمكن استخدام chmod بطريقتين. الأولى باستخدام وسيطات رمزية، والثانية باستخدام وسيطات رقمية. دعنا نبدأ بالرموز أولاً، وهي أكثر سهولة.

تكتب chmod متبوعًا بمسافة، وحرف:

  • a يرمز إلى all (الكل)
  • u يرمز إلى user (المستخدم)
  • g يرمز إلى group (المجموعة)
  • o يرمز إلى others (الآخرون)

ثم تكتب إما + أو - لإضافة إذن، أو لإزالته. ثم تدخل رمزًا أو أكثر من رموز الأذونات (r، w، x). كل ذلك متبوعًا باسم الملف أو المجلد. إليك بعض الأمثلة:

chmod a+r filename #الكل يمكنهم الآن القراءة
chmod a+rw filename #الكل يمكنهم الآن القراءة والكتابة
chmod o-rwx filename #الآخرون (ليس المالك، وليس في نفس مجموعة الملف) لا يمكنهم القراءة أو الكتابة أو التنفيذ للملف

يمكنك تطبيق نفس الأذونات على عدة أشخاص بإضافة عدة أحرف قبل + / -:

chmod og-r filename #الآخرون والمجموعة لا يمكنهم القراءة بعد الآن

في حال كنت تقوم بتحرير مجلد، يمكنك تطبيق الأذونات على كل ملف موجود في ذلك المجلد باستخدام الخيار -r (متكرر).

الوسيطات الرقمية أسرع ولكن أجدها صعبة التذكر عندما لا تستخدمها يوميًا. تستخدم رقمًا يمثل أذونات الشخص. يمكن أن تكون قيمة هذا الرقم بحد أقصى 7، ويتم حسابها بهذه الطريقة:

  • 1 إذا كان لديه إذن تنفيذ
  • 2 إذا كان لديه إذن كتابة
  • 4 إذا كان لديه إذن قراءة

هذا يمنحنا 4 مجموعات:

  • 0 لا توجد أذونات
  • 1 يمكنه التنفيذ
  • 2 يمكنه الكتابة
  • 3 يمكنه الكتابة، التنفيذ
  • 4 يمكنه القراءة
  • 5 يمكنه القراءة، التنفيذ
  • 6 يمكنه القراءة، الكتابة
  • 7 يمكنه القراءة، الكتابة والتنفيذ

نستخدمها في أزواج من 3، لتعيين أذونات جميع المجموعات الثلاث معًا:

chmod 777 filename
chmod 755 filename
chmod 644 filename

أمر Linux umask: التحكم في الأذونات الافتراضية للملفات

عند إنشاء ملف، لا يتعين عليك تحديد الأذونات مسبقًا. الأذونات لها قيم افتراضية. يمكن التحكم في هذه القيم الافتراضية وتعديلها باستخدام أمر umask. كتابة umask بدون وسيطات ستعرض لك القناع الحالي، في هذه الحالة 0022:

إخراج أمر umask يظهر القيمة الافتراضية 0022

ماذا يعني 0022؟ هذه قيمة ثمانية تمثل الأذونات. قيمة شائعة أخرى هي 0002. استخدم umask -S لرؤية ترميز سهل القراءة:

إخراج أمر umask -S يظهر الأذونات الافتراضية بتنسيق رمزي

في هذه الحالة، المستخدم (u)، مالك الملف، لديه أذونات القراءة والكتابة والتنفيذ على الملفات. المستخدمون الآخرون الذين ينتمون إلى نفس المجموعة (g) لديهم إذن القراءة والتنفيذ، وكذلك جميع المستخدمين الآخرين (o).

في الترميز الرقمي، نقوم عادة بتغيير الأرقام الثلاثة الأخيرة. إليك قائمة تعطي معنى للرقم:

  • 0 قراءة، كتابة، تنفيذ
  • 1 قراءة وكتابة
  • 2 قراءة وتنفيذ
  • 3 قراءة فقط
  • 4 كتابة وتنفيذ
  • 5 كتابة فقط
  • 6 تنفيذ فقط
  • 7 لا توجد أذونات

تجدر الإشارة إلى أن هذا الترميز الرقمي يختلف عن ذلك الذي نستخدمه في أمر chmod. يمكننا تعيين قيمة جديدة للقناع بتعيين القيمة في تنسيق رقمي:

umask 002

أو يمكنك تغيير إذن دور معين:

umask g+r

أمر Linux du: تحليل استخدام مساحة القرص للدلائل

سيقوم أمر du بحساب حجم الدليل ككل:

du

إخراج أمر du يظهر حجم الدليل بالبايت

الرقم 32 هنا هو قيمة معبر عنها بالبايت. تشغيل du * سيحسب حجم كل ملف على حدة:

إخراج أمر du * يظهر حجم كل ملف في الدليل

يمكنك تعيين du لعرض القيم بالميغابايت باستخدام du -m، والغيغابايت باستخدام du -g. سيعرض الخيار -h ترميزًا سهل القراءة للأحجام، يتكيف مع الحجم:

إخراج أمر du -h يظهر أحجام الملفات بتنسيق سهل القراءة

إضافة الخيار -a ستطبع حجم كل ملف في الدلائل أيضًا:

إخراج أمر du -ah يظهر أحجام جميع الملفات والدلائل الفرعية

شيء مفيد هو فرز الدلائل حسب الحجم:

du -h <directory> | sort -nr

ثم توجيهها إلى head للحصول على أول 10 نتائج فقط:

إخراج أمر du -h | sort -nr | head يعرض أكبر 10 دلائل حسب الحجم

أمر Linux df: عرض معلومات استخدام القرص

يستخدم أمر df للحصول على معلومات استخدام القرص. سيعرض شكله الأساسي معلومات حول وحدات التخزين المركبة:

إخراج أمر df يعرض معلومات استخدام القرص

باستخدام الخيار -h (df -h) سيعرض هذه القيم بتنسيق سهل القراءة:

إخراج أمر df -h يعرض معلومات استخدام القرص بتنسيق سهل القراءة

يمكنك أيضًا تحديد اسم ملف أو دليل للحصول على معلومات حول وحدة التخزين المحددة التي يعيش عليها:

إخراج أمر df -h /path/to/file يعرض استخدام القرص للمجلد الذي يحتوي على الملف

أمر Linux basename: استخراج اسم الملف من المسار

لنفترض أن لديك مسارًا إلى ملف، على سبيل المثال /Users/flavio/test.txt. تشغيل:

basename /Users/flavio/test.txt

سيعيد السلسلة test.txt:

إخراج أمر basename /Users/flavio/test.txt يظهر test.txt

إذا قمت بتشغيل basename على سلسلة مسار تشير إلى دليل، فستحصل على الجزء الأخير من المسار. في هذا المثال، /Users/flavio هو دليل:

إخراج أمر basename /Users/flavio يظهر flavio

أمر Linux dirname: استخراج مسار الدليل من المسار

لنفترض أن لديك مسارًا إلى ملف، على سبيل المثال /Users/flavio/test.txt. تشغيل:

dirname /Users/flavio/test.txt

سيعيد السلسلة /Users/flavio:

إخراج أمر dirname /Users/flavio/test.txt يظهر /Users/flavio

أمر Linux ps: عرض العمليات الجارية

يقوم جهاز الكمبيوتر الخاص بك بتشغيل أطنان من العمليات المختلفة في جميع الأوقات. يمكنك فحصها جميعًا باستخدام أمر ps:

إخراج أمر ps يعرض العمليات التي بدأها المستخدم في الجلسة الحالية

هذه هي قائمة العمليات التي بدأها المستخدم والتي تعمل حاليًا في الجلسة الحالية. هنا لدي بعض مثيلات fish shell، معظمها تم فتحه بواسطة VS Code داخل المحرر، ومثيل من Hugo يشغل معاينة تطوير موقع. هذه هي الأوامر المخصصة للمستخدم الحالي فقط. لسرد جميع العمليات، نحتاج إلى تمرير بعض الخيارات إلى ps. الأكثر شيوعًا الذي أستخدمه هو ps ax:

ps ax

إخراج أمر ps ax يعرض جميع العمليات الجارية

يستخدم الخيار a لسرد عمليات المستخدمين الآخرين أيضًا، وليس فقط عملياتك الخاصة. يعرض x العمليات غير المرتبطة بأي طرفية (لم يبدأها المستخدمون عبر طرفية). كما ترى، يتم قطع الأوامر الأطول. استخدم الأمر ps axww لمتابعة قائمة الأوامر في سطر جديد بدلاً من قطعها:

ps axww

إخراج أمر ps axww يعرض جميع العمليات مع الأوامر الكاملة

نحتاج إلى تحديد w مرتين لتطبيق هذا الإعداد (إنه ليس خطأ مطبعيًا). يمكنك البحث عن عملية معينة بدمج grep مع أنبوب، مثل هذا:

ps axww | grep "Visual Studio Code"

إخراج أمر ps axww | grep

تمثل الأعمدة التي يعرضها ps بعض المعلومات الأساسية. المعلومات الأولى هي PID، معرف العملية. هذا أمر أساسي عندما تريد الإشارة إلى هذه العملية في أمر آخر، على سبيل المثال لقتلها. ثم لدينا TT الذي يخبرنا بمعرف الطرفية المستخدمة. ثم STAT يخبرنا بحالة العملية:

  • I عملية خاملة (نائمة لأكثر من 20 ثانية تقريبًا)
  • R عملية قابلة للتشغيل
  • S عملية نائمة لأقل من 20 ثانية تقريبًا
  • T عملية متوقفة
  • U عملية في انتظار غير قابل للمقاطعة
  • Z عملية ميتة (zombie)

إذا كان لديك أكثر من حرف واحد، فإن الحرف الثاني يمثل معلومات إضافية، والتي يمكن أن تكون تقنية للغاية. من الشائع وجود + الذي يشير إلى أن العملية في المقدمة في طرفيتها. s يعني أن العملية هي قائد جلسة. TIME يخبرنا بمدة تشغيل العملية.

أمر Linux top: مراقبة العمليات في الوقت الفعلي

يستخدم أمر top لعرض معلومات ديناميكية في الوقت الفعلي حول العمليات الجارية في النظام. إنه مفيد حقًا لفهم ما يجري. استخدامه بسيط – ما عليك سوى كتابة top، وستغرق الطرفية بالكامل في هذا العرض الجديد:

واجهة أمر top تعرض معلومات النظام والعمليات الجارية في الوقت الفعلي

العملية طويلة الأمد. للخروج، يمكنك كتابة الحرف q أو Ctrl-C. هناك الكثير من المعلومات التي يتم تقديمها لنا: عدد العمليات، وعدد العمليات التي تعمل أو نائمة، وحمل النظام، واستخدام وحدة المعالجة المركزية، وغير ذلك الكثير. أدناه، يتم تحديث قائمة العمليات التي تستهلك أكبر قدر من الذاكرة ووحدة المعالجة المركزية باستمرار. بشكل افتراضي، كما ترى من عمود %CPU المميز، يتم فرزها حسب وحدة المعالجة المركزية المستخدمة. يمكنك إضافة علامة لفرز العمليات حسب الذاكرة المستخدمة:

top -o mem

أمر Linux kill: إرسال إشارات للعمليات

يمكن لعمليات لينكس تلقي الإشارات والتفاعل معها. هذه إحدى الطرق التي يمكننا من خلالها التفاعل مع البرامج قيد التشغيل. يمكن لبرنامج kill إرسال مجموعة متنوعة من الإشارات إلى برنامج. لا يستخدم فقط لإنهاء برنامج، كما يوحي الاسم، ولكن هذه هي وظيفته الرئيسية. نستخدمه بهذه الطريقة:

kill <PID>

بشكل افتراضي، يرسل هذا إشارة TERM إلى معرف العملية المحدد. يمكننا استخدام علامات لإرسال إشارات أخرى، بما في ذلك:

  • kill -HUP <PID>
  • kill -INT <PID>
  • kill -KILL <PID>
  • kill -TERM <PID>
  • kill -CONT <PID>
  • kill -STOP <PID>
  • HUP تعني hang up (إنهاء الاتصال). يتم إرسالها تلقائيًا عند إغلاق نافذة طرفية بدأت عملية قبل إنهاء العملية.
  • INT تعني interrupt (مقاطعة)، وترسل نفس الإشارة المستخدمة عندما نضغط على Ctrl-C في الطرفية، والتي عادة ما تنهي العملية.
  • KILL لا يتم إرسالها إلى العملية، بل إلى نواة نظام التشغيل، والتي توقف العملية وتنهيها على الفور.
  • TERM تعني terminate (إنهاء). ستتلقى العملية هذه الإشارة وتنهي نفسها. إنها الإشارة الافتراضية التي يرسلها kill.
  • CONT تعني continue (متابعة). يمكن استخدامها لاستئناف عملية متوقفة.
  • STOP لا يتم إرسالها إلى العملية، بل إلى نواة نظام التشغيل، والتي توقف العملية على الفور (ولكن لا تنهيها).

قد ترى أرقامًا مستخدمة بدلاً من ذلك، مثل kill -1 <PID>. في هذه الحالة، 1 يتوافق مع HUP. 2 يتوافق مع INT. 9 يتوافق مع KILL. 15 يتوافق مع TERM. 18 يتوافق مع CONT. 15 يتوافق مع STOP.

أمر Linux killall: إنهاء عمليات متعددة بالاسم

على غرار أمر kill، سيرسل killall الإشارة إلى عمليات متعددة في وقت واحد بدلاً من إرسال إشارة إلى معرف عملية محدد. هذا هو التركيب:

killall <name>

حيث name هو اسم برنامج. على سبيل المثال، يمكنك تشغيل مثيلات متعددة من برنامج top، وسيؤدي killall top إلى إنهاء جميعها. يمكنك تحديد الإشارة، كما هو الحال مع kill (وتحقق من دليل kill لقراءة المزيد عن الأنواع المحددة من الإشارات التي يمكننا إرسالها)، على سبيل المثال:

killall -HUP top

أمر Linux jobs: إدارة العمليات في الخلفية

عندما نشغل أمرًا في لينكس / macOS، يمكننا تعيينه للتشغيل في الخلفية باستخدام الرمز & بعد الأمر. على سبيل المثال، يمكننا تشغيل top في الخلفية:

top &

هذا مفيد جدًا للبرامج طويلة الأمد. يمكننا العودة إلى هذا البرنامج باستخدام أمر fg. يعمل هذا بشكل جيد إذا كان لدينا وظيفة واحدة فقط في الخلفية، وإلا نحتاج إلى استخدام رقم الوظيفة: fg 1، fg 2 وهكذا. للحصول على رقم الوظيفة، نستخدم أمر jobs.

لنفترض أننا نشغل top & ثم top -o mem &، لذلك لدينا مثيلان من top قيد التشغيل. سيخبرنا jobs بهذا:

إخراج أمر jobs يظهر قائمة بالعمليات الجارية في الخلفية

الآن يمكننا التبديل مرة أخرى إلى إحدى هذه العمليات باستخدام fg <jobid>. لإيقاف البرنامج مرة أخرى يمكننا الضغط على Cmd-Z. تشغيل jobs -l سيطبع أيضًا معرف العملية لكل وظيفة.

أمر Linux bg: استئناف العمليات المتوقفة في الخلفية

عندما يكون أمر قيد التشغيل، يمكنك تعليقه باستخدام Ctrl-Z. سيتوقف الأمر على الفور، وستعود إلى طرفية الواجهة. يمكنك استئناف تنفيذ الأمر في الخلفية، بحيث يستمر في العمل ولكنه لن يمنعك من القيام بأعمال أخرى في الطرفية. في هذا المثال، لدي أمران متوقفان:

إخراج أمر jobs يظهر عمليتين متوقفتين

يمكنني تشغيل bg 1 لاستئناف تنفيذ الوظيفة #1 في الخلفية. كان بإمكاني أيضًا قول bg بدون أي خيار، حيث أن الافتراضي هو اختيار الوظيفة #1 في القائمة.

أمر Linux fg: جلب العمليات إلى المقدمة

عندما يكون أمر قيد التشغيل في الخلفية، سواء بدأت تشغيله بـ & في النهاية (مثال: top &) أو وضعته في الخلفية باستخدام أمر bg، يمكنك إحضاره إلى المقدمة باستخدام fg. تشغيل:

fg

سيستأنف في المقدمة آخر وظيفة تم تعليقها. يمكنك أيضًا تحديد الوظيفة التي تريد استئنافها إلى المقدمة بتمرير رقم الوظيفة، والذي يمكنك الحصول عليه باستخدام أمر jobs.

إخراج أمر jobs يظهر عمليتين في الخلفية

تشغيل fg 2 سيستأنف الوظيفة #2:

إخراج أمر fg 2 يستأنف العملية الثانية إلى المقدمة

أمر Linux type: تحديد نوع الأمر

يمكن أن يكون الأمر أحد هذه الأنواع الأربعة:

  • قابل للتنفيذ (executable)
  • برنامج مدمج في الواجهة (shell built-in program)
  • دالة واجهة (shell function)
  • اسم مستعار (alias)

يمكن أن يساعد أمر type في معرفة ذلك، في حال أردنا معرفة ذلك أو كنا فضوليين. سيخبرك كيف سيتم تفسير الأمر. سيعتمد الإخراج على الواجهة المستخدمة. هذا هو Bash:

إخراج أمر type في Bash يظهر أنواع الأوامر

هذا هو Zsh:

إخراج أمر type في Zsh يظهر أنواع الأوامر

هذا هو Fish:

إخراج أمر type في Fish يظهر أنواع الأوامر

أحد أكثر الأشياء إثارة للاهتمام هنا هو أنه بالنسبة للأسماء المستعارة، سيخبرك بما يشير إليه. يمكنك رؤية الاسم المستعار ll، في حالة Bash و Zsh، ولكن Fish يوفره بشكل افتراضي، لذلك سيخبرك أنه دالة واجهة مدمجة.

أمر Linux which: تحديد موقع الأوامر

لنفترض أن لديك أمرًا يمكنك تنفيذه، لأنه في مسار الواجهة، ولكنك تريد معرفة مكانه. يمكنك القيام بذلك باستخدام which. سيعيد الأمر المسار إلى الأمر المحدد:

إخراج أمر which ls يظهر مسار الأمر ls

سيعمل which فقط على الملفات التنفيذية المخزنة على القرص، وليس الأسماء المستعارة أو وظائف الواجهة المدمجة.

أمر Linux nohup: تشغيل الأوامر في الخلفية بعد تسجيل الخروج

أحيانًا يتعين عليك تشغيل عملية طويلة الأمد على جهاز بعيد، ثم تحتاج إلى قطع الاتصال. أو ببساطة تريد منع توقف الأمر إذا كانت هناك أي مشكلة في الشبكة بينك وبين الخادم. الطريقة لجعل الأمر يعمل حتى بعد تسجيل الخروج أو إغلاق الجلسة إلى الخادم هي استخدام أمر nohup. استخدم nohup <command> للسماح للعملية بالاستمرار في العمل حتى بعد تسجيل الخروج.

أمر Linux xargs: تحويل المدخلات إلى وسيطات للأوامر

يستخدم أمر xargs في واجهة UNIX لتحويل المدخلات من الإدخال القياسي إلى وسيطات لأمر. بعبارة أخرى، من خلال استخدام xargs، يتم استخدام إخراج أمر كمدخل لأمر آخر. إليك التركيب الذي ستستخدمه:

command1 | xargs command2

نستخدم أنبوبًا (|) لتمرير الإخراج إلى xargs. سيتولى ذلك تشغيل الأمر command2، باستخدام إخراج command1 كوسيطة (وسيطات) له.

دعنا نقم بمثال بسيط. تريد إزالة بعض الملفات المحددة من دليل. هذه الملفات مدرجة داخل ملف نصي. لدينا 3 ملفات: file1، file2، file3. في todelete.txt لدينا قائمة بالملفات التي نريد حذفها، في هذا المثال file1 و file3:

ملف todelete.txt يحتوي على قائمة بالملفات المراد حذفها

سنقوم بتوجيه إخراج cat todelete.txt إلى أمر rm، عبر xargs. بهذه الطريقة:

cat todelete.txt | xargs rm

هذه هي النتيجة، تم حذف الملفات التي أدرجناها الآن:

إخراج أمر ls بعد حذف الملفات باستخدام xargs

الطريقة التي يعمل بها هي أن xargs سيشغل rm مرتين، مرة لكل سطر يعيده cat. هذا هو أبسط استخدام لـ xargs. هناك العديد من الخيارات التي يمكننا استخدامها. أحد أكثرها فائدة، في رأيي (خاصة عند البدء في تعلم xargs)، هو -p. باستخدام هذا الخيار، سيجعل xargs يطبع مطالبة تأكيد بالإجراء الذي سيتخذه:

إخراج أمر xargs -p يطلب تأكيدًا قبل تنفيذ الأمر

يتيح لك الخيار -n أن تخبر xargs بتنفيذ تكرار واحد في كل مرة، بحيث يمكنك تأكيدها بشكل فردي باستخدام -p. هنا نخبر xargs بتنفيذ تكرار واحد في كل مرة باستخدام -n1:

إخراج أمر xargs -n1 -p يطلب تأكيدًا لكل عملية حذف على حدة

الخيار -I هو خيار آخر يستخدم على نطاق واسع. يسمح لك بالحصول على الإخراج في عنصر نائب، ثم يمكنك القيام بأشياء مختلفة. أحدها هو تشغيل أوامر متعددة:

command1 | xargs -I % /bin/bash -c 'command2 %; command3 %'

مثال على استخدام xargs -I لتشغيل أوامر متعددة مع عنصر نائب

يمكنك استبدال الرمز % الذي استخدمته أعلاه بأي شيء آخر – إنه متغير.

أمر محرر Linux vim: محرر نصوص قوي للمطورين

vim هو محرر ملفات شائع جدًا، خاصة بين المبرمجين. يتم تطويره بنشاط وتحديثه بشكل متكرر، وهناك مجتمع كبير حوله. حتى أن هناك مؤتمر Vim! vi في الأنظمة الحديثة هو مجرد اسم مستعار لـ vim، والذي يعني vi improved (vi المحسّن). تبدأ تشغيله بتشغيل vi في سطر الأوامر.

واجهة محرر Vim عند البدء

يمكنك تحديد اسم ملف وقت الاستدعاء لتحرير هذا الملف المحدد:

vi test.txt

محرر Vim يفتح ملف test.txt

يجب أن تعلم أن Vim لديه وضعان رئيسيان:

  • وضع الأوامر (أو الوضع العادي)
  • وضع الإدراج (insert mode)

عند بدء تشغيل المحرر، تكون في وضع الأوامر. لا يمكنك إدخال نص كما تتوقع من محرر يعتمد على واجهة المستخدم الرسومية. يجب عليك الدخول إلى وضع الإدراج. يمكنك القيام بذلك بالضغط على المفتاح i. بمجرد القيام بذلك، تظهر كلمة -- INSERT -- في أسفل المحرر:

محرر Vim في وضع الإدراج

الآن يمكنك البدء في الكتابة وملء الشاشة بمحتويات الملف:

محرر Vim يعرض نصًا تم إدخاله في وضع الإدراج

يمكنك التنقل في الملف باستخدام مفاتيح الأسهم، أو باستخدام مفاتيح h - j - k - l. h-l لليسار واليمين، j-k للأسفل والأعلى.

بمجرد الانتهاء من التحرير، يمكنك الضغط على مفتاح Esc للخروج من وضع الإدراج والعودة إلى وضع الأوامر.

محرر Vim يعود إلى وضع الأوامر بعد الخروج من وضع الإدراج

في هذه المرحلة، يمكنك التنقل في الملف، ولكن لا يمكنك إضافة محتوى إليه (وكن حذرًا بشأن المفاتيح التي تضغط عليها، فقد تكون أوامر). شيء واحد قد ترغب في القيام به الآن هو حفظ الملف. يمكنك القيام بذلك بالضغط على : (نقطتين)، ثم w. يمكنك الحفظ والخروج بالضغط على : ثم w و q: :wq. يمكنك الخروج دون حفظ بالضغط على : ثم q و !: :q!.

يمكنك التراجع عن التحرير بالانتقال إلى وضع الأوامر والضغط على u. يمكنك إعادة التراجع (إلغاء التراجع) بالضغط على Ctrl-R.

هذه هي أساسيات العمل مع Vim. من هنا تبدأ حفرة أرنب لا يمكننا الدخول فيها في هذه المقدمة الصغيرة. سأذكر فقط هذه الأوامر التي ستبدأ بها التحرير باستخدام Vim:

  • الضغط على المفتاح x يحذف الحرف المميز حاليًا.
  • الضغط على A ينتقل إلى نهاية السطر المحدد حاليًا.
  • الضغط على 0 ينتقل إلى بداية السطر.
  • انتقل إلى الحرف الأول من كلمة واضغط على d متبوعًا بـ w لحذف تلك الكلمة. إذا اتبعتها بـ e بدلاً من w، فسيتم الحفاظ على المسافة البيضاء قبل الكلمة التالية.
  • استخدم رقمًا بين d و w لحذف أكثر من كلمة واحدة، على سبيل المثال استخدم d3w لحذف 3 كلمات إلى الأمام.
  • اضغط على d متبوعًا بـ d لحذف سطر كامل. اضغط على d متبوعًا بـ $ لحذف السطر بأكمله من حيث يوجد المؤشر، حتى النهاية.

لمعرفة المزيد عن Vim، أوصي بـ Vim FAQ. يمكنك أيضًا تشغيل أمر vimtutor، والذي يجب أن يكون مثبتًا بالفعل في نظامك وسيساعدك بشكل كبير على بدء استكشاف vim.

أمر محرر Linux emacs: محرر نصوص متعدد الاستخدامات

emacs هو محرر رائع ويعتبر تاريخيًا محرر أنظمة UNIX. اشتهرت حروب vi مقابل emacs والمناقشات الحادة بأنها تسببت في ساعات غير منتجة للعديد من المطورين حول العالم. emacs قوي جدًا. يستخدمه بعض الأشخاص طوال اليوم كنوع من نظام التشغيل (https://news.ycombinator.com/item?id=19127258). سنتحدث فقط عن الأساسيات هنا.

يمكنك فتح جلسة emacs جديدة ببساطة عن طريق استدعاء emacs:

واجهة محرر Emacs عند البدء

مستخدمو macOS، توقفوا لحظة الآن. إذا كنت على لينكس فلا توجد مشاكل، لكن macOS لا يشحن تطبيقات تستخدم GPLv3، وكل أمر UNIX مدمج تم تحديثه إلى GPLv3 لم يتم تحديثه. بينما توجد مشكلة صغيرة في الأوامر التي أدرجتها حتى الآن، في هذه الحالة، استخدام إصدار emacs من عام 2007 ليس هو نفسه تمامًا استخدام إصدار مع 12 عامًا من التحسينات والتغييرات. هذه ليست مشكلة مع Vim، الذي هو محدث. لإصلاح هذا، قم بتشغيل brew install emacs، وتشغيل emacs سيستخدم الإصدار الجديد من Homebrew (تأكد من تثبيت Homebrew).

يمكنك أيضًا تحرير ملف موجود عن طريق استدعاء emacs <filename>:

محرر Emacs يفتح ملفًا موجودًا للتحرير

يمكنك الآن البدء في التحرير. بمجرد الانتهاء، اضغط على Ctrl-X متبوعًا بـ Ctrl-W. تؤكد المجلد:

مطالبة Emacs بتأكيد المجلد للحفظ

ويخبرك Emacs أن الملف موجود، ويسألك عما إذا كان يجب الكتابة فوقه:

مطالبة Emacs بالكتابة فوق ملف موجود

أجب بـ y، وستحصل على تأكيد بالنجاح:

تأكيد Emacs على حفظ الملف بنجاح

يمكنك الخروج من Emacs بالضغط على Ctrl-X متبوعًا بـ Ctrl-C. أو Ctrl-X متبوعًا بـ c (مع الاستمرار في الضغط على Ctrl).

هناك الكثير مما يجب معرفته عن Emacs، بالتأكيد أكثر مما أستطيع كتابته في هذه المقدمة الصغيرة. أشجعك على فتح Emacs والضغط على Ctrl-H R لفتح الدليل المدمج و Ctrl-H T لفتح البرنامج التعليمي الرسمي.

أمر محرر Linux nano: محرر نصوص سهل الاستخدام للمبتدئين

nano هو محرر سهل الاستخدام للمبتدئين. قم بتشغيله باستخدام nano <filename>. يمكنك كتابة الأحرف مباشرة في الملف دون القلق بشأن الأوضاع. يمكنك الخروج دون تحرير باستخدام Ctrl-X. إذا قمت بتحرير مخزن الملف، سيسألك المحرر عن التأكيد ويمكنك حفظ التعديلات، أو تجاهلها. تظهر المساعدة في الأسفل أوامر لوحة المفاتيح التي تتيح لك العمل مع الملف:

واجهة محرر Nano تعرض خيارات الأوامر في الأسفل

pico هو نفسه تقريبًا، على الرغم من أن nano هو إصدار GNU من pico الذي لم يكن مفتوح المصدر في مرحلة ما من التاريخ. تم إنشاء نسخة nano لتلبية متطلبات ترخيص نظام تشغيل GNU.

أمر Linux whoami: عرض اسم المستخدم الحالي

اكتب whoami لطباعة اسم المستخدم المسجل حاليًا في جلسة الطرفية:

whoami

إخراج أمر whoami يظهر اسم المستخدم الحالي

ملاحظة: هذا يختلف عن أمر who am i، الذي يطبع المزيد من المعلومات.

أمر Linux who: عرض المستخدمين المسجلين

يعرض أمر who المستخدمين المسجلين في النظام. ما لم تكن تستخدم خادمًا يمكن لعدة أشخاص الوصول إليه، فمن المحتمل أن تكون أنت المستخدم الوحيد المسجل، عدة مرات:

إخراج أمر who يظهر المستخدمين المسجلين في النظام

لماذا عدة مرات؟ لأن كل واجهة أوامر مفتوحة ستعد كوصول. يمكنك رؤية اسم الطرفية المستخدمة، ووقت/يوم بدء الجلسة. ستخبرك الخيارات -aH لـ who بعرض المزيد من المعلومات، بما في ذلك وقت الخمول ومعرف العملية للطرفية:

إخراج أمر who -aH يظهر معلومات مفصلة عن المستخدمين المسجلين

سيسرد الأمر الخاص who am i تفاصيل جلسة الطرفية الحالية:

إخراج أمر who am i يظهر تفاصيل الجلسة الطرفية الحالية
إخراج أمر who am i يظهر تفاصيل الجلسة الطرفية الحالية (مثال آخر)

أمر Linux su: التبديل بين المستخدمين

بينما أنت مسجل الدخول إلى واجهة الطرفية بمستخدم واحد، قد تحتاج إلى التبديل إلى مستخدم آخر. على سبيل المثال، أنت مسجل الدخول كـ root لأداء بعض مهام الصيانة، ولكن بعد ذلك تريد التبديل إلى حساب مستخدم عادي. يمكنك القيام بذلك باستخدام أمر su:

su <username>

على سبيل المثال: su flavio. إذا كنت مسجل الدخول كمستخدم، فإن تشغيل su بدون أي شيء آخر سيطلب منك إدخال كلمة مرور المستخدم root، حيث أن هذا هو السلوك الافتراضي.

مطالبة أمر su بإدخال كلمة مرور المستخدم root

سيبدأ su واجهة أوامر جديدة كمستخدم آخر. عندما تنتهي، كتابة exit في الواجهة ستغلق تلك الواجهة، وستعيدك إلى واجهة المستخدم الحالية.

أمر Linux sudo: تشغيل الأوامر بصلاحيات المستخدم الخارق

يستخدم sudo عادة لتشغيل أمر كـ root. يجب أن تكون مخولًا لاستخدام sudo، وبمجرد أن تكون كذلك، يمكنك تشغيل الأوامر كـ root عن طريق إدخال كلمة مرور المستخدم الخاص بك (ليس كلمة مرور المستخدم root). الأذونات قابلة للتكوين بدرجة عالية، وهو أمر رائع بشكل خاص في بيئة خادم متعددة المستخدمين. يمكن منح بعض المستخدمين حق الوصول لتشغيل أوامر محددة من خلال sudo. على سبيل المثال، يمكنك تحرير ملف تكوين النظام:

sudo nano /etc/hosts

والذي سيفشل في الحفظ بخلاف ذلك نظرًا لعدم امتلاكك الأذونات لذلك. يمكنك تشغيل sudo -i لبدء واجهة أوامر كـ root:

إخراج أمر sudo -i يفتح واجهة أوامر كـ root

يمكنك استخدام sudo لتشغيل الأوامر كأي مستخدم. root هو الافتراضي، ولكن استخدم الخيار -u لتحديد مستخدم آخر:

sudo -u flavio ls /Users/flavio

أمر Linux passwd: تغيير كلمات مرور المستخدمين

يمتلك المستخدمون في لينكس كلمة مرور معينة. يمكنك تغيير كلمة المرور باستخدام أمر passwd. هناك حالتان هنا. الأولى هي عندما تريد تغيير كلمة مرورك. في هذه الحالة تكتب:

passwd

وسيطلب منك موجه تفاعلي كلمة المرور القديمة، ثم سيطلب منك كلمة المرور الجديدة:

مطالبة أمر passwd بتغيير كلمة المرور

عندما تكون root (أو لديك امتيازات المستخدم الخارق) يمكنك تعيين اسم المستخدم الذي تريد تغيير كلمة مروره له:

passwd <username> <new password>

في هذه الحالة لا تحتاج إلى إدخال كلمة المرور القديمة.

أمر Linux ping: اختبار اتصال الشبكة

يقوم أمر ping بإرسال طلب إلى مضيف شبكة معين، سواء على الشبكة المحلية أو على الإنترنت. تستخدمه بالصيغة ping <host> حيث يمكن أن يكون <host> اسم نطاق، أو عنوان IP. إليك مثال على إرسال طلب إلى google.com:

ping google.com

إخراج أمر ping google.com يظهر استجابات من خادم جوجل

يرسل الأمر طلبًا إلى الخادم، ويرجع الخادم استجابة. يستمر ping في إرسال الطلب كل ثانية، بشكل افتراضي. سيستمر في العمل حتى توقفه بـ Ctrl-C، ما لم تمرر عدد المرات التي تريد المحاولة فيها باستخدام الخيار -c: ping -c 2 google.com. بمجرد توقف ping، سيطبع بعض الإحصائيات حول النتائج: نسبة الحزم المفقودة، وإحصائيات حول أداء الشبكة.

كما ترى، تعرض الشاشة عنوان IP للمضيف، والوقت الذي استغرقه للحصول على الاستجابة. لا تدعم جميع الخوادم ping، في حال انتهت مهلة الطلب:

إخراج أمر ping يظهر انتهاء مهلة الطلب

أحيانًا يتم ذلك عن قصد، “لإخفاء” الخادم، أو لمجرد تقليل الحمل. يمكن أيضًا تصفية حزم ping بواسطة جدران الحماية.

يعمل ping باستخدام بروتوكول ICMP (Internet Control Message Protocol)، وهو بروتوكول طبقة الشبكة تمامًا مثل TCP أو UDP. يرسل الطلب حزمة إلى الخادم برسالة ECHO_REQUEST، ويرجع الخادم رسالة ECHO_REPLY. لن أخوض في التفاصيل، ولكن هذا هو المفهوم الأساسي.

يعد إرسال طلب إلى مضيف مفيدًا لمعرفة ما إذا كان المضيف قابلاً للوصول (بافتراض أنه ينفذ ping)، ومدى بعده من حيث الوقت الذي يستغرقه للعودة إليك. عادةً ما يكون الخادم الأقرب جغرافيًا، هو الأقل وقتًا الذي سيستغرقه للعودة إليك. تتسبب القوانين الفيزيائية البسيطة في أن المسافة الأطول تؤدي إلى مزيد من التأخير في الكابلات.

أمر Linux traceroute: تتبع مسار حزم الشبكة

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

هل أردت يومًا معرفة الخطوات التي تمر بها حزمك للقيام بذلك؟ أمر traceroute مصنوع لهذا الغرض. يمكنك استدعاء:

traceroute <host>

وسيقوم (ببطء) بجمع جميع المعلومات أثناء انتقال الحزمة. في هذا المثال، حاولت الوصول إلى مدونتي باستخدام traceroute flaviocopes.com:

إخراج أمر traceroute flaviocopes.com يظهر مسار الحزم

لا يعيد كل جهاز توجيه تم المرور به معلومات لنا. في هذه الحالة، يطبع traceroute * * *. بخلاف ذلك، يمكننا رؤية اسم المضيف، وعنوان IP، وبعض مؤشرات الأداء. لكل جهاز توجيه، يمكننا رؤية 3 عينات، مما يعني أن traceroute يحاول بشكل افتراضي 3 مرات لمنحك مؤشرًا جيدًا للوقت اللازم للوصول إليه. هذا هو السبب في أن تنفيذ traceroute يستغرق وقتًا طويلاً مقارنة بمجرد القيام بـ ping لهذا المضيف. يمكنك تخصيص هذا العدد باستخدام الخيار -q:

traceroute -q 1 flaviocopes.com

إخراج أمر traceroute -q 1 flaviocopes.com يظهر محاولة واحدة لكل قفزة

أمر Linux clear: مسح شاشة الطرفية

اكتب clear لمسح جميع الأوامر السابقة التي تم تشغيلها في الطرفية الحالية. ستتم مسح الشاشة وسترى فقط الموجه في الأعلى:

clear

شاشة طرفية فارغة بعد تنفيذ أمر clear

ملاحظة: هذا الأمر له اختصار مفيد: Ctrl-L. بمجرد القيام بذلك، ستفقد الوصول إلى التمرير لرؤية إخراج الأوامر السابقة التي تم إدخالها. لذا قد ترغب في استخدام clear -x بدلاً من ذلك، والذي لا يزال يمسح الشاشة، ولكنه يتيح لك العودة لرؤية العمل السابق عن طريق التمرير لأعلى.

أمر Linux history: عرض سجل الأوامر

في كل مرة تقوم فيها بتشغيل أمر، يتم حفظه في السجل. يمكنك عرض السجل بالكامل باستخدام:

history

إخراج أمر history يعرض سجل الأوامر مع أرقامها

يعرض هذا السجل بالأرقام. يمكنك استخدام التركيب !<command number> لتكرار أمر مخزن في السجل. في المثال أعلاه، كتابة !121 ستكرر الأمر ls -al | wc -l. عادةً ما يتم تخزين آخر 500 أمر في السجل.

يمكنك دمج هذا مع grep للعثور على أمر قمت بتشغيله:

history | grep docker

إخراج أمر history | grep docker يبحث عن أوامر docker في السجل

لمسح السجل، قم بتشغيل history -c.

أمر Linux export: تصدير المتغيرات البيئية

يستخدم أمر export لتصدير المتغيرات إلى العمليات الفرعية. ماذا يعني هذا؟ لنفترض أن لديك متغير TEST معرفًا بهذه الطريقة:

TEST="test"

يمكنك طباعة قيمته باستخدام echo $TEST:

إخراج أمر echo $TEST يظهر قيمة المتغير TEST

ولكن إذا حاولت تعريف سكريبت Bash في ملف script.sh بالأمر أعلاه:

ملف script.sh يحتوي على أمر echo $TEST

ثم عندما تقوم بتعيين chmod u+x script.sh وتقوم بتنفيذ هذا السكريبت بـ ./script.sh، فإن السطر echo $TEST لن يطبع شيئًا! هذا لأن متغير TEST في Bash تم تعريفه محليًا للواجهة. عند تنفيذ سكريبت واجهة أو أمر آخر، يتم تشغيل واجهة فرعية لتنفيذه، والتي لا تحتوي على المتغيرات المحلية للواجهة الحالية. لجعل المتغير متاحًا هناك، نحتاج إلى تعريف TEST ليس بهذه الطريقة:

TEST="test"

ولكن بهذه الطريقة:

export TEST="test"

جرب ذلك، وتشغيل ./script.sh الآن يجب أن يطبع “test“:

إخراج سكريبت يطبع قيمة المتغير TEST بعد تصديره

أحيانًا تحتاج إلى إلحاق شيء بمتغير. غالبًا ما يتم ذلك مع متغير PATH. تستخدم هذا التركيب:

export PATH=$PATH:/new/path

من الشائع استخدام export عند إنشاء متغيرات جديدة بهذه الطريقة. ولكن يمكنك أيضًا استخدامه عند إنشاء متغيرات في ملفات التكوين .bash_profile أو .bashrc مع Bash، أو في .zshenv مع Zsh. لإزالة متغير، استخدم الخيار -n:

export -n TEST

استدعاء export بدون أي خيار سيسرد جميع المتغيرات المصدرة.

أمر Linux crontab: جدولة المهام المتكررة

مهام Cron هي مهام مجدولة للتشغيل على فترات زمنية محددة. قد يكون لديك أمر يقوم بشيء كل ساعة، أو كل يوم، أو كل أسبوعين. أو في عطلات نهاية الأسبوع. إنها قوية جدًا، خاصة عند استخدامها على الخوادم لأداء مهام الصيانة والأتمتة.

أمر crontab هو نقطة الدخول للعمل مع مهام cron. أول شيء يمكنك القيام به هو استكشاف مهام cron التي قمت بتعريفها:

crontab -l

قد لا يكون لديك أي منها، مثلي:

إخراج أمر crontab -l يظهر عدم وجود مهام cron مجدولة

قم بتشغيل:

crontab -e

لتحرير مهام cron، وإضافة مهام جديدة. بشكل افتراضي، يفتح هذا مع المحرر الافتراضي، والذي عادة ما يكون vim. أنا أفضل nano أكثر. يمكنك استخدام هذا السطر لاستخدام محرر مختلف:

EDITOR=nano crontab -e

الآن يمكنك إضافة سطر واحد لكل مهمة cron. تركيب تعريف مهام cron مخيف نوعًا ما. لهذا السبب أستخدم عادة موقعًا لمساعدتي في إنشائه بدون أخطاء: https://crontab-generator.org/

مولد crontab عبر الإنترنت

تختار فترة زمنية لمهمة cron، وتكتب الأمر المراد تنفيذه. اخترت تشغيل سكريبت موجود في /Users/flavio/test.sh كل 12 ساعة. هذا هو سطر crontab الذي أحتاج إلى تشغيله:

* */12 * * * /Users/flavio/test.sh >/dev/null 2>&1

أقوم بتشغيل crontab -e:

EDITOR=nano crontab -e

وأضيف هذا السطر، ثم أضغط على Ctrl-X وأضغط على y للحفظ. إذا سار كل شيء على ما يرام، فسيتم إعداد مهمة cron:

تأكيد إضافة مهمة cron بنجاح

بمجرد الانتهاء من ذلك، يمكنك رؤية قائمة مهام cron النشطة عن طريق تشغيل:

crontab -l

إخراج أمر crontab -l يظهر المهمة المجدولة حديثًا

يمكنك إزالة مهمة cron عن طريق تشغيل crontab -e مرة أخرى، وإزالة السطر والخروج من المحرر:

تحرير crontab لإزالة مهمة مجدولة
تأكيد إزالة مهمة cron

أمر Linux uname: عرض معلومات النظام

استدعاء uname بدون أي خيارات سيعيد اسم رمز نظام التشغيل:

uname

إخراج أمر uname يظهر اسم نواة النظام

يعرض الخيار m اسم الأجهزة (x86_64 في هذا المثال) ويطبع الخيار p اسم بنية المعالج (i386 في هذا المثال):

uname -mp

إخراج أمر uname -mp يظهر بنية الأجهزة والمعالج

يطبع الخيار s اسم نظام التشغيل. يطبع r الإصدار، ويطبع v النسخة:

uname -srv

إخراج أمر uname -srv يظهر اسم نظام التشغيل والإصدار والنسخة

يطبع الخيار n اسم شبكة العقدة:

uname -n

إخراج أمر uname -n يظهر اسم شبكة العقدة

يطبع الخيار a جميع المعلومات المتاحة:

uname -a

إخراج أمر uname -a يظهر جميع معلومات النظام المتاحة

على macOS، يمكنك أيضًا استخدام أمر sw_vers لطباعة المزيد من المعلومات حول نظام التشغيل macOS. لاحظ أن هذا يختلف عن إصدار Darwin (النواة)، والذي أعلاه هو 19.6.0. Darwin هو اسم نواة macOS. النواة هي “جوهر” نظام التشغيل، بينما يسمى نظام التشغيل ككل macOS. في لينكس، لينكس هو النواة، وسيكون GNU/Linux هو اسم نظام التشغيل (على الرغم من أننا جميعًا نشير إليه باسم “لينكس”).

أمر Linux env: إدارة المتغيرات البيئية للعمليات

يمكن استخدام أمر env لتمرير متغيرات البيئة دون تعيينها في البيئة الخارجية (الواجهة الحالية). لنفترض أنك تريد تشغيل تطبيق Node.js وتعيين متغير USER له. يمكنك تشغيل:

env USER=flavio node app.js

وسيكون متغير البيئة USER متاحًا من تطبيق Node.js عبر واجهة Node process.env. يمكنك أيضًا تشغيل الأمر بمسح جميع متغيرات البيئة المعينة بالفعل، باستخدام الخيار -i:

env -i node app.js

في هذه الحالة، ستحصل على خطأ يقول env: node: No such file or directory لأن أمر node غير قابل للوصول، حيث أن متغير PATH الذي تستخدمه الواجهة للبحث عن الأوامر في المسارات الشائعة غير مضبوط. لذا تحتاج إلى تمرير المسار الكامل لبرنامج node:

env -i /usr/local/bin/node app.js

جرب مع ملف app.js بسيط بهذا المحتوى:

console.log(process.env.NAME)
console.log(process.env.PATH)

سترى الإخراج على النحو التالي:

undefined
undefined

يمكنك تمرير متغير بيئة:

env -i NAME=flavio node app.js

وسيكون الإخراج:

flavio
undefined

إزالة الخيار -i ستجعل PATH متاحًا مرة أخرى داخل البرنامج:

إخراج برنامج Node.js يظهر قيم متغيرات البيئة NAME و PATH

يمكن أيضًا استخدام أمر env لطباعة جميع متغيرات البيئة. إذا تم تشغيله بدون خيارات:

env

سيعيد قائمة بمتغيرات البيئة المعينة، على سبيل المثال:

HOME=/Users/flavio
LOGNAME=flavio
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
PWD=/Users/flavio
SHELL=/usr/local/bin/fish

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

printenv PATH

إخراج أمر printenv PATH يظهر قيمة متغير البيئة PATH

أمر Linux printenv: عرض قيم المتغيرات البيئية

إليك دليل سريع لأمر printenv، المستخدم لطباعة قيم متغيرات البيئة. في أي واجهة أوامر، يوجد عدد لا بأس به من متغيرات البيئة، يتم تعيينها إما بواسطة النظام، أو بواسطة سكريبتات الواجهة الخاصة بك وتكوينها. يمكنك طباعتها جميعًا إلى الطرفية باستخدام أمر printenv. سيكون الإخراج شيئًا كهذا:

HOME=/Users/flavio
LOGNAME=flavio
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
PWD=/Users/flavio
SHELL=/usr/local/bin/fish

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

printenv PATH

إخراج أمر printenv PATH يظهر قيمة متغير البيئة PATH

الخلاصة التقنية

يُعد إتقان أوامر لينكس الأساسية حجر الزاوية لأي مطور أو محترف تقني يسعى لتعزيز إنتاجيته والتحكم العميق في بيئة عمله. هذا الدليل قدم نظرة شاملة ومبسطة لأكثر من 60 أمرًا حيويًا، بدءًا من إدارة الملفات والدلائل وصولًا إلى مراقبة العمليات وجدولة المهام. إن فهم هذه الأوامر لا يقتصر على مجرد التنفيذ، بل يمتد إلى القدرة على دمجها بذكاء عبر الأنابيب والسكريبتات، مما يفتح آفاقًا واسعة للأتمتة والتحليل. في عالم يتزايد فيه الاعتماد على الأنظمة المستندة إلى يونكس، تظل هذه المعرفة أساسًا لا يتغير، وتستثمر وقتك فيها اليوم سيؤتي ثماره في مسيرتك المهنية لسنوات قادمة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *