用Kubo工具在IPFS上存取文件
阿牛哥 Lv4

要在ipfs网络上存取文件,除了使用带有图形界面的应用程序之外,还有一堆命令行工具可供使用。本文将介绍官方的Kubo工具的使用方法。文章翻译自Basic CLI Operations,英语好的同学请自行查看),英语好的同学请自行查看。

安装Kubo

直接到Kubo的Github仓库下载最新版。

初始化

要在ipfs上存取文件,必须要在本地建立节点。

首先初始化本地目录,在本地建立一个存储ipfs文件的仓库。

1
ipfs init

执行命令后,会得到这样的输出:

1
2
3
4
5
6
initializing ipfs node at /Users/<user>/.ipfs
generating 2048-bit RSA keypair...done
peer identity: Qm...
to get started, enter:

ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

然后,启动节点:

1
ipfs daemon

将会得到这样的输出:

1
2
3
4
5
6
Initializing daemon...
Kubo version: 0.12.0
Repo version: 12
System version: arm64/darwin
[...]
Daemon is ready

这个命令将会保持运行,直到你主动停止它为止。一点关闭,你的节点将会下线,所以我们要开一个新的命令行窗口继续。

添加文件

现在你的节点已经在运行了,我们可以像ipfs添加文件了。

  1. 在命令行中切换到你要上传文件的目录,这里我们切换到~/Documents目录
1
cd ~/Documents
  1. 我们列出目录中的内容,以确保我们是在~/Documents中:
1
ls

输出:

1
hello-ipfs.txt

我们用ipfs add命令将文件添加到ipfs中:

1
ipfs add hello-ipfs.txt

会得到类似这样的输出:

1
2
added QmRgR7Bpa9xDMUNGiKaARvFL9MmnoFyd86rF817EZyfdGE hello-ipfs.txt
6 B / 6 B [==========================================================] 100.00

我们已经把文件上传到ipfs了,它已经可以共享给其他节点了。

获取文件

上一小节我们演示了如何将文件添加到ipfs。接下来我们将从ipfs获取文件并将其保存到电脑里。在本例中,我们将获取一个包含文本文件的目录。

  1. 切换到希望下载文件的目标目录,本例中,我们进入~/Documents 目录。
1
cd ~/Documents 

为了从ipfs获取内容,我们需要告诉ipfs daemon内容的CID,本例中,CID是:bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a。

使用ipfs get命令获取内容:

1
ipfs get bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a

输出:

1
2
Saving file(s) to bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a
1.76 KiB / 1.76 KiB [==============================================] 100.00% 0s

我们已经获取到了这个目录,并且已经保存到了本地,同时,你的节点也会向其他需要的人提供这些文件。

查看文件

我们可以通过ipfs cat查看文件的内容,我们将用该命令查看刚刚获取的目录。这个命令也可以直接查看还未下载到本地的文件。

1
ipfs cat bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a

输出:

1
Error: this dag node is a directory

之所以出错是因为ipfs cat只对文件有效,而我们提供的是一个目录。

为了查看目录,可以用这个命令ipfs refs

1
ipfs refs bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a

输出:

1
bafkreig24ijzqxj3cxdp6yh6ia2ysxzvxsfnd6rzahxxjv6ofcuix52wtq

返回的是目录中的文件。然后可以使用ipfs cat

1
ipfs cat bafkreig24ijzqxj3cxdp6yh6ia2ysxzvxsfnd6rzahxxjv6ofcuix52wtq

输出:

ipfs cat

注意ipfs cat只能显示文本文件的内容。

pin文件

对于ipfs,没有执行过pin的文件只会被临时存储,过一段时间,文件就会被自动清除掉,所以我们需要对想长期保存的文件pin操作:

1
ipfs pin add bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a

输出:

1
pinned bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a recursively

删除pin文件

对于已经pin过的文件,也可以取消pin。

列出pin文件:

1
ipfs pin ls

输出:

1
2
3
4
5
6
7
8
9
QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB indirect
QmQGiYLVAdSHJQKYFRTJZMG4BXBHqKperaZtyKGmCRLmsF indirect
QmU5k7ter3RdjZXu3sHghsga1UQtrztnQxmTL22nPnsu3g indirect
QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn recursive
QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y indirect
QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y indirect
QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm indirect
QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc recursive
QmQy6xmJhrcC5QLboAcGFcAE1tC8CrwDVkrHdEYJkLscrQ indirect

这里列出了CID,可是你不知道和文件的对应关系。我们可以执行ipfs add来查看文件的CID:

1
2
cd ~/Documents
ipfs add hello-ipfs.txt

输出:

1
2
added QmRgR7Bpa9xDMUNGiKaARvFL9MmnoFyd86rF817EZyfdGE hello-ipfs.txt
6 B / 6 B [==========================================================] 100.00

rm删除:

1
ipfs pin rm QmRgR7Bpa9xDMUNGiKaARvFL9MmnoFyd86rF817EZyfdGE

输出:

1
unpinned QmRgR7Bpa9xDMUNGiKaARvFL9MmnoFyd86rF817EZyfdGE

这样hello-ipfs.txt文件就被从pin中删除了,要立即从本地清理掉该文件,执行:

1
ipfs repo gc

输出:

1
2
3
4
removed bafybeif2ewg3nqa33mjokpxii36jj2ywfqjpy3urdh7v6vqyfjoocvgy3a
removed bafkreieceevgg2auxo4u3rjgeiqfr4ccxh6ylkgxt2ss6k2leuad5xckxe
removed bafkreiblcvcr7letdbp2k2thkbjyunznrwq3y6pyoylzaq4epawqcca2my
[...]

这样,文件就和你的ipfs节点没任何关联了。

参考: Basic CLI Operations