Linux: عمليات الملفات والدلائل — إنشاء / نسخ / نقل / حذف
في طرفية لينكس، إنشاء الملفات ونسخها ونقلها وحذفها يتم بضغطات مفاتيح قليلة — أسرع وأدق من استخدام الماوس.
📋 المتطلبات المسبقة: يجب إكمال
- الدرس 4: التنقل في نظام الملفات
1. ما ستتعلمه
- touch: إنشاء ملفات وتحديث الطوابع الزمنية
- mkdir: إنشاء دلائل (بما فيها -p للإنشاء المتكرر)
- cp: نسخ ملفات ودلائل
- mv: نقل وإعادة تسمية
- rm: حذف آمن (بما فيها تحذير خطر -rf)
2. شياو مينغ يتعلم إنشاء هيكل مشروع كامل بسطر واحد
(1) الألم: إنشاء الدلائل طبقة بطبقة بالنقر باليمين
أراد شياو مينغ إنشاء هيكل دليل مشروع: myblog/src/css وmyblog/src/js وmyblog/docs. على ويندوز كان عليه النقر باليمين → مجلد جديد، مُنشئًا كل طبقة يدويًا — عمل متكرر في كل مرة.
(2) أمر واحد ينشئ الهيكل كاملًا
المهندس الأول بوب كتب سطرًا واحدًا في طرفيته:
mkdir -p myblog/{src/{css,js,img},docs}
بعد ضغط Enter، أظهر tree myblog:
myblog/
├── src/
│ ├── css/
│ ├── js/
│ └── img/
└── docs/
انبهر شياو مينغ. فهم أخيرًا لماذا يحب المطورون الطرفية.
(3) الفائدة: كفاءة العمليات ترتفع بشكل كبير
بعد تعلم أوامر العمليات الخمسة، سرعة شياو مينغ في إنشاء وتنظيم الملفات انتقلت من "دقائق" إلى "ثوانٍ."
3. نقاط المعرفة
(1) touch — إنشاء ملفات أو تحديث الطوابع الزمنية
touch filename
إذا لم يكن الملف موجودًا، touch ينشئ ملفًا فارغًا. إذا كان موجودًا، يُحدَّث وقت الوصول والتعديل إلى الوقت الحالي.
(2) mkdir — إنشاء دلائل
mkdir dirname # إنشاء دليل واحد
mkdir -p a/b/c # إنشاء متكرر (ينشئ الدلائل الأب تلقائيًا إن لم تكن موجودة)
mkdir dir1 dir2 dir3 # إنشاء عدة دلائل دفعة واحدة
mkdir -p src/{css,js} # توسيع الأقواس للإنشاء المجمّع
> 💡 نصيحة: `mkdir -p` مع توسيع الأقواس `{a,b,c}` هي مجموعة bash قوية — `mkdir -p project/{src/{css,js},docs}` ينشئ شجرة دلائل مشروع كاملة بسطر واحد، أسرع بكثير من إنشاء كل طبقة على حدة.
(3) cp — نسخ
cp source destination # نسخ ملف
cp -r source_dir dest_dir # نسخ دليل بشكل متكرر
cp -i source destination # وضع تفاعلي (تأكيد قبل الكتابة فوق)
cp -u source destination # نسخ فقط إذا كان المصدر أحدث
cp -v source destination # عرض تقدم النسخ
cp -p source destination # حفظ خصائص الملف (صلاحيات/طوابع زمنية)
(4) mv — نقل وإعادة تسمية
mv oldname newname # إعادة تسمية
mv file.txt /path/to/dest/ # نقل ملف إلى دليل آخر
mv dir1 dir2 # إعادة تسمية إذا dir2 غير موجود؛ نقله داخله إذا كان موجودًا
mv -i source dest # تأكيد قبل الكتابة فوق
mv -u source dest # نقل فقط إذا كان المصدر أحدث
(5) rm — حذف
rm file.txt # حذف ملف
rm -r dirname # حذف دليل بشكل متكرر
rm -f file.txt # حذف بالقوة (بدون تأكيد)
rm -i file.txt # وضع تفاعلي (تأكيد قبل الحذف)
rm -rf dirname # حذف متكرر بالقوة (⚠️ مجموعة خطرة)
rm -rf / سيحذف النظام بالكامل. لا تشغّل أبدًا rm -rf / كمستخدم جذر. اعتد على استخدام -i في العمليات اليومية.
rm -rf لا تذهب لسلة المحذوفات ولا يمكن استرجاعها بالطرق العادية. قبل استخدام rm -rf، تأكد دائمًا من دليلك الحالي (pwd) والمسار الذي تحذفه لتجنب الحذف العرضي. فكّر في إضافة alias rm='rm -i' إلى ملف .bashrc كإجراء أمان.
(6) الروابط الصلبة مقابل الروابط الرمزية
| الميزة | رابط صلب | رابط رمزي (symlink) |
|---|---|---|
| الأمر | ln target link_name |
ln -s target link_name |
| inode | نفس الملف الأصلي | مختلف |
| عبر أنظمة الملفات | لا | نعم |
| يمكن ربط الدلائل | لا | نعم |
| بعد حذف الأصلي | الرابط يعمل | الرابط ينقطع (رابط معلّق) |
| حجم الملف | نفس الأصلي | يخزّن سلسلة المسار فقط |
# رابط صلب
ln original.txt hardlink.txt
# رابط رمزي
ln -s /usr/bin/python3 python3
(7) ▶ مثال: إنشاء ملفات ودلائل
# إنشاء ملفات فارغة
touch index.html
touch style.css script.js # إنشاء عدة دفعة واحدة
# إنشاء دلائل
mkdir projects
mkdir -p projects/web/src/css # إنشاء دلائل متداخلة بشكل متكرر
# توسيع الأقواس (ميزة bash)
mkdir -p {2024,2025,2026}/{01,02,03}
# ينشئ: 2024/01، 2024/02، 2024/03، 2025/01، ...
الإخراج:
TEXT2024: 01 02 03 2025: 01 02 03 2026: 01 02 03
(8) ▶ مثال: نسخ ملفات
# نسخ ملف واحد
cp index.html index.backup.html
# نسخ دليل (يتطلب -r)
cp -r projects projects-backup
# وضع تفاعلي لمنع الكتابة فوق العرضية
cp -i important.txt /backup/
# حفظ خصائص الملف
cp -p config.conf /backup/
الإخراج:
TEXTcp: overwrite '/backup/important.txt'? n
(9) ▶ مثال: نقل وإعادة تسمية
# إعادة تسمية ملف
mv old-report.md report-2026.md
# نقل إلى دليل آخر
mv report.md ~/Documents/reports/
# إعادة تسمية مجمّعة (باستخدام حلقة)
for f in *.html; do mv "$f" "${f%.html}.htm"; done
الإخراج:
TEXT(لا مخرجات، تمت إعادة تسمية الملف)
(10) ▶ مثال: حذف آمن
# الأمان أولًا: وضع تفاعلي
rm -i file.txt
# حذف دليل فارغ
rmdir empty-dir
# حذف دليل غير فارغ
rm -r old-project/
# استخدم بحذر (يحذف بدون سؤال)
rm -f temp.log
(11) ▶ مثال: عمليات مجمّعة بالرموز الشاملة
# نسخ كل ملفات .jpg
cp *.jpg ~/Pictures/
# حذف كل ملفات .tmp المؤقتة
rm *.tmp
# نقل الملفات التي تبدأ بـ2024
mv 2024* ~/archive/
# عرض الملفات التي تنتهي برقم
ls *[0-9]
الإخراج:
TEXTreport2024.md log2025.txt backup1.tar.gz
(12) ▶ مثال شامل: إنشاء هيكل دليل مشروع كامل
# شياو مينغ ينشئ مشروع مدونته (سطر واحد يفعل كل شيء)
mkdir -p myblog/{src/{css,js,img},docs,scripts,test}
# إنشاء ملف فهرس HTML تحت src
touch myblog/src/index.html
# نسخ كنسخة احتياطية
cp -r myblog myblog-backup
# إعادة تسمية دليل النسخة الاحتياطية
mv myblog-backup myblog-2026-07
# عرض الهيكل النهائي
find myblog -type f -o -type d | sort
❓ أسئلة شائعة
س: هل
rm -rf /فعليًا يحذف النظام بالكامل؟ ج: \1
س: ما الفرق بين cp وmv عند العمل على الدلائل؟ ج:
cpيتطلب علامة-rلنسخ الدلائل (بشكل متكرر).mvلا يحتاج — نقل دليل يستخدم نفس أمر نقل ملف. إذا الدليل الهدف غير موجود،mvيُعيد التسمية؛ إذا كان موجودًا، المصدر يُنقل داخله.
س: كيف أتعامل مع أسماء الملفات التي تحتوي مسافات؟ ج: \1
س: كيف أعيد تسمية الملفات بشكل مجمّع؟ ج: استخدم حلقة
for:for f in *.jpg; do mv "$f" "prefix_$f"; done، أو أداةrenameالمخصصة:rename 's/\.jpg$/\.png/' *.jpg.
س: ماذا يحدث إذا حذفت الملف الأصلي لرابط رمزي؟ ج: الرابط الرمزي يصبح "رابطًا مقطوعًا" —
ls -lسيُعرض اسمًا أحمر يومض، والوصول إليه سيعطي خطأNo such file or directory. الروابط الصلبة لا تتأثر (لأنها تشير مباشرة إلى inode الملف الأصلي).
📖 ملخص
touchينشئ ملفات فارغة؛mkdir -pينشئ دلائل متداخلةcp -rينسخ الدلائل؛mvينقل أو يُعيد التسمية؛rm -rيحذف الدلائل- توسيع الأقواس
{a,b,c}يتيح الإنشاء المجمّع lnينشئ روابط صلبة؛ln -sينشئ روابط رمزيةrm -rfمجموعة خطرة — تأكد دائمًا من دليلك الحالي وهويتك قبل التنفيذ
📝 تمارين
- أساسي (صعوبة ⭐): استخدم
mkdir -pلإنشاء شجرة الدلائلlinux/assignments/{hw1,hw2,hw3}/{src,docs}، واستخدم توسيع الأقواس لإنشاءmain.pyفي الدليل الفرعي src لكل hw - متوسط (صعوبة ⭐⭐): انسخ hw3 كـhw4 وتحقق، ثم احذف hw1/src/main.py، واستخدم
rm -rلحذف دليل hw2 بالكامل - متقدم (صعوبة ⭐⭐⭐): أنشئ رابطًا رمزيًا يشير إلى
/etc/hostnameوتحقق منه، ثم اكتب سطرًا واحدًا باستخدامfindلتحديد كل ملفاتmain.pyالتي أنشأتها وأعد تسميتها مجمّعًا إلىmain.sh