一、什么是IPFS
1. 定义
星际文件系统
IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。使数据访问的速度更快、更安全、更健壮、更持久。由Juan Benet在2014年5月份发起
一句话概括:IPFS是一种点对点的超媒体文件存储、索引、交换协议。
2. 特点
- 内容可寻址(区别于位置寻址): ==通过文件的哈希值进行索引==
- 版本管理功能==(永远告别404,只要上传过,就一定会存在==):
- 点对点超媒体(P2P)
3. 定位
下一代互联网技术,替代http
4. http存在的问题
- 内容无法永久保存 404
- 浪费资源
- 效率低
- 不安全
二、安装配置IPFS
1.点击https://dist.ipfs.io/#go-ipfs,访问下载对应版本。执行./install.sh
2.解压go-ipfs_v0.4.14_windows-amd64.zip到你的目录中,会生成一个go-ipfs的文件夹,
3此时可以通过执行ipfs version检查是否初始化成功
4.执行完 ipfs init,生成本机ID
5. 若需修改存储原则:
1.修改存储空间为10G,打开文件后,修改StorageMax
字段:
vi .ipfs/config
2.修改存储位置
//修改.ipfs中的config文件
ipfs config edit
//修改Ipfs默认村粗位置,windows需要配置到环境变量中的用户变量中
export IPFS_PATH=/path/to/ipfsrepo
三、ipfs命令
1.启动服务
当前节点已经创建成功,但是尚未和ipfs系统联系起来,我们需要运行ipfs服务,将本地节点链接至ipfs网络。
ipfs daemon
若只想使用ipfs网络,不想和网络交互,则使用:
ipfs daemon --offline
在启动服务后,可以输入http://127.0.0.1:5001/webui查看本节点信息
2 添加文件数据(add)
add
命令表示向ipfs
网络添加数据,这里的数据包括文件
或者文件夹
,通过-r
选项来控制
执行添加动作:
[duke ~/ethStudy/ipfsTest]$ ipfs add helloItcast.txt
added QmPcaCGWxVkqwX2UxkS8i8RjXMhsfCYdrPb54vAArzd7Wd helloItcast.txt
[duke ~/ethStudy/ipfsTest]$
此时,该文件会被添加到本地ipfs节点中,且会返回一个唯一标识这个文件内容的哈希值。
注意,ipfs只根据文件内容进行识别存储,如果文件名字不同,但是内容相同,那么ipfs不会重复添加,且会返回上一个文件的
我们会发现,返回的哈希值和源文件是同一个。
3. 查看文件内容(cat)
ipfs提供cat参数来进行文件的读取,操作如下:
ipfs cat QmPcaCGWxVkqwX2UxkS8i8RjXMhsfCYdrPb54vAArzd7Wd
4. 添加文件夹(add -r)
ipfs相同文件内容上传的时候如果发现已经存在了,就不会重复上传
相同的文件会在不同的节点有多个备份,放在缓存中
该命令与添加文件相同, 只不过需要额外指定一个参数-r
,即递归(recursive),操作如下:
[duke ~/ethStudy/ipfsTest]$ ipfs add -r testFolder/
added QmXuTGSdFrTHWbpNzjGTkPsAU6nzUMq6jH28mxNFA1Ymdx testFolder/animals.txt
added QmcyYJGUmYYWxK2DWPbGRcxL875ZRmCHyHcSkcyhNT7Jzd testFolder/cars.txt
added QmURkBHop38X7BxL1NTo57H96gvEBmjZ2DqfJRz8AjKtht testFolder
[duke ~/ethStudy/ipfsTest]$
可以看到,文件夹和里面的文件都生成了各自的哈希值,对于文件的查看,与上面的相同,
5. 查看文件夹内容(ls)
我们直接查看一下文件夹,指定该文件夹哈希值,效果如下:
[duke ~/ethStudy/ipfsTest]$ ipfs cat QmURkBHop38X7BxL1NTo57H96gvEBmjZ2DqfJRz8AjKtht
Error: this dag node is a directory
我们会发现有错误出现,这是因为对于文件夹不能使用cat
命令,而应该使用ls
命令,这个ls
参数可以使得ipfs上的数据像unix的文件系统一样展示,重新测试一