Raku-native disk space 用法
Raku-native disk space usage
目的:
- 保存一个将数据写入磁盘的程序,避免徒劳地尝试写入已满的文件系统;
- 节省带宽(无处可存请不要下载);
- 节省用户和程序员的时间和精力(将问题通知他们,而不是让他们通过阅读误导性的错误消息和“为什么这个软件不起作用!”而撕毁他们的头发)。
问题分为两部分:
- 报告存储space统计信息(可用、已用、总计等),所有文件系统或相关路径所属文件系统的统计信息。
- 报告 运行 上的文件系统错误,共 space。
第 1 部分
请分享 NATIVE Raku 替代品 (TIMTOWTDIBSCINABTE "Tim Toady Bicarbonate") 至:
raku -e 'qqx{ df -P $*CWD }.print'
这里,raku
-e
xecutes df
(disk free) excutes df
(disk free) external program via shell quoting with interpolation qqx{}
, feeding -P
ortable-format 参数和 $*CWD
当前工作目录,然后 .print
是 df
的输出。
代码段最初被写成 raku -e 'qqx{ df -hP $*CWD }.print'
— -h
uman-readable 和 -P
ortable — 但事实证明它不是无处不在的有效命令。 In OpenBSD 7.0,它退出并出现错误:df: -h and -i are incompatible with -P
。
为了增加人类可读性,您可以考虑 Number::Bytes::Human module
raku -e 'run <<df -hP $*CWD>>'
如果您只是在 STDOUT 上输出 df
给您的内容,则无需执行任何操作。
<< >>
是双引号,所以$*CWD
会被插值
第 1 部分 - 报告存储 space 统计数据
没有用于报告存储 space 统计信息的内置函数。选项包括:
编写 Raku 代码(几行),使用 NativeCall
调用特定于平台/文件系统的系统调用(例如 statvfs()
)并使用该系统返回的信息打电话。
使用合适的 Raku 库。 FileSystem::Capacity
为您挑选并运行一个外部程序,然后以可移植的形式提供其结果数据。
使用run
(或类似的1)来调用特定的外部程序,例如df
.
使用Inline::*
foreign language adaptor启用调用外国PL的解决方案来报告存储space统计信息,并使用它提供的信息。2
第 2 部分 - 报告 运行 共 space
Raku 似乎整齐地报告No space left on device
:
> spurt '/tmp/failwrite', 'filesystem is full!'
Failed to write bytes to filehandle: No space left on device
in block <unit> at <unknown file> line 1
> mkdir '/tmp/failmkdir'
Failed to create directory '/tmp/failmkdir' with mode '0o777': Failed to mkdir: No space left on device
in block <unit> at <unknown file> line 1
(程序员需要避免丢弃这些异常。)
脚注
1 run
运行外部命令 不涉及 shell。这保证消除了涉及 shell 的风险。也就是说,Raku 还支持使用 shell(因为在某些情况下这会很方便和合适)。请参阅问题下的评论交流(例如 ) for some brief discussion of this, and the shell
doc 风险摘要:
All shell metacharacters are interpreted by the shell, including pipes, redirects, environment variable substitutions and so on. Shell escapes are a severe security concern and can cause confusion with unusual file names. Use run
if you want to be safe.
2 Raku 的外语适配器(Inline::
名称space 中的 Raku 模块)允许 Raku代码使用其他语言编写的代码。这些适配器不是 Raku 语言标准的一部分,而且大多数都勉强处于实验状态,如果是这样的话,但相反,最好的适配器状态良好,允许 Raku 代码使用外国库,就像它们是为 Raku 编写的一样。 (截至 2021 年 Inline::Perl5
是最完美的。)
目的:
- 保存一个将数据写入磁盘的程序,避免徒劳地尝试写入已满的文件系统;
- 节省带宽(无处可存请不要下载);
- 节省用户和程序员的时间和精力(将问题通知他们,而不是让他们通过阅读误导性的错误消息和“为什么这个软件不起作用!”而撕毁他们的头发)。
问题分为两部分:
- 报告存储space统计信息(可用、已用、总计等),所有文件系统或相关路径所属文件系统的统计信息。
- 报告 运行 上的文件系统错误,共 space。
第 1 部分
请分享 NATIVE Raku 替代品 (TIMTOWTDIBSCINABTE "Tim Toady Bicarbonate") 至:
raku -e 'qqx{ df -P $*CWD }.print'
这里,raku
-e
xecutes df
(disk free) excutes df
(disk free) external program via shell quoting with interpolation qqx{}
, feeding -P
ortable-format 参数和 $*CWD
当前工作目录,然后 .print
是 df
的输出。
代码段最初被写成 raku -e 'qqx{ df -hP $*CWD }.print'
— -h
uman-readable 和 -P
ortable — 但事实证明它不是无处不在的有效命令。 In OpenBSD 7.0,它退出并出现错误:df: -h and -i are incompatible with -P
。
为了增加人类可读性,您可以考虑 Number::Bytes::Human module
raku -e 'run <<df -hP $*CWD>>'
如果您只是在 STDOUT 上输出 df
给您的内容,则无需执行任何操作。
<< >>
是双引号,所以$*CWD
会被插值
第 1 部分 - 报告存储 space 统计数据
没有用于报告存储 space 统计信息的内置函数。选项包括:
编写 Raku 代码(几行),使用
NativeCall
调用特定于平台/文件系统的系统调用(例如statvfs()
)并使用该系统返回的信息打电话。使用合适的 Raku 库。
FileSystem::Capacity
为您挑选并运行一个外部程序,然后以可移植的形式提供其结果数据。使用
run
(或类似的1)来调用特定的外部程序,例如df
.使用
Inline::*
foreign language adaptor启用调用外国PL的解决方案来报告存储space统计信息,并使用它提供的信息。2
第 2 部分 - 报告 运行 共 space
Raku 似乎整齐地报告No space left on device
:
> spurt '/tmp/failwrite', 'filesystem is full!'
Failed to write bytes to filehandle: No space left on device
in block <unit> at <unknown file> line 1
> mkdir '/tmp/failmkdir'
Failed to create directory '/tmp/failmkdir' with mode '0o777': Failed to mkdir: No space left on device
in block <unit> at <unknown file> line 1
(程序员需要避免丢弃这些异常。)
脚注
1 run
运行外部命令 不涉及 shell。这保证消除了涉及 shell 的风险。也就是说,Raku 还支持使用 shell(因为在某些情况下这会很方便和合适)。请参阅问题下的评论交流(例如 shell
doc 风险摘要:
All shell metacharacters are interpreted by the shell, including pipes, redirects, environment variable substitutions and so on. Shell escapes are a severe security concern and can cause confusion with unusual file names. Use
run
if you want to be safe.
2 Raku 的外语适配器(Inline::
名称space 中的 Raku 模块)允许 Raku代码使用其他语言编写的代码。这些适配器不是 Raku 语言标准的一部分,而且大多数都勉强处于实验状态,如果是这样的话,但相反,最好的适配器状态良好,允许 Raku 代码使用外国库,就像它们是为 Raku 编写的一样。 (截至 2021 年 Inline::Perl5
是最完美的。)