讲解
cp 复制文件:cp 源文件 目标位置。目标可以是新文件名(复制并改名),也可以是一个已存在的目录(复制进去保持原名)。复制整个目录必须加 -r(递归):cp -r docs docs-backup。想保留原文件的修改时间等属性,加 -p。
mv 移动文件,同时也承担「重命名」的职责——Linux 没有单独的 rename 命令,mv old.txt new.txt 就是改名。mv 的目标若是已存在的目录,则是把源移进去。mv 不需要 -r 就能移动整个目录,因为它只是改个路径,不复制数据,大目录也是瞬间完成。
rm 删除文件,rm -r 删除目录及其全部内容。这是整个命令行里最危险的命令:删除不进回收站、默认不询问、配合通配符能一次清掉一批文件。安全习惯有三个:删除前先 ls 或 echo 看一下通配符实际匹配到什么;重要操作加 -i 让每次删除都询问(会要求交互输入,适合手工操作不适合脚本);对 rm -rf 保持生理性的警惕,敲回车前再读一遍路径。
示例
# 复制文件并改名;复制整个目录
cp fruits.txt fruits-copy.txt
cp -r docs docs-backup
ls
# mv 改名;mv 进目录
mv fruits-copy.txt fruits-备份.txt
mkdir -p reports
mv report.txt reports/annual-report.txt
ls reports
# 删除前先确认匹配范围,是个好习惯
ls docs-backup
rm -r docs-backup
ls
常见坑
- rm -rf 路径打错:rm -rf /tmp/myapp 打成 rm -rf /tmp /myapp(多了空格)会把整个 /tmp 删掉。路径分段敲、用 Tab 补全、回车前读一遍。
- 通配符超出预期:rm *.log 之前先 echo *.log 看看会删什么,echo 不会真的执行删除。
- cp 覆盖不提醒:cp 目标文件已存在时会直接覆盖,内容丢失。可以加 -i 让它覆盖前询问。
- mv 的「歧义」:mv a.txt b.txt 中 b.txt 已存在时会被覆盖;mv a.txt dir 中 dir 已存在时是移进去。想强制不覆盖用 mv -n。
小结
cp 复制(目录加 -r)、mv 移动兼改名、rm 删除(目录加 -r)。删除不可逆,先 ls 后 rm 是保命习惯。下一节专门看目录的创建与删除。