Under a Linux shell, how can I change the creation time of all a folder’s files to the current time?
Gaff
18.3k15 gold badges56 silver badges68 bronze badges
asked Jun 19, 2011 at 0:40
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.
answered Aug 26, 2013 at 16:12
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
18.3k15 gold badges56 silver badges68 bronze badges
answered Jun 19, 2011 at 0:52
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
1
Under a Linux shell, how can I change the creation time of all a folder’s files to the current time?
Gaff
18.3k15 gold badges56 silver badges68 bronze badges
asked Jun 19, 2011 at 0:40
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.
answered Aug 26, 2013 at 16:12
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
18.3k15 gold badges56 silver badges68 bronze badges
answered Jun 19, 2011 at 0:52
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
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
предназначена для изменения метки времени. Утилита используется также для создания пустых файлов, хотя это не основная её функция.
Команда 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