أساسيات سطر الأوامر في Linux
خروج

الدرس 3 من 18 · المستخدم

الملفات والمجلدات: touch و mkdir و cp و mv و rm

25 د Ubuntu 24.04

الهدف

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

أهم النقاط

  • touch ينشئ ملفاً فارغاً، وmkdir ينشئ مجلداً (-p لإنشاء فرع كامل).
  • cp ينسخ (يبقى الأصل)، وmv ينقل أو يعيد التسمية (يختفي الأصل).
  • rm يحذف نهائياً: لا توجد سلة مهملات في سطر الأوامر.
  • بالنسبة إلى مجلد: cp -r وrm -r. أما rmdir فلا يحذف إلا مجلداً فارغاً.
  • -i يطلب التأكيد، و-v يعرض ما يتم تنفيذه. استعملهما ما دمت مبتدئاً.

1. الإنشاء: touch و mkdir

touch

ينشئ touch ملفاً فارغاً إذا لم يكن موجوداً. وإذا كان موجوداً، فلا يغيّر محتواه، بل يضبط فقط تاريخ تعديله على الوقت الحالي.

touch commandes.log                 # ينشئ ملفاً فارغاً
touch lundi.txt mardi.txt           # عدة ملفات دفعة واحدة
ls -l commandes.log                 # الحجم 0

mkdir

mkdir factures                      # ينشئ مجلداً
mkdir clients fournisseurs          # عدة مجلدات
mkdir archives/2026                 # خطأ إذا لم يكن archives موجوداً
mkdir -p archives/2026/janvier      # -p ينشئ المجلدات الأم الناقصة، دون خطأ إن كانت موجودة
mkdir -pv archives/2026/fevrier     # -v يعرض كل مجلد يتم إنشاؤه

باستعمال الأقواس المعقوفة في bash، يمكن إنشاء بنية كاملة في سطر واحد:

mkdir -p archives/2026/{janvier,fevrier,mars}
# يحوّل bash هذا إلى: archives/2026/janvier archives/2026/fevrier archives/2026/mars

2. النسخ: cp

cp stock.csv stock-sauvegarde.csv          # نسخ باسم جديد
cp stock.csv archives/                     # نسخ إلى مجلد، بالاسم نفسه
cp stock.csv archives/stock-janvier.csv    # نسخ إلى مجلد، باسم جديد
cp a.txt b.txt c.txt archives/             # عدة ملفات ← يجب أن تكون الوجهة الأخيرة مجلداً
cp -r site/ site-sauvegarde/               # -r (تكراري): إلزامي لنسخ مجلد
cp -i stock.csv archives/                  # -i: يسأل قبل الكتابة فوق ملف موجود
cp -p stock.csv archives/                  # -p: يحتفظ بالتاريخ والصلاحيات والمالك
cp -a site/ site-sauvegarde/               # -a (أرشيف): -r + -p + الروابط، أدقّ نسخة ممكنة

تنبيه: افتراضياً، يكتب cp فوق أي ملف يحمل الاسم نفسه في الوجهة دون تحذير (إلا إذا وُجد اسم مستعار cp -i، كما هو الحال للمستخدم root على Rocky / RHEL).

3. النقل وإعادة التسمية: mv

في Linux، إعادة التسمية = النقل إلى اسم جديد. لذلك فالأمر المعتاد لإعادة التسمية هو mv (يوجد أيضاً أمر rename، لكن صيغته تختلف من توزيعة إلى أخرى: تجنّبه في البداية).

mv vieux.tmp ancien.tmp                    # إعادة تسمية داخل المجلد نفسه
mv ancien.tmp archives/                    # نقل إلى مجلد
mv vieux.tmp archives/ancien.tmp           # نقل وإعادة تسمية معاً
mv dossier1 dossier2                       # المجلد يُنقل أيضاً، دون الخيار -r
mv -i stock.csv archives/                  # يسأل قبل الكتابة فوق ملف
mv -n stock.csv archives/                  # لا يكتب فوق أي ملف أبداً (no clobber)

يكون mv داخل القرص نفسه فورياً، حتى لمجلد حجمه 50 Go: إذ يغيّر Linux الاسم فقط في فهرس القرص، ولا يعيد نسخ البيانات.

4. الحذف: rm و rmdir

rm vieux.tmp                         # يحذف ملفاً
rm -i *.tmp                          # يطلب التأكيد لكل ملف
rm -v vieux.tmp                      # يعرض ما يتم حذفه
rmdir brouillons                     # يحذف مجلداً فارغاً (وإلا: Directory not empty)
rm -r brouillons                     # يحذف مجلداً مع كل محتواه
rm -rf brouillons                    # -f: لا يطرح أي سؤال، ويتجاهل الملفات غير الموجودة

لا توجد سلة مهملات. الملف المحذوف بـ rm ضائع (إلا إذا كانت لديك نسخة احتياطية). اكتسب ثلاث عادات:

  1. أعد قراءة الأمر قبل الضغط على Entrée، خاصة مع -r و*.
  2. نفّذ أولاً ls بـالنمط نفسه: ls *.tmp، ثم rm *.tmp.
  3. احذر المسافات: rm -rf / srv/boutique (مع مسافة بعد /) سيستهدف الجذر. الإصدارات الحديثة من rm ترفض حذف / دون الخيار --no-preserve-root، لكن لا تعتمد على شبكة الأمان هذه.

5. الأحرف البديلة (globbing)

تستبدل الصدفة (shell) بعض الأحرف بقائمة الأسماء المطابقة، قبل تشغيل الأمر:

النمط يطابق مثال
* أي سلسلة من الأحرف (حتى الفارغة) *.csv ← كل ملفات CSV
? حرفاً واحداً بالضبط f?.txt ← f1.txt، fA.txt
[abc] حرفاً واحداً من القائمة essai[12].txt
[0-9] رقماً واحداً ticket-[0-9][0-9].txt
ls *.csv                  # كل ملفات .csv في المجلد الحالي
cp *.csv archives/2026/   # ينسخها كلها
rm essai?.txt             # يحذف essai1.txt و essai2.txt… لكن ليس essai10.txt

لا يشمل * الملفات المخفية (التي يبدأ اسمها بنقطة).

6. مثال كامل من البداية إلى النهاية

يدير يوسف بقالة في فاس. في كل شهر، يؤرشف ملف المخزون:

cd /srv/boutique
mkdir -p archives/2026                         # تحضير مكان الترتيب
cp -p stock.csv archives/2026/stock-janvier.csv # الاحتفاظ بنسخة مؤرّخة
mv vieux.tmp archives/ancien.tmp               # ترتيب ملف منسي
ls brouillons                                  # التحقق مما سيُحذف
rm -r brouillons                               # ثم الحذف
ls -R archives                                 # مراقبة النتيجة

ملخص الأوامر

الأمر الدور الخيار الأساسي
touch f إنشاء ملف فارغ / تحديث تاريخه —
mkdir d إنشاء مجلد -p المجلدات الأم
cp src dst النسخ -r للمجلدات، -a نسخة دقيقة، -i تأكيد
mv src dst النقل / إعادة التسمية -i، -n
rm f الحذف -r للمجلدات، -i تأكيد، -f إجبار
rmdir d حذف مجلد فارغ —

أخطاء متكررة

  • نسيان -r عند نسخ مجلد: cp: -r not specified; omitting directory.
  • الكتابة فوق ملف بـ cp أو mv دون الانتباه: استعمل -i أو -n.
  • rm -rf مع متغير فارغ داخل سكربت: يصبح rm -rf "$DOSSIER"/* هو rm -rf /* إذا كان المتغير فارغاً. تحقّق دائماً من متغيراتك.
  • الخلط بين rmdir وrm -r: rmdir حذر عن قصد ويرفض حذف مجلد غير فارغ.

التطبيق العملي (Lab)

في هذا المختبر على Ubuntu 24.04، يضع متجر صغير ملفاته في /srv/boutique. ستقوم، بالترتيب، بما يلي:

  1. إنشاء ملف فارغ لسجل الطلبات؛
  2. إنشاء مجلد أرشيف السنة بأمر واحد؛
  3. أرشفة نسخة من المخزون (يجب أن يبقى الأصل)؛
  4. ترتيب ملف مؤقت قديم وإعادة تسميته؛
  5. حذف مجلد المسودات.

نفّذ ls -R /srv/boutique في البداية وفي النهاية لترى ما أنجزته.

اختبار قصير

  1. ما الفرق بين cp وmv؟
  2. ماذا يفعل mkdir -p a/b/c إذا لم يكن a موجوداً؟
  3. كيف تعيد تسمية rapport.txt إلى rapport-2026.txt؟
  4. لماذا قد يفشل rmdir brouillons، وماذا يجب أن تستعمل بدلاً منه؟
  5. ماذا يفعل touch بملف موجود مسبقاً؟
الأجوبة
  1. cp ينشئ نسخة ويترك الأصل؛ أما mv فينقل (أو يعيد التسمية): يختفي الأصل من مكانه القديم.
  2. ينشئ a، ثم a/b، ثم a/b/c، دون أي خطأ.
  3. mv rapport.txt rapport-2026.txt
  4. لأن المجلد غير فارغ؛ يجب استعمال rm -r brouillons (بعد التحقق من محتواه).
  5. لا يمسّ المحتوى، بل يحدّث تاريخ التعديل.

مصادر مرجعية: Debian Reference (رخصة حرة)، Ubuntu Server Guide (CC BY-SA 3.0)، توثيق Red Hat Enterprise Linux (CC BY-SA 3.0). نص أصلي من MasterLinux.

تمارين تطبيقية

تُنجَز على Ubuntu 24.04

الطرفية عبر الإنترنت قادمة قريبًا. في انتظار ذلك، أنجِز هذه المهام على جهازك بنظام لينكس أو على آلة افتراضية أو WSL.

  1. أنشئ ملفاً فارغاً /srv/boutique/commandes.log
    عرض تلميحالأمر touch ينشئ ملفاً فارغاً إذا لم يكن موجوداً.
    عرض الحل
    touch /srv/boutique/commandes.log

    التحقق : test -f /srv/boutique/commandes.log

  2. أنشئ دفعة واحدة المجلد /srv/boutique/archives/2026 (المجلد archives غير موجود بعد).
    عرض تلميحيحتاج mkdir إلى الخيار -p لإنشاء المجلدات الأم الناقصة أيضاً.
    عرض الحل
    mkdir -p /srv/boutique/archives/2026

    التحقق : test -d /srv/boutique/archives/2026

  3. انسخ /srv/boutique/stock.csv إلى /srv/boutique/archives/2026 باسم stock-janvier.csv (يجب أن يبقى الملف الأصلي في مكانه).
    عرض تلميحcp source destination — يمكن أن تتضمن الوجهة الاسم الجديد.
    عرض الحل
    cp /srv/boutique/stock.csv /srv/boutique/archives/2026/stock-janvier.csv

    التحقق : grep -q pain /srv/boutique/archives/2026/stock-janvier.csv && test -f /srv/boutique/stock.csv

  4. انقل /srv/boutique/vieux.tmp إلى /srv/boutique/archives مع إعادة تسميته ancien.tmp
    عرض تلميحالأمر mv ينقل ويعيد التسمية في أمر واحد.
    عرض الحل
    mv /srv/boutique/vieux.tmp /srv/boutique/archives/ancien.tmp

    التحقق : test -f /srv/boutique/archives/ancien.tmp && test ! -e /srv/boutique/vieux.tmp

  5. احذف المجلد /srv/boutique/brouillons مع كل محتواه.
    عرض تلميحيرفض rmdir حذف مجلد غير فارغ؛ يجب استعمال rm مع الخيار -r. أعد قراءة الأمر قبل الضغط على Entrée!
    عرض الحل
    rm -r /srv/boutique/brouillons

    التحقق : test -d /srv/boutique/archives && test ! -e /srv/boutique/brouillons

المراجع الرسمية المعتمدة: Debian Reference — chapitre 1, commandes de manipulation de fichiers ; Ubuntu Server Guide — notions de base. نص أصلي من MasterLinux.