3、IPFS基础操作:添加文件到IPFS、查看文件内容、从IPFS下载文件、固定文件(Pin)、垃圾回收机制
好,咱们正式开始动手操作IPFS。说实话,很多教程一上来就讲架构讲原理,我反而觉得先跑通几个命令,你心里才有底。这一节我们聚焦五个最核心的操作:添加文件、查看内容、下载文件、固定文件,以及垃圾回收。这些命令你以后每天都会用,所以值得花点时间吃透。
3.1 添加文件到IPFS:你的第一个CID
先启动你的IPFS节点,确保守护进程在跑着。然后随便找个文本文件,比如一个叫 hello.txt 的文件,里面写上一句话:
echo "Hello, IPFS World!" > hello.txt
接下来,用 ipfs add 命令把它加进去:
ipfs add hello.txt
你会看到类似这样的输出:
added QmWATWQ7fVPP2HRGu6Dk6c2iBcGjY6J6J6J6J6J6J6J6J hello.txt
这个长长的字符串就是 CID(内容标识符)。它本质上是你文件内容的哈希值。注意,哪怕你只改了一个标点符号,CID都会完全不一样。我在项目中遇到过有人把两个不同版本的文件搞混了,就是因为没意识到CID是内容敏感的。
你也可以一次添加整个目录:
ipfs add -r my_folder/
加上 -r 参数,IPFS会递归添加目录下的所有文件。输出会列出每个文件的CID,最后还会有一个目录本身的CID。
3.2 查看文件内容:验证你的数据
文件加进去了,怎么确认它真的存好了?用 ipfs cat:
ipfs cat QmWATWQ7fVPP2HRGu6Dk6c2iBcGjY6J6J6J6J6J6J6J6J
终端会直接打印出文件内容:
Hello, IPFS World!
嗯,这就对了。你想想看,这个命令其实是在告诉IPFS节点:「嘿,帮我把这个CID对应的数据块取回来,然后原样输出。」它不关心文件存在本地还是远端,节点会自动去网络里找。
如果文件比较大,你只想看开头几行,可以用 ipfs cat 配合管道:
ipfs cat QmYourCID | head -n 10
我曾经调试一个日志文件时,就用这招快速检查了文件头部,省得把整个大文件拖下来。
3.3 从IPFS下载文件:把数据拿回本地
下载文件其实和查看内容很像,只不过我们要把输出重定向到本地文件:
ipfs cat QmWATWQ7fVPP2HRGu6Dk6c2iBcGjY6J6J6J6J6J6J6J6J > downloaded_hello.txt
或者用更专业的 ipfs get 命令:
ipfs get QmWATWQ7fVPP2HRGu6Dk6c2iBcGjY6J6J6J6J6J6J6J6J -o ./my_downloaded_file.txt
-o 参数指定输出路径。如果不加,默认会以CID命名文件。我个人更推荐用 ipfs get,因为它会保留文件的原名和目录结构(如果你下载的是目录的话)。
3.4 固定文件(Pin):防止数据被清理
这里有个关键概念要讲清楚。IPFS节点有一个本地存储缓存,叫「块存储」(blockstore)。默认情况下,节点只会缓存它最近访问过的数据。如果缓存满了,旧数据可能会被清理掉——这就是垃圾回收机制要干的事。
那怎么保证你的重要数据不被清理?答案是 固定(Pin)。
固定就是告诉节点:「这些数据我很看重,别动它们。」
固定一个文件:
ipfs pin add QmWATWQ7fVPP2HRGu6Dk6c2iBcGjY6J6J6J6J6J6J6J6J
查看当前所有固定的内容:
ipfs pin ls
输出会列出所有被固定的CID,以及它们的固定类型。常见的有两种:
| 固定类型 | 说明 |
|---|---|
recursive |
递归固定,会固定该CID及其所有子对象(比如整个目录) |
direct |
只固定该CID本身,不固定其引用的子对象 |
取消固定:
ipfs pin rm QmWATWQ7fVPP2HRGu6Dk6c2iBcGjY6J6J6J6J6J6J6J6J
3.5 垃圾回收机制:清理无用数据
垃圾回收(Garbage Collection,简称GC)是IPFS节点定期清理未固定数据的机制。说白了,就是帮你腾空间。
手动触发垃圾回收:
ipfs repo gc
你会看到类似这样的输出:
removed QmSomeOldData1
removed QmSomeOldData2
...
每个 removed 行代表一个被清理的数据块。这些数据块都是没有被任何固定引用的。
IPFS节点也会自动执行GC,频率取决于配置。你可以通过以下命令查看当前GC设置:
ipfs config show | grep -A 5 "GC"
常见的配置项包括:
| 配置项 | 说明 |
|---|---|
Datastore.GCPeriod |
自动GC的间隔时间,默认1小时 |
Datastore.StorageMax |
节点存储上限,默认10GB |
你可以手动调整这些值。比如,把GC周期改成2小时:
ipfs config Datastore.GCPeriod "2h"
ipfs repo gc 之前,务必确认所有重要数据都已经固定。
3.6 实战小练习:完整流程
来,咱们走一遍完整的流程,加深印象:
- 创建一个文件
test.txt,内容随意。 - 用
ipfs add添加它,记下CID。 - 用
ipfs cat验证内容。 - 用
ipfs get下载到另一个文件名。 - 用
ipfs pin add固定它。 - 用
ipfs pin ls确认固定成功。 - 手动运行
ipfs repo gc,观察输出。 - 再次用
ipfs cat访问文件,确认它还在(因为被固定了)。
做完这八步,你就掌握了IPFS最核心的日常操作。说实话,这些命令我每天都要用好几遍,已经形成肌肉记忆了。你多用几次,也会一样的。
下一节,我们会深入IPFS的底层数据结构——Merkle DAG。理解了它,你才能真正明白CID是怎么算出来的,以及为什么IPFS能做到内容寻址。准备好了吗?