接続されていないものをテストしようとしているときに、terminator
ターミナルエミュレータで無限ループを起動し、STDOUTに大量のデータを出力しました。数分間実行した後、/tmp
パーティションがいっぱいになっていることに気付きました。
$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 68G 21G 44G 33% /
udev 10M 0 10M 0% /dev
tmpfs 800M 1.2M 799M 1% /run
/dev/disk/by-uuid/e29c6006c5c6 68G 21G 44G 33% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.2G 140K 3.2G 1% /run/shm
/dev/sda6 290G 204G 72G 75% /home
/dev/sda3 79G 51G 28G 65% /winblows
tmpfs 3.2G 3.2G 0G 100% /tmp
ただし、du
はディレクトリが空であることを示しています。
$ du -sch /tmp/
0 /tmp/
0 total
rm -rf /tmp
を実行しても違いはありませんでした。ループを実行している端末を閉じると、この占有スペースがすべて解放されたので、端末のスクロールバック情報によって占有されたと思います。
tmpfs は、ファイルシステムを模倣するように設計されたストレージ機能であることを私は知っています。 OK、でも
これはどのように作動しますか? /tmp
はどこかにファイルですか(はい、「すべてがファイルである」ことは知っています)、つまり、どこかに保存されている「通常の」ファイルですかハードドライブ?それは私のスワップパーティションの一部ですか?私のRAMの?私が正しく理解していれば、現在の使用状況に応じてRAMまたはSWAPのいずれかになりますが、/tmp
がいっぱいのときにRAMまたはSWAPの使用量にスパイクは見られませんでした。
端末からのスクロールバック情報はどこに/どのように保持されますか? /tmp
にファイルがなかったため、単純なテキストファイルに保存することはできません。それでは、どこにあり、なぜ/tmp
のスペースを占有しているのでしょうか。
私はtmpfs
の専門家ではなく、terminator
ターミナルエミュレータについて聞いたことがありませんが、一般的な質問に答えることはできます。これは古いUnixのトリックです。ファイルを作成します(通常、必ずしもそうとは限りませんが、/tmp
)そしてすぐにそれを削除します。それを開いたままにしておく限り、それは存在し続け、ファイルシステム(ディスク、メモリ、ローカル、またはリモート)に存在し、通常のファイルと同じように、書き込みと読み取りを行うことができます。1、閉じるまで。その後、それは本当に削除されます。
____________
1 どのディレクトリにも表示されないという事実を除いて。たまたまハードリンクがゼロの通常のファイルと考えることができます。