How to Truncate (Empty) Files in Linux
W niektórych sytuacjach, możesz chcieć przyciąć (opróżnić) istniejący plik do zerowej długości. In simple words, truncating a file means removing the file contents without deleting the file.
Truncating a file is much faster and easier than deleting the file, recreatingit, and setting the correct permissions and ownership. Ponadto, jeśli plik jest otwierany przez proces, usunięcie pliku może spowodować nieprawidłowe działanie programu, który go używa.
Tutorial ten wyjaśnia, jak przycinać pliki do rozmiaru zerowego w systemach Linux przy użyciu przekierowania powłoki i polecenia truncate
.
Przekierowanie powłoki #
Najprostszą i najczęściej używaną metodą przycinania plików jest użycie operatora przekierowania powłoki >
.
Ogólny format obcinania plików za pomocą przekierowania to:
: > filename
Rozłóżmy to polecenie:
- Kropka
:
oznaczatrue
i nie daje żadnego wyjścia. - Operator przekierowania
>
przekierowuje wyjście poprzedniego polecenia do podanego pliku. -
filename
, plik, który chcesz skrócić.
Jeśli plik istnieje, zostanie skrócony do zera. W przeciwnym razie plik zostanie utworzony.
Zamiast polecenia :
można również użyć innego polecenia, które nie daje żadnego wyniku.
Oto przykład użycia polecenia cat
do wyprowadzenia zawartości urządzenia /dev/null
, które zwraca tylko znak końca pliku:
cat /dev/null > filename
Innym poleceniem, którego można użyć, jest echo
. Opcja -n
mówi echo
, aby nie dołączać nowej linii:
echo -n > filename
W większości nowoczesnych powłok, takich jak Bash czy Zsh, można pominąć polecenie przed symbolem przekierowania i użyć:
> filename
Aby móc skrócić plik, trzeba mieć uprawnienia do zapisu na pliku. Zwykle używałbyś do tego sudo
, ale podwyższone uprawnienia roota nie mają zastosowania do przekierowania. Oto przykład:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Istnieje kilka rozwiązań, które pozwalają na przekierowanie za pomocą sudo
. Pierwsza opcja może uruchomić nową powłokę z sudo i wykonać polecenie wewnątrz tej powłoki używając flagi -c
:
sudo sh -c '> filename'
Inną opcją jest potokowanie wyjścia do polecenia tee
, podniesienie przywilejów tee
za pomocą sudo
i zapisanie pustego wyjścia do podanego pliku:
: | sudo tee filename
truncate Polecenie #
truncate
jest narzędziem wiersza poleceń, które pozwala zmniejszyć lub rozszerzyć rozmiar pliku do zadanego rozmiaru.
Ogólna składnia obcinania plików do rozmiaru zerowego za pomocą polecenia truncate
jest następująca:
truncate -s 0 filename
Opcja -s 0
ustawia rozmiar pliku na zero.
Na przykład, aby opróżnić dziennik dostępu Nginx, użyj polecenia:
sudo truncate -s 0 /var/log/nginx/access.log
Opróżnij wszystkie pliki dziennika #
Z czasem Twój dysk może zostać zapchany dużą ilością dużych plików dziennika zajmujących dużą ilość miejsca na dysku.
Następujące polecenie opróżni pliki kończące się na „.log” pod katalogiem /var/log
:
sudo truncate -s 0 /var/log/**/*.log
Najlepszym rozwiązaniem byłoby obrócenie, skompresowanie i usunięcie plików dziennika za pomocą narzędzia logrotate
tool.
Zakończenie #
Aby skrócić plik w Linuksie, użyj operatora przekierowania >
, a następnie nazwy pliku.