随着IPFS的ICO临近,关注的人越来越多,是时候整理一篇文章介绍ipfs了
简介
在2014年,IPFS协议利用比特币区块链协议和网络基础设施的优势来存储不可更改的数据,移除网络上的重复文件,以及获取存储节点的地址信息——用以搜索网络中的文件。
IPFS(InterPlanetary File System),星际文件系统,使用对等超媒体分发协议,将IPFS网络中的电脑通过协议连接成一个分布式文件系统。简单来讲,用户在访问文件时,不再基于域名地址的URI去寻找,而是直接寻找这个文件内容的地址,这个地址就是IPFS系统生成的内容文件的哈希值,通过这个唯一的哈希值就可以找到网络上存储了文件的电脑,并快速下载。这样就不再依赖于中心化的域名服务器和数据服务器分发数据,而是通过网络上千千万万的电脑去查找需要的数据。这样就不需要验证用户的的身份,而只需要验证内容的的哈希,使得网页的速度更快,更安全,更健壮,更持久。
上面说到IPFS是一个文件系统,那如何把自己的文件加入这个文件系统呢?只需要通过添加命令将本地磁盘的文件添加到ipfs,生成文件的哈希值;启动本地的ipfs服务,就可以全球访问这个文件了。
安装
Windows安装
下载:https://dist.ipfs.io/#go-ipfs
下载Windows的对应版本zip文件,然后解压,将ipfs.exe所在文件夹添加到环境变量。
命令行测试ipfs:
>ipfs help
成功显示ipfs帮助信息,就表示安装成功了。
Linux安装
下载:https://dist.ipfs.io/#go-ipfs
——复制文件链接,执行wget
> wget https://dist.ipfs.io/go-ipfs/v0.4.10/go-ipfs_v0.4.10_linux-amd64.tar.gz
——解压ipfs:
> tar -xzvf go-ipfs.tar.gz
——将ipfs文件移动到系统的可执行目录
> go-ipfs/ipfs /usr/local/bin/ipfs
——查看ipfs是否可以使用:
> ipfs help
至此,ipfs就可以正常使用了
使用IPFS
1 初始化本地仓库
> ipfs init
查看自己生成的ID,这个ID就是你所属的全球唯一的ID啦
> ipfs id
2 查看本地节点信息
初始化之后就生成了一个节点ID,根据提示,执行提示的命令开始使用,类似这样:
> ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme
还可以使用这些命令查看其他内容:
> ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/about
> ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/help
> ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/security-notes
> ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/quick-start
3 添加文件到本地节点
- 添加文件
> ipfs add test.text
- 删除文件
> ipfs pin rm QmSoASxb8aNVGk3pNWpZvXEZTQKxjGeu9bvpYHuo5bP1VJ
- 回收垃圾
> ipfs repo gc
再次执行命令时就可以看到没有什么可以删除了
4 走,去线上
启动daemon进程开启线上模式
> ipfs daemon
然后打开一个新的terminal,执行以下命令
查看本地节点仓库状态
> ipfs repo stat
可以看到,在线时本地的节点仓库会快速同步数据,不断增长;
查看连接到本地的节点列表
> ipfs swarm peers
(节点列表非常大,不附图了)
打开浏览器
浏览器访问 http://localhost:5001/webui
从下图中可以看到了连接到本地节点的列表
文件搜索
在文件列表中选择初始化的文件夹:
然后通过文件的哈希值进行全网搜索:
在浏览器中就可以看到搜索到的文件的原始内容了
文件请求过程:
当你发送请求寻找一个文件时,网关会请求DHT(分布式哈希地址表),如果这个文件在你自己的机器上,就会先找到你的电脑注册在网络上的哈希地址,然后请求这个哈希地址下你想要的文件,你的电脑把文件发送到网关,然后网关把你的文件发送到你的浏览器。
(DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。)
ipfs常用命令:
- 查看本地节点初始目录中的文件
> ipfs file ls /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/
或者
> ipfs ls /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/
- 查看本地的已经存储的所有文件
> ipfs pin ls
- 查看某个文件的内容:
ipfs cat QmSoASxb8aNVGk3pNWpZvXEZTQKxjGeu9bvpYHuo5bP1VJ
- 使用ipfs commands可以看到所有的可用命令:
> ipfs commands
- 查看引导节点列表
> ipfs bootstrap list
- 查看本地ipfs仓库的状态
> ipfs repo stat
- 给本地节点中添加文件
> ipfs add test.txt
- 从本地节点中删除文件
> ipfs pin rm QmSoASxb8aNVGk3pNWpZvXEZTQKxjGeu9bvpYHuo5bP1VJ
然后执行垃圾回收命令,就删除文件了
> ipfs repo gc
其他命令参考文档
总结一下,IPFS就是一个将文件存储在世界各地的文件系统,可以不需要中心化域名服务器直接从对方磁盘上下载内容,实现分布式的web,甚至代替http,这样节约了带宽,并能够防止DDoS攻击。去中心化的文件系统可以降低中心化服务器数据丢失的风险。过不了多久,想找音乐,图片,视屏,大概就不需要访问各种网站了吧,IPFS可以更快地搜索,访问和下载。