نمایش نتایج: از شماره 1 تا 1 , از مجموع 1

موضوع: چگونه تعداد زیادی فایل را در لینوکس حذف کنیم

  1. #1
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2013
    نوشته ها
    302
    تشکر تشکر کرده 
    146
    تشکر تشکر شده 
    828
    تشکر شده در
    387 پست

    54 چگونه تعداد زیادی فایل را در لینوکس حذف کنیم

    درود بر همگی ،


    ‫inode ساختمان داده‌ای است که در فایل سیستم لینوکس اطلاعاتی مانند فایل‌ها، دایرکتوری‌ها و سایر خصوصیات فایل‌سیستم را دخیره می‌کند.


    هر فایل‌سیستم تعداد محدودی inode (آی‌نود‌) و در نتیجه میزان مشخص فایل را می‌تواند نگه‌داری کند.


    چنانچه تعداد فایل‌های فایل‌سیستم از میزان مشخصی بیشتر شود تعداد آی‌نود‌های مجاز آن فایل‌سیستم به اتمام می‌رسد و امکان ذخیره و ایجاد تعداد بیشتری فایل وجود نخواهد داشت.


    برای یافتن تعداد آی‌نودهای مجاز از دستور زیر استفاده کنید.



    کد:
    df -i
    خروجی این دستور می‌تواند به شکل زیر باشد.

    کد:
    Filesystem Inodes IUsed IFree IUse% Mounted on
    rootfs 60506112 32619 60473493 1% /

    اطلاعات بیشتر inodeها را با دستور زیر می‌توان مشاهده کرد.

    کد:
    # tune2fs -l /dev/sda1 | grep -i inode
    Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
    Inode count: 131072
    Free inodes: 131037
    Inodes per group: 2048
    Inode blocks per group: 256
    First inode: 11
    Inode size: 128
    Journal inode: 8
    Journal backup: inode blocks
    دستور بالا حداکثر تعداد آی‌نود قابل اختصاص و آی‌نود‌های اختصاص یافته را نشان می‌دهد.



    چنانچه آی‌نودهای فایل سیستم پر شود تنها راه‌حل مشکل پاک کردن فایل‌ها و دایرکتوری‌ها است.


    راه‌های متفاوتی برای پاک کردن فایل‌ها وجود دارد. ابتدا باید فایل‌ها را مشاهده کنیم، با دستور ls می‌توانیم فایل‌ها را مشاهده کنیم؛ اما اگر تعداد فایل‌های درون یک دایرکتوری از تعداد مشخصی بیشتر باشد اجرای دستور ls بسیار زمان‌بر خواهد بود.

    به‌عنوان مثال در یک دایرکتوری با ۵۱۰۰۰۰ فایل اجرای دستور ls حدودا ۵۳ ثانیه زمان خواهد برد.

    کد:
    time ls
    0m31.325s

    و از طرفی چنانچه بخواهیم سایر خصوصیات مانند زمان ایجاد و یا حجم فایل را مشاهده کنیم باید دستور ls را با پارامتر -l به کار ببریم دستور ls به شکل ls -l در دایرکتوری با ۵۱۰۰۰۰ فایل ۱ دقیقه و ۱۱ ثانیه زمان خواهد برد.

    کد:
    #time ls -1
    0m18.900s
    بهترین راه برای مشاده فایل‌ها استفاده از دستور ls با پارامتر -۱ است. این دستور فایل‌های یک دایرکتوری با ۵۱۰۰۰۰ فایل را در کمتر از ۱۸ ثانیه لیست خواهد کرد.

    کد:
    #time ls -1
    0m18.900s

    برای پاک کردن فایل‌ها از دستور rm به همراه پارامتر -rf استفاده کنید.

    کد:
    rm -rf /home/user/*
    در لینوکس تعداد کاراکترهایی که می‌توان به عنوان پارامتر به هر دستور پاس داد محدود است برای مشاهده این محدودیت در سیستم خود از دستور ریز استفاده کنید.


    کد:
    $getconf ARG_MAX
    2097152

    در نتیجه چنانچه دستور rm -rf را در دایرکتوری اجرا کنیم که تعداد فایل‌های آن از ‫۲۰۹۷۱۵۲-۴ بیشتر باشد دستور با خطای command: Argument list too long متوقف می‌شود و دلیل بروز خطا این است که تمام فایل‌ها به عنوان پارمتر به دستور rm ارسال می‌شود در نتیجه تعداد کاراکتر پارامترها از حد مجاز فراتر خواهد بود.






    برای رفع این مشکل چند راه متفاوت داریم.


    نکته: در تمام مثال‌های زیر می‌خواهیم ۵۱۰۰۰۰ فایل یک دایرکتوری را حذف کنیم.


    استفاده از دستور find:

    کد:
    find . -type f -exec rm '{}' \;

    اجرای این دستور بیش از ۲۶ دقیقه زمان خواهد برد.


    کد:
    time find . -type f -delete
    real    7m44.217s


    دستور بالا ۷ دقیقه و ۴۴ ثانیه زمان خواهد برد.


    کد:
    find . -print0 | xargs -0 rm

    دستور بالا ۷ دقیقه زمان خواهد برد.


    استفاده از دستور ls:


    کد:
    ls -1 | xargs rm -f


    این دستور ۱۹ ثانیه زمان خواهد برد.


    بهترین و سریع‌ترین راه برای پاک کردن تعداد زیادی فایل در یک دایرکتوری استفاده از دستور ls -1 | xargs rm -f است.


    گاهی اوقات تعداد بیشتر فایل می‌تواند اجرای دستور را با مشکل مواجه کند. به عنوان مثال فرض کنیم باید دو میلیاد فایل در یک دایرکتوری را حذف کنیم. از آنجا که تعداد فایل‌ها بسیار بیشتر از میزان جافظه سیستم است اجرای این دستور غیر ممکن است برای رفع این مشکل ابتدا دستور ls را اجرا می‌کنیم و خروجی دستور را در فایل ذخیره می‌کنیم، در مرجله بعد اطلاعات را از فایل می‌خوانیم و با استفاده از دستور xargs فایلها را پاک میکنیم.


    کد:
    ls -1 > file.txt 
    rm $(<file.txt)
    کد:
    xargs rm < file.txt


    منبع :

    چگونه تعداد زیادی فایل را در لینوکس حذف کنیم - ایران سرور

  2. تعداد تشکر ها ازzartosht به دلیل پست مفید


  3. # ADS




     

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. سرور مجازی تعداد زیاد قیمت زیر 10 تومن
    توسط arvin4076 در انجمن درخواست سرور مجازی
    پاسخ ها: 9
    آخرين نوشته: April 28th, 2016, 13:01
  2. ارسال زیاد دارم پنل میخوام با تعرفه حداقلی
    توسط Skoot در انجمن درخواست پنل پیام کوتاه،پیام رسان اجتماعی،تلفن مجازی
    پاسخ ها: 15
    آخرين نوشته: February 14th, 2014, 18:59
  3. فروش تعدادی دامنه ir و org رند زیر قیمت
    توسط nimawave در انجمن دامین
    پاسخ ها: 0
    آخرين نوشته: December 17th, 2012, 18:49
  4. اس ام اس گروهی میخام تعداد بالا قیمت زیر ۱۰
    توسط dade24 در انجمن درخواست سرویس
    پاسخ ها: 3
    آخرين نوشته: May 16th, 2011, 15:30

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •