日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python画画bup_用Python编写一个简单的FUSE文件系统的教程

發布時間:2024/1/8 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python画画bup_用Python编写一个简单的FUSE文件系统的教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你是我的長期讀者,那么你應該知道我在尋找一個完美備份程序,最后我寫了一個基于bup的我自己的加密層。

在寫encbup的時候,我對僅僅恢復一個文件就必須要下載整個巨大的檔案文件的做法不甚滿意,但仍然希望能將EncFS和 rdiff-backup一起使用來實現可遠程掛載、加密、去重、版本化備份的功能。

再次試用obnam 后(啰嗦一句:它還是慢的出奇),我注意到了它有一個mount命令。深入研究后,我發現了fuse-python和fusepy,感覺用Python寫一個FUSE文件系統應該挺簡單的。

聰明的讀者可能已經意識到了我接下來要做的事情:我決定用Python寫一個加密文件系統層!它與EncFS會非常相似,但也有一些重要的區別:

它默認以反向模式運行,接收正常的文件并且暴露一個被加密的目錄。任何備份程序會發現(并且備份)這些加密的目錄,不需要任何其它的存儲。

它也能接受由一個目錄列表組成的配置文件,并且在掛載點將這些目錄暴露出來。這樣的話,所有的備份腳本就需要將掛載點備份,各種不同的目錄會立刻得以備份。

它會更偏重于備份,而不是加密存儲。寫起來應該會挺有意思的。

一個FUSE文件系統示例

寫這個腳本的第一步是寫出一個純粹的傳遞式的文件系統。它僅僅是接受一個目錄,并在掛載點將其暴露出來,確保任何在掛載點的修改都會鏡像到源數據中。

fusepy 要求你寫一個類,里面定義了各種操作系統級別的方法。你可以選擇定義那些你的文件系統想要支持的方法,其他的可以暫時不予定義,但是我需要定義全部的方法,因為我的文件系統是一個傳遞式的文件系統,它應該表現的與原有的文件系統盡可能一致。

寫這段代碼會非常簡單有趣,因為大部分的方法只是對os模塊的一些簡單封裝(確實,你可以直接給它們賦值,比如 open=os.open 等等,但是我的模塊需要一些路徑擴展)。不幸的是,fuse-python有一個bug(據我所知)是當打開和讀文件的時候,它無法將文件句柄回傳給文件系統。因而我的腳本不知道某個應用執行讀寫操作時對應的是哪個文件句柄,從而導致了失敗。只需要對fusepy做極少的改動,它就可以很好地運行。它只有一個文件,所以你可以把它直接放到你的工程里。

代碼

在這里,我很樂意給出這段代碼,當你打算自己實現文件系統的時候可以拿來參考。這段代碼提供了一個很好的起點,你可以直接把這個類復制到你的工程中并且根據需要重寫里面的一些方法。

接下來是真正的代碼了:

#!/usr/bin/env python

from __future__ import with_statement

import os

import sys

import errno

from fuse import FUSE, FuseOSError, Operations

class Passthrough(Operations):

def __init__(self, root):

self.root = root

# Helpers

# =======

def _full_path(self, partial):

if partial.startswith("/"):

partial = partial[1:]

path = os.path.join(self.root, partial)

return path

# Filesystem methods

# ==================

def access(self, path, mode):

full_path = self._full_path(path)

if not os.access(full_path, mode):

raise FuseOSError(errno.EACCES)

def chmod(self, path, mode):

full_path = self._full_path(path)

return os.chmod(full_path, mode)

def chown(self, path, uid, gid):

full_path = self._full_path(path)

return os.chown(full_path, uid, gid)

def getattr(self, path, fh=None):

full_path = self._full_path(path)

st = os.lstat(full_path)

return dict((key, getattr(st, key)) for key in ('st_atime', 'st_ctime',

'st_gid', 'st_mode', 'st_mtime', 'st_nlink', 'st_size', 'st_uid'))

def readdir(self, path, fh):

full_path = self._full_path(path)

dirents = ['.', '..']

if os.path.isdir(full_path):

dirents.extend(os.listdir(full_path))

for r in dirents:

yield r

def readlink(self, path):

pathname = os.readlink(self._full_path(path))

if pathname.startswith("/"):

# Path name is absolute, sanitize it.

return os.path.relpath(pathname, self.root)

else:

return pathname

def mknod(self, path, mode, dev):

return os.mknod(self._full_path(path), mode, dev)

def rmdir(self, path):

full_path = self._full_path(path)

return os.rmdir(full_path)

def mkdir(self, path, mode):

return os.mkdir(self._full_path(path), mode)

def statfs(self, path):

full_path = self._full_path(path)

stv = os.statvfs(full_path)

return dict((key, getattr(stv, key)) for key in ('f_bavail', 'f_bfree',

'f_blocks', 'f_bsize', 'f_favail', 'f_ffree', 'f_files', 'f_flag',

'f_frsize', 'f_namemax'))

def unlink(self, path):

return os.unlink(self._full_path(path))

def symlink(self, target, name):

return os.symlink(self._full_path(target), self._full_path(name))

def rename(self, old, new):

return os.rename(self._full_path(old), self._full_path(new))

def link(self, target, name):

return os.link(self._full_path(target), self._full_path(name))

def utimens(self, path, times=None):

return os.utime(self._full_path(path), times)

# File methods

# ============

def open(self, path, flags):

full_path = self._full_path(path)

return os.open(full_path, flags)

def create(self, path, mode, fi=None):

full_path = self._full_path(path)

return os.open(full_path, os.O_WRONLY | os.O_CREAT, mode)

def read(self, path, length, offset, fh):

os.lseek(fh, offset, os.SEEK_SET)

return os.read(fh, length)

def write(self, path, buf, offset, fh):

os.lseek(fh, offset, os.SEEK_SET)

return os.write(fh, buf)

def truncate(self, path, length, fh=None):

full_path = self._full_path(path)

with open(full_path, 'r+') as f:

f.truncate(length)

def flush(self, path, fh):

return os.fsync(fh)

def release(self, path, fh):

return os.close(fh)

def fsync(self, path, fdatasync, fh):

return self.flush(path, fh)

def main(mountpoint, root):

FUSE(Passthrough(root), mountpoint, foreground=True)

if __name__ == '__main__':

main(sys.argv[2], sys.argv[1])

如果你想要運行它,只需要安裝fusepy,把這段代碼放進一個文件(比如myfuse.py)然后運行 python myfuse.py /你的目錄 /掛載點目錄 。你會發現 “/你的目錄” 路徑下的所有文件都跑到”/掛載點目錄”,還能像用原生文件系統一樣操作它們。

結語

總的來說,我并不認為寫一個文件系統就這么簡單。接下來要做的是在腳本里添加加密/解密的功能,以及一些幫助類的方法。我的目標是能讓它除了有更好的擴展性(因為是用Python寫的),以及包含一些針對備份文件的額外特性外,可以成為一個EncFS的完全替代品。

如果你想跟進這個腳本的開發過程,請在下面訂閱我的郵件列表,或者在Twitter上關注我。一如既往的歡迎反饋(在下面評論就很好)。

總結

以上是生活随笔為你收集整理的python画画bup_用Python编写一个简单的FUSE文件系统的教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美日韩在线视频 | 日本三级大片 | 亚洲成人精| av在线第一页 | 亚洲人成小说 | 韩国美女福利视频 | 视频在线观看电影完整版高清免费 | 台湾极品xxx少妇 | 91看黄| 久久免费小视频 | 男人的天堂aa| 天天干夜夜看 | 亚洲不卡中文字幕 | 日本十八禁视频无遮挡 | 夜夜摸视频网 | 国产精品一区二区三区免费视频 | 国产精品国产三级国产aⅴ浪潮 | 偷偷久久| 国产精品51麻豆cm传媒 | 好吊色一区二区三区 | 亚洲第一伊人 | 国产精品18p | 日韩av综合| 国产性猛交╳xxx乱大交一区 | 免费成年人视频在线观看 | av射进来| 亚洲国产精品一区二区尤物区 | 亚洲av综合一区二区 | 欧美日韩爱爱 | 午夜67194 | 免费av在线播放 | 美日韩免费 | 国语对白自拍 | 中国大陆一级毛片 | 亚洲天堂一区 | 日本午夜一区二区三区 | 色婷婷中文| 久久国产柳州莫菁门 | 成人黄色短视频在线观看 | 国产在线播放网站 | 日韩精品视频免费播放 | 亚洲国产精品一区二区久久hs | 日韩图片区 | 91久久精 | 日韩簧片在线观看 | 久久av在线播放 | 狠狠涩 | 一区二区三区欧美在线 | 亚洲综合色吧 | 91玉足脚交白嫩脚丫 | 日本美女一级视频 | 伊人成人在线观看 | 日本成人在线免费观看 | 自拍偷拍国产视频 | 高清久久久久久 | 麻豆传媒映画官网 | 又粗又大又硬又长又爽 | 91原创视频| 亚洲激情区 | 97视频一区| 午夜精品极品粉嫩国产尤物 | 黄色毛毛片 | 三级影片在线播放 | 欧美成片vs欧美 | 精品成人网 | 中文字幕第十一页 | 久久精品3 | 99热这里只有精品5 国产精品伦子伦免费视频 精品一二三 | 亚洲一级片| 日本在线高清视频 | 日日夜夜噜 | 雪花飘电影在线观看免费高清 | 欧美成人一区在线观看 | 亚洲精选中文字幕 | 小视频黄色 | 制服.丝袜.亚洲.另类.中文 | 欧美一级鲁丝片 | 校花被c到呻吟求饶 | 黄色一级大片在线免费看国产 | 91丨porny丨刺激 | 好吊日在线| 91调教视频 | 亚洲鲁鲁 | 青青草原成人网 | 天堂免费av| 91视频xxx| 国产欧美在线精品日韩 | 青娱乐在线播放 | 亚洲一卡一卡 | 国产乱大交| 亚洲精品第二页 | 一级黄色片在线播放 | 国产情侣呻吟对白高潮 | 激情婷婷在线 | 国产999久久久 | 亚洲午夜视频在线 | 国产清纯白嫩初高中在线观看性色 | 国产一区日韩 | 中国av一区 |