Próbuję dokładnie zrozumieć, kiedy zmienia się znacznik czasu pliku. W wielu miejscach (np. W tutaj zaakceptowanej odpowiedzi ) sugeruje się, że każda zmiana atrybutów pliku zmieni również ctime. Nie wydaje się to jednak prawdą, przynajmniej na moim Ubuntu 12.04 (tak, wiem, trochę stary ...):
cat file.txt > /dev/null
zmienia atime, więc zmienia atrybuty pliku (w i-węzle pliku), ale nie zmienia ctime.
Inne źródła (np. Tu i tutaj ) sugerują, że tylko niektóre operacje na atrybutach pliku faktycznie zmieniają ctime, ale nie podano dokładnej listy.
Gdzie mogę znaleźć dokładne odniesienie do tego, które operacje zmieniają ctime?
filesystem
VeryHardCoder
źródło
źródło
cat
, czy go badałeśtouch
?Odpowiedzi:
Istnieją trzy znaczniki czasu w systemach Unix:
atime
: Czas dostępuTen znacznik czasu informuje, kiedy plik był ostatnio otwierany , w tym tylko dostęp do odczytu.
ctime
: Zmienić czasTen znacznik czasu informuje, kiedy atrybuty pliku (informacje i-węzła) zmieniły się po raz ostatni. Obejmuje to np. Własność i uprawnienia, ale zmiana treści powoduje również aktualizację tego znacznika czasu.
Należy pamiętać, że zmiany w atime wydają się być wyjątkiem , ponieważ nie powodują aktualizację ctime. Wynika to prawdopodobnie z faktu, że prosty dostęp do odczytu wystarczający do uruchomienia aktualizacji w czasie nie powoduje żadnych istotnych zmian w atrybutach pliku. Jednym z głównych celów ctime jest pomoc narzędziom do tworzenia kopii zapasowych w celu ustalenia, czy plik się zmienił. Atime jest nieistotną informacją dla takich narzędzi, a aktualizacja kopii zapasowej tylko w celu zaktualizowania zmienionej atime, ponieważ ktoś przeczytał plik, byłaby bezużyteczna.
Nie jestem pewien, ale niektórzy sądzą, że takie zachowanie (zmiany w atime nie aktualizują ctime) wynika tylko z opcji montowania (jakrelatime
) bazowego systemu plików, który buforuje i opóźnia aktualizacje atode w i-węzle ze względu na wydajność pamięci i stosuje je tylko do rzeczywistych i-węzłów na dysku (uruchamiając aktualizację ctime) pod pewnymi warunkami.@kos wypróbował to i najwyraźniej nawet podczas montowania FS z opcją „strictatime” ctime wydaje się nigdy nie aktualizować, jeśli zmieni się atime.
mtime
: Czas modyfikacjiTen znacznik czasu informuje, kiedy zawartość pliku została zmodyfikowana po raz ostatni.
Tak więc prosty dostęp do odczytu przy użyciu
cat FILENAME
tylko zmienia atime , ale nie ctime, ponieważ żaden atrybut pliku nie został zmodyfikowany. Zmieniony atime nie ma znaczenia.źródło