Czy zmiana nazwy wpływa na modyfikację pliku lub czas dostępu? Czy gdzieś jest lista jakich zmian?
Czy zmiana nazwy wpływa na modyfikację pliku lub czas dostępu? Czy gdzieś jest lista jakich zmian?
Odpowiedzi:
Zmiana nazwy powoduje aktualizację czasu zmiany:
$ mkdir tmp
$ cd tmp
$ echo abc > a
$ stat a
File: `a'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 26h/38d Inode: 5038682 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000 / zelda Gid: ( 1000/ zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
Birth: -
$ mv a b
$ stat b
File: `b'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 26h/38d Inode: 5038682 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ zelda) Gid: ( 1000/ zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
Birth: -
Czas dostępu jest aktualizowany podczas odczytu zawartości pliku. Zmodyfikuj, kiedy faktycznie aktualizujesz plik (otwarcie modyfikacji nie wystarczy, aby zmienić czas modyfikacji).
cp
i mv
oraz vi
do edycji. Inne edytory lub pulpit mogą inaczej obsługiwać to zadanie i zaktualizować więcej znaczników czasu.
mv
Modyfikacją mtime pliku jest zmiana danych pliku: zapis niezerowej ilości bajtów lub obcięcie, które kończy modyfikację pliku. Utworzenie pliku ustawia także mtime na bieżącą datę. Samo otwarcie pliku do zapisu nie wpływa na mtime, zakładając, że plik nie został utworzony ani skrócony.
Odczyt z pliku (jeśli odczytana jest niezerowa liczba bajtów) lub wykonanie pliku ustawia jego czas na bieżący czas. Samo otwarcie pliku do odczytu nigdy nie wpływa na czas. W systemie Linux jest to teraz domyślnie wyłączone w większości przypadków; atime
zamontować opcja przywraca atime aktualizacji, natomiast noatime
całkowicie zamontować opcja wyłącza nich.
Programy mogą zmieniać mtime i atime pliku; podstawowe polecenie, aby to zrobić, to touch
. Niektóre programy do kopiowania plików ustawiają kopię na ten sam czas mtime co oryginał, na przykład cp -p
lub rsync -t
.
Zmiana wpływająca na czas działania pliku to zmiana metadanych pliku: uprawnień, właściciela, czasu, liczby linków itp. Zmiana nazwy pliku powoduje również aktualizację czasu działania. Zmiany danych pliku również wpływają na ctime, ale odczyt z pliku nie zmienia ctime, nawet jeśli zmienia on atime. Nie można zmienić ctime w żaden inny sposób niż ustawienie go na bieżący czas (nawet root jest ograniczony, ale root może pośrednio ustawić ctime, najpierw zmieniając czas systemowy lub bezpośrednio uzyskując dostęp do partycji zawierającej system plików).
Dodatkowa obserwacja empiryczna niewymieniona w innych odpowiedziach:
Otwarcie pliku do zapisu ze O_TRUNC
zmianami mtime, nawet jeśli plik był pierwotnie pusty.
Wydaje się, że tak jest przynajmniej w przypadku ext3 w Linuksie 3.10.