Jak zmienia się ctime?

8

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?

VeryHardCoder
źródło
Może problem jest związany z tym cat, czy go badałeś touch?
Mahdi

Odpowiedzi:

8

Istnieją trzy znaczniki czasu w systemach Unix:

  • atime: Czas dostępu

    Ten znacznik czasu informuje, kiedy plik był ostatnio otwierany , w tym tylko dostęp do odczytu.

  • ctime: Zmienić czas

    Ten 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 (jak relatime) 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 modyfikacji

    Ten znacznik czasu informuje, kiedy zawartość pliku została zmodyfikowana po raz ostatni.


Tak więc prosty dostęp do odczytu przy użyciu cat FILENAMEtylko zmienia atime , ale nie ctime, ponieważ żaden atrybut pliku nie został zmodyfikowany. Zmieniony atime nie ma znaczenia.

Bajt Dowódca
źródło
Właśnie o to chodzi: dlaczego zmieniony atime się nie liczy? Czy to nie jest atrybut pliku?
VeryHardCoder
@ VeryHardCoder W tym punkcie próbowałem opracować odpowiedź i dodałem kilka wyjaśnień.
Bajt Dowódca