大きなファイル/ディレクトリを見つけてスペースを削除して解放するコマンドラインの方法は何ですか?


203

ドライブ上の最大のファイルを表示する一連のコマンドを探しています。


グラフィカルなものは問題ないでしょうか?
RolandiXor

5
いいえ、sshを介してコマンドラインで実行します。
ライアンデッツェル

奇妙なことに、同じことを実行している2つのサーバーがあります。1つはディスク使用率が50%で、もう1つは99%です。私はこれを引き起こしているものを見つけることができません。
ライアンデッツェル

だから私は混乱しています、それはduで98%使用されていると言いますが、gt5アプリを実行すると次のようになります:grab.by/9Vv2
Ryan Detzel

回答:


276

大きなファイルを見つける必要がある場合findは、この-sizeオプションを使用できます。次のコマンドは、10MiBより大きいすべてのファイルをリストします(10MBと混同しないでください)。

find / -size +10M -ls

特定のサイズのファイルを検索する場合は、「より小さいサイズ」検索と組み合わせて使用​​できます。次のコマンドは、10MiB〜12MiBのファイルを検索します。

find / -size +10M -size -12M -ls

apt-cache search 'disk usage'ディスク使用量の分析に使用できるプログラムをいくつかリストします。非常に有望に見えるアプリケーションの1つですgt5

パッケージの説明から:

数年が経ち、ディスクはどんどん大きくなりましたが、この信じられないほど巨大なハードディスクの時代でさえ、スペースは時間とともに消えていくようです。この小さくて効果的なプログラムは、デフォルトのdu(1)よりも便利なリストを提供します。前回の実行以降に発生したことを表示し、dirサイズと合計パーセンテージを表示します。テキストベースのブラウザ(リンク、elink、lynxなど)でカーソルキーを使用することにより、ディレクトリをナビゲートおよび昇順することができます。

gt5のスクリーンショット

gt5の「関連パッケージ」セクションで、見つけましたncdu。パッケージの説明から:

Ncduは、ncursesベースのduビューアーです。有名なduユーティリティを使用して、高速で使いやすいインターフェイスを提供します。ディレクトリを参照し、ncursesライブラリでディスク使用率を表示することができます。

ncduのスクリーンショット


3
ncduは非常に迅速で、まさに必要なものです、ありがとう!私もgt5を試しましたが、フィードバックなしで長すぎると思っていたため、キャンセルしました
Lukas

7
なんてこった、ncduはすごい、発見を共有してくれてありがとう!
While-E

ncduがより強く指摘されたら、私は大好きです。たまに必要になりますが、名前を思い出せません。
マーティントーマ

ncduのおかげで十分なコマンドを覚えられます:)
Mr Coder

1
@mattいいえ、の出力フォーマット-lsハードコードされた出力(元のコードを参照pred_flsし、list_file関数)。あなたは使用して出力を近似するために試みることができる-printfのawkとオプション、後工程の出力を、またはのようなものを使用find ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

私はちょうどの組み合わせを使用duしてsort

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

その後、すすぎと繰り返しのケースです。大きすぎると思われるサブディレクトリをターゲットにし、それらのコマンドを実行して、問題の原因を見つけます。

注:du-xフラグを使用して、1つのファイルシステムに制限します(SSDとRAID5の間でクロスマウントされたものを非常に複雑に配置しています)。

注2:2>/dev/nullエラーメッセージを忘却にリダイレクトします。彼らがあなたに迷惑をかけないなら、それは義務ではありません。


1
このコマンドを実行すると、duは子ディレクトリに降ります。duマニュアルページから:「ディレクトリごとに再帰的に各FILEのディスク使用量を要約します。」
ジェイミー

26

私のお気に入りのソリューションでは、これらの良い回答のいくつかを組み合わせて使用​​しています。

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du 引数:

  • -a「すべて」のファイルおよびディレクトリ用。ディレクトリだけはオフにしてください
  • -BM サイズをメガバイト(M)ブロックサイズ(B)で出力するには
  • 2>/dev/null -「許可が拒否されました」エラーメッセージを除外します(@Oliに感謝)

sort 引数:

  • -n 「数値」
  • -r 「逆」(最大から最小)

head 引数:

  • -n 50 ちょうど上位50の結果。
  • more小さい数字を使用する場合は、中断します

注:sudoアカウントにアクセスする権限がないディレクトリを含めるための接頭辞。

/ varの上位10個の最大ファイルとディレクトリを示す例(総計を含む)。

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache

10

qbiの答えは正しいですが、多くのファイルがある場合、各アイテムに対して新しいlsプロセスを開始するため、非常に遅くなります。

子プロセスを生成せずにfindを使用するより高速なバージョンでは、printfを使用してサイズをバイト(%s)およびパス(%p)で出力します

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries


1
これははるかに高速であることを確認してください
クッキー

10

現在のフォルダ内の上位20のディレクトリを(再帰的に)表示するには、次の1行を使用します。

du -ah . | sort -rh | head -20

または(よりUnix指向):

du -a . | sort -rn | head -20

現在のディレクトリ内の上位20個の最大ファイル(再帰的に)の場合:

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

または人間が読めるサイズの場合:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

これ-hはGNUでsortのみ使用できるため、OSX / BSDで適切に動作させるには、からインストールする必要がありcoreutilsます。次に、そのフォルダをに追加しますPATH

したがって、これらのエイリアスはrcファイルに含めると便利です(必要なときはいつでも):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

8

これは、次の用途に最適なアプリケーションのようですfind

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

このコマンドは、ディレクトリ内のすべてのファイルを見つけて$DIRECTORY実行ls -sします。最後のコマンドは、ファイルに割り当てられたサイズとファイル名を出力します。結果は数値順にソートされ、最後の5つのエントリが表示されます。その結果$DIRETORY、サブディレクトリ内またはサブディレクトリ内で最大の5つのファイルが表示されます。入力tail -n 1すると、最大のファイルのみが表示されます。

さらに、あなたはでたくさん遊ぶことができますfind。たとえば、n日未満のファイル(-ctime -n)または特別なユーザーに属するファイル()を検索できます-user johndoe


5

サーバーの空き容量を増やす必要がある場合は、このコマンドを使用します。50 MBを超えるすべてのファイルを検索し、「du -h」はファイルのリストを改善し、パイプはファイルサイズで数値順にソートした後、「sort -n」を作成します。

find / -size +50M -type f -exec du -h {} \; | sort -n

1

バオバブを試してみてください。ファイルとフォルダのグラフィカルな概要が表示されます。実際のスペースがどこにあるかを確認し、ワンクリックで削除できます https://help.ubuntu.com/community/Baobab


2
この特定の質問では、OPはコマンドライン方式を好みます。質問へのコメントを参照してください。質問も編集します。

1

たとえば、すべてのGBファイルを見つけるには、duとgrepを使用しますが、ここで説明した他の方法も同様に素晴らしいようです。

du -h -a /dir | grep "[0-9]G\b"  

また、duにある--exceptオプションを使用することもできます。


0

ファイルをサイズで並べ替えることもできます。

find . -type f -exec du -h {} \; | sort -k1 -h

ファイルのみを検索しdu -h、すべてのファイルに対して実行し、ファイルのサイズを示します。最後に、find/ の出力をdu最初の列に従って(人間が読める形式で)ソートします。

最後に印刷されたファイルが最大です。


0

このコマンドを使用して、ディレクトリをスキップしながら最大のファイルを表示できます。

sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10

100MiBより大きいすべてのファイルを見つけるには(これは100MBではありません。混乱し場合はこちらを参照してください):

find / -size +100M -ls

以下のコマンドは、フォルダー内の最大の5つのファイルを表示します$DIRECTORY

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

USING du:duを使用する以下のコマンドは、ホーム作業フォルダー内の20個の最大サイズのディレクトリを表示します。

sudo du -a /home | sort -n -r | head -n 20

ここで、サブフォルダーを含む最大のディレクトリ/ファイルを表示するには、次を実行します。

du -Sh | sort -rh | head -n 10

を使用してls

/ binディレクトリ内の上位5つのファイルをリストするには、次のコマンドを発行します。

ls -lSh /bin | head -5

ここに示すように、Disk Usage AnalyzerまたはBaobaoを使用することもできます。


0

同様の質問への回答で参照される優れたユーザーフレンドリーなツールは、NCurses Disk Usageツールです:

sudo ncdu /

さて、ファイルシステムのルートから開始することは、私にとってまったく意味のないことでした。ファイルシステム全体でスペースを節約するための最も重要な場所を特定することができました。いずれにせよ、前述の方法を使用して、任意のディレクトリから開始できます。そのツールのドキュメントをご覧ください。しかし、要求されたように、ソースの回答へのリンクがあります
ジャノサイド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.