cp 复制
复制文件用 cp(copy),先写源文件,再写新文件名或目标目录。我们把 notes.txt 复制一份叫 notes-copy.txt:
crow@opsbox:~/work$ cp notes.txt notes-copy.txt
crow@opsbox:~/work$ ls
notes-copy.txt
notes.txt
vim-notes.txt
crow@opsbox:~/work$ cat notes-copy.txt
阅读六月交接记录。
复制出来的文件是独立的副本,改其中一个不会影响另一个。如果要复制整个目录,需要加上 -r(递归)选项,比如 cp -r archive archive-backup。
mv 移动与重命名
移动文件用 mv(move),同样是先写源文件、再写目标位置。先建一个 archive 目录,再把 notes-copy.txt 移进去:
crow@opsbox:~/work$ mkdir archive
crow@opsbox:~/work$ mv notes-copy.txt archive/
crow@opsbox:~/work$ ls
archive
notes.txt
vim-notes.txt
crow@opsbox:~/work$ ls archive
notes-copy.txt
mv 还能用来重命名——只要第二个参数写一个新名字,文件就会直接改名。也可以把移动和改名合在一步里完成:
crow@opsbox:~/work$ mv archive/notes-copy.txt archive/notes-june.txt
crow@opsbox:~/work$ ls archive
notes-june.txt
file 鉴别文件类型
平时用电脑时,我们习惯看后缀名认文件(.txt 是文本、.jpg 是图片)。但在 Linux 里,后缀名只是名字的一部分,把一段文本或脚本改名叫 .jpg,它也不会变成真图片。要看一个文件到底是什么格式,可以用 file 命令:
crow@opsbox:~/work$ file notes.txt
notes.txt: Unicode text, UTF-8 text
我们把纯文本的 notes.txt 复制一份叫 sample.jpg,再用 file 测一下:
crow@opsbox:~/work$ cp notes.txt sample.jpg
crow@opsbox:~/work$ file sample.jpg
sample.jpg: Unicode text, UTF-8 text
哪怕名字改成了 .jpg,file 依然认出它是 UTF-8 文本。这是因为大多数文件格式都会在最开头的几个字节写入固定的二进制标识,叫作文件头魔数(Magic Number)——比如真 JPEG 开头总是 FF D8 FF E0,PNG 开头总是 89 50 4E 47,Linux 可执行程序(ELF)开头是 7F 45 4C 46。file 直接检查文件头和内容特征,不会被假后缀骗过去。
去 opsbox 上用 file 找一找混在扫描件图片里的文本文件: