touchtworzy nowy, pusty plik, jeśli plik nie istnieje, ponieważ właśnie do tego został przeznaczony. Program narzędziowy musi zawierać kod, aby konkretnie obsługiwać tę sprawę. Narzędzie pojawiło się w Uniksie V7 ; w instrukcji opisano go następująco:
dotknij - data ostatniej modyfikacji pliku
touchpróbuje ustawić datę modyfikacji każdego pliku . Odbywa się to poprzez odczytanie znaku z pliku i ponowne zapisanie go. Jeśli ** plik * nie istnieje, zostanie podjęta próba jego utworzenia, chyba że -czostanie określona opcja.
(Nie wiem, co touchsię stało, jeśli plik był pusty. Podstawowe wywołanie systemowe przyszło później).
Nie wiem na pewno, dlaczego touchpowstał, aby plik istniał, ale podejrzewam, że to z tego powodu make. Dlaczego chcesz ustawić czas modyfikacji pliku na aktualny czas? Są przypadki, w których przydatne może być ustawienie czasu modyfikacji na określony czas, ale ta umiejętność pojawiła się później, oryginał touchmógł jedynie ustawić czas modyfikacji na bieżący czas. Powodem tego jest ponowne uruchomienie makereguły zależnej od pliku.
Oznacza to, że masz plik fooi Makefile, który deklaruje polecenie, aby wygenerować barz foo. Podczas pisania make barpolecenie jest wykonywane i bartworzone. Jeśli baristnieje i jest nowszy niż foo, make barnic nie robi, ponieważ makezakłada, że barzostał już wygenerowany. Jeśli jednak barjest starszy foo, pomyśl, że barnie jest aktualny i musi zostać zregenerowany.
Ale co, jeśli reguły generowania baruległy zmianie? Masz dwie opcje:
rm bar; make bar
touch foo; make bar
fooAby wygenerować bar, musisz istnieć, w przeciwnym razie polecenie zwykle nie działałoby.
Terminologia „dotykowa” była także obecna w makenarzędziu: make -t barudawałaby tylko, że uruchamia polecenia, to znaczy ustawiałaby czas modyfikacji barna bieżący czas bez uruchamiania polecenia generowania bar(zrobiłbyś to, gdybyś pomyślał, że zmiany, które foonie powinny mieć wpływu bar). touchNarzędzie było zatem wersja standalone z make -tfunkcji.
touch /forcefsckdo utworzenia pustego pliku wywoływanego w/forcefsckcelu wymuszenia sprawdzenia systemów plików pod kątem błędów przy następnym ponownym uruchomieniu. Sam plik nie musi zawierać niczego, po prostu musi istnieć. Beztouchtego musiałbym użyćvilubnanozapisać pusty plik. Znacznie szybszy w użyciutouch.