So solo che ls -t e ls -f fornisce un diverso ordinamento di file e sottodirectory in una directory.

  • Quali sono le differenze tra timestamp, ora di modifica e ora di creazione di un file?
  • Come ottenere e modificare questo tipo di informazioni tramite comandi?
  • In termini di quale tipo di informazioni le persone dicono che un file è “più recente” dellaltro?
  • Cosa la modifica del tipo di informazione non renderà il file diverso?

Ad esempio, ho visto qualcuno che ha scritto:

Per impostazione predefinita, il programma rsync controlla solo se i file sono diversi per dimensione e data e ora. Non si preoccupa di quale file è più recente, se è diverso, viene sovrascritto. Puoi passare il flag “–update” a rsync che farà saltare i file nella destinazione se sono più recenti del file sulla sorgente, ma solo fintanto che sono dello stesso tipo di file. Ciò significa che se, ad esempio, il file di origine è un file normale e la destinazione è un collegamento simbolico, il file di destinazione verrà sovrascritto, indipendentemente dal timestamp.

In una nota a margine, il tipo di file qui significa solo file regolari e simlink, non il tipo come pdf, jpg, htm, txt ecc?

Commenti

Risposta

Sono disponibili 3 tipi di “timestamp”:

  • Accesso – lultimo ora in cui il file è stato letto
  • Modifica: lultima volta che il file è stato modificato (il contenuto è stato modificato)
  • Cambia: lultima volta che i metadati del file sono stati modificati (ad esempio i permessi)

Per visualizzare queste informazioni, puoi utilizzare stat che fa parte dei coreutils.

stat ti mostrerà anche altri informazioni come il dispositivo, gli inode, i collegamenti, ecc.

Ricorda che questo tipo di informazioni dipende molto dal filesystem e dalle opzioni di montaggio. Ad esempio, se monti una partizione con lopzione noatime, non verrà scritta alcuna informazione di accesso.

Unutilità per modificare i timestamp sarebbe touch. Ci sono alcuni argomenti per decidere quale timestamp modificare (ad esempio -a per lora di accesso, -m per lora di modifica) e per influenzare lanalisi di un nuovo dato timestamp. Vedi man touch per maggiori dettagli.

touch può diventare utile in combinazione con cp -u ( “copia solo quando il file SOURCE è più recente del file di destinazione o quando manca il file di destinazione” ) o per la creazione di file marker vuoti.

Commenti

  • Grazie! Per il comando rsync, in " non ' importa quale file è più recente ", in termini di tipo di timestamp significa " più recente ". Inoltre, come nota a margine, il tipo di file a cui rsync tiene conto significa solo file regolari e simlink, non il tipo come pdf, jpg, htm, txt ecc. un file è il " modificato " timestamp. Ad esempio, quello che vedi da ls -l. E il tipo di file si riferisce a file vs. symlink (o altri tipi di file come directory o dispositivi). Non il tipo di dati nel file (testo, jpeg, ecc.).
  • @Tim In quel contesto ' s il timestamp modificato; rsync sta dicendo che quando ' decide se eseguire il backup di un file, non ' controlla se il file sorgente è stato modificato più recentemente rispetto al backup esistente (che è comune con i programmi di backup); controlla solo per vedere se i file hanno dimensioni diverse o tempi di modifica diversi e in tal caso esegue il backup
  • E come faccio a sapere quando il file è stato creato per primo? Queste informazioni sono conservate da qualche parte o vengono perse negli aggiornamenti? per così dire, da quanto tempo il file esiste ..?
  • La pagina man stat (2) descrive in maggior dettaglio quando questi timestamp sono cambiati.

Risposta

La risposta di echox è valida ma desidero aggiungere informazioni sul file ora di creazione.

Supporto per file system

Alcuni file system supportano una voce aggiuntiva nellinode relativa allora di creazione (o ora di nascita). So che ext4 supporta questa funzione e anche JFS e BTRFS .

Tuttavia la maggior parte degli strumenti e delle API non sono stati ancora aggiornati per leggere queste informazioni aggiuntive.Quindi, anche se potrebbe essere lì, non è accessibile.

Ad esempio su Ubuntu 12.04 LTS ottengo quanto segue per un file che ho creato oggi:

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

Puoi vedere che la funzione stat più recente ha un campo di nascita, anche se loutput sembra errato. E tramite debugfs possiamo ottenere le informazioni (crtime as I “m sul file system ext4).

Supporto statx

Ora dal Kernel 4.11 una nuova chiamata di sistema statx , oltre a un migliore supporto per Y2038 o rete file system, offre anche alcune funzionalità extra come laccesso btime o lora di nascita (ora di creazione). Il supporto per ext4 dovrebbe essere nella stessa versione del kernel 4.11.

Ci sono state patch per aggiungere il supporto a questa nuova syscall nelle versioni successive del kernel: ad es. BTRFS e F2FS in Kernel 4.13, SMB3 in 4.14, GFS2 in 4.15, NFS in 4.16, ecc.

La prossima glibc fornirà una chiamata di funzione per interrogare questa interfaccia (vedi Notizie Phoronix sul supporto glibc statx ). Quindi possiamo aspettarci il supporto per questa funzione nello spazio utente molto presto.

Commenti

  • Sai se btime rimane intatto quando i file da Windows (Creazione time) vengono spostati su ext4 e viceversa, come mtime?
  • @paradroid scusa non conosco la risposta. Se intendi sotto Linux quando copi un file da NTFS a ext4, dovresti cercare nel driver NTFS se supporta lora di creazione. Se intendi sotto Windows, dovresti cercare nel driver ext4 per Windows.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *