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. 移动文件
创建一个日志文件:
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 /*
这是非常危险的操作,可能造成系统文件被大量删除。
实际工作中,建议遵循几个原则:
- 删除前先使用
pwd确认当前目录。 - 使用
ls确认目标文件或目录。 - 删除重要文件前先备份。
- 不要随意复制网络文章中的删除命令。
- 脚本中删除目录时,尽量使用明确的绝对路径,并对变量进行非空检查。
例如:
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 日常操作的整个过程。
我个人更建议大家在练习时,不要只记住命令格式,而是把它们放进一个具体场景中。例如,创建测试项目、备份配置、整理日志、归档报告。只有真正用起来,才能逐渐形成自己的命令使用习惯。