在上一篇文章介绍了IPFS要做什么, 本篇文章介绍下IPFS怎么用, 按照本站的风格,我不会仅仅把一个个命令列出来,同时会说明命令在后面为我们做了什么。

IPFS 安装

要使用IPFS, 第一步肯定是先把IPFS安装好,IPFS在Mac OS X 、Linux及Window平台均有提供, 可以通过这个链接下载对应平台可执行文件的压缩包。

对于Mac OS X 及 Linux 平台,使用一下命令进行安装:

$ tar xvfz go-ipfs.tar.gz

$ cd go-ipfs

$ ./install.sh

上面先使用tar 对压缩包进行解压,然后执行install.sh 进行安装,安装脚本install.sh其实就是把可执行文件ipfs移动到$PATH目录下。安装完成之后,可以在命令行终端敲入ipfs试试看,如果显示一堆命令说明,则说明IPFS安装成功。

在Windows平台也是类似,把ipfs.exe移动到环境变量%PATH%指定的目录下。

IPFS 基本用法

IPFS初始化

安装完成之后,要使用IPFS第一步是要对IPFS进行初始化,使用ipfs init进行初始化

> ipfs init

initializing ipfs node at /Users/Emmett/.ipfs

generating 2048-bit RSA keypair...done

peer identity: QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva

to get started, enter:

ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

上面是执行命令即对应输出,在执行ipfs init进行初始化时,会有一下行为:

生成一个秘钥对并产生对应的节点id, 即命令提示:peer identity后面的hash值。

节点的id用来标识和连接一个节点,每个节点的id是独一无二的, 因此大家看到的提示也会和我的不一样。

在当前用户的主目录(~ 目录)下产生一个.ipfs 的隐藏目录,这个目录称之为库(repository)目录,ipfs 所有相关的数据都会放在这个目录下。

如同步文件数据块放在.ipfs/blocks 目录,秘钥在.ipfs/keystore 目录,ipfs配置文件为:.ipfs/config。

IPFS 配置修改

在IPFS初始化之后,可以根据需要修改配置(可选),修改方法如下:

cd ~/.ipfs

export EDITOR=/usr/bin/vim

ipfs config edit

或者直接编辑 ~/.ipfs/config 文件。

上传文件到IPFS

我们先创建一个upchain.pro.txt文件,可以使用如下方式:

> echo "登链学院:区块链教育领先品牌" >> upchain.pro.txt

ipfs 使用add 命令来添加内容到节点中, 在命令行输入:

> ipfs add upchain.pro.txt

added QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi upchain.pro.txt

43 B / 43 B [=====================================================] 100%

当它文件添加到节点时,会为文件生成唯一的hash: QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi, 可以使用ipfs cat 查看文件的内容:

> ipfs cat QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi

登链学院:区块链教育领先品牌

注意,此时文件仅仅是上传在本地的IPFS节点中,如果需要把文件同步到网络,就需要开启 daemon 服务, 使用命令:

> ipfs daemon

Initializing daemon...

go-ipfs version: 0.4.18-

Repo version: 7

System version: amd64/darwin

Golang version: go1.11.1

Swarm listening on /ip4/127.0.0.1/tcp/4001

Swarm listening on /ip4/192.168.8.105/tcp/4001

Swarm listening on /ip6/2408:84f3:82e:cfcd:409:fee2:e261:4dc3/tcp/4001

Swarm listening on /ip6/2408:84f3:82e:cfcd:a9c6:116b:349f:8c2b/tcp/4001

Swarm listening on /ip6/2408:84f3:82e:cfcd:ec89:145d:cf27:4/tcp/4001

Swarm listening on /ip6/::1/tcp/4001

Swarm listening on /ip6/fd1d:43b:e89b:eb9b:c405:56af:8f52:67df/tcp/4001

Swarm listening on /p2p-circuit

Swarm announcing /ip4/127.0.0.1/tcp/4001

Swarm announcing /ip4/192.168.8.105/tcp/4001

Swarm announcing /ip6/2408:84f3:82e:cfcd:409:fee2:e261:4dc3/tcp/4001

Swarm announcing /ip6/2408:84f3:82e:cfcd:a9c6:116b:349f:8c2b/tcp/4001

Swarm announcing /ip6/2408:84f3:82e:cfcd:ec89:145d:cf27:4/tcp/4001

Swarm announcing /ip6/::1/tcp/4001

Swarm announcing /ip6/fd1d:43b:e89b:eb9b:c405:56af:8f52:67df/tcp/4001

API server listening on /ip4/127.0.0.1/tcp/5001

Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080

Daemon is ready

开启 daemon 之后,Swarm 就会尝试连接其他的节点,同步数据,同时在本地还会开启两个服务:API服务及Web网关服务,下面分别介绍下:

API服务,默认在5001端口,可以通过 http://localhost:5001/webui 进行访问,界面如:

这也是IPFS的一个Web版的管理控制台, 可以通过这个控制台添加文件,查看节点连接情况等等。

网关服务,默认在8080端口, 由于当前浏览器还不支持通过IPFS协议(ipfs://)来访问文件,如果我们要在浏览器里访问文件的话,就需要借助于IPFS 提供的网关服务,由浏览器先访问到网关,网关去获取IPFS网络杀过了的文件。 有了网关服务,就可以通过这个链接:http://localhost:8080/ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi 来访问刚刚上传到ipfs 的文件。

上传目录到IPFS

我们先创建一个文件夹upchain, 并把之前的 upchain.pro.txt 放进目录。

> mkdir upchain

> mv upchain.pro.txt upchain

上传目录到IPFS 需要在使用 add 命令时加上 -r ,如下:

> ipfs add -r upchain

added QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi upchain/upchain.pro.txt

added QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP upchain

43 B / 43 B [===========================================================================] 100.00%

在上传时文件夹,文件夹也会生成一个对应的hash,可以通过hash后接文件名来进行访问, 如:

>ipfs cat QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP/upchain.pro.txt

登链学院:区块链教育领先品牌

在浏览器可以链接:http://127.0.0.1:8080/ipfs/QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP/upchain.pro.txt 来访问。

使用IPNS解决文件更新问题

因为IPFS在IPFS中,对一个文件的内容修改后(如升级),会生成一个完全不同的新Hash,使用IPNS就可以利用同一个链接总是指向更新的内容,其实使用也很简单,只需要每次在内容更新之后使用ipfs name publish hash 发布到节点。

例如把upchain.pro.txt发布到节点,使用下面的命令:

> ipfs name publish QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi

Published to QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva: /ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi

命令中的QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi是upchain.pro.txt的hash, 命令提示中的QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva是当前节点id(大家可以回看一个前面ipfs init 的输出)。

发布之后就可以使用http://127.0.0.1:8080/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva 或 https://ipfs.io/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva 来访问upchain.pro.txt的内容,如图:

其实理想下是使用 ipns://QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva 来访问,通过网站还是前面提到的浏览器暂不支持ipfs协议。

现在我们来更新一下upchain.pro.txt 加入文字:"创办人:Tiny熊"

> echo "创办人:Tiny熊" >> upchain.pro.txt

> ipfs add upchain.pro.txt

added QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S upchain.pro.txt

63 B / 63 B [=============================================================] 100.00%

重新发布一下:

> ipfs name publish QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S

Published to QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva: /ipfs/QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S

如果我们要查询 节点id 指向的hash 可以使用 ipfs name resolve 进行查询:

> ipfs name resolve

/ipfs/QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5

有一点值得大家注意: 节点id其实是公钥的hash,它的关联信息是需要经过私钥签名才可以发布,因此只有我们自己才可以更新节点的指向。

如果我们有多个站点需要更新,可以新产生一个秘钥对,使用新的key 发布,如:

> ipfs key gen --type=rsa --size=2048 mykey

QmVZvdYEsdfHSR43Qm1fY8eDFrhB3UNZ2oVyEuVUH3VHrg

> ipfs name publish --key=mykey hashxxx

Pinning

Pinning 在IPFS里是一个很重要的概念,当我们每次请求一个网络上的内容的时候,IPFS总是会把内容先同步的本地提供服务,而为了防止 IPFS 存储空间不停增长,实际上使用cache 机制来处理文件, 如果文件在一段时间内没有被使用,文件会被”回收“。 Pinning 的作用就是把文件”钉“住,确保文件在本地不被”回收“。 如果是重要的文件,就可以使用 Pinning 防止文件被删除。

当我们使用ipfs add 添加文件时,默认会进行Pinning(使用其他命令获取的文件不会进行pinning),

IPFS 提供了pin命令进行Pinning操作, 比如我们查询下某一个hash 是否被pin:

> ipfs pin ls QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S

QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S recursive

> ipfs pin ls QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7

Error: path 'QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7' is not pinned

可以使用 pin add 手动钉住一个文件,如:

> ipfs pin add QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7

pinned QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7 recursively

如果要删除pin的状态,使用pin rm , 如:

> ipfs pin rm -r QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7

unpinned QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7

pin rm 的参数 -r 表示递归的删除pin 状态,对于没有pin住的文件, 如果执行GC操作 ipfs repo gc 文件会被删除。

欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。

深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。

ipfs操作mysql_IPFS 使用入门相关推荐

  1. python docx 字体大小_Python操作Word的入门教程

    Python操作Word的入门教程 前言 今天来介绍下,如何用 Python 来操作 Word. 再来介绍操作 Word 之前,先来说一个最近看书学到的法则,即 3W 法则. 3W:3W分别指 Wha ...

  2. python操作word详细操作_Python操作Word的入门教程

    Python操作Word的入门教程 前言 今天来介绍下,如何用 Python 来操作 Word. 再来介绍操作 Word 之前,先来说一个最近看书学到的法则,即 3W 法则. 3W:3W分别指 Wha ...

  3. pythonmysql数据分析_Python操作Mysql数据库入门——数据导入pandas(数据分析准备)...

    原标题:Python操作Mysql数据库入门--数据导入pandas(数据分析准备) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求 ...

  4. python处理word_Python操作Word的入门教程

    Python操作Word的入门教程 前言 今天来介绍下,如何用 Python 来操作 Word. 再来介绍操作 Word 之前,先来说一个最近看书学到的法则,即 3W 法则. 3W:3W分别指 Wha ...

  5. 屏通触摸屏软件操作手册_屏通人机界面软件操作手册快速入门版.pdf

    屏通人机界面软件操作手册快速入门版 PM Designer 触控大师 屏 通 人 机 界 面 软件操作手册 快速入门版 0 目 录 第一章 PM Designer触控大师软件简介3 1.1 软件功能介 ...

  6. python 操作 zookeeper 快速入门

    python 操作 zookeeper 快速入门 文章目录 python 操作 zookeeper 快速入门 什么是zookeeper python 操作 zk 快速入门 zk节点 创建节点 查询节点 ...

  7. MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门

    [引言] 毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的.再加上MongoDB的频繁升级.重大更新等等,导致菜鸟学习的难度增大. 好 ...

  8. C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。

    我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础. 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用20 ...

  9. sql如何进行脱敏操作_股市入门基本知识丨大阳线出现后如何进行短线操作

    点击蓝色字体 关注我们 带来更多精彩 当大阳线出现的时候,往往预示着机会即将到来,所以,当其出现的时候,我们应当以短线操作策略牢牢把握住它,不要消极等待.今天我们主要了解下在大阳线出现之后,投资者应该 ...

最新文章

  1. mongodb的几种启动方法
  2. 订购后如何限制Oracle查询返回的行数?
  3. echarts散点图使用
  4. poj 1703(种类并查集)
  5. ITK:双边过滤图像
  6. 有图有真相!这世界上,竟有人跟你长得一模一样!
  7. D3 svg text标签控制
  8. 前端页面使用ace插件优化脚本
  9. JPYXGSIT故障解决方案
  10. 《Python 100例》练习,基于Python 3.5做了一遍
  11. 威联通 Qnap PK 群晖 Synology 安全篇3
  12. 谷歌访问英文网站翻译为中文
  13. IT大学生成长周报 | 第 6 期
  14. 新冠疫情历史数据可视化分析
  15. 第一次在Vue项目中播放m3u8格式视频遇到的问题和解决方法
  16. java for无限循环
  17. tensorflow官方Blog-使用Keras Tuner超参数优化框架 进行超参数调整 ,具体实现版本
  18. 推荐8个优质生产力工具,让你效率升级!
  19. iOS中视频播放的学习
  20. 热血传奇技术的一些基础知识

热门文章

  1. Oracle 19c 新特性:Schema Only Account详解
  2. 【社招持续篇】云和恩墨虚位以待,你来不来!
  3. 带你掌握java反序列化漏洞及其检测
  4. 天呐,这群“员工”的业务能力太强了
  5. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
  6. 鲲鹏性能优化十板斧(四)——磁盘IO子系统性能调优
  7. java 并发协作控制
  8. 代数学笔记2: 域扩张(二)
  9. 一分钟关闭百度的搜索热点和相关人物
  10. WORD限制别人只能填写窗体而不能修改文档其他内容?