touch

Tworzy pusty plik lub aktualizuje znaczniki czasu istniejącego pliku.

touch to jeden z tych drobiazgów w Linuksie, które wyglądają banalnie, a używasz ich codziennie. Robi dwie rzeczy: jeśli podany plik nie istnieje — tworzy pusty plik o tej nazwie; jeśli istnieje — nie rusza jego zawartości, za to aktualizuje znaczniki czasu (domyślnie i access time, i modify time) na chwilę bieżącą. Stąd nazwa: dotykasz pliku, a on „ożywa” w oczach systemu. W praktyce sięgasz po niego, gdy chcesz szybko stworzyć plik pod edycję, wymusić przebudowę w make albo oszukać skrypt patrzący na daty modyfikacji.

Składnia i najważniejsze opcje

Podstawowa forma to touch [OPCJE] PLIK... — możesz podać wiele plików naraz.

  • -a — zmienia tylko czas dostępu (access time), zostawia czas modyfikacji w spokoju.
  • -m — zmienia tylko czas modyfikacji (modify time).
  • -c, --no-create — nie twórz pliku, jeśli nie istnieje; tylko aktualizuj istniejące.
  • -r PLIK, --reference=PLIK — użyj znaczników czasu wskazanego pliku zamiast czasu bieżącego.
  • -d STRING, --date=STRING — ustaw czas z opisu w wolnym formacie, np. "2004-02-29 16:21:42" albo "next Thursday".
  • -t [[CC]YY]MMDDhhmm[.ss] — ustaw konkretną datę i godzinę w formacie liczbowym.
  • --time=WORD — wybierz, który czas zmieniać: atime/access albo mtime/modify.

Przykłady użycia

  • touch notatki.txt — tworzy pusty plik notatki.txt albo, jeśli już istnieje, odświeża jego znaczniki czasu na teraz.
  • touch plik1 plik2 plik3 — tworzy trzy puste pliki jednym poleceniem.
  • touch -c raport.log — odświeża czas tylko jeśli plik istnieje; nie stworzy pustego raport.log przez pomyłkę.
  • touch -d "2 hours ago" backup.tar — ustawia znaczniki czasu pliku na dwie godziny wstecz.
  • touch -r wzorzec.conf nowy.conf — kopiuje daty z wzorzec.conf na nowy.conf, przydatne przy odtwarzaniu spójnych timestampów.

Częste błędy i pułapki

touch nigdy nie nadpisuje zawartości istniejącego pliku — jeśli chcesz go wyczyścić, to nie ta komenda (użyj > plik albo truncate). Częsta pomyłka juniorów: „zrobiłem touch i plik się wyzerował” — nie, tylko zmienił się czas.

Pamiętaj, że domyślnie zmieniane są oba czasy (atime i mtime) — jeśli zależy Ci tylko na jednym, dodaj -a lub -m. Format -t jest liczbowy i łatwo się w nim pomylić; jeśli podajesz datę słowami, użyj -d. Na systemach z opcją montowania noatime czas dostępu i tak nie będzie zapisywany podczas normalnych odczytów — ale touch -a nadal go ustawi.

Wersja z macOS/BSD ma inną składnię -t i nie zna długich opcji GNU (--date, --reference) — na serwerze linuksowym korzystasz z coreutils i tam wszystko powyżej działa.

Powiązane komendy: stat, date, truncate, mkdir, ls.