在终端中对文件和目录进行日常维护是 Linux 实操的核心基本功。本章将讲解如何创建、移动、复制、重命名和删除文件及目录,以及如何准确判断文件的类型。
创建与管理目录树
为了直观地展示文件与目录的演变过程,我们将使用 tree 树形结构工具来展示一系列操作:
1. 创建文件与目录:touch 与 mkdir
touch用于创建文件。如果目标文件不存在,它会新建一个空文件;如果文件已存在,它不会改变文件内容,而是更新该文件的最近访问与修改时间戳。mkdir建立一个名为Storage的目录。crow@opsbox:~$ touch info.txt crow@opsbox:~$ mkdir Storage- 此时目录结构如下:
. ├── info.txt └── Storage
注意
此时系统会在当前目录下生成一个名为 info.txt 的空文件。要向文件中写入内容,虽然我们可以利用后文会讲到的输出重定向写入简单内容,但在下一模块中,我们将学习如何使用强大的文本编辑器(如 nano 和 vim)在终端里直接编辑文件。
2. 建立递归父目录:mkdir -p
如果需要一次性建立多层嵌套的目录,需要追加 -p 选项,这能防止因上级文件夹不存在而报错:
crow@opsbox:~$ mkdir -p Storage/local/user/documents
- 此时的目录树演变为:
. ├── info.txt └── Storage └── local └── user └── documents
3. 指定路径创建文件
我们可以直接通过相对路径,在刚刚创建的叶子目录下创建一个新文件 userinfo.txt:
crow@opsbox:~$ touch ./Storage/local/user/userinfo.txt
- 结构更新为:
. ├── info.txt └── Storage └── local └── user ├── documents └── userinfo.txt
移动、复制与删除文件
4. 重命名与移动文件:mv
- 重命名:将当前目录下的
info.txt重命名为information.txt。crow@opsbox:~$ mv info.txt information.txt - 移动:同时在当前目录新建一个
readme.txt文件,然后将information.txt与readme.txt一并移入Storage目录下:crow@opsbox:~$ touch readme.txt crow@opsbox:~$ mv information.txt readme.txt Storage/ - 结构更新为:
. └── Storage ├── information.txt ├── local │ └── user │ ├── documents │ └── userinfo.txt └── readme.txt
注意
底层机制差异:
在同一文件系统内,mv 通常通过改写目录项完成移动或重命名,不会复制文件的数据块,因此移动数吉字节(GB)的文件也往往很快。若源和目标位于不同的文件系统,mv 会改为复制数据后再删除源文件。cp 则始终会在目标位置创建新的文件数据。
5. 复制文件:cp
我们将 Storage 目录下的 readme.txt 复制一份到其子目录 local 下:
crow@opsbox:~$ cp Storage/readme.txt Storage/local/
- 结构更新为:
. └── Storage ├── information.txt ├── local │ ├── readme.txt │ └── user │ ├── documents │ └── userinfo.txt └── readme.txt
6. 删除文件与目录:rm
需要注意,通过终端删除的文件通常不会进入回收站;文件名与目录项会被移除,数据块则标记为空闲,是否还能恢复取决于文件系统、后续写入和工具。
- 删除普通文件:
crow@opsbox:~$ rm Storage/readme.txt - 递归删除整个目录及其下属所有内容(必须使用
-r或-R递归标志):crow@opsbox:~$ rm -R Storage/local
识别文件类型:file
与 Windows 系统不同,Linux 系统本身并不依赖文件扩展名(如 .txt、.jpg)来决定如何处理文件。在 Linux 下,即使你把一个文本文件命名为 data.jpg,它依然是一个文本文件。扩展名只是一种方便人类阅读的标记,并不保证其内容真实性。
为了准确判断文件的真实数据格式,我们可以使用 file 命令。它通过解析文件内部的特殊二进制标记(魔法数字)来检测文件的类型:
crow@opsbox:~$ file Storage/information.txt
Storage/information.txt: ASCII text
如果是一个纯文本文件,命令执行后会输出类似 Storage/information.txt: ASCII text 的回显。
提示
魔法数字的威力
我们可以做个有趣的实验:将一个名为 photo.png 的真实图片重命名为 photo.txt,接着运行 file photo.txt。你会发现系统依然能准确指出 photo.txt: PNG image data。这是因为 file 读取了该文件头部的魔法数字(PNG 的前 8 字节固定为 89 50 4E 47 0D 0A 1A 0A),从而看穿了它的“伪装”。这在恶意代码分析中常用于发现隐藏的文件。

