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?


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.