Csak azt tudom, hogy ls -t és ls -f a fájlok és az alkönyvtárak különböző rendezését adja meg egy könyvtár alatt.

  • Mi a különbség a fájl időbélyegzője, módosítási ideje és létrehozott ideje között?
  • Hogyan szerezhetünk és változtathatunk meg ilyen típusú információkat parancsokkal?
  • Az emberek milyen információi szerint “fájl” újabb “, mint a másik?
  • az ilyen típusú információk megváltoztatása nem teszi különbségé a fájlt?

Például láttam, hogy valaki ezt írta:

Alapértelmezés szerint az rsync program csak azt vizsgálja, hogy a fájlok mérete és időbélyegzője eltér-e. Nem érdekli, melyik fájl újabb, ha más, akkor felülírja. Átadhatja a “–update” zászlót az rsync-nek, ami miatt a fájlok átugorják a célhelyet, ha azok újabbak, mint a forrásfájl, de csak addig, amíg azonos típusú fájlok. Ez azt jelenti, hogy ha például a forrásfájl egy normál fájl, a cél pedig egy symlink, akkor a célfájl felülírásra kerül, függetlenül az időbélyegtől.

Megjegyzendő, hogy a fájltípus itt csak rendes fájlt és szimlinket jelent, nem pedig a pdf, jpg, htm, txt stb. típust?

Megjegyzések

Válasz

Háromféle “időbélyeg” van:

  • Hozzáférés – az utolsó a fájl olvasásának ideje
  • Módosítás – a fájl utolsó módosítása (a tartalom módosult)
  • Módosítás – a fájl metaadatainak utolsó módosítása (pl. engedélyek)

Ezen információk megjelenítéséhez használhatja a stat elemet, amely része a coreutils közül.

stat megmutat még néhányat információk, például az eszköz, az inodes, a linkek stb.

Ne feledje, hogy ez a fajta információ nagymértékben függ a fájlrendszertől és a csatlakoztatási lehetőségektől. Például, ha egy partíciót a noatime opcióval csatlakoztat, akkor nem írnak hozzáférési információkat.

Az időbélyegek megváltoztatásához egy segédprogram touch. Van néhány érv annak eldöntésére, hogy melyik időbélyeget kell megváltoztatni (pl. -A a hozzáférési időhöz, -m a módosítási időhöz), és befolyásolni kell egy új adott időbélyeg elemzését. További részletekért lásd: man touch .

touch a cp -u kombinációval hasznos lehet ( “csak akkor másolhat, ha a SOURCE fájl újabb, mint a célfájl, vagy ha a célfájl hiányzik” ) vagy üres jelölőfájlok létrehozásához.

Megjegyzések

  • Köszönjük! Az rsync parancs esetében a " fájlban nem ' törődik azzal, hogy melyik fájl újabb ", hogy melyik időbélyeget jelenti " újabb " alatt. Ezenkívül egy megjegyzésként azt jelenti, hogy az rsync által törölt fájltípus csak a szokásos fájlt és a simlinket jelenti, nem pedig a pdf, jpg, htm, txt stb. Típust?
  • Általában hivatkozás a egy fájl a " módosított " időbélyeg. Például, amit a ls -l oldalról lát. A fájltípus pedig a fájl vagy a symlink (vagy más típusú fájlok, például könyvtárak vagy eszközök) fájlra vonatkozik. Nem milyen a fájlban található adatok típusa (szöveg vs. jpeg stb.).
  • @Tim Ebben az összefüggésben ' s a módosított időbélyeg; Az rsync azt mondja, hogy amikor ' eldönti, hogy készítsen-e biztonsági másolatot egy fájlról, akkor nem ellenőrzi ' a forrásfájlt. nemrégiben módosították, mint a meglévő biztonsági másolatot (ami gyakori a biztonsági mentési programokkal); csak azt ellenőrzi, hogy a fájlok mérete vagy módosítási ideje eltér-e, és ha igen, akkor biztonsági másolatot készít
  • És honnan tudhatom, hogy a fájlt mikor hozták létre először? Tartják ezeket az információkat egyáltalán valahol, vagy elvesznek a frissítésekben? úgymond: meddig létezik a fájl ..?
  • A stat (2) man oldal részletesebben leírja, amikor ezek az időbélyegek megváltoznak.

Válasz

Az echox válasza érvényes, de információkat szeretnék hozzáadni a fájlhoz létrehozási idő.

Fájlrendszer támogatás

Egyes fájlrendszerek támogatják az inode további bejegyzését a létrehozás idejével (vagy születési idejével) kapcsolatban. Tudom, hogy a ext4 támogatja ezt a funkciót , valamint JFS és BTRFS .

Azonban a legtöbb eszközt és az API-t még nem frissítették, hogy elolvassák ezeket az extra információkat.Tehát annak ellenére, hogy ott lehet, nem érhető el.

Például az Ubuntu 12.04 LTS-en a következőket kaptam egy ma létrehozott fájlomhoz:

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

Láthatja, hogy az újabb stat függvénynek születési mezője van, bár a kimenet helytelennek tűnik. És a debugfs-en keresztül megszerezhetjük az információkat (crtime as I “m az ext4 fájlrendszeren).

statx támogatás

A Kernel 4.11 óta új statx rendszerhívás van , az Y2038 vagy a hálózat jobb támogatása mellett fájlrendszereket, ez is hoz néhány extra funkciót, például a btime vagy a születési idő (létrehozási idő) hozzáférést. Az ext4 támogatásának ugyanabban a kernel 4.11-es verzióban kell lennie.

A későbbi Kernel-kiadásokban voltak javítások az új syscall támogatásához: pl. BTRFS és F2FS a 4.13-as rendszermagban, az SMB3 a 4.14-ben, a GFS2 a 4.15-ben, az NFS a 4.16-ban stb. >

Phoronix hírek a glibc statx támogatásáról ). Tehát hamarosan számíthatunk ennek a szolgáltatásnak a támogatására a felhasználói térben.

Megjegyzések

  • Tudja, hogy a btime érintetlen marad-e, amikor a Windows fájljai (Creation idő) az ext4-re kerülnek, és fordítva, mint például az mtime? Ha a Linux alatt érted, amikor egy fájlt másolsz az NTFS-ből az ext4-be, akkor az NTFS illesztőprogramban kell keresni, ha az támogatja a létrehozási időt. Ha a Windows alatt érted, akkor a Windows ext4 illesztőprogramját kell keresni.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük