如何更安全地覆写数据文件

如何更安全地覆写数据文件,第1张

转载

如何更安全地覆写数据文件

经常地,程序在开始执行某项任务需要从文件读取数据。在任务完成后数据得到更新,新的数据会覆写到之前读取的文件中。怎么将数据写回到文件呢?一个直觉的方案是:

with open(datafile, 'w') as f:

f.write(data)

在通常情况下,它能够正确地完成写回数据的任务。如果出于某种原因文件打开失败,通常也不会有人忘记处理。但是,当写入操作失败了呢?

时不时地编译程序看到 gcc 大把地警告:

警告:忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]

在 Python 中,写文件时如果失败会抛出异常,上层的异常处理机制似乎能够作出相应的应对。但是,真的尽力了吗?

我也曾以为这样不会出问题。直到有一天,本地信箱里出现了这样的错误信息:

OSError: [Errno 28] No space left on device

可能是由于内核的某个 bug,我本来就所剩无几的 /home 分区没空闲空间了。一个 cronjob 在写回数据时发生异常。于是,新的数据没能写入文件。那旧数据呢?因为是以「写」方式打开文件,所以它也没了……

在那次事件之后,那段写回数据的代码变成了这个样子:

with open(datafile + '.tmp', 'w') as f:

f.write(t)

# if the above write failed (because disk is full), the old data should be kept

os.rename(datafile + '.tmp', datafile)

注意:测试表明不使用with或者显式地关闭文件的做法是有问题的,即使在 CPython 中。

try:

open('/dev/full', 'w').write('abc')

except:

print('fine.')

在 Python 2.7 中会打印错误信息,Python 3.3.0 中无任何信息。都没有预料中的异常被捕获。

>>>python t.py

>>>python2 t.py

close failed in file object destructor:

IOError: [Errno 28] No space left on device

今天之所以写这个,是因为 Arch Linux CN 的群服务器遇到磁盘配额用尽的问题。XMPP 服务器 Prosody 在写入联系人信息时只写了一小部分,大部分数据丢失。这里有 bug 报告。

2013年7月21日更新:Sublime Text 2 作为商业软件,竟然不仅不采用「新建+重命名」的方式写入文件,而且连写入是否成功都不检查。难怪 Linux 版中文输入法的问题迟迟不修复,原来连造成用户数据丢失的问题都无所谓。

一个域名;

一个有公网的服务器或者云服务器;

拥有root或者sudo权限。

goddady的域名,AWS的免费服务器(Ubuntu20)

安装AWS服务器,本次安装的操作系统是Ubuntu20,对于ssh怎么登陆自行解决。

把goddady的域名和ASW的公网IP绑定,公网IP就是ssh登陆的ip地址。

这中间需要填写域名,比如godaddy注册的域名为meet.block.xyz,这里就填写这个。

另外一个需要选择的是https的证书,默认选择就可以,后面再重新生成,命令为

这里需要填写邮件,用来接收相关资讯,主要是这个证书免费,有过期时间提醒,需要手动续签。

这样就完全安装完成。

问题1:用公网的虚拟云服务器进行安装完成后,可能会出现chrome打开meet.block.xyz没有反应?

原因:meet.block.xyz域名需要把主机的hostname和dnsdomainname修改为对于网址。如果贸然修改/etc/hostname可能会无效,因为对于多数的虚拟云主机是不支持修改hostname,需要修改/etc/cloud/cloud.cfg中的preserve_hostname: true

执行dnsdomainname和hostnamectl查看,sudo hostnamectl set-hostname meet.block.xyz设置

/etc/hosts中要有127.0.0.1 meet.block.xyz meet

其他:

问题2:可能在解决问题1之后可能还是无法访问meet.block.xyz?

原因:因为多数的虚拟云主机是通过vhost配置的网络,主机会有两个网络,一个公网,一个私网,公网就是ssh登陆的网址,私网用ip a查看,局域网的那个ip就是的。

最后新增两个参数:

启动Secure domain功能, 限制有账号的人才能开新会议室

编辑/etc/prosody/conf.avail/jitsi4james.ddns.net.cfg.lua,

将认证方式方式由anonymous改为internal_plan

并加入:(其他人可以加入)

VirtualHost "guest.jitsi4james.ddns.net"

authentication = "anonymous"

c2s_require_encryption = false

编辑/etc/jitsi/meet/jitsi4james.ddns.net-config.js,加入

anonymousdomain: 'guest.jitsi4james.ddns.net',

systemctl status

电脑和手机app均可使用,对于性能要求,目前没有测试。

1. 官方快速安装

2. 配置细节

3. 配置noip自动启动

4. YOUTUBE安装jitsi

5. 安装jitsi文章

6. youtue参考安装2

欢迎交流,wechat:tlxbp930

https://hellolinux.xyz


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/396321.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存