当前位置: 首页 > article >正文

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(状态更改时间)不能被直接修改,它会在文件属性或内容更改时自动更新。

相关文章:

Linux基本指令篇 —— touch指令

touch是Linux和Unix系统中一个非常基础但实用的命令,主要用于操作文件的时间戳和创建空文件。下面我将详细介绍这个命令的用法和功能。 目录 一、基本功能 1. 创建空文件 2. 同时创建多个文件 3. 创建带有空格的文件名(需要使用引号) 二、…...

【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理

一、延迟消息的核心价值与Kafka的局限性 在分布式系统中,延迟消息是实现异步延迟任务的核心能力,广泛应用于订单超时取消、库存自动释放、消息重试等场景。 然而,Apache Kafka作为高吞吐的分布式消息队列,原生并不支持延迟消息功能,需通过业务层或中间层逻辑实现。 1.1…...

Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具

目录 一、安装 MongoDB 社区版 1、下载 MongoDB 2、配置环境变量 3、配置数据和日志目录 4、启动MongoDB服务 5、使用配置文件启动 6、验证服务运行 二、MongoDB可视化工具MongoDB Compass 一、安装 MongoDB 社区版 1、下载 MongoDB 大家可以直接在官方文档下安装Mo…...

城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?

城市“生命线”面临的安全挑战 城市地下管网如同人体的“血管”和“神经”,承载着燃气、供水、电力、通信等重要功能,一旦发生泄漏或爆炸,将严重影响城市运行和居民安全。然而,由于管线老化、违规施工、监管困难等问题&#xff0…...

MySQL推出全新Hypergraph优化器,正式进军OLAP领域!

在刚刚过去的 MySQL Summit 2025 大会上,Oracle 发布了一个用于 MySQL 的全新 Hypergraph(超图)优化器,能够为复杂的多表查询生成更好的执行计划,从而优化查询性能。 这个功能目前只在 MySQL HeatWave 云数据库中提供&…...

飞牛fnNAS手机相册备份及AI搜图

目录 一、相册安装应用 二、手机开启自动备份 三、开始备份 四、照片检索 五、AI搜图设置 六、AI搜图测试 七、照片传递 现代的手机,已经成为我们最亲密的“伙伴”。自从手机拍照性能提升后,手机已经完全取代了简单的卡片相机,而且与入门级“单反”相机发起了挑战。在…...

消费类,小家电产品如何做Type-C PD快充快速充电

随着快充技术的快速发展现在市场上的产品接口都在逐渐转为Type-C接口,Type-C可以支持最大20V100W的功率。未来Type-C大概会变成最通用的接口,而你的产品却还是还在用其他的接口必然会被淘汰, 而要使小家电用到PD快充,就需要使用到Type-C快充诱…...

连接表、视图和存储过程

1. 视图 1.1. 视图的概念 视图(View):虚拟表,本身不存储数据,而是封装了一个 SQL 查询的结果集。 用途: 只显示部分数据,提高数据访问的安全性。简化复杂查询,提高复用性和可维护…...

人工智能赋能教育:重塑学习生态,开启智慧未来

在科技浪潮风起云涌的当下,人工智能(AI)如同一颗璀璨的新星,正以前所未有的速度和深度融入社会生活的各个领域。教育,作为塑造未来、传承文明的核心领域,自然也未能置身事外。人工智能与教育的结合&#xf…...

银河麒麟V10×R²AIN SUITE:用AI重构安全,以国产化生态定义智能未来

前言 银河麒麟是由国防科技大学研发、现由麒麟软件运营的国产操作系统,旨在打破国外技术垄断,保障国家信息安全。自2002年国家“863计划”启动以来,历经技术迭代与生态整合,现为国产操作系统领军品牌。其应用覆盖党政、国防、能源…...

JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML和CSS系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看&#xff…...

15.进程间通信(一)

一、进程间通信介绍 进程间通信目的: 数据传输:一个进程需要将它的数据发送给另⼀个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们&#xf…...

AI 数据采集实战指南:基于 Bright Data 快速获取招标讯息

AI 数据采集实战指南:基于Bright Data快速获取招标讯息 在招标行业中,快速、准确地获取招标公告、项目详情、投标截止日期和其他关键招标信息,是投标企业提高竞标成功率的核心竞争力。然而,招标信息往往分散在不同的平台和网页&a…...

cursor使用mcp

问题说明 mcp就相当于给AI安装了工具包,它可以调用获取接口文档,网页,数据库等,基本上所有的mcp都是node程序,少数需要python环境 使用说明 使用mcp-mysql举例,下面是配置json "mysql": {&qu…...

小白成长之路-计算机网络(四)

文章目录 前言一、网络连接查看1.netstat2.ss3.bond绑定3.1准备好这三个文件3.2添加bond配置文件3.3关闭网络图形化服务3.4重启 4.Linux下的抓包工具Wireshark 5、web压力测试工具6、路由追踪命令 二、[练习题](https://blog.csdn.net/m0_70730767/article/details/148262716?…...

【Agent】MLGym: A New Framework and Benchmark for Advancing AI Research Agents

arxiv: https://arxiv.org/pdf/2502.14499 简介 Meta 推出的 MLGym 框架及配套基准 MLGym-Bench,为评估和开发LLM Agent在 AI 研究任务中的表现提供了全新工具。作为首个基于 Gym 的机器学习任务环境,MLGym 支持强化学习等算法对代理的训练&#xff0c…...

5.27 打卡

知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图片 import torch import torchvision from torchvision im…...

Web安全测试-文件上传绕过-DVWA

Web安全测试-文件上传绕过-DVWA 很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了。 我用…...

织梦dedecms arclist最新发布日期显示红色

织梦DedeCMS在当天发表的文章显示红色、添加new图标的问题,织梦模板网在以前的文章中已经发表过类似的文章,今天我们再来回顾和温习一下,主要增加了真正的当天显示红色,而不是24小时内的文章显示红色。 真正的“当天”显示红色&a…...

现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践

通过 数学计算 CSS mask 复合遮罩 实现的真正几何内凹效果: 背景是一张图片,用来证明中间的凹陷是透明的。 完整代码: app.js import FormPage from "./pages/formPage"; import "./App.css"; const App () > {re…...

【运维自动化-标准运维】如何实现在不同步骤间传递参数

当流程有多个步骤时&#xff0c;经常需要把前面某个个步骤处理的结果传递给下一个或后面的步骤使用&#xff08;输出作为输入&#xff09;&#xff0c;这就是跨步骤传参的场景&#xff0c;标准运维通过特有的标记符号"<SOPS_VAR>key:value</SOPS_VAR> "来…...

STM32 UART通信实战指南:从原理到项目落地

STM32串口通信实战指南&#xff1a;从零开始手把手教你 前言&#xff1a;为什么串口这么重要&#xff1f; 在嵌入式开发中&#xff0c;串口就像设备的"嘴巴"和"耳朵"。无论是给单片机下达指令、读取传感器数据&#xff0c;还是让两个模块"对话"…...

基于stm32的 永磁同步电机二电平驱动控制系统设计

基于STM32的永磁同步电机(PMSM)二电平驱动控制系统设计方案: 系统架构 永磁同步电机二电平驱动控制系统主要由以下部分组成: STM32微控制器:作为控制核心,生成PWM信号并处理反馈数据。功率驱动电路:使用IGBT或MOSFET构成三相桥式逆变器,实现二电平驱动。电流采样电路:…...

[AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)

主流大模型特色对比表 模型核心优势适用场景局限性DeepSeek- 数学/代码能力卓越&#xff08;GSM8K准确率82.3%&#xff09;1- 开源生态完善&#xff08;支持医疗/金融领域&#xff09;7- 成本极低&#xff08;API价格仅为ChatGPT的2%-3%&#xff09;5科研辅助、代码开发、数据…...

手机IP地址更换的影响与操作指南

在移动互联网时代&#xff0c;IP地址如同手机的“网络身份证”&#xff0c;其变更可能对上网体验、隐私安全及服务访问产生连锁反应。无论是为了绕过地域限制、保护隐私&#xff0c;还是解决网络冲突&#xff0c;了解IP更换的影响与正确操作方法都至关重要。本文将系统分析影响…...

iOS 响应者链详解

响应者链是 iOS 中处理用户事件&#xff08;如触摸、摇动、按键&#xff09;的核心机制&#xff0c;由一系列 UIResponder 对象构成&#xff0c;决定了事件传递的路径和优先级。以下是其核心机制与使用场景的详细解析&#xff1a; 一、响应者链的组成 1. 响应者对象&#xff0…...

Flink Table API 编程入门实践

Flink Table API 编程入门实践 前言 Apache Flink 是目前大数据实时计算领域的明星产品&#xff0c;Flink Table API 则为开发者提供了声明式、类似 SQL 的数据处理能力&#xff0c;兼具 SQL 的易用性与编程 API 的灵活性。本文将带你快速了解 Flink Table API 的基本用法&am…...

MongoDB 安全机制详解:全方位保障数据安全

在当今数据驱动的时代&#xff0c;数据库安全至关重要。MongoDB 作为一款流行的 NoSQL 数据库&#xff0c;广泛应用于 Web 应用、大数据分析和物联网等领域。然而&#xff0c;随着 MongoDB 的普及&#xff0c;其安全性也面临诸多挑战&#xff0c;如未授权访问、数据泄露和注入攻…...

Teensy LC 一款由 PJRC 公司开发的高性能 32 位微控制器开发板

Teensy LC 是一款由 PJRC 公司开发的高性能 32 位微控制器开发板&#xff0c;具有以下特点&#xff1a; 硬件配置 核心处理器 &#xff1a;采用 MKL26Z64VFT4 ARM Cortex-M0 处理器&#xff0c;运行频率为 48MHz&#xff0c;相较于传统的 8 位 AVR 处理器&#xff0c;速度更快…...

MicroPython 开发ESP32应用教程 之 线程介绍及实例分析

MicroPython ESP32 线程&#xff08;Thread&#xff09;基础 MicroPython 在 ESP32 上支持线程&#xff08;Thread&#xff09;功能&#xff0c;通过 _thread 模块实现。线程允许程序并发执行多个任务&#xff0c;适合处理需要同时运行的场景&#xff0c;例如传感器数据采集和…...