WPS Office：Linux 上的 Microsoft Office 的免费替代品
如果你在寻找 Linux 上 Microsoft Office 免费替代品，那么 WPS Office 是最佳选择之一。它可以免费使用，并兼容 MS Office 文档格式。WPS Office 是一个跨平台的办公生产力套件。它轻巧，并且与 Microsoft Office、Google Docs/Sheets/Slide 和 Adobe PDF 完全兼容。对于许多用户而言，WPS Office 足够直观，并且能够满足他们的需求。由于它在外观和兼容性方面与 Microsoft Office 非常相似，因此广受欢迎。WPS office 由中国的金山公司创建。对于 Windows 用户而言，WPS Office 有免费版和高级版。对于 Linux 用户，WPS Office 可通过其社区项目免费获得。非 FOSS 警告！WPS Office 不是一个开源软件。因为它对于 Linux 用户免费使用，我们已经在这介绍过它，有时我们也会介绍即使不是开源的 Linux 软件。Linux 上的 WPS OfficeWPS Office 有四个主要组件：WPS 文字WPS 演示WPS 表格WPS PDFWPS Office 与 MS Office 完全兼容，支持 .doc、.docx、.dotx、.ppt、.pptx、.xls、.xlsx、.docm、.dotm、.xml、.txt、.html、.rtf （等其他），以及它自己的格式（.wps、.wpt）。它还默认包含 Microsoft 字体（以确保兼容性），它可以导出 PDF 并提供超过 10 种语言的拼写检查功能。但是，它在 ODT、ODP 和其他开放文档格式方面表现不佳。三个主要的 WPS Office 应用都有与 Microsoft Office 非常相似的界面，都有相同的 Ribbon UI。尽管存在细微差别，但使用习惯仍然相对一致。你可以使用 WPS Office 轻松克隆任何 Microsoft Office/LibreOffice 文档。你可能唯一不喜欢的是一些默认的样式设置（一些标题下面有很多空间等），但这些可以很容易地调整。默认情况下，WPS 以 .docx、.pptx 和 .xlsx 文件类型保存文件。你还可以将文档保存到 WPS 云中并与他人协作。另一个不错的功能是能从这里下载大量模板。在 Linux 上安装 WPS OfficeWPS 为 Linux 发行版提供 DEB 和 RPM 安装程序。如果你使用的是 Debian/Ubuntu 或基于 Fedora 的发行版，那么安装 WPS Office 就简单了。你可以在下载区那下载 Linux 中的 WPS：下载 WPS Office for Linux向下滚动，你将看到最新版本包的链接：下载适合你发行版的文件。只需双击 DEB 或者 RPM 就能安装它们。这会打开软件中心，你将看到安装选项：几秒钟后，应用应该成功安装到你的系统上了！你现在可以在“应用程序”菜单中搜索 WPS，查找 WPS Office 套件中所有的应用：你是否使用 WPS Office 或其他软件？还有其他 Microsoft Office 的开源替代方案，但它们与 MS Office 的兼容性很差。就个人而言，我更喜欢 LibreOffice，但如果你必须要用到 Microsoft Office，你可以尝试在 Linux 上使用 WPS Office。它看起来和 MS Office 类似，并且与 MS 文档格式具有良好的兼容性。它在 Linux 上是免费的，因此你也不必担心 Office 365 订阅。你在系统上使用什么办公套件？你曾经在 Linux 上使用过 WPS Office 吗？你的体验如何？via: https://itsfoss.com/wps-office-linux/作者：Sergiu 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
从十多年前云计算开始兴起，这些年云计算已经逐渐蔓延到了我们身边，如今，你所使用的很多服务其背后都是由云计算所支撑的。但是，很多企业的 IT 设施以及网络服务，还一直因为种种原因而迟迟难以迈出上云的一步。这里面，有很多原因，有 IT 预算和迁移成本问题，有基础设施和应用迁移改造的问题，也有对云计算环境的安全性、可靠性的担忧问题，还有企业技术储备和能力问题。今天，我们将从技术的角度来看看，企业是否已经到了全面上云的拐点？“企业全面上云的拐点到了”一语最近来自于 7 月 25 日在上海举办的阿里云峰会。在该次大会上，阿里云智能总裁张建锋表示，“全面上云是时代必然，今年是一个非常重要的拐点。”经过了过去十年的发展，云计算以及在关键技术和应用规模上实现了对传统 IT 的全面超越。这里有个重要的信号，据 IDC 最近发布的《全球云计算 IT 基础设施市场预测报告》显示，2019 年全球云上的 IT 基础设施占比超过传统数据中心，成为市场主导者；而在中国，服务器出货量出现 10 年来首次下滑，企业快速迁移上云是背后主要诱因。迁移工具就绪企业上云最大的阻碍之一就是现有 IT 基础设施、应用和数据如何平滑地转移到云上，因此，一套可以无痛解决这个问题的迁移工具是企业上云所面临的当务之急。各个云厂商均纷纷加大在企业迁云工具方面的努力，这里我们就阿里云来看，他们已经全面考虑到了企业上云的实操问题，提供了从服务器迁移到数据、数据库迁移的完整工具，完善地解决了传统 IT 中积累的大量数据无法搬迁的问题。服务器迁移面临着三大痛难点，主要是应用高度复杂、操作麻烦、无从下手；迁移周期长、可能影响业务正常运行；通过制作镜像的方式迁移消耗大量人力资源。阿里云已经免费提供自动化迁云效率工具—— 服务器迁移中心 （ ServerMigration Center ） （SMC），帮助企业服务器快速上云。数据迁移时，必须要保证迁移数据的完整性、实现迁移时业务无感知，最终以最高的效率完成迁移。阿里云的明星产品闪电立方，既可以满足轻量级的数据迁移，也能够支持TB到PB级别的数据量迁移。此前还支持过 115 科技完成互联网史上最大规模的数据迁移上云：规模超过 100 PB，整个项目耗时仅 45 天。传统的数据库迁移工具要求数据库在迁移中必须停服，极大影响业务。早在 2015 年，阿里云就发布了 数据传输服务 （ Data Transmission Service ） （DTS），采用 DTS，数据库在迁移过程中依然可以正常提供服务。目前，DTS 可支持多达 18 种数据源，已完成约 40 万个数据库上云。云端环境就绪在消除了迁移上云的障碍之后，完善就绪的云端环境决定了企业是否能在云端环境延续计算和应用。而云端环境不仅仅要求能够节省 IT 成本，也要求提供更高的稳定性、安全性和扩展性，以及更丰富的云端产品服务生态。基础设施的上云不外乎服务器、存储、数据库等核心产品。对阿里云来说，在各个产品维度已经具备了完美的替代，IaaS 层面它们共同构成了飞天云操作系统。例如服务器，除了性能稳定的 ECS，还有软硬一体的神龙云服务器，兼具虚拟机的灵活、可扩展，又有物理机的稳定和安全隔离特性。数据库上，云原生数据库 POLARDB 在可用性、安全、成本、管理难易程度上都远远优于商业数据库。阿里云存储已经连续三年入选 Gartner 全球云存储魔力象限，和 AWS、Microsoft、Google 共同跻身全球四强，服务客户由国家天文台、华大基因、今日头条等。基础设施上云后，随后考虑的则是可以在云上获取价值的模块上云，包括大数据上云、云上中台、智联网 AIoT，这也都是阿里云承载客户上云的“王牌”。飞天大数据平台是当前国内规模最大的计算平台，可扩展至 10 万台计算集群，曾创下四项海量数据排序世界纪录。在阿里巴巴经济体中支撑了全局数据存储和计算，单日数据处理量超过 600PB。双中台是指数据中台和业务中台，已经帮助阿里巴巴经济体多元业务互联互通，业务创新层出不穷，人机协同大量运用，数据智能开创全新的商业形态。通过中台技术，在海外再造一个淘宝天猫，只需要两三个月时间，而盒马更是仅用 4 周就开发上线。智联网 AIoT 融合了云边端一体化的人工智能与物联网能力。具备从高性能 AI 芯片至云平台、AI 算法、AI 组件以及产业 AI 的立体能力。当行业大势已定，当阿里云的准备也一切就绪，还有什么可以阻挡企业全面上云的步伐呢？
Linux 中的软盘走向终结了吗？Torvalds 将软盘的驱动标记为“孤儿”
在 Linux 内核最近的提交当中，Linus Torvalds 将软盘的驱动程序标记为孤儿。这标志着软盘在 Linux 中步入结束了吗？有可能你很多年没见过真正的软盘了。如果你正在寻找带软盘驱动器的计算机，可能需要去博物馆里看看。在二十多年前，软盘是用于存储数据和运行操作系统的流行介质。早期的 Linux 发行版使用软盘进行“分发”。软盘也广泛用于保存和传输数据。你有没有想过为什么许多应用程序中的保存图标看起来像软盘？因为它就是软盘啊！软盘常用于保存数据，因此许多应用程序将其用作保存图标，并且这个传统一直延续至今。今天我为什么要说起软盘？因为 Linus Torvalds 在一个 Linux 内核代码的提交里标记软盘的驱动程序为“孤儿”。在 Linux 内核中被标记为“孤儿”的软盘驱动程序正如你可以在 GitHub 镜像上的提交中看到的那样，开发人员 Jiri 不再使用带有软驱的工作计算机了。而如果没有正确的硬件，Jiri 将无法继续开发。这就是 Torvalds 将其标记为孤儿的原因。越来越难以找到可以实际工作的软盘的物理硬件，虽然 Willy 能够对此进行测试，但我认为从实际的硬件角度来看，这个驱动程序几乎已经死了。目前仍然销售的硬件似乎主要是基于 USB 的，根本不使用这种传统的驱动器。“孤儿”在 Linux 内核中意味着什么？“孤儿”意味着没有开发人员能够或愿意支持这部分代码。如果没有其他人出现继续维护和开发它，孤儿模块可能会被弃用并最终删除。它没有被立即删除Torvalds 指出，各种虚拟环境模拟器仍在使用软盘驱动器。所以软盘的驱动程序不会被立即丢弃。各种 VM 环境中仍然在仿真旧的软盘控制器，因此该驱动程序不会消失，但让我们看看是否有人有兴趣进一步维护它。为什么不永远保持内核中的软盘驱动器支持呢？因为这将构成安全威胁。即使没有真正的计算机使用软盘驱动程序，虚拟机仍然拥有它，这将使虚拟机容易受到攻击。一个时代的终结？这将是一个时代的结束还是会有其他人出现并承担起在 Linux 中继续维护软盘驱动程序的责任？只有时间会给出答案。在 Linux 内核中，软盘驱动器成为孤儿我不觉得有什么可惜的。在过去的十五年里我没有使用过软盘，我怀疑很多人也是如此。那么你呢？你有没有用过软盘？如果是的话，你最后一次使用它的时间是什么时候？via: https://itsfoss.com/end-of-floppy-disk-in-linux/作者：Abhishek Prakash 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用这些用于树莓派的开源平台来重温游戏的黄金时代。他们使它们不像过去那样子了，对吧？我是说，电子游戏。当然，现在的设备更强大了。 赛达尔公主 Princess Zelda 在过去每个边只有 16 个像素，而现在的图像处理能力足够处理她头上的每根头发。今天的处理器打败 1988 年的处理器简直不费吹灰之力。但是你知道缺少什么吗？乐趣。你有数之不尽的游戏，按下一个按钮就可以完成教程任务。可能有故事情节，当然杀死坏蛋也可以不需要故事情节，你需要的只是跳跃和射击。因此，毫不奇怪，树莓派最持久的流行用途之一就是重温上世纪八九十年代的 8 位和 16 位游戏的黄金时代。但从哪里开始呢？在树莓派上有几种方法可以玩怀旧游戏。每一种都有自己的优点和缺点，我将在这里讨论这些。RetroPieRetroPie 可能是树莓派上最受欢迎的复古游戏平台。它是一个可靠的万能选手，是模拟经典桌面和控制台游戏系统的绝佳选择。介绍RetroPie 构建在 Raspbian 上运行。如果你愿意，它也可以安装在现有的 Raspbian 镜像上。它使用 EmulationStation 作为开源仿真器库（包括 Libretro 仿真器）的图形前端。不过，你要玩游戏其实并不需要理解上面的任何一个词。它有什么好处入门很容易。你需要做的就是将镜像刻录到 SD 卡，配置你的控制器、复制游戏，然后开始杀死坏蛋。它的庞大用户群意味着有大量的支持和信息，活跃的在线社区也可以求助问题。除了随 RetroPie 镜像一起安装的仿真器之外，还有一个可以从包管理器安装的庞大的仿真器库，并且它一直在增长。RetroPie 还提供了用户友好的菜单系统来管理这些，可以节省你的时间。从 RetroPie 菜单中可以轻松添加 Kodi 和配备了 Chromium 浏览器的 Raspbian 桌面。这意味着你的这套复古游戏装备也适于作为家庭影院、YouTube、SoundCloud 以及所有其它“休息室电脑”产品。RetroPie 还有许多其它自定义选项：你可以更改菜单中的图形，为不同的模拟器设置不同的控制手柄配置，使你的树莓派文件系统的所有内容对你的本地 Windows 网络可见等等。RetroPie 建立在 Raspbian 上，这意味着你可以探索这个树莓派最受欢迎的操作系统。你所发现的大多数树莓派项目和教程都是为 Raspbian 编写的，因此可以轻松地自定义和安装新内容。我已经使用我的 RetroPie 装备作为无线桥接器，在上面安装了 MIDI 合成器，自学了一些 Python，更重要的是，所有这些都没有影响它作为游戏机的用途。它有什么不太好的RetroPie 的安装简单和易用性在某种程度上是一把双刃剑。你可以在 RetroPie 上玩了很长时间，而甚至没有学习过哪怕像 sudo apt-get 这样简单的东西，但这也意味着你错过了很多树莓派的体验。但不一定必须如此；当你需要时，命令行仍然存在于底层，但是也许用户与 Bash shell 有点隔离，而使它最终并没有看上去那么可怕、另外，RetroPie 的主菜单只能通过控制手柄操作，当你没有接入手柄时，这可能很烦人，因为你一直将该系统用于游戏之外的事情。它适用于谁?任何想直接玩一些游戏的人，任何想拥有最大、最好的模拟器库的人，以及任何想在不玩游戏的时候开始探索 Linux 的人。RecalboxRecalbox 是一个较新的树莓派开源模拟器套件。它还支持其它基于 ARM 的小型计算机。介绍与 Retropie 一样， Recalbox 基于 EmulationStation 和 Libretro。它的不同之处在于它不是基于 Raspbian 构建的，而是基于它自己的 Linux 发行版：RecalboxOS。它有什么好处Recalbox 的设置比 RetroPie 更容易。你甚至不需要做 SD 卡镜像；只需复制一些文件即可。它还为一些游戏控制器提供开箱即用的支持，可以让你更快地开始游戏。它预装了 Kodi。这是一个现成的游戏和媒体平台。它有什么不太好的Recalbox 比 RetroPie 拥有更少的仿真器、更少的自定义选项和更小的用户社区。你的 Recalbox 装备可能一直用于模拟器和 Kodi，安装成什么样就是什么样。如果你想深入了解 Linux，你可能需要为 Raspbian 提供一个新的 SD 卡。它适用于谁?如果你想要绝对简单的复古游戏体验，并且不想玩一些比较少见的游戏平台模拟器，或者你害怕一些技术性工作（也没有兴趣去做），那么 Recalbox 非常适合你。对于大多数读者来说，Recalbox 可能最适合推荐给你那些不太懂技术的朋友或亲戚。它超级简单的设置和几乎没什么选项甚至可以让你免去帮助他们解决问题。做个你自己的好，你可能已经注意到 Retropie 和 Recalbox 都是由许多相同的开源组件构建的。那么为什么不自己把它们组合在一起呢？介绍无论你想要的是什么，开源软件的本质意味着你可以使用现有的模拟器套件作为起点，或者随意使用它们。它有什么好处如果你想有自己的自定义界面，我想除了亲自动手别无它法。这也是安装在 RetroPie 中没有的仿真器的方法，例如 BeebEm) 或 ArcEm。它有什么不太好的嗯，工作量有点大。它适用于谁?喜欢鼓捣的人，有动手能力的人，开发者，经验丰富的业余爱好者等。原生 RISC OS 游戏体验现在有一匹黑马：RISC OS，它是 ARM 设备的原始操作系统。介绍在 ARM 成为世界上最受欢迎的 CPU 架构之前，它最初是作为 Acorn Archimedes 的处理器而开发的。现在看起来这像是一种被遗忘的野兽，但是那几年，它作为世界上最强大的台式计算机独领风骚了好几年，并且吸引了大量的游戏开发项目。树莓派中的 ARM 处理器是 Archimedes 的曾孙辈的 CPU，所以我们仍然可以在其上安装 RISC OS，只要做一点工作，就可以让这些游戏运行起来。这与我们到上面所介绍的仿真器方式不同，我们是在玩为该操作系统和 CPU 架构开发的游戏。它有什么好处这是 RISC OS 的完美展现，这绝对是操作系统的瑰宝，非常值得一试。事实上，你使用的是和以前几乎相同的操作系统来加载和玩你的游戏，这使得你的复古游戏装备像是一个时间机器一样，这无疑为该项目增添了一些魅力和复古价值。有一些精彩的游戏只在 Archimedes 上发布过。Archimedes 的巨大硬件优势也意味着它通常拥有许多多平台游戏大作的最佳图形和最流畅的游戏体验。这类游戏的版权持有者非常慷慨，可以合法地免费下载它们。它有什么不太好的安装了 RISC OS 之后，它仍然需要一些努力才能让游戏运行起来。这是 入门指南。对于休息室来说，这绝对不是一个很好的全能选手。没有什么比 Kodi 更好的了。它有一个网络浏览器 NetSurf，但它在支持现代 Web 方面还需要一些努力。你不会像使用模拟器套件那样得到大量可以玩的游戏。RISC OS Open 对于爱好者来说可以免费下载和使用，而且很多源代码已经开源，尽管由于这个名字，它不是一个 100％ 的开源操作系统。它适用于谁?这是专为追求新奇的人，绝对怀旧的人，想要探索一个来自上世纪 80 年代的有趣的操作系统的人，怀旧过去的 Acorn 机器的人，以及想要一个完全不同的怀旧游戏项目的人而设计的。终端游戏你是否真的需要安装模拟器或者一个异域风情的操作系统才能重温辉煌的日子？为什么不从命令行安装一些原生 Linux 游戏呢？介绍有一系列原生的 Linux 游戏经过测试可以在 树莓派 上运行。它有什么好处你可以使用命令行从程序包安装其中的大部分，然后开始玩。很容易。如果你已经有了一个跑起来的 Raspbian，那么它可能是你运行游戏的最快途径。它有什么不太好的严格来说，这并不是真正的复古游戏。Linux 诞生于 1991 年，过了一段时间才成为了一个游戏平台。这些不是经典的 8 位和 16 位时代的游戏体验；后来有一些移植的游戏或受复古影响的游戏。它适用于谁?如果你只是想找点乐子，这没问题。但如果你想重温过去，那就不完全是这样了。via: https://opensource.com/article/18/9/retro-gaming-raspberry-pi作者：James Mawson 选题：lujun9972 译者：canhetingsky 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
DNS-over-HTTPS（DoH）协议目前是谈论的焦点，Firefox 是唯一支持它的浏览器。但是，Firefox 默认不启用此功能，用户必须经历许多步骤并修改多个设置才能启动并运行 DoH。在开始如何在 Firefox 中启用 DoH 支持的分步教程之前，让我们先描述它的原理。DNS-over-HTTPS 的工作原理DNS-over-HTTPS 协议通过获取用户在浏览器中输入的域名，并向 DNS 服务器发送查询，以了解托管该站点的 Web 服务器的 IP 地址。这也是正常 DNS 的工作原理。但是，DoH 通过 443 端口的加密 HTTPS 连接接受 DNS 查询将其发送到兼容 DoH 的 DNS 服务器（解析器），而不是在 53 端口上发送纯文本。这样，DoH 就会在常规 HTTPS 流量中隐藏 DNS 查询，因此第三方监听者将无法嗅探流量，并了解用户的 DNS 查询，从而推断他们将要访问的网站。此外，DNS-over-HTTPS 的第二个特性是该协议工作在应用层。应用可以带上内部硬编码的 DoH 兼容的 DNS 解析器列表，从而向它们发送 DoH 查询。这种操作模式绕过了系统级别的默认 DNS 设置，在大多数情况下，这些设置是由本地 Internet 服务提供商（ISP）设置的。这也意味着支持 DoH 的应用可以有效地绕过本地 ISP 流量过滤器并访问可能被本地电信公司或当地政府阻止的内容 —— 这也是 DoH 目前被誉为用户隐私和安全的福音的原因。这是 DoH 在推出后不到两年的时间里获得相当大的普及的原因之一，同时也是一群英国 ISP 因为 Mozilla 计划支持 DoH 协议而提名它为 2019 年的“互联网恶棍” （Internet Villian）的原因，ISP 认为 DoH 协议会阻碍他们过滤不良流量的努力。（LCTT 译注：后来这一奖项的提名被取消。）作为回应，并且由于英国政府阻止访问侵犯版权内容的复杂情况，以及 ISP 自愿阻止访问虐待儿童网站的情况，Mozilla 已决定不为英国用户默认启用此功能。下面的分步指南将向英国和世界各地的 Firefox 用户展示如何立即启用该功能，而不用等到 Mozilla 将来启用它 —— 如果它会这么做的话。在 Firefox 中有两种启用 DoH 支持的方法。方法 1：通过 Firefox 设置步骤 1：进入 Firefox 菜单，选择工具，然后选择首选项。 可选在 URL 栏中输入 about:preferences，然后按下回车。这将打开 Firefox 的首选项。步骤 2：在常规中，向下滚动到网络设置，然后按设置按钮。步骤3：在弹出窗口中，向下滚动并选择“Enable DNS over HTTPS”，然后配置你需要的 DoH 解析器。你可以使用内置的 Cloudflare 解析器（该公司与 Mozilla 达成协议，记录更少的 Firefox 用户数据），或者你可以在这个列表中选择一个。方法 2：通过 about:config步骤 1：在 URL 栏中输入 about:config，然后按回车访问 Firefox 的隐藏配置面板。在这里，用户需要启用和修改三个设置。步骤 2：第一个设置是 network.trr.mode。这打开了 DoH 支持。此设置支持四个值：0 - 标准 Firefox 安装中的默认值（当前为 5，表示禁用 DoH）1 - 启用 DoH，但 Firefox 依据哪个请求更快返回选择使用 DoH 或者常规 DNS2 - 启用 DoH，常规 DNS 作为备用3 - 启用 DoH，并禁用常规 DNS5 - 禁用 DoH值为 2 工作得最好步骤3：需要修改的第二个设置是 network.trr.uri。这是与 DoH 兼容的 DNS 服务器的 URL，Firefox 将向它发送 DoH DNS 查询。默认情况下，Firefox 使用 Cloudflare 的 DoH服务，地址是：https://mozilla.cloudflare-dns.com/dns-query。但是，用户可以使用自己的 DoH 服务器 URL。他们可以从这个列表中选择其中一个可用的。Mozilla 在 Firefox 中使用 Cloudflare 的原因是因为与这家公司达成了协议，之后 Cloudflare 将收集来自 Firefox 用户的 DoH 查询的非常少的数据。DoH in Firefox步骤4：第三个设置是可选的，你可以跳过此设置。 但是如果设置不起作用，你可以使用此作为步骤 3 的备用。该选项名为 network.trr.bootstrapAddress，它是一个输入字段，用户可以输入步骤 3 中兼容 DoH 的 DNS 解析器的 IP 地址。对于 Cloudflare，它是 1.1.1.1。 对于 Google 服务，它是 8.8.8.8。 如果你使用了另一个 DoH 解析器的 URL，如果有必要的话，你需要追踪那台服务器的 IP 地址并输入。通常，在步骤 3 中输入的 URL 应该足够了。 设置应该立即生效，但如果它们不起作用，请重新启动 Firefox。文章信息来源：Mozilla Wikivia: https://www.zdnet.com/article/how-to-enable-dns-over-https-doh-in-firefox/作者：Catalin Cimpanu 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
京东云郭理靖：我对云服务的一些看法
本期人物介绍：郭理靖，京东云产品研发部高级总监、产品委员会主席，专注于公有云服务、Docker、API 与数据开放平台、数据库服务等领域。擅长数据库、分布式存储系统、高可用服务架构等技术。在任职期间，郭理靖研发上线了 MySQL、SQL Server、MongoDB、PostgerSQL、MariaDB、Percona、JDW（数据仓库）、DRDS（分布式数据库服务）、时序数据库、TiDB、BDS（区块链 BI 数据分析服务）等多款京东云产品 。京东云不仅是国内第一家支持 MySQL 8.0 的云厂商，也是国内第一家支持 MariaDB 的云厂商，而区块链 BI 数据分析服务也是可以代表全球区块链先进技术的创新产品，聚合了业界知名项目的核心数据，目前 BDS 已经对外开源。前言盛夏，在一家幽静的咖啡馆，我见到了匆匆赶来的郭理靖。我们深入谈了关于云计算、关于数据库方面的一些话题。我将这些谈话中的精彩内容整理出来，以飨读者。与京东云共同成长的人在谈话中，我了解到，郭理靖在京东的工作历程是伴随着京东云的发展一路走过来的。从 2006 年到现在，郭理靖一直专注于云计算领域。从 2013 年京东云作为内部的基础设施云服务开始，他亲历了京东云从内部自用到正式商用的多个阶段的发展。作为核心人员之一，郭理靖又在其中扮演了什么样的角色呢？“其实我有两层角色，”郭理靖说到，“第一层，我负责数据库相关的服务，包括 RDS、数据仓库，现在京东云还推出了时序数据库、分布式数据库等，把京东技术体系内部的各种数据库的技术拿出来。另外，我还在京东云产品委员会，负责对京东云产品进行中长期规划， 评审产品开发可行性与必要性，规范产品上线流程，跟踪竞品动态与对标，统一产品培训资料，推进内、外部培训认证机制，精心打造京东云产品。”谈到这里，我发现一个现象，根据我的了解，包括京东云在内的很多公有云服务商的产品负责人都是出身于一线技术岗位。之前也有人跟我说，“为什么云服务行业是技术人员来担任产品经理，这是因为云计算服务就是技术性的产品，不懂技术的没法制定和设计这样的产品出来。”郭理靖表示：“这种说法是比较有道理的，因为整个云计算的产品主要是给技术人员使用，要求产品经理有很强的技术功底、技术视野以及技术敏感度，不是技术背景出身的产品经理，难于理解用户诉求，很多细节没法把握。比如做时序数据库，到底是做成什么样的时序数据库，提供什么样的功能，只有做过技术支撑的产品经理，才能理解要什么样的产品和什么样的用户体验。”从私有云到公有云最初，京东云只是作为内部基础设施服务，那时候京东云的人手也比较少，最初采用的技术是 OpenStack 技术栈，从 2014 年开始全部转向了 Docker 容器技术。那个时候，京东已经把统一监控、部署、代码管理、日志服务这些技术部分都已经建设完备了，但是还缺乏一个核心的运行环境，而其时崛起的容器技术正好填补了这个空白。这个技术体系一直发展到现在。到 2016 年， 京东云平台经历内部历练和打磨后，已经有了大规模的对外开放的技术基础了。在基础架构细节梳理的比较清晰、底层的基础设施服务和中间件服务都逐渐成熟、内部的使用和运营非常顺畅之后，当时决定，可以对外做公有云了。当然，做公有云和私有云的难度不是一个量级的，私有云很多事情都是在掌控范围之内，而做公有云要改造的东西特别多的。这包括网络管控、存储结构改造等几大的难点。 然而，京东云以后来者居上的节奏，从决定要对外开放，到真正的对外开往，仅用了几个月的时间，在 2016 年的 4 月 1 号正式对外开放公有云服务。在京东云的公有云服务上线之后，逐渐往上增加各种产品和服务。产品从 20 多款已丰富至现在的 220 多款。云计算从最初一个概念的提出，到后来发展为公有云、私有云、混合云等不同的形态，关于到底哪种云服务形态才是未来，人们也有不同的看法。不过从当前阶段看起来，主流的认识是，在认可公有云的基础上，企业希望有一种“私有化”的公有云服务。那么如何看待公有云、私有云以及接下来的发展呢？郭理靖说：“这个事情我们分两方面看，一方面就是看现状，另外一方面看接下去的发展。”“当前的云服务的现状是公有云、私有云、混合云并存，而且这个阶段可能会比较长。……京东也在做私有云服务，……我们称之为 JDStack 专有云，专业服务中大型企业以及政务云 。JDStack 既能把京东云所有的能力集成起来，而又提供灵活选配的功能，除了核心的几个组件，如 SDN、RDS 等必需的产品之外，其他产品都可以选配，用户可以将京东云的能力复制一份带回家，这个产品目前的市场前景也非常好。”，同样，对于混合云，“我们可以提供的 VPN 以及专线接入，打通用户的私有云与我们的公有云，我们有完整的混合云方案，京东云的很多客户也是采用混合云的模式。”至于公有云，就更不用说了。这三种模式我们都有，主要是使用于不同场景……就目前来看，公有云市场最大，而私有云的销售份额要比混合云大。”“你刚才讲到公有云上的私有云，确实有些用户希望在公有云里面划分一些独占的资源池，它的所有 VPS，RDS 都分配到那个资源池里面去，这种客户独享资源池的模式我们也是完全支持的。”郭理靖接着补充到，“存在这样的需求我觉得主要还是在于，政策法规上对于数据安全上面的规定。在金融、保险等领域，对数据保存的位置与管理都是有特殊要求的，使用这个解决方案，不仅能够满足合规的要求，而且能复用公有云统一的技术栈、管理服务，不用担心升级运维等基础设施性的问题。”Docker 出现以后，随着 Kubernetes 编排系统的进一步普及和标准化，用户逐渐摆脱了被厂商绑定的情况，目前京东云在容器服务方面的进展是怎么样的？“其实在云端提供容器服务的最大难点是资源隔离，在这方面我们做的还比较出色。我们应该是国内厂商中比较早做容器服务的。现在 Docker 是用 cgroup 进行隔离的，但会造成 Docker 容器之间的逃逸，导致同一台物理机上的 Docker 容器可以读取另一个 Docker 容器的数据。这在私有云上这不是太大的问题，但在公共云上是不可接受的，所以我们开发了原生容器服务，利用虚拟化去承载容器镜像。用传统的虚拟化技术进行隔离，同时兼容所有 Docker 的镜像，在启动速度方面，丝毫不逊色于 Docker，甚至在不少场景还会更快。同时原生容器还可以无缝衔接我们现有的 SDN 和云硬盘等底层服务，在公有云产品线里是属于与云主机平级的‘一等公民’，这会比在虚拟机里运行 Docker 要好很多。”专注于数据库除了云计算方面，郭理靖也植根于数据库领域。“京东云的关系型数据库（RDS）覆盖面还是比较广的，支持的数据库类型也比较多，除此之外我们还有自己的 DTS 服务，可以做数据迁移服务。”他说，“京东云非常重视数据库，数据库研发团队也非常精悍。我们对新技术的敏感度及理解一直走在前面。例如，京东云是国内首发支持 MySQL8.0 的云厂商，同时也是第一家支持云数据库 MariaDB 服务的云厂商，我们也在积极进行云原生数据库的研发工作。新的数据库，新的服务模式关于京东云自研的新数据库服务，我表示很好奇，因为一个全新的数据库的研发难度显然要远远大于将已有的开源产品进行适配、优化后提供给客户使用。郭理靖说，“因为 MySQL 在单一实例上自身存在容量限制，并不能发挥云端的优势：按需付费。比如购买云厂商的 RDS，企业实际购买的数据库服务的 QPS 是受限的，如果买更高性能则可能很多时候是浪费的。这就没有把云服务的资源和能力完全发挥出来：随着用户的体量越来越大，对容量的需求相对更大，应该在访问高峰时能够满足服务要求，在访问低峰时足够便宜，按照实际用量来收费。这样的数据库产品很值得设计研发。”京东云对未来这样一个按需付费的数据库期望达到：“第一、兼容SQL 标准；第二、按需付费、按性能付费，小规格的存储也能享受高性能，存储和运算深度分离；第三、性能非常好。”开源开放作为开源社区，我们自然也关注京东云的开源。郭理靖说，“参与开源社区活动我们是非常积极的。我们不但是云原生基金会（CNCF）的会员，也加入了 Enterprise Ethereum Alliance（EEA），我们对开源这件事持很开放的态度。”“在过去的几年中我们的工作压力比较大，更多的精力是投放在产品的打磨上，先要达到一定的产品丰富程度才能去做到精益求精，才能在对外开源，才能在开源社区上去贡献更大的力量”，郭理靖补充道。当然，开源从来不仅仅是一种意愿，而是代表着背后很多的工作投入的。开源这件事需要必要的时间和投入，京东云事业部对此也是持开放的态度，希望可以通过开源进行技术和品牌侧的建设。从这一点看，我觉得中国的技术公司已经有这样的思想和氛围了。“要做一个完整的开源项目还是存在一些挑战，比如京东云的很多项目相互依赖比较多，要做开源的话首先要进行整理和切割，否则开源出去也无法独立运作，就没有开源的意义了。举个例子，如果要开发一个中间件，那必须把原先和用户、计费、管理、监控相关的东西全部切割出来，这个任务代价是很大的。”郭理靖说，“目前我们的 BDS 项目已经完成代码的整理，已经对外开源了。BDS 是京东云打造一个行业标准的区块链的 BI + 数据搜索服务。区块链项目的底层区块存储结构各不相同，需要对不同的项目的数据进行解析与整理，基于此，京东云开源了区块链数据服务 (BDS)，以望让更多的开发者与社区可以参与其中，接入更多公有链、联盟链、私有链等区块链项目。区块链数据服务将以区块链数据搜索引擎形式聚合所有区块链相关的内容，最大化区块链上可信数据价值，方便社区能在 BDS 上进行区块链数据的一站式查询。。”“技术开源也能从另一个纬度考验我们的技术能力，进而驱动我们不断打磨技术和产品”。作为京东集团技术能力对外输出的重要出口，京东云商用三年以来，正在逐渐演化为京东技术的“开源”代表，对内整合 AI、区块链等硬核技术，对外不断携手上下游伙伴扩张生态，京东云希望让各种技术通过云端整合相互促进，业务侧对外赋能可以像积木一般拆分重组，实现“即插即用”的模块化方式，为社区、为生态带来普惠价值。结语和郭理靖的谈话匆匆过去了一个小时，通过和一位直接负责云产品的技术负责人的深入沟通，让我对京东云丰富的云产品背后所掩盖的宏大的技术背景有所了解，也对云计算的发展有了更多的切实体悟。“穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访，将为大家介绍中国开源领域中一些积极推动开源，谙熟开源思想的技术人，并辨析其思考、挖掘其动因，揭示其背后所发生的事情，为关注开源、有志于开源的企业和技术人标出一条路径。取名为“穿山甲”寓意有二：取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用；穿山甲是珍稀保护动物，宣传公益。
生活在普通文本世界么？以下是无需使用文字处理器而创建别人要的格式化文档的方法。如果你生活在普通文本世界里，总会有人要求你提供格式化文档。我就经常遇到这个问题，特别是在 Day JobTM。虽然我已经给与我合作的开发团队之一介绍了用于撰写和审阅发行说明的 Docs Like Code 工作流程，但是还有少数人对 GitHub 和使用 Markdown 没有兴趣，他们更喜欢为特定的专有应用格式化的文档。好消息是，你不会被卡在将未格式化的文本复制粘贴到文字处理器的问题当中。使用 pandoc，你可以快速地给人们他们想要的东西。让我们看看如何使用 pandoc 将文档从 Markdown 转换为 Linux 中的文字处理器格式。请注意，pandoc 也可用于从两种 BSD（NetBSD 和 FreeBSD）到 Chrome OS、MacOS 和 Windows 等的各种操作系统。基本转换首先，在你的计算机上安装 pandoc。然后，打开控制台终端窗口，并导航到包含要转换的文件的目录。输入此命令以创建 ODT 文件（可以使用 LibreOffice Writer 或 AbiWord 等字处理器打开）：pandoc -t odt filename.md -o filename.odt记得用实际文件名称替换 filename。如果你需要为其他文字处理器（你知道我的意思）创建一个文件，替换命令行的 odt 为 docx。以下是本文转换为 ODT 文件时的内容：这些转换结果虽然可用，但有点乏味。让我们看看如何为转换后的文档添加更多样式。带样式转换pandoc 有一个漂亮的功能，使你可以在将带标记的纯文本文件转换为字处理器格式时指定样式模板。在此文件中，你可以编辑文档中的少量样式，包括控制段落、文章标题和副标题、段落标题、说明、基本的表格和超链接的样式。让我们来看看能做什么。创建模板要设置文档样式，你不能只是使用任何一个模板就行。你需要生成 pandoc 称之为引用模板的文件，这是将文本文件转换为文字处理器文档时使用的模板。要创建此文件，请在终端窗口中键入以下内容：pandoc -o custom-reference.odt --print-default-data-file reference.odt此命令创建一个名为 custom-reference.odt 的文件。如果你正在使用其他文字处理程序，请将命令行中的 “odt” 更改为 “docx”。在 LibreOffice Writer 中打开模板文件，然后按 F11 打开 LibreOffice Writer 的 “样式” 窗格。虽然 pandoc 手册建议不要对该文件进行其他更改，但我会在必要时更改页面大小并添加页眉和页脚。使用模板那么，你要如何使用刚刚创建的模板？有两种方法可以做到这一点。最简单的方法是将模板放在家目录的 .pandoc 文件夹中，如果该文件夹不存在，则必须先创建该文件夹。当转换文档时，pandoc 会使用此模板文件。如果你需要多个模板，请参阅下一节了解如何从多个模板中进行选择。使用模板的另一种方法是在命令行键入以下转换选项：pandoc -t odt file-name.md --reference-doc=path-to-your-file/reference.odt -o file-name.odt如果你想知道使用自定义模板转换后的文件是什么样的，这是一个示例：选择模板很多人只需要一个 pandoc 模板，但是，有些人需要不止一个。例如，在我的日常工作中，我使用了几个模板：一个带有 DRAFT 水印，一个带有表示内部使用的水印，另一个用于文档的最终版本。每种类型的文档都需要不同的模板。如果你有类似的需求，可以像使用单个模板一样创建文件 custom-reference.odt，将生成的文件重命名为例如 custom-reference-draft.odt 这样的名字，然后在 LibreOffice Writer 中打开它并修改样式。对你需要的每个模板重复此过程。接下来，将文件复制到家目录中。如果你愿意，你甚至可以将它们放在 .pandoc 文件夹中。要在转换时选择特定模板，你需要在终端中运行此命令：pandoc -t odt file-name.md --reference-doc=path-to-your-file/custom-template.odt -o file-name.odt改变 custom-template.odt 为你的模板文件名。结语为了不用记住我不经常使用的一组选项，我拼凑了一些简单的、非常蹩脚的单行脚本，这些脚本封装了每个模板的选项。例如，我运行脚本 todraft.sh 以使用带有 DRAFT 水印的模板创建文字处理器文档。你可能也想要这样做。以下是使用包含 DRAFT 水印的模板的脚本示例：pandoc -t odt $1.md -o $1.odt --reference-doc=~/Documents/pandoc-templates/custom-reference-draft.odt使用 pandoc 是一种不必放弃命令行生活而以人们要求的格式提供文档的好方法。此工具也不仅适用于 Markdown。我在本文中讨论的内容还可以让你在各种标记语言之间创建和转换文档。有关更多详细信息，请参阅前面链接的 pandoc 官网。via: https://opensource.com/article/19/5/convert-markdown-to-word-pandoc作者：Scott Nesbitt 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Linux 的 ls 命令拥有数量惊人的选项，可以提供有关文件的重要信息。ls 命令可以列出一个 POSIX 系统上的文件。这是一个简单的命令，但它经常被低估，不是它能做什么（因为它确实只做了一件事），而是你该如何优化对它的使用。要知道在最重要的 10 个终端命令中，这个简单的 ls 命令可以排进前三，因为 ls 不会只是列出文件，它还会告诉你有关它们的重要信息。它会告诉你诸如拥有文件或目录的人、每个文件修改的时间、甚至是什么类型的文件。它的附带功能能让你了解你在哪里、附近有些什么，以及你可以用它们做什么。如果你对 ls 的体验仅限于你的发行版在 .bashrc 中的别名，那么你可能错失了它。GNU 还是 BSD？在了解 ls 的隐藏能力之前，你必须确定你正在运行哪个 ls 命令。有两个最流行的版本：包含在 GNU coreutils 包中的 GNU 版本，以及 BSD 版本。如果你正在运行 Linux，那么你很可能已经安装了 GNU 版本的 ls（LCTT 译注：几乎可以完全确定）。如果你正在运行 BSD 或 MacOS，那么你有的是 BSD 版本。本文会介绍它们的不同之处。你可以使用 --version 选项找出你计算机上的版本：$ ls --version如果它返回有关 GNU coreutils 的信息，那么你拥有的是 GNU 版本。如果它返回一个错误，你可能正在运行的是 BSD 版本（运行 man ls | head 以确定）。你还应该调查你的发行版可能具有哪些预设选项。终端命令的自定义通常放在 $HOME/.bashrc 或 $HOME/.bash_aliases 或 $HOME/.profile 中，它们是通过将 ls 别名化为更复杂的 ls 命令来完成的。例如：alias ls='ls --color'发行版提供的预设非常有用，但它们确实很难分辨出哪些是 ls 本身的特性，哪些是它的附加选项提供的。你要是想要运行 ls 命令本身而不是它的别名，你可以用反斜杠“转义”命令：$ \ls分类单独运行 ls 会以适合你终端的列数列出文件：$ ls ~/example bunko jdk-10.0.2 chapterize otf2ttf.ff despacer overtar.sh estimate.sh pandoc-2.7.1 fop-2.3 safe_yaml games tt这是有用的信息，但所有这些文件看起来基本相同，没有方便的图标来快速表示出哪个是目录、文本文件或图像等等。使用 -F（或 GNU 上的长选项 --classify）以在每个条目之后显示标识文件类型的指示符：$ ls ~/example bunko jdk-10.0.2/ chapterize* otf2ttf.ff* despacer* overtar.sh* estimate.sh pandoc@ fop-2.3/ pandoc-2.7.1/ games/ tt*使用此选项，终端中列出的项目使用简写符号来按文件类型分类：斜杠（/）表示目录（或“文件夹”）。星号（*）表示可执行文件。这包括二进制文件（编译代码）以及脚本（具有可执行权限的文本文件）。符号（@）表示符号链接（或“别名”）。等号（=）表示套接字。在 BSD 上，百分号（%）表示 涂改 whiteout （某些文件系统上的文件删除方法）。在 GNU 上，尖括号（>）表示 门 door （Illumos 和 Solaris上的进程间通信）。竖线（|）表示 FIFO) 管道。 这个选项的一个更简单的版本是 -p，它只区分文件和目录。（LCTT 译注：在支持彩色的终端上，使用 --color 选项可以以不同的颜色来区分文件类型，但要注意如果将输出导入到管道中，则颜色消失。）长列表从 ls 获取“长列表”的做法是如此常见，以至于许多发行版将 ll 别名为 ls -l。长列表提供了许多重要的文件属性，例如权限、拥有每个文件的用户、文件所属的组、文件大小（以字节为单位）以及文件上次更改的日期：$ ls -l -rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh [...]如果你不想以字节为单位，请添加 -h 标志（或 GNU 中的 --human）以将文件大小转换为更加人性化的表示方法：$ ls --human -rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth seth 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20M Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth seth 6.1K May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh要看到更少的信息，你可以带有 -o 选项只显示所有者的列，或带有 -g 选项只显示所属组的列：$ ls -o -rwxrwx---. 1 seth 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth 20M Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth 6.1K May 22 10:22 geteltorito -rwxrwx---. 1 seth 177 Nov 12 2018 html4mutt.sh也可以将两个选项组合使用以显示两者。时间和日期格式ls 的长列表格式通常如下所示：-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh月份的名字不便于排序，无论是通过计算还是识别（取决于你的大脑是否倾向于喜欢字符串或整数）。你可以使用 --time-style 选项和格式名称更改时间戳的格式。可用格式为：full-iso：ISO 完整格式（1970-01-01 21:12:00）long-iso：ISO 长格式（1970-01-01 21:12）iso：iso 格式（01-01 21:12）locale：本地化格式（使用你的区域设置）posix-STYLE：POSIX 风格（用区域设置定义替换 STYLE）你还可以使用 date 命令的正式表示法创建自定义样式。按时间排序通常，ls 命令按字母顺序排序。你可以使用 -t 选项根据文件的最近更改的时间（最新的文件最先列出）进行排序。例如：$ touch foo bar baz $ ls bar baz foo $ touch foo $ ls -t foo bar baz列出方式ls 的标准输出平衡了可读性和空间效率，但有时你需要按照特定方式排列的文件列表。要以逗号分隔文件列表，请使用 -m：ls -m ~/example bar, baz, foo要强制每行一个文件，请使用 -1 选项（这是数字 1，而不是小写的 L）：$ ls -1 ~/bin/ bar baz foo要按文件扩展名而不是文件名对条目进行排序，请使用 -X（这是大写 X）：$ ls bar.xfc baz.txt foo.asc $ ls -X foo.asc baz.txt bar.xfc隐藏杂项在某些 ls 列表中有一些你可能不关心的条目。例如，元字符 . 和 .. 分别代表“本目录”和“父目录”。如果你熟悉在终端中如何切换目录，你可能已经知道每个目录都将自己称为 .，并将其父目录称为 ..，因此当你使用 -a 选项显示隐藏文件时并不需要它经常提醒你。要显示几乎所有隐藏文件（. 和 .. 除外），请使用 -A 选项：$ ls -a . .. .android .atom .bash_aliases [...] $ ls -A .android .atom .bash_aliases [...]有许多优秀的 Unix 工具有保存备份文件的传统，它们会在保存文件的名称后附加一些特殊字符作为备份文件。例如，在 Vim 中，备份会以在文件名后附加 ~ 字符的文件名保存。这些类型的备份文件已经多次使我免于愚蠢的错误，但是经过多年享受它们提供的安全感后，我觉得不需要用视觉证据来证明它们存在。我相信 Linux 应用程序可以生成备份文件（如果它们声称这样做的话），我很乐意相信它们存在 —— 而不用必须看到它们。要隐藏备份文件，请使用 -B 或 --ignore-backups 隐藏常用备份格式（此选项在 BSD 的 ls 中不可用）：$ ls bar.xfc baz.txt foo.asc~ foo.asc $ ls -B bar.xfc baz.txt foo.asc当然，备份文件仍然存在；它只是过滤掉了，你不必看到它。除非另有配置，GNU Emacs 在文件名的开头和结尾添加哈希字符（＃）来保存备份文件（#file＃）。其他应用程序可能使用不同的样式。使用什么模式并不重要，因为你可以使用 --hide 选项创建自己的排除项：$ ls bar.xfc baz.txt #foo.asc# foo.asc $ ls --hide="#*#" bar.xfc baz.txt foo.asc递归地列出目录除非你在指定目录上运行 ls，否则子目录的内容不会与 ls 命令一起列出：$ ls -F example/ quux* xyz.txt $ ls -R quux xyz.txt ./example: bar.xfc baz.txt #foo.asc# foo.asc使用别名使其永久化ls 命令可能是 shell 会话期间最常使用的命令。这是你的眼睛和耳朵，为你提供上下文信息和确认命令的结果。虽然有很多选项很有用，但 ls 之美的一部分就是简洁：两个字符和回车键，你就知道你到底在哪里以及附近有什么。如果你不得不停下思考（更不用说输入）几个不同的选项，它会变得不那么方便，所以通常情况下，即使最有用的选项也不会用了。解决方案是为你的 ls 命令添加别名，以便在使用它时，你可以获得最关心的信息。要在 Bash shell 中为命令创建别名，请在主目录中创建名为 .bash_aliases 的文件（必须在开头包含 .）。 在此文件中，列出要创建的别名，然后是要为其创建别名的命令。例如：alias ls='ls -A -F -B --human --color'这一行导致你的 Bash shell 将 ls 命令解释为 ls -A -F -B --human --color。你不必仅限于重新定义现有命令，还可以创建自己的别名：alias ll='ls -l' alias la='ls -A' alias lh='ls -h'要使别名起作用，shell 必须知道 .bash_aliases 配置文件存在。在编辑器中打开 .bashrc 文件（如果它不存在则创建它），并包含以下代码块：if [ -e $HOME/.bash_aliases ]; then source $HOME/.bash_aliases fi每次加载 .bashrc（这是一个新的 Bash shell 启动的时候），Bash 会将 .bash_aliases 加载到你的环境中。你可以关闭并重新启动 Bash 会话，或者直接强制它执行此操作：$ source ~/.bashrc如果你忘了你是否有别名命令，which 命令可以告诉你：$ which ls alias ls='ls -A -F -B --human --color' /usr/bin/ls如果你将 ls 命令别名为带有选项的 ls 命令，则可以通过将反斜杠前缀到 ls 前来覆盖你的别名。例如，在示例别名中，使用 -B 选项隐藏备份文件，这意味着无法使用 ls 命令显示备份文件。 可以覆盖该别名以查看备份文件：$ ls bar baz foo $ \ls bar baz baz~ foo做一件事，把它做好ls 命令有很多选项，其中许多是特定用途的或高度依赖于你所使用的终端。在 GNU 系统上查看 info ls，或在 GNU 或 BSD 系统上查看 man ls 以了解更多选项。你可能会觉得奇怪的是，一个以每个工具“做一件事，把它做好”的前提而闻名的系统会让其最常见的命令背负 50 个选项。但是 ls 只做一件事：它列出文件，而这 50 个选项允许你控制接收列表的方式，ls 的这项工作做得非常、非常好。via: https://opensource.com/article/19/7/master-ls-command作者：Seth Kenlon 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Linux 内置命令属于用户 shell 的一部分，本文将告诉你如何识别它们并获取使用它们的帮助。Linux 内置命令是内置于 shell 中的命令，很像内置于墙中的书架。与标准 Linux 命令存储在 /usr/bin 中的方式不同，你不会找到它们的独立文件，你可能使用过相当多的内置命令，但你不会感觉到它们与 ls 和 pwd 等命令有何不同。内置命令与其他 Linux 命令一样使用，它们可能要比不属于 shell 的类似命令运行得快一些。Bash 内置命令包括 alias、export 和 bg 等。正如你担心的那样，因为内置命令是特定于 shell 的，所以它们不会提供手册页。使用 man 来查看 bg，你会看到这样的东西：$ man bg No manual entry for bg判断内置命令的另一个提示是当你使用 which 命令来识别命令的来源时，Bash 不会响应，表示没有与内置命令关联的文件：$ which bg $另一方面，如果你的 shell 是 /bin/zsh，你可能会得到一个更有启发性的响应：% which bg bg: shell built-in commandbash 提供了额外的帮助信息，但它是通过使用 help 命令实现的：$ help bg bg: bg [job_spec ...] Move jobs to the background. Place the jobs identified by each JOB_SPEC in the background, as if they had been started with `&'. If JOB_SPEC is not present, the shell's notion of the current job is used. Exit Status: Returns success unless job control is not enabled or an error occurs.如果你想要查看 bash 提供的所有内置命令的列表，使用 compgen -b 命令。通过管道将命令输出到列中，以获得较好格式的清单。$ compgen -b | column . compgen exit let return typeset : complete export local set ulimit [ compopt false logout shift umask alias continue fc mapfile shopt unalias bg declare fg popd source unset bind dirs getopts printf suspend wait break disown hash pushd test builtin echo help pwd times caller enable history read trap cd eval jobs readarray true command exec kill readonly type如果你使用 help 命令，你将看到一个内置命令列表以及简短描述。但是，这个列表被截断了（以 help 命令结尾）：$ help GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu) These shell commands are defined internally. Type `help' to see this list. Type `help name' to find out more about the function `name'. Use `info bash' to find out more about the shell in general. Use `man -k' or `info' to find out more about commands not in this list. A star (*) next to a name means that the command is disabled. job_spec [&] history [-c] [-d offset] [n] or histo> (( expression )) if COMMANDS; then COMMANDS; [ elif CO> . filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -> : kill [-s sigspec | -n signum | -sigsp> [ arg... ] let arg [arg ...] expression local [option] name[=value] ... alias [-p] [name[=value] ... ] logout [n] bg [job_spec ...] mapfile [-d delim] [-n count] [-O ori> bind [-lpsvPSVX] [-m keymap] [-f filen> popd [-n] [+N | -N] break [n] printf [-v var] format [arguments] builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir] caller [expr] pwd [-LP] case WORD in [PATTERN [| PATTERN]...) > read [-ers] [-a array] [-d delim] [-i> cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O o> command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or> compgen [-abcdefgjksuv] [-o option] [-> return [n] complete [-abcdefgjksuv] [-pr] [-DEI] > select NAME [in WORDS ... ;] do COMMA> compopt [-o|+o option] [-DEI] [name ..> set [-abefhkmnptuvxBCHP] [-o option-n> continue [n] shift [n] coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...] declare [-aAfFgilnrtux] [-p] [name[=va> source filename [arguments] dirs [-clpv] [+N] [-N] suspend [-f] disown [-h] [-ar] [jobspec ... | pid . <p&gt'> test [expr] echo [-neE] [arg ...] time [-p] pipeline enable [-a] [-dnps] [-f filename] [nam> times eval [arg ...] trap [-lp] [[arg] signal_spec ...] exec [-cl] [-a name] [command [argumen> true exit [n] type [-afptP] name [name ...] export [-fn] [name[=value] ...] or exp> typeset [-aAfFgilnrtux] [-p] name[=va> false ulimit [-SHabcdefiklmnpqrstuvxPT] [li> fc [-e ename] [-lnr] [first] [last] or> umask [-p] [-S] [mode] fg [job_spec] unalias [-a] name [name ...] for NAME [in WORDS ... ] ; do COMMANDS> unset [-f] [-v] [-n] [name ...] for (( exp1; exp2; exp3 )); do COMMAND> until COMMANDS; do COMMANDS; done function name { COMMANDS ; } or name (> variables - Names and meanings of som> getopts optstring name [arg] wait [-fn] [id ...] hash [-lr] [-p pathname] [-dt] [name .> while COMMANDS; do COMMANDS; done help [-dms] [pattern ...] { COMMANDS ; }从上面的清单中可以看出，help 命令本身就是内置的。你可以通过向 help 命令提供你感兴趣的内置命令名称来获取关于它们的更多信息，例如 help dirs：$ help dirs dirs: dirs [-clpv] [+N] [-N] Display directory stack. Display the list of currently remembered directories. Directories find their way onto the list with the `pushd' command; you can get back up through the list with the `popd' command. Options: -c clear the directory stack by deleting all of the elements -l do not print tilde-prefixed versions of directories relative to your home directory -p print the directory stack with one entry per line -v print the directory stack with one entry per line prefixed with its position in the stack Arguments: +N Displays the Nth entry counting from the left of the list shown by dirs when invoked without options, starting with zero. -N Displays the Nth entry counting from the right of the list shown by dirs when invoked without options, starting with zero. Exit Status: Returns success unless an invalid option is supplied or an error occurs.内置命令提供了每个 shell 的大部分功能。你使用的任何 shell 都有一些内置命令，但是如何获取这些内置命令的信息可能因 shell 而异。例如，对于 zsh，你可以使用 man zshbuiltins 命令获得其内置命令的描述。$ man zshbuiltins ZSHBUILTINS(1) General Commands Manual ZSHBUILTINS(1) NAME zshbuiltins - zsh built-in commands SHELL BUILTIN COMMANDS Some shell builtin commands take options as described in individual en‐ tries; these are often referred to in the list below as `flags' to avoid confusion with shell options, which may also have an effect on the behav‐ iour of builtin commands. In this introductory section, `option' always has the meaning of an option to a command that should be familiar to most command line users. …在这个冗长的手册页中，你将找到一个内置命令列表，其中包含有用的描述，如下摘录中所示：bg [ job ... ] job ... & Put each specified job in the background, or the current job if none is specified. bindkey See the section `Zle Builtins' in zshzle(1). break [ n ] Exit from an enclosing for, while, until, select or repeat loop. If an arithmetic expression n is specified, then break n levels instead of just one.最后Linux 内置命令对于每个 shell 都很重要，它的操作类似特定于 shell 的命令一样。如果你经常使用不同的 shell，并注意到你经常使用的某些命令似乎不存在或者不能按预期工作，那么它可能是你使用的其他 shell 之一中的内置命令。via: https://www.networkworld.com/article/3410350/getting-help-for-linux-shell-built-ins.html作者：Sandra Henry-Stocker 选题：lujun9972 译者：MjSeven 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Linux 中有三个命令可以用来创建用户账号。你尝试过在 Linux 中手动创建用户吗？我的意思是不使用上面说的三个命令。如果你不知道怎么做，本文可以手把手教你，并向你展示细节部分。你可能想，这怎么可能？别担心，正如我们多次提到的那样，在 Linux 上任何事都可以搞定。这只是其中一例。是的，我们可以做到的。想了解更多吗？在 Linux 中创建用户的三种方法在 Linux 中批量创建用户的两种方法话不多说，让我们开始吧。首先，我们要找出最后创建的 UID 和 GID 信息。 掌握了这些信息之后，就可以继续下一步。# cat /etc/passwd | tail -1 tuser1:x:1153:1154:Test User:/home/tuser1:/bin/bash根据以上输出，最后创建的用户 UID 是 1153，GID 是 1154。为了试验，我们将在系统中添加 tuser2 用户。现在，在/etc/passwd 文件中添加一条用户信息。 总共七个字段，你需要添加一些必要信息。+-----------------------------------------------------------------------+ |username:password:UID:GID:Comments:User Home Directory:User Login Shell| +-----------------------------------------------------------------------+ | | | | | | | 1 2 3 4 5 6 7用户名：这个字段表示用户名称。字符长度必须在 1 到 32 之间。密码（x）：表示存储在 /etc/shadow 文件中的加密密码。用户 ID：表示用户的 ID（UID），每个用户都有独一无二的 UID。UID 0 保留给 root 用户，UID 1-99 保留给系统用户，UID 100-999 保留给系统账号/组。组 ID：表示用户组的 ID（GID），每个用户组都有独一无二的 GID，存储在 /etc/group 文件中。注释/用户 ID 信息：这个字段表示备注，用于描述用户信息。主目录（/home/$USER）：表示用户的主目录。shell（/bin/bash）：表示用户使用的 shell。在文件最后添加用户信息。# vi /etc/passwd tuser2:x:1154:1155:Test User2:/home/tuser2:/bin/bash你需要创建相同名字的用户组。同样地，在 /etc/group 文件中添加用户组信息。# vi /etc/group tuser2:x:1155:做完以上两步之后，给用户设置一个密码。# passwd tuser2 Changing password for user tuser2. New password: Retype new password: passwd: all authentication tokens updated successfully.最后，试着登录新创建的用户。# ssh [email protected] [email protected]'s password: Creating directory '/home/tuser2'. $ls -la total 16 drwx------. 2 tuser2 tuser2 59 Jun 17 09:46 . drwxr-xr-x. 15 root root 4096 Jun 17 09:46 .. -rw-------. 1 tuser2 tuser2 18 Jun 17 09:46 .bash_logout -rw-------. 1 tuser2 tuser2 193 Jun 17 09:46 .bash_profile -rw-------. 1 tuser2 tuser2 231 Jun 17 09:46 .bashrcvia: https://www.2daygeek.com/linux-user-account-creation-in-manual-method/作者：Magesh Maruthamuthu 选题：lujun9972 译者：hello-wn 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出