复制、移动与删除

文件编辑只是起点。日常使用中,更常见的是复制、移动、重命名和删除。

crow@opsbox:~/work$ cp notes.txt notes-copy.txt
crow@opsbox:~/work$ mkdir -p archive
crow@opsbox:~/work$ mv notes-copy.txt archive/notes-june.txt
crow@opsbox:~/work$ ls
archive
notes.txt
vim-notes.txt
crow@opsbox:~/work$ ls archive
notes-june.txt
  • cp(Copy):复制文件。源文件保持不变,目标位置生成一份独立副本。之后对副本的修改不会影响源文件。
  • mv(Move):移动文件或重命名。示例中,notes-copy.txt 被移到 archive/ 下,并更名为 notes-june.txt;原路径中的文件随之消失。

复制保留原文件,移动让副本出现在另一个位置

一个常见误解是:文件类型由扩展名决定。在 Linux 中并不如此。即使把纯文本文件命名为 .jpg,它仍然只是文本文件。

crow@opsbox:~/work$ cp notes.txt sample.jpg
crow@opsbox:~/work$ file sample.jpg
sample.jpg: ASCII text

file 会查看文件内容,而不是依赖文件名。它通过开头的魔数(magic number)、编码特征和结构信息判断类型。因此,单纯修改扩展名不会让文本变成 JPEG 图片。

改名改变了什么

练习

把只含普通文字的 notes.txt 复制为 sample.jpg,没有进行格式转换。它现在的内容应视为“文本”还是“JPEG 图片”?提交其中一个。

提交答案

题解 Hint

删除文件使用 rm(Remove):

crow@opsbox:~/work$ rm -i sample.jpg
rm: remove regular file 'sample.jpg'? y

Linux 中的 rm 通常会直接从文件系统删除文件,不进入回收站。因此删除前要多确认。加上 -i 选项可启用交互式确认。若要删除目录及其全部内容,可使用 rm -r;rm -rf 可跳过确认,但更危险,使用时务必谨慎。

软链接与硬链接

有时我们需要在某个位置放一个入口,打开它就像打开目标文件。Linux 中可以使用链接。

crow@opsbox:~/work$ cp notes.txt link-source.txt
crow@opsbox:~/work$ ln -s link-source.txt shortcut.txt
crow@opsbox:~/work$ readlink shortcut.txt
link-source.txt
crow@opsbox:~/work$ cat shortcut.txt
Read June handover.
  • 符号链接(软链接,ln -s):相当于 Windows 中的快捷方式。shortcut.txt 本身不复制内容,只记录目标文件路径 link-source.txt。
  • 如果目标文件被移动或删除,软链接就会失效,成为死链接:
crow@opsbox:~/work$ mv link-source.txt archive/link-source.txt
crow@opsbox:~/work$ cat shortcut.txt
cat: shortcut.txt: No such file or directory

与软链接不同,硬链接指向的是文件数据本身,而不是路径。

crow@opsbox:~/work$ ln archive/link-source.txt same-file.txt
crow@opsbox:~/work$ ls -i archive/link-source.txt same-file.txt

ls -i 会显示文件的 inode 号。如果两个文件显示相同的 inode 号,说明它们指向同一份底层数据。

硬链接让两个或多个文件名指向同一个 inode 号。inode 记录了文件内容、大小、权限、时间戳等信息。只要还有至少一个硬链接,文件内容就会保留;删除其中一个名字,只是减少链接数,并不一定真正删除数据。

符号链接记录目标路径,硬链接的两个名称指向同一个文件

需要注意:硬链接通常不能跨文件系统,且多数情况下不能用于目录。若只是想要快捷入口,软链接更灵活;若希望多个路径共享同一份文件内容,硬链接更直接。