注:以下所有操作均在CentOS 6.8 x86_64位系统下完成。

IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,被认为是最有可能取代HTTP的新一代互联网协议,关于IPFS的更多介绍可参考:IPFS官网

#准备工作#

在下载IPFS之前可能需要“科学上网”,详见:Centos安装Shadowsocks+安装Privoxy+配置SSH使用代理

#安装IPFS#

这里我们直接下载其官方编译好的版本(Prebuilt Package)。

# wget https://dist.ipfs.io/go-ipfs/v0.4.14/go-ipfs_v0.4.14_linux-amd64.tar.gz
# tar zxf go-ipfs_v0..14_linux-amd64.tar.gz
# mv go-ipfs /usr/local/

配置环境:

# vim /etc/profile
...
export IPFS_HOME=/usr/local/go-ipfs
export PATH=$PATH:IPFS_HOME
...
# source /etc/profile
# ipfs version
ipfs version 0.4.

可以看到IPFS已经安装成功。

#使用IPFS#

一、创建IPFS节点

# ipfs init
initializing IPFS node at /root/.ipfs
generating -bit RSA keypair...done
peer identity: QmTW4AoQABDBxQwa4fn5yEqhAKXx2fyFXkksy6LQuDQWK1
to get started, enter:
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

这个时候默认会在~/目录下创建一个.ipfs的目录,里面包含了配置文件信息等。可以自由进行修改(比如可以把默认的10GB存储空间改小点):

# vim /root/.ipfs/config
...
"Datastore": {
"StorageMax": "10GB",
...
},
"Addresses": {
"Swarm": [
"/ip4/0.0.0.0/tcp/4001",
"/ip6/::/tcp/4001"
],
...
}
...

也可以自己选择指定的IPFS目录:

# mkdir -p /data/ipfs
# vim /etc/profile
...
export IPFS_PATH=/data/ipfs
...
# source /etc/profile
# ipfs init
generating -bit RSA keypair...done
peer identity: QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T
to get started, enter:
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

这里将IPFS目录改为/data/ipfs。

二、查看节点ID

# ipfs id
{
"ID": "QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T",
"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdpn...",
"Addresses": null,
"AgentVersion": "go-ipfs/0.4.14/",
"ProtocolVersion": "ipfs/0.1.0"
}

这里可以看到QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T就是当前节点的ID值,每个节点都有一个唯一的ID值。

三、跨域资源共享

# ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
# ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

四、启动服务器

当前IPFS节点虽然创建成功,但还没有启动加入到IPFS网络,外面无法访问,需要启动服务器:

# ipfs daemon &
Initializing daemon...
Swarm listening on /ip4/127.0.0.1/tcp/
Swarm listening on /ip4/172.18.167.60/tcp/
Swarm listening on /p2p-circuit/ipfs/QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T
Swarm announcing /ip4/127.0.0.1/tcp/
Swarm announcing /ip4/172.18.167.60/tcp/
API server listening on /ip4/127.0.0.1/tcp/
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/
Daemon is ready

五、新增文件

我们可以将本地的一个文件添加到IPFS网络中:

# pwd
/root
# vim foo.txt
...
# cat foo.txt
Hello World # ipfs add foo.txt
added QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u foo.txt
# ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
Hello World

这个时候我们已经将一个文件foo.txt添加到当前的IPFS节点中,并且可以通过生成的唯一哈希值QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u来查看该文件内容,接下来我们需要将其同步到IPFS网络中:

# ipfs daemon &
Initializing daemon...
...
Daemon is ready

我们试着在本地浏览器打开地址(https://ipfs.io/ipfs/QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u)查看文件:

可以看到文件已经成功地同步到了IPFS网络中。

六、新增文件夹

接下来我们可以在IPFS的根目录下创建文件夹,并且可以将foo.txt文件cp或mv到新创建的文件夹中。

# ipfs files mkdir /foo
# ipfs files cp /ipfs/QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u /foo/foo.txt
# ipfs files ls /
foo
# ipfs files ls /foo
foo.txt
# ipfs files read /foo/foo.txt
Hello World

可以看到我们已经成功地将该文件cp到了一个foo的新建目录下,接下来我们尝试在本地创建一个目录并将其上传到IPFS网络中:

# mkdir bar
# vim bar/bar.txt
# cat bar/bar.txt
Hello World
# ipfs add -r bar/
added QmShGj2c1Qe2wQKMUNMx45EPoKsJmwewojrE1ETzXggUFG bar/bar.txt
added QmepZ8kfqvfDgLtaA7jiCZowXsgn63bKxJLS5NPNiqU2A9 bar

我们试着在本地浏览器打开地址(https://ipfs.io/ipfs/QmepZ8kfqvfDgLtaA7jiCZowXsgn63bKxJLS5NPNiqU2A9)查看文件夹:

学习IPFS的更多相关文章

  1. IPFS学习-IPNS

    星际名称系统(IPNS)是一个创建个更新可变的链接到IPFS内容的系统,由于对象在IPFS中是内容寻址的,他们的内容变化将导致地址随之变化.对于多变的事物是有用的.但是很难获取某些内容的最新版本. 在 ...

  2. IPFS学习-哈希

    Hashes 哈希函数是接受一些任意输入并返回固定长度值的函数.具体值取决于所使用的给定哈希算法,例如SHA-1(GIT在使用),SHA-256,或者是BLAKE2,但是给予一个输入使用哈希算法总是返 ...

  3. IPFS学习-DNS链接

    DNSLink 什么是DNS链接 DNS链接使用DNS TXT记录映射域名(如ipfs.io)到一个IPFS地址.因为你可以编辑自己的DNS记录,可以使他们总是指向最新版本的IPFS中的对象(如果修改 ...

  4. IPFS学习-内容标识符(CIDs)

    内容标识符(CIDs) 内容标识符也称为CID,是用于指向IPFS中材料的标签. 它不会指示内容的存储位置,但会根据内容本身形成一种地址. CID简短,无论其基础内容的大小如何. CID基于内容的加密 ...

  5. IPFS学习-分布式哈希表DHT

    Distributed Hash Tables(DHT) 分布式哈希表是一个分布式的键值对存储结构.在IPFS网络中,每一个节点都维护一个DHT的子集.当节点接受到一个请求.该节点要么直接回复,要么通 ...

  6. Merkle Tree学习

    /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为接触时间不长,对Merkle Tree的理解也不是 ...

  7. IPFS家族(一)

    IPFS这个项目其实很大,并不像大家想象的是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页.让我们来简单看一下IPFS家族成员. 协议实验室的主页:https: ...

  8. 一场IPFS引领下的共享之风正在走向区块链

    中国互联网的高速发展 已经接近10年,小编完整的经历这个过程.这一切我们从一个小网站 饭否 说起... 互联网 2006年3月16:Twitter上线 2007年5月12:  饭否上线 饭否是中国第一 ...

  9. 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)

    第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...

随机推荐

  1. python内置函数之vars()

    vars([object]) 返回__dict__属性的值.当不传入参数时,和locals()等效.当函数接收一个参数时,参数可以是模块.类.类实例,或者定义了__dict__属性的对象. >& ...

  2. App Extension的脱壳办法

    App Extension的脱壳办法 从app store下载的app和app extension是加过密的,可以通过otool查看: $ otool -l binary_name | grep cr ...

  3. 纯css3实现的鼠标悬停动画按钮

    今天给大家带来一款纯css3实现的鼠标悬停动画按钮.这款按钮鼠标经过前以正方形的形式,当鼠标经过的时候以动画的形式变成圆形.效果图如下: 在线预览   源码下载 实现的代码. html代码: < ...

  4. [网络]Linux一些网络知识

    今天刚搬到新家,ubuntu一启动,无线网络又连不上了,之前就是大费周折才搞好的,于是又花了两小时才搞好. 下面就先来了解一些基础知识: 1. ifconfig输出的eth0/lo/wlan0分别代表 ...

  5. 常用的easyui使用方法

    -------datagrid 1.获取某行的行号(row)tdg.datagrid('getRowIndex',rows)2.通过行号移除该行tdg.datagrid('deleteRow',ind ...

  6. IoC最大的好处是什么

    IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有 ...

  7. 整理混乱JS代码。

    一. 拷贝到MyEclipse的js文件 内然后 Ctrl+Shift+F 自动格式化代码. 二.百度搜索 :格式化js.

  8. 如今就报名上海ORACLE用户组2014年高峰论坛吧!

    COLLABORATE 14 – SHOUG Forum 上海ORACLE用户组2014年高峰论坛报名本次活动由ORACLE ACS高级服务部门与 SHOUG 上海ORACLE用户组合办. 大会议程包 ...

  9. 线程本地变更,即ThreadLocal-->Spring事务管理

    我们知道Spring通过各种模板类降低了开发者使用各种数据持久技术的难度.这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突.我们使用模板类访问底层数据,根据持久化技术 ...

  10. Linux GCC编译使用动态、静态链接库 (转)

    原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.s ...