Na komputerach „klienckich” bezpiecznym sposobem na przejście /tmp
jest restart. Tutaj, przez klienta, mam na myśli wszystko, co uruchamia programy wkładające gniazda /tmp
, w szczególności serwery X i screen.
Nowy /tmp
zdecydowanie musi mieć odpowiednie uprawnienia (1777), w przeciwnym razie nie możesz mieć nadziei, że masz działający system.
Ponieważ /tmp
praktycznie nie można skopiować żadnych plików. To dlatego, że przez większość czasu programy, które umieszczają różne rzeczy, /tmp
otwierają pliki. Jeśli skopiujesz plik, spowoduje to skopiowanie zawartości, ale programy nadal będą mieć otwarte stare pliki. Możesz być w stanie dotrzeć do nich za pomocą debuggera ( ptrace
), ale będzie to o wiele bardziej skomplikowane niż ponowne uruchomienie, a przy wielu programach wszystko co zrobisz, to i tak je zawiesisz.
Jeśli twój /tmp
jest pełny i chcesz przełączyć się na nowy na żywo, musisz zrestartować wszystkie programy, które mają tam otwarte pliki. Ponieważ oznacza to ponowne uruchomienie sesji X i screena, nie jest to dużo lepsze niż ponowne uruchomienie.
Powinieneś być w stanie przełączyć się na nowe programy, ale utrzymywać istniejące otwarte pliki na miejscu za pomocą podłączenia unii . (Zasada jest dobra, ale nigdy nie próbowałem, więc mogą wystąpić nieoczekiwane problemy.) Oto sposób na zrobienie tego w systemie Linux.
- Zachowaj wszystkie istniejące pliki z
/tmp
wyjątkiem kilku ręcznie wybranych dużych.
- Utwórz
/tmp.new
(tryb 1777).
- Wystawiać
/tmp
na inną ścieżkę: mount --bind / /.root.only
. Jest to konieczne, ponieważ następny krok będzie cień /tmp
. Mogą istnieć różne implementacje podłączenia unii, które nie wymagają tego kroku.
- Zrób łącznik montowany z
/.root.only/tmp
i /tmp.new
zamontowany na /tmp
. W ten sposób nowe pliki utworzone w /tmp
zostaną zapisane /tmp.new
, ale pliki w /.root.only/tmp
są również widoczne pod /tmp
. Jedną z możliwości jest
unionfs bezpiecznik : unionfs-fuse /tmp.new:/.root.only/tmp /tmp
.
Jeśli nie chcesz korzystać z głównego katalogu montowania unii (np. Ponieważ nie jest on dostępny na twojej platformie lub jest to zbyt duży problem), przynajmniej nie usuwaj starego katalogu. Przenieś go, aby działające programy nadal korzystały ze starego katalogu, a nowe programy będą korzystać z nowego. (Oczywiście nowe programy nie będą mogły komunikować się ze starymi programami przez gniazda lub potoki, /tmp
chyba że ustawisz TMPDIR
lub w inny sposób powiesz im, gdzie mają szukać).
mv /tmp /tmp.old && mkdir /tmp