فارسی (Farsi)
€EUR

حذف فایل و پوشه در لینوکس با خط فرمان

4 min
سرور مجازی (VPS/VDS)

در پایان این آموزش می‌دانید چگونه یک فایل، یک پوشه خالی، یک درخت کامل پوشه‌ها و فایل‌هایی را که بر اساس نام یا قدمت فیلتر شده‌اند حذف کنید، آن هم با بررسی هدف پیش از هر اقدام. در لینوکس، در خط فرمان سطل زباله وجود ندارد: حذف قطعی است. بنابراین روش کار به اندازه خود دستور اهمیت دارد.

پیش‌نیازها

  • دسترسی shell به یک ماشین لینوکس (محلی یا SSH)، برای مثال یک VPS لینوکس
  • کاربری با دسترسی نوشتن روی پوشه موردنظر (یا sudo)
  • یک بکاپ اخیر از هر چیز مهم

بررسی هدف پیش از حذف

به پوشه درست بروید و محتوایش را فهرست کنید. این کار دو ثانیه طول می‌کشد و از بیشتر حوادث جلوگیری می‌کند.

Bash
pwd ls -la

برای یک الگو (پسوند، پیشوند)، ابتدا نمایش دهید چه چیزهایی را شامل می‌شود. دستور rm دقیقاً از همین فهرست استفاده خواهد کرد.

Bash
ls -d *.log

حذف یک فایل

دستور پایه rm است.

Bash
rm report.txt

گزینه -i را اضافه کنید تا تأیید بخواهد، و -v را تا آنچه حذف می‌کند نمایش دهد.

Bash
rm -iv report.txt

سپس با ls report.txt کنترل کنید: پیام «No such file or directory» حذف را تأیید می‌کند.

حذف چند فایل

وایلدکاردهای shell امکان هدف‌گیری یک دسته فایل را می‌دهند. ابتدا با ls فهرست کنید، سپس حذف کنید.

Bash
rm -v *.tmp rm -v photo_{01..05}.jpg

از یک وایلدکارد تنها مانند rm * در پوشه‌ای که از آن مطمئن نیستید خودداری کنید. اگر نام یک فایل با خط تیره شروع می‌شود، از -- برای نشان دادن پایان گزینه‌ها استفاده کنید:

Bash
rm -- -strange-file.txt

حذف یک پوشه خالی

rmdir فقط پوشه‌های خالی را حذف می‌کند. این عمدی است: به‌عنوان حفاظ ایمنی عمل می‌کند.

Bash
rmdir old_folder

برای حذف پوشه‌های والدی که خالی شده‌اند:

Bash
rmdir -p project/cache/tmp

حذف یک پوشه و تمام محتوای آن

اینجا گزینه بازگشتی -r لازم است. ابتدا تخمین بزنید چه چیزی را از دست می‌دهید.

Bash
du -sh old_project find old_project -type f | wc -l

سپس با تأیید حذف کنید:

Bash
rm -ri old_project

روی هزاران فایل، تأیید گرفتن عملی نیست. گزینه -f آن را غیرفعال می‌کند:

Bash
rm -rf old_project

هرگز یک متغیر بررسی‌نشده را در این دستور قرار ندهید. با rm -rf "$DIR"/، اگر $DIR خالی باشد، ریشه سیستم را هدف گرفته‌اید. در یک اسکریپت، set -u را اضافه کنید یا از "${DIR:?}" استفاده کنید که اگر متغیر خالی باشد اجرا را متوقف می‌کند.

حذف فایل‌ها بر اساس قدمت

find بر اساس معیارهای دقیق (نام، نوع، سن، اندازه) فیلتر می‌کند. اصل کار: ابتدا بدون هیچ اقدامی اجرا کنید، سپس -delete را اضافه کنید.

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30

اگر فهرست با آنچه انتظار دارید مطابقت دارد:

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete

-mtime +30 فایل‌هایی را مشخص می‌کند که بیش از 30 روز پیش تغییر کرده‌اند. -delete را در آخر قرار دهید: find شرط‌ها را از چپ به راست ارزیابی می‌کند و یک -delete که زودتر قرار گرفته باشد همه‌چیز را حذف می‌کند.

پاک کردن امن‌تر یک فایل حساس

rm ورودی فایل را حذف می‌کند، نه لزوماً داده‌های روی دیسک را. shred پیش از حذف، محتوا را بازنویسی می‌کند.

Bash
shred -u -v secret.key

این روش روی SSDها، سیستم‌فایل‌های ژورنالی یا حجم‌های دارای snapshot، که ممکن است داده‌های قدیمی باقی بمانند، محدودیت دارد. برای داده‌های واقعاً حساس، رمزگذاری دیسک از همان ابتدا راه‌حل قابل اعتماد باقی می‌ماند.

رفع خطاهای رایج

Permission denied

شما دسترسی نوشتن روی پوشه والد ندارید (این پوشه است که حذف را کنترل می‌کند، نه فایل). با ls -ld DIRECTORY بررسی کنید، سپس اگر مجاز است از sudo استفاده کنید:

Bash
sudo rm -v /path/to/file

Operation not permitted، حتی با sudo

فایل احتمالاً ویژگی تغییرناپذیر (immutable) دارد. آن را بررسی کنید، ویژگی را بردارید، سپس حذف کنید.

Bash
lsattr file.txt sudo chattr -i file.txt sudo rm file.txt

Argument list too long

وایلدکارد تعداد آرگومان‌هایی بیشتر از حد پذیرش سیستم تولید کرده است. از find استفاده کنید که فایل‌ها را یکی‌یکی پردازش می‌کند:

Bash
find . -maxdepth 1 -type f -name "*.tmp" -delete

Directory not empty یا Device or resource busy

با rmdir، پیام اول طبیعی است: پوشه شامل فایل‌هایی است، از جمله فایل‌های مخفی (ls -A). اگر یک نقطه اتصال (mount) یا یک پردازش از آن استفاده می‌کند، آن را با lsof +D DIRECTORY یا findmnt شناسایی کنید، سپس پیش از تلاش دوباره آزادش کنید.

برای تمرین بدون خطر، یک نمونه یک‌بارمصرف مناسب است: روی یک VPS می‌توانید یک پوشه آزمایشی بسازید و بدون هیچ پیامدی اشتباه کنید. راهنماهای مشابه دیگر در بخش آموزش‌ها گردآوری شده‌اند.

سؤالات متداول

آیا می‌توان فایلی را که با rm حذف شده بازیابی کرد؟

به‌ندرت و بدون هیچ تضمینی. ابزارهایی مانند extundelete یا testdisk گاهی داده‌ها را پیدا می‌کنند، به شرط اینکه فوراً نوشتن روی دیسک را متوقف کنید. تنها محافظت قابل اعتماد، بکاپ است.

تفاوت rm -r و rm -rf چیست؟

rm -r به‌صورت بازگشتی حذف می‌کند اما برای فایل‌های محافظت‌شده در برابر نوشتن تأیید می‌خواهد. rm -rf حذف را اجباری می‌کند و فایل‌های ناموجود را بی‌صدا نادیده می‌گیرد. آن را برای مواردی نگه دارید که هدف را از قبل بررسی کرده‌اید.

چگونه پوشه‌ای را که نامش شامل فاصله است حذف کنیم؟

نام را در گیومه قرار دهید یا فاصله‌ها را escape کنید: rm -r "My folder" یا rm -r My\ folder. در غیر این صورت shell هر کلمه را یک آیتم جداگانه در نظر می‌گیرد.

آیا در خط فرمان سطل زباله وجود دارد؟

بله، از طریق بسته trash-cli (دستور trash-put) که به‌جای پاک کردن، آیتم‌ها را به سطل زباله کاربر منتقل می‌کند. روی یک سرور، معمولاً به‌صورت پیش‌فرض نصب نیست: عادت کنید پیش از حذف، فهرست بگیرید.

با آخرین پیشنهادها، تخفیف‌ها و تبلیغات ویژه به‌روز بمانید.

مشاهده تخفیف‌ها

ما از کوکی استفاده می‌کنیم

ما از کوکی‌های تحلیلی برای بهبود تجربه شما در سایت خود استفاده می‌کنیم. هیچ داده‌ای به اشخاص ثالث فروخته نمی‌شود. اطلاعات بیشتر در سیاست حفظ حریم خصوصی ما.