分类 技术 下的文章

关注于易用性,Stratis 为桌面用户提供了一套强力的高级存储功能。

对桌面 Linux 用户而言,极少或仅在安装系统时配置本地存储。Linux 存储技术进展比较慢,以至于 20 年前的很多存储工具仍在今天广泛使用。但从那之后,存储技术已经提升了不少,我们为何不享受新特性带来的好处呢?

本文介绍 Startis,这是一个新项目,试图让所有 Linux 用户从存储技术进步中受益,适用场景可以是仅有一块 SSD 的单台笔记本,也可以是包含上百块硬盘的存储阵列。Linux 支持新特性,但由于缺乏易于使用的解决方案,使其没有被广泛采用。Stratis 的目标就是让 Linux 的高级存储特性更加可用。

简单可靠地使用高级存储特性

Stratis 希望让如下三件事变得更加容易:存储初始化配置;后续变更;使用高级存储特性,包括 快照 snapshots 精简配置 thin provisioning ,甚至 分层 tiering

Stratis:一个卷管理文件系统

Stratis 是一个 卷管理文件系统 volume-managing filesystem (VMF),类似于 ZFSBtrfs。它使用了存储“池”的核心思想,该思想被各种 VMF 和 形如 LVM) 的独立卷管理器采用。使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建 volume 。与使用 fdiskGParted 执行的传统硬盘分区不同,存储池中的卷分布无需用户指定。

VMF 更进一步与文件系统层结合起来。用户无需在卷上部署选取的文件系统,因为文件系统和卷已经被合并在一起,成为一个概念上的文件树(ZFS 称之为 数据集 dataset ,Brtfs 称之为 子卷 subvolume ,Stratis 称之为文件系统),文件数据位于存储池中,但文件大小仅受存储池整体容量限制。

换一个角度来看:正如文件系统对其中单个文件的真实存储块的实际位置做了一层 抽象 abstract ,而 VMF 对存储池中单个文件系统的真实存储块的实际位置做了一层抽象。

基于存储池,我们可以启用其它有用的特性。特性中的一部分理所当然地来自典型的 VMF 实现 implementation ,例如文件系统快照,毕竟存储池中的多个文件系统可以共享 物理数据块 physical data block 冗余 redundancy ,分层, 完整性 integrity 等其它特性也很符合逻辑,因为存储池是操作系统中管理所有文件系统上述特性的重要场所。

上述结果表明,相比独立的卷管理器和文件系统层,VMF 的搭建和管理更简单,启用高级存储特性也更容易。

Stratis 与 ZFS 和 Btrfs 有哪些不同?

作为新项目,Stratis 可以从已有项目中吸取经验,我们将在第二部分深入介绍 Stratis 采用了 ZFS、Brtfs 和 LVM 的哪些设计。总结一下,Stratis 与其不同之处来自于对功能特性支持的观察,来自于个人使用及计算机自动化运行方式的改变,以及来自于底层硬件的改变。

首先,Stratis 强调易用性和安全性。对个人用户而言,这很重要,毕竟他们与 Stratis 交互的时间间隔可能很长。如果交互不那么友好,尤其是有丢数据的可能性,大部分人宁愿放弃使用新特性,继续使用功能比较基础的文件系统。

第二,当前 API 和 DevOps 式 Devops-style 自动化的重要性远高于早些年。Stratis 提供了支持自动化的一流 API,这样人们可以直接通过自动化工具使用 Stratis。

第三,SSD 的容量和市场份额都已经显著提升。早期的文件系统中很多代码用于优化机械介质访问速度慢的问题,但对于基于闪存的介质,这些优化变得不那么重要。即使当存储池过大而不适合使用 SSD 的情况,仍可以考虑使用 SSD 充当 缓存层 caching tier ,可以提供不错的性能提升。考虑到 SSD 的优良性能,Stratis 主要聚焦存储池设计方面的 灵活性 flexibility 可靠性 reliability

最后,与 ZFS 和 Btrfs 相比,Stratis 具有明显不一样的 实现模型 implementation model (我会在第二部分进一步分析)。这意味着对 Stratis 而言,虽然一些功能较难实现,但一些功能较容易实现。这也加快了 Stratis 的开发进度。

了解更多

如果希望更多了解 Stratis,可以查看本系列的第二部分。你还可以在 Stratis 官网 找到详细的设计文档

如何参与

如果希望参与开发、测试 Stratis 或给出反馈,请订阅我们的邮件列表

GitHub 上的开发项目包括 守护进程 (使用 Rust 开发)和 命令行工具 (使用 Python 开发)两部分。

可以在 Freenode IRC 网络的 #stratis-storage 频道加入我们。

Andy Grover 将在今年的 LinuxFest Northwest 会议上演讲。查看会议安排注册参会


via: https://opensource.com/article/18/4/stratis-easy-use-local-storage-management-linux

作者:Andy Grover 选题:lujun9972 译者:pinewall 校对:wxy

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

Ohcount 是一个简单的命令行工具,可用于分析源代码并打印代码的总行数。它不仅仅是代码行计数器,还可以在含有大量代码的目录中检测流行的开源许可证,例如 GPL。此外,Ohcount 还可以检测针对特定编程 API(例如 KDE 或 Win32)的代码。在编写本指南时,Ohcount 目前支持 70 多种流行的编程语言。它用 C 语言编写,最初由 Ohloh 开发,用于在 www.openhub.net 中生成报告。

在这篇简短的教程中,我们将介绍如何安装和使用 Ohcount 来分析 Debian、Ubuntu 及其变体(如 Linux Mint)中的源代码文件。

Ohcount – 代码行计数器

安装

Ohcount 存在于 Debian 和 Ubuntu 及其派生版的默认仓库中,因此你可以使用 APT 软件包管理器来安装它,如下所示。

$ sudo apt-get install ohcount

用法

Ohcount 的使用非常简单。

你所要做的就是进入你想要分析代码的目录并执行程序。

举例来说,我将分析 coursera-dl 程序的源代码。

$ cd coursera-dl-master/
$ ohcount

以下是 Coursera-dl 的行数摘要:

如你所见,Coursera-dl 的源代码总共包含 141 个文件。第一列说明源码含有的编程语言的名称。第二列显示每种编程语言的文件数量。第三列显示每种编程语言的总行数。第四行和第五行显示代码中由多少行注释及其百分比。第六列显示空行的数量。最后一列和第七列显示每种语言的全部代码行数以及 coursera-dl 的总行数。

或者,直接使用下面的完整路径。

$ ohcount coursera-dl-master/

路径可以是任何数量的单个文件或目录。目录将被递归探测。如果没有给出路径,则使用当前目录。

如果你不想每次都输入完整目录路径,只需 cd 进入它,然后使用 ohcount 来分析该目录中的代码。

要计算每个文件的代码行数,请使用 -i 标志。

$ ohcount -i

示例输出:

当您使用 -a 标志时,ohcount 还可以显示带标注的源码。

$ ohcount -a

如你所见,显示了目录中所有源代码的内容。每行都以制表符分隔的语言名称和语义分类(代码、注释或空白)为前缀。

有时候,你只是想知道源码中使用的许可证。为此,请使用 -l 标志。

$ ohcount -l
lgpl3, coursera_dl.py
gpl coursera_dl.py

另一个可用选项是 -re,用于将原始实体信息打印到屏幕(主要用于调试)。

$ ohcount -re

要递归地查找给定路径内的所有源码文件,请使用 -d 标志。

$ ohcount -d

上述命令将显示当前工作目录中的所有源码文件,每个文件名将以制表符分隔的语言名称为前缀。

要了解更多详细信息和支持的选项,请运行:

$ ohcount --help

对于想要分析自己或其他开发人员开发的代码,并检查代码的行数,用于编写这些代码的语言以及代码的许可证详细信息等,ohcount 非常有用。

就是这些了。希望对你有用。会有更好的东西。敬请关注!

干杯!


via: https://www.ostechnix.com/ohcount-the-source-code-line-counter-and-analyzer/

作者:SK 选题:lujun9972 译者:geekpi 校对:wxy

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

对于一些人来说,终端可能会很吓人。但终端不仅仅是一个输入的黑屏。它通常运行一个 shell(外壳),如此称呼的原因是它围绕着内核。shell 是一个基于文本的界面,可让你在系统上运行命令。它有时也被称为 命令行解释器 command line interpreter (CLI)。与大多数 Linux 发行版一样,Fedora 带有 bash 作为默认 shell。但是,它不是唯一可用的 shell,你可以安装其他的 shell。本文重点介绍 Z Shell (即 zsh)。

Bash 是对 UNIX 中提供的旧式 Bourne shell(sh)的重写(LCTT 译注:Bourne Again SHell)。zsh 视图通过更好的交互以比 bash 更友善。它的一些有用功能是:

  • 可编程的命令行补全 * 在运行的 shell 会话之间共享命令历史 * 拼写纠正 * 可加载模块 * 交互式选择文件和文件夹

zsh 在 Fedora 仓库中存在。要安装,请运行以下命令:

$ sudo dnf install zsh

使用 zsh

要开始使用它,只需输入 zsh,新的 shell 在第一次运行时显示向导。该向导可帮助你配置初始功能,如历史记录行为和自动补全。或者你可以选择保持 rc 文件 为空:

zsh First Run Wizzard

如果输入 1,则启动配置向导。其他选项立即启动 shell。

请注意,用户提示符是 而不是与 bash 的 $。这里的一个重要功能是自动补全功能,它允许你使用 Tab 键在文件和目录之间移动,非常类似于菜单:

zsh cd Feature

另一个有趣的功能是拼写纠正,这有助于在混合大小写的情况下输入文件名:

zsh Auto Completion

使用 zsh 成为你的默认 shell

zsh 提供了很多插件,如 zsh-syntax-highlighting 和著名的 “Oh my zsh”(在此查看其页面)。也许你希望将其设为默认 shell,以便在你在开始会话或打开终端时运行。为此,请使用 chsh(“更改 shell”)命令:

$ chsh -s $(which zsh)

这个命令告诉你的系统你要设置(-s)默认 shell 为该 shell 的正确位置(which zsh)。

图片来自 FlickrKate Ter Haar 提供(CC BY-SA)。


via: https://fedoramagazine.org/set-zsh-fedora-system/

作者:Eduard Lucena 选题:lujun9972 译者:geekpi 校对:wxy

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

上一周我们讲解了 栈是如何工作的 以及在函数的 序言 prologue 上栈帧是如何被构建的。今天,我们来看一下它的相反的过程,在函数 结语 epilogue 中栈帧是如何被销毁的。重新回到我们的 add.c 上:

int add(int a, int b)
{
        int result = a + b;
        return result;
}

int main(int argc)
{
        int answer;
        answer = add(40, 2);
}

简单的一个做加法的程序 - add.c

在运行到第 4 行时,在把 a + b 值赋给 result 后,这时发生了什么:

第一个指令是有些多余而且有点傻的,因为我们知道 eax 已经等于 result 了,但这就是关闭优化时得到的结果。leave 指令接着运行,这一小段做了两个任务:重置 esp 并将它指向到当前栈帧开始的地方,另一个是恢复在 ebp 中保存的值。这两个操作在逻辑上是独立的,因此,在图中将它们分开来说,但是,如果你使用一个调试器去跟踪,你就会发现它们都是自动发生的。

leave 运行后,恢复了前一个栈帧。add 调用唯一留下的东西就是在栈顶部的返回地址。它包含了运行完 add 之后在 main 中必须运行的指令的地址。ret 指令用来处理它:它弹出返回地址到 eip 寄存器(LCTT 译注:32 位的指令寄存器),这个寄存器指向下一个要执行的指令。现在程序将返回到 main ,主要部分如下:

mainadd 中拷贝返回值到本地变量 answer,然后,运行它自己的 结语 epilogue ,这一点和其它的函数是一样的。在 main 中唯一的怪异之处是,保存在 ebp 中的是 null 值,因为它是我们的代码中的第一个栈帧。最后一步执行的是,返回到 C 运行时库(libc),它将退回到操作系统中。这里为需要的人提供了一个 完整的返回顺序 的图。

现在,你已经理解了栈是如何运作的,所以我们现在可以来看一下,一直以来最臭名昭著的黑客行为:利用缓冲区溢出。这是一个有漏洞的程序:

void doRead()
{
        char buffer[28];
        gets(buffer);
}

int main(int argc)
{
        doRead();
}

有漏洞的程序 - buffer.c

上面的代码中使用了 gets 从标准输入中去读取内容。gets 持续读取直到一个新行或者文件结束。下图是读取一个字符串之后栈的示意图:

在这里存在的问题是,gets 并不知道缓冲区(buffer)大小:它毫无查觉地持续读取输入内容,并将读取的内容填入到缓冲区那边的栈,清除保存在 ebp 中的值、返回地址,下面的其它内容也是如此。对于利用这种行为,攻击者制作一个精密的载荷并将它“喂”给程序。在这个时候,栈应该是下图所示的样子,然后去调用 gets

基本的思路是提供一个恶意的汇编代码去运行,通过覆写栈上的返回地址指向到那个代码。这有点像病毒侵入一个细胞,颠覆它,然后引入一些 RNA 去达到它的目的。

和病毒一样,挖掘者的载荷有许多特别的功能。它以几个 nop 指令开始,以提升成功利用的可能性。这是因为返回的地址是一个绝对的地址,需要猜测,而攻击者并不知道保存它的代码的栈的准确位置。但是,只要它们进入一个 nop,这个漏洞利用就成功了:处理器将运行 nop 指令,直到命中它希望去运行的指令。

exec /bin/sh 表示运行一个 shell 的原始汇编指令(假设漏洞是在一个网络程序中,因此,这个漏洞可能提供一个访问系统的 shell)。将一个命令或用户输入以原始汇编指令的方式嵌入到一个程序中的思路是很可怕的,但是,那只是让安全研究如此有趣且“脑洞大开”的一部分而已。对于防范这个怪异的 get,给你提供一个思路,有时候,在有漏洞的程序上,让它的输入转换为小写或者大写,将迫使攻击者写的汇编指令的完整字节不属于小写或者大写的 ascii 字母的范围内。

最后,攻击者重复猜测几次返回地址,这将再次提升他们的胜算。以 4 字节为界进行多次重复,它们就会更好地覆写栈上的原始返回地址。

幸亏,现代操作系统有了 防止缓冲区溢出 的一系列保护措施,包括不可执行的栈和 栈内金丝雀 stack canary 。这个 “ 金丝雀 canary ” 名字来自 煤矿中的金丝雀 canary in a coal mine 中的表述(LCTT 译注:指在过去煤矿工人下井时会带一只金丝雀,因为金丝雀对煤矿中的瓦斯气体非常敏感,如果进入煤矿后,金丝雀死亡,说明瓦斯超标,矿工会立即撤出煤矿。金丝雀做为煤矿中瓦斯预警器来使用),这是对计算机科学词汇的补充,用 Steve McConnell 的话解释如下:

计算机科学拥有比其它任何领域都丰富多彩的语言,在其它的领域中你进入一个无菌室,小心地将温度控制在 68°F,然后,能找到病毒、特洛伊木马、蠕虫、臭虫(bug)、炸弹(逻辑炸弹)、崩溃、爆发(口水战)、扭曲的变性者(双绞线转换头),以及致命错误吗?

—— Steve McConnell 《代码大全 2》

不管怎么说,这里所谓的“栈金丝雀”应该看起来是这个样子的:

金丝雀是通过汇编来实现的。例如,由于 GCC 的 栈保护器 选项的原因使金丝雀能被用于任何可能有漏洞的函数上。函数序言加载一个魔法值到金丝雀的位置,并且在函数结语时确保这个值完好无损。如果这个值发生了变化,那就表示发生了一个缓冲区溢出(或者 bug),这时,程序通过 __stack_chk_fail 被终止运行。由于金丝雀处于栈的关键位置上,它使得栈缓冲区溢出的漏洞挖掘变得非常困难。

深入栈的探秘之旅结束了。我并不想过于深入。下一周我将深入递归、尾调用以及其它相关内容。或许要用到谷歌的 V8 引擎。作为函数的序言和结语的讨论的结束,我引述了美国国家档案馆纪念雕像上的一句名言:( 凡是过去 皆为序章 what is past is prologue )。


via:https://manybutfinite.com/post/epilogues-canaries-buffer-overflows/

作者:Gustavo Duarte 译者:qhwdw 校对:wxy

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

正如你了解的,Arch Linux 是一个滚动版本和 DIY(自己动手)发行版。因此,在经常更新时必须小心,特别是从 AUR 等第三方存储库安装或更新软件包。如果你不知道自己在做什么,那么最终很可能会破坏系统。你有责任使 Arch Linux 更加稳定。但是,我们都会犯错误,要时刻小心是很难的。有时候,你想更新到最新的版本,但你可能会被破损的包卡住。不要惊慌!在这种情况下,你可以简单地回滚到旧的稳定包。这个简短的教程描述了如何在 Arch Linux 中以及它的变体,如 Antergos,Manjaro Linux 中降级一个包,

在 Arch Linux 中降级一个包

在 Arch Linux 中,有一个名为 “downgrade” 的实用程序,可帮助你将安装的软件包降级为任何可用的旧版本。此实用程序将检查你的本地缓存和远程服务器(Arch Linux 仓库)以查找所需软件包的旧版本。你可以从该列表中选择任何一个旧的稳定的软件包并进行安装。

该软件包在官方仓库中不可用,你需要添加非官方的 archlinuxfr 仓库。

为此,请编辑 /etc/pacman.conf 文件:

$ sudo nano /etc/pacman.conf

添加以下行:

[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

保存并关闭文件。

使用以下命令来更新仓库:

$ sudo pacman -Sy

然后在终端中使用以下命令安装 “Downgrade” 实用程序:

$ sudo pacman -S downgrade

示例输出:

resolving dependencies...
 looking for conflicting packages...

Packages (1) downgrade-5.2.3-1

Total Download Size: 0.01 MiB
 Total Installed Size: 0.10 MiB

:: Proceed with installation? [Y/n]

“downgrade” 命令的典型用法是:

$ sudo downgrade [PACKAGE, ...] [-- [PACMAN OPTIONS]]

让我们假设你想要将 opera web 浏览器 降级到任何可用的旧版本。

为此,运行:

$ sudo downgrade opera

此命令将从本地缓存和远程镜像列出所有可用的 opera 包(新旧两种版本)。

示例输出:

Available packages:

 1) opera-37.0.2178.43-1-x86_64.pkg.tar.xz (local)
 2) opera-37.0.2178.43-1-x86_64.pkg.tar.xz (remote)
 3) opera-37.0.2178.32-1-x86_64.pkg.tar.xz (remote)
 4) opera-36.0.2130.65-2-x86_64.pkg.tar.xz (remote)
 5) opera-36.0.2130.65-1-x86_64.pkg.tar.xz (remote)
 6) opera-36.0.2130.46-2-x86_64.pkg.tar.xz (remote)
 7) opera-36.0.2130.46-1-x86_64.pkg.tar.xz (remote)
 8) opera-36.0.2130.32-2-x86_64.pkg.tar.xz (remote)
 9) opera-36.0.2130.32-1-x86_64.pkg.tar.xz (remote)
 10) opera-35.0.2066.92-1-x86_64.pkg.tar.xz (remote)
 11) opera-35.0.2066.82-1-x86_64.pkg.tar.xz (remote)
 12) opera-35.0.2066.68-1-x86_64.pkg.tar.xz (remote)
 13) opera-35.0.2066.37-2-x86_64.pkg.tar.xz (remote)
 14) opera-34.0.2036.50-1-x86_64.pkg.tar.xz (remote)
 15) opera-34.0.2036.47-1-x86_64.pkg.tar.xz (remote)
 16) opera-34.0.2036.25-1-x86_64.pkg.tar.xz (remote)
 17) opera-33.0.1990.115-2-x86_64.pkg.tar.xz (remote)
 18) opera-33.0.1990.115-1-x86_64.pkg.tar.xz (remote)
 19) opera-33.0.1990.58-1-x86_64.pkg.tar.xz (remote)
 20) opera-32.0.1948.69-1-x86_64.pkg.tar.xz (remote)
 21) opera-32.0.1948.25-1-x86_64.pkg.tar.xz (remote)
 22) opera-31.0.1889.174-1-x86_64.pkg.tar.xz (remote)
 23) opera-31.0.1889.99-1-x86_64.pkg.tar.xz (remote)
 24) opera-30.0.1835.125-1-x86_64.pkg.tar.xz (remote)
 25) opera-30.0.1835.88-1-x86_64.pkg.tar.xz (remote)
 26) opera-30.0.1835.59-1-x86_64.pkg.tar.xz (remote)
 27) opera-30.0.1835.52-1-x86_64.pkg.tar.xz (remote)
 28) opera-29.0.1795.60-1-x86_64.pkg.tar.xz (remote)
 29) opera-29.0.1795.47-1-x86_64.pkg.tar.xz (remote)
 30) opera-28.0.1750.51-1-x86_64.pkg.tar.xz (remote)
 31) opera-28.0.1750.48-1-x86_64.pkg.tar.xz (remote)
 32) opera-28.0.1750.40-1-x86_64.pkg.tar.xz (remote)
 33) opera-27.0.1689.76-1-x86_64.pkg.tar.xz (remote)
 34) opera-27.0.1689.69-1-x86_64.pkg.tar.xz (remote)
 35) opera-27.0.1689.66-1-x86_64.pkg.tar.xz (remote)
 36) opera-27.0.1689.54-2-x86_64.pkg.tar.xz (remote)
 37) opera-27.0.1689.54-1-x86_64.pkg.tar.xz (remote)
 38) opera-26.0.1656.60-1-x86_64.pkg.tar.xz (remote)
 39) opera-26.0.1656.32-1-x86_64.pkg.tar.xz (remote)
 40) opera-12.16.1860-2-x86_64.pkg.tar.xz (remote)
 41) opera-12.16.1860-1-x86_64.pkg.tar.xz (remote)

select a package by number:

只需输入你选择的包号码,然后按回车即可安装。

就这样。当前安装的软件包将被降级为旧版本。

另外阅读:在 Arch Linux 中如何将所有软件包降级到特定日期

那么,如何避免已损坏的软件包并使 Arch Linux 更加稳定?

在更新 Arch Linux 之前查看 Arch Linux 新闻论坛,看看是否有任何已报告的问题。过去几周我一直在使用 Arch Linux 作为我的主要操作系统,以下是我在这段时间内发现的一些简单提示,以避免在 Arch Linux 中安装不稳定的软件包。

  1. 避免部分升级。这意味着永远不要运行 pacman -Sy <软件包名称>。此命令将在安装软件包时部分升级你的系统。相反,优先使用 pacman -Syu 来更新系统,然后使用 package -S <软件包名称> 安装软件包。
  2. 避免使用 pacman -Syu -force 命令。-force 标志将忽略程序包和文件冲突,并且可能会以破损的程序包或损坏的系统结束。
  3. 不要跳过依赖性检查。这意味着不要使用 pacman -Rdd <软件包名称>。此命令将在删除软件包时避免依赖性检查。如果你运行这个命令,另一个重要的包所需的关键依赖也可以被删除。最终,它会损坏你的 Arch Linux。
  4. 定期备份重要数据和配置文件以避免数据丢失总是一个好习惯。
  5. 安装第三方软件包和 AUR 等非官方软件包时要小心。不要安装那些正在经历重大发展的软件包。

有关更多详细信息,请查看 Arch Linux 维护指南

我不是 Arch Linux 专家,我仍然在学习如何使它更稳定。如果你有任何技巧让 Arch Linux 保持稳定和安全,请在下面的评论部分保持稳定和安全告诉我,我将洗耳恭听。

希望这可以有帮助。目前为止这就是全部了。我很快会再次在这里与另一篇有趣的文章。在此之前,请继续关注。

干杯!


via: https://www.ostechnix.com/downgrade-package-arch-linux/

作者:SK 选题:lujun9972 译者:MjSeven 校对:wxy

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

Anaconda 是一个完备的、开源的数据科学软件包,拥有超过 600 万社区用户。

像很多人一样,我一直努力加入到快速发展的数据科学领域。我上过 Udemy 的 RPython 语言编程课,那时我分别下载并安装了应用程序。当我试图解决各种依赖关系,安装类似 NumpyMatplotlib 这样的数据科学扩展包时,我了解了 Anaconda Python 发行版

Anaconda 是一个完备的、开源的数据科学包,拥有超过 600 万社区用户。下载和安装 Anaconda 都很容易,支持的操作系统包括 Linux, MacOS 及 Windows。

我感谢 Anaconda 降低了初学者的学习门槛。发行版自带 1000 多个数据科学包以及 Conda 包和虚拟环境管理器,让你无需单独学习每个库的安装方法。就像 Anaconda 官网上提到的,“Anaconda 库中的 Python 和 R 语言的 conda 包是我们在安全环境中修订并编译得到的优化二进制程序,可以在你系统上工作”。

我推荐使用 Anaconda Navigator,它是一个桌面 GUI 系统,包含了发行版自带的全部应用的链接,包括 RStudioiPythonJupyter NotebookJupyterLabSpyderGlueOrange。默认环境采用 Python 3.6,但你可以轻松安装 Python 3.5、 Python 2.7 或 R。文档十分详尽,而且用户社区极好,可以提供额外的支持。

安装 Anaconda

为在我的 Linux 笔记本(I3 CPU,4GB 内存)上安装 Anaconda,我下载了 Anaconda 5.1 Linux 版安装器并运行 md5sum 进行文件校验:

$ md5sum Anaconda3-5.1.0-Linux-x86_64.sh

接着按照安装文档的说明,无论是否在 Bash shell 环境下,执行如下 shell 命令:

$ bash Anaconda3-5.1.0-Linux-x86_64.sh

我完全按照安装指南操作,运行这个精心编写的脚本,大约花费 5 分钟可以完成安装。安装过程中会提示:“是否希望安装器将 Anaconda 的安装路径加入到你的 /home/<user>/.bashrc?”我选择允许并重启了 shell,这会让 .bashrc 中的环境变量生效。

安装完成后,我启动了 Anaconda Navigator,具体操作是在 shell 中执行如下命令:

$ anaconda-navigator

Anaconda Navigator 每次启动时会检查是否有可更新的软件包,如果有,会提醒你进行更新。

按照提醒进行更新即可,无需使用命令行。Anaconda 初次启动会有些慢,如果涉及更新会额外花费几分钟。

当然,你也可以通过执行如下命令手动更新:

$ conda update anaconda-navigator

浏览和安装应用

Navigator 启动后,可以很容易地浏览 Anaconda 发行版包含的应用。按照文档所述,64 位 Python 3.6 版本的 Anaconda 支持 499 个软件包。我浏览的第一个应用是 Jupyter QtConsole,这个简单易用的 GUI 支持内联数据 (inline figures) 和语法高亮。

发行版中包含 Jupyter Notebook,故无需另外安装(不像我用的其它 Python 环境那样)。

我习惯使用的 RStudio 并没有默认安装,但安装它也仅需点击一下鼠标。其它应用的启动或安装也仅需点击一下鼠标,包括 JupyterLab、 Orange、 Glue 和 Spyder 等。

Anaconda 发行版的一个强大功能是创建多套环境。假如我需要创建一套与默认 Python 3.6 不同的 Python 2.7 的环境,可以在 shell 中执行如下命令:

$ conda create -n py27 python=2.7 anaconda

Conda 负责整个安装流程,如需启动它,仅需在 shell 中执行如下命令:

$ anaconda-navigator

在 Anaconda GUI 的 “Applications on” 下拉菜单中选取 py27 即可。

更多内容

如果你想了解更多关于 Anaconda 的信息,可供参考的资源十分丰富。不妨从检索 Anaconda 社区及对应的邮件列表开始。

你是否在使用 Anaconda 发行版及 Navigator 呢?欢迎在评论中留下你的使用感想。


via: https://opensource.com/article/18/4/getting-started-anaconda-python

作者:Don Watkins 选题:lujun9972 译者:pinewall 校对:wxy

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