فایلهای تکراری باعث میشوند تا فضای هارددیسک به سرعت انباشته از فایلهای تکراری شوند. فایلهای تکراری در بیشتر موارد باعث سردرگمی کاربران میشوند. ابزارهای مختلفی برای پیدا کردن محتوا و فایلهای تکراری برای ویندوز ارائه شده است. اما برای آنکه بتوانید محتوای تکراری فایلها درون محیط لینوکس را پیدا کنید دستورات مفیدی برای شناسایی فایلهای تکراری وجود دارد. در این مقاله با شش مورد از دستورات کاربردی که برای پیدا کردن محتوای تکراری قابل استفاده هستند آشنا خواهید شد.قبل از آنکه به تشریح این موضوع بپردازیم، اجازه دهید به شکل کوتاه مفهوم Hard Link در لینوکس را معرفی کنیم. در دنیای لینوکس شما مفهومی به نام Inode دارید که اطلاعات مرتبط با یک فایل را نگهداری کرده و لینوکس برای شناسایی فایلها و مکان فایلها از آنها استفاده میکند. زمانی که در لینوکس میانبر یا پیوندی را به شکل پیوند سخت ایجاد میکنید، میانبر شما به Inode فایل موردنظر (شمارهای که برای شناسایی مکان فایل استفاده میشود) اشاره دارد. در نتیجه اگر فایل جابهجا شده یا نامش تغییر کند، اهمیتی نداشته و پیوند بدون مشکل کار میکند، زیرا پیوند ایجاد شده به جای آنکه مرتبط با نام فایل باشد با Inode در ارتباط است. Hard Link مزایای دیگری نیز دارد که توصیف آن خارج از حوصله این مطلب است.
مقایسه فایلها با فرمان diff
به احتمال زیاد سادهترین راه مقایسه دو فایل، فراخوانی فرمان diff است. خروجی این فرمان تفاوت میان دو فایل را نشان میدهد. این فرمان سوییچهای مختلفی دارد، اما زمانی که بدون هیچ سوییچی و تنها همراه با نام فایلها از آن استفاده کنید، تفاوتهای دو فایل را نشان میدهد. در مثال زیر، خطوط اضافی در فایل backup.html وجود دارند.
$ diff index.html backup.html
2438a2439,2441
> <pre>
> That's all there is to report.
> </pre>
اگر diff هیچ خروجی را ارائه نکند، به معنای آن است که فایلها یکسان هستند.$ diff home.html index.html
$تنها نقطه ضعف دستور فوق در مقایسه همزمان تنها دو فایل است.
بهکارگیری checksums
فرمان cksum که در اصطلاح تخصصی به آن چکیده اعتبارسنجی (checksum) میگویند برای ارزیابی چکسام فایلها استفاده میشود. چکیده اعتبارسنجی یک مقدار عددی ریاضی است. درست است که این رقم منحصر به فرد نیست، اما بازهم برای بررسی و مقایسه محتوای درون فایلها قابل استفاده است. اگر مقدار چکسام دو فایل یکسان باشد به معنای آن است که فایلها محتوای یکسانی دارند.$ cksum *.html
2819078353 228029 backup.html
4073570409 227985 home.html
4073570409 227985 index.htmlدر مثال بالا، شما مشاهده میکنید که فایلهای دوم و سوم دارای چکسام یکسانی هستند و میتوان اینگونه تصور کرد که یکسان هستند.
فراخوانی فرمان find
در حالی که فرمان find گزینه مشخصی برای پیدا کردن فایلهای تکراری ندارد، اما میتواند برای جستوجوی فایلها بر مبنای نام یا نوع و همزمان با فراخوانی cksum استفاده شود.$ find . -name "*.html" -exec cksum {} \;
4073570409 227985 ./home.html
2819078353 228029 ./backup.html
4073570409 227985 ./index.htmlبهکارگیری فرمان fslint
فرمان fslint برای پیدا کردن خاصمنظوره فایلهای تکراری قابل استفاده است. دقت کنید که ما یک نقطه شروع در اختیار این فرمان قرار میدهیم. بسته به نوع فراخوانی و اجرا تکمیل جستوجو ممکن است زمانبر باشد. این فرمان فایلهای تکراری را همراه با پوشه و شناسه آنها فهرست میکند.$ fslint .
-----------------------------------file name lint
-------------------------------Invalid utf8 names
-----------------------------------file case lint
----------------------------------DUPlicate files <==
home.html
index.html
-----------------------------------Dangling links
--------------------redundant characters in links
------------------------------------suspect links
--------------------------------Empty Directories
./.gnupg
----------------------------------Temporary Files
----------------------duplicate/conflicting Names
------------------------------------------Bad ids
-------------------------Non Stripped executablesشاید برای فراخوانی fslint مجبور شوید آنرا نصب کنید.
بهکارگیری فرمان rdfind
فرمان rdfind نیز برای پیدا کردن فایلهای تکراری (محتوای یکسان) استفاده میشود. این فرمان بر مبنای تاریخ فایلها قادر است مشخص کند که چه فایلهایی اصلی هستند و چه فایلهایی بعدا اضافه شدهاند. در نتیجه برای پیدا کردن موارد تکراری و حذف آنها کاربردی است.$ rdfind ~
Now scanning "/home/shark", found 12 files.
Now have 12 files in total.
Removed 1 files due to nonunique device and inode.
Total size is 699498 bytes or 683 KiB
Removed 9 files due to unique sizes from list.2 files left.
Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
It seems like you have 2 files that are not unique
Totally, 223 KiB can be reduced.
Now making results file results.txtبهکارگیری فرمان fdupes
فرمان fdupes نیز برای پیدا کردن فایلهای تکراری قابل استفاده بوده و با سوییچهای متنوعی قابل استفاده است. در ابتداییترین شکل این فرمان فایلهای تکراری را شبیه به حالت زیر گروهبندی میکند.$ fdupes ~
/home/shs/UPGRADE
/home/shs/mytwin
/home/shs/lp.txt
/home/shs/lp.man
/home/shs/penguin.png
/home/shs/penguin0.png
/home/shs/hideme.png
نویسنده: حمیدرضا تائبی- شبکه