【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】

TL;DR

系列方向: 从 Linux 基础命令开始,逐步掌握文件管理、权限控制、进程管理、网络排查、日志分析和 Shell 自动化,通过真实工作场景提升 Linux 工程实践能力。

本篇重点: 学会使用 touch、mkdir、cp、mv、rm 完成文件和目录的创建、复制、移动与删除,并结合自动化测试项目的实际目录管理场景,掌握这些命令在日常工作中的使用方式。


一、为什么要掌握这些文件操作命令?

在 Linux 服务器上工作,很多操作都离不开文件和目录管理。

比如:

  • 执行自动化测试前,需要创建测试结果目录。
  • 修改配置文件前,需要备份原始配置。
  • 测试执行完成后,需要移动测试报告。
  • 调试过程中,需要清理历史临时文件。
  • 部署新版本时,需要复制程序文件或替换配置。

这些事情看起来简单,但如果只会使用图形界面操作,到了 Linux 服务器上就会比较被动。

这一篇我们重点掌握五个命令:

命令 主要用途
touch 创建文件、更新文件时间
mkdir 创建目录
cp 复制文件和目录
mv 移动文件和目录、重命名
rm 删除文件和目录

先准备一个练习目录,后面的命令都在这个目录中执行。

bash 复制代码
mkdir -p ~/linux-practice/day03
cd ~/linux-practice/day03

可以使用 pwd 确认当前位置:

bash 复制代码
pwd

二、touch:创建文件

1. 创建一个空文件

touch 是日常使用频率很高的命令。

最简单的用法:

bash 复制代码
touch test.txt

查看文件:

bash 复制代码
ls -l

如果文件不存在,touch 会创建一个空文件。

如果文件已经存在,touch 默认不会清空文件内容,而是更新文件的访问时间和修改时间。

这一点需要特别注意。

例如:

bash 复制代码
echo "这是第一行测试数据" > test.txt

cat test.txt

touch test.txt

cat test.txt

执行后会发现,文件内容依然存在。

2. 一次创建多个文件

在实际项目中,经常需要提前创建多个文件。

例如,创建测试环境配置文件:

bash 复制代码
touch dev.conf test.conf prod.conf

查看:

bash 复制代码
ls -l

这样就一次性创建了三个文件。

3. 创建文件并指定时间

touch 还可以修改文件时间。

bash 复制代码
touch -t 202611060930 test.txt

这里设置的是文件时间,格式为:

text 复制代码
[[CC]YY]MMDDhhmm[.ss]

在测试文件时间相关功能时,这个参数会比较有用。

不过要注意:修改文件时间不等于修改文件内容。

4. 实际场景:创建测试记录文件

假设我们正在执行接口自动化测试,希望提前创建一个测试记录文件:

bash 复制代码
touch api_test.log

写入一条记录:

bash 复制代码
echo "接口测试开始" > api_test.log

查看内容:

bash 复制代码
cat api_test.log

这里使用了 >,它会覆盖原有内容。后面我们还会专门介绍重定向。


三、mkdir:创建目录

文件创建完成后,通常还需要创建目录来组织文件。

1. 创建单个目录

bash 复制代码
mkdir reports

创建完成后:

bash 复制代码
ls

2. 一次创建多个目录

bash 复制代码
mkdir logs scripts config

这种方式适合提前规划项目结构。

3. 使用 -p 创建多级目录

这是我认为 mkdir 最值得掌握的参数。

例如,我们希望创建下面的目录:

text 复制代码
project/
└── test/
    └── reports/
        └── 2026/

如果父目录不存在,直接执行:

bash 复制代码
mkdir project/test/reports/2026

可能会提示目录不存在。

这时可以使用 -p:

bash 复制代码
mkdir -p project/test/reports/2026

-p 会自动创建不存在的父目录。

而且,如果目录已经存在,也不会因为目录存在而直接报错。

4. 一次搭建自动化测试项目目录

假设我们准备搭建一个简单的接口自动化测试项目:

bash 复制代码
mkdir -p api-test/{config,cases,data,logs,reports,scripts}

查看目录结构:

bash 复制代码
ls -R api-test

预期目录结构:

text 复制代码
api-test/
├── cases/
├── config/
├── data/
├── logs/
├── reports/
└── scripts/

这类操作在初始化项目、部署测试环境时非常方便。


四、cp:复制文件和目录

cp 用于复制文件或目录。

它在服务器配置备份、项目部署、测试数据准备等场景中都很常见。

1. 复制一个文件

先创建一个配置文件:

bash 复制代码
echo "server=127.0.0.1" > config.ini

复制文件:

bash 复制代码
cp config.ini config.bak

查看:

bash 复制代码
ls -l

现在有两个文件:

text 复制代码
config.ini
config.bak

其中 config.bak 是复制出来的文件。

2. 复制文件到指定目录

bash 复制代码
mkdir -p backup

cp config.ini backup/

查看:

bash 复制代码
ls backup/

文件已经复制到 backup 目录中。

3. 复制目录

如果要复制整个目录,需要使用 -r:

bash 复制代码
cp -r api-test api-test-backup

这里的 -r 表示递归复制。

如果复制目录时忘记加 -r,通常会看到类似错误:

text 复制代码
cp: -r not specified; omitting directory

4. 使用 -i 防止覆盖

假设目标位置已经存在同名文件:

bash 复制代码
cp -i config.ini config.bak

如果目标文件存在,系统会询问是否覆盖。

text 复制代码
cp: overwrite 'config.bak'?

确认后再决定是否覆盖。

这个参数适合手动操作时使用,可以减少误覆盖文件的风险。

5. 使用 -p 保留文件属性

bash 复制代码
cp -p config.ini config.bak

-p 尽可能保留源文件的权限、所有者、时间戳等属性。

需要注意,实际能保留哪些属性还受当前用户权限和文件系统限制。

6. 实际场景:修改配置前先备份

在测试服务器上修改配置文件时,我更建议先备份,再修改。

例如:

bash 复制代码
cp -p application.conf application.conf.bak

确认备份存在:

bash 复制代码
ls -l application.conf*

这样即使后续修改出现问题,也能找到原始配置。

恢复时:

bash 复制代码
cp application.conf.bak application.conf

这比直接修改原文件、出错后再想办法恢复要稳妥得多。


五、mv:移动文件和重命名

mv 有两个常见用途:

  1. 移动文件或目录。
  2. 修改文件或目录名称。

1. 移动文件

创建一个日志文件:

bash 复制代码
echo "测试执行完成" > test.log

移动到 logs 目录:

bash 复制代码
mkdir -p logs

mv test.log logs/

查看:

bash 复制代码
ls logs/

此时,当前目录下已经没有 test.log,文件被移动到了 logs 目录。

2. 修改文件名称

例如,将:

text 复制代码
test.log

修改为:

text 复制代码
api_test.log

执行:

bash 复制代码
mv test.log api_test.log

这里并没有复制文件,而是直接修改了文件名称。

3. 移动目录

bash 复制代码
mkdir old_reports

mv old_reports reports/

这样就把 old_reports 目录移动到了 reports 下面。

4. 使用 -i 防止覆盖

bash 复制代码
mv -i config.ini backup/

如果目标位置存在同名文件,系统会询问是否覆盖。

5. 实际场景:整理自动化测试报告

假设测试执行完成后,生成了一个临时报告:

text 复制代码
report.html

我们希望将它放到日期目录中:

bash 复制代码
mkdir -p reports/2026-11-06

mv report.html reports/2026-11-06/

查看:

bash 复制代码
ls reports/2026-11-06/

这样就完成了测试报告归档。


六、rm:删除文件和目录

rm 是这几个命令中需要格外谨慎的一个。

因为它删除文件后,通常不会像图形界面那样进入回收站。

1. 删除一个文件

bash 复制代码
rm test.log

执行后,文件就被删除了。

2. 使用 -i 交互式删除

bash 复制代码
rm -i config.bak

系统会询问:

text 复制代码
rm: remove regular file 'config.bak'?

确认后才会删除。

如果是手动清理文件,我建议优先使用这种方式。

3. 删除空目录

删除空目录可以使用:

bash 复制代码
rmdir empty_dir

如果目录里面还有文件,通常无法删除。

4. 删除非空目录

如果目录中包含文件,需要使用:

bash 复制代码
rm -r old_reports

-r 表示递归删除目录及其内容。

5. rm -rf 到底是什么意思?

经常能看到这样的命令:

bash 复制代码
rm -rf temp

它由两个参数组成:

  • -r:递归删除目录及其内容。
  • -f:强制删除,不进行交互确认,并忽略部分不存在的文件情况。

这条命令执行后,temp 目录及其内部内容会被删除。

这里一定要提醒:不要在没有确认路径的情况下直接执行 rm -rf。

例如:

bash 复制代码
rm -rf /*

这是非常危险的操作,可能造成系统文件被大量删除。

实际工作中,建议遵循几个原则:

  1. 删除前先使用 pwd 确认当前目录。
  2. 使用 ls 确认目标文件或目录。
  3. 删除重要文件前先备份。
  4. 不要随意复制网络文章中的删除命令。
  5. 脚本中删除目录时,尽量使用明确的绝对路径,并对变量进行非空检查。

例如:

bash 复制代码
TARGET_DIR="/tmp/api-test-cache"

if [ -n "$TARGET_DIR" ] && [ "$TARGET_DIR" = "/tmp/api-test-cache" ]; then
    rm -rf -- "$TARGET_DIR"
fi

这只是一个简单的路径保护示例。正式脚本还应该结合目录存在性、权限和业务条件进行检查。


七、综合实战:创建一个自动化测试工作目录

前面分别学习了五个命令,现在把它们组合起来,完成一个小练习。

假设我们需要在 Linux 服务器上准备一个接口自动化测试工作目录。

1. 创建项目结构

bash 复制代码
mkdir -p api-test/{config,cases,data,logs,reports,backup}

2. 创建配置文件和测试文件

bash 复制代码
touch api-test/config/test.conf
touch api-test/cases/test_login.py
touch api-test/cases/test_order.py

3. 写入配置内容

bash 复制代码
echo "environment=test" > api-test/config/test.conf

查看:

bash 复制代码
cat api-test/config/test.conf

4. 备份配置文件

bash 复制代码
cp -p api-test/config/test.conf api-test/backup/test.conf.bak

5. 创建测试日志

bash 复制代码
echo "login test passed" > api-test/logs/login.log
echo "order test passed" > api-test/logs/order.log

6. 整理测试报告目录

bash 复制代码
mkdir -p api-test/reports/2026-11-06

创建一个简单的报告文件:

bash 复制代码
touch api-test/reports/report.html

移动到日期目录:

bash 复制代码
mv api-test/reports/report.html api-test/reports/2026-11-06/

7. 检查最终目录

bash 复制代码
ls -R api-test

最终结构大致如下:

text 复制代码
api-test/
├── backup/
│   └── test.conf.bak
├── cases/
│   ├── test_login.py
│   └── test_order.py
├── config/
│   └── test.conf
├── data/
├── logs/
│   ├── login.log
│   └── order.log
├── reports/
│   └── 2026-11-06/
│       └── report.html
└── scripts/

到这里,一个简单的自动化测试工作目录就准备好了。

虽然我们还没有真正执行自动化测试,但已经完成了项目目录初始化、配置备份、日志创建和报告归档。

这些操作在真实的测试服务器上非常常见。


八、几个容易出错的地方

常见问题 原因 处理方式
mkdir 创建目录失败 父目录不存在 使用 mkdir -p
cp 无法复制目录 没有使用递归参数 使用 cp -r
cp 覆盖了原文件 目标文件已经存在 使用 cp -i
mv 后找不到文件 文件已经移动到其他目录 使用 find 或 ls 定位
rm 删除目录失败 目录非空 确认后使用 rm -r
rm -rf 误删文件 删除路径没有确认 删除前检查 pwd 和目标路径

还有一个细节:cp 和 mv 在目标位置存在同名文件时,都可能覆盖原文件。涉及重要配置时,不要依赖默认行为,应该主动备份或使用交互式参数。


九、动手练习

建议不要只看命令,最好自己在 Linux 环境中执行一遍。

练习一:文件创建

bash 复制代码
touch user.log order.log system.log

要求:创建三个日志文件,并使用 ls -l 查看。

练习二:目录创建

bash 复制代码
mkdir -p project/test/cases

要求:创建多级目录,并使用 ls -R project 查看结构。

练习三:文件复制

bash 复制代码
cp user.log user_backup.log

要求:复制文件,并验证两个文件是否存在。

练习四:文件移动

bash 复制代码
mkdir logs
mv order.log logs/

要求:将日志文件移动到指定目录。

练习五:文件清理

bash 复制代码
rm -i system.log

要求:使用交互式方式删除文件,并确认删除结果。

完成这五个练习,基本就掌握了本篇的核心命令。


十、总结

这一篇我们学习了五个 Linux 基础文件操作命令:

  • touch:创建文件、更新时间。
  • mkdir:创建目录,尤其要掌握 -p。
  • cp:复制文件和目录,注意 -r、-i、-p。
  • mv:移动文件、目录,也可以重命名。
  • rm:删除文件和目录,尤其要谨慎使用 rm -rf。

这几个命令看起来简单,但它们几乎贯穿 Linux 日常操作的整个过程。

我个人更建议大家在练习时,不要只记住命令格式,而是把它们放进一个具体场景中。例如,创建测试项目、备份配置、整理日志、归档报告。只有真正用起来,才能逐渐形成自己的命令使用习惯。

相关推荐
|_⊙26 分钟前
网络层协议 IP
服务器·网络·tcp/ip
byte轻骑兵42 分钟前
实战 1:修改 BlueZ 源码,添加自定义开机日志
linux·aiot·bluez·电脑蓝牙·嵌入式蓝牙
叼烟扛炮1 小时前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮1 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
AR-26710-1 小时前
Linux Day32——实操五类资源告急排查
linux·运维
StarsGreen2 小时前
libva中的图像格式说明
linux
H.莓飛2 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla2 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
沫璃染墨3 小时前
从零入门计算机网络系列(十五):TCP可靠传输机制详解——从序号与确认应答到乱序处理
服务器·网络·c++·tcp/ip·tcp