Bu, buradan talep edenin isteğiyle tekrar gönderilir:
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
Ve aynı dosya sisteminde kalmak istiyorsanız, şunları yapın:
du --inodes -xS
İşte bazı örnek çıktı:
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
ŞİMDİ LS İLE:
Birkaç kişi, güncel coreutils'lere sahip olmadıklarını ve --inodes seçeneğinin kendilerine uygun olmadığını belirtti. Yani, işte:
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
Merak ediyorsanız, o sıkıcı bit kalbi-ve-ruh regex
orada yerini almaktadır filename
her birinde ls's
, bulunduğu dizinin adı ile özyinelemeli arama sonuçlarında. Oradan sadece tekrarlanan inode numaralarını sıkmak, sonra tekrarlanan dizin adlarını saymak ve buna göre sıralama yapmak söz konusudur.
-U
Seçeneği özellikle olmadığını sıralama ile özellikle yararlıdır değil sıralamak ve bunun yerine orijinal sırayla dizin listesini sunar - tarafından, diğer bir deyişle, ya inode
sayı.
Ve elbette -1
, dosya adlarındaki muhtemel yeni satırlardan veya bir listeyi ayrıştırmaya çalışırken oluşabilecek diğer olağanüstü talihsiz sorunlardan bağımsız olarak, her satırda tek bir sonuç elde edilmesinde inanılmaz derecede faydalıdır.
Ve elbette -A
herkes -i
için, inode ve -R
özyinelemeli ve bunun için uzun ve kısa.
Bunun altında yatan yöntem, her birinin dosya isminin sed içindeki dizin ismiyle değiştirilmesidir. Bundan sonra ... Şey, kendimi biraz bulanık hissediyorum. Burada gördüğünüz gibi dosyaları doğru bir şekilde saydığına eminim:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
Bu bana du
komuta hemen hemen aynı sonuçlar veriyor :
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:
Bence bu include
sadece programın ilk önce hangi dizine bakacağına bağlı - çünkü aynı dosyalar ve sabitlenmişler. Yukarıdaki gibi bir şey. Yine de bu konuda yanılmış olabilir - ve düzeltme hoş geldiniz ...
DU DEMO
% du --version
> du (GNU coreutils) 8.22
Bir test dizini yapın:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
Bazı çocuk dizinleri:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
Bazı dosyalar yapın:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Bazı sabit bağlantılar:
% printf 'n="%s" ; ln ./realdir/file$n ./linkdir/link$n\n' `seq 1 100` |
. /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Hardlinklere bak:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
Yalnız sayılırlar, ama bir dizini yukarı çıkar ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Sonra ran betiğimi aşağıdan çalıştırdım ve:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
Ve Graeme'nin:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
Bence bu, inode saymanın tek yolunun inode olduğunu gösteriyor. Dosyaları saymak, düğümleri saymak anlamına geldiğinden, düğümleri iki kez saymazsınız - dosyaları doğru bir şekilde saymak için düğümler bir defadan fazla sayılamaz.