web-dev-qa-db-ja.com

ターミナルのスクロールバック情報はどこに保存されますか(tmpfsはどのように機能しますか)?

接続されていないものをテストしようとしているときに、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、でも

  1. これはどのように作動しますか? /tmpはどこかにファイルですか(はい、「すべてがファイルである」ことは知っています)、つまり、どこかに保存されている「通常の」ファイルですかハードドライブ?それは私のスワップパーティションの一部ですか?私のRAMの?私が正しく理解していれば、現在の使用状況に応じてRAMまたはSWAPのいずれかになりますが、/tmpがいっぱいのときにRAMまたはSWAPの使用量にスパイクは見られませんでした。

  2. 端末からのスクロールバック情報はどこに/どのように保持されますか? /tmpにファイルがなかったため、単純なテキストファイルに保存することはできません。それでは、どこにあり、なぜ/tmpのスペースを占有しているのでしょうか。

4
terdon

私はtmpfsの専門家ではなく、terminatorターミナルエミュレータについて聞いたことがありませんが、一般的な質問に答えることはできます。これは古いUnixのトリックです。ファイルを作成します(通常、必ずしもそうとは限りませんが、/tmp)そしてすぐにそれを削除します。それを開いたままにしておく限り、それは存在し続け、ファイルシステム(ディスク、メモリ、ローカル、またはリモート)に存在し、通常のファイルと同じように、書き込みと読み取りを行うことができます。1、閉じるまで。その後、それは本当に削除されます。

____________
1 どのディレクトリにも表示されないという事実を除いて。たまたまハードリンクがゼロの通常のファイルと考えることができます。

4
Scott