对IPFS中,有这样一个误解----认为存储在其中的文件是永久保存的。实际上并不是这样,存储在IPFS中的文件只在某种特殊状态下才会被一直保存,这个特殊状态就是“Pin”。

“Pin”是IPFS中一个非常重要的概念。IPFS试图让用户认为系统中的每个文件都像是在本地一样-----“要获得这个文件得从远处的服务器下载”这样的感觉是要尽量避免的。

在IPFS中常用的“ipfs cat”或“ipfs get”命令执行起来是不分文件存放的位置的。尽管这已经很好了,但有时用户还希望能把某些文件或数据放在离自己更“近”的地方。

“Pin”就是这样一种机制,它让用户告诉IPFS系统总是把文件在本地保留一个备份。

IPFS的缓存机制是比较激进的,在这种机制的作用下,通常当用户对某个文件执行了某种操作后,系统会将该文件在本地保留,但只在本地保留很短的一段时间,因为它会被IPFS的垃圾清理机制所清理掉。

IPFS的这种垃圾清理机制每隔一段时间会清理一些被视为“垃圾”的文件。

为了防止保存在本地的文件被垃圾清理机制清理掉,用户就要用到“pin”的功能了。在默认状况下通过“ipfs add”的文件会被循环地“pin”住,以保证它们不被清理。

具体的命令如下:

将文件“foo”添加到IPFS中:

echo "ipfs rocks" > foo

ipfs add foo

注意,这里将“foo”文件添加到IPFS后,会产生一个该文件的哈希值。这个哈希值后面会用到。

列举所有被pin的文件:

ipfs pin ls --type=all

将“foo”文件从被“pin”文件中移走:

ipfs pin rm

ipfs pin rm -r

注意,这里“foo hash”的意思是“foo”文件的哈希值。

检查“foo”文件是否还在被“pin”文件列表中:

ipfs pin ls --type=all

pin的状态有三种:

在上面的命令中,可能你已经注意到了“ipfs pin rm”是不能执行的,运行这个命令后,系统会提示用户,foo文件的哈希值被“循环pin”住了。

这是什么意思呢?在IPFS中有三种“pin”的状态。

- 直接pin(Direct Pin),这种pin只会pin一个数据块,其它与这个数据块相关的数据块都不会被pin。

- 循环pin(Recursive Pin),这种pin会pin一个数据块以及这个数据块所有的子块。

- 简介pin(Indirect Pin),这种pin会pin这个数据块的父块。

当一个文件或数据被pin后,垃圾清理器是不能清理它的,不信可以试试下列命令:

首先添加foo文件(默认该文件会被pin):

ipfs add foo

运行垃圾清理器清理垃圾:

ipfs repo gc

检查该文件是否还存在:

ipfs cat

但是如果文件“foo”不再是pin的状态了(变成了unpinned)。

将foo文件从被pin文件中拿掉,使其状态变为unpinned

ipfs pin rm -r

运行垃圾清理器:

ipfs repo gc

查看该文件是否还存在于IPFS中:

ipfs cat

这时我们会发现不是pin状态的foo文件被垃圾清理器删掉了。

参考链接:

https://docs.ipfs.io/how-to/pin-files/#three-kinds-of-pins

arm中的.a文件如何产生的_如何在IPFS中Pin一个文件?相关推荐

  1. linux中python如何调用matlab的数据_?如何在Python中加入多个数据帧?

    全文共2235字,预计学习时长7分钟 来源:Pexels 初学Python编程的人,面临的是各种未知的挑战. 下面是一个几乎让所有更有抱负的数据科学家都感到意外的场景: 你正在处理一个从多个源收集数据 ...

  2. git 还原文件到其他版本_如何在Git中还原旧文件版本

    git 还原文件到其他版本 读: 第1部分:什么是Git? 第2部分:Git入门 第3部分:创建第一个Git存储库 第4部分:如何在Git中还原旧文件版本 第5部分:3个用于Git的图形工具 第6部分 ...

  3. python中不可以使用类名访问的是_如何在Python中访问当前执行的模块或类名?

    我想能够从导入的模块中动态地检索当前执行的模块或类名.这是一些代码: foo.py: def f(): print __name__ bar.py: from foo import f def b() ...

  4. excelexportentity中设置null不显示的方法_如何在 Creator3D 中切换模型贴图,超级简单!...

    效果预览 前两天有伙伴在 QQ 上询问,如何在 Creator 3D 中切换模型贴图.Shawn 之前也没尝试过,不过根据之前 Cocos Creator 的经验以及这几天对 Creator 3D 的 ...

  5. python中斜杠加引号什么意思_如何在Python中转义反斜杠和单引号或双引号?

    你是怎么做到的 如果你的"长字符串"是从文件中读取的(正如你在评论中提到的),那么你的问题是误导性的.因为你显然不完全理解逃逸的工作原理,所以你写下的问题可能与你真正的问题不同. ...

  6. java中如何检查字符串都是数字_如何在Java中检查字符串是否为数字?

    我们将检查字符串是否为数字-借助逻辑,我们将解决此问题,第一步,我们将使用一个名为str的字符串变量,并将任何值存储在其中. 在第二步中,我们将使用一个名为str_numeric的布尔变量,该变量存储 ...

  7. hdfs中与file数组类似的数组_如何在 JavaScript 中克隆数组

    作者:Yazeed Bzadough 译者:allen JavaScript 有很多方法可以做任何事情,现在我们研究数组. 1.扩展运算符(浅拷贝) 自从 ES6 发布以来,这一直是最受欢迎的方法.这 ...

  8. arm中的.a文件如何产生的_可变文件系统:如何在IPFS中处理文件?

    IPFS或星际文件系统是一种点对点(P2P)网络协议,用于共享分布式Web上的数据.顾名思义,您可以将IPFS视为文件系统,它具有一些独特的特性,使其成为安全,分散式共享的理想选择. 在这里您可以了解 ...

  9. python移动文件中某个内容_如何在Python中移动文件

    如何在Python中移动文件 我查看了Python $ mv ...接口,但无法找到移动文件的方法. 我如何在Python中执行相当于$ mv ...的操作? >>> source_ ...

最新文章

  1. 阻塞队列之七:DelayQueue延时队列
  2. 实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验
  3. 阿里云肖力:跳过量变过程的安全质变
  4. 袁桂英(帮别人名字作诗)
  5. 信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子
  6. fabric8 java api,kubectl apply -f equivalent in fabric8 java api | 易学教程
  7. SpringMVC Java config freemarker
  8. linux access函数报错,详解汇编语言MOV指令
  9. html5 progressbar,jQuery进度条插件NUMBERPROGRESSBAR
  10. iPhone中BigBoss源添加以及SBSettings安装。
  11. git加速 用谷歌浏览器插件
  12. 安全芯片的功能是什么
  13. windows2012R2安装python3.x版本报错0x80240017
  14. android获取wifi开关,Android WiFi开发(一)--WiFi开关与状态监听
  15. Qt经典蓝牙系列四(经典蓝牙客户端的设计 纯Qt代码) android/windows10
  16. java离群值,R从数据框中按组别移除离群值
  17. 广告业务系统 之 数据中转站 —— “日志中心-实时服务监控”
  18. 【pandas 类库】
  19. 《Cortex-CM3权威指南》——Cortex-CM3基础
  20. 微信特殊字符php,php 获取微信昵称时 过滤特殊字符

热门文章

  1. 新手村之BOSS战-入门综合练习2
  2. 362. Design Hit Counter
  3. Prototype(原型模式)
  4. 三行代码实现冒泡排序算法
  5. 使用Mondrian Virtual OLAP Cube 实现星座模型并在saiku展现分析
  6. UBUNTU安装 SSH 服务
  7. c# https请求
  8. 结队编程1-四则运算(107、120)
  9. Android相关笔记-4
  10. asp.net后台程序动态加载js或样式表