এটি জিজ্ঞাসকের নির্দেশে এখান থেকে পোস্ট করা হয়েছে :
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
এবং আপনি যদি একই ফাইল সিস্টেমে থাকতে চান তবে:
du --inodes -xS
এখানে কিছু উদাহরণ আউটপুট:
15K /usr/share/man/man3
4.0K /usr/lib
3.6K /usr/bin
2.4K /usr/share/man/man1
1.9K /usr/share/fonts/75dpi
...
519 /usr/lib/python2.7/site-packages/bzrlib
516 /usr/include/KDE
498 /usr/include/qt/QtCore
487 /usr/lib/modules/3.13.6-2-MANJARO/build/include/config
484 /usr/src/linux-3.12.14-2-MANJARO/include/config
এখন এলএস এর সাথে:
বেশ কয়েকটি ব্যক্তি উল্লেখ করেছেন যে তাদের কাছে আপ টু ডেট কোরিউটিল নেই এবং --inodes বিকল্প তাদের কাছে উপলভ্য নয়। সুতরাং, এখানে ls:
ls ~/test -AiR1U |
sed -rn '/^[./]/{h;n;};G;
s|^ *([0-9][0-9]*)[^0-9][^/]*([~./].*):|\1:\2|p' |
sort -t : -uk1.1,1n |
cut -d: -f2 | sort -V |
uniq -c |sort -rn | head -n10
যদি আপনি কৌতূহলী হন, তবে সেই বিরক্তিকর বিটটির হৃদয় ও আত্মা প্রতিটি পুনরাবৃত্ত অনুসন্ধানের ফলাফলের ডিরেক্টরি ডিরেক্টরিতে এটি খুঁজে পাওয়া যায় regex
বলে প্রতিস্থাপন করে । সেখান থেকে পুনরাবৃত্ত ইনোড সংখ্যাগুলি বার করে দেওয়ার পরে পুনরাবৃত্ত ডিরেক্টরিগুলির নাম গণনা করা এবং সেই অনুসারে বাছাইয়ের বিষয়টি।filename
ls's
-U
বিকল্প বাছাই বিশেষত সহায়ক এটি বিশেষভাবে হয় না বাছা, এবং পরিবর্তে মূল অনুক্রমে ডিরেক্টরির তালিকা উপস্থাপন -, বা, অন্য কথায় দ্বারা inode
সংখ্যা।
এবং অবশ্যই -1
এটি অবিশ্বাস্যরূপে সহায়ক যে এটি লাইন প্রতি একক ফলাফল নিশ্চিত করে, সম্ভবত ফাইলের নামগুলিতে অন্তর্ভুক্ত না হওয়া বা অন্যান্য তালিকাভুক্ত দুর্ভাগ্য সমস্যা যা আপনি যখন কোনও তালিকার বিশ্লেষণের চেষ্টা করছেন তখনই ঘটতে পারে।
এবং অবশ্যই -A
সকলের জন্য এবং -i
ইনোডের -R
জন্য এবং পুনরাবৃত্তির জন্য এবং এটিই এর দীর্ঘ এবং সংক্ষিপ্ত।
এর অন্তর্নিহিত পদ্ধতিটি হ'ল আমি এলএস এর ফাইলের প্রত্যেকটি নামকে সেডে ডিরেক্টরিযুক্ত নামের সাথে প্রতিস্থাপন করব। তা থেকে অনুসরণ করে ... ঠিক আছে, আমি নিজেই কিছুটা অস্পষ্ট। আমি মোটামুটি নিশ্চিত যে এটি সঠিকভাবে ফাইলগুলি গণনা করছে, আপনি এখানে দেখতে পারেন:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
এটি আমাকে du
কমান্ডের বেশ অভিন্ন ফলাফল প্রদান করছে :
ঢাবি:
15K /usr/share/man/man3
4.0K /usr/lib
3.6K /usr/bin
2.4K /usr/share/man/man1
1.9K /usr/share/fonts/75dpi
1.9K /usr/share/fonts/100dpi
1.9K /usr/share/doc/arch-wiki-markdown
1.6K /usr/share/fonts/TTF
1.6K /usr/share/dolphin-emu/sys/GameSettings
1.6K /usr/share/doc/efl/html
নির্মিত LS:
14686 /usr/share/man/man3:
4322 /usr/lib:
3653 /usr/bin:
2457 /usr/share/man/man1:
1897 /usr/share/fonts/100dpi:
1897 /usr/share/fonts/75dpi:
1890 /usr/share/doc/arch-wiki-markdown:
1613 /usr/include:
1575 /usr/share/doc/efl/html:
1556 /usr/share/dolphin-emu/sys/GameSettings:
আমি মনে করি যে include
প্রোগ্রামটি প্রথমে কোন ডিরেক্টরিটি দেখায় তার উপরে বিষয়টি নির্ভর করে - কারণ তারা একই ফাইল এবং হার্ডলিঙ্কযুক্ত। উপরের জিনিস পছন্দ মত। যদিও আমি এই সম্পর্কে ভুল হতে পারি - এবং আমি সংশোধন স্বাগত জানাই ...
Uাবির ডেমো
% du --version
> du (GNU coreutils) 8.22
একটি পরীক্ষা ডিরেক্টরি করুন:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
কিছু বাচ্চাদের ডিরেক্টরি:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
কিছু ফাইল তৈরি করুন:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
কিছু হার্ডলিঙ্ক:
% printf 'n="%s" ; ln ./realdir/file$n ./linkdir/link$n\n' `seq 1 100` |
. /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
হার্ডলিঙ্কগুলি দেখুন:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
তারা একা গণনা করা হয়, তবে একটি ডিরেক্টরি উপরে যান ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
তারপরে আমি নীচে থেকে আমার রান স্ক্রিপ্টটি চালিয়েছি এবং:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
এবং গ্রিম:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
সুতরাং আমি মনে করি এটি দেখায় যে ইনোডগুলি গণনা করার একমাত্র উপায় হ'ল ইনোড। এবং ফাইলগুলি গণনা করার অর্থ ইনোডগুলি গণনা করা, আপনি দ্বিগুণভাবে ইনোডগুলি গণনা করতে পারবেন না - সঠিকভাবে ফাইলগুলি গণনা করার জন্য আইওডগুলি একাধিকবার গণনা করা যায় না।