0.4 文件与文件夹:数据是怎么存放的
第〇篇【零基础预科】免费。这一篇讲计算机里最基础的组织方式——文件和文件夹。
一、文件:有名字的数据
硬盘上几乎所有东西都是文件:一段文字、一张照片、一首歌、一个程序。每个文件至少有:
- 一个文件名;
- 一组数据内容;
- 一些属性(大小、修改时间、类型等)。
文件名不是随便起的。Windows 和 Linux 都有一些不能出现在文件名里的字符,比如斜杠、冒号、星号、问号这些——它们在系统里有特殊含义(斜杠是路径分隔符、冒号是盘符标记),拿来当文件名会让系统分不清你在说什么。新手常踩的坑是从网页上下载文件时,文件名里带了冒号(比如"报告:最终版.pdf"),Windows 会自动把冒号变成别的字符或直接报错,这不是文件坏了,是文件名不合法。
二、文件夹:分门别类的收纳箱
如果所有文件都堆在一起,几万个文件根本没法找。于是用文件夹(也叫目录,Directory) 来归类,就像现实中的收纳箱、档案柜。
关键特点:文件夹里可以放文件,也可以再放文件夹,一层层套下去,形成一棵"树":
这种结构叫目录树。最顶层叫根目录(Windows 里是 C:\,Linux 里是 /)。
顺便建立对文件大小的直觉:计算机里衡量大小的基本单位是字节(Byte) ,一个英文字母大约占 1 字节、一个汉字通常占 2–3 字节;往上是 KB(约一千字节)、MB(约一千 KB)、GB(约一千 MB)。所以一张手机照片可能 3–5 MB、一首歌 4–10 MB、一部高清电影 1–4 GB,而一个纯文字的脚本往往只有几 KB——这也是为什么代码、脚本传起来特别快,而视频、镜像动辄几个 G。
还有一个对学安全很重要的观念:在 Linux 上几乎"一切皆文件"。不光文档、图片是文件,硬盘、网卡、正在运行的进程信息,系统也都用"文件"的形式呈现给你(比如 /proc 目录下能读到进程的实时状态)。听起来奇怪,但好处是你只要学会"读文件、写文件"这一套操作,就能和系统里绝大多数东西打交道。后面讲反弹 Shell、文件描述符时你会再次遇到这个设计。
三、四个最基本的文件操作
| 操作 | 含义 | 原处还有吗 |
|---|---|---|
| 复制(Copy) | 生成一个相同副本到目标位置 | 有 |
| 移动(Move) | 把文件搬到新位置 | 没有 |
| 重命名(Rename) | 改名字,内容不变 | — |
| 删除(Delete) | 移除文件(通常先进回收站) | 回收站里可还原 |
小技巧:按住 Ctrl 拖动文件通常是复制,直接拖动同盘内通常是移动。
关于删除多说一句:在 Windows 里按 Delete 删除的文件,默认是进回收站的,不是真的没了——你去回收站里右键"还原"就能找回来。但如果你按了 Shift+Delete,文件会被直接永久删除、不经过回收站,这种情况下基本救不回来。所以 Shift+Delete 只在你非常确定这个文件不要了的时候用,日常删除用普通 Delete 就好。
四、文件的常见属性
右键文件看"属性",常能看到:
- 大小:占多少字节(KB/MB/GB);
- 创建/修改时间;
- 类型:由扩展名决定(下一篇讲);
- 只读 / 隐藏等标记;
- 权限:谁能读、谁能改(Linux 下尤其重要)。
在 Windows 上右键文件选"属性"就能看到这些信息;在 Linux 命令行里用 ls -l 一条命令就能列出所有文件的权限、大小、修改时间——后面你会频繁用它来判断"这个文件能不能读、是不是别人传上来的"。
五、安全人眼里的文件
- 漏洞复现里你会频繁和文件打交道:配置文件
docker-compose.yml、脚本detect.py、编译产物payload.ser; - Web 攻击里,"能不能上传一个文件(如脚本)到服务器"是经典 GetShell 路径;
- 路径穿越(ZipSlip、目录遍历)本质,就是程序没管好"文件该放在哪个文件夹",让攻击者把文件写到了不该写的位置。
具体说说这两个高频场景。文件上传:很多网站允许你传头像、传附件,这本是正常功能;但如果服务器没校验"你传的到底是不是图片",攻击者就可能传一个伪装成图片的脚本(比如 .php、.jsp),再想办法访问它,让服务器把这个脚本当程序执行——这就是经典的"上传 WebShell"。防御的关键,正是严格区分"这是要存起来的数据,还是要被执行的程序"。
路径穿越:程序在解压压缩包、或按名字找文件时,本应把文件限定在指定文件夹里;但如果文件名里夹带了 ../../ 这种表示"跳到上一层目录"的写法,而程序又没拦下来,文件就可能被写到系统目录、启动目录等敏感位置(ZipSlip 就是解压时的这类问题)。你现在不用记住怎么利用,只要建立一个意识:凡是涉及"文件放到哪、从哪读",都要警惕路径被人操纵。这也是为什么下一篇我们要专门把"路径"讲透。
六、本篇小结
- 文件是有名字的数据单位,文件夹是归类容器,可层层嵌套成目录树,最顶层是根目录。
- 基本操作:复制(留原件)、移动(不留)、重命名、删除(多进回收站)。
- 文件有大小、时间、类型、权限等属性。
- 安全上:文件上传、路径穿越、配置/脚本文件都与文件组织直接相关。
下一篇 0.5 讲文件名里的"扩展名",以及为什么 Windows 会默认把它藏起来(这其实是个安全隐患)。