Linux手册翻译 - unshare(2)

取消共享是允许进程单独使用某些资源。

要取消挂载点共享,请使用 CLONE_NEWNS 例如。

我上周刚刚解决了一个安装问题,所以我使用了这个。

只需从命令行使用 unshare -n bash 即可。

看看这两个 shell 的汇编输出。

你试试吧。

Linux常见英文报错中文翻译(菜鸟必知)

嘿伙计!我已经在 Linux 行业工作了几年。
是的,那些错误报告令人头疼,但如果你了解它们,你就可以快速识别问题并快速取得进展。
让我举个例子。
就像去年一样,我想在公司服务器上运行一个命令,突然出现“命令未找到”的消息。
当时我很困惑,后来我意识到这是因为我没有安装那个命令。

另一个例子,有一次我想在我的家用计算机上复制一个文件,系统显示“权限被拒绝”。
我一看,原来是权限不够,只好赶紧更改权限设置。

还有一次,当我在做一个项目时,我想创建一个新文件夹,但结果是“文件存在”。
我仔细一看,发现我之前创建了这个文件夹,必须重命名它才能创建它。

记得有一次,我正在用vim编辑一个文件,突然停电了。
当我从手机上回来时,我打开文件并看到“警告:只读文件更改”提示。
结果发现该文件被设置为只读并且无法修改。

还有一次,我在服务器上运行脚本,结果是“无法识别的选项‘--oldboy’”。
当时我就傻眼了。
检查了半天,发现脚本中的参数有错误。

其他时候,当我连接到远程服务器时,突然无法连接并显示“连接被拒绝”消息。
那时我才知道这是防火墙问题。
然后我调整了端口和规则,问题就解决了。

总之,遇到问题不要慌,慢慢来,多查资料,多练习,慢慢就会上手的。
对了,如果你想寻找学习伙伴或者获得更多的学习资源,可以关注公众号【快速学C语言】,这是我找到很多学习资料的地方。
我们一起努力吧!

教你怎么在Linux中自己制作一款终端翻译软件

说实话,在Linux下使用Python + 百度API创建这样一个终端编译器是非常容易的。
我之前在服务器上搭建过类似的东西,主要是为了运维验证英文文档。
我可以直接写几行命令到SSH中来翻译它,它真的很强大。

至于基本代码,我写的是直接使用requests发送POST请求是没有问题的。
不过,有一些小细节需要注意。
最好将百度翻译头中的user-agent替换为常用的浏览器版本,否则有些服务器可能会误判为爬虫。
我在使用的时候直接粘贴了Chrome版的User-Agent,效果还不错。

在配置.bashrc时,有一个小错误需要提醒您。
如果脚本放置在深层路径中,例如 /usr/local/bin 等全局位置,则无需在别名行中键入完整的 python3 路径。
只需输入 fanyi="翻译脚本路径"。
但如果你像你的例子一样把它放在用户的主目录中,你应该获取 python3 之前在虚拟机中做这个的时候,因为没有添加python3 ,直接实现,导致系统找不到编译器,一头雾水。

在功能测试步骤中,除了翻译“中国”等简单的单词外,最好测试带有空格的单词,如“Linux系统”。
我曾经遇到过一种情况,API将空格视为特殊字符,导致翻译结果出现乱码。
我花了很长时间。
另外,如果您使用百度API,请注意每日调用限制,免费用户不可用。

扩展到多种语言时,关键是将参数更改为我提到的参数。
但请注意,并非所有语言都受支持。
例如,可能无法转换梵文等专门语言。
我想翻译成藏文,但是API直接返回错误码。
查了半天,发现百度并没有开放这个接口。
所以,如果你想成为全才,你应该首先查看百度API支持的语言列表。

错误处理部分已完全完成。
特别是如果超时设置为5 秒,我建议添加重试机制。
例如,如果使用Requests会话对象并添加retries = 3 ,则可以在网络抖动时自动重试两次,而无需手动键入命令。

计数环境变量是管理 API 密钥的好方法。
当我之前使用 Google Translate API 时,密钥存储在环境变量中,这使得脚本更加通用,并且不需要困难的编码。
但请注意,环境变量不会在子 shell 中继承,因此如果使用别名来设置脚本,则可能需要导出环境变量,或者直接将密钥写入脚本中(当然这不安全)。

最后,我们来谈谈 Translator-Shell 的替代方案。
说实话,这个东西比写Python脚本简单多了。
直接安装包就可以了,支持的语言比百度还多。
我的一位同事在终端中使用了这个,trans -e zh:en "Hello",一行就可以完成。
但是,如果您只是想练习Python网络请求,或者需要自定义功能(例如批量编译),那么编写自己的脚本肯定会更有用。

总的来说,这个项目适合初学者练习,也能解决实际问题。
关键是要了解API调用和边缘环境配置,并测试边界条件,例如长文本和特殊字符,这些是最容易出错的。

linux手册翻译——timerfd_create(2)

我曾经在一个系统编程项目中遇到过一个需求。
落实计划任务是必要的。
即使我需要同时执行特定操作,我也不想使用传统的多线程或计时器服务。
为了解决这个问题,选择了Linux系统timerfd_create、timerfd_settime和timerfd_gettime。

我首先使用timerfd_create创建了一个计时器,它是一个绝对时间时钟并设置了CLOCK_REALTIME。
我将间隔设置为 6 0 秒,这样计时器就会每 6 0 秒闪烁一次。
当timerfd_settime被调用时;我将绝对时间和第一次触发时间设置为当前时间和6 0秒。

然后我在循环内使用 select 系统调用来等待计时器。
无论何时选择,它都会告诉你有数据要读取;我知道计时器已过期。
我使用timerfd_gettime来检查计时器的当前状态并确保它确实达到了指定的时间。

我记得有一次我在测试这个程序时,我将初始过期时间设置在5 秒到1 秒之间。
在 Ubuntu 服务器上运行时; 5 秒后,第一个计时器启动,然后每1 秒观察一次,直到程序结束。

这种实现简单高效,并且额外的对或复杂的数据结构就不介绍了。
但是,我还发现,如果尝试修改时间段或计时器到期时间,则需要小心,因为程序运行时可能会发生不可预测的行为。
有时,如果您在等待时修改计时器。
回来后我该怎么办?
最后,这个实现让我对Linux系统调用有了更深入的了解,特别是定时器和文件描述符监控。
但说实话,每次思考的时候,我总是想,如果换成Windows或者macOS等其他操作系统,如何实现这些功能呢?