Ik weet gewoon dat ls -t en ls -f geven verschillende sorteringen van bestanden en submappen onder een map.

  • Wat zijn de verschillen tussen tijdstempel, wijzigingstijd en aangemaakte tijd van een bestand?
  • Hoe kan ik dit soort informatie verkrijgen en wijzigen via opdrachten?
  • In termen van wat voor soort informatie zeggen mensen dat een bestand “nieuwer” is dan het andere?
  • Wat soorten gegevenswijziging zal het bestand niet anders maken?

Ik zag bijvoorbeeld dat iemand schreef:

Standaard kijkt het rsync programma alleen om te zien of de bestanden verschillen in grootte en tijdstempel. Het maakt niet uit welk bestand nieuwer is, als het anders is, wordt het overschreven. Je kunt de vlag “–update” doorgeven aan rsync, waardoor het bestanden op de bestemming overslaat als ze nieuwer zijn dan het bestand op de bron, maar alleen zolang ze van hetzelfde type bestand zijn. Dit betekent dat als, bijvoorbeeld, het bronbestand een gewoon bestand is en de bestemming een symlink is, het bestemmingsbestand zal worden overschreven, ongeacht het tijdstempel.

Even terzijde, betekent het bestandstype hier alleen het gewone bestand en simlink, niet het type zoals pdf, jpg, htm, txt enz.?

Opmerkingen

Antwoord

Er zijn 3 soorten “tijdstempels”:

  • Toegang – de laatste tijd waarop het bestand is gelezen
  • Wijzigen – de laatste keer dat het bestand is gewijzigd (inhoud is gewijzigd)
  • Wijzigen – de laatste keer dat metagegevens van het bestand zijn gewijzigd (bijv. machtigingen)

Om deze informatie weer te geven, kunt u stat gebruiken. van de coreutils.

stat zal je ook wat meer laten zien informatie zoals het apparaat, inodes, links, etc.

Onthoud dat dit soort informatie sterk afhangt van het bestandssysteem en de mount-opties. Als u bijvoorbeeld een partitie koppelt met de optie noatime, wordt er geen toegangsinformatie geschreven.

Een hulpprogramma om de tijdstempels te wijzigen is touch. Er zijn enkele argumenten om te beslissen welke tijdstempel moet worden gewijzigd (bijv. -A voor toegangstijd, -m voor wijzigingstijd) en om het parseren van een nieuw gegeven tijdstempel te beïnvloeden. Zie man touch voor meer details.

touch kan handig zijn in combinatie met cp -u ( “kopieer alleen wanneer het SOURCE-bestand nieuwer is dan het bestemmingsbestand of wanneer het bestemmingsbestand ontbreekt” ) of voor het aanmaken van lege markeringsbestanden.

Reacties

  • Bedankt! Voor het rsync-commando, in ” maakt het ‘ niet uit welk bestand nieuwer is “, in termen van welk soort tijdstempel betekent het door ” nieuwer “. Even terzijde, betekent het bestandstype waar rsync om geeft alleen het reguliere bestand en de simlink, niet het type zoals pdf, jpg, htm, txt enz.?
  • In het algemeen wordt verwezen naar de tijd van een bestand is het ” gewijzigde ” tijdstempel. Bijvoorbeeld wat u ziet van ls -l. En het bestandstype verwijst naar bestand versus symlink (of andere soorten bestanden zoals mappen of apparaten). Niet wat het type gegevens in het bestand is (tekst vs. jpeg, enz.).
  • @Tim In die context is het ‘ s het gewijzigde tijdstempel; rsync zegt dat wanneer het ‘ besluit of het een back-up van een bestand moet maken, het ‘ niet controleert of het bronbestand is recenter gewijzigd dan de bestaande back-up (wat gebruikelijk is bij back-upprogrammas); het controleert gewoon of de bestanden verschillende groottes of verschillende wijzigingstijden hebben en maakt zo ja een back-up.
  • En hoe weet ik wanneer het bestand voor het eerst werd gemaakt? Wordt deze informatie überhaupt bewaard of gaat deze verloren in updates? om zo te zeggen, hoe lang bestaat het bestand al ..?
  • De man-pagina stat (2) beschrijft in meer detail wanneer die tijdstempels zijn gewijzigd.

Answer

Het antwoord van echox is geldig, maar ik wil informatie over het bestand toevoegen aanmaak tijd.

Ondersteuning bestandssysteem

Sommige bestandssystemen ondersteunen een extra invoer in de inode met betrekking tot de aanmaak tijd (of geboortetijd). Ik weet dat ext4 deze functie ondersteunt en ook JFS en BTRFS .

De meeste tools en API zijn echter nog niet bijgewerkt om deze extra informatie te lezen.Dus hoewel het er zou kunnen zijn, is het niet toegankelijk.

Op Ubuntu 12.04 LTS krijg ik bijvoorbeeld het volgende voor een bestand dat ik vandaag heb gemaakt:

$ 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 [...] 

Je kunt zien dat de nieuwere stat-functie een geboorteveld heeft, hoewel de uitvoer onjuist lijkt. En via debugfs kunnen we de informatie krijgen (crtime aangezien ik op ext4-bestandssysteem ben).

statx-ondersteuning

Er is nu sinds Kernel 4.11 een nieuwe statx-systeemoproep , bovenop een betere ondersteuning van Y2038 of netwerk bestandssystemen, brengt het ook een paar extra functies zoals de btime of geboortetijd (aanmaak tijd) toegang. Ondersteuning voor ext4 zou in dezelfde kernel release 4.11 moeten zitten.

Er zijn patches geweest om ondersteuning toe te voegen aan deze nieuwe syscall in latere Kernel releases: bijv. BTRFS en F2FS in Kernel 4.13, SMB3 in 4.14, GFS2 in 4.15, NFS in 4.16, etc.

De komende glibc zal een functieaanroep leveren om deze interface te bevragen (zie Phoronix nieuws over glibc statx ondersteuning ). We kunnen dus binnenkort ondersteuning voor deze functie in de gebruikersruimte verwachten.

Opmerkingen

  • Weet u of btime intact blijft wanneer bestanden uit Windows (aanmaken time) worden verplaatst naar ext4 en vice versa, zoals mtime?
  • @paradroid sorry ik weet het antwoord niet. Als je onder Linux bedoelt wanneer je een bestand kopieert van NTFS naar ext4, dan zou je in de NTFS-driver moeten kijken of het de aanmaaktijd ondersteunt. Als u onder Windows bedoelt, moet u in de ext4-driver voor Windows kijken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *