分类 技术 下的文章

使得 DNS 难以理解的事情之一是它是 分布式的。有成千上万(也许是几十万?我不知道!)的 权威性域名服务器 authoritative nameserver ,以及至少 1000 万个解析器。而且它们正在运行许多不同的软件!不同服务器运行着不同的软件意味着 DNS 的工作方式有很多不一致的地方,这可能导致各种令人沮丧的问题。

但是,与其谈论这些问题,我更感兴趣的是弄清楚 —— 为什么 DNS 是分布式的是一件好事?

为什么 DNS 是分布式的是件好事?

一个原因是 可扩展性 —— DNS 的分布式设计使其更容易扩展,对故障的恢复能力更强。我发现,尽管 DNS 已经有近 40 年的历史,但它的扩展性仍然很好,这真是令人惊讶。这一点非常重要,但这并不是这篇文章的主题。

相反,我想说的是,它是分布式的意味着你可以 控制 你的 DNS 的工作方式。你可以向巨大而复杂的 DNS 服务器中添加更多的服务器!添加你控制的服务器!

昨天我 在 Twitter 上问 为什么你要运行自己的 DNS 服务器,我得到了很多很好的答案,我想在这里总结一下。

你可以运行 2 种类型的 DNS 服务器

你可以运行 2 种主要类型的 DNS 服务器:

  1. 如果你拥有一个域名,你可以为该域名运行一个 权威名称服务器
  2. 如果你有一台电脑(或一个有很多电脑的公司),你可以运行一个 解析器 来为这些电脑解析 DNS。

DNS 不是静态数据库

我经常看到 DNS 的 “电话簿” 比喻,域名就像人名,IP 地址就像电话号码。

这是一个不错的思维模型。但是,“电话簿” 思维模型可能会使你认为,如果你对 google.com 进行 DNS 查询,你将永远得到相同的结果。而这是不正确的。

你在 DNS 查询中得到的记录可能取决于:

  • 你在世界的哪个地方(也许你会得到一个离你更近的服务器的 IP 地址)
  • 你是否在企业网络里(你可以在其中解析内部域名)
  • 该域名是否被你的 DNS 解析器认为是 “坏” 的(它可能被封锁!)
  • 之前的 DNS 查询(也许 DNS 解析器正在做基于 DNS 的负载平衡,每次给你一个不同的 IP 地址)
  • 你是否在使用机场 Wi-Fi 专属门户(机场 Wi-Fi 会在你登录前以不同的方式解析 DNS 记录,它会给你发送一个特殊的 IP 来重定向你)
  • 随便什么

你可能想控制你自己的服务器的很多原因都与 DNS 不是一个静态数据库这一事实有关 —— 对于如何处理 DNS 查询,你可能会有不同的选择(无论是为你的域名还是为你的组织)。

运行权威性名称服务器的理由

这些原因并没有任何特定的顺序。

对于其中一些原因,你不一定必须要运行你自己的权威名称服务器,你只需选择提供了该功能的权威名称服务器服务就行了。

要明确的是:有很多理由 运行自己的权威名称服务器 —— 我就没有运行,我也不想说服你应该这样做。它需要时间来维护,你的服务可能不那么可靠,等等。

原因:安全

这条推文说的很好

[存在] 攻击者通过你的 DNS 供应商的客户支持人员获得 DNS 变更权限的风险,客服本来只应该提供帮助。他们可以被你的 DNS 阻止(也许就是因为缺少这个)。内部可能更容易审计和验证内容。

原因:你喜欢运行 bind/nsd

有几个人提到的一个原因是:“我习惯于编写区域文件和运行 bindnsd ,对我来说这样做更容易。”

如果你喜欢 bind/nsd 的方式,但又不想运维自己的服务器,有几个人提到,你也可以通过运行一个 “隐藏的主服务器” 来获得 bind 的优势,该服务器存储记录,但从一个 “辅助” 服务器提供所有的实际 DNS 查询。这里有一些我发现的关于配置辅助 DNS 的网页,以 NS1cloudflareDyn 作为示例。

我真的不知道什么是最佳的权威 DNS 服务器。我想我只在工作中使用过 nsd。

原因:你可以使用新的记录类型

并非所有的 DNS 服务都支持某些较新的 DNS 记录类型,但如果你运行你自己的 DNS,你就可以支持任何你想要的记录类型。

原因:用户界面

你可能不喜欢你正在使用的 DNS 服务的用户界面(或 API,或干脆没有 API)。这与 “你喜欢运行 BIND ”的原因差不多,也许你喜欢编写区域文件的方式。

原因:你可以自己修复问题

当问题出现时,能够自己解决,有一些明显的优点和缺点(优点:你可以解决问题,缺点:你必须解决问题)。

原因:做一些奇怪的、自定义的事情

你可以写一个 DNS 服务器,做任何你想做的事情,它不一定要只返回一组静态记录。

有几个例子:

原因:省钱

权威名称服务器似乎一般按每百万次 DNS 查询收费。比如,似乎 Route 53 每百万次查询收费 0.5 美元,NS1 每百万次查询收费约 8 美元。

我对一个大型网站的权威 DNS 服务器实际需要解决多少次查询没有概念(哪些类型的网站会对其权威 DNS 服务器进行 10 亿次 DNS 查询?可能是很多,但我没有这方面的经验)。但是有几个人在回复中提到成本是一个原因。

原因:你可以改变你的注册商

如果你为你的域名使用一个单独的权威名称服务器,而不是你的注册商的名称服务器,那么当你转移到一个不同的注册商时,你所要做的就是把你的权威 DNS 服务器设置为正确的值,从而使你的 DNS 恢复正常。你不需要迁移你所有的 DNS 记录,那非常痛苦。

但你不需要为此而运行你自己的名字服务器。

原因:地理 DNS

你可能想根据客户的位置为你的域名返回不同的 IP 地址,给他们一个离他们很近的服务器。

这是很多权威的域名服务器服务所提供的服务,你不需要为此而专门运行名字服务器。

原因:避免针对他人的拒绝服务攻击

许多权威 DNS 服务器是共享的。这意味着,如果有人攻击 google.com 或其他的 DNS 服务器,而你恰好在使用同一个权威 DNS 服务器,你可能会受到影响,即使攻击不是针对你。例如,2016 年的这次 对 Dyn 的 DDoS 攻击

原因:把所有的配置放在一个地方

有一个人提到,他们喜欢把所有的配置(DNS 记录、let's encrypt、nginx 等)放在一台服务器上的同一个地方。

另类原因:把 DNS 当作 VPN 使用

显然,iodine 是一个可以让你通过 DNS 隧道传输流量的权威 DNS 服务器,它可以让你像 VPN 一样与外界联系,

运行解析器的原因

原因:隐私

如果有人能看到你所有的 DNS 查询,他们就有你(或你组织中的每个人)正在访问的所有域名的完整列表!你可能更愿意保持这种隐私。你可能更愿意保持这种隐私。

原因:阻止恶意网站

如果你运行你自己的解析器,你可以(通过不返回任何结果)拒绝解析你认为 “坏” 的域名的 DNS 查询。

几个你可以自己运行(或只是使用)的解析器的例子:

  • Pi-Hole 阻止广告商
  • Quad9 阻止做恶意软件/网络钓鱼/间谍软件的域名。 Cloudflare 似乎有一个 类似的服务
  • 我想也有一些企业安全软件会阻止那些托管恶意软件的域名的 DNS 查询
  • DNS 不是静态数据库。它是非常动态的,答案往往实时取决于查询的 IP 地址、内容服务器的当前负载等。除非你将这些记录的服务委托给做出这些决定的实体,否则很难实时实现。
  • DNS 委派控制使访问控制非常简单。从区域中切下的部分都由控制委派服务器的人控制,所以对一个主机名的责任是隐含在 DNS 委派中的。

原因:在 nginx 中获得动态代理

这里有一个很酷的故事,来自 这条推文

我在一个应用程序中写了一个 DNS 服务器,然后把它设置为 nginx 的解析器,这样我就可以获得动态的后端代理,而不需要 nginx 运行 lua。Nginx 向应用程序发送 DNS 查询,应用程序查询 Redis 并作出相应的反应。这对我正在做的事情来说,效果非常好。

原因:避免恶意解析器

一些 ISP 运行的 DNS 解析器会做一些不好的事情,比如把不存在的域名指向他们控制的 IP,向你显示广告或他们控制的奇怪的搜索页面。

使用你控制的解析器或你信任的另一个解析器可以帮助你避免这种情况。

原因:解析内部域名

你可能有一个内部网络,其域名(比如 blah.corp.yourcompany.com)并不在公共互联网上。为内部网络中的机器运行你自己的解析器,就有可能访问这些域名。

无论是访问只在本地的服务,还是为公共互联网上的服务获得本地地址,你都可以在家庭网络中做同样的事情。

原因:避免你的 DNS 查询被中间人劫持

有一个人

我在我的局域网路由器上运行了一个解析器,它的上游使用了基于 HTTPS 的 DNS(DoH),所以物联网和其他不支持 DoH 或 DoT 的设备不会在外面喷射明文 DNS 查询。

就是这样

对我来说,探索 DNS 的 “原因” 感觉很重要,因为它是一个如此复杂凌乱的系统,我认为大多数人如果不理解为什么这些复杂的东西是有用的,就很难有动力去学习这么复杂的主题。

感谢 Marie 和 Kamal 对这篇文章的讨论,也感谢 Twitter 上提供这些原因的所有人。


via: https://jvns.ca/blog/2022/01/05/why-might-you-run-your-own-dns-server-/

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

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

Audacity 是开源软件世界中的一个经典的强大工具,可以用于录音、编辑等对声音进行操作。

 title=

Audacity 声音编辑器是填补了一个似乎没有人意识到的空白的开源应用程序。它最初是在卡内基梅隆大学开发的,当时很多人还认为电脑只是用来办公和学习的,要进行严肃的多媒体工作需要特殊的 DSP 外围设备。Audacity 认识到,普通计算机用户偶尔也需要编辑音频。在此后的 20 年里,Audacity 团队一直为录音和清理声音打造这个开源的应用程序。

我经常使用 Audacity,作为一个受过培训的编辑,我已经习惯了在我的应用程序中使用重要的、通常是单键的键盘快捷键。通过围绕单个字母建立快捷键,你可以一只手放在鼠标上,一只手放在键盘上,所以选择一个工具或一个重要功能和点击鼠标之间的延迟仅仅是几毫秒而已。在本文中,我将专门给出我在 Audacity 中使用的键盘快捷方式,如果你想优化自己的设置可以参考。

在 Linux 上安装 Audacity

在大多数 Linux 发行版上,Audacity 都可以从你的软件包管理器中获得。在 Fedora、Mageia 和类似的发行版上:

$ sudo dnf install audacity

在 Elementary、Mint 和其他基于 Debian 的发行版上:

$ sudo apt install audacity

然而,我是以 Flatpak 方式来使用 Audacity 的。

在 Windows 或 macOS 上,可以从 Audacity 网站 下载一个 Audacity 安装程序。

它最近有一个叫做 Tenacity 的复刻版本,是另外的开发者团队准备延续 Audacity 的传统而开发的。在写这篇文章的时候,两者基本上是相同的应用程序,所以这篇文章同样适用于两者。以后是否在功能上有分歧,还有待观察。

安装后,从你的应用程序或活动菜单中启动该应用程序。

在 Audacity 中设置输入

首先,你必须设置你的音频 输入,以便 Audacity 接收你使用的麦克风或音频接口的信号。你选择什么输入取决于你的设置和你拥有的音频外围设备。USB 麦克风通常被标为 麦克风 Microphone ,但带有 1/8" 输入插孔的麦克风可能被标为 线路输入 Line in 。你可以选择不同输入:

Pulse Audio 音频服务器

Linux 使用 高级 Linux 声音架构 Advanced Linux Sound Architecture (ALSA)作为其声音的后端,而 macOS 和 Windows 则使用自己的封闭框架。在 Linux 上,你可以将 Pulse Audio 音频服务器设置为你的输入源,将 Audacity 导向 一个 虚拟接口(Pulse),因此你可以从系统设置中选择声音输入。这是我的首选方法,因为它将所有控制集中在一个方便的控制面板上。在一个应用程序中选择一个麦克风,却发现麦克风在其他地方被静音的日子已经一去不复返了。

 title=

设备访问

如果你的发行版或操作系统没有使用 Pulse Audio 音频服务器,或者由于某种原因你喜欢直接访问声音设备,你可以从下拉菜单中选择一个设备。这需要了解你的系统是如何列出声音设备的,这有时候并不很好找。台式机可能有几个输入源,有些在机箱的后面,有些在前面的面板上。笔记本电脑通常输入方式较少,但你可能在网络摄像头附近有一个麦克风,如果你使用的是外部麦克风,可能还有一个。

用 Audacity 录制音频

选中你的输入后,按“ 录音 Record ”按钮(有红点的按钮)。

 title=

如果你是对着麦克风录音,你所要做的就是开始说话。如果你从,比如说,黑胶唱片机 录制输入,那么你必须启动它。不管是什么,只要 Audacity 处于录音模式,任何发送到你选择的输入的信号都会被写入 Audacity 并在你的屏幕上呈现为波形。

我的快捷方式: 我使用 R 键来开始录音。默认情况下,按下空格键停止录音(也可以回放录音)。

编辑音频

录音很少完全按计划进行。也许你过早地开始录音,不得不忍受几秒钟的黑胶静音(它就像静音,但更嘈杂),或者你发现你的语气停顿都是 “呃”、“嗯”或其他声调,或者你一开始就录制错误了。Audacity 首先是一个波形编辑器,这意味着你可以在最终的录音中剪掉你不想要的声音,就像你在文字处理器中输入的文字一样容易编辑。

编辑过零点的声音

Audacity 的主要编辑工具是“ 选择工具 Selection Tool ”。它是你在文字处理程序中看到的熟悉的“工字形”光标,它的功能在这里也是一样。你可以点击并拖动这个光标,穿过声音的一个区域,然后你可以复制、粘贴、剪切、删除或直接播放这个区域。

我的快捷键: 我用 I 键来激活“ 选择工具 Selection Tool ”,因为光标看起来像字母 “I”。

在文字处理器中,你可以非常清楚地看到每个字母的结尾和开头。你不可能不小心选择和删除一个字母的一半。然而,在现代应用程序中,声音的 “分辨率”(称为 采样率)非常好,所以人眼很难在音频波中找到一个清晰的断点。Audacity 可以调整你的选择,使你选择的区域落在所谓的 过零点 zero crossing ,这可以避免在你做切割的地方出现微妙但明显的突兀现象。

 title=

在你做出选择后,进入“ 选择 Select ”菜单,选择 “ 在过零点 At Zero Crossings ”。

我的快捷键: 我使用 Z 键来调整选区到过零点,使用 X 键来删除一个区域(它使我不必将手一直移到 DelBackspace )。

腾出空间

编辑的好处是,你的最终产品不一定要与你录制的内容一致。我曾经录制过一些讲座,甚至录制过一些读物的剧本,但最终因为某种原因而偏离了方向,或者遗漏了一部分重要的信息,后来在发布前又重新编排或添加了全新的音频。

移动所选的音频与删除类似,但不是删除音频,而是复制和粘贴所选内容,就像你在文字处理器中做的那样 —— 使用标准的键盘快捷键复制或剪切,重新定位你的光标,然后粘贴。不过,为插入的内容腾出空间,需要在音频时间线上留出空位,这样你就可以录制额外的音频来填补你所创造的空白。为此,你可以使用“ 选择工具 Selection Tool ”和“ 时间偏移工具 Time Shift Tool ”。

要在音频中创建一个空隙,将你的“ 选择工具 Selection Tool ”的光标放在你想添加空隙的地方。导航到“ 编辑 Edit ”菜单,选择“ 剪辑边界 Clip Boundaries ”子菜单,然后选择“ 分割 Split ”。这将在你的选择点上分割你的音频。

激活顶部工具栏中的“ 时间偏移工具 Time Shift Tool ”(图标是两个连接的箭头,分别指向左边和右边),点击并拖动分割后的音频的右半部分,创建一个间隙。

 title=

我的快捷方式: 我用 K 来分割,用 T 来激活“ 时间偏移工具 Time Shift Tool ”。

导出音频

当你对你的音频感到满意时,你可以导出它,这样你就可以与他人分享。Audacity 可以选择它能够导出的格式,并且它能够将其输出到像 ffmpeg 这样的工具,以获得比你可能永远需要的更多格式。

我更喜欢用 FLAC 格式输出音频,这种音频格式有点像 WAV,只是它是无损压缩的。它只占用一小部分空间,而没有任何质量上的损失。要尝试它,去“ 文件 File ”菜单,选择“ 导出 Export ”子菜单,然后选择“ 导出音频 Export Audio ”。有了 FLAC 文件作为你的 黄金镜像,你可以用 SoundConverter 把你的文件转换成任何数量的传输目标的最佳格式 —— 用于浏览器的 Ogg Vorbis 或 Opus 或 Webm,用于苹果设备的 M4A 文件,也许还有用于传统系统的 MP3。

如果你只是想从 Audacity 快速简单地导出,简单的选择是 Ogg Vorbis。这是一种开源的文件格式,可以在大多数网页浏览器(Firefox、Chromium、Chrome、Android 和 Edge)和 如 VLC、mpv 等媒体播放器 播放。

探索 Audacity

Audacity 是开源软件世界中的一个经典动力工具。基本的录音和编辑仅仅是个开始。你可以添加效果、过滤掉(一些)噪音、调整速度、改变音高等等。无论你是在学校录制讲座、混合鼓循环、为视频游戏拼接声音,还是只是在探索音频世界,都可以去启动 Audacity,发挥创意!


via: https://opensource.com/article/21/12/audacity-linux-creative-app

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

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

这篇文章讨论了安装 NumPy,然后创建、读取和排序 NumPy 数组。

 title=

NumPy(即 Numerical Python)是一个库,它使得在 Python 中对线性数列和矩阵进行统计和集合操作变得容易。我在 Python 数据类型的笔记中介绍过,它比 Python 的列表快几个数量级。NumPy 在数据分析和科学计算中使用得相当频繁。

我将介绍安装 NumPy,然后创建、读取和排序 NumPy 数组。NumPy 数组也被称为 ndarray,即 N 维数组的缩写。

安装 NumPy

使用 pip 安装 NumPy 包非常简单,可以像安装其他软件包一样进行安装:

pip install numpy

安装了 NumPy 包后,只需将其导入你的 Python 文件中:

import numpy as np

numpynp 之名导入是一个标准的惯例,但你可以不使用 np,而是使用你想要的任何其他别名。

为什么使用 NumPy? 因为它比 Python 列表要快好几个数量级

当涉及到处理大量的数值时,NumPy 比普通的 Python 列表快几个数量级。为了看看它到底有多快,我首先测量在普通 Python 列表上进行 min()max() 操作的时间。

我将首先创建一个具有 999,999,999 项的 Python 列表:

>>> my_list = range(1, 1000000000)
>>> len(my_list)
999999999

现在我将测量在这个列表中找到最小值的时间:

>>> start = time.time()
>>> min(my_list)
1
>>> print('Time elapsed in milliseconds: ' + str((time.time() - start) * 1000))
Time elapsed in milliseconds: 27007.00879096985

这花了大约 27,007 毫秒,也就是大约 27 秒。这是个很长的时间。现在我试着找出寻找最大值的时间:

>>> start = time.time()
>>> max(my_list)
999999999
>>> print('Time elapsed in milliseconds: ' + str((time.time() - start) * 1000))
Time elapsed in milliseconds: 28111.071348190308

这花了大约 28,111 毫秒,也就是大约 28 秒

现在我试试用 NumPy 找到最小值和最大值的时间:

>>> my_list = np.arange(1, 1000000000)
>>> len(my_list)
999999999
>>> start = time.time()
>>> my_list.min()
1
>>> print('Time elapsed in milliseconds: ' + str((time.time() - start) * 1000))
Time elapsed in milliseconds: 1151.1778831481934
>>>
>>> start = time.time()
>>> my_list.max()
999999999
>>> print('Time elapsed in milliseconds: ' + str((time.time() - start) * 1000))
Time elapsed in milliseconds: 1114.8970127105713

找到最小值花了大约 1151 毫秒,找到最大值 1114 毫秒。这大约是 1 秒

正如你所看到的,使用 NumPy 可以将寻找一个大约有 10 亿个值的列表的最小值和最大值的时间 从大约 28 秒减少到 1 秒。这就是 NumPy 的强大之处。

使用 Python 列表创建 ndarray

有几种方法可以在 NumPy 中创建 ndarray。

你可以通过使用元素列表来创建一个 ndarray:

>>> my_ndarray = np.array([1, 2, 3, 4, 5])
>>> print(my_ndarray)
[1 2 3 4 5]

有了上面的 ndarray 定义,我将检查几件事。首先,上面定义的变量的类型是 numpy.ndarray。这是所有 NumPy ndarray 的类型:

>>> type(my_ndarray)
<class 'numpy.ndarray'>

这里要注意的另一件事是 “ 形状 shape ”。ndarray 的形状是 ndarray 的每个维度的长度。你可以看到,my_ndarray 的形状是 (5,)。这意味着 my_ndarray 包含一个有 5 个元素的维度(轴)。

>>> np.shape(my_ndarray)
(5,)

数组中的维数被称为它的 “ rank ”。所以上面的 ndarray 的秩是 1。

我将定义另一个 ndarray my_ndarray2 作为一个多维 ndarray。那么它的形状会是什么呢?请看下面:

>>> my_ndarray2 = np.array([(1, 2, 3), (4, 5, 6)])
>>> np.shape(my_ndarray2)
(2, 3)

这是一个秩为 2 的 ndarray。另一个要检查的属性是 dtype,也就是数据类型。检查我们的 ndarray 的 dtype 可以得到以下结果:

>>> my_ndarray.dtype
dtype('int64')

int64 意味着我们的 ndarray 是由 64 位整数组成的。NumPy 不能创建混合类型的 ndarray,必须只包含一种类型的元素。如果你定义了一个包含混合元素类型的 ndarray,NumPy 会自动将所有的元素类型转换为可以包含所有元素的最高元素类型。

例如,创建一个 intfloat 的混合序列将创建一个 float64 的 ndarray:

>>> my_ndarray2 = np.array([1, 2.0, 3])
>>> print(my_ndarray2)
[1. 2. 3.]
>>> my_ndarray2.dtype
dtype('float64')

另外,将其中一个元素设置为 string 将创建 dtype 等于 <U21 的字符串 ndarray,意味着我们的 ndarray 包含 unicode 字符串:

>>> my_ndarray2 = np.array([1, '2', 3])
>>> print(my_ndarray2)
['1' '2' '3']
>>> my_ndarray2.dtype
dtype('<U21')

size 属性将显示我们的 ndarray 中存在的元素总数:

>>> my_ndarray = np.array([1, 2, 3, 4, 5])
>>> my_ndarray.size
5

使用 NumPy 方法创建 ndarray

如果你不想直接使用列表来创建 ndarray,还有几种可以用来创建它的 NumPy 方法。

你可以使用 np.zeros() 来创建一个填满 0 的 ndarray。它需要一个“形状”作为参数,这是一个包含行数和列数的列表。它还可以接受一个可选的 dtype 参数,这是 ndarray 的数据类型:

>>> my_ndarray = np.zeros([2,3], dtype=int)
>>> print(my_ndarray)
[[0 0 0]
 [0 0 0]]

你可以使用 np. ones() 来创建一个填满 1 的 ndarray:

>>> my_ndarray = np.ones([2,3], dtype=int)
>>> print(my_ndarray)
[[1 1 1]
 [1 1 1]]

你可以使用 np.full() 来给 ndarray 填充一个特定的值:

>>> my_ndarray = np.full([2,3], 10, dtype=int)
>>> print(my_ndarray)
[[10 10 10]
 [10 10 10]]

你可以使用 np.eye() 来创建一个单位矩阵 / ndarray,这是一个沿主对角线都是 1 的正方形矩阵。正方形矩阵是一个行数和列数相同的矩阵:

>>> my_ndarray = np.eye(3, dtype=int)
>>> print(my_ndarray)
[[1 0 0]
 [0 1 0]
 [0 0 1]]

你可以使用 np.diag() 来创建一个沿对角线有指定数值的矩阵,而在矩阵的其他部分为 0

>>> my_ndarray = np.diag([10, 20, 30, 40, 50])
>>> print(my_ndarray)
[[10  0  0  0  0]
 [ 0 20  0  0  0]
 [ 0  0 30  0  0]
 [ 0  0  0 40  0]
 [ 0  0  0  0 50]]

你可以使用 np.range() 来创建一个具有特定数值范围的 ndarray。它是通过指定一个整数的开始和结束(不包括)范围以及一个步长来创建的:

>>> my_ndarray = np.arange(1, 20, 3)
>>> print(my_ndarray)
[ 1  4  7 10 13 16 19]

读取 ndarray

ndarray 的值可以使用索引、分片或布尔索引来读取。

使用索引读取 ndarray 的值

在索引中,你可以使用 ndarray 的元素的整数索引来读取数值,就像你读取 Python 列表一样。就像 Python 列表一样,索引从 0 开始。

例如,在定义如下的 ndarray 中:

>>> my_ndarray = np.arange(1, 20, 3)

第四个值将是 my_ndarray[3],即 10。最后一个值是 my_ndarray[-1],即 19

>>> my_ndarray = np.arange(1, 20, 3)
>>> print(my_ndarray[0])
1
>>> print(my_ndarray[3])
10
>>> print(my_ndarray[-1])
19
>>> print(my_ndarray[5])
16
>>> print(my_ndarray[6])
19

使用分片读取 ndarray

你也可以使用分片来读取 ndarray 的块。分片的工作方式是用冒号(:)操作符指定一个开始索引和一个结束索引。然后,Python 将获取该开始和结束索引之间的 ndarray 片断:

>>> print(my_ndarray[:])
[ 1  4  7 10 13 16 19]
>>> print(my_ndarray[2:4])
[ 7 10]
>>> print(my_ndarray[5:6])
[16]
>>> print(my_ndarray[6:7])
[19]
>>> print(my_ndarray[:-1])
[ 1  4  7 10 13 16]
>>> print(my_ndarray[-1:])
[19]

分片创建了一个 ndarray 的引用(或视图)。这意味着,修改分片中的值也会改变原始 ndarray 的值。

比如说:

>>> my_ndarray[-1:] = 100
>>> print(my_ndarray)
[  1   4   7  10  13  16 100]

对于秩超过 1 的 ndarray 的分片,可以使用 [行开始索引:行结束索引, 列开始索引:列结束索引] 语法:

>>> my_ndarray2 = np.array([(1, 2, 3), (4, 5, 6)])
>>> print(my_ndarray2)
[[1 2 3]
 [4 5 6]]
>>> print(my_ndarray2[0:2,1:3])
[[2 3]
 [5 6]]

使用布尔索引读取 ndarray 的方法

读取 ndarray 的另一种方法是使用布尔索引。在这种方法中,你在方括号内指定一个过滤条件,然后返回符合该条件的 ndarray 的一个部分。

例如,为了获得一个 ndarray 中所有大于 5 的值,你可以指定布尔索引操作 my_ndarray[my_ndarray > 5]。这个操作将返回一个包含所有大于 5 的值的 ndarray:

>>> my_ndarray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> my_ndarray2 = my_ndarray[my_ndarray > 5]
>>> print(my_ndarray2)
[ 6  7  8  9 10]

例如,为了获得一个 ndarray 中的所有偶数值,你可以使用如下的布尔索引操作:

>>> my_ndarray2 = my_ndarray[my_ndarray % 2 == 0]
>>> print(my_ndarray2)
[ 2  4  6  8 10]

而要得到所有的奇数值,你可以用这个方法:

>>> my_ndarray2 = my_ndarray[my_ndarray % 2 == 1]
>>> print(my_ndarray2)
[1 3 5 7 9]

ndarray 的矢量和标量算术

NumPy 的 ndarray 允许进行矢量和标量算术操作。在矢量算术中,在两个 ndarray 之间进行一个元素的算术操作。在标量算术中,算术运算是在一个 ndarray 和一个常数标量值之间进行的。

如下的两个 ndarray:

>>> my_ndarray = np.array([1, 2, 3, 4, 5])
>>> my_ndarray2 = np.array([6, 7, 8, 9, 10])

如果你将上述两个 ndarray 相加,就会产生一个两个 ndarray 的元素相加的新的 ndarray。例如,产生的 ndarray 的第一个元素将是原始 ndarray 的第一个元素相加的结果,以此类推:

>>> print(my_ndarray2 + my_ndarray)
[ 7  9 11 13 15]

这里,716 的和,这是我相加的 ndarray 中的前两个元素。同样,15510 之和,是最后一个元素。

请看以下算术运算:

>>> print(my_ndarray2 - my_ndarray)
[5 5 5 5 5]
>>>
>>> print(my_ndarray2 * my_ndarray)
[ 6 14 24 36 50]
>>>
>>> print(my_ndarray2 / my_ndarray)
[6.         3.5        2.66666667 2.25       2.        ]

在 ndarray 中加一个标量值也有类似的效果,标量值被添加到 ndarray 的所有元素中。这被称为“ 广播 broadcasting ”:

>>> print(my_ndarray + 10)
[11 12 13 14 15]
>>>
>>> print(my_ndarray - 10)
[-9 -8 -7 -6 -5]
>>>
>>> print(my_ndarray * 10)
[10 20 30 40 50]
>>>
>>> print(my_ndarray / 10)
[0.1 0.2 0.3 0.4 0.5]

ndarray 的排序

有两种方法可以对 ndarray 进行原地或非原地排序。原地排序会对原始 ndarray 进行排序和修改,而非原地排序会返回排序后的 ndarray,但不会修改原始 ndarray。我将尝试这两个例子:

>>> my_ndarray = np.array([3, 1, 2, 5, 4])
>>> my_ndarray.sort()
>>> print(my_ndarray)
[1 2 3 4 5]

正如你所看到的,sort() 方法对 ndarray 进行原地排序,并修改了原数组。

还有一个方法叫 np.sort(),它对数组进行非原地排序:

>>> my_ndarray = np.array([3, 1, 2, 5, 4])
>>> print(np.sort(my_ndarray))
[1 2 3 4 5]
>>> print(my_ndarray)
[3 1 2 5 4]

正如你所看到的,np.sort() 方法返回一个已排序的 ndarray,但没有修改它。

总结

我已经介绍了很多关于 NumPy 和 ndarray 的内容。我谈到了创建 ndarray,读取它们的不同方法,基本的向量和标量算术,以及排序。NumPy 还有很多东西可以探索,包括像 union()intersection()这样的集合操作,像 min()max() 这样的统计操作,等等。

我希望我上面演示的例子是有用的。祝你在探索 NumPy 时愉快。

本文最初发表于 作者的个人博客,经授权后改编。


via: https://opensource.com/article/21/9/python-numpy

作者:Ayush Sharma 选题:lujun9972 译者:wxy 校对:wxy

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

在 Linux 或 BSD 操作系统上设置基本的实时流媒体服务器。

实时视频流越来越流行。亚马逊的 Twitch 和谷歌的 YouTube 等平台拥有数百万用户,这些用户消磨了无数小时的来观看直播和录制视频。这些视频服务通常可以免费使用,但需要你拥有一个帐户,并且一般会将你的视频内容隐藏在广告中。有些人不希望他们的视频提供给大众观看,或者想更多地控制自己的视频内容。幸运的是,借助强大的开源软件,任何人都可以设置直播服务器。

入门

在本教程中,我将说明如何使用 Linux 或 BSD 操作系统设置基本的实时流媒体服务器。

搭建实时流媒体服务器不可避免地提到系统需求问题。这些需求多种多样,因为实时流媒体涉及许多因素,例如:

  • 流媒体质量: 你想以高清流媒体播放还是标清视频就可以满足你的需求?
  • 收视率: 你的视频预计有多少观众?
  • 存储: 你是否打算保留已保存的视频流副本?
  • 访问: 你的视频流是私有的还是向全世界开放的?

在硬件要求方面没有固定规则,因此我建议你进行测试,以便找到最适合你需求的配置。本项目中,我将服务器安装在配有 4GB 内存、20GB 硬盘空间和单个 Intel i7 处理器内核的虚拟机上。

本项目使用 实时消息传递协议 Real-Time Messaging Protocol (RTMP)来处理音频和视频流。当然还有其他协议可用,但我选择 RTMP 是因为它具有广泛的支持。鉴于像 WebRTC 这样的开放标准变得更加兼容,我比较推荐这条路线。

同样重要的是,要明白“实时”并不总是意味着即时。视频流必须经过编码、传输、缓冲和显示,这通常会增大延迟。延迟可以被缩短或延长,具体取决于你创建的流类型及其属性。

设置 Linux 服务器

你可以使用许多不同的 Linux 发行版,但我更喜欢 Ubuntu,因此我下载了 Ubuntu 服务器版 作为我的操作系统。如果你希望你的服务器具有图形用户界面(GUI),请随意使用 Ubuntu 桌面版 或其多种风味版本之一。然后,我在我的计算机或虚拟机上启动了 Ubuntu 安装程序,并选择了最适合我的环境的设置。以下是我采取的步骤。

注意:因为这是一个服务器,你可能需要设置静态网络。

安装程序完成并重新启动系统后,你会看到一个可爱的新 Ubuntu 系统。 与任何新安装的操作系统一样,安装任何可用的更新:

sudo apt update
sudo apt upgrade

这个流媒体服务器将使用非常强大通用的 Nginx 网络服务器,所以你需要安装它:

sudo apt install nginx

然后你需要获取 RTMP 模块,以便 Nginx 可以处理你的媒体流:

sudo add-apt-repository universe
sudo apt install libnginx-mod-rtmp

修改你的网页服务器配置,使其能够接受和传送你的媒体流。

sudo nano /etc/nginx/nginx.conf

滚动到配置文件的底部并添加以下代码:

rtmp {
   server {
    listen 1935;
    chunk_size 4096;

    application live {
      live on;
      record off;
    }
  }
}

保存配置。我是使用 Nano 来编辑配置文件的异端。在 Nano 中,你可以通过快捷键 Ctrl+XY 并按下回车来保存你的配置。

这么一个非常小的配置就可以创建一个可工作的流服务器。稍后你将添加更多内容到此配置中,但这是一个很好的起点。

在开始第一个流之前,你需要使用新配置重新启动 Nginx:

sudo systemctl restart nginx

设置 BSD 服务器

如果是“小恶魔”(LCTT 译者注:FreeBSD 的标志是一个拿着叉子的红色小恶魔)的信徒,那么建立并运行一个流媒体服务器也非常容易。

前往 FreeBSD 网站并下载最新版本。在你的计算机或虚拟机上启动 FreeBSD 安装程序,然后执行初始步骤并选择最适合你环境的设置。由于这是一个服务器,你可能需要设置静态网络。

在安装程序完成并重新启动系统后,你应该就拥有了一个闪亮的新 FreeBSD 系统。像任何其他新安装的系统一样,你可能希望更新所有内容(从这一步开始,请确保你以 root 身份登录):

pkg update
pkg upgrade

安装 Nano 来编辑配置文件:

pkg install nano

这个流媒体服务器将使用非常强大通用的 Nginx 网络服务器。 你可以使用 FreeBSD 所拥有的优秀 ports 系统来构建 Nginx。

首先,更新你的 ports 树:

portsnap fetch
portsnap extract

进入 Nginx ports 目录:

cd /usr/ports/www/nginx

运行如下命令开始构建 Nginx:

make install

你将看到一个屏幕,询问你的 Nginx 构建中要包含哪些模块。对于这个项目,你需要添加 RTMP 模块。向下滚动直到选中 RTMP 模块,并按下空格键。然后按回车键继续剩下的构建和安装。

Nginx 安装完成后,就该为它配置流式传输了。

首先,在 /etc/rc.conf 中添加一个条目以确保 Nginx 服务器在系统启动时启动:

nano /etc/rc.conf

将此文本添加到文件中:

nginx_enable="YES"

接下来,创建一个网站根目录,Nginx 将从中提供其内容。我自己的目录叫 stream

cd /usr/local/www/
mkdir stream
chmod -R 755 stream/

现在你已经创建了你的流目录,通过编辑配置文件来配置 Nginx:

nano /usr/local/etc/nginx/nginx.conf

在文件顶部加载你的流媒体模块:

load_module /usr/local/libexec/nginx/ngx_stream_module.so;
load_module /usr/local/libexec/nginx/ngx_rtmp_module.so;

Server 部分下,更改 root 位置以匹配你之前创建的目录位置:

Location / {
  root /usr/local/www/stream
}

最后,添加你的 RTMP 设置,以便 Nginx 知道如何处理你的媒体流:

rtmp {
  server {
    listen 1935;
    chunk_size 4096;
    
    application live {
      live on;
      record off;
    }
  }
}

保存配置。在 Nano 中,你可以通过快捷键 Ctrl+XY,然后按回车键来执行此操作。

如你所见,这么一个非常小的配置将创建一个工作的流服务器。稍后,你将添加更多内容到此配置中,但这将为你提供一个很好的起点。

但是,在开始第一个流之前,你需要使用新配置重新启动 Nginx:

service nginx restart

设置你的流媒体软件

使用 OBS 进行广播

现在你的服务器已准备好接受你的视频流,是时候设置你的流媒体软件了。本教程使用功能强大的开源的 Open Broadcast Studio(OBS)。

前往 OBS 网站,找到适用于你的操作系统的版本并安装它。OBS 启动后,你应该会看到一个首次运行向导,该向导将帮助你使用最适合你的硬件的设置来配置 OBS。

OBS 没有捕获任何内容,因为你没有为其提供源。在本教程中,你只需为流捕获桌面。单击“ 来源 Source ”下的 “+” 按钮,选择“ 显示捕获 Screen Capture ”,然后选择要捕获的桌面。

单击“ 确定 OK ”,你应该会看到 OBS 镜像了你的桌面。

现在可以将你新配置的视频流发送到你的服务器了。在 OBS 中,单击“ 文件 > 设置 File > Settings ”。 单击“ Stream ”部分,并将“ 串流类型 Stream Type ” 设置为“ 自定义流媒体服务器 Custom Streaming Server ”。

在 URL 框中,输入前缀 rtmp:// 后跟流媒体服务器的 IP 地址,后跟 /live。例如,rtmp://IP-ADDRESS/live

接下来,你可能需要输入“ 串流密钥 Stream key ”,这是观看你的流所需的特殊标识符。 在“ 串流密钥 Stream key ”框中输入你想要(并且可以记住)的任何关键词。

单击“ 应用 Apply ”,然后单击“ 确定 OK ”。

现在 OBS 已配置为将你的流发送到你的服务器,你可以开始你的第一个视频流。 单击“ 开始推流 Start Streaming ”。

如果一切正常,你应该会看到按钮更改为“ 停止推流 Stop Streaming ”,并且在 OBS 的底部将出现一些带宽指标。

如果你收到错误消息,请仔细检查 OBS 中的流设置是否有拼写错误。如果一切看起来都不错,则可能是另一个问题阻止了它的工作。

观看你的视频流

如果没有人观看,就说明直播视频不是很好,所以请成为你的第一个观众!

有许多支持 RTMP 的开源媒体播放器,但最著名的可能是 VLC 媒体播放器

安装并启动 VLC 后,通过单击“ 媒体 > 打开网络串流 Media > Open Network Stream ” 打开你的流。输入你的流的路径,添加你在 OBS 中设置的串流密钥,然后单击“ 播放 Play ”。 例如,rtmp://IP-ADDRESS/live/SECRET-KEY

你现在应该可以看到自己的实时视频流了!

接下来要做什么?

本项目是一个非常简单的设置,可以让你开始工作。 以下是你可能想要使用的另外两个功能。

  • 限制访问: 你可能想要做的下一件事情是限制对你服务器的访问,因为默认设置允许任何人与服务器之间进行流传输。有多种设置方法,例如操作系统防火墙、.htaccess 文件,甚至使用 STMP 模块中的内置访问控制
  • 录制流: 这个简单的 Nginx 配置只会流传输而不会保存你的视频,但这很容易修改。在 Nginx 配置文件中的 RTMP 部分下,设置录制选项和要保存视频的位置。确保你设置的路径存在并且 Nginx 能够写入它。
application live {
  live on;
  record all;
  record_path /var/www/html/recordings;
  record_unique on;
}

实时流媒体的世界在不断发展,如果你对更高级的用途感兴趣,可以在互联网上找到许多其他很棒的资源。祝你好运,直播快乐!


via: https://opensource.com/article/19/1/basic-live-video-streaming-server

作者:Aaron J.Prisk 选题:lujun9972 译者:Starryi 校对:wxy

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

当你点击 Ubuntu 网站 上的下载按钮时,它会给你几个选项。其中两个分别是 Ubuntu 桌面版和 Ubuntu 服务器版。

这可能会让新用户感到困惑。为什么会有两个(实际上是四个)?应该下载哪一个?Ubuntu 桌面版还是服务器版?它们是一样的吗?有什么区别?

Ubuntu 网站给了你多种选择

我将解释 Ubuntu 的桌面版和服务器版的区别。我还会解释你应该使用哪个变体。

Ubuntu 桌面版与 Ubuntu 服务器版

Ubuntu 桌面版和服务器版

要了解 Ubuntu 桌面版和服务器版的区别,你应该了解桌面操作系统和服务器操作系统的区别。

桌面操作系统

桌面电脑 Desktop 是指个人电脑(PC)。桌面电脑操作系统带有一个图形用户界面,以便用户可以使用鼠标和键盘操作。桌面电脑的主要目的是给你一个系统,可以用来浏览网页、编辑文档、查看/编辑图片和视频、编码和游戏。基本上,就是为个人、终端用户或家庭成员提供了一个通用的计算机。

我在这里使用桌面电脑这个术语,但这并不意味着它不能用于笔记本电脑。桌面电脑是个人电脑的通用术语。

服务器操作系统

另一方面,服务器操作系统是专门为托管网站、应用程序、媒体服务器、数据库等网络服务而打造的。

通常情况下,服务器操作系统不带有图形界面。如果是基于 Linux 的操作系统,你就得通过终端的命令来使用该系统。

这里的好处是,服务器操作系统不需要(浪费)大量的内存和计算能力,因为它们不使用 图形化桌面环境。除此以外,服务器操作系统的软件包配置也不同。

现在你对服务器和桌面的区别有了一些了解,让我们看看 Ubuntu 服务器版和桌面版的区别。

用户界面

Ubuntu 服务器版和桌面版之间最明显的区别是用户界面。

Ubuntu 桌面版的特点是采用 GNOME 桌面环境的图形化用户界面。这使得它在鼠标点击的帮助下更容易使用。

图为 Ubuntu GNOME 版的用户界面

Ubuntu 服务器版采用 无头方式 headless 运行。你只有在登录后才会看到一个终端界面。你经常会从其他电脑上通过 SSH 来远程管理它。

通过 SSH 连接到远程 Ubuntu 服务器

安装

由于有了图形化的安装程序,将 Ubuntu 作为桌面电脑是很容易的。你可以创建一个 临场 USB Live USB ,无需安装即可体验桌面版。如果你喜欢,你可以按照屏幕上的指示在几分钟内安装它。

通过图形化安装程序安装 Ubuntu 桌面版

将 Ubuntu 作为服务器安装并不像桌面版那样简单。你只能使用终端界面。如果你不熟悉这个流程,即使是最简单的任务,如连接到 Wi-Fi,也可能是一个困难的任务。

Ubuntu 服务器版的安装

应用程序

在 Ubuntu 桌面版中,默认的应用程序集主要针对普通计算机用户。因此,你会发现网页浏览器、办公套件、媒体播放器、游戏等。

Ubuntu 中的应用程序

Ubuntu 服务器版的应用程序更多的是为运行网络服务而定制的。而这还不是全部。有些应用程序的配置也是不同的。以 SSH 为例。Ubuntu 服务器预设了 SSH,这样你就可以轻松地从远程系统连接到它。而在 Ubuntu 桌面版上,你必须明确启用 SSH 才行。

硬件要求

由于桌面版具有图形用户界面,你需要至少 4GB 的内存来运行 Ubuntu 桌面版。磁盘空间至少要有 20GB。

这就是 Ubuntu 服务器的有趣之处。它没有图形化的界面。命令行界面不会消耗大量的系统资源。因此,你可以在 512MB 和 5GB 磁盘空间的机器上轻松运行 Ubuntu 服务器。(LCTT 译注:当然,对于服务器环境来说,内存和磁盘空间是多多益善。)

服务器上的内存和磁盘空间受制于你所运行的网络服务。如果一个网络应用需要至少 2GB 的内存,你就应该有这么多的内存。但在最简单的情况下,即使是 512MB 或 1GB 的内存也可以工作。

用途

这是 Ubuntu 桌面版和服务器版之间的主要区别。问问自己,你想把 Ubuntu 用于什么目的?

如果是专门用于部署网络服务,那就选择 Ubuntu 服务器。请记住,你需要有基本的 Linux 命令行知识来使用终端。

如果你想把 Ubuntu 作为像 Windows 一样的普通电脑使用,那就选择 Ubuntu 桌面版。如果你想用它来学习 Linux 命令,或用于学习的 Docker 或者甚至是简单的(但是本地的)LAMP 服务器环境,请继续使用 Ubuntu 桌面。

对于服务器来说,Ubuntu 服务器版要比 Ubuntu 桌面版好。对于常规的计算机使用,Ubuntu 桌面版是更好的选择。

你应该在服务器上使用 Ubuntu 桌面版还是在服务器上安装图形界面?

是这样的,Ubuntu 桌面版和服务器版都是 Linux,你可以用 Ubuntu 桌面版作为服务器来托管网页服务。这没问题。

同样地,你可以在 Ubuntu 服务器上安装图形界面,并以图形方式使用它。这也是可行的。

Ubuntu 服务器上的 GUI 登录

但仅仅因为它可行,并不意味着你应该这么做。它违背了为服务器和桌面电脑创建不同版本的全部目的。

你必须付出额外的努力来将服务器版转换为桌面版,反之亦然。为什么要承受这种痛苦呢?

如果你使用 Ubuntu 的目的很明确,那就下载并安装合适的 Ubuntu 版本。

我希望这能使围绕 Ubuntu 桌面版和服务器版的选择现在更清楚一些。如果你有问题或建议,请利用评论区。


via: https://itsfoss.com/ubuntu-server-vs-desktop/

作者:Abhishek Prakash 选题:lujun9972 译者:wxy 校对:wxy

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

Samba 是一种灵活的文件共享工具,它将你可能在组织中运行的所有不同平台结合在一起。

 title=

在我接触 Linux 的早期,我是纽约州一个小型学前教育学区的技术总监。我们的技术预算总是捉襟见肘。我们是一个 Windows 2000 活动目录域,但我们的中央服务器磁盘空间有限,而且没有教师的主目录。此外,我们经历过十几次员工电脑硬盘故障。

我正在寻找一种方法,以最小的成本保存员工的工作。这时我发现了 Samba。在那之前,我一直将 Linux 用于内容过滤,不知道我们的 Windows 工作站可以连接到服务器并保存文件备份。

Samba 项目 自 1992 年以来一直存在。当我开始试验这个项目的时候,这个项目已经有 10 年历史了,我对如何配置它一无所知。我买了一本书并阅读了如何实现它,然后我从我们的电脑柜中取出一台旧电脑,购买了一个 300G 的希捷 IDE 驱动器,安装了 Linux,并配置了 Samba。我使用了一个简单的配置,并且它成功了。在向我们的一个 IT 助理展示后,我们部署了这个解决方案。硬盘故障的问题继续存在,但我们的员工不再需要担心失去他们所有的辛苦工作。

Samba 采用 GPL 许可证,并在大多数 Linux 发行版上广泛使用。Samba 有很好的 文档,Fedora 用户可以查阅这份在 Fedora 上配置 Samba 的文档。

在 Linux 上安装 Samba

你可以使用你的发行版的包管理器来安装 Samba。

在 Fedora、CentOS、RHEL、Mageia 和类似的系统上:

$ sudo dnf install samba

在 Debian, Linux Mint 和类似系统上:

$ sudo apt install samba

用 Samba 创建一个共享文件夹

创建一个简单的共享文件夹只需要五个步骤。

1、在你的 Linux 服务器上创建一个你希望用户能够保存共享文件的目录。这个目录可以是服务器上的任何地方:在 /home/opt 或任何最适合你的地方。我使用我的主目录,我把共享目录称为 sambashare

$ mkdir /home/don/sambashare

在 Fedora 和其他运行 SELinux 的发行版上,你必须对这个共享目录给予安全许可:

$ sudo semanage fcontext --add --type "samba_share_t" ~/sambashare
$ sudo restorecon -R ~/sambashare

2、用 Nano 或你选择的文本编辑器编辑 Samba 配置文件。

$ sudo nano /etc/samba/smb.conf

smb.conf 文件的底部添加以下内容,用你自己的共享目录的位置替换我例子中的 /home/don/sambashare 路径:

[sambashare]
        comment = Samba on Linux       
        path = /home/don/sambashare
        read only = no
        browsable = yes

如果你使用 Nano,按 Ctrl-O,然后按回车来保存,按 Ctrl-X 退出。

3、启动或重启 Samba 服务,这取决于你的发行版。

在 Fedora 和类似的系统中,没有明确的许可,服务是不会启动的,所以现在就可以启动 Samba,并在启动时启动:

$ sudo systemctl enable –now smb.conf

在 Debian 和类似系统中,Samba 默认在安装后启动,所以你必须现在就重启它:

$ sudo service smbd restart

4、更新你的防火墙规则,允许访问你的 Samba 共享。该如何做取决于你的系统使用什么防火墙。

如果你正在运行 firewalld:

$ sudo firewall-cmd --permanent --add-service=samba
$ sudo firewall-cmd --reload

如果你正在运行 UFW:

$ sudo ufw allow samba

5、现在你需要设置一个密码来访问你的 Samba 共享。这个用户名(在我的例子中是 don)必须属于你系统中的一个账户。

$ sudo smbpasswd -a don

我在每个 Samba 共享中都放置了一个简单的 README 文件,这样用户就会明白这个目录位于服务器上,他们必须在 VPN 上才能从家里访问它等等。

从 Windows 和 Mac 访问 Samba

在 Windows 电脑上,打开文件管理器(Windows Explorer),访问路径 ip-address-of-the-Linux-computer/sambashare。系统会提示你输入 Samba 共享密码,然后 sambashare 目录中的文件会出现在你的文件管理器窗口中,就像它们存在于你的桌面上一样。你可以开始在网络上的这个新共享目录中存储你的文件。

在 macOS 电脑上,进入 Finder 菜单,选择 Go。在出现的对话框中,输入 smb://ip-address/sambashare,并按照提示输入 Samba 密码。

Samba 意味着共享

Samba 使共享文件变得容易。你可以在 Samba 中使用许多其他方案来创建共享位置,包括用户组的公共文件夹,只接受传入文件的收件箱,以及其他你可能需要的东西。它是开源的、灵活的,而且它把你可能在你的办公室里运行的所有不同的平台联合起来。


via: https://opensource.com/article/21/12/file-sharing-linux-samba

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

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