在日常使用中,这四个命令构成了文件系统操作的基础。它们都遵循 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 服务器目录指向当前部署版本,只需重指符号链接即可完成回滚或升级。
实用习惯汇总
- 在使用
cp、mv、rm前,可以通过先ls确认文件是否存在、路径是否正确。 - 善用通配符前,先用
echo *.txt等命令预览将要匹配哪些文件。 - 为重要数据建立硬链接或
cp -l创建的复制(实际上是硬链接,节省空间且防误删)。 - 删除操作慎用
-f,尽量先用-i或明确指定文件列表。 - 编写脚本时,尽量使用
--分隔选项和参数,避免文件名以-开头被当作选项,例如rm -- -file。
掌握这四个命令,你就能够高效、自信地进行绝大部分文件系统管理工作。