Jak zkrátit (prázdné) soubory v Linuxu

Čvn 15, 2021
admin

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.