Co liczy się jako modyfikacja lub zmiana pliku?

16

Czy zmiana nazwy wpływa na modyfikację pliku lub czas dostępu? Czy gdzieś jest lista jakich zmian?

Gilles „SO- przestań być zły”
źródło

Odpowiedzi:

9

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).

Zelda
źródło
Czy kopiowanie i wklejanie pliku zmienia czas „modyfikacji” nowego pliku? Czy użycie Ctrl + X i wklejenie zmienia czas „zmiany”?
1
Kopia tworzy nowy plik za pomocą opcji Modyfikuj, Dostęp i Zmień z nową wartością (wszystkie takie same). Wklejenie czegoś w edytorze (a następnie zapisanie) aktualizuje wszystkie trzy (Zmień z późniejszym znacznikiem czasu niż pozostałe dwa, oczywiście dopiero po zapisaniu)
Zelda
Miałem na myśli użycie CTRL + x na pliku i CTRL + v w innym miejscu.
Jest to używane przy użyciu narzędzi wiersza polecenia cpi mvoraz vido edycji. Inne edytory lub pulpit mogą inaczej obsługiwać to zadanie i zaktualizować więcej znaczników czasu.
Zelda,
Np. Nautilus nie aktualizuje dostępu i modyfikacji za pomocą Ctrl + X, a następnie Ctrl + V, tylko zmiana jest inna, na przykładmv
Zelda
9

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; atimezamontować opcja przywraca atime aktualizacji, natomiast noatimecał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 -plub 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).

Gilles „SO- przestań być zły”
źródło
1

Dodatkowa obserwacja empiryczna niewymieniona w innych odpowiedziach:

Otwarcie pliku do zapisu ze O_TRUNCzmianami mtime, nawet jeśli plik był pierwotnie pusty.

Wydaje się, że tak jest przynajmniej w przypadku ext3 w Linuksie 3.10.

Arsenij Aleksiejjew
źródło