Linux как изменить время создания файла

Under a Linux shell, how can I change the creation time of all a folder's files to the current time?

Under a Linux shell, how can I change the creation time of all a folder’s files to the current time?

Gaff's user avatar

Gaff

18.3k15 gold badges56 silver badges68 bronze badges

asked Jun 19, 2011 at 0:40

tomy's user avatar

3

The OP asked for the creation time, but Ian Yang and boehj answers are based on command touch setting the modification, access and change times to current time.

As boehj said (in his comment) there is no creation time of a file… This is true for most of the filesystems, but on some modern filesystems (as ext4) the creation (or birth) time of a file is stored within the inode.

Therefore we can give a more correct answer scrupulously respecting the question title:

cp -a  your-folder tmp-folder
rm -rf your-folder
mv tmp-folder your-folder

This will change the creation time (birth time) to the current time. This also updates the change time but keep unchanged the modification and access times.

For information, the change time is sometimes abbreviated as ctime and can be confused with the creation time (crtime or btime). In fact, the change time of a file is the modification time of its corresponding inode. Therefore commands modifying inode content as chmod or chattr also set the change time to current time.

Community's user avatar

answered Aug 26, 2013 at 16:12

oHo's user avatar

oHooHo

2,8332 gold badges17 silver badges13 bronze badges

2

Navigate to the folder in question, let’s say, ~/Documents/myfiles.

$ cd ~/Documents/myfiles

Then do:

$ touch *

This will change the modification time to whenever you executed that command.

Obviously you can make this more specific depending on your use case, e.g.

$ touch *.doc

will only alter the modification time for files with the string ‘.doc’ in their name.

Gaff's user avatar

Gaff

18.3k15 gold badges56 silver badges68 bronze badges

answered Jun 19, 2011 at 0:52

boehj's user avatar

boehjboehj

1,0902 gold badges10 silver badges20 bronze badges

In Linux, if you want to do some thing recursively in directory, or you want to apply some actions on files meeting some criterions,you should try find and xargs

Touch all files in ~/Documents/myfiles (including files in sub directory)

find ~/Documents/myfiles -type f -print0 | xargs -0 touch

answered Jun 19, 2011 at 3:39

Ian Yang's user avatar

1

Under a Linux shell, how can I change the creation time of all a folder’s files to the current time?

Gaff's user avatar

Gaff

18.3k15 gold badges56 silver badges68 bronze badges

asked Jun 19, 2011 at 0:40

tomy's user avatar

3

The OP asked for the creation time, but Ian Yang and boehj answers are based on command touch setting the modification, access and change times to current time.

As boehj said (in his comment) there is no creation time of a file… This is true for most of the filesystems, but on some modern filesystems (as ext4) the creation (or birth) time of a file is stored within the inode.

Therefore we can give a more correct answer scrupulously respecting the question title:

cp -a  your-folder tmp-folder
rm -rf your-folder
mv tmp-folder your-folder

This will change the creation time (birth time) to the current time. This also updates the change time but keep unchanged the modification and access times.

For information, the change time is sometimes abbreviated as ctime and can be confused with the creation time (crtime or btime). In fact, the change time of a file is the modification time of its corresponding inode. Therefore commands modifying inode content as chmod or chattr also set the change time to current time.

Community's user avatar

answered Aug 26, 2013 at 16:12

oHo's user avatar

oHooHo

2,8332 gold badges17 silver badges13 bronze badges

2

Navigate to the folder in question, let’s say, ~/Documents/myfiles.

$ cd ~/Documents/myfiles

Then do:

$ touch *

This will change the modification time to whenever you executed that command.

Obviously you can make this more specific depending on your use case, e.g.

$ touch *.doc

will only alter the modification time for files with the string ‘.doc’ in their name.

Gaff's user avatar

Gaff

18.3k15 gold badges56 silver badges68 bronze badges

answered Jun 19, 2011 at 0:52

boehj's user avatar

boehjboehj

1,0902 gold badges10 silver badges20 bronze badges

In Linux, if you want to do some thing recursively in directory, or you want to apply some actions on files meeting some criterions,you should try find and xargs

Touch all files in ~/Documents/myfiles (including files in sub directory)

find ~/Documents/myfiles -type f -print0 | xargs -0 touch

answered Jun 19, 2011 at 3:39

Ian Yang's user avatar

1

Каждый файл в Linux ассоциирован с временной меткой, которая показывает время последнего доступа, последней модификации и последнего изменения.

Когда мы создаем новый файл или изменяем существующий или его атрибуты, эта временная метка автоматичекси изменяется

Touch — это команда которая используется для изменения временных меток (время доступа, время модификации и время изменения файла)

Данную команду Вы вряд ли будете использовать часто, но в некоторых случаях она может оказаться очень полезной

1. Создание нового файла используя touch

Вы можете создать пустой файл используя команду touch. Представленный ниже пример создаст файл нулевой длины с именем grnd.txt

$ touch grnd.txt

Вы также можете использовать опцию -с, чтобы избежать создания новых файлов. То бишь если мы используем ключ -c и файл с таким именем не существует, то команда touch не создаст этот файл.  

$ touch -c abcd.txt

Такие команды как ls и find используют информацию о временных метках для вывода и поиска файлов.

Вы также можете создать более одного файла используя только одну команду touch. Пример показывает создание 4 файлов с именами ab de fj kl

2. Изменение метки времени доступа к файлу  (Access)

Мы можем изменить метку о времени доступа к файлу используя ключ -a. По умолчанию установиться текущее системное время.

Сначала запустим команду команду stat, чтобы проследить дальнейшее изменение времени.

$ stat grnd.txt
  File: `grnd.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d      Inode: 3408768     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/  alexey)   Gid: (    4/     adm)
Access: 2012-11-20 14:07:44.948481916 +0400
Modify: 2012-11-20 14:07:44.948481916 +0400
Change: 2012-11-20 14:07:44.948481916 +0400
 Birth: - 

Далее touch с ключом -a

$ touch -a grnd.txt

После выполнения команды опять проверим состояние файла:

$ stat grnd.txt
  File: `grnd.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d      Inode: 3408768     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/  alexey)   Gid: (    4/     adm)
Access: 2012-11-20 14:27:29.264508552 +0400
Modify: 2012-11-20 14:07:44.948481916 +0400
Change: 2012-11-20 14:27:29.264508552 +0400
 Birth: -

3. Изменить метку временя модификации (Modify)

Вы можете изменить время модификации используя ключ -m

Пример:

$ touch -m *.o

Данную команду можно использовать для изменения времени модификации всех объектных файлов, например для использования утилиты make.

То бишь при использование данной команды возможно применение стандартных масок.

Примечание: Невозможно изменить метку времени изменения файла (Change) командой touch.

4. Явно задать время доступа и модификации 

Помимо того, что Вы можете изменить метки на текущее время, Вы также можете задать явные значение этих времен, то бишь то время, которое Вам необходимо. Для этого используются ключи -t и -d

Формат при использовании ключа -t будет — [[CC]YY]MMDDhhmm[.SS] —

$ touch -t [[CC]YY]MMDDhhmm[.SS]

Обозначения данного формата:

CC – Показывает первые две цифры года.

YY – Показывает последние две цифры года. Если значение YY находится между 70 и 99, то значение СС принимается как 19. А если значение YY jn 00 до 37, то СС будет установлено как 20. Невозможно задать дату более 18 Января 2038 года.

MM – Показывает месяц

DD – Указывает дату

hh – час

mm – минуты

SS – секунды

Пример:

$ touch -a -m -t 203710141103.24 grnd.txt

Проверим результат выполнения:

:~$ stat grnd.txt
  File: `grnd.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d      Inode: 3408768     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/  alexey)   Gid: (    4/     adm)
Access: 2037-10-14 11:03:24.000000000 +0400
Modify: 2037-10-14 11:03:24.000000000 +0400
Change: 2012-11-20 15:08:04.992597671 +0400
 Birth: -

Рассмотрим другой пример с более удобочитаемой записью даты:

$ touch -d "2012-10-20 13:13:13.000000000 +0400" grnd.txt

Команда touch будет очень полезна для разработчиков, особенно если работать с Makefiles

5. Копировать метку времени с другого файла.

Вы также можете взять один файл как эталон и обновить метки времени другим файлам, то бишь другие файлы будут иметь метки времени такие же как и у эталонного.  Для этого используется ключ -r

Приведем пример, обновим метки времени файлу ab.txt взяв за эталон метки файла grnd.txt

$ touch ab.txt -r grnd.txt

Надеюсь данный материал будет Вам полезен, удачи!

Команда touch — это простой, но полезный инструмент в Unix-подобных системах, который позволяет пользователям создавать файлы и изменять временные метки непосредственно из терминала. Это одна из самых фундаментальных терминальных команд в Linux, и сисадмины часто используют ее для различных целей. Перед вами краткое руководство, содержащее 15 практических примеров ее использования.

Приведенные ниже примеры помогут вам получить полное представление о команде. Однако, вы должны попробовать использовать эти команды сами, если хотите освоить этот инструмент в целом. Итак, запустите ваш терминал Linux и начните выполнять команды, приведенные ниже, по мере того, как вы о них будете читать.

1. Создание пустого файла

При самом простом использовании touch создает простой файл, который ничего не содержит. Он очень полезен в ряде ситуаций, например, когда вы экспериментируете с файловыми операциями или какими-либо другими командами терминала. Для этого просто передайте имя файла после команды touch.

$ touch test

Так в текущей рабочей директории создается простой пустой файл, который называется test. Вы можете проверить это с помощью команды ls. Вы также можете использовать команду touch для создания пустого файла в любой другой директории, просто передав правильный путь перед именем файла.

$ touch /путь/к/файлу

2. Создание нескольких пустых файлов

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

$ rm test
$ touch test1 test2 test3 test4 test5

Вышеуказанная команда создаст все пять файлов одновременно. Проверить это можно с помощью команды ls -l в терминале. Вы также можете использовать фигурные скобки для создания нескольких файлов одновременно с помощью touch, как показано в примере, приведенном ниже.

$ rm test1 test2 test3 test4 test5         # сначала удалите файлы
$ touch test{1,2,3,4,5}

Вышеуказанная команда сделает ту же работу, но гораздо более аккуратным способом.

3. Создание и заполнение файла

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

$ rm test1 test2 test3 test4 test5         # сначала удалите файлы
$ seq 100 > test

Теперь тестовый файл не пустой, а содержит числа от 1 до 10. Вы можете проверить это с помощью команды Linux cat.

4. Повторение метки времени последнего доступа к файлу

Команда touch позволяет пользователям повторять метки времени времени последнего доступа разных файлов. Для этого необходимо использовать ключ -r. Мы создадим новый файл под названием new, и вместо использования текущего времени мы возьмем значения времени из тестового файла, созданного ранее.

$ touch -r test new
$ ls -l

Вы можете проверить это с помощью команды ls. Вы должны увидеть, что файл new имеет временную метку, более раннюю, чем текущее время, и такую же, как и файл test. Для этого ключа также существует длинная форма, называемая -reference.

5. Изменение метки времени последнего доступа к файлу

Администраторы Linux часто используют команду для изменения метки времени последнего доступа к файлам, созданным ранее. Следующая команда показывает нам, как это сделать. Для этого нам нужно использовать ключ -a. Сначала проверьте метку времени файла test, используя нижеприведенную команду.

$ ls -l test --time=atime

Теперь воспользуйтесь ключом -a, чтобы изменить эту метку времени с помощью команды touch. Обратите внимание, что ключ -time=atime из ls показывает нам время доступа к файлу.

$ touch -a test

Теперь, если вы еще раз проверите временную метку файла test, вы заметите, как она изменилась после выполнения вышеуказанной команды. Это один из наиболее распространенных видов использования в Linux.

6. Изменение метки времени последнего изменения файла

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

$ ls -l test
$ touch -m test

Во-первых, мы просмотрели последнее время последнего изменения файла test с использованием команды ls. Затем мы использовали ключ -m вместе с командой touch, чтобы изменить это значение на текущее время. Проверить это можно, выполнив еще раз команду ls.

7. Изменение даты и времени на текущее время

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

$ stat /путь/к/старому/файлу

Вы можете просмотреть всю информацию о времени, относящуюся к старому файлу, с помощью команды stat. Она покажет время последнего доступа, время последнего изменения и время последнего изменения атрибутов вашего файла. Теперь используйте следующую команду для изменения даты и времени на текущие.

$ touch -am /путь/к/старому/файлу

Проверьте изменение даты и времени еще раз с помощью команды stat.

$ stat /путь/к/старому/файлу

8. Пропустить создание файла

Ключ -c или -no-create позволяет пропустить создание файла. Хотя вы можете считать это непродуктивным, но многие пользователи используют этот ключ для проверки существования файла.

$ touch -c new-file
$ touch --no-create new-file

При выполнении вышеописанных команд в Вашей рабочей директории не произойдет никаких изменений. Вы можете запустить команду ls еще раз, чтобы проверить это.

9. Изменение даты файла

Мы также можем использовать команду touch, чтобы указать дату файла вручную. Для этого необходимо использовать ключ -d или -date. Приведенная ниже команда показывает, как изменить дату файла на более раннюю с помощью touch.

$ ls -l test
$ touch -d '15 Mar' test

Теперь, если вы снова запустите команду ls, вы увидите, что она показывает дату файла — 15 Марта. Но вы же создали этот файл сегодня, верно? Если Вы посмотрите внимательно, то увидите, что теперь ls показывает только дату, а не время. Вы даже можете использовать эту команду, чтобы установить дату в будущем.

10. Измение даты и времени на пользовательские значения

Ключ -t позволяет нам изменять как дату, так и время файла на персонализированные значения. Таким образом, мы можем изменить несколько параметров, включая год, месяц, дату, час, минуты и секунды. Внимательно посмотрите на следующий пример, чтобы понять, как это работает.

$ ls -l test                        # покажет время и дату файла
$ touch -t 2025 02 01 04 22 test

Теперь снова запустите команду ls, чтобы проверить параметры даты и времени. Аргумент к ключу -t должен быть в формате YYMMDDhhmm. Так как мы установили значения, которые будут в будущем, команда ls не сможет показать параметр времени.

11. Изменение даты с помощью слова

Также можно изменять дату файла в формате слов, например, «yesterday» с помощью команды touch. Для этого просто передайте аргумент ввиде строки к ключу -date. Команда ниже показывает, как изменить дату файла на предыдущий день.

$ touch --date="yesterday" test

Используйте следующую команду для изменения даты на следующий день.

$ touch --date="tomorrow" test

Проверьте даты с помощью команды ls и убедитесь, что они работают, как ожидалось.

12. Копирование метки времени последнего доступа к файлу для символьных ссылок

Ключ -h или -no-dereference позволяет пользователям копировать время последнего доступа к файлу по символическим ссылкам. Однако, этот ключ будет работать только на системах, которые позволяют изменять время символических ссылок.

$ touch -h link

Эта команда не работает во многих дистрибутивах Linux из-за различных проблем с безопасностью.

13. Просмотр справочной информации

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

$ touch --help

Данная команда покажет страницу справки для linux-команды touch в вашем терминале. Это избавит Вас от необходимости запоминать использование каждого ключа.

14. Просмотр мануала по команде touch

Страница man или руководство содержит подробную информацию обо всех доступных вариантах команд терминала Linux. Вы можете просмотреть эту страницу в любое время, выполнив следующую простую команду.

$ man touch

Она покажет вам подробную документацию о том, как работать с командой touch в Linux системах. Обращайтесь к этой документации всякий раз, когда у вас возникнет путаница в отношении использования ключей.

15. Просмотр информации о версии

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

$ touch --version

Заключительные слова

Команда touch — одна из самых простых команд терминала Linux. Она очень проста в изучении благодаря ограниченному количеству ключей. Однако, она может быть действительно полезна в ряде ситуаций, когда системные администраторы используют эту команду для управления временными метками файлов. Наши редакторы подробно проанализировали различные подобные примеры. Надеюсь, мы смогли предоставить вам необходимую информацию, которую вы искали в этом руководстве. Сообщите нам, если у вас возникнут вопросы по этой команде, в разделе комментариев ниже.

В Linux команда touch предназначена для изменения метки времени. Утилита используется также для создания пустых файлов, хотя это не основная её функция.

Использование команды Linux touch с примерами

Команда touch может изменить модификацию и время доступа для любого заданного файла. Утилита создает файл только в том случае, если он ещё не существует.

Содержание

  • Синтаксис
  • Опции
  • Примеры использования команды touch в Linux
    • Создание файла
    • Создание нескольких файлов
    • Создание большого пакета файлов
    • Установка конкретной временной мерки
    • Установка временной метки с использованием строки даты
    • Изменение времени доступа на текущее
    • Явное изменение времени доступа
    • Изменение времени модификации на текущее
    • Явное изменение времени модификации
    • Одновременное изменение времени модификации и доступа
  • Заключение

Синтаксис

touch [ПАРАМЕТР]… ФАЙЛ…

Опции

-a
Изменять только время доступа
-c, —no-create
Не создавать новые файлы
-d, —date=СТРОКА
Проанализировать СТРОКУ и использовать её вместо текущего времени
-f
 (Игнорируется)
-h, —no-dereference
 Изменять символические ссылки, а не файлы, на которые они ссылаются (имеет смысл только на системах, где можно изменять владельца символической ссылки)
-m
Изменять только время изменения
-r, —reference=ФАЙЛ
Использовать время ФАЙЛА вместо текущего времени
-t ВРЕМЯ
Использовать [[ВВ]ГГ]ММДДччмм[.сс] вместо текущего времени
—time=СЛОВО
Изменять время, указанное СЛОВОм: значения access, atime, use эквивалентны -a значения modify, mtime эквивалентны -m

Примеры использования команды touch в Linux

При работе с файлами в Linux необходимо помнить о трёх временных метках:

Время доступа или atime
Изменяются, когда команда считывает содержимое файла, например grep или cat. Команда ls -lu отображает время для файлов.
Изменение времени или ctime
При изменении свойств файла, например при переименовании файлов, изменении прав доступа к файлам или перемещении файла. Команда ls -lc показывает ctime для файлов.
Время модификации или mtime
Изменяется при изменении содержимого файла. Команда ls -l показывает mtime для файлов.

Приведенные ниже примеры запускаются из терминала и демонстрируют, как использовать команду Linux touch с различными параметрами и какой результат следует ожидать.

Создание файла

Создание пустого файла — самый простой способ использования команды touch без параметров:

oleg@mobile:~/Directory:$ touch example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 11:40 example
oleg@mobile:~/Directory:$ 

Создание нескольких файлов

Для создания нескольких файлов командой touch нужно лишь перечислить их имена, разделив их пробелами:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 11:42 example_1
-rw-r--r-- 1 oleg users 0 июл 26 11:42 example_2
-rw-r--r-- 1 oleg users 0 июл 26 11:42 example_3
oleg@mobile:~/Directory:$ 

Создание большого пакета файлов

Для создания большого количества файлов командой touch необходимо к имени файла добавить первый и последний элемент, заключив их в фигурные скобки и отделив друг от друга двумя точками (..):

oleg@mobile:~/Directory:$ touch example_{1..15}
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_1
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_10
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_11
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_12
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_13
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_14
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_15
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_2
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_3
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_4
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_5
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_6
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_7
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_8
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_9
oleg@mobile:~/Directory:$ 

Команда не позволяет сочетать цифры и буквы.

Установка конкретной временной мерки

При установке конкретной метки времени для существующего файла команда touch используется так:

$ touch -t <timestamp> <filename>

Формат метки времени следует шаблону:

[[CC]YY]MMDDhhmm[.ss]

Здесь:

CC
Первые две цифры года
YY
Две последние цифры года
MM
Месяц
DD
День
hh
Час
mm
Минуты
ss
Секунды

Цифры в квадратных скобках необязательны. При использовании двузначного формата года установка YY любого числа от 0 до 68 автоматически предполагает, что CC — это 20, тогда как 69–99 предполагает, что CC — это 19.

Например, чтобы изменить отметку времени для файла с именем example на полночь 1 января 2022 года, запустите:

$ touch -t 202201010000 example

Создаём файл example и меняем временную метку:

oleg@mobile:~/Directory:$ touch example
oleg@mobile:~/Directory:$ ls -l --full-time
итого 0
-rw-r--r-- 1 oleg users 0 2022-07-26 12:05:41.019328038 +0300 example
oleg@mobil202201010000 exampleh -t 202201010000 example
oleg@mobile:~/Directory:$ ls -l --full-time
итого 0
-rw-r--r-- 1 oleg users 0 2022-01-01 00:00:00.000000000 +0200 example
oleg@mobile:~/Directory:$ 

Для того чтобы видеть детали временной метки, команда ls использовалась с опцией --full-time.

Установка временной метки с использованием строчной даты

В данном случае используется опция -d:

$ touch -d <string> <filename>

Строчная дата является гибким форматом времени и принимает множество различных удобочитаемых текстовых форм.

Вот некоторые примеры:

Даты календаря
Такие как 19 August 2020.
Время суток
Например 9:27pm или 8:02am.
Дни недели
Такие как Sunday, Monday, и т.д.
Относительное время
Такое как 5 years ago, yesterday, next tuesday, и т.д.

Как например можно изменить временную метку с помощью -d tomorrow:

oleg@mobile:~/Directory:$ touch -d tomorrow example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 27  2022 example
oleg@mobile:~/Directory:$ 

Изменение времени доступа на текущее

В данном случае используется лишь опция -a.

Проверяем время доступа к файлу:

oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 27  2022 example
oleg@mobile:~/Directory:$

Изменяем время доступа и проверяем изменённое время:

oleg@mobile:~/Directory:$ touch -a example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:19 example
oleg@mobile:~/Directory:$ 

Время доступа изменилось на текущую отметку времени.

Явное изменение времени доступа

В данном случае используются опции -a и -t.

Проверяем время доступа к файлу перед его изменением:

oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:19 example
oleg@mobile:~/Directory:$ 

Изменяем время доступа к файлу example на полночь 01 января 2019 года, добавив отметку времени, и проверяем время доступа после внесения изменений:

oleg@mobile:~/Directory:$ touch -at 1901010000 example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2019 example
oleg@mobile:~/Directory:$ 

После выполнения команды время доступа изменилось на время, заданное опцией -t.

Изменение времени модификации на текущее

В этом случае используется опция -m.

Проверяем mtime файла перед изменением метки времени:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 27  2022 example
oleg@mobile:~/Directory:$ 

Изменяем время модификации файла и снова проверяем mtime после изменения:

oleg@mobile:~/Directory:$ touch -m example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:34 example
oleg@mobile:~/Directory:$ 

Опция -m изменила время модификации на текущую метку времени.

Явное изменение времени модификации

В этом случае используются опции -m и -t.

Проверяем mtime файла перед изменением:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:34 example
oleg@mobile:~/Directory:$ 

Изменяем время модификации на полночь 1 января 2001 года и перепроверяем время модификации:

oleg@mobile:~/Directory:$ touch -mt 0101010000 example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2001 example
oleg@mobile:~/Directory:$ 

Одновременное изменение времени модификации и доступа

Используются опции -a и -m:

Проверяем atime и mtime перед их изменением:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2001 example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2019 example
oleg@mobile:~/Directory:$ 

Изменяем atime и mtime тестового файла example на текущую отметку времени и снова проверяем оба времени после изменения:

oleg@mobile:~/Directory:$ touch -am example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:57 example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:57 example
oleg@mobile:~/Directory:$ 

Заключение

В Linux команда touch является одной из основных утилит при работе с файлами. В этой статье вы ознакомились с некоторыми типичными вариантами её использования.

Files in Linux have 3 types of timestamps: atime (access), mtime (modify) and ctime (change).

Someday you may have a situation when you would like to fake a timestamps of some file.

atime and mtime timestamps can be easily changed using touch command, but there is no a standard way to set a different ctime timestamp.

As a possible workaround you can set the system time to the ctime you want to impose, then touch the file and then restore the system time.

Read the below article to learn how to change a file’s timestamps and keep anonymity.

Cool Tip: To cover up the traces – clear the last login history. Read more →

Get a File’s TimeStamps

Use the stat command to see the current file’s timestamps:

$ stat file.txt
  File: ‘file.txt’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d	Inode: 2501536     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     admin)   Gid: ( 1000/     admin)

Access: 2015-02-19 11:43:08.503408793 +0200
Modify: 2015-02-19 11:43:08.503408793 +0200
Change: 2015-02-19 11:43:08.503408793 +0200

Difference Between “atime”, “mtime” and “ctime”

Timestamp When it gets updated?
atime Access time gets updated when you open a file or when a file is used for other operations like grep, cat, head and so on.
mtime Modify time gets updated when you whenever update content of a file or save a file.
ctime Change time gets updated when the file attributes are changed, like changing the owner, changing the permission or moving it to another filesystem, but will also be updated when you modify a file.

Change File “Access” & “Modification” Time

Change a file’s atime (access time):

$ touch -a --date="1988-02-15" file.txt
$ touch -a --date="1988-02-15 01:00" file.txt
$ touch -a --date="1988-02-15 01:00:17.547775198 +0300" file.txt

Change a file’s mtime (modification time):

$ touch -m --date="2020-01-20" file.txt
$ touch -m --date="2020-01-20 23:05" file.txt
$ touch -m --date="2020-01-20 23:05:43.443117094 +0400" file.txt

As i have already said there is no a standard solution to fake a ctime (change time) timestamp.

Nevertheless, if you are ready to risk, it is possible;)

Firstly you can set the system time to the ctime you want to impose.

Then touch the file and immediately rollback the system time.

Unexpected impact: Modification of a system time may cause an unexpected impact! Use the below commands on your own risk!

Save the current system’s date and time in the variable NOW:

$ NOW=$(date)

Set the fake date and time (requires root):

$ date --set "2030-08-15 21:30:11"

Touch the file to fake the all timestamps:

$ touch file.txt

Rollback the date and time (requires root):

$ date --set "$NOW"

Cool Tip: Clear the BASH history effectively! Read more →

To speedup modification and reduce the possible impact, execute the above commands as follows:

$ NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"

Stay Stealthy

To stay stealthy – unset the variable, clear logs and history.

Unset the variable NOW:

$ unset NOW

Remove the information about changed time from /var/log/messages (requires root):

Feb 24 06:32:46 centos7 systemd: Time has been changed
Aug 15 14:30:11 centos7 systemd: Time has been changed

atime and mtime timestamps can be easily changed using touch command, but there is no a standard way to set a different ctime timestamp.

Cool Tip: Want to stay anonymous? Learn how to use PROXY on the Linux command line. Read more →

Clear the last login history (requires root):

$ echo > /var/log/wtmp
$ echo > /var/log/btmp
$ echo > /var/log/lastlog

Clear the history of the current session:

$ history -r

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Linter csslint error while running csslint
  • Morrowind как изменить разрешение экрана windows 10
  • Morrowind music error cannot play file data files music special morrowind title
  • Lint infrastructure error
  • Mordhau the pack file ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии