Временные метки файлов: atime, mtime, ctime

Thank you for reading this post, don't forget to subscribe!

В Linux каж­дый файл име­ет неко­то­рые вре­мен­ные мет­ки, кото­рые предо­став­ля­ют неко­то­рые важ­ные ана­ли­ти­ки о том, когда файл или его атри­бу­ты были моди­фи­ци­ро­ва­ны или  изме­не­ны. Давай­те посмот­рим на эти вре­мен­ные мет­ки в деталях.

Что такое метки времени Linux?

Любой файл в Linux обыч­но име­ет три вре­мен­ных метки:

  • atime – вре­мя доступа
  • mtime – моди­фи­ци­ро­вать время
  • ctime – изме­нить время

atime

atime озна­ча­ет вре­мя досту­па. Эта вре­мен­ная мет­ка сооб­ща­ет вам, когда был послед­ний раз обра­ща­лись к фай­лу. При досту­пе это озна­ча­ет, что если вы исполь­зо­ва­ли cat, vim, less или какой-либо дру­гой инстру­мент для чте­ния или отоб­ра­же­ния содер­жи­мо­го файла.

mtime

mtime  озна­ча­ет вре­мя моди­фи­ка­ции. Эта вре­мен­ная мет­ка сооб­ща­ет вам, когда был послед­ний раз моди­фи­ци­ро­ван файл. Это озна­ча­ет, что содер­жи­мое фай­ла было изме­не­но путем редак­ти­ро­ва­ния файла.

ctime

ctime  озна­ча­ет вре­мя изме­не­ния ста­ту­са. Эта вре­мен­ная мет­ка сооб­ща­ет вам, когда был послед­ний раз были изме­не­ны свой­ства и мета­дан­ные фай­ла. Мета­дан­ные вклю­ча­ют пра­ва досту­па, пра­ва соб­ствен­но­сти, имя и место­по­ло­же­ние файла.

Как просмотреть временные метки файла?

Вы може­те исполь­зо­вать коман­ду stat для про­смот­ра всех вре­мен­ных меток фай­ла. Исполь­зо­ва­ние коман­ды stat очень про­сто. Вам про­сто нуж­но ука­зать имя файла.

 

Резуль­тат будет таким:

Вы може­те уви­деть все три вре­мен­ных мет­ки (доступ, моди­фи­ци­ро­ва­ние и изме­не­ние) в при­ве­ден­ном выше выво­де. Все три вре­мен­ных мет­ки здесь оди­на­ко­вы, пото­му что мы про­сто созда­ли этот пустой файл с коман­дой touch.

Теперь давай­те изме­ним эти вре­мен­ные метки.

Если мы исполь­зу­ем коман­ду less для чте­ния фай­ла, это изме­нит толь­ко вре­мя досту­па, пото­му что содер­жи­мое и мета­дан­ные фай­ла оста­ют­ся неизменными.

Теперь давай­те изме­ним вре­мя моди­фи­ка­ции. Мы будем исполь­зо­вать коман­ду cat для добав­ле­ния ново­го тек­ста в этот файл. Это предот­вра­тит изме­не­ние вре­ме­ни доступа.

Вы заме­ти­ли что-то стран­ное? Вы изме­ни­ли файл и ожи­да­ли изме­не­ния mtime, но так­же изме­ни­ли вре­мя ctime.

Запом­ни­те, ctime все­гда изме­ня­ет mtime, это пото­му, что пока вре­мя изме­не­ния нахо­дит­ся под кон­тро­лем поль­зо­ва­те­ля, ctime кон­тро­ли­ру­ет­ся систе­мой. Он пред­став­ля­ет собой, когда в послед­ний раз были изме­не­ны бло­ки дан­ных или мета­дан­ные фай­ла. Если вы изме­ня­е­те файл, бло­ки дан­ных изме­ня­ют­ся и, сле­до­ва­тель­но, ctime изменяется.

Вы може­те изме­нить ctime толь­ко путем изме­не­ния прав досту­па к фай­лам, исполь­зуя CHMOD или же коман­дой chgrp, но вы не може­те моди­фи­ци­ро­вать mtime без изме­не­ния ctime.

Вы так­же не може­те изме­нять ctime в про­шлом обыч­ны­ми спо­со­ба­ми. Это сво­е­го рода функ­ция без­опас­но­сти, пото­му что она сооб­ща­ет вам в послед­ний раз, когда файл был изме­нен. Даже если кто-то изме­ня­ет mtime и уста­нав­ли­ва­ет его в про­шлом для зло­на­ме­рен­ных целей, ctime ука­жет фак­ти­че­ское вре­мя, когда mtime было изменено.

Помни­те: ctime все­гда будет изме­нен путем изме­не­ния mtime.

Каково использование временных меток файлов?

Это помо­га­ет при ана­ли­зе. Там может быть несколь­ко ситу­а­ций, когда вам нуж­но ссы­лать­ся на отмет­ки вре­ме­ни фай­ла. Напри­мер, вы може­те уви­деть, был ли файл изме­нен в послед­нее вре­мя или нет, когда он дол­жен был быть изменен.

Одним из наших люби­мых спо­со­бов было най­ти фай­лы жур­на­лов при­ло­же­ния с помо­щью mtime. Запу­сти­те при­ло­же­ние и про­сто зай­ди­те в роди­тель­ский ката­лог при­ло­же­ния и выпол­ни­те поиск фай­лов, кото­рые были изме­не­ны за послед­ние несколь­ко минут.

Мы уже пока­за­ли вам выше, что он так­же может помочь в ана­ли­зе того, кто обра­тил­ся к фай­лам или моди­фи­ци­ро­вал их зло­на­ме­рен­но. Вре­мен­ные мет­ки игра­ют важ­ную роль в таких ситуациях.

Как узнать, когда был изначально создан файл?

Вы заме­ти­ли послед­нюю стро­ку выво­да коман­ды stat? В нем ука­зы­ва­ет­ся «Birth». Вы може­те дога­дать­ся, что это пред­став­ля­ет собой timestmap, когда файл был «рож­ден» (или был создан, что­бы быть более точным).

Соб­ствен­но, там явля­ет­ся еще одна вре­мен­ная мет­ка назы­ва­ет­ся вре­ме­нем созда­ния (cr). Не все фай­ло­вые систе­мы под­дер­жи­ва­ют эту мет­ку вре­ме­ни. Ext4 – одна из попу­ляр­ных фай­ло­вых систем Linux, и хотя она под­дер­жи­ва­ет вре­мен­ную мет­ку созда­ния, коман­да stat в насто­я­щее вре­мя не может ее пока­зать. Воз­мож­но, буду­щие вер­сии коман­ды stat пока­жут вре­мен­ную мет­ку созда­ния в раз­де­ле «Birth».