Linux touch命令详解
Linux touch 命令详解 🖐️🐧
学习目标
- 理解
touch命令的基本功能与常见用途 - 掌握创建空文件、修改文件时间戳等操作
- 了解在脚本开发和自动化任务中的典型应用场景
- 能够区分不同 Linux 发行版(Ubuntu、CentOS、EulerOS)中
touch的行为差异 - 掌握处理多个文件、通配符使用及权限相关注意事项
核心重点 ✅
| 功能 | 描述 |
|---|---|
| 创建空文件 | 若文件不存在,则新建一个空文件 |
| 更新时间戳 | 若文件存在,仅更新其访问和修改时间 |
| 修改文件属性 | 可通过参数分别修改访问时间或修改时间 |
| 支持通配符 | 可批量创建/修改多个文件 |
| 权限控制 | 需有对应目录写权限才能创建文件 |
详细讲解
1. touch 是什么?
touch 是 Linux 中最基础但非常实用的命令之一,用于:
- 创建新文件(如果文件不存在)
- 更新已有文件的时间戳(访问时间 atime 和修改时间 mtime)
它不会改变文件内容,也不会占用额外磁盘空间(除了元数据),非常适合用于标记、测试、日志记录等场景。
示例一:基本用法
touch demo.txt
该命令会:
- 如果
demo.txt不存在 → 创建一个空文件; - 如果已存在 → 更新它的访问时间和修改时间为当前系统时间。
2. 主要选项说明 🛠️
| 选项 | 含义 | 示例 |
|---|---|---|
-a |
仅更新访问时间(atime) | touch -a file.txt |
-m |
仅更新修改时间(mtime) | touch -m file.txt |
-t |
自定义时间戳格式 | touch -t 202506201200 file.txt |
-d |
使用可读性强的时间格式 | touch -d "2 days ago" file.txt |
-c |
不创建新文件 | touch -c notexist.txt(若不存在则不创建) |
-r |
使用参考文件的时间戳 | touch -r ref.txt target.txt |
💡 时间格式说明:
-t [[CC]YY]MMDDhhmm[.ss]- 如:
202506201200表示 2025年6月20日 12:00
- 如:
-d支持自然语言表达:"next Friday"、"yesterday"、"3 hours ago"
3. 实战应用场景分析 🎯
场景一:快速创建多个测试文件
touch file{1..10}.txt
这将创建 file1.txt 到 file10.txt,适用于测试脚本、权限设置等场景。
场景二:模拟文件更新时间,测试脚本逻辑
假设你有一个监控脚本,只处理最近 24 小时内被修改过的文件。你可以使用 touch 模拟“旧文件”或“新文件”。
touch -d "3 days ago" old_file.txt
touch -d "1 hour ago" new_file.txt
然后运行你的脚本进行测试。
场景三:配合 find 删除 N 天前生成的临时文件
find /tmp -name "*.tmp" -mtime +7 -exec touch {} \; # 更新时间戳为当前
find /tmp -name "*.tmp" -mtime +0 -exec rm -f {} \; # 删除今天之前的所有.tmp文件
⚠️ 注意:
-mtime +N表示修改时间在 N 天前。
场景四:作为脚本中的“信号文件”
有时候我们希望用某个文件的存在与否来表示程序状态。例如:
#!/bin/bash
if [ -f /tmp/lock ]; then
echo "Another instance is running."
exit 1
fi
touch /tmp/lock
# 执行关键操作...
rm /tmp/lock
这个例子中,touch /tmp/lock 用于防止脚本并发执行。
4. 不同发行版下的差异 ⚖️
| 发行版 | 默认行为 | 特性支持 |
|---|---|---|
| Ubuntu (Debian) | GNU coreutils,默认完整支持所有参数 | 支持 -d, -t, -r 等高级特性 |
| CentOS 7+ | 默认安装 GNU touch | 与 Ubuntu 类似 |
| EulerOS | 类似于 CentOS | 支持标准 touch 命令 |
| macOS(BSD) | BSD touch,部分参数略有不同 | -t 参数格式略有区别 |
📝 macOS 差异示例:
# 在 macOS 上使用 -t 时需带秒数
touch -t 202506201200.00 file.txt
5. 注意事项 ⚠️
- ✅ 创建文件时,需要对所在目录具有写权限。
- ✅ 使用
-c参数可以避免意外创建新文件。 - ✅ 使用
touch修改时间戳时,用户必须拥有文件所有权或 root 权限。 - ✅
touch不适合用于大文件或频繁调用的生产级应用。 - ✅ 在脚本中使用时建议加上错误判断,如:
touch myfile.txt || { echo "无法创建文件"; exit 1; }
6. 综合练习题 🧩
✅ 练习 1:创建 5 个以 .log 结尾的空文件
touch log{1..5}.log
✅ 练习 2:将 report.txt 的访问时间设为昨天
touch -a -d "yesterday" report.txt
✅ 练习 3:将 data.txt 的时间戳设置为 reference.txt
touch -r reference.txt data.txt
✅ 练习 4:递归更新 /tmp/test/ 下所有 .tmp 文件的时间戳为当前
find /tmp/test -name "*.tmp" -exec touch {} +
🎉 总结
touch 虽然看似简单,但在日常运维、脚本开发、自动化任务中扮演着重要角色。无论是创建占位文件、更新时间戳,还是作为脚本中的状态标识,touch 都能高效完成任务。
对于你当前的学习环境(Windows 连接阿里云 ECS Ubuntu),建议你在实际环境中多动手实践上述命令,结合 find、xargs、chmod、ls -l 等命令组合使用,你会发现它的真正威力!💪🐧
如果你还想深入了解 touch 在 shell 脚本中的进阶用法,或者想学习如何利用 stat 查看文件时间戳,请随时告诉我 👇

浙公网安备 33010602011771号