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/accessalbomtime/modify.
Przykłady użycia
touch notatki.txt— tworzy pusty pliknotatki.txtalbo, 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 pustegoraport.logprzez 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 zwzorzec.confnanowy.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.