في نهاية هذا الدليل ستعرف كيف تحذف ملفًا، ومجلدًا فارغًا، وشجرة مجلدات كاملة، وملفات مختارة بحسب الاسم أو العمر، مع التحقق من الهدف في كل مرة قبل التنفيذ. لا توجد في لينكس سلة محذوفات في سطر الأوامر: الحذف نهائي. لذلك تهمّ طريقة العمل بقدر ما يهمّ الأمر نفسه.
المتطلبات
- وصول إلى الطرفية (shell) على جهاز لينكس، محليًا أو عبر SSH، مثل خادم VPS لينكس
- مستخدم يملك صلاحية الكتابة في المجلد المعني (أو صلاحية
sudo) - نسخة احتياطية حديثة لكل ما هو مهم
تحقق من الهدف قبل الحذف
انتقل إلى المجلد الصحيح واعرض محتواه. يستغرق ذلك ثانيتين ويمنع معظم الحوادث.
Bashpwd ls -la
إذا كنت تستخدم نمطًا (امتدادًا أو بادئة)، فاعرض أولًا ما سيشمله. سيستخدم الأمر rm القائمة نفسها بالضبط.
Bashls -d *.log
احذف ملفًا
الأمر الأساسي هو rm.
Bashrm report.txt
أضف الخيار -i ليطلب تأكيدًا قبل الحذف، والخيار -v ليعرض ما يحذفه.
Bashrm -iv report.txt
ثم تحقق بالأمر ls report.txt: ظهور رسالة «No such file or directory» يؤكد أن الملف حُذف.
احذف عدة ملفات
تتيح لك الرموز البديلة (wildcards) في الـ shell استهداف مجموعة من الملفات. اعرضها أولًا بـ ls ثم احذفها.
Bashrm -v *.tmp rm -v photo_{01..05}.jpg
تجنّب استخدام رمز بديل مجرّد مثل rm * في مجلد لست متأكدًا منه. وإذا كان اسم الملف يبدأ بشرطة، فاستخدم -- للإشارة إلى نهاية الخيارات:
Bashrm -- -strange-file.txt
احذف مجلدًا فارغًا
الأمر rmdir لا يحذف إلا المجلدات الفارغة. وهذا مقصود، فهو بمثابة حاجز أمان.
Bashrmdir old_folder
لحذف المجلدات الأم التي أصبحت فارغة بدورها:
Bashrmdir -p project/cache/tmp
احذف مجلدًا مع كل محتواه
يلزم هنا الخيار التكراري -r. قدّر أولًا حجم ما ستفقده.
Bashdu -sh old_project find old_project -type f | wc -l
ثم احذف مع طلب التأكيد:
Bashrm -ri old_project
مع آلاف الملفات يصبح التأكيد المتكرر غير عملي. الخيار -f يعطّله:
Bashrm -rf old_project
لا تضع أبدًا متغيرًا لم تتحقق منه داخل هذا الأمر. في rm -rf "$DIR"/ إذا كان $DIR فارغًا فإنك تستهدف الجذر. في السكربتات أضف set -u أو استخدم "${DIR:?}" الذي يوقف التنفيذ إذا كان المتغير فارغًا.
احذف الملفات بحسب عمرها
يفلتر الأمر find بمعايير دقيقة (الاسم، النوع، العمر، الحجم). القاعدة: شغّله أولًا دون أي إجراء، ثم أضف -delete.
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30
إذا طابقت القائمة ما تتوقعه:
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30 -delete
يعني -mtime +30 الملفات التي عُدّلت قبل أكثر من 30 يومًا. ضع -delete في النهاية: يقيّم find الشروط من اليسار إلى اليمين، وإذا وُضع -delete مبكرًا جدًا حذف كل شيء.
امسح ملفًا حساسًا بطريقة أكثر أمانًا
الأمر rm يزيل مدخل الملف، وليس بالضرورة البيانات من القرص. أما shred فيكتب فوق المحتوى قبل الحذف.
Bashshred -u -v secret.key
لهذه الطريقة حدود على أقراص SSD وأنظمة الملفات ذات السجل (journaling) والأقراص التي تحتوي على لقطات (snapshots)، إذ قد تبقى بيانات قديمة. وفي حالة البيانات شديدة الحساسية، يبقى تشفير القرص منذ البداية هو الحل الموثوق.
عالج الأخطاء الشائعة
Permission denied
ليست لديك صلاحية الكتابة على المجلد الأب (هو الذي يتحكم في الحذف، وليس الملف نفسه). تحقق بالأمر ls -ld DIRECTORY، ثم استخدم sudo إن كان ذلك مشروعًا:
Bashsudo rm -v /path/to/file
Operation not permitted حتى مع sudo
على الأرجح يحمل الملف السمة غير القابلة للتغيير (immutable). اعرضها، وأزلها، ثم احذف الملف.
Bashlsattr file.txt sudo chattr -i file.txt sudo rm file.txt
Argument list too long
أنتج الرمز البديل عددًا من الوسائط يفوق ما يقبله النظام. استعن بـ find الذي يعالج الملفات واحدًا تلو الآخر:
Bashfind . -maxdepth 1 -type f -name "*.tmp" -delete
Directory not empty أو Device or resource busy
مع rmdir تُعدّ الرسالة الأولى طبيعية: المجلد يحتوي ملفات، بما فيها المخفية (ls -A). أما إذا كانت نقطة تحميل أو عملية تستخدمه، فحدّدها بالأمر lsof +D DIRECTORY أو findmnt، ثم حرّره قبل إعادة المحاولة.
للتدرّب دون مخاطرة، تفيدك بيئة مؤقتة: على خادم VPS يمكنك إنشاء مجلد تجريبي وارتكاب الأخطاء دون عواقب. وتجد أدلة أخرى من النوع نفسه في قسم الدروس التعليمية.
FAQ
هل يمكن استرجاع ملف حُذف بالأمر rm؟
نادرًا ودون ضمان. أدوات مثل extundelete أو testdisk تستعيد البيانات أحيانًا إذا توقفت عن الكتابة على القرص فورًا. الحماية الوحيدة الموثوقة هي النسخ الاحتياطي.
ما الفرق بين rm -r وrm -rf؟
الأمر rm -r يحذف بشكل تكراري لكنه يطلب تأكيدًا للملفات المحمية من الكتابة. أما rm -rf فيفرض الحذف ويتجاهل بصمت الملفات غير الموجودة. احتفظ به للحالات التي تحققت فيها من الهدف مسبقًا.
كيف أحذف مجلدًا يحتوي اسمه على مسافات؟
ضع الاسم بين علامتي اقتباس أو هرّب المسافات: rm -r "My folder" أو rm -r My\ folder. وبدون ذلك يعامل الـ shell كل كلمة على أنها عنصر مستقل.
هل توجد سلة محذوفات في سطر الأوامر؟
نعم، عبر الحزمة trash-cli (الأمر trash-put) التي تنقل العناصر إلى سلة المستخدم بدل مسحها. وهي نادرًا ما تكون مثبّتة افتراضيًا على الخوادم، فاعتد أن تعرض المحتوى قبل أن تحذف.