Linux基本指令篇 —— touch指令

    touchLinux和Unix系统中一个非常基础但实用的命令,主要用于操作文件的时间戳和创建空文件。下面我将详细介绍这个命令的用法和功能。

目录

一、基本功能

1. 创建空文件

2. 同时创建多个文件

3. 创建带有空格的文件名(需要使用引号)

二、时间戳操作

1. 修改文件的时间戳

2. 只更新访问时间(-a选项)

关键结论

3. 只更新修改时间(-m选项)

4. 指定特定的时间戳

-t 选项的作用

手动设置时间戳

示例:

影响的时间戳

与 -a 或 -m 结合使用

常见用途

5. 使用参考文件的时间戳(-r选项)

三、高级用法

1. 创建大量文件

2. 防止文件被创建(-c选项)

3. 设置精确的时间(包括纳秒)

4. 处理符号链接

场景说明

操作步骤

关键点

典型用途

总结

四、实际应用示例

快速创建测试文件:

批量更新项目文件时间戳:

同步两个文件的时间戳:

创建带有特定时间戳的日志文件:

注意事项


一、基本功能

语法:touch [选项] 文件

功能:touch命令用于修改文件或目录的时间戳(包括访问时间和修改时间),也可用于创建新文件(当指定文件不存在时)。

1. 创建空文件

touch命令最常见的用途是创建一个新的空文件:

touch filename.txt
  • 如果filename.txt不存在,上述命令会创建一个名为filename.txt的空文件;

  • 如果文件已存在,则会更新该文件的时间戳(使用stat指令查看文件时间)

2. 同时创建多个文件

touch file1.txt file2.txt file3.txt

3. 创建带有空格的文件名(需要使用引号)

touch "new file.txt"


二、时间戳操作

touch命令可以修改文件的三种时间戳(分别对应下图):

  • 访问时间(atime):文件最后被读取的时间

  • 修改时间(mtime):文件内容最后被修改的时间

  • 更改时间(ctime):文件属性或内容最后被更改的时间

1. 修改文件的时间戳

touch filename.txt
  • 如果文件已存在touch 会将上述三个时间戳更新为当前系统时间。

  • 如果文件不存在touch 会创建一个空文件,并设置所有时间戳为当前时间。

2. 只更新访问时间(-a选项)

touch -a filename.txt

但事实真的只更改访问时间吗?请看验证后的效果,如下:

        我们发现,我们原本只想改变访问时间atime,但是更改时间ctime也被改变了?为什么会出现这样的情况呢?思考一下:

        ctime(Change Time) 并非指文件内容的修改时间,而是指文件元数据(metadata)的变更时间。以下操作会更新 ctime:

  1. 修改文件内容(影响 mtime,同时触发 ctime 更新)。

  2. 修改文件元数据(如权限、所有者、硬链接数等)。

  3. 更新访问时间 atime(因为 atime 本身是元数据的一部分)。

当你运行 touch -a 时:

  • 系统需要更新文件的 atime,而 atime 是存储在文件元数据中的。

  • 修改元数据会导致 ctime 被内核自动更新(这是不可阻止的行为)。

关键结论

  • ctime 不受 touch 命令的直接控制它由内核维护,任何对文件内容或元数据的修改都会更新它。

  • 即使你只更新 atime(元数据的一部分),也会触发 ctime 的更新。

  • 所以我们同理可得,下面的只更新修改时间也是会更改ctime的,理解了上面的原理之后,我们就理解了为什么ctime会跟着修改了。

3. 只更新修改时间(-m选项)

touch -m filename.txt

果然不出所料,ctime也跟着修改了,验证了上面所说的结论: 

4. 指定特定的时间戳

    -t 是 touch 命令的一个选项,用于 手动指定文件的时间戳(而非使用当前系统时间)。它的作用是精确控制文件的 访问时间(atime) 和 修改时间(mtime)通常用于测试、归档或修复文件时间。

-t 选项的作用

  1. 手动设置时间戳

    • 默认情况下,touch 使用当前时间,但 -t 允许自定义时间。

    • 格式:[[CC]YY]MMDDhhmm[.ss]

      • CC:世纪(可选,如 20 表示 2000 年)

      • YY:年份后两位(如 23 表示 2023)

      • MM:月份(01-12)

      • DD:日期(01-31)

      • hh:小时(00-23)

      • mm:分钟(00-59)

      • .ss:秒(可选,00-59)

    示例
    touch -t 202301011200.30 filename.txt  # 2023-01-01 12:00:30

    touch -t 01231234 filename.txt        # 当前年份的1月23日 12:34:00

  2. 影响的时间戳

    • 默认情况下,-t 同时修改 atime(访问时间)和 mtime(修改时间)

    • ctime(更改时间)不受 -t 控制,它会自动更新为命令执行时间(因为时间戳属于元数据)。

  3. 与 -a 或 -m 结合使用

    • 如果只想修改 atime 或 mtime,可以组合使用:

      touch -a -t 202301011200.00 filename.txt  # 仅修改 atime

      touch -m -t 202301011200.00 filename.txt  # 仅修改 mtime

常见用途

  1. 伪造文件时间(测试脚本或程序的时间敏感性)。

  2. 修复备份文件的时间戳(使其符合原始时间)。

  3. 强制触发构建工具(如 make 依赖 mtime 判断文件是否过期)。

  4. 批量调整文件时间(结合 find 使用)。

5. 使用参考文件的时间戳(-r选项)

touch -r mydir filename.txt

作用:这将使filename.txt的时间戳与mydir的时间戳相同。(使后者时间戳等于前者时间戳)

如下验证,ctime就不讨论了,它只能跟着系统走,不受影响:


三、高级用法

1. 创建大量文件

touch file{1..100}.txt

这将创建file1.txt到file100.txt共100个文件。(若之前存在同名文件,则不会创建该文件,只会创建新命名的文件,下面图片前后的文件1到3号就可以很好的说明这一点)

若想删除上面的大量文件,我们可以直接使用rm:

rm file{1..100}.txt

2. 防止文件被创建(-c选项)

如果只想更新时间戳而不想创建新文件:

touch -c filename.txt

 如果文件不存在,不会创建新文件:

3. 设置精确的时间(包括纳秒)

touch -d "2023-01-01 12:00:00.123456789" file.txt

4. 处理符号链接

touch -h symlink

场景说明

        默认情况下,touch 会跟随符号链接(symlink)并修改其目标文件的时间戳。如果想直接修改符号链接本身的时间戳(而非目标文件),需要使用 -h 选项。


操作步骤

  1. 创建一个符号链接
    假设有一个文件 original.txt,并为其创建符号链接 symlink_to_original

    echo "This is the original file" > original.txt
    ln -s original.txt symlink_to_original
  2. 查看原始时间戳
    分别检查目标和符号链接的时间:

    stat original.txt
    stat symlink_to_original

    输出示例(注意符号链接的 Access/Modify/Change 时间):

  3. 修改符号链接本身的时间戳(不跟随目标)
    使用 -h 选项:

    touch -h -t 202301011200.00 symlink_to_original
  4. 验证结果
    再次运行 stat

    stat original.txt
    stat symlink_to_original

    输出示例:

关键点

  • -h 的作用
    强制 touch 操作作用于符号链接本身,而非其指向的目标文件。

  • 时间戳类型
    符号链接的 atime/mtime 可被修改,但 ctime 仍会因元数据变更而自动更新。

  • 默认行为对比
    不加 -h 时,touch 会修改目标文件的时间戳(可能导致意外影响)。

典型用途

  1. 调试符号链接
    检查脚本是否正确处理符号链接的时间戳。

  2. 备份系统
    保留符号链接的原始时间信息,而非目标文件的时间。

  3. 文件同步工具
    确保工具(如 rsync)能识别符号链接本身的变更。

总结

命令行为
touch symlink修改目标文件的时间戳
touch -h symlink修改符号链接本身的时间戳
stat symlink默认显示目标文件时间,需用 stat -L 查看链接本身

通过 -h 选项,你可以精确控制符号链接的时间戳,避免影响其目标文件。


四、实际应用示例

  1. 快速创建测试文件

    touch test_{a..z}.txt
  2. 批量更新项目文件时间戳

    touch src/*.js
  3. 同步两个文件的时间戳

    touch -r source_file target_file
  4. 创建带有特定时间戳的日志文件

    touch -t 202212312359.59 year_end.log

注意事项

  1. touch命令需要你对目标目录有写权限才能创建或更新时间戳。

  2. 时间戳修改可能会影响备份系统、构建系统等依赖文件时间的工具。

  3. 在某些系统上,ctime(状态更改时间)不能被直接修改,它会在文件属性或内容更改时自动更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql explain使用

文章目录 type 访问类型性能高到低多注意type: index 出现的场景 key 实际使用的索引Extra 额外信息其他字段 通过 EXPLAIN 你可以知道:如是否使用索引、扫描多少行、是否需要排序或临时表 EXPLAIN 三板斧(type、key、Extra) 例子&#xff1…

JMeter-SSE响应数据自动化

结构图 背景: 需要写一个JMeter脚本来进行自动化测试,主要是通过接口调用一些东西,同时要对响应的数据进行处理,包括不限于错误信息的输出。 1.SSE(摘录) SSE(Server-Sent Events)是一种基于HTTP协议、允许…

<<运算符重载 和 c_str() 的区别和联系

例题 文章开始之前我们看下以下代码&#xff0c;你能精准的说出正确的输出结果并知道其原理吗&#xff1f; void test() {string s1("hello world");cout << s1 << endl;//cout << s1.c_str() << endl;//const char* p1 "xxxx"…

python web flask专题-Flask入门指南:从安装到核心功能详解

Flask入门指南&#xff1a;从安装到核心功能详解 Flask作为Python最流行的轻量级Web框架之一&#xff0c;以其简洁灵活的特性广受开发者喜爱。本文将带你从零开始学习Flask&#xff0c;涵盖安装配置、项目结构、应用实例、路由系统以及请求响应处理等核心知识点。 1. Flask安…

一种C# 的SM4 的 加解密的实现,一般用于医疗或者支付

一种C# 的SM4 的 加解密的实现 一般用于医疗或者支付 加密 string cipherText SM4Helper.Encrypt_test(data, key); public static string Encrypt_test(string plainText, string key) { byte[] keyBytes Encoding.ASCII.GetBytes(key); byte[] input…

“轩辕杯“云盾砺剑CTF挑战赛 Web wp

文章目录 ezflaskezjsezrceezssrf1.0签到ezsql1.0ez_web1非预期预期解 ezflask ssti, 过滤了一些关键词, 绕一下就行 name{{url_for["__globals__"]["__builtins__"]["eval"]("__tropmi__"[::-1])(os)["po""pen"…

Matlab快速上手五十六:详解符号运算里假设的用法,通过假设可以设置符号变量的取值范围,也可以通过假设设置变量属于集合:整数、正数和实数等

1.符号变量中假设的概念 在符号数学工具箱中&#xff0c;符号变量默认范围是全体复数&#xff0c;也就是说&#xff0c;符号运算是在全体复数域进行的&#xff0c;若需要运算中&#xff0c;不使用全体复数域&#xff0c;可以为变量设定取值范围&#xff0c;这就用到了假设&…

【python实用小脚本-79】[HR转型]Excel难民到数据工程师|用Python实现CSV秒转JSON(附HRIS系统对接方案)

场景故事&#xff1a;从手动复制粘贴到自动化数据流转 "Kelly&#xff0c;我们需要把3000名员工的考勤数据导入新HR系统&#xff0c;今天能完成吗&#xff1f;"去年这个时候&#xff0c;作为HRIS项目负责人的我&#xff0c;面对这个需求时第一反应是打开Excel开始手…

数据透视:水安 B 证如何影响水利企业的生存指数?

某大数据公司提取了 3000 家水利企业的经营数据&#xff0c;一组关联分析令人震惊&#xff1a;B 证配备率与企业利润率的相关系数达 0.67—— 这意味着持证率每提升 10%&#xff0c;企业利润率平均提高 4.2 个百分点。当我们用数据解剖这本红本本&#xff0c;会发现它像一根无形…

从零搭建上门做饭平台:高并发订单系统设计

你知道为什么聪明人都在抢着做上门做饭平台吗&#xff1f;因为这可能是餐饮行业最后一片蓝海&#xff01;传统餐饮还在为房租人工发愁时&#xff0c;上门私厨已经轻装上阵杀出重围。不需要门店租金&#xff0c;不用养服务员&#xff0c;厨师直接上门服务&#xff0c;成本直降60…

openpi π₀ 项目部署运行逻辑(四)——机器人主控程序 main.py — aloha_real

π₀ 机器人主控脚本都在 examples 中&#xff1a; 可以看到包含了多种类机器人适配 此笔记首先记录了 aloha_real 部分 aloha_real 中&#xff0c;main.py 是 openpi ALOHA 平台上“主控执行入口”&#xff0c;负责&#xff1a; 建立与推理服务器&#xff08;serve_policy.…

利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南

在当今电商竞争激烈的环境中&#xff0c;VIP 商品往往是商家的核心竞争力所在。这些商品不仅代表着品牌的高端形象&#xff0c;更是吸引高价值客户的关键。因此&#xff0c;获取 VIP 商品的详细信息对于市场分析、竞品研究以及优化自身产品策略至关重要。Python 作为一种强大的…

鸿蒙桌面快捷方式开发

桌面快捷方式开发实战 [参考文档] (https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-desktop-shortcuts) 在module.json5配置文件中的abilities标签下的metadata中设置resource属性值为$profile:shortcuts_config&#xff0c;指定应用的快捷方式配置文件&…

3分钟学会跨浏览器富文本编辑器开发:精准光标定位+内容插入(附完整代码)

一、痛点直击&#xff1a;传统编辑器的三大坑 作为前端开发&#xff0c;你是否遇到过以下灵魂拷问&#xff1f; ✅ 为什么Firefox光标能精准定位&#xff0c;IE却永远跳转到开头&#xff1f;✅ 图片上传后如何保证插入位置不偏移&#xff1f;✅ 跨浏览器兼容测试时&#xff0…

RK3562 Linux-5.10 内核HUSB311 Type-C 控制器芯片调试记录

硬件原理&#xff1a; 1. type C 接口&#xff1a; 1.1 HUSB311芯片&#xff0c; CC1和CC2 逻辑接到HUSB311 上面&#xff0c; 接I2C0组和USBCC_INT_L USBCC_INT_L 接到GPIO0_A6 做为CC的逻辑中断 1.2 TYPEC_DP/TYPEC_DM 接到ARM 端的USB3.0 OTG上面 1.2 TYPEC_RX1P/TYPEC…

深入理解Java中的BigDecimal:高精度计算的核心工具

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在Java编程中&#xff0c;处理浮点数运算时可能会遇到精度丢失的问题。例如&#xff1a; System.out.println(0.1 0.2); // 输出&#xff1a;0.30000…

大模型微调(面经总结)

持续更新中 一、LORA篇1、介绍一下Lora的原理2、LoRA 是为了解决什么问题提出的&#xff1f;哪些模型适合用 LoRA 微调&#xff1f;什么是低秩分解&#xff1f;**低秩分解&#xff1a;用小矩阵逼近大矩阵** 3、LoRA初始化4、LoRA初始化秩 r 是怎么选的&#xff1f;为什么不选其…

Camera相机人脸识别系列专题分析之一:人脸识别系列专题SOP及理论知识介绍

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a;内存泄漏和内存占用拆解系列专题 这一篇我们开始讲&#xff1a; Camera相机人脸识别系列专题分析之一&#xff1a;人脸识别系列专题SOP及理论知识…

【Elasticsearch】PUT` 请求覆盖式更新

是的&#xff0c;Elasticsearch 中的 PUT 请求是覆盖式的。当你使用 PUT 请求向索引中写入文档时&#xff0c;如果文档已经存在&#xff0c;Elasticsearch 会完全替换整个文档的内容&#xff0c;而不是进行部分更新。 覆盖式的具体行为 - 文档存在时&#xff1a;PUT 请求会用新…

计算机系统结构-第4章-数据级并行

数据集并行的概念: 并行场景1: 对不同数据执行相同的操作: 串行执行: 可以同时进行: 可以尝试一个多条指令,多核执行 引入: SISD: 单核,单线程,串行执行,这样耗时 MIMD: 多核,多线程,并行执行,一条指令多次重复,变成了MIMID 存在的问题: 在标量CPU流水线中&#xff0…