أدوات gnu
مقدمة
لا شك أن أدوات مشروع GNU، التي بدأ تطويرها ريتشارد ستالمان، تعد حجر الزاوية في أنظمة التشغيل الحديثة، ورغم أهميتها القصوى، إلا أنها غالباً ما تُنسى ولا يتم الحديث عنها بقدر ما تستحق.
لذا قررنا كتابة هذا المقال لنسلط الضوء على أهم الأدوات التي طورها ريتشارد ومجتمع البرمجيات الحرة. هذه الأدوات عديدة وعريقة، بل إن بعضها أقدم من نواة "لينكس" نفسها.
GNU Coreutils
هي الحزمة الأساسية التي تحتوي على أدوات سطر الأوامر الشهيرة التي نستخدمها يومياً للتعامل مع الملفات والنصوص.
من أشهر هذه الأدوات: ls, rm, mv, cat (ملاحظة: الأمر cd هو غالباً أمر داخلي في الصدفة Shell Built-in وليس جزءاً من Coreutils، لكنه يستخدم معها دائماً).
لنشرح وظائف هذه الأدوات:
![]() |
| richard stallman |
لنتعرف فى هذا المقال عن هذى الادوات
وهي من تطوير richard stallman
GNU Coreutils
ادوات سطر الأوامر فى لينكس مثل ls و cd و pwd و rm و mv
لنشرح هذى الأدوات وما ظيفاتها
1. الأمر rm
مثال
$ rm text.txt
سيقوم هذا الأمر بحذف الملف اللذي يحمل اسم text.txt
انما عندما لا يوجد ملف بهذا الاسم سوف يقول No such file or directory
مثال
$ rm file.txt
rm: cannot remove 'text.txt': No such file or directory
2.cp
امر الcp اختصار كلمة cope من اهم الأوامر اللتي سوف تتعامل معاها فى حياتك على التيرمنال لانه يقوم بنسخ الملف من مكان لاخر
مثال
$ cp text.txt text1.txtهذا احد الامثلة لو كان فى نفس المجلد
$ cp text1 gnu/
لنقل فى مجلد فرعي فى نفس المجلد اللذي نحن فيه
$ cp text.txt /mnt/data/folder
لنقل فى مسار اخر كليا
3.mv
وهذا امر يتم استخدامه بكثرة بين من يستخدم التيرمنال لانه امر مسؤل عن نقل الملفات او اعادة تسميتها
مثال
$ mv text.txt text1.txt
وهنا قمنا بإعادة تسمية ملف
$ mv text.txt gnu/
وهنا نقلنا ملف من مسار لمسار فرعي
$ mv text.txt /mnt/data/folder
وهنا قمنا بنقل الملف من مكان لمكان اخر
Markdown
4. ls
أمر ls هو اختصار لـ List، وهو بمثابة "عينك" داخل التيرمينال. لا يمكنك التحرك بدونه لأنه يعرض لك الملفات والمجلدات الموجودة في المسار الحالي.
مثال:
$ ls
سيعرض لك الملفات الظاهرة فقط.
لكن المحترفين يستخدمون خيارات إضافية (Flags) للحصول على معلومات أكثر:
$ ls -a
هذا الخيار (all) يعرض الملفات المخفية (التي تبدأ بنقطة . مثل ملفات الإعدادات .bashrc أو .config).
$ ls -lh
هذا الخيار يعرض التفاصيل (الحجم، الصلاحيات، المالك) وبصيغة مقروءة للبشر (Human readable).
5. mkdir
أمر mkdir هو اختصار لـ Make Directory، ووظيفته إنشاء المجلدات الجديدة.
مثال:
$ mkdir my_folder
سيقوم بإنشاء مجلد جديد.
خدعة مفيدة جداً (Flag -p): إذا أردت إنشاء مجلد داخل مجلد غير موجود أصلاً (مسار كامل)، استخدم -p:
$ mkdir -p projects/python/appسيقوم بإنشاء المجلد projects ثم python بداخله ثم app دفعة واحدة.
6. touch
أمر بسيط جداً ولكنه مهم. وظيفته الأساسية تحديث الطابع الزمني للملف، لكننا نستخدمه في 99% من الحالات لإنشاء ملف فارغ جديد بسرعة.
مثال:
$ touch main.py
سينشئ ملفاً فارغاً اسمه main.py جاهزاً للكتابة بداخله.
7. cat
أمر cat هو اختصار لـ Concatenate. نستخدمه لقراءة محتوى الملفات النصية وعرضها مباشرة داخل التيرمينال دون فتح محرر نصوص.
مثال:
$ cat /etc/os-release
سيعرض لك معلومات عن توزيعة اللينكس التي تستخدمها حالياً.
8. pwd
أمر pwd هو اختصار لـ Print Working Directory. عندما تتوه داخل المجلدات الكثيرة، اكتب هذا الأمر لتعرف "أين أنا الآن؟".
مثال:
$ pwd
/home/ahmed/gnu
Markdown
أدوات معالجة النصوص (Text Processing)
هذه الأدوات هي الجندي المجهول في عالم Linux، وتستخدم لفلترة وتعديل وتحليل النصوص بسرعة فائقة.
9. grep
أمر grep هو اختصار لـ Global Regular Expression Print. وظيفته البحث عن كلمة أو جملة محددة داخل الملفات.
مثال:
$ grep "linux" article.txt
سيبحث عن كلمة "linux" داخل الملف ويعطيك السطر الذي وردت فيه.
10. sed
أمر sed هو اختصار لـ Stream Editor. هو محرر نصوص قوي جداً، نستخدمه غالباً لاستبدال النصوص بشكل آلي دون فتح الملف.
مثال:
$ sed 's/old/new/g' file.txt
هذا الأمر سيستبدل كلمة "old" بكلمة "new" في كامل النص ويعرض النتيجة (حرف s يعني استبدال، و g تعني global أي في كل السطر).
11. awk (gawk)
أداة awk هي لغة برمجة كاملة مصممة لمعالجة النصوص وتنسيق البيانات، وتستخدم غالباً لاستخراج أعمدة محددة من النصوص.
مثال:
$ awk '{print $1}' data.txt
سيقوم بطباعة الكلمة الأولى فقط من كل سطر في الملف (مفيد جداً مع مخرجات الأوامر الأخرى).
12. sort
كما هو واضح من الاسم، يقوم بترتيب السطور داخل الملف (أبجدياً أو رقمياً).
مثال:
$ sort names.txt
سيرتب الأسماء أبجدياً من A إلى Z. ##13. uniq
أمر uniq يستخدم لإزالة التكرار من السطور المتتالية. وغالباً ما يُستخدم مع sort.
مثال:
$ sort names.txt | uniq
يقوم بترتيب الملف أولاً ثم حذف الأسماء المكررة لتظهر مرة واحدة فقط.
14. cut
يستخدم لقص جزء محدد من كل سطر، سواء بناءً على عدد الحروف أو فاصل معين (مثل الفاصلة).
مثال:
$ cut -c 1-5 file.txt
سيعرض أول 5 حروف فقط من كل سطر.
15. tr
أمر tr هو اختصار لـ Translate. يستخدم لاستبدال أو حذف أحرف معينة من المخرجات.
مثال:
$ cat file.txt | tr a-z A-Z
سيحول كل حروف الملف من حروف صغيرة (Lowercase) إلى كبيرة (Uppercase).
16. diff
أمر diff يستخدم لمقارنة ملفين وإخبارك بالفرق بينهما سطراً بسطر. مهم جداً للمبرمجين.
مثال:
$ diff file1.txt file2.txt
سيظهر لك ما تم إضافته أو حذفه في الملف الثاني مقارنة بالأول.
17. patch
أداة patch تستخدم لتطبيق التعديلات (التي ولدها أمر diff) على ملف أصلي. هي أساس تحديث البرمجيات مفتوحة المصدر.
مثال:
$ patch file1.txt < changes.dissسيقوم بتحديث file1.txt بناءً على الفروقات المسجلة في ملف changes.diff.
GCC – GNU Compiler Collection
1. GCC (GNU Compiler Collection)
كانت تعني سابقاً GNU C Compiler، لكنها تطورت لتصبح مجموعة ضخمة تدعم لغات عديدة. هي الأداة التي تترجم الكود المصدري (Source Code) إلى لغة الآلة (Machine Code). بدونها، لم نكن لنستطيع بناء نواة Linux نفسها!
أهم أمرين فيها هما:
أ. gcc
هو المترجم الخاص لملفات لغة C.
مثال: لنفرض أن لديك ملف كود اسمه hello.c. لتحويله إلى برنامج يعمل:
$ gcc hello.c -o hello
ب.g++
هو المترجم الخاص لملفات لغة C++.
مثال:
$ g++ main.cpp -o myapp
./myapp
Markdown
محررات النصوص (Text Editors)
لا تكتمل أي توزيعة لينكس بدون محررات نصوص، وتتميز أدوات GNU بتنوعها لتناسب المبتدئين والخبراء.
1. nano
محرر النصوص الأبسط والأشهر للمبتدئين. يتميز بكونه سهل الاستخدام جداً، حيث تظهر اختصارات لوحة المفاتيح في أسفل الشاشة دائماً.
مثال:
$ nano config.txt
(للخروج وحفظ الملف، تضغط Ctrl+X ثم Y ثم Enter، وهي التعليمات التي ستراها أسفل الشاشة).
2. GNU Emacs
يصفه البعض بأنه "نظام تشغيل" وليس مجرد محرر نصوص! هو محرر ضخم وقوي جداً، قابل للتخصيص بشكل لا نهائي باستخدام لغة Lisp. يمكنك استخدامه لكتابة الكود، تصفح الملفات، قراءة البريد، وحتى تصفح الويب.
مثال لفتحه في التيرمينال:
$ emacs -nw file.c
(الخيار -nw يعني No Window، لفتحه داخل التيرمينال وليس كنافذة مستقلة).
3. ed
هو "الأب الروحي" لمحررات النصوص في Unix. هو محرر سطري (Line Editor) قديم جداً، لا يعرض لك النص كاملاً أمامة بل تتعامل معه سطرًا بسطر.
رغم أنه نادراً ما يستخدم الآن للكتابة اليومية، إلا أنه مفيد جداً في السكربتات الآلية أو عند تعطل كل شيء آخر في النظام.
مثال:
$ ed file.txt
(ستجد أنه صامت تماماً! للبدء بالكتابة تحتاج لمعرفة أوامره الخاصة مثل a للإضافة و w للحفظ)
Markdown
أدوات الأرشفة والضغط (Archiving and Compression)
تتميز أدوات GNU بامتلاكها أقوى أدوات الضغط التي توفر مساحة تخزين هائلة وتسهل نقل الملفات.
1. tar
هو "ملك الأرشفة" في لينكس واختصار لـ Tape Archive. وظيفته الأساسية هي تجميع عدة ملفات ومجلدات داخل "حاوية" واحدة (ملف واحد)، وغالباً ما يُستخدم مع أدوات الضغط الأخرى.
أهم الخيارات (Flags) التي ستحفظها مثل اسمك:
c: إنشاء (Create).x: استخراج (Extract).v: عرض التفاصيل (Verbose).f: تحديد اسم الملف (File).
أمثلة: لضغط مجلد (أرشفة):
$ tar -cvf archive.tar my_folder/
لفك الضغط (استخراج): Bash
$ tar -xvf archive.tar
2. gzip
أداة GNU zip، وهي الأكثر شيوعاً لضغط الملفات بسرعة عالية. تنتج ملفات بامتداد .gz.
مثال:
$ gzip file.txt
(سيتحول الملف إلى file.txt.gz ويقل حجمه).
لفك الضغط:
$ gzip -d file.txt.gz
3. bzip2
أداة ضغط تشبه gzip ولكنها تستخدم خوارزمية مختلفة (Burrows-Wheeler). تتميز بأنها تعطي حجم ملف أقل (ضغط أقوى) لكنها أبطأ قليلاً في عملية الضغط. امتدادها .bz2.
مثال:
$ bzip2 file.txt
4. xz
الأداة الأحدث والأقوى حالياً. توفر أعلى نسبة ضغط مقارنة بالسابقين، ولذلك أصبحت المعيار المعتمد في أرشفة نواة لينكس (Linux Kernel archives) وحزم التوزيعات الحديثة. امتدادها .xz.
مثال:
$ xz file.txt
معلومة للمحترفين: غالباً ما نستخدم tar لدمج هذه الأدوات في أمر واحد.
لإنشاء ملف tar.gz: نستخدم tar -czvf (حرف z لـ gzip). لإنشاء ملف tar.xz: نستخدم tar -cJvf (حرف J لـ xz).
أدوات الشبكات والإنترنت (Networking Tools)
لا تكتمل قوة سطر الأوامر دون القدرة على الاتصال بالإنترنت أو إدارة الشبكات. يقدم مشروع GNU أدوات عريقة لهذا الغرض.
1. wget
أداة التحميل الأسطورية (World Wide Web Get). تتميز بأنها قوية جداً وثابتة، يمكنها تحميل الملفات في ظروف الشبكة السيئة واستكمال التحميل عند انقطاعه.
مثال:
$ wget [https://example.com/file.iso](https://example.com/file.iso)
لاستكمال تحميل توقف سابقاً (نستخدم c-): Bash
$ wget -c [https://example.com/huge-file.zip](https://example.com/huge-file.zip)
2. GnuTLS
هي مكتبة وأدوات لتنفيذ بروتوكولات الأمان (SSL/TLS و DTLS). هي المنافس الحر لمكتبة OpenSSL، وتستخدمها العديد من برامج GNU لتأمين الاتصالات وتشفير البيانات عبر الشبكة.
مثال (لفحص شهادة أمان موقع):
$ gnutls-cli google.com
3. GNU Inetutils
هي حزمة تجمع "أدوات الشبكة الشائعة" (Common Networking Utilities). تضم مجموعة من الأدوات الكلاسيكية التي لا غنى عنها لأي مدير شبكات:
أ. ping
الأداة الأولى في تشخيص مشاكل الشبكة. ترسل حزمة بيانات صغيرة للخادم وتنتظر الرد (Echo Reply) للتأكد من أن الموقع يعمل.
مثال:
$ ping google.com
ب. ftp
اختصار لـ File Transfer Protocol. أداة لنقل الملفات بين جهازك والخادم. رغم قدمها، إلا أنها ما زالت تستخدم بكثرة في إدارة مواقع الويب القديمة وخوادم الملفات.
مثال:
$ ftp ftp.example.com
ج. telnet
بروتوكول قديم للاتصال بالأجهزة عن بعد. تحذير: لا يستخدم حالياً لتسجيل الدخول (Login) لأنه غير مشفر (يرسل كلمات المرور كنص واضح). استخدامه الحديث: يستخدمه المحترفون الآن فقط لاختبار ما إذا كان "منفذ" (Port) معين مفتوحاً أم لا.
مثال (لاختبار المنفذ 80):
$ telnet google.com 80
محمل الإقلاع (Bootloader) GNU GRUB
اختصار لـ GRand Unified Bootloader. هو البرنامج الأول الذي يعمل عند تشغيل حاسوبك.
له وظيفتان رئيسيتان تتمان عبر أمرين مختلفين:
أ. التثبيت (grub-install)
هذا الأمر يقوم بتثبيت ملفات الإقلاع فعلياً على القرص الصلب (تحديداً في قسم EFI). نستخدمه عند تنصيب النظام لأول مرة أو عند "إصلاح النظام" من بيئة حية (Live USB).
مثال (لأنظمة UEFI):
$ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
مثال (ﻷأنظمة bios):
$ grub-install --target=i386-pc /dev/sda
ب. التحديث (grub-mkconfig)
بعد التثبيت، نستخدم هذا الأمر للبحث عن الأنظمة المثبتة (مثل Windows أو توزيعات أخرى) وتوليد ملف الإعدادات grub.cfg.
مثال:
$ grub-mkconfig -o /boot/grub/grub.cfg/etc/default/grub
لكن grub ليس مجرد اؤامر بل هو عالم عملاق داخل ملف /etc/default/grub ولذلالك وجب شرحها
1. GRUB_DEFAULT
يحدد النظام الذي سيبدأ تلقائياً إذا لم تلمس شيئاً.
GRUB_DEFAULT=0
0: يعني الخيار الأول في القائمة (عادة أحدث كيرنل Arch). saved: سيقوم بتذكر آخر نظام اخترته وسيدخل عليه في المرة القادمة (مفيد جداً إذا كنت تستخدم Dual Boot مع ويندوز).
2. GRUB_TIMEOUT
الوقت (بالثواني) الذي ستنتظره القائمة قبل الدخول تلقائياً.
GRUB_TIMEOUT=5
إذا جعلته 0: سيدخل فوراً دون إظهار القائمة (تحتاج للضغط على Shift بسرعة أثناء الإقلاع لإظهارها).
إذا جعلته -1: ستنتظر القائمة إلى الأبد حتى تختار بنفسك.
3. GRUB_CMDLINE_LINUX_DEFAULT
هذا أهم سطر للمحترفين. هنا تضع "بارامترات الكيرنل" (Kernel Parameters).
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
quiet: لتقليل النصوص التي تظهر بسرعة أثناء الإقلاع.
loglevel=3: لإخفاء رسائل النظام غير المهمة.
لأصحاب كروت NVIDIA: هنا نضيف nvidia_drm.modeset=1.
لتحسين البطارية: هنا نضيف إعدادات مثل nowatchdog.
- GRUB_THEME
ولمن يحب تخصيص شكل grub فسوف يلاحظ هذا السطر كثيرا
GRUB_THEME="/boot/grub/themes/Hyperland/theme.txt"
هنا تضع مسار "الثيم" الخاص بـ GRUB لتغيير شكله من الشاشة السوداء المملة إلى شكل جمالي بصور وأيقونات. نظرة سريعة داخل /boot/grub/grub.cfg (للقراءة فقط)
الخلاصة (القاعدة الذهبية):
عدّل ملف /etc/default/grub.
نفذ أمر التحديث الذي شرحناه سابقاً:
grub-mkconfig -o /boot/grub/grub.cfg
هكذا يتم تطبيق تعديلاتك بأمان.

