Jak zkrátit (prázdné) soubory v Linuxu
V některých situacích můžete chtít zkrátit (vyprázdnit) existující soubor na nulovou délku. Zjednodušeně řečeno, zkrácení souboru znamená odstranění jeho obsahu, aniž by byl soubor smazán.
Zkrácení souboru je mnohem rychlejší a jednodušší než jeho smazání, nové vytvoření a nastavení správných práv a vlastnictví. Navíc pokud je soubor otevřen nějakým procesem, může odstranění souboru způsobit nefunkčnost programu, který jej používá.
Tento návod vysvětluje, jak zkrátit soubory na nulovou velikost v systémech Linux pomocí přesměrování shellu a příkazu truncate
.
Přesměrování shellu #
Nejjednodušší a nejpoužívanější metodou zkracování souborů je použití operátoru >
přesměrování shellu.
Obecný formát zkracování souborů pomocí přesměrování je:
: > filename
Rozložíme si příkaz:
- Dvojtečka
:
znamenátrue
a nevytváří žádný výstup. - Operátor přesměrování
>
přesměruje výstup předchozího příkazu do daného souboru. -
filename
, soubor, který chcete zkrátit.
Pokud soubor existuje, bude zkrácen na nulu. V opačném případě bude soubor vytvořen.
Místo příkazu :
lze použít i jiný příkaz, který nevytváří žádný výstup.
Uveďme příklad použití příkazu cat
pro výstup obsahu zařízení /dev/null
, který vrací pouze znak konce souboru:
cat /dev/null > filename
Další příkaz, který lze použít, je echo
. Volba -n
říká příkazu echo
, aby nepřidával nový řádek:
echo -n > filename
Ve většině moderních shellů, jako je Bash nebo Zsh, můžete příkaz před symbolem přesměrování vynechat a použít:
> filename
Abyste mohli soubor zkrátit, musíte mít k souboru práva zápisu. Obvykle byste k tomu použili sudo
, ale zvýšená práva roota se na přesměrování nevztahují. Zde je příklad:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Existuje několik řešení, která umožňují přesměrování pomocí sudo
. První možnost může spustit nový shell s příznakem sudo a spustit příkaz uvnitř tohoto shellu pomocí příznaku -c
:
sudo sh -c '> filename'
Další možností je nasměrovat výstup do příkazu tee
, zvýšit práva tee
pomocí sudo
a zapsat prázdný výstup do daného souboru:
: | sudo tee filename
truncate Příkaz #
truncate
je nástroj příkazového řádku, který umožňuje zmenšit nebo zvětšit velikost souboru na zadanou velikost.
Obecná syntaxe zkracování souborů na nulovou velikost pomocí příkazu truncate
, je následující:
truncate -s 0 filename
Příkaz -s 0
nastaví velikost souboru na nulu.
Příklad pro vyprázdnění přístupového protokolu Nginx použijete:
sudo truncate -s 0 /var/log/nginx/access.log
Vyprázdnit všechny soubory protokolu #
Časem může být disk zahlcen množstvím velkých souborů protokolu, které zabírají velké množství místa na disku.
Následující příkaz vyprázdní soubory končící na „.log“ v adresáři /var/log
:
sudo truncate -s 0 /var/log/**/*.log
Vhodnější variantou by bylo otáčet, komprimovat a odstraňovat soubory protokolů pomocí nástroje logrotate
.
Závěr #
Pro zkrácení souboru v systému Linux použijte operátor přesměrování >
následovaný názvem souboru.