2020年5月

Windows 纸牌已经 30 岁了,每月仍然有 3500 万玩家

纸牌游戏是随 1990 年发布的 Windows 3.0 提供给用户的,最初是设计教用户如何使用鼠标,操作鼠标抓住虚拟纸牌拖放到一个地方,教用户基本的拖曳操作。它是史上最常用的 Windows 程序之一,被预装到数以亿计的设备上。它的开发者 Wes Cherry 是微软的实习生,他没有从游戏上获得任何版税。Cherry 最初还给游戏加入了老板模式,伪装成电子表格去愚弄老板和同事,但在正式发布前被要求移除了。如果不移除的话,也许能拯救某些因上班玩纸牌被解雇的员工。

来源:solidot

硬核老王点评:有没有人第一个玩的电脑游戏就是纸牌(或扫雷)?有谁没玩过 Windows 纸牌吗?谁现在还在玩?

Microsoft Edge 浏览器迎来“上网冲浪”游戏

谷歌很早就为自家 Chrome 浏览器引入了可离线玩耍的横版跳跃“霸王龙”(T-Rex)游戏,Mozilla Firefox 和 Microsoft Edge 却迟迟没有跟进。不过最新消息是,微软今日宣布向所有用户开放了 Microsoft Edge 集成的“上网冲浪”游戏,感兴趣的朋友可在地址栏输入 edge://surf 来跳转体验。据悉,该游戏已在 Edge Canary、Dev、以及 Beta 通道上线,体验前请先将 Edge 浏览器的版本升到 83.0.478.37 及以上。

来源:cnBeta.COM

硬核老王点评:来,大家一起断网玩游戏!

报告显示僵尸网络会利用 BAT 等常用服务进行管理

奇虎安全研究人员报告,双枪恶意程序的僵尸网络利用国内的常用服务进行管理。该僵尸网络的数量超过了 10 万。研究人员观察到双枪恶意程序使用百度贴吧图片来分发配置文件和恶意软件,使用了阿里云存储来托管配置文件,利用百度统计管理感染主机的活跃情况,恶意程序样本中还多次发现了腾讯微云的 URL 地址。

来源:solidot

硬核老王点评:真是防不胜防,将指令和配置放在这些常用服务中是为了避免追踪。

Mozilla、Reddit 和 Twitter 等呼吁立法保护互联网浏览隐私

ZDNet 有消息称,Mozilla、Reddit、Twitter 和 Patreon 以及包括 Reform Government Surveillance、Engine 和 i2Coalition 在内的组织则在近日签署了一封联名信, 要求美国立法者明确禁止无故收集互联网搜索和浏览历史记录的行为。Mozilla 在博客中表示:“我们希望立法者修改该法案,以限制政府对没有证据的互联网浏览和搜索历史的访问。”

来源:开源中国

通过 SSH 连接远程 Linux 系统很简单。下面是教程。

树莓派是一个有用且价格低廉的家庭服务器,可用于很多事情。我的树莓派最常用来做打印服务器,可以在我的家庭网络中共享激光打印机,或作为个人文件服务器保存项目副本和其他数据。

我的文件服务器有很多用途。假设说我现在有一个项目,比如一本新书,我想把我的工作和所有相关的文件都复制一份快照。这种场景下,我只需要把 BookProject 文件夹复制到文件服务器的 BookBackup 文件夹。

或者我现在正在清理我的本地文件时,发现一些我不需要的文件,但是我不确定是否要删除,我会把它们复制到文件服务器的 KeepForLater 文件夹。这是我日常 Linux 系统中清除杂乱的文件,并将不常用的文件卸载到个人文件服务器上的方便方法。

用树莓派或其他 Linux 系统搭建个人文件服务器不需要配置 NFS( 网络文件系统 Network File System >)或 CIFS( 通用互联网文件系统 Common Internet File System )或改造其他的文件共享系统如 WebDAV。你可以很轻松的使用 SSH 来搭建远程文件服务器。下面是教程。

在远程服务器上配置 SSHD

你的 Linux 系统可能已经安装了 SSH 守护进程(sshd),甚至它已经默认运行了。如果没有,你可以使用你 Linux 发行版本上的任何控制面板来轻松配置 SSH。我在树莓派上运行了 Fedora ARM,通过 Web 浏览器访问树莓派的 9090 端口,我可以远程访问控制面板。(在我的家庭网络中,树莓派的 IP 地址是 10.0.0.11,因此我连接的是 10.0.0.11:9090。)如果 SSH 守护进程没有默认运行,你可以在控制面板的“服务”里把它设置为开机启动。

 title=

你可以在系统服务列表里找到 sshd

 title=

如果 sshd 没有开启,点击切换按钮打开它。

你有账号吗?

你需要有个远程系统的账号。它可以与你本地系统的账号相同,也可以不同。

在流行的 Raspbian 发行版本上,默认的账号名是 pi。但是其他的 Linux 发行版本可能需要你在安装系统时就设置一个唯一的新用户。如果你不知道你的用户名,你可以用系统的控制面板创建一个。在我的树莓派上,我创建了一个 jhall 账号,与我日常用的 Linux 桌面机器的用户名相同。

 title=

如果你用的是 Fedora 服务器,你可以点击“创建新账号”按钮。

 title=

不要忘记设置密码或添加公钥。

可选:添加公钥

如果你把公钥添加到远程 Linux 系统上,你就可以不使用密码登录。这一步是可选的;如果你愿意,你仍可以用密码登录。

你可以在下面的文章中学到更多关于 SSH 密钥的信息:

创建文件管理器的快捷方式

现在你已经在远程系统上启动 SSH 守护进程了,也设置了用户名和密码,最后一步就是在你本地的文件管理器中创建一个快捷方式,地址映射到远程 Linux 系统。我的桌面是 GNOME,但是在其他的 Linux 桌面上的基本操作步骤都是一样的。

建立初始连接

在 GNOME 的文件管理器中,在左边导航栏找到 “+其它位置” 按钮。点击它会出现一个 “连接到服务器” 提示框。在框中输入远程 Linux 服务器的地址,地址以 SSH 连接协议开头。

 title=

GNOME 文件管理器支持多种连接协议。要通过 SSH 进行连接,服务器地址请以 sftp://ssh:// 开头。

如果你远程 Linux 系统的用户名与本地的相同,那么你只需要输入服务器的地址和文件夹路径就可以了。比如要连接到我的树莓派的 /home/jhall 目录,我输入:

sftp://10.0.0.11/home/jhall

 title=

如果你远程 Linux 系统的用户名与本地的不同,你可以在远程系统地址前加 @ 符号来指定远程系统的用户名。要连接到远程的 Raspbian 系统,你可能要输入:

sftp://[email protected]/home/pi

 title=

如果你没有把公钥添加到远程服务器,那么你需要输入密码。如果你已经添加,GNOME 文件管理器应该会自动打开远程系统上的文件夹来让你跳转到不同的目录。

 title=

创建一个快捷方式,之后就可以轻松连接服务器

在 GNOME 文件管理器中,这很简单。右击导航栏中远程系统的名字,选择“添加书签”。这一步操作就创建了连接到远程路径的快捷方式。

 title=

如果你想把标签中的快捷方式改成一个更容易记的名字,你可以右击快捷方式选择“重命名”。

总结

通过 SSH 连接到远程 Linux 系统是很简单的事。你可以用相同的方式连接到家庭文件服务器以外的其他系统。我还创建了一个能让我立即访问我的提供商 Web 服务器上的文件的快捷方式,和另一个能迅速打开我的项目服务器的文件夹的快捷方式。SSH 使它成为一个安全的连接;所有的传输都是加密的。当我通过 SSH 打开远程的文件时,我可以像在本地操作一样使用 GNOME 文件管理器轻松打开远程文件。


via: https://opensource.com/article/20/3/personal-file-server-ssh

作者:Jim Hall 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

微软最近的 “Build 2020” 开发者大会公布了一些有趣的公告。我不确定这该令人兴奋还是该令人怀疑 —— 但是微软,你现在比以往任何时候都受到我们的关注。

同时,在所有的这些公告中,能够在 WSL(Windows Subsystem for Linux)上运行 GUI 应用程序的功能备受关注。

更不要忘了 Xamrin.Forms 更名为 MAUI 的尴尬结局,它与 Nitrux Linux 的 Uri Herrera 的现有开源项目(Maui Project)名字冲突。

以防你不清楚,WSL 是一种环境,可让你在 Windows 10 中获得 Linux 控制台的体验。它也是在 Windows 中运行 Linux 命令的最佳方法之一。

正如 Liam Dawe 认为的那样,通过博客文章(DirectX ❤ Linux)发布的公告可能是只是个公关诱饵。但是,仍然值得一提。

WSL 上对 Linux GUI 应用程序的支持

最近,Microsoft 在在线开发者大会上宣布了 WSL(即 WSL 2)的一系列新功能。

Windows 包管理器Windows 终端 1.0,以及其他一些功能的引入是其亮点。

但是, WSL 2 对 GPU 硬件加速的支持非常重要。

那么,是否意味着你可以使用 WSL 在 Windows 上运行 Linux 应用程序呢?看起来像是。

微软计划通过使用全新的 Linux 内核驱动程序 dxgkrnl 来实现它。为了给你一个技术性的简报, 我在这里引用他们的公告中的描述:

dxgkrnl 是一个全新的 Linux 内核驱动程序,它将 /dev/dxg 设备提供给用户模式的 Linux。 /dev/dxg 提供了一组 IOCTL,它们与 Winodws 上的原生 WDDM D3DKMT 内核服务层非常相似。Linux 内核中的 dxgkrnl 通过 VM 总线连接到 Windows 主机上,并使用此 VM 总线连接与物理 GPU 进行通讯。

我不是这方面的专家,但这意味着 WSL 上的 Linux 应用程序将与原生的 Windows 应用程序一样可以访问 GPU。

针对 GUI 应用程序的支持将在今年秋季的晚些时候提供(而不是 2020 年 5 月的更新) —— 所以我们要看看什么时候提供。

微软专门针对的是那些希望在 Windows 上轻松使用 Linux IDE 的开发人员。谷歌也在瞄准同样的用户群,将 GUI Linux 应用程序引入到 Chromebook

那么,对于那些坚持使用 Windows 的用户来说,这是个好消息。但是,这是真的吗?

微软爱上了 Linux —— 真的吗?

他们在 Windows 上整合 Linux 环境来拥抱 Linux 及其优势的努力,绝对是一件好事。

但是,它真的能给桌面 Linux 用户带来什么好处呢?到目前为止,我还没有看到任何实际的好处。

在这里,你可以有不同的看法。但是,我认为 WSL 的开发对于 Linux 桌面用户来说没有真正的价值。至少,到目前为止没有。

有趣的是,Linux Unplugged podcast 上有人强调了微软的举动,认为这与他们的 EEE( 拥抱、延伸和扑灭 Embrace, extend, and extinguish )的思路是一致的。

可能吧,谁知道呢?当然,他们为实现这一目标而付出的努力值得赞赏 —— 同时又令人感到兴奋和神秘。

这是否意味着 Windows 用户将不必再转到 Linux?

微软之所以在其平台上集成 Linux,是因为他们知道 Liunx 的能力,也知道开发人员(或用户)喜欢使用它的原因。

但是,随着 WSL 2 的更新,如果这种情况持续下去,我倾向于同意 Abhishek 的看法:

最终,桌面 Linux 将被限制在 Windows 下,成为桌面应用程序……

好吧,当然,原生的体验暂时还是比较好的。而且,很难看到现有的 Linux 桌面用户会使用 Windows 来将其替代。但是,这仍然值得担心。

你如何看待这一切?我不认为 WSL 对于被迫使用 Windows 的用户有什么好处 —— 但是,从长远来看,你认为微软在 WSL 方面的进展本质上是敌意还是对 Linux 有帮助?

在评论中让我知道你的想法!


via: https://itsfoss.com/run-linux-apps-windows-wsl/

作者:Ankush Das 选题:lujun9972 译者:lnrCoder 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

80% 的 Oracle JDK 用户正在考虑其他支持选项

在 2019 年,Oracle 决定更改许可模式,从提供免费的 Java 更新转变为要求付费订阅。据 Azul Systems 的一项新调查显示,目前有 80% 的 Oracle JDK 用户正在考虑其他选择。Azul Systems 透露,对 Oracle JDK 的首选使用率已从 70% 下降至 34%,大部分现有用户都选择了免费或受支持的基于 OpenJDK 的部署。不过在目前愿意支付支持费用的企业中,Oracle 仍然是赢家,占有 55 %的市场份额。红帽(17%)、IBM(16%)和 Azul(12%)则紧随 Oracle 之后。

来源:开源中国

硬核老王点评:习惯了免费的开源软件,对于收费,很多企业和人还没做好准备;而另外一方面,很多免费的 JDK 看起来也完全能取代 Oracle JDK 的作用。

开发者将 GCC 的 JIT 库移植到 Windows

libgccjit 是一个实现 GCC JIT 编译的嵌入式库,它可以动态链接到字节码解释器和其它程序中,在运行时生成本机代码。目前 GCC 开发者实验性地将 libgccjit 移植到了 Windows,并提交了补丁。GCC 代码库使用的是具有“传染性”的 GPLv3 许可,因此就算 libgccjit 移植到 Windows,那预估也不会有多少基于 Windows 的程序使用,因为有必须将新程序也开源的要求。

来源:开源中国

硬核老王点评:GPL 的传染性在捍卫了自由的同时,也让很多软件望而生畏。另一方面,随着计算机技术的变化和互联网的发展,许可证也需要与时俱进。

包括这 3 个模板语言在内,Python 积累了许多模板语言。

当需要使用模板语言来编写 Python Web 应用时,有很多健壮的解决方案。

Jinja2Genshi 和 Mako。甚至还有 Chameleon 之类的解决方案,虽然有些陈旧,但仍被 Pyramid 框架推荐。

Python 已经存在了很长时间。此时,在系统的深处,它积累了一些几乎被遗忘的模板语言,它们都是值得一试的。

这些语言就像桉树上可爱的考拉一样,在自己的生态圈里快乐地生活着,有时也会有危险的工作,这些都是很少有人听说过的模板语言,使用过的应该更少。

3、string.Template

你是否曾经想过:“如何获得一种没有任何特性的模板语言,而且同时也不需要 pip install 安装任何东西?” Python 标准库已经为你提供了答案。虽然没有循环和条件,但 string.Template 类是一种最小的模板语言。

使用它很简单。

>>> import string
>>> greeting = string.Template("Hello, $name, good $time!")
>>> greeting.substitute(name="OpenSource.com", time="afternoon")
'Hello, OpenSource.com, good afternoon!'

2、twisted.web.template

你会给一个包罗万象的库送什么礼物?

当然,不是模板语言,因为它已经有了。twisted.web.template 中嵌套了两种模板语言。一种是基于 XML 的,并有一个很棒的文档

但是它还有另一种,一种基于使用 Python 作为领域特定语言(DSL)来生成 HTML 文档。

它基于两个原语:包含标签对象的 twisted.web.template.tags 和渲染它们的 twisted.web.template.flattenString。由于它是 Twisted 的一部分,因此它内置支持高效异步渲染。

此例将渲染一个小页面:

async def render(reactor):
    my_title = "A Fun page"
    things = ["one", "two", "red", "blue"]
    template = tags.html(
            tags.head(
                tags.title(my_title),
            ),
            tags.body(
                tags.h1(my_title),
                tags.ul(
                    [tags.li(thing) for thing in things],
                ),
                tags.p(
                    task.deferLater(reactor, 3, lambda: "Hello "),
                    task.deferLater(reactor, 3, lambda: "world!"),
                )
            )
    )
    res = await flattenString(None, template)
    res = res.decode('utf-8')
    with open("hello.html", 'w') as fpout:
        fpout.write(res)

该模板是使用 tags.<TAGNAME> 来指示层次结构的常规 Python 代码。原生支持渲染字符串,因此任何字符串都正常。

要渲染它,你需要做的是添加调用:

from twisted.internet import task, defer
from twisted.web.template import tags, flattenString

def main(reactor):
    return defer.ensureDeferred(render(reactor))

最后写上:

task.react(main)

只需 3 秒(而不是 6 秒),它将渲染一个不错的 HTML 页面。在实际中,这些 deferLater 可以是对 HTTP API 的调用:它们将并行发送和处理,而无需付出任何努力。我建议你阅读关于更好地使用 Twisted。不过,这已经可以工作了。

1、Quixote

你会说:“但是 Python 并不是针对 HTML 领域而优化的领域特定语言。” 如果有一种语言可以转化到 Python,但是更适合定义模板,而不是像 Python 那样按原样解决呢?如果可以的话,请使用“Python 模板语言”(PTL)。

编写自己的语言,有时被说成是一个攻击假想敌人的唐吉坷德项目。当 Quixote(可在 PyPI 中找到)的创造者决定这样做时,并没有受此影响。

以下将渲染与上面 Twisted 相同的模板。警告:以下不是有效的 Python 代码

import time

def render [html] ():
    my_title = "A Fun page"
    things = ["one", "two", "red", "blue"]
    "<html><head><title>"
    my_title
    "</head></title><body><h1>"
    my_title
    "</h1>"
    "<ul>"
    for thing in things:
        "<li>"
        thing
        "</li>"
    "<p>"
    time.sleep(3)
    (lambda: "Hello ")()
    time.sleep(3)
    (lambda: "world!")()
    "</p>"
    "</body></html>"

def write():
    result = render()
    with open("hello.html", 'w') as fpout:
        fpout.write(str(result))

但是,如果将它放到 template.ptl 文件中,那么可以将其导入到 Quixote 中,并写出可以渲染模板的版本:

>>> from quixote import enable_ptl
>>> enable_ptl()
>>> import template
>>> template.write()

Quixote 安装了一个导入钩子,它会将 PTL 文件转换为 Python。请注意,此渲染需要 6 秒,而不是 3 秒。你不再获得自由的异步性。

Python 中的模板太多

Python 库的历史悠久且曲折,其中一些库可以或多或少都能达到类似结果(例如,Python 包管理)。

我希望你喜欢探索这三种可以用 Python 创建模板的方式。另外,我建议从这三个库之一开始了解。

你是否有另一种深奥的模板方法?请在下面的评论中分享!


via: https://opensource.com/article/20/4/python-templating-languages

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在编辑“容器如何工作”爱好者杂志的能力页面时,我想试着解释一下为什么 strace 在 Docker 容器中无法工作。

这里的问题是 —— 如果我在笔记本上的 Docker 容器中运行 strace,就会出现这种情况:

$ docker run  -it ubuntu:18.04 /bin/bash
$ # ... install strace ...
[email protected]:/# strace ls
strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted

strace 通过 ptrace 系统调用起作用,所以如果不允许使用 ptrace,它肯定是不能工作的! 这个问题很容易解决 —— 在我的机器上,是这样解决的:

docker run --cap-add=SYS_PTRACE  -it ubuntu:18.04 /bin/bash

但我对如何修复它不感兴趣,我想知道为什么会出现这种情况。为什么 strace 不能工作,为什么--cap-add=SYS_PTRACE 可以解决这个问题?

假设 1:容器进程缺少 CAP_SYS_PTRACE 能力。

我一直以为原因是 Docker 容器进程默认不具备 CAP_SYS_PTRACE 能力。这和它可以被 --cap-add=SYS_PTRACE 修复是一回事,是吧?

但这实际上是不合理的,原因有两个。

原因 1:在实验中,作为一个普通用户,我可以对我的用户运行的任何进程进行 strace。但如果我检查我的当前进程是否有 CAP_SYS_PTRACE 能力,则没有:

$ getpcaps $$
Capabilities for `11589': =

原因 2:capabilities 的手册页对 CAP_SYS_PTRACE 的介绍是:

CAP_SYS_PTRACE
       * Trace arbitrary processes using ptrace(2);

所以,CAP_SYS_PTRACE 的作用是让你像 root 一样,可以对任何用户拥有的任意进程进行 ptrace。你不需要用它来对一个只是由你的用户拥有的普通进程进行 ptrace

我用第三种方法测试了一下(LCTT 译注:此处可能原文有误) —— 我用 docker run --cap-add=SYS_PTRACE -it ubuntu:18.04 /bin/bash 运行了一个 Docker 容器,去掉了 CAP_SYS_PTRACE 能力,但我仍然可以跟踪进程,虽然我已经没有这个能力了。什么?为什么?!

假设 2:关于用户命名空间的事情?

我的下一个(没有那么充分的依据的)假设是“嗯,也许这个过程是在不同的用户命名空间里,而 strace 不能工作,因为某种原因而行不通?”这个问题其实并不相关,但这是我观察时想到的。

容器进程是否在不同的用户命名空间中?嗯,在容器中:

root@e27f594da870:/# ls /proc/$$/ns/user -l
... /proc/1/ns/user -> 'user:[4026531837]'

在宿主机:

bork@kiwi:~$ ls /proc/$$/ns/user -l
... /proc/12177/ns/user -> 'user:[4026531837]'

因为用户命名空间 ID(4026531837)是相同的,所以容器中的 root 用户和主机上的 root 用户是完全相同的用户。所以,绝对没有理由不能够对它创建的进程进行 strace!

这个假设并没有什么意义,但我(之前)没有意识到 Docker 容器中的 root 用户和主机上的 root 用户同一个,所以我觉得这很有意思。

假设 3:ptrace 系统的调用被 seccomp-bpf 规则阻止了

我也知道 Docker 使用 seccomp-bpf 来阻止容器进程运行许多系统调用。而 ptrace被 Docker 默认的 seccomp 配置文件阻止的系统调用列表中!(实际上,允许的系统调用列表是一个白名单,所以只是ptrace 不在默认的白名单中。但得出的结果是一样的。)

这很容易解释为什么 strace 在 Docker 容器中不能工作 —— 如果 ptrace 系统调用完全被屏蔽了,那么你当然不能调用它,strace 就会失败。

让我们来验证一下这个假设 —— 如果我们禁用了所有的 seccomp 规则,strace 能在 Docker 容器中工作吗?

$ docker run --security-opt seccomp=unconfined -it ubuntu:18.04  /bin/bash
$ strace ls
execve("/bin/ls", ["ls"], 0x7ffc69a65580 /* 8 vars */) = 0
... it works fine ...

是的,很好用!很好。谜底解开了,除了…..

为什么 --cap-add=SYS_PTRACE 能解决问题?

我们还没有解释的是:为什么 --cap-add=SYS_PTRACE 可以解决这个问题?

docker run 的手册页是这样解释 --cap-add 参数的。

--cap-add=[]
   Add Linux capabilities

这跟 seccomp 规则没有任何关系! 怎么回事?

我们来看看 Docker 源码

当文档没有帮助的时候,唯一要做的就是去看源码。

Go 语言的好处是,因为依赖关系通常是在一个 Go 仓库里,你可以通过 grep 来找出做某件事的代码在哪里。所以我克隆了 github.com/moby/moby,然后对一些东西进行 grep,比如 rg CAP_SYS_PTRACE

我认为是这样的。在 containerd 的 seccomp 实现中,在 contrib/seccomp/seccomp/seccomp\_default.go 中,有一堆代码来确保如果一个进程有一个能力,那么它也会(通过 seccomp 规则)获得访问权限,以使用与该能力相关的系统调用。

case "CAP_SYS_PTRACE":
       s.Syscalls = append(s.Syscalls, specs.LinuxSyscall{
           Names: []string{
               "kcmp",
               "process_vm_readv",
               "process_vm_writev",
               "ptrace",
           },
           Action: specs.ActAllow,
           Args:   []specs.LinuxSeccompArg{},
       })

在 moby 中的 profile/seccomp/seccomp.go默认的 seccomp 配置文件中,也有一些其他的代码似乎做了一些非常类似的事情,所以有可能就是这个代码在做这个事情。

所以我想我们有答案了!

Docker 中的 --cap-add 做的事情比它说的要多

结果似乎是,--cap-add 并不像手册页里说的那样,它更像是 --cap-add-and-also-whiteelist-some-extra-system-calls-if-required。这很有意义! 如果你具有一个像 --CAP_SYS_PTRACE 这样的能力,可以让你使用 process_vm_readv 系统调用,但是该系统调用被 seccomp 配置文件阻止了,那对你没有什么帮助!

所以当你给容器 CAP_SYS_PTRACE 能力时,允许使用 process_vm_readvptrace 系统调用似乎是一个合理的选择。

就这样!

这是个有趣的小事情,我认为这是一个很好的例子,说明了容器是由许多移动的部件组成的,它们以不完全显而易见的方式一起工作。


via: https://jvns.ca/blog/2020/04/29/why-strace-doesnt-work-in-docker/

作者:Julia Evans 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出