IPFS 学习笔记(三)IPFS初探-基本操作

2018-05-24  本文已影响0人  kamiSDY

下载与安装

一般有三种安装方式:go-ipfs

  1. 直接在此下载二进制文件并移入/usr/local/bin/中;
  2. 使用sudo snap install ipfs IPFS- snap安装
  3. 从源码编译--官方github的方法--使用go get或者直接download进行make install

这里我们采用第一种,下载官方编译后的版本,然后进行安装:

初步使用-创建ipfs节点&启动服务

  1. 在用户根目录创建 .ipfs
  2. 在目录下 ipfs init初始化一个ipfs node节点(类似于本地仓库)
  3. ipfs id :查看节点属性
  1. 修改节点配置需要
export EDITOR=/usr/bin/subl  //初始化一个编辑器
ipfs config edit
  1. 启动IPFS节点服务器:ipfs daemon
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
  1. 验证服务访问情况
ipfs cat /ipfs/{nodeid}/readme
  1. 查看WebUI
http://localhost:5001/webui
  1. 查看相关命令
ipfs —help

注意访问是否需要屏蔽防火墙

运维和使用:

  1. 添加file

但是现在官网还没有加入,所以无法通过http://ipfs.io/ipfs/hash 进行访问。 这是ipfs网络的官方网关-文件浏览器。在没有打开daemon时,添加是无效的。打开ipfs daemon,然后在添加file。是可以在官网进行访问的。(当然前提是你的daemon能够和官方网关在同一个网络中,你懂的。这个后面的文章会涉及)

  1. 添加文件夹
    同时我们可以在IPFS的根目录中创建文件夹,然后将文件进行移动。
    cp不会改变hash。但是mv会改变hash的寻址。
    这里只是在ipfs的文件系统(并不是local文件系统中的ipfs根目录)创建目录。然后可以在这个目录底下创建文件。
  1. 添加文件
    ipfs add -r path
    他会产生一个目录hash和这个目录下所有文件的hash。访问文件的方式:

如果修改目录下的内容,则需要持续更改IPFS目录的hash。我们可以用IPNS进行解决统一目录访问的问题。
其可以允许我们的节点的域名空间引用一个IPFS hash,也就是说我们可以通过节点ID对项目根目录的IPFS HASH进行绑定,以后我们访问内容站点时直接通过节点·ID访问即可,当我们更新内容时,重新发布到IPNS`即可。

进阶

  1. 添加文件
    使用-w filename,添加的文件会返回两行
[root@VM_0_12_centos ipfs_test]# echo "hello1" | ipfs add -w 
added QmUgAgTVxq7UeY3Tbumz72fBsSvkUnveEgEkWvVquEvJVV QmUgAgTVxq7UeY3Tbumz72fBsSvkUnveEgEkWvVquEvJVVadded
QmYPQAaaw5mVxwT8iZ1wc7d6k5hD7cHhqCyQH81toPK7Rs

结果的第一行就是添加文件的hash,第二行就是包装这个文件的一个目录的hash。
-w指令的航意就是让ipfs创建一个文件的内容以及包裹文件内容的目录(含有这个文件)。
ipfs ls hash可以看到指定的hash的目录和文件信息,添加-v参数可以将头部信息进行打印。
其本质上就是列出这个目录(hash)关联的所有文件。
Tips 有人会疑惑:“那不是一个目录就一个文件?”。其实我们在添加文件的时候,可以用空格进行分割,同时添加多个文件。这样就能够在一个directory下有很多的文件了。同时我们可以在add的时候使用-r,同时在该目录下创建多级目录。这样我们就能够添加一个多层级的目录结构。而且目录有hash,文件有hash。例如:

[root@VM_0_12_centos ipfs_test]# ipfs add -wr file2.txt file1.txt test
added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN file1.txt
added QmQTJqBR6pXws7ustXUexbs1S49qzXR47DbwRHLkB3qJPe file2.txt
added Qmair6VNFLJMAH69E5TJBei3NNiJRWPnxXo3BA31j7oXf9 test/file1.txt
added QmWANm4FeobTEHg5P2pwwiraPJktZi7ikb75H62gXshqFj test/file2.txt
added Qmd5m5ZJ6yMpYt6UUooJAHv5SbckrAGkEzMcmKHvyH7p4V test
added QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7

[root@VM_0_12_centos ipfs_test]# ipfs ls -v QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7
Hash                                           Size Name
QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 14   file1.txt
QmQTJqBR6pXws7ustXUexbs1S49qzXR47DbwRHLkB3qJPe 18   file2.txt
Qmd5m5ZJ6yMpYt6UUooJAHv5SbckrAGkEzMcmKHvyH7p4V 160  test/

[root@VM_0_12_centos ipfs_test]# ipfs ls -v Qmd5m5ZJ6yMpYt6UUooJAHv5SbckrAGkEzMcmKHvyH7p4V
Hash                                           Size Name
Qmair6VNFLJMAH69E5TJBei3NNiJRWPnxXo3BA31j7oXf9 23   file1.txt
QmWANm4FeobTEHg5P2pwwiraPJktZi7ikb75H62gXshqFj 31   file2.txt

这里要注意的ifps catipfs ls,前者访问针对文件,后者访问针对目录。
不过可以通过路径与文件名的形式访问文件。例如:

[root@VM_0_12_centos ipfs_test]# ipfs cat QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7/file1.txt
hello
[root@VM_0_12_centos ipfs_test]# ipfs cat QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7/test
Error: this dag node is a directory
[root@VM_0_12_centos ipfs_test]# ipfs cat QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7/test/file1.txt
hell,,,,asdfas
[root@VM_0_12_centos ipfs_test]# ipfs cat QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7/Qmd5m5ZJ6yMpYt6UUooJAHv5SbckrAGkEzMcmKHvyH7p4V/file1.txt
Error: no link named "Qmd5m5ZJ6yMpYt6UUooJAHv5SbckrAGkEzMcmKHvyH7p4V" under QmWQqDLTsXwygeBQvxhY2d21RWiZiGbGS95S4qggSMDBy7
[root@VM_0_12_centos ipfs_test]# ipfs cat Qmd5m5ZJ6yMpYt6UUooJAHv5SbckrAGkEzMcmKHvyH7p4V/file1.txt
hell,,,,asdfas

这里做了一些测试:

同时,如果添加不同的文件名,但是内容相同的文件呢?

[root@VM_0_12_centos ipfs_test]# cat file1.txt > file3.txt
[root@VM_0_12_centos ipfs_test]# ipfs add file1.txt
added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN file1.txt
[root@VM_0_12_centos ipfs_test]# ipfs add file3.txt
added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN file3.txt

我们可以看到ipfs并不关心文件名,只关心内容。如果加上-w呢?

[root@VM_0_12_centos ipfs_test]# ipfs add -w file1.txt                          added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN file1.txt
added QmUs71TZY6Vy47vYrgu5baJwfGQNpMQKeHE2eAn3k2r5kv
[root@VM_0_12_centos ipfs_test]# ipfs add -w file3.txt
added QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH file3.txt
added QmXc7dSBQGCxPuB8pSVtKpGvqTB7afv9KB1zGNCzCH2rhA

我们看到,如果添加了索引目录的话,ipfs就会将其视为两个文件。并且分配不同的hash。但是具体存储的时候是否存了两份?这个我们等到源码分析的时候再看。

参考链接

上一篇 下一篇

猜你喜欢

热点阅读