Linux fájl időbélyegek magyarázata: atime, mtime és ctime

Mikor a „megváltozott” nem azt jelenti, hogy „módosított”? Amikor a Linux-fájlok időbélyegeiről beszélünk. Ebben az útmutatóban elmagyarázzuk, hogyan frissíti őket a rendszer, és hogyan módosíthatja őket saját maga.

Az idő, az midő és a ctime közötti különbség

Minden Linux-fájlnak három van időbélyegek: a hozzáférési időbélyeg (atime), a módosított időbélyeg (mtime) és a megváltozott időbélyeg (ctime).

A hozzáférési időbélyeg a fájl utolsó beolvasása. Ez azt jelenti, hogy valaki egy programot használt a fájl tartalmának megjelenítésére vagy bizonyos értékek olvasására. Semmit sem szerkesztettek vagy adtak hozzá a fájlhoz. Az adatokra hivatkoztak, de változatlanok.

A módosított időbélyeg azt jelenti, hogy a fájl tartalma utoljára módosult. Egy program vagy folyamat szerkesztette vagy manipulálta a fájlt. A „módosított” azt jelenti, hogy a fájlban valami módosult vagy törölve lett, vagy új adatok kerültek hozzáadásra.

A megváltozott időbélyegek nem a fájl tartalmának módosítására utalnak. Inkább az az időpont, amikor a fájlhoz kapcsolódó metaadatok megváltoztak. A fájlengedély-módosítások például frissítik a módosított időbélyeget.

A szabványos ext4 Linux fájlrendszer belső fájlrendszer-struktúráiban is lefoglal helyet a fájllétrehozási időbélyeg számára, de ez még nem került megvalósításra. Néha ez az időbélyeg kitöltésre kerül, de nem függhet a benne lévő értékektől.

Az időbélyeg anatómiája

A Linux időbélyegei dátum és idő helyett számot tartalmaznak. Ez a szám az óta eltelt másodpercek száma Unix korszak, amely 1970. január 1-jén éjfél (00:00:00) volt Koordinált világidő (UTC). A szökőmásodperceket figyelmen kívül hagyják a Linux időbélyegei, így nem analógiák a valós idővel.

Amikor a Linuxnak időbélyeget kell megjelenítenie, a másodpercek számát dátummá és idővé alakítja. Ez megkönnyíti az emberek számára a megértést. A fájlt megtekintő számítógép helye és időzóna határozza meg a másodpercek számának dátummá és idővé való konvertálását. Azt is biztosítja, hogy a hónap a megfelelő nyelven legyen feltüntetve.

Tehát hány másodpercet lehet tárolni egy időbélyegben? Nagyon sok – pontosabban 2 147 483 647. Ez nagy szám, de vajon elég? Ha hozzáadja ezt a Unix-korszakhoz, majd lefordítja dátumra és időpontra, akkor 2038. január 19-én, kedden, 03:14:07-kor kapja meg, de előtte más sémára lesz szükségünk az időbélyegekhez.

  A Nozbe Feladatkezelő telepítése és használata Linux rendszeren

Időbélyegek megtekintése

Ha a -l (hosszú lista) opciót használja az ls-sel, ahogy az alább látható, láthatja a módosított időbélyeget:

ls -l dp.c

Ha látni szeretné a hozzáférési időbélyeget, használja a -lu (hozzáférési idő) opciót, például:

ls -lu dp.c

Végül pedig a változás időbélyegének megtekintéséhez használja a -lc (change time) opciót; írja be a következőt:

ls -lc dp.c

A

A fenti időbélyegek azt mutatják, hogy a fájl tartalma utoljára 2019. április 21-én módosult. A hozzáférési és a módosított időbélyegek megegyeznek, mert a fájlt 2020. január 20-án egy másik számítógépről másolták át erre a számítógépre, és mindkét időbélyeg frissült.

Nak nek az összes időbélyeg egyidejű megtekintése, használja a stat parancsot a következőképpen:

stat dp.c

A

Az időzónák a kijelző alján találhatók. Amint látja, nagyon pontos, töredékmásodperc-összetevővel rendelkeznek. Minden időbélyeg végén egy -0500 vagy -0400 is látható.

Ezek időzóna-eltolások. A fájlrendszer UTC-ben rögzíti az időbélyegeket, és a stat által megjelenített helyi időzónára konvertálja őket. A cikk kutatásához használt számítógép úgy van beállítva, mintha az Egyesült Államok keleti szabványidő (EST) zónájában lenne.

Ez az időzóna öt órával van UTC mögött, amikor az EST érvényes. Azonban négy órával elmarad az UTC-től, amikor az keleti nyári idő (EDT) van érvényben. 2019 áprilisában, amikor a módosított időbélyeg megváltozott, az EDT volt érvényben. Ezért van az, hogy az időbélyegek közül kettőnél ötórás, a módosítottnál viszont négyórás az eltolás.

Az eltolások és az időzónák nem tárolódnak sehol. Sem inode, sem fájlrendszerterület nincs ezen értékek tárolására. Ezeket menet közben kell kiszámolni az időbélyeg (amely mindig UTC-időben van), a fájlt megjelenítő számítógép helyi időzónája és a DST érvényben volt-e alapján.

Láthat egy „Születési” időbélyeget is, amely a fájl létrehozásának dátumára van fenntartva. Ez nincs megvalósítva, és időbélyegző helyett kötőjelet „-” lát.

Időbélyegek módosítása

Ha szeretné, módosíthatja a fájl időbélyegeit. A touch paranccsal módosíthatja a hozzáférést vagy a módosított időbélyegeket, vagy mindkettő:

touch -a dp.c

Új hozzáférési időbélyeg beállításához használja az -a (hozzáférési idő) kapcsolót. Ez a parancs a hozzáférési időbélyegzőt a számítógép aktuális idejére állítja be:

stat dp.c

A

A hozzáférési időbélyeg megváltozott, ahogy az várható volt. Azonban a megváltozott időbélyeg is frissült; ez normális.

A módosított időbélyeg módosításához használja a -m (módosított idő) kapcsolót:

touch -m dp.c
stat dp.c

A

Ezúttal a módosított és módosított időbélyegek frissültek.

  A 4 legjobb kipróbálható Arch Linux származék

Használhatja a -d (dátum) kapcsolót, ha egyszerre szeretné módosítani a hozzáférési és a módosított időbélyegeket. Időt és dátumot is megadhat – nincs korlátozva az időbélyegek jelenre váltása.

A következő paranccsal állítjuk be a hozzáférést és a módosított időbélyegeket 10:30:45-re 2020. január 15-én:

touch -d "2020-01-15 10:30:45" dp.c
stat dp.c

A hozzáférést és a módosított időbélyegeket most egy múltbeli dátumra állítottuk be. A megváltozott időbélyeg is frissült a számítógép aktuális idejére.

Használhatja a -r (referencia) kapcsolót is, amint az alább látható, ha egy fájl időbélyegét egy másik fájl időbélyegértékére szeretné beállítani:

touch dp.c -r dice_words.sl3
stat dp.c

A

És akkor nagyjából visszatértünk oda, ahol elkezdtük, a -0400 és -0500 időbélyegek keverékével.

Csináljunk valamit, ami csak a megváltozott időbélyeget érinti. A chmod parancsot használjuk egy végrehajtható fájl megadásához végrehajtási engedélyeket minden felhasználó számára:

chmod +x dp
stat dp

A

A megváltozott időbélyeg volt az egyetlen, amely frissült. Ennek az az oka, hogy magát a fájlt nem változtatták meg – nem fértek hozzá, és nem is módosították. A fájl metaadatai azonban megváltoztak.

Hogyan frissíti a fájlrendszer az időbélyegeket

Fájlrendszer csatlakoztatásakor vannak olyan opciók, amelyek segítségével megadhatja, hogy a fájlrendszer hogyan működjön vagy hogyan kezelje. Ezeket az /etc/fstab fájl tárolja, amelyet a rendszer a rendszerindításkor olvas és feldolgoz. Beállíthat olyan beállításokat is, amelyek megadhatják a hozzáférési időbélyeg frissítéséhez használt sémát.

Íme néhány a leggyakoribb lehetőségek közül:

strictatime (strict atime): Ez a beállítás frissíti a fájlok hozzáférési időbélyegét minden alkalommal, amikor hozzáférnek. Ez a megközelítés többletköltséggel jár, de egyes kiszolgálók számára előnyös ez a rendszer. Nem sok érdeme van asztali vagy laptop számítógépen.
noatime (noatime): Ez az opció teljesen letiltja a fájlok és könyvtárak hozzáférési időbélyegeinek frissítését. A módosított időbélyegek azonban továbbra is frissülnek.
nodiratime (nincs dir atime): Ez az opció engedélyezi a hozzáférési időbélyegeket a frissítendő fájlok számára, de letiltja a könyvtáraknál.
relatime (relatív idő): Ez a beállítás csak akkor frissíti a hozzáférési időbélyeget, ha az több mint 24 órája régebbi volt, vagy az előző régebbi volt, mint a jelenlegi módosított vagy módosított időbélyegek. Ez jó egyensúlyt teremt a hozzáférési időbélyegek túl gyakran frissülő vagy egyáltalán nem frissítése között.

  A Linux lsof parancs használata

Nézzük meg az /etc/fstab fájlt ehhez a számítógéphez, és nézzük meg, mely beállítások vannak beállítva:

less /etc/fstab

A

Megjelenik számunkra az /etc/fstab fájl, az alábbiak szerint.

A

Íme a fájl tartalma körítés nélkül:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# 
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0

Csak két bejegyzés van, és az egyik egy swap fájl, amelyet figyelmen kívül hagyhatunk. A másik a fájlrendszer ( / ) gyökeréhez van csatlakoztatva, és a telepítéskor a /dev/sda1 eszközön volt. Ez az első partíció az első merevlemezen, és történetesen ext4 fájlrendszert tartalmaz.

Az egyetlen átadott opció az errors=remount-ro, amely arra utasítja az operációs rendszert, hogy csak olvashatóként csatlakoztassa újra ezt a fájlrendszert, ha az olvasási és írási fájlrendszerként való felcsatoláskor hiba történik.

Tehát nincs szó arról, hogy a hozzáférési időbélyeg hogyan lesz kezelve. Ássunk mélyebbre, és nézzük meg, mit tud nekünk mondani a /proc/mounts. A /proc/mounts kimenetet a grep-en keresztül továbbítjuk. A keresési karakterláncunk az „sda” lesz, a merevlemez azonosítója.

A következőket írjuk be:

cat /proc/mounts | grep "sda"

Most a következő lehetőségeket látjuk:

rw: A fájlrendszer olvasási és írási fájlrendszerként lesz csatlakoztatva.
relatime: A fájlrendszer a „relatív idő” sémát használja a hozzáférési időbélyegek frissítéséhez.

ez honnan jött? Nos, a relációs sémát a következő helyzetekben használják:

Ha az alapértelmezett /etc/fstab beállítást használja.
Amikor a relatime /etc/fstab opciót használjuk.
Ha nem használunk hozzáférési időbélyeg-beállításokat az /etc/fstab fájlban, és Linux kernel 2.6.30 vagy újabb verziót használ.

Az ext4 fájlrendszerre vonatkozó /etc/fstab bejegyzésünk nem adott meg semmilyen hozzáférési időbélyeg-frissítési lehetőséget, így a Linux ésszerű választást választott, és a relatime-ot használta.

Az időbélyegek fontosak

Az időbélyegek segítségével egyszerűen megtudhatjuk, hogy egy fájlhoz mikor fértek hozzá, mikor kerültek módosításra vagy módosításra. De ami még fontosabb, lehetőséget biztosítanak a szoftver biztonsági mentésére és szinkronizálására annak meghatározásához, hogy mely fájlokról kell biztonsági másolatot készíteni.

Az időbélyegek kezelésének képessége hasznosnak bizonyul, amikor erőszakkal kell meggyőzni egy programot, hogy vegyen fel vagy hagyjon figyelmen kívül egy fájlt vagy fájlkészletet.