エラー概要
cd でディレクトリを移動しよとしてtabを押していたら何度も bash: cannot create temp file for here-document: No space left on device
が表示されました。よくよく英語を読むとディスクフルになっていることが分かり、対応しました。
環境はUbuntu(18.04)です。
対応
1. 全体のディスク容量を確認
落ち着いて、df
コマンドでディスク容量を確認します。-h
オプションを付けることで、容量が読みやすい状態で表示されます。
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 114M 3.1G 4% /run
/dev/sda2 219G 208G 0 100% /
tmpfs 16G 784K 16G 1% /dev/shm
(以下略
/dev/sda2 219G 208G 0 100% /
とありほぼ一杯になっており、ここの容量を下げる必要があります。
2. 原因のファイルを特定する
ルートディレクトリから順番にディレクトリを辿りつつ、du
コマンドでどのファイルが大きいかどうかを確認します。使うコマンドは以下の通り。
sudo du -sh *
単純にduと打ってしまうと、膨大なファイル容量が表示されてしまい、容量の表示も分かりにくいです。上記コマンドは、以下の方法で対応しています。
-
-h
オプションで容量を読みやすいものに変える -
-s
オプションでサブディレクトリを含めない結果にする - アクセスできないファイルがある場合には
sudo
を利用して、ファイル容量を確認できるようにする -
*
を付けることで、カレントディレクトリ直下のディレクトリとファイルの容量を表示する(付けない場合、カレントディレクトリのサイズ)
また、sortを使うことで容量順に表示することも可能です。ただし、この場合、-h
を付ける私の環境では正しくソートしてくれなかったので、以下のようなコマンドを使いました。
du -s * | sort -nr
-n
で数値の並び替え、-r
で逆順にして大きい容量が先に来るようにします。
容量の大きいファイルを特定し、削除可能であることを確認できれば、削除して完了です。
おまけ
head と sort を併せて利用して、容量の大きいファイルから順に数行だけ並べることもできます。
du |sort -nr | head -n 5
ただ、当然ながら大きいファイルであればすぐに消していいなんてことはないので、結局は地道に削除できそうなディレクトリ・ファイルを探していくことになるかと思います。