Próbuję obciąć plik używany do przekierowania standardowego wejścia. Na przykład:
ping localhost>/tmp/test.log
Jeśli zadzwonię, rm /tmp/test.log
przekierowanie zatrzymuje się, ale polecenie działa.
Jeśli zadzwonię truncate -s0 /tmp/test.log
lub >/tmp/test.log
lub echo ..
i itd. Przekierowanie działa, ale plik zawiera początkowe zera, ponieważ pozycja strumienia nie uległa zmianie.
Jak mogę obciąć plik?
linux
bash
redirection
stdout
Jan
źródło
źródło
rm /tmp/test.log
usuwa pozycję pliku z katalogu, ale sam plik nadal istnieje, zajmuje miejsce i rośnie w systemie plików opartym na i-węzłach. Zostanie on naprawdę usunięty, gdy nie będzie już używany, tj. Kiedyping
zostanie rozwiązany lub nawet później.ping
swojelocalhost
, i zachować aktualizacji/tmp/test.log
, tak że zawiera on tylko statystykami wyjściowych z ostatniej odpowiedzi ICMP?Odpowiedzi:
Musisz zrozumieć systemy plików Unix, zanim będziesz mógł odpowiedzieć na to pytanie.
Jedyne, co
rm
robi, to wymazanie nazwy plików , co oznacza wskaźnik ze struktury katalogów do bloków dyskowych.Kiedy biegniesz
przekierowanie nie zatrzymuje się. Polecenie nadal działa, a dane gromadzą się w obszarze dysku. Po prostu nie masz prawa dostępu do tych danych, ponieważ skasowałeś ich nazwę.
Możesz utworzyć kolejny, zupełnie niepowiązany plik o nazwie
/tmp/test.log
.Jak zauważyłeś, próbując skrócić plik, pozbywasz się danych, które tam były, ale wewnętrzny deskryptor pliku zna pozycję w pliku, na który wskazuje, i zapisuje po rozszerzeniu pliku. Stąd wiodące zera.
Jeśli chcesz „zresetować” przekierowanie, musisz zabić
ping
program, usunąć lub skrócić/tmp/test.log
plik, a następnie ponownie uruchomićping
program.Możesz także użyć programu takiego jak
rotatelogs
aby obrócić plik dziennika na podstawie upływu czasu lub rozmiaru pliku.
źródło
/proc/<PID>/fd/0
ścieżki.Planować naprzód:
>>
zamiast>
.W ten sposób skorzystasz z faktu, że
>>
zasadniczo „zawsze staraj się do końca pliku”,>
zachowując wskaźnik do ostatniej zapisanej lokalizacji.Następnie możesz obciąć plik i
>>
zastosować się do niego. Zobacz moją odpowiedź , bada dokładne zachowanie, którego potrzebujesz.źródło