Po prostu wiem, że ls -t i umożliwiają różne sortowanie plików i podkatalogów w katalogu.

  • Jakie są różnice między datownikiem, czasem modyfikacji i czasem utworzenia pliku?
  • Jak uzyskać i zmienić tego typu informacje za pomocą poleceń?
  • Jeśli chodzi o rodzaj informacji, ludzie mówią, że plik jest „nowszy” niż inny?
  • Co rodzaje informacji „zmiana nie spowoduje, że plik będzie inny?

Na przykład, ktoś napisał:

Domyślnie program rsync sprawdza tylko, czy pliki różnią się rozmiarem i datownikiem. Nie ma znaczenia, który plik jest nowszy, jeśli jest inny, zostanie nadpisany. Możesz przekazać flagę „–update” do rsync, co spowoduje pomijanie plików w miejscu docelowym, jeśli są nowsze niż plik w źródle, ale tylko pod warunkiem, że są tego samego typu. Oznacza to, że jeśli na przykład plik źródłowy jest zwykłym plikiem, a miejscem docelowym jest dowiązanie symboliczne, plik docelowy zostanie nadpisany niezależnie od sygnatury czasowej.

Na marginesie, czy typ pliku oznacza tutaj tylko zwykły plik i simlink, a nie typ, taki jak pdf, jpg, htm, txt itp.?

Komentarze

Odpowiedź

Istnieją 3 rodzaje „sygnatur czasowych”:

  • Dostęp – ostatni czas odczytu pliku
  • Modyfikuj – ostatnia modyfikacja pliku (zmiana zawartości)
  • Zmiana – ostatnia zmiana metadanych pliku (np. uprawnienia)

Aby wyświetlić te informacje, możesz użyć stat , który jest częścią z coreutils.

stat pokaże Ci również więcej informacje takie jak urządzenie, i-węzły, łącza itp.

Pamiętaj, że tego rodzaju informacje w dużym stopniu zależą od systemu plików i opcji montowania. Na przykład, jeśli zamontujesz partycję z opcją noatime, żadne informacje o dostępie nie zostaną zapisane.

Narzędziem do zmiany sygnatur czasowych będzie touch. Istnieje kilka argumentów, aby zdecydować, który znacznik czasu zmienić (np. -A dla czasu dostępu, -m dla czasu modyfikacji) i wpłynąć na parsowanie nowego danego znacznika czasu. Zobacz man touch , aby uzyskać więcej informacji.

touch może się przydać w połączeniu z cp -u ( „kopiuj tylko wtedy, gdy plik SOURCE jest nowszy niż plik docelowy lub gdy brakuje pliku docelowego” ) lub do tworzenia pustych plików znaczników.

Komentarze

  • Dzięki! W przypadku polecenia rsync w " ' nie obchodzi się, który plik jest nowszy ", pod względem rodzaju sygnatury czasowej oznacza " nowszy ". Poza tym, na marginesie, czy typ pliku, o który dba rsync, oznacza tylko zwykły plik i simlink, a nie typ, taki jak pdf, jpg, htm, txt itp.?
  • Ogólnie rzecz biorąc, odniesienie do czasu plik to " zmodyfikowany " znacznik czasu. Na przykład to, co widzisz z ls -l. A typ pliku odnosi się do pliku w porównaniu z dowiązaniem symbolicznym (lub innymi typami plików, takimi jak katalogi lub urządzenia). Nie jaki jest typ danych w pliku (tekst a jpeg itp.).
  • @Tim W tym kontekście ' s zmodyfikowany znacznik czasu; rsync mówi, że kiedy ' decyduje, czy powinien utworzyć kopię zapasową pliku, nie ' nie sprawdza, czy plik źródłowy został zmodyfikowany później niż istniejąca kopia zapasowa (co jest typowe dla programów do tworzenia kopii zapasowych); sprawdza tylko, czy pliki mają różne rozmiary lub różne czasy modyfikacji i wykonuje kopie zapasowe, jeśli tak.
  • A skąd mam wiedzieć, kiedy plik został utworzony jako pierwszy? Czy te informacje są gdzieś przechowywane, czy też są tracone w aktualizacjach? tak powiem, jak długo ten plik istnieje ..?
  • Strona podręcznika stat (2) opisuje bardziej szczegółowo, kiedy te sygnatury czasowe są zmieniane.

Odpowiedź

Odpowiedź echox jest prawidłowa, ale chcę dodać informacje dotyczące pliku czas utworzenia.

Obsługa systemu plików

Niektóre systemy plików obsługują dodatkowy wpis w i-węźle dotyczący czasu utworzenia (lub czasu urodzenia). Wiem, że ext4 obsługuje tę funkcję , a także JFS i BTRFS .

Jednak większość narzędzi i API nie została jeszcze zaktualizowana, aby odczytać te dodatkowe informacje.Więc chociaż może tam być, nie jest dostępny.

Na przykład w systemie Ubuntu 12.04 LTS otrzymuję następujące informacje dla pliku, który utworzyłem dzisiaj:

$ echo Just another test > /tmp/mytest $ sleep 3 $ touch /tmp/mytest $ sleep 2 $ cat /tmp/mytest > /dev/null $ stat /tmp/mytest [...] Access: 2012-06-05 13:33:44.279774711 +0200 Modify: 2012-06-05 13:33:34.611893317 +0200 Change: 2012-06-05 13:33:34.611893317 +0200 Birth: - $ sudo debugfs -R "stat /tmp/mytest" /dev/sda1 [...] ctime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 atime: 0x4fcdee98:42b417dc -- Tue Jun 5 13:33:44 2012 mtime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 crtime: 0x4fcdee46:01258f1c -- Tue Jun 5 13:32:22 2012 [...] 

Możesz zobaczyć, że nowsza funkcja stat ma pole urodzenia, chociaż dane wyjściowe wydają się nieprawidłowe. I poprzez debugfs możemy uzyskać informacje (crtime as I „m w systemie plików ext4).

Obsługa statx

Teraz od czasu jądra 4.11 nowe wywołanie systemowe statx , oprócz lepszej obsługi Y2038 lub sieci systemy plików, zapewnia również kilka dodatkowych funkcji, takich jak dostęp do btime lub czasu urodzenia (czasu utworzenia). Wsparcie dla ext4 powinno być w tym samym wydaniu jądra 4.11.

Były łaty dodające obsługę tego nowego wywołania systemowego w późniejszych wydaniach jądra: np. BTRFS i F2FS w jądrze 4.13, SMB3 w 4.14, GFS2 w 4.15, NFS w 4.16, itd.

Nadchodzące glibc zapewni wywołanie funkcji do odpytywania tego interfejsu (patrz wiadomości Phoronix na temat obsługi glibc statx ). Dlatego wkrótce możemy spodziewać się obsługi tej funkcji w przestrzeni użytkownika.

Komentarze

  • Czy wiesz, czy btime pozostaje nienaruszone, gdy pliki z systemu Windows (tworzenie time) są przenoszone na ext4 i odwrotnie, jak mtime?
  • @paradroid przepraszam, nie znam odpowiedzi. Jeśli masz na myśli pod Linuksem podczas kopiowania pliku z NTFS do ext4, należałoby zajrzeć do sterownika NTFS, jeśli obsługuje on czas tworzenia. Jeśli masz na myśli system Windows, należałoby poszukać sterownika ext4 dla Windows.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *