人人都会AI编程

cp、mv、rm、ln 文件复制、移动、删除与链接

更新时间:2026-07-12

在日常使用中,这四个命令构成了文件系统操作的基础。它们都遵循 Unix 哲学中“直接对文件进行操作”的原则,一旦执行便直接生效,没有确认提示或回收站,因此熟练掌握它们的同时也要养成谨慎操作的习惯。

cp — 复制文件或目录

cp 用于制作文件或目录的副本。基本语法为:

cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录

常见且实用的选项:

  • -i:交互模式,覆盖前询问确认(防止误覆盖)。
  • -r-R:递归复制目录及其内容,复制整个文件夹时必须使用。
  • -p:保留源文件的权限、时间戳等属性(尽量与原始文件一致)。
  • -a:归档模式,相当于 -dR --preserve=all,常用于备份,递归复制并保留软链接、权限、时间等一切属性。
  • -v:显示详细过程,了解正在复制哪些文件。
  • -u:仅当源文件比目标文件新或目标文件不存在时才复制,适合增量备份。

实用示例:

cp file.txt /tmp/backup.txt            # 将 file.txt 复制为 /tmp/backup.txt
cp -r project/ /backup/project.bak     # 递归复制整个目录
cp -a /etc /etc.bak                   # 备份 /etc 目录,权限时间戳不变
cp -u *.conf /backup/config/          # 只复制比备份里更新的配置文件

在大部分发行版中,root 用户的 cp 默认带有 -i 别名保护,普通用户可能没有,可以自行添加 alias cp='cp -i'~/.bashrc

mv — 移动或重命名文件

mv 既负责文件移动,也负责文件重命名,因为 Linux 中更改路径本质上就是更改文件在文件系统中的名称。基本语法:

mv [选项] 源文件 目标
mv [选项] 源文件... 目标目录

常用选项:

  • -i:覆盖前询问确认。
  • -v:显示移动过程。

实用示例:

mv oldname.txt newname.txt            # 重命名文件
mv report.txt /home/user/documents/   # 将文件移动到指定目录
mv *.log archive/                     # 将所有 .log 文件移入 archive 目录
mv -i config.conf config.conf.bak     # 重命名,如已存在则询问

在同一文件系统内移动文件时,mv 几乎瞬间完成,因为它只修改目录条目中的文件名指向,并不实际搬迁数据。跨文件系统移动时则会复制并删除源文件,耗时与文件大小相关。

rm — 删除文件或目录

rm 用来删除文件和目录,删除操作不可恢复,没有回收站。基本语法:

rm [选项] 文件...
rm [选项] 目录...

必须掌握的选项:

  • -r-R:递归删除目录及其所有内容,删除非空目录必须使用。
  • -f:强制删除,不提示确认、不报错(即使文件不存在)。-r 组合使用极易造成灾难,操作前需再三确认路径
  • -i:交互模式,每个删除操作都要求用户确认(部分发行版默认设置别名 alias rm='rm -i')。
  • -v:显示删除过程。

常见用法:

rm file.txt                           # 删除单个文件
rm -i *.tmp                           # 删除前逐一确认
rm -r old_project/                    # 删除整个目录及内容
rm -rf cache/                         # 强制删除目录,危险!确保路径正确

特别提醒:千万不要执行 rm -rf / 或类似命令,这将清除整个系统。另外,在处理通配符和变量时,应先 echo 验证展开结果,例如 echo rm -rf /tmp/$DIR/ 查看实际路径再执行。

ln — 创建链接(硬链接与符号链接)

ln 用于创建文件链接,让多个文件名指向同一份数据。链接分为两种:硬链接符号链接(软链接)

硬链接(hard link)

指多个文件名直接指向磁盘上相同的 inode(文件数据实体)。删除原文件名不会影响硬链接,只要至少有一个硬链接存在,数据就不会丢失。硬链接只能在同一文件系统内创建,且不能链接目录(防止循环)。

创建硬链接:

ln 目标文件 链接名

示例:

ln report.txt report_hardlink.txt    # 两者指向同一份数据
ls -li                               # 查看 inode 编号,两者相同

符号链接(symbolic link,又称软链接)

符号链接是一个特殊的小文件,其中保存着目标文件的路径。删除源文件后,符号链接会变成“悬空链接”(显示红色并报错),而硬链接仍然有效。符号链接可以跨文件系统,也可以链接目录。

创建符号链接使用 -s

ln -s 目标文件 链接名

常用选项:

  • -s:创建符号链接。
  • -f:强制覆盖已有的同名链接。
  • -n:如果链接名已存在且是一个目录的符号链接,不要在该目录内部创建链接(防止产生错误层级)。

示例:

ln -s /usr/local/bin/python3 /usr/bin/python   # 使 python 命令指向 python3
ln -s /data/shared/ config/                    # 创建目录的符号链接
ln -sf /opt/app/v2 /opt/app/current            # 更新 current 指向新版本

实际应用中,符号链接广泛用于版本切换、路径简化和环境管理,比如 Web 服务器目录指向当前部署版本,只需重指符号链接即可完成回滚或升级。

实用习惯汇总

  • 在使用 cpmvrm 前,可以通过先 ls 确认文件是否存在、路径是否正确。
  • 善用通配符前,先用 echo *.txt 等命令预览将要匹配哪些文件。
  • 为重要数据建立硬链接或 cp -l 创建的复制(实际上是硬链接,节省空间且防误删)。
  • 删除操作慎用 -f,尽量先用 -i 或明确指定文件列表。
  • 编写脚本时,尽量使用 -- 分隔选项和参数,避免文件名以 - 开头被当作选项,例如 rm -- -file

掌握这四个命令,你就能够高效、自信地进行绝大部分文件系统管理工作。