《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE
HACK #21FUSE
本节将介绍使用用户进程的文件系统框架—FUSE。
FUSE概要
FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架。使用FUSE,就可以以一般应用程序进程的形式生成独特的文件系统,与已有的文件系统同样进行挂载。从Linux 2.6.14开始实际安装FUSE。
例如,在最近的Linux发布版中,有一些标准配置用于挂载Windows的文件系统NTFS的ntfs-3g(Ubuntu等)。当连接到存在NTFS格式文件系统的分区表所在的磁盘时,经由gvfs挂载。此时,使用FUSE安装到用户空间的ntfs-3g开始将NTFS文件系统挂载到用户的目录树。
此外还有ZFS on FUSE。ZFS适用的是CDDL这个与GPL没有互换性的许可证。因此它不能整合到拥有GPL许可证的Linux内核中。在这种情况下,使用FUSE安装ZFS,从而能够使用ZFS文件系统,就是ZFS on FUSE。一旦启动zfs-fuse守护进程(demon),就可以使用zfs或zpool命令进行ZFS的操作。
安装FUSE文件系统
libfuse就是用于简单安装使用FUSE的独特文件系统的标准库。例如,安装并读入专用的文件系统时,只需要生成下列4个功能。
getattr 获取文件属性
readdir 获取目录条目
open 打开文件
read 读入文件
卸载
使用FUSE挂载的文件系统,可以使用fusermount命令来卸载。
$ fusermount -u 挂载点
使用FUSE的文件系统
这里将介绍使用从普通发布版中可以获取的FUSE的文件系统。
sshfs
将可以把SSH远程登录的机器的目录挂载到本地机器上,在与远程服务器频繁进行文件交换时非常便利。例如,将remote主机的admin用户的foo目录挂载到本地的~/remote-foo时,命令行如下。类似一般的SSH,同样要求输入密码。
$ sshfs hshimamoto@remote:foo ~/remote-foo
在此之后,对本地机器的~/remote的foo目录进行的处理就是对远程机器remote的foo目录的处理。
fuseiso
挂载ISO映像文件。一般挂载ISO映像时是使用loopback设备进行挂载的,但有时普通用户权限是无法操作loopback设备的。另外loopback设备还存在可利用次数的限制。
使用fuseiso,就可以很简单地将ISO映像挂载到自己的文件系统,并参照其内容。
# fuseiso foo.iso ~/iso
encfs
加密文件系统。用户将特定目录加密,然后挂载将该目录解密后的文件系统。
已加密的文件(目录)名和内容通过文件系统生成时指定的算法加密,但需要注意的是,目录中的文件数或文件大小、属性等不会因为加密而修改。
命令示例如下。创建目录enc-foo,并挂载为dec-foo。
$ mkdir ~/enc-foo
$ mkdir ~/dec-foo
$ encfs ~/enc-foo ~/dec-foo
首次挂载加密目录时,将进行加密的初始设置。将显示如下信息,输出用来进行加密设置的提示符。
生成新的加密卷标。
Please choose from one of the following options:
enter "x" for expert configuration mode,
enter "p" for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?>
针对详细的设置这里不作介绍。直接按【Enter】键,使用默认设置。
Standard configuration selected.
设置已完成。生成下列属性的文件系统:
文件系统加密算法:"ssl/aes",版本3:0:2
Filename encoding: "nameio/block", version 3:0:1
键大小:192位
Block Size: 1024 bytes
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
File holes passed through to ciphertext.
Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism. However, the password can be changed
later using encfsctl.
新的Encfs密码:
确认Encfs密码:
再设置用来加密、解密的密码就完成了。尝试在dec-foo目录下创建文件。
$ vi ~/dec-foo/bar.txt
$ cat ~/dec-foo/bar.txt
Hello Encfs!!
卸载dec-foo后,就难以用普通的方法来参照这个加密目录。
$ fusermount -u ~/dec-foo
看一下enc-foo目录,可以发现由于已经加密,因此内容不是文本,而是二进制数据。
$ ls enc-foo/
QQJqAaAW-hx1QiWGH8fRHplZ
$ file enc-foo/QQJqAaAW-hx1QiWGH8fRHplZ
enc-foo/QQJqAaAW-hx1QiWGH8fRHplZ: data
再次使用encfs命令进行挂载时,这次只要求输入密码。
$ encfs ~/enc-foo ~/dec-foo
EncFS密码:
$ ls dec-foo/
bar.txt
$ cat dec-foo/bar.txt
Hello Encfs!!
小结
本节介绍了FUSE,还介绍了一些使用FUSE的便捷文件系统。此外可能还有其他使用FUSE的文件系统。
参考文献
Documentation/filesystems/fuse.txt
FUSE(http://fuse.sourceforge.net/)
—Hiroshi Shimamoto
《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE的更多相关文章
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核
HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》目录
1章 内核入门HACK #1 如何获取Linux内核HACK #2 如何编译Linux内核HACK #3 如何编写内核模块HACK #4 如何使用GitHACK #5 使用checkpatch.pl检 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap
HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap.ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备.对要换出(swapout)的页面进行 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块
HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构—内核模块的编写方法.内核模块Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #20 使用fio进行I/O的基准测试
HACK #20 使用fio进行I/O的基准测试 本节介绍使用fio进行模拟各种情况的I/O基准测试的操作方法.I/O的基准测试中有无数需要考虑的因素.是I/O依次访问还是随机访问?是通过read/w ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #17 如何使用ext4
HACK #17 如何使用ext4 本节介绍ext4的编写和挂载方法.开发版ext4的使用方法.ext4是ext3的后续文件系统,从Linux 2.6.19开始使用.现在主要的发布版中多数都是采用ex ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #16 OOM Killer的运行与结构
HACK #16 OOM Killer的运行与结构(1) 本节介绍OOM Killer的运行与结构. Linux中的Out Of Memory(OOM) Killer功能作为确保内存的最终手段,可以在 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #14 虚拟存储子系统的调整
HACK #14 虚拟存储子系统的调整 本节介绍如何使用/proc进行虚拟存储子系统的调整.虚拟空间存储方式在Linux上向应用程序分配内存时,是通过以页面为单位的虚拟存储方式进行的.采用虚拟存储方式 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #13 使用Block I/O控制器设置I/O优先级
HACK #13 使用Block I/O控制器设置I/O优先级 本节介绍使用Block I/O控制器的功能设置I/O优先级的方法.Block I/O控制器可以将任意进程分组,并对该分组设置I/O的优先 ...
随机推荐
- magento如何安装语言包
1,先下安装,直接在www.magento.com(搜索chinese)官网获得下载密钥,然后在下载站点输入密钥就可以下载,下载完成后的安装包放到app/local文件夹下即可,到后台刷新一下: 2线 ...
- TJU Problem 2857 Digit Sorting
原题: 2857. Digit Sorting Time Limit: 1.0 Seconds Memory Limit: 65536KTotal Runs: 3234 Accepted ...
- 微信小程序开发过程中出现问题及解答
1.wx.uploadFile上传图片,控制台抛出错误"uploadFile:fail Error:Hostname/IP doesn't match certificate's altna ...
- listening for variable changes in javascript
https://stackoverflow.com/questions/1759987/listening-for-variable-changes-in-javascript
- Java JDK 版本的区别
jdk6和jdk5相比的新特性有: 1.instrumentation 在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument.本地代码 ...
- NTLM 了解
NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容.Windo ...
- php empty详解
判断字符串是否为空,可以这么判断: if ($value=="") ... * 格式:bool empty ( mixed var ) * 功能:检查一个变量是否为空 ...
- npm bower gulp
npm即nodejs package manager ,是nodeJs的包管理工具,使用前需安装nodeJs(https://www.npmjs.com.cn/getting-started/inst ...
- Linux 性能工具安装部署
docker 一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡 在yum的ELRepo源中,有mainline(4.5) ...
- 检索关键字 nyoj
检索关键字 时间限制: 1000ms 内存限制: 65536KB 64位整型: Java 类名: 上一题 提交 运行结果 统计 讨论版 下一题 类型: 没有 没有 难度 ...