是否有任何 Python 模块可以让我访问NFS
配额信息而无需解析quota
命令的输出?我知道如果我有足够的动力,我可以使用 Python 的xdrlib
模块编写我自己的 ONC/RPC 代码,但我全心全意地希望我不必如此密切地参与 NFS 的内部。
理想情况下,我希望有一个现有的 RPC 实现,或一些更高级别的模块(如现有 C 库的包装器或其他东西)。
一个可接受的替代品是类似于quota
产生更多机器可读输出的命令。
这个问题最初是由 3.13 版quota
命令的问题引起的,作为最终用户确定配额信息的工具,它本质上是无用的。例如,如果alice
运行quota
,她可能会看到如下输出:
Disk quotas for user alice (uid 100):
Filesystem blocks quota limit grace files quota limit grace
fileserver.example.com:/staff/b/bob
9254720 9728000 10240000 119768 0 0
爱丽丝理所当然地想知道这与她的帐户有什么关系。
事实证明,该quota-utils
软件包背后的思想终于意识到了该工具固有的问题。对于 4.00 版(在 Fedora 16 中可用),有几个可用的新选项可以将quota
命令变成实际产生有用信息的东西。
特别感兴趣的是以下-f
选项:
-f, --filesystem-list display quota information only for given filesystems
所以现在,用户可以运行:
quota -f ~
并获取其主目录的配额信息。此外,该-s
选项将显示“人类可读”数字,而不是将所有内容显示为块。
对于 Alice,这可能看起来像:
$ quota -s -f ~
Disk quotas for user alice (uid 100):
Filesystem blocks quota limit grace files quota limit grace
fileserver.example.com:/staff/a/alice
9038M 9500M 10000M 120k 0 0
此外,还有两个选项可以更轻松地处理quota
脚本中的输出:
-w
当“文件系统”名称太长时,该选项禁止换行。-p
选项。0
这意味着始终存在相同数量的字段(而先前版本的quota
字段数量可能会因情况而异)。结合以上所有内容,我们得到如下内容:
$ quota -wp -f ~
Disk quotas for user alice (uid 100):
Filesystem space quota limit grace files quota limit grace
fileserver.example.com:/staff/a/alice 9254720 9728000 10240000 0 119768 0
这对自动化更有用。
command_array = ['quota', '-wp', '-f', '/home/nfs/user1']
output = subprocess.check_output(command_array)
# use only the third line, this is util info
beauty_output = output.split('\n')[2].split()
remote_fs = beauty_output[0]
blocks = beauty_output[1]
quota = beauty_output[2]
limit = beauty_output[3]
...
考虑 /home/nfs/user1 是 nfs 挂载点。我已经这样做了。