الدرس 3 من 18 · المستخدم
الملفات والمجلدات: touch و mkdir و cp و mv و rm
الهدف
إنشاء الملفات والمجلدات ونسخها ونقلها وإعادة تسميتها وحذفها من سطر الأوامر، مع معرفة الخيارات التي تجنّبك الكوارث.
أهم النقاط
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 ضائع (إلا إذا كانت لديك نسخة احتياطية). اكتسب ثلاث عادات:
- أعد قراءة الأمر قبل الضغط على Entrée، خاصة مع
-rو*. - نفّذ أولاً
lsبـالنمط نفسه:ls *.tmp، ثمrm *.tmp. - احذر المسافات:
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. ستقوم، بالترتيب، بما يلي:
- إنشاء ملف فارغ لسجل الطلبات؛
- إنشاء مجلد أرشيف السنة بأمر واحد؛
- أرشفة نسخة من المخزون (يجب أن يبقى الأصل)؛
- ترتيب ملف مؤقت قديم وإعادة تسميته؛
- حذف مجلد المسودات.
نفّذ ls -R /srv/boutique في البداية وفي النهاية لترى ما أنجزته.
اختبار قصير
- ما الفرق بين
cpوmv؟ - ماذا يفعل
mkdir -p a/b/cإذا لم يكنaموجوداً؟ - كيف تعيد تسمية
rapport.txtإلىrapport-2026.txt؟ - لماذا قد يفشل
rmdir brouillons، وماذا يجب أن تستعمل بدلاً منه؟ - ماذا يفعل
touchبملف موجود مسبقاً؟
الأجوبة
cpينشئ نسخة ويترك الأصل؛ أماmvفينقل (أو يعيد التسمية): يختفي الأصل من مكانه القديم.- ينشئ
a، ثمa/b، ثمa/b/c، دون أي خطأ. mv rapport.txt rapport-2026.txt- لأن المجلد غير فارغ؛ يجب استعمال
rm -r brouillons(بعد التحقق من محتواه). - لا يمسّ المحتوى، بل يحدّث تاريخ التعديل.
مصادر مرجعية: Debian Reference (رخصة حرة)، Ubuntu Server Guide (CC BY-SA 3.0)، توثيق Red Hat Enterprise Linux (CC BY-SA 3.0). نص أصلي من MasterLinux.