Gdzie przechowywane są informacje o przewijaniu terminala (jak działa tmpfs)?

4

Próbując przetestować coś niepołączonego, uruchomiłem nieskończoną pętlę na terminatoremulatorze terminala, który wydrukował dużo danych do STDOUT. Po uruchomieniu go przez kilka minut zauważyłem, że moja /tmppartycja jest pełna.

$ 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

duPokazał jednak, że katalog jest pusty:

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

Bieganie też rm -rf /tmpnie miało znaczenia. Całe to zajęte miejsce zostało zwolnione, kiedy zamknąłem terminal, który uruchomił pętlę, więc myślę, że zajęły go informacje przewijania terminala.

Wiem, że tmpfs to narzędzie do przechowywania zaprojektowane w celu naśladowania systemu plików. dobrze, ale

  1. Jak to działa? Czy plik gdzieś (tak, wiem, że „wszystko jest plikiem”), to znaczy jest to „normalne” plik zapisany gdzieś na dysku twardym? Czy to część mojej partycji wymiany? Mojej pamięci RAM? Jeśli dobrze rozumiem, może być w pamięci RAM lub SWAP, w zależności od bieżącego użycia, ale nie widziałem żadnych skoków w użyciu pamięci RAM lub SWAP, gdy był pełny./tmp/tmp

  2. Gdzie / jak przechowywane są informacje przewijania z terminala? Ponieważ nie było w /tmpnim żadnych plików, nie można go zapisać w prostym pliku tekstowym, więc gdzie to jest i dlaczego zajmuje miejsce /tmp?

terdon
źródło

Odpowiedzi:

4

Nie jestem specjalnie ekspertem tmpfsi nigdy nie słyszałem o twoim terminatoremulatorze terminali, ale mogę odpowiedzieć na ogólne pytanie. Jest to stara sztuczka uniksowa: utwórz plik (zwykle, ale niekoniecznie, w /tmp), a następnie natychmiast go usuń. Tak długo, jak długo jest on otwarty, nadal istnieje i znajduje się w systemie plików (dysku, pamięci, lokalnym lub zdalnym) i możesz do niego pisać i czytać, tak jak każdy zwykły plik 1 , dopóki zamknij to. Następnie jest naprawdę usuwany.

____________
1 Z wyjątkiem faktu, że nie pojawia się w żadnym katalogu. Możesz myśleć o tym jak o zwykłym pliku, który ma zero twardych linków do niego.

Scott
źródło
Rozumiem, czy mam rację zakładając, że jest to podobne do działania nazwanych potoków?
terdon
2
Bardziej przypomina sposób działania nienazwanych rur.
Scott