《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的优先 ...
随机推荐
- OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏
//再设计一个类的时候,有些方法需要对外公开(接口),有些仅供内部使用. 类的扩展:为类添加新的特征(属性)或者方法 对已知类: 1.直接添加 2.继承(在其子类中添加实例变量和方法) 3.使用ext ...
- Xcode清理垃圾
摘抄自https://blog.csdn.net/hu434587115/article/details/54602449 ~/Library/Developer/Xcode/DerivedData/ ...
- 6.1 socket 长连接、短连接
一般情况下,服务器的长连接和短连接不是服务器说了算,而是客户端说了算.因为服务器是给别人提供业务的,一旦连接建立起来之后,服务器端不会主动把连接给close掉. 客户端发送一笔业务,没有关闭连接,然后 ...
- hdu 5185 dp(完全背包)
BC # 32 1004 题意:要求 n 个数和为 n ,而且后一个数等于前一个数或者等于前一个数加 1 ,问有多少种组合. 其实是一道很水的完全背包,但是没有了 dp 的分类我几乎没有往这边细想,又 ...
- day41 mysql 学习 练习题 重要*****
MySQL 练习题[二1.表如下: 收获和注意点:***** #1 GROUP by 可以放到where s_id in ()条件局后边 GROUP BY s_id having 详见题12 #2 做 ...
- mysql增删查改和alter
盗用两篇文章吧,因为觉得别人总结的已经够好了 http://blog.csdn.net/evankaka/article/details/45580845 http://www.blogjava.ne ...
- 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...
- centos 使用mutt发送邮件带附件
1.安装mutt工具 yum install -y mutt 2.使用mutt发邮件并带附件echo "统计日志" | /usr/bin/mutt -s "统计日志&qu ...
- AngularJS---核心特性
步入正题.学习Angular,首先得了解.熟知.掌握它的四大核心特性. 一.MVC模式 Model(模型):是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据. View( ...
- Redis高速内存缓冲平台可视化监控之RedisLive配置实战
一.引用 这两天在弄Reids高速缓存平台的图形化监控,由于对于Python并不是很熟悉,安装过程中遇到了不少问题,包括: 1.python必备安装包的安装问题 2.Redis Live界面显示问题 ...