質問: iノードが使用されている場所を見つける そのため、ファイルシステム上の空きiノードの数が少なくなっているという警告が、ボックスの1つにある監視システムから届きました。df -i出力はこれを示しています:filesystem inodes iused ifree iuse% mounted on /dev/xvda1 524288 422613 101675 81% / ご覧のとおり、ルートパーティションではiノードの81%が使用されています。 これらはすべて1つのディレクトリで使用されていると思います。しかし、それがどこにあるかをどうやって見つけることができますか?
回答: これは、質問者の要求により here から再投稿されます。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 lsで今:最新のcoreutilsがなく、-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の面倒な部分の核心は、各ls's再帰検索結果のfilenameを、それが見つかったディレクトリ名に置き換えることです。そこからは、繰り返されるiノード番号を絞り込んでから、繰り返されるディレクトリ名を数え、それに応じてソートするだけです。-uオプションは、特にソートしないソートであり、代わりにディレクトリリストを元の順序で表示するため、ソートに特に役立ちます-または、言い換えれば、inode番号で。そしてもちろん、-1は、ファイル名に改行が含まれていたり、リストを解析しようとしたときに発生する可能性のある他の非常に不幸な問題に関係なく、1行に1つの結果が得られるという点で非常に役立ちます。そしてもちろん、-aはすべて、-iはiノード、-rは再帰的であり、これは長いことと短いことです。これの根本的な方法は、lsのすべてのファイル名をsedのディレクトリ名で置き換えることです。それに続いて...まあ、私は少しぼやけています。あなたがここに見ることができるように、私はそれがファイルを正確に数えているとかなり確信しています:% _ls_i ~/test > 100 /home/mikeserv/test/realdir > 2 /home/mikeserv/test > 1 /home/mikeserv/test/linkdir これにより、duコマンドとほぼ同じ結果が得られます。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は、プログラムが最初に見るディレクトリに依存していると思います。これらは同じファイルであり、ハードリンクされているためです。上記のようなもの。私はそれについて間違っているかもしれません-そして私は訂正を歓迎します...du demo% 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 それらは単独で数えられますが、1つ上のディレクトリに移動します...% cd .. % du --inodes -s > 101 ./realdir > 1 ./linkdir > 1 . 次に、実行したスクリプトを下から実行しました。> 100 /home/mikeserv/test/realdir > 100 /home/mikeserv/test/linkdir > 2 /home/mikeserv/test そして、graeme's:> 101 ./realdir > 101 ./linkdir > 3 ./ したがって、これはiノードをカウントする唯一の方法がiノードによる方法であることを示していると思います。また、ファイルをカウントすることはiノードをカウントすることを意味するため、iノードを二重にカウントすることはできません。ファイルを正確にカウントするために、iノードを2回以上カウントすることはできません。