Wo werden Informationen zum Zurückscrollen des Terminals gespeichert (wie funktioniert tmpfs)?

846
terdon

Beim Versuch, etwas zu testen, das nicht verbunden ist, startete ich eine Endlosschleife in meinem terminatorTerminalemulator, die viele Daten an STDOUT druckte. Nachdem ich es einige Minuten laufen gelassen hatte, bemerkte ich, dass meine /tmpPartition voll war.

$ 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 

Das duVerzeichnis sollte jedoch leer sein:

$ du -sch /tmp/ 0 /tmp/ 0 total 

Laufen rm -rf /tmpmachte auch keinen Unterschied. Der gesamte belegte Speicherplatz wurde freigegeben, als ich das Terminal, an dem die Schleife ausgeführt wurde, geschlossen hatte. Ich denke also, dass es von den Scrollback-Informationen des Terminals in Anspruch genommen wurde.

Ich weiß, dass tmpfs eine Speichereinrichtung ist, die ein Dateisystem nachahmt. OK aber

  1. Wie funktioniert das? Befindet sich /tmpeine Datei irgendwo (ja, ich weiß, dass "alles eine Datei ist"), ist es eine "normale" Datei, die irgendwo auf der Festplatte gespeichert ist? Ist es ein Teil meiner Swap-Partition? Von meinem RAM? Wenn ich es richtig verstanden habe, kann es je nach aktueller Nutzung entweder im RAM oder in SWAP sein, aber ich habe keine Spitzen in der RAM- oder SWAP-Nutzung gesehen, solange /tmpes voll war.

  2. Wo und wie werden die Scrollback-Informationen vom Terminal gespeichert? Da sich keine Dateien /tmpdarin befinden, kann sie nicht in einer einfachen Textdatei gespeichert werden. Wo ist sie und wie nimmt sie Platz ein /tmp?

4

1 Antwort auf die Frage

4
Scott

I’m not specifically expert in tmpfs, and I’ve never heard of your terminator terminal emulator, but I can address the general question.  This is an old Unix trick: create a file (commonly, but not necessarily, in /tmp) and then promptly delete it.  As long as you keep it open, it continues to exist, and resides on the filesystem (be it disk, memory, local, or remote), and you can write to it and read from it, just like any ordinary file1, until you close it.  Then it is really deleted.

____________
1 Except for the fact that it doesn’t appear in any directory.  You can think of it as an ordinary file that happens to have zero hard links to it.

Ich sehe, stimmt es, wenn ich annehme, dass dies der Funktionsweise von Named Pipes ähnelt? terdon vor 11 Jahren 0
Ähnlich wie _unnamed_ Pipes funktionieren. Scott vor 11 Jahren 2