truncate

Skraca lub powiększa plik do zadanego rozmiaru.

truncate to komenda z pakietu GNU coreutils, która ustawia dokładny rozmiar pliku — skraca go albo powiększa do zadanej liczby bajtów. Jeśli plik jest za duży, obcina nadmiar (dane przepadają). Jeśli za mały, dopisuje na koniec zera, tworząc tzw. dziurę (sparse hole), która często nie zajmuje realnego miejsca na dysku. Przydaje się do czyszczenia logów w miejscu, do tworzenia plików o konkretnym rozmiarze (np. obrazów dysków do testów) i wszędzie tam, gdzie potrzebujesz pliku o z góry ustalonej wielkości.

Składnia i najważniejsze opcje

Podstawowa forma: truncate -s ROZMIAR PLIK...

  • -s, --size=ROZMIAR — ustawia rozmiar pliku. Domyślnie w bajtach; obsługuje sufiksy (K=1024, KB=1000, M, MB, G, T itd.).
  • -c, --no-create — nie twórz pliku, jeśli nie istnieje (domyślnie truncate plik utworzy).
  • -r, --reference=PLIK — użyj rozmiaru wskazanego pliku jako wzorca. Wyklucza się z -s.
  • -o, --io-blocks — traktuj ROZMIAR jako liczbę bloków I/O, nie bajtów.
  • Prefiks + — powiększ o podaną wartość, np. +1M.
  • Prefiks - — zmniejsz o podaną wartość, np. -500.
  • Prefiks < / > — ustaw rozmiar na co najwyżej / co najmniej tyle (zmienia tylko, gdy trzeba).
  • Prefiks / / % — zaokrąglij w dół / w górę do wielokrotności podanej liczby.

Przykłady użycia

  • truncate -s 0 access.log — czyści log w miejscu, zerując go do zera bajtów. Deskryptory otwarte przez działający proces zostają nienaruszone.
  • truncate -s 100M dysk.img — tworzy (lub zmienia) plik do dokładnie 100 MiB, idealny na testowy obraz dysku.
  • truncate -s +50K raport.txt — powiększa istniejący plik o 50 KiB, dopisując na końcu zera.
  • truncate -s -1K duzy.bin — obcina ostatni kilobajt pliku, np. by usunąć uszkodzony ogon.
  • truncate -r wzorzec.dat kopia.dat — ustawia rozmiar kopia.dat taki sam jak wzorzec.dat.

Częste błędy i pułapki

To nie jest kasowanie zawartości od początku. truncate -s 0 zeruje plik, ale gdy powiększasz, dopisywane są zera, a nie „przywracany" stary tekst — raz obcięte dane nie wrócą. Nie ma undo.

Powiększenie pliku nie dodaje realnych danych. Dostajesz sparse file z dziurą. ls -l pokaże duży rozmiar, ale du — faktyczne zajęcie na dysku. Programy czytające taki plik zobaczą bajty zerowe.

Uważaj z sufiksami. K to 1024, a KB to 1000 — łatwo pomylić i dostać plik o innym rozmiarze, niż zakładałeś.

Nie działa na katalogach. Komenda operuje na zwykłych plikach. Na macOS/BSD składnia jest inna (BSD truncate -s istnieje, ale nie ma wszystkich prefiksów GNU jak < czy %) — ten opis dotyczy GNU coreutils na Linuksie.

Powiązane komendy: dd (kopiowanie i tworzenie plików blok po bloku), fallocate (rezerwacja realnego miejsca zamiast dziury), head i tail (obcinanie po liniach), stat i du (sprawdzanie rzeczywistego rozmiaru).