IPFS基本使用 您所在的位置:网站首页 ipsf区块链 IPFS基本使用

IPFS基本使用

2024-07-17 21:53| 来源: 网络整理| 查看: 265

ipfs区块链存储 什么是区块链安装IPFSIPFS常用命令基本命令数据结构命令高级命令网络展示工具命令状态查看命令 IPFS基本使用示例:IPFS初始化在服务器上运行ipfs IPFS配置修改IPFS配置打开本地webui控制台 启动IPFS守护进程查看IPFS网络 将文件添加到IPFS1.第一次添加文件2.修改文件后第二次添加 IPFS查看文件在浏览器本地访问IPFS链接:通过IPFS网关访问上传的文件 将目录添加到IPFSIPFS查看目录PIN固定文件文件块 的 5 种 Pin 状态手动PIN(钉住)一个文件查询某个hash是否被pin列出在本地节点上递归固定的所有内容 手动取消PIN(钉住)垃圾回收 使用IPNS绑定节点名0.查看IPFS节点的密钥对1.创建目录及目录下文件2.添加目录到IPFS3.将目录hash发布到节点4.查看目录下的文件内容5.修改目录下的文件内容5.1 将修改后的目录添加到IPFS5.2 pin住目录5.3 发布5.4 查看ipns发布的文件 6.查询节点id指向的hash7.多个站点更新,生成新秘钥对,使用新key发布: DNS 解析从IPFS下载文件到本地磁盘从IPFS中获取对象查找对象引用 备份ipfs本地数据

什么是区块链

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

安装IPFS

安装IPFS主程序: https://blog.csdn.net/omaidb/article/details/107941175

IPFS常用命令

ipfs命令手册

基本命令 参数解释init初始化IPFS本地配置add添加一个文件到IPFScat展示IPFS数据get下载IPFS对象ls从一个对象中列出链接refs从一个对象中列出链接哈希 数据结构命令 参数解释block从数据存储中的原始块交互object与原始DAG节点交互 高级命令 参数解释daemon运行ipfs的守护进程mount挂载一个IPFS只读的挂载点name发布并解析IPFS名字key创建并列出IPFS名字密钥对pin将对象锁定到本地存储 网络展示 参数解释id展示IPFS节点信息bootstrap添加或删除引导文件swarm管理P2P网络连接 工具命令 参数解释config管理配置version展示IPFS版本信息update下载并应用go-ipfs更新commands列出所有可用命令 # 更新ipfs版本 ipfs update install latest # 查看所有ipfs命令 ipfs commands

在这里插入图片描述

状态查看命令 # 显示节点的带宽使用情况,包括上传和下载的数据量 ipfs stats bw

在这里插入图片描述

# 显示节点存储库(repo)的相关统计信息,如存储使用量和对象数量等 ipfs stats repo

在这里插入图片描述

# 显示与 Bitswap 协议相关的统计信息,包括数据块交换和网络流量情况 ipfs stats bitswap

在这里插入图片描述

# 显示 DHT(分布式哈希表)的统计信息,包括路由表大小和查询次数等 ipfs stats dht

在这里插入图片描述

# # 返回有关节点的(重新)提供者系统的统计信息。 ipfs stats provide

在这里插入图片描述

IPFS基本使用示例:

ipfs命令手册

ipfs config:用于配置 IPFS 节点的各种设置,例如网络端口、路由协议和数据存储位置等。ipfs version:显示已安装的 IPFS 版本信息。ipfs help:显示可用命令列表及其用法说明。 IPFS初始化 # # 初始化一个新的 IPFS 仓库 ## 自动创建~/.ipfs 目录,用于保存配置文件和数据存储区域 ipfs init ## --profile=lowpower 节能模式运行,省电但效率低 ipfs init --profile=lowpower # 执行完初始化命令后,会生成一个秘钥对并产生对应的节点id.即ipfs init 下方的peer identity peer identity: 12D3KooWKwagJEtGiwQLRReNqHj5naRsXmD3MWdUWQnV2BcnVAd3 # 节点的id用来标识和连接一个节点,每个节点的id是独一无二的. 在服务器上运行ipfs # 如果服务器上运行,则应使用server配置文件初始化IPFS 。这可以防止IPFS在尝试发现本地节点时创建大量数据中心内部流量: ipfs init --profile server # 生成一个用于 IPFS 群集的加密密钥--非必需 ipfs-swarm-key-gen > ~/.ipfs/swarm.key # 将所有连到我们私有节点的其它节点都断开--非必需 ipfs bootstrap rm --all # 添加其中一台节点的地址到另一台节点的bootstrap列表中 ipfs bootstrap add /ip4/172.16.0.113/tcp/4001/ipfs/${Peer ID(对等节点标识符)} ## 示例 ipfs bootstrap add /ip4/172.16.0.113/tcp/4001/ipfs/QmV7Thb3mjuWa1xDK5UrgtG7SSYFt4PSyvo6CjcnA5gZAg IPFS配置 # 输出配置文件内容 ipfs config show # 打开 $EDITOR 编辑器以编辑配置文件 ipfs config edit # 应用配置文件中的配置文件 ipfs config profile # 使用指定的 文件替换配置文件 ipfs config replace 修改IPFS配置 # 在IPFS初始化之后,可以根据需要修改配置(可选),修改方法如下: # cd到ipfs配置目录 cd ~/.ipfs # 查看该目录下的文件 ls # 得到的结果如下 # api config datastore_spec keystore version # blocks datastore gateway repo.lock

在这里插入图片描述

# 编辑配置文件 vim config #将Addresses节点下的"API": "/ip4/127.0.0.1/tcp/5001"改为 "API": "/ip4/0.0.0.0/tcp/5001" 打开本地webui控制台 http://localhost:5001/webui # 或 http://127.0.0.1:5001/webui 启动IPFS守护进程

screen不间断会话

# 新建一个会话 screen -R ipfs # 启动守护进程 ## 实测并不后台运行,会阻塞终端,所以要用screen ipfs daemon # 开启 daemon 之后,Swarm 就会尝试连接其他的节点,同步数据,同时在本地还会开启两个服务:API服务及Web网关服务,下面分别介绍下: # •API服务,默认在5001端口,可以通过 http://localhost:5001/webui[3] 进行访问,界面如: # •网关服务,默认在8080端口, 由于当前浏览器还不支持通过IPFS协议(ipfs://)来访问文件,如果我们要在浏览器里访问文件的话,就需要借助于IPFS 提供的网关服务,由浏览器先访问到网关,网关去获取IPFS网络杀过了的文件。 有了网关服务,就可以通过这个链接:http://localhost:8080/ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi 来访问刚刚上传到ipfs 的文件。 # ipfs 也提供了官方的网关服务:https://ipfs.io/,[4] 因此也可以通过 https://ipfs.io/ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi[5] (需要访问外国网站)来访问刚刚上传到ipfs 的文件。

在这里插入图片描述

查看IPFS网络

如果您已连接到IPFS网络,则在运行时应该能够看到对等方的IPFS地址:

# 列出当前节点连接的所有对等节点(peers) ipfs swarm peers

在这里插入图片描述

# 查看当前节点的身份信息 ## 查看第一行Peer ID ipfs id

在这里插入图片描述

将文件添加到IPFS # 创建一个txt文件 echo "ipfs文件上传测试" > ipfs文件上传测试.txt # 将txt文件添加到 IPFS 中,并返回唯一的加密哈希值 ipfs add ipfs文件上传测试.txt ## 此时文件仅仅只是上传到本地的IPFS节点中,如果需要把文件同步到网络,就需要开启daemon服务才同步到网络 # 当它文件添加到节点时,会为文件生成唯一的hash: QmPiRCRWGGGkKzm5mqRxq5u2N713ES1XSjPV3WASKFMWGC

在这里插入图片描述

1.第一次添加文件 # 查看ipfs文件pin列表 ipfs pin ls # 查看示范文件内容 cat tmp.txt # 添加示范文件到ipfs ipfs add tmp.txt # 根据tmp.txt的hash查看文件是否钉住 ipfs pin ls hash # 查看ipfs上的tmp.txt文件内容 ipfs cat hash

第1次add的tmp.txt文件的hash是Qmaj4BdgjHVtLvs1K3kYCbptPohyHMp8Mc8dJACC9Lp4bf 在这里插入图片描述 在这里插入图片描述

2.修改文件后第二次添加

在这里插入图片描述

tmp.txt文件修改后,第2次add的tmp.txt文件的hash是QmYfMvnujGaCggxNvnoRvJrcHZ6TU9KpKNwku9Z1nWaDi1 在这里插入图片描述

由此可见:每次修改文件,都会产生一个新的文件hash。 在ipfs中,这是两个完全不同的文件。

在这里插入图片描述

IPFS查看文件 # IPFS查看文件 ipfs cat 文件的hash

在这里插入图片描述

在浏览器本地访问IPFS链接:

http://127.0.0.1:8080/ipfs/QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP 来访问。

通过IPFS网关访问上传的文件 IPFS域名CIDhttps://ipfs.io/ipfs/bafybeicrjwtkwruqdlemanz3vojebx42qrwoqda5yytnfcpftrz4ihfsha

通过下方链接访问刚才上传的PDF电子书目录。 https://ipfs.io/ipfs/bafybeicrjwtkwruqdlemanz3vojebx42qrwoqda5yytnfcpftrz4ihfsha 在这里插入图片描述

将目录添加到IPFS # 将cn字体目录添加到IPFS ## 上传目录时要使用-r 参数 ## -r: 递归地添加目录中的文件 ## -Q: 以静默模式运行,仅返回生成的根哈希,而不显示其他输出 ## -n: 显示每个添加的文件的哈希值 ipfs add -r cn字体

在这里插入图片描述

IPFS查看目录 # 查看目录 ## -v 选项表示“详细模式”,它将显示每个对象的详细信息,包括文件名、大小、哈希值和类型 ipfs ls -v ipfs ls /dirname

在这里插入图片描述

PIN固定文件

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

# 将对象固定到本地节点 ipfs pin add # 查看文件 ipfs ls 文件块 的 5 种 Pin 状态

https://www.jianshu.com/p/4d3844ee4eab

Recursive状态:文件块树被递归添加到pin中,根文件块的状态是Recursive。这意味着,文件及其所有子目录和子文件都被pin,以确保它们一直保留在网络中。这种状态可以通过ipfs pin ls --type=recursive命令来查询。

Direct状态:只有目标文件块添加到pin中,子孙块不做处理,目标文件块的状态就是Direct。这种状态可以通过ipfs pin ls --type=direct命令来查询。

Indirect状态:文件块树被递归添加到pin中,根文件块的状态是Recursive,非根文件块的状态是Indirect。这种状态可以通过ipfs pin ls --type=indirect命令来查询。

Internal状态:IPFS使用文件块来保存pinner状态,这些文件块的状态就是Internal。这种状态通常不需要用户了解,因为它们是IPFS内部使用的。

NotPinned状态:文件块没有被pin,并且在垃圾回收(GC)时会被删除。这种状态可以通过ipfs pin ls --type=not-pinned命令来查询。

需要注意的是,以上状态并不是互斥的。 例如,一个文件块可以同时具有Recursive和Indirect状态。此外,状态的变化可能会在不同的节点之间异步更新,因此状态可能在不同的节点之间存在延迟。

# 查看pin列表 ipfs pin ls

在这里插入图片描述

手动PIN(钉住)一个文件 # 手动钉住一个文件 ipfs pin add QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7

在这里插入图片描述

查询某个hash是否被pin # 下面这个是被pin的 ipfs pin ls QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S

recursive意思是文件已被PIN(钉住) 在这里插入图片描述

这个是没有被PIN的文件示例:

ipfs pin ls QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7 # 没有被PIN的文件回显 Error: path 'QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7' is not pinned 列出在本地节点上递归固定的所有内容 # 已固定到本地存储的所有对象的列表 ipfs pin ls --type=all # 列出在本地节点上递归固定的所有内容 ipfs pin ls --type recursive

在这里插入图片描述

手动取消PIN(钉住) # 删除固定对象pin状态,-r参数是递归删除pin状态 ## ipfs pin rm ipfs pin rm -r 文件hash

在这里插入图片描述

垃圾回收

执行垃圾回收清理未被固定或未被引用的对象,没有钉住的文件会被删除。 释放与这些未固定或未引用的对象相关联的磁盘空间。

# 执行垃圾回收 ipfs repo gc

在这里插入图片描述

使用IPNS绑定节点名

文件传统路径格式:固定的https://ipfs.io/ipfs/固定路径字符串/文件名

每次 add 都会返回不同的哈希,这和传统的固定路径完全不同。

IPNS将多个IPFS哈希值映射到一个可变的、易记的字符串名称上。这个名称可以被用作引用一个特定版本的IPFS内容,而不需要知道其哈希值。

IPNS名称是公钥的哈希,私钥则用来发布签名的名称。 当发布或解析名称时,默认情况下总是使用发布者自身的节点ID,也就是节点 公钥的哈希。

如果您想要引用多个文件或目录,最好使用一个顶层的目录,将所有文件和子目录都包含在其中。

无论修改哪个文件,只需要重新映射该目录第hash即可,外部访问时的hash地址和文件绝对路径不会变化。

IPNS默认有效期是24小时,要保持地址不变,每24小时要发布一次。

0.查看IPFS节点的密钥对 # 查看IPFS节点有哪些密钥对 ipfs key list

在这里插入图片描述

# 查看密钥对详情 ipfs key list -l

默认值:self 在这里插入图片描述 k51qzi5uqu5dgzbpn7kfzn4hsyp1gddc0eqlfq6x2fatlq441cuek0ykrv54ri是这个公钥的IPFS哈希值,后面将固定使用这个哈希值。

1.创建目录及目录下文件 # 创建目录 mkdir doc # 创建子文件1 echo "1.第一次添加文件1测试" > doc/test1.txt # 创建子文件2 echo "1.第一次添加文件2测试" > doc/test2.txt

在这里插入图片描述 在这里插入图片描述

2.添加目录到IPFS # 将doc目录添加到ipfs中 ## 上传目录时要使用-r 参数 ## -r: 递归地添加目录中的文件 ## -Q: 以静默模式运行,仅返回生成的根哈希,而不显示其他输出 ## -n: 显示每个添加的文件的哈希值 ipfs add -r doc/

添加目录到IPFS后复制目录的hash。 在这里插入图片描述

3.将目录hash发布到节点 # 将目录hash发布到节点 ipfs name publish 目录hash

在这里插入图片描述

4.查看目录下的文件内容 ipfs cat /ipns/节点hash/test1.txt

在这里插入图片描述

ipfscat/ipns/IPNS名称哈希值/文件名ipfscat/ipns/k51qzi5uqu5dgzbpn7kfzn4hsyp1gddc0eqlfq6x2fatlq441cuek0ykrv54ri/test1.txtipfscat/ipns/k51qzi5uqu5dgzbpn7kfzn4hsyp1gddc0eqlfq6x2fatlq441cuek0ykrv54ri/test2.txt 5.修改目录下的文件内容

使用IPNS就可以利用同一个链接总是指向更新的内容,其实使用也很简单,只需要每次在内容更新之后使用ipfs name publish hash 发布到节点。

每次修改文件后 add 都会返回不同的哈希,修改前的旧访问地址就没访问了,所以我们需要通过 ipns 来绑定节点名来实现固定地址访问。

使用IPNS就可以利用同一个链接总是指向更新的内容,其实使用也很简单,只需要每次在内容更新之后使用ipfs name publish hash 发布到节点。

# 修改test1.txt文件 echo "1.第一次添加文件1测试;2.第2次修改文件1测试" > doc/test1.txt # 修改test2.txt文件 echo "1.第一次添加文件2测试;2.第2次修改文件2测试" > doc/test2.txt

在这里插入图片描述

5.1 将修改后的目录添加到IPFS # 将修改后的目录添加到IPFS ## 上传目录时要使用-r 参数 ## -r: 递归地添加目录中的文件 ## -Q: 以静默模式运行,仅返回生成的根哈希,而不显示其他输出 ## -n: 显示每个添加的文件的哈希值 ipfs add -r doc

在这里插入图片描述 目录add后的hash值是QmV8y6qauLHd3LprUmtHKEtP3zcrcdriG7oAba9bCxK9MN

5.2 pin住目录 # 将doc目录pin住 ipfs pin add 目录hash 5.3 发布

命令中的QmV8y6qauLHd3LprUmtHKEtP3zcrcdriG7oAba9bCxK9MN是doc目录的hash。

命令提示中的k51qzi5uqu5dgzbpn7kfzn4hsyp1gddc0eqlfq6x2fatlq441cuek0ykrv54ri是当前节点id(大家可以回看一个前面ipfs init 的输出)。

# 把修改后的目录发布到节点,使用下面的命令: # ipfs name publish 文件目录hash ipfs name publish QmV8y6qauLHd3LprUmtHKEtP3zcrcdriG7oAba9bCxK9MN

在这里插入图片描述

发布之后就可以使用http://127.0.0.1:8080/ipns/k51qzi5uqu5dgzbpn7kfzn4hsyp1gddc0eqlfq6x2fatlq441cuek0ykrv54ri

或 https://ipfs.io/ipns/k51qzi5uqu5dgzbpn7kfzn4hsyp1gddc0eqlfq6x2fatlq441cuek0ykrv54ri 来访问doc目录的内容

# 修改文件后记得重新发布一下 ipfs name publish 修改后文件哈希 5.4 查看ipns发布的文件 # 查看文件 ipfs cat /ipns/公钥hash/文件名

在这里插入图片描述

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

在这里插入图片描述

7.多个站点更新,生成新秘钥对,使用新key发布: # 生成新的密钥对 ipfs key gen --type=rsa --size=2048 mykey # QmVZvdYEsdfHSR43Qm1fY8eDFrhB3UNZ2oVyEuVUH3VHrg # 使用新密钥发布 ipfs name publish --key=mykey hashxxx DNS 解析

IPFS 允许用户使用现有的域名系统,这样就能用一个好记的地址来访问文件了,比如:

# 通过域名解析 ipfs cat /ipns/域名/文件名

只需要在 DNS 解析加入一条 TXT 记录:

记录类型主机记录记录值TXTipfsdnslink=/ipns/QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R 从IPFS下载文件到本地磁盘 # 下载文件并输出文件名为foo2 ipfs get -o foo2 # 对比两个文件 diff foo foo2 从IPFS中获取对象 ipfs object get ipfs object get /foo2 ipfs object --help 查找对象引用

它可以用来列出给定哈希值所引用的所有直接子节点和链接对象的哈希值,或者递归地列出所有子节点和链接对象的哈希值。

# 查找引用对象 ipfs refs ipfs refs -r ipfs refs --help 备份ipfs本地数据

如果要切换电脑,可以自行备份下~/.ipfs目录即可



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有