分类 技术 下的文章

介绍

在这篇文章中,我们将讨论一个典型区块链的生态系统。这里说的生态系统,指的是不同的利益相关者及其相互之间,系统和外部世界间的相互作用。我们将要探索的不同利益相关者是:

  1. 用户
  2. 投资者
  3. 矿工
  4. 开发商

了解这些利益相关者如何融入区块链生态系统,不仅可以让您更好地了解区块链的运作方式,还可以让您更好地评估其增长潜力。区块链对于上述每个利益相关者来说越有吸引力,就越有可能健康的增长。所以,不多说了,下面介绍区块链生态系统的丰富的特色。

用户

用户是使用区块链或加密货币实现某些目的的普通人,而不仅仅是投资者。为维护用户,加密货币必须具有一些实用程序(用于花费你的钱币)。让我们快速浏览三个最受欢迎的区块链,以了解它们当前和潜在的效用。

比特币

比特币只有一个功能,即用于货物和服务的付款。在撰写本文时,全球约有 48,000 家(编者注:截止到 2018 年 9 月)商家接受比特币为商品和服务付款(Coinbase)。事实上,包括 PayPal、Expedia、微软、赛百味、彭博、Reddit、戴尔、Steam、Whole Foods、Shopify 和 Webjet 在内的几个家用品牌和主要电子商务公司都将自己的名字添加到了不断增长的比特币商家名单中。未来十年,这个名单将不可避免地继续增长,并且在不远的将来的某个时候,比特币完全有可能像 Visa、AMEX 或万事达卡那样被广泛接受。这可以说意味着比特币目前比任何其他区块链更具实用性。与传统支付方式相比,比特币支付的优势在于:

  • 更快的国际支付和交易
  • 交易费用非常低
  • 伪匿名
  • 没有第三方介入

商家的额外好处包括:

  • 没有 chargeback(编者注:Chargeback 是信用卡中的一个术语,意思是顾客可以声明一笔交易并非本人发起的。根据国家法律,这种情况往往商家或银行要负责对顾客的全额退款,是一种保护顾客的机制,但也给商家和银行增加了支付处理中的风险。)
  • 额外的客户群

由于比特币的高效用,其生态系统的相当大部分由用户组成。从长期投资的角度来看,这非常好,因为它可以提高价格稳定性,并为投资者提供有详实的数据(用户增长,商家采用,交易数量等)以便预测其价格。

以太坊

以太坊区块链与比特币区块链根本不同,因为它能够将智能合约嵌入区块链(见前一篇区块链历史介绍)。因此,以太坊为其用户提供了两种不同类型的应用:

货币应用:虽然不是以太坊的主要目标,但用户可以使用 Ether(以太币,以太坊区块链的加密货币)来支付商品和服务。一些公司(TenXToken CardMonaco)正在竞相通过其加密货币借记卡和 Coinify 等在线支付平台获取市场份额,为在线商家提供即插即用解决方案,以接受像以太币这样的加密货币作为支付。然而,目前,比特币仍然是加密货币的王者,以太和其他加密货币可能不得不追赶几年。

常规应用:这是指用户与基于以太坊区块链的 dApp 交互。已有数百个 dApp 允许用户以各种方式与以太坊区块链进行交互。例如,Numerai 是一种独特的对冲基金,它为世界各地的数据科学家提供加密市场数据,激励他们超越当前的交易算法并提高对冲基金的整体表现。还有一些彩票 dApp,以公平透明的方式提供彩票服务。然而,这只是一个开始。新的 dApp 每天都在发布,将来必定会有人开发出一款真正吸引公众注意力并引领下一波以太坊用户浪潮的 dApp。

可以在此处找到以太坊区块链上所有 dApp 的列表。

瑞波

市值排名第三的区块链是 瑞波 Ripple 。 瑞波与比特币和以太坊的不同之处在于它的设计考虑了一个特定的目标:为金融机构提供任何规模的安全,即时和近乎免费的全球交易。瑞波也与大多数区块链不同,因为它的目标用户是金融机构而不是私人。瑞波已经宣布与渣打银行和 UniCredit 等世界上大型金融机构建立合作伙伴关系,已经在区块链市场排行榜上获得第三名。

投资者

几乎所有区块链生态系统中的大多数利益相关者仍然是投资者。因此,加密货币市场仍然具有高度投机性,一天内价格波动 +/- 30% 或更多并不罕见。区块链市场如此不稳定的部分原因是,评估加密货币或 dApp 的真正价值极其困难。该技术仍然年轻,由于实用性有限导致缺乏用户,因此很难预测在大规模采用时该技术将如何。

尽管投资区块链技术存在许多陷阱,但目前的市场条件实际上是一个有吸引力的投资机会:

  • 专家、顾问和投资者几乎一致同意,区块链技术市场将在未来十年内继续快速增长(麦肯锡世界经济论坛
  • 进入壁垒仍然很高,大多数人不愿意进入市场
  • 虽然区块链在 2016 年和 2017 年都经历了令人难以置信的增长,但所有公共区块链的总市值仍然相对较小,约为 150 亿美元。为了更好地理解这一点,在撰写本文时,整个区块链行业的市值将只是世界第 50 大公司,位于荷兰的消费品公司联合利华之后。HowMuch.net 的这篇文章将加密货币的总市值与其他类型的资产进行了比较,并且展望了未来:

话虽如此,并非所有的区块链都是平等的……在接下来的几年里,我们无疑会看到很多初创公司倒闭或烧钱,导致投资者辛苦赚来的钱损失掉。我们将看到诈骗公司,其唯一目标是从愚蠢的投资者那里榨取资金。我们将看到来自成熟公司的激烈竞争,以开发自己的区块链应用程序。生活中没有任何东西是免费的。如果想把钱投入区块链,将不得不接受高风险。我们将有足够的时间在未来的博客文章中讨论投资策略,但现在我们将给您留下两个想法:

  1. 在投资任何公司之前,请积极研究至少一周。向自己提出有关投资的一些棘手问题。如果您无法回答问题,请与社区和开发人员联系。如果他们采用某些主观信息来回答,要持怀疑态度。如果他们不能充分回答您的问题,那么不是说一定就要停止投资,但请注意它是一种风险,并在购买之前将其考虑在内。
  2. 多样化。必须强调这一点。在接下来的几年里,很多公司都会陷入困境,如果你把所有的鸡蛋都放在一个篮子里,你不仅会冒失去钱的风险,还可能有失去对该行业中最终占据主导地位的公司投资机会的风险。

我认为在任何区块链生态系统中,有 4 种不同类型的投资者:

新手

区块链市场的巨大增长和不断增加的宣传吸引了成千上万的新投资者。很大一部分投资者会被潜在的收益所吸引,而没有去充分了解这项技术。新手用自己的情绪做决定,而且没有比害怕这种情绪更强迫人行动的了。害怕失去钱,也害怕失去机会。因此,新手的买入价格经常过高。

同样,如果价格下跌超过其初始买入点 10-20%,由于害怕失去所有资金,新手经常会卖出。这在超级易变的区块链市场尤其危险。因此,新手经常会买高卖低卖。

Vanguard 的结论是:

  1. 对于大多数私人非专业投资者来说,追求投机绩效常常影响回报率
  2. 市场波动性越大,追逐绩效的负面影响就越大

在区块链市场上很难不扮演新手的角色。即使您有先前的投资经验,区块链市场的不确定性和极端波动性也将考验您的意志力和自制力。

鲸鱼

鲸鱼是那些拥有庞大储备的大型投资者,他们可以使市场向某一个方向发展。

通常,订单约为 1-500 万美元或以上的人被视为鲸鱼。像这样的大订单足以显著影响大多数加密货币或区块链令牌。如果这种变化吸引了小玩家的注意,并对他们的钱进行相同的操作(如果价格上涨则买入,或者如果价格下降则卖出),鲸鱼可以在稍后的时间执行相反的操作以获取利润。

另一个深渊,即巨鲸。

巨鲸在这里指对冲基金和比特币投资基金,通常管理约 1 亿美元以上的投资组合。他们管理的资本过于庞大,一次下单市场常无法消化。他们通常会在一周或更长时间内将成千上万的比特币注入或流出市场,从而慢慢推动价格上涨或下跌,以满足他们自己的需求。

这些听起来可能令人难以置信,但区块链市场确实具有一些特征,使其成为具有正确手段和风险承受能力的高风险对冲基金的理想场所:

  • 没有规定
  • 相对较少的竞争
  • 小市场给大型企业带来优势
  • 大量缺乏经验的投资者

还有最后一个水下野兽,一个足以完全吞噬世界巨头并永远改变区块链市场的人。这里说的是政府投资者。政府可能有一天将加密货币作为一种多样化储备货币组合的方式,这种想法非常有趣,无疑会导致之前闻所未闻的价格水平 (Coin Telegraph)。

套利者

套利者不断寻找并利用不同在线交易所之间的小价格差距。他们与数百家交易所相连,如果有机会,他们将在澳大利亚交易所买入低价并在瑞士交易所卖出高价。你可能认为套利者正在破坏区块链生态系统,但它们实际上发挥了一个非常特别和重要的功能。它们稳定了交易所的价格。他们就像大海的清洁工一样,总是在海底搜寻,以寻找市场上的不合理处。

聪明的八爪鱼

这种投资者是你想成为的人!这种聪明的八足动物买得低,卖得很高。他们在做出决定之前进行了广泛的研究,并认识到风险和潜在的回报。这种聪明的八足动物认识到,利用加密货币的短期波动操作非常困难,要关注长期回报。他们避免情绪化决策,并通过价格波动坚持他们的投资,除非他们的投资有一些根本性的变化。这种聪明的八足动物认识到在区块链这样的新兴行业中识别赢家和输家是极其困难的。他们认识到总体行业风险,关注传统公司进入市场并密切关注他们的投资。

如果你发展出聪明的八爪鱼的特性,你将有很大机会在未来十年内为你的投资带来非常好的回报。

虽然很希望告诉你,我们属于最后一类,而且我们从未做过情绪化或恐惧驱动的决定,但事实并非如此。在这一点上,我们可能介于新手和聪明的八足动物之间。希望通过撰写此博客并继续获得区块链市场的经验,将在未来几年内把我们变成聪明的八足动物。我希望你能加入我们,成为这次旅程的积极参与者。我们可以共同学习和研究,做出更好的决策。

矿工

为了使区块链能够运行并保持其完整性,它需要世界各地的独立节点网络来持续维护它。在私有区块链中,中心组织拥有网络上的每个节点。而在公共区块链中,任何人都可以将其计算机设置为节点。这些计算机的所有者称为矿工。

由于区块链的完整性与网络上独立节点的数量直接相关,因此还需要一些挖矿激励。不同的区块链使用不同的采矿系统,但大多数采用以下形式:

  • 激励系统:最常见的是微交易费用和块解决方案奖励的组合(比特币矿工每解决一个比特币块,获得 12.5 BTC 奖励。按照约定奖励着时间的推移逐渐减少)。
  • 共识算法:所有区块链都需要一种验证广播到网络的块的方法。比特币区块链使用工作证明(PoW)。您将在下一篇文章中了解有关 PoW 如何工作的更多信息。以太坊也使用 PoW,但将更改为权益证明 (PoS)(以太坊区块链包含故意放置在代码中的 难度炸弹 difficulty bomb ,以强制在某些时候更改为 PoS。之后将详细介绍)。

正如您将在下一篇文章中看到的那样,挖掘一个块是非常困难的,一台计算机需要多年来实现。因此,个体矿工组建了采矿行会,将他们的资源汇集在一起​​并分享回报。blockchain.info 的资料显示了过去 4 天比特币区块链中每个采矿公会的相对哈希率(工作量)。

因为矿工需要保持区块链的完整性,所以他们拥有很大的权力。如果比特币社区想以这种或那种方式改变比特币协议,他们将不得不说服大多数矿工采用新代码。对现有区块链协议的更改称为分叉。潜在的分叉一直是采矿论坛上讨论的热门话题,没有中央权威就很难达成共识。

开发商

正如上一篇文章中所讨论的,区块链有可能变得不仅仅是加密货币。区块链世界中目前有两种类型的开发人员:

  • 区块链开发人员
  • dApp 开发人员

区块链开发人员构建具有不同功能级别的全新区块链。dApp 开发人员可以构建在区块链上运行的去中心化应用程序,从而为用户提供使用区块链(即实用程序)的理由。

以太坊推出的智能合约为渴望创造下一个重大事件的 dApp 开发者打开了大门。在评估区块链时,重要的是要考虑开发人员如何对其做出反应。有些问题要问自己,包括:

  • 该平台允许开发人员使用哪些脚本语言?
  • 社区是否有足够的活跃,能够说服开发人员花时间为该平台开发 dApp?
  • 区块链中是否有一些特殊功能,当 dApp 开发人员无法在更受欢迎的区块链上创建其应用,而在这个区块链上可以?
  • 区块链的可扩展性如何?如果它最终变得流行,代码是否能够处理大量的交易?

要充分利用区块链技术,您需要同时了解区块链和 dApp 开发中的最新消息。

结论

区块链生态系统复杂而充满活力。

了解这一点将使您能够做出更好的决策并充分利用这一新兴技术。你喜欢这篇博文吗?我们是否错过了任何利益相关者?您对不同的利益相关者及其对整个区块链生态系统的影响有何看法?你认为会看到政府在他们的储备中加入加密货币吗?

我们很乐意在下面的留言板上收到您的来信!如果您发现我们的内容有任何错误或错误,请随时通知我们,我们会及时更正。我们的下一篇文章将为您提供加密功能的概述,使区块链能够安全且伪匿名地工作。希望能在那里见到你!


via: https://www.myblockchainblog.com/blog/the-blockchain-ecosystem

作者:Vegard Nordahl & Meghana Rao 选题:jasminepeng 译者:jasminepeng 校对:wxy

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

这个课程简介不包含实践内容,但它解释了一个操作系统的基本概念、汇编代码、和其它很重要的一些基本原理。如果你想直接进入实践环节,跳过本课程并不会有什么问题。

1、操作系统

操作系统就是一个非常复杂的程序。它的任务就是组织安排计算机上的其它程序,包括共享计算机的时间、内存、硬件和其它资源。你可能听说过的一些比较大的桌面操作系统家族有 GNU/Linux、Mac OS X 和 Microsoft Windows。其它的设备比如电话,也需要操作系统,它可能使用的操作系统是 Android、iOS 和 Windows Phone。 1

由于操作系统是用来与计算机系统上的硬件进行交互的,所以它必须了解系统上硬件专有的信息。为了能让操作系统适用于各种类型的计算机,发明了 驱动程序 的概念。驱动程序是为了能够让操作系统与特定的硬件进行交互而添加(并可删除)到操作系统上的一小部分代码。在本课程中,我们并不涉及如何创建可删除的驱动程序,而是专注于特定的一个硬件:树莓派。

操作系统有各种不同的设计方式,在本课程中,我们只触及操作系统设计的皮毛。本课程中,我们主要专注于操作系统与各种硬件的交互部分,因为这经常是比较棘手的部分,并且也是在网络上文档和帮助最少的部分。

2、汇编代码

处理器每秒可以执行上百万的指令,但是这些指令必须要简单。

本课程几乎要完全靠汇编代码来写。汇编代码非常接近计算机的底层。计算机其实是靠一个叫处理器的设备来工作的,处理器能够执行像加法这样的简单任务,还有一组叫做 RAM 的芯片,它能够用来保存数字。当计算机通电后,处理器执行程序员给定的一系列指令,这将导致内存中的数字发生变化,以及与连接的硬件进行交互。汇编代码只是将这些机器命令转换为人类可读的文本。

常规的编程就是,程序员使用编程语言,比如 C++、Java、C#、Basic 等等来写代码,然后一个叫编译器的程序将程序员写的代码转换成汇编代码,然后进一步转换为二进制代码。 2 二进制代码才是计算机真正能够理解的东西,但它是人类无法读取的东西。汇编代码比二进制代码好一点,至少它的命令是人类可读的,但它仍然让人很沮丧。请记住,你用汇编代码写的每个命令都是处理器可以直接认识的,因此这些命令设计的很简单,因为物理电路必须能够处理每个命令。

Compiler process

和普通编程一样,也有很多不同的汇编代码编程语言,但与普通编程不一样的是,每个汇编编程语言是面对不同的处理器的,每种处理器设计为去理解不同的语言。因此,用一个针对某种机器设计的汇编语言所写的汇编代码,是不能在其它种类的机器上运行的。很多情况下,这都是一个大灾难,因此每个程序都必须在使用它的不同种类的机器上重写一遍,但对于操作系统,这不是个问题,因为在不同的硬件上它必须得重写。尽管如此,大多数操作系统都是用 C++ 或 C 来写的,这样它们就可以很容易地在不同种类的硬件上使用,只需要重写那些必须用汇编代码来实现的部分即可。

现在,你已经准备好进入第一节课了,它是 课程 1 OK01


  1. 要查看更完整的操作系统列表,请参照:操作系统列表 - Wikipedia
  2. 当然,我简化了普通编程的这种解释,实际上它在很大程度上取决于语言和机器。感兴趣的话,参见 编译器 - Wikipedia

via: https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/introduction.html

作者:Robert Mullins 选题:lujun9972 译者:qhwdw 校对:wxy

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

可以让你赶快离开办公室的网络管理技巧和工具。

当工作任务堆积成山时,管理网络和系统就变得十分有压力了。没有人能真正意识到需要花费多长时间,每个人都希望在昨天就完成他们的工作。

所以难怪我们这么多人都被致力于找出有效的方法并与大家分享的开源精神所吸引。因为,当截止日期来临,并且当天没有足够多的时间时,如果你可以找到立刻施行的免费答案,那会非常有帮助。

因此,闲话少叙,下述是我的瑞士军刀,可以保证你在晚饭前离开办公室。

服务器配置和脚本

让我们看一看!

使用该网站的搜索功能。经过十多年的定期更新,这里遍地是黄金!有用的脚本和方便的技巧可以立刻解决你的问题。这是我一般使用 Google 后的第二个选项。

它提供给你了一个很好的 Web 界面来帮助你远程编辑配置文件。它减少了在处理目录路径和 sudo nano 上花费的大量时间,在你处理多个客户时,非常方便。

现代工作场所的现实是大多数员工都运行着 Windows,而服务器机房中不断增长的设备则运行着 Linux 。因此,有些时候你会发现尝试在 Windows 桌面上执行管理任务。

你怎么做?装一个虚拟机?如果安装目前 Windows 10 中免费提供的 Linux 子系统的兼容层,实际上要快得多,配置要少的多。

这为你提供了一个 Bash 终端窗口,你可以在这个窗口中执行本地计算机上的 Bash 脚本和 Linux 二进制文件,可以完全访问 Windows 和 Linux 文件系统,以及安装网络驱动器。它包含 Ubuntu 、OpenSUSE、SLES、Debian 和 Kali 发行版。

当你有 100 多个服务器需要去管理时,这会是一个出色的 SSH 和远程桌面客户端。

设置网络,这样你就无需再这样做了。

一个设计不周的网络是厌恶加班的管理员的死敌。

IP 地址耗尽的可怕之处在于,当 IP 地址耗尽时,网络已经变的足够大,而新的寻址方案是众所周知的昂贵、令人痛苦的耗时。

没有人有时间做这件事!

到了某个时候,IPv6 终将到来,来拯救这世界。但在那之前,无论世界向我们扔了多少可穿戴设备、平板电脑、智能锁、灯、安全摄像头、VoIP 耳机和浓缩咖啡机,这些以不变应万变的 IP 寻址方案都应该让我们继续前行。

一个简短但是有用的 Bash 命令备忘录可以帮助你通过网络设置权限。所以,客户服务部的账单落入到勒索软件骗局时,你可以只恢复他们的文件,而不是整个公司的文件。

只需要输入你想要从地址空间中创建的网络的数量,以及每个网络所需要的主机数量,它就可以计算出所有的子网掩码应该是什么。

单一用途的 Linux 发行版

需要一个只做一件事的 Linux 容器?如果其他人已经在一个操作系统上搞好了一个小东西,你就可以快速安装它并马上投入使用。

下面这些每一个都使得我的工作变得轻松了许多。

这个工具用来帮你把一台电脑上锁定到一个浏览器上。通过稍稍一些调整,你甚至可以把浏览器锁定在一个特定的网站上。它对于公共访问机器来说非常方便。它可以与触摸屏或键盘鼠标配合使用。

这是一个你可以从 USB 驱动器启动的,可以用来划分磁盘驱动器、恢复数据并运行基准测试工具的操作系统。

啊哈~我还是不敢相信有人把路由器/防火墙/代理组合成为“我尿火”(LCTT 译注:IPFire 和 “I pee Fire“ 同音)。这是我在这个 Linux 发行版中第二喜欢的东西。我最喜欢的是它是一个非常可靠的软件套件,设置和配置十分容易,而且有一系列的插件可以拓展它。

那么,你呢?你发现了哪些工具、资源和备忘录可以让我们的工作日更加的轻松?我很高兴知道,请在评论中分享您的工具。


via: https://opensource.com/article/18/7/tools-admin

作者:Grant Hamono 选题:lujun9972 译者:bestony 校对:wxy

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

我们继续我们的 PGP 实践系列,来看看签名标签的标签和提交,这可以帮你确保你的仓库没有被篡改。

在本系列教程中,我们提供了一个使用 PGP 的实用指南,包括基本概念和工具、生成和保护你的密钥。如果你错过了前面的文章,你可以查看下面的链接。在这篇文章中,我们谈一谈在 Git 中如何集成 PGP、使用签名的标签,然后介绍签名提交,最后添加签名推送的支持。

Git 的核心特性之一就是它的去中心化本质 —— 一旦仓库克隆到你的本地系统,你就拥有了项目的完整历史,包括所有的标签、提交和分支。然而由于存在着成百上千的克隆仓库,如何才能验证你下载的仓库没有被恶意的第三方做过篡改?你可以从 GitHub 或一些貌似官方的位置来克隆它们,但是如果有些人故意欺骗了你怎么办?

或者在你参与的一些项目上发现了后门,而 “Author” 行显示是你干的,然而你很确定 不是你干的,会发生什么情况?

为解决上述问题,Git 添加了 PGP 集成。签名的标签通过确认它的内容与创建这个标签的开发者的工作站上的内容完全一致来证明仓库的完整性,而签名的提交几乎是不可能在不访问你的 PGP 密钥的情况下能够假冒你。

清单

  • 了解签名的标签、提交和推送(必要)
  • 配置 git 使用你的密钥(必要)
  • 学习标签如何签名和验证(必要)
  • 配置 git 总是签名带注释标签(推荐)
  • 学习提交如何签名和验证工作(必要)
  • 配置 git 总是签名提交(推荐)
  • 配置 gpg-agent 选项(必要)

考虑事项

git 实现了 PGP 的多级集成,首先从签名标签开始,接着介绍签名提交,最后添加签名推送的支持。

了解 Git 哈希

git 是一个复杂的东西,为了你能够更好地掌握它如何集成 PGP,你需要了解什么是”哈希“。我们将它归纳为两种类型的哈希:树哈希和提交哈希。

树哈希

每次你向仓库提交一个变更,对于仓库中的每个子目录,git 都会记录它里面所有对象的校验和哈希 —— 内容(blobs)、目录(trees)、文件名和许可等等。它只对每次提交中发生变更的树和内容做此操作,这样在只变更树的一小部分时就不必去重新计算整个树的校验和。

然后再计算和存储处于顶级的树的校验和,这样如果仓库的任何一部分发生变化,校验和将不可避免地发生变化。

提交哈希

一旦创建了树哈希,git 将计算提交哈希,它将包含有关仓库和变更的下列信息:

  • 树哈希的校验和
  • 变更前树哈希的校验和(父级)
  • 有关作者的信息(名字、email、创作时间)
  • 有关提交者的信息(名字、email、提交时间)
  • 提交信息
哈希函数

在写这篇文章时,虽然研究一种更强大的、抗碰撞的算法的工作正在进行,但 git 仍然使用的是 SHA1 哈希机制去计算校验和。注意,git 已经包含了碰撞防范程序,因此认为对 git 成功进行碰撞攻击仍然是不可行的。

带注释标签和标签签名

在每个 Git 仓库中,标签允许开发者标记特定的提交。标签可以是 “轻量级的” —— 几乎只是一个特定提交上的指针,或者它们可以是 “带注释的”,它自己将成为 git 树中的项目。一个带注释标签对象包含所有下列的信息:

  • 成为标签的提交的哈希的校验和
  • 标签名字
  • 关于打标签的人的信息(名字、email、打标签时间)
  • 标签信息

一个 PGP 签名的标签是一个带有将所有这些条目封装进一个 PGP 签名的带注释标签。当开发者签名他们的 git 标签时,他们实际上是向你保证了如下的信息:

  • 他们是谁(以及他们为什么应该被信任)
  • 他们在签名时的仓库状态是什么样:

    • 标签包含的提交的哈希

      • 提交的哈希包含了顶级树的哈希
      • 顶级树哈希包含了所有文件、内容和子树的哈希
      • 它也包含有关作者的所有信息
      • 包含变更发生时的精确时间

当你克隆一个仓库并验证一个签名的标签时,就是向你以密码方式保证:仓库中的所有内容、包括所有它的历史,与开发者签名时在它的计算机上的仓库完全一致。

签名的提交

签名的提交与签名的标签非常类似 —— PGP 签名的是提交对象的内容,而不是标签对象的内容。一个提交签名也给你提供了开发者签名时开发者树上的全部可验证信息。标签签名和提交的 PGP 签名提供了有关仓库和它的完整历史的完全一致的安全保证。

签名的推送

为了完整起见,在这里包含了签名的推送这一功能,因为在你使用这个功能之前,需要在接收推送的服务器上先启用它。正如我们在上面所说过的,PGP 签名一个 git 对象就是提供了开发者的 git 树当时的可验证信息,但不提供开发者对那个树意图相关的信息。

比如,你可以在你自己复刻的 git 仓库的一个实验分支上尝试一个很酷的特性,为了评估它,你提交了你的工作,但是有人在你的代码中发现了一个恶意的 bug。由于你的提交是经过正确签名的,因此有人可能将包含有恶意 bug 的分支推入到 master 分支中,从而在生产系统中引入一个漏洞。由于提交是经过你的密钥正确签名的,所以一切看起来都是合理合法的,而当 bug 被发现时,你的声誉就会因此而受到影响。

git push 时,为了验证提交的意图而不仅仅是验证它的内容,添加了要求 PGP 推送签名的功能。

配置 git 使用你的 PGP 密钥

如果在你的钥匙环上只有一个密钥,那么你就不需要再做额外的事了,因为它是你的默认密钥。

然而,如果你有多个密钥,那么你必须要告诉 git 去使用哪一个密钥。([fpr] 是你的密钥的指纹):

$ git config --global user.signingKey [fpr]

注意:如果你有一个不同的 gpg2 命令,那么你应该告诉 git 总是去使用它,而不是传统的版本 1 的 gpg

$ git config --global gpg.program gpg2

如何使用签名标签

创建一个签名的标签,只要传递一个简单地 -s 开关给 tag 命令即可:

$ git tag -s [tagname]

我们建议始终对 git 标签签名,这样让其它的开发者确信他们使用的 git 仓库没有被恶意地修改过(比如,引入后门):

如何验证签名的标签

验证一个签名的标签,只需要简单地使用 verify-tag 命令即可:

$ git verify-tag [tagname]

如果你要验证其他人的 git 标签,那么就需要你导入他的 PGP 公钥。请参考 “可信任的团队沟通” 一文中关于此主题的指导。

在拉取时验证

如果你从项目仓库的其它复刻中拉取一个标签,git 将自动验证签名,并在合并操作时显示结果:

$ git pull [url] tags/sometag

合并信息将包含类似下面的内容:

Merge tag 'sometag' of [url]

[Tag message]

# gpg: Signature made [...]
# gpg: Good signature from [...]

配置 git 始终签名带注释标签

很可能的是,你正在创建一个带注释标签,你应该去签名它。强制 git 始终签名带注释的标签,你可以设置一个全局配置选项:

$ git config --global tag.forceSignAnnotated true

或者,你始终记得每次都传递一个 -s 开关:

$ git tag -asm "Tag message" tagname

如何使用签名的提交

创建一个签名的提交很容易,但是将它纳入到你的工作流中却很困难。许多项目使用签名的提交作为一种 “Committed-by:” 的等价行,它记录了代码来源 —— 除了跟踪项目历史外,签名很少有人去验证。在某种意义上,签名的提交用于 “篡改证据”,而不是 git 工作流的 “篡改证明”。

为创建一个签名的提交,你只需要 git commit 命令传递一个 -S 标志即可(由于它与另一个标志冲突,所以改为大写的 -S):

$ git commit -S

我们建议始终使用签名提交,并要求项目所有成员都这样做,这样其它人就可以验证它们(下面就讲到如何验证)。

如何去验证签名的提交

验证签名的提交需要使用 verify-commit 命令:

$ git verify-commit [hash]

你也可以查看仓库日志,要求所有提交签名是被验证和显示的:

$ git log --pretty=short --show-signature
在 git 合并时验证提交

如果项目的所有成员都签名了他们的提交,你可以在合并时强制进行签名检查(然后使用 -S 标志对合并操作本身进行签名):

$ git merge --verify-signatures -S merged-branch

注意,如果有一个提交没有签名或验证失败,将导致合并操作失败。通常情况下,技术是最容易的部分 —— 而人的因素使得项目中很难采用严格的提交验证。

如果你的项目在补丁管理上采用邮件列表

如果你的项目在提交和处理补丁时使用一个邮件列表,那么一般很少使用签名提交,因为通过那种方式发送时,签名信息将会丢失。对提交进行签名仍然是非常有用的,这样其他人就能引用你托管在公开 git 树作为参考,但是上游项目接收你的补丁时,仍然不能直接使用 git 去验证它们。

尽管,你仍然可以签名包含补丁的电子邮件。

配置 git 始终签名提交

你可以告诉 git 总是签名提交:

git config --global commit.gpgSign true

或者你每次都记得给 git commit 操作传递一个 -S 标志(包括 —amend)。

配置 gpg-agent 选项

GnuPG agent 是一个守护工具,它能在你使用 gpg 命令时随时自动启动,并运行在后台来缓存私钥的密码。这种方式让你只需要解锁一次密钥就可以重复地使用它(如果你需要在一个自动脚本中签署一组 git 操作,而不想重复输入密钥,这种方式就很方便)。

为了调整缓存中的密钥过期时间,你应该知道这两个选项:

  • default-cache-ttl(秒):如果在 TTL 过期之前再次使用同一个密钥,这个倒计时将重置成另一个倒计时周期。缺省值是 600(10 分钟)。
  • max-cache-ttl(秒):自首次密钥输入以后,不论最近一次使用密钥是什么时间,只要最大值的 TTL 倒计时过期,你将被要求再次输入密码。它的缺省值是 30 分钟。

如果你认为这些缺省值过短(或过长),你可以编辑 ~/.gnupg/gpg-agent.conf 文件去设置你自己的值:

# set to 30 minutes for regular ttl, and 2 hours for max ttl
default-cache-ttl 1800
max-cache-ttl 7200
补充:与 ssh 一起使用 gpg-agent

如果你创建了一个 A(验证)密钥,并将它移到了智能卡,你可以将它用到 ssh 上,为你的 ssh 会话添加一个双因子验证。为了与 agent 沟通你只需要告诉你的环境去使用正确的套接字文件即可。

首先,添加下列行到你的 ~/.gnupg/gpg-agent.conf 文件中:

enable-ssh-support

接着,添加下列行到你的 .bashrc 文件中:

export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)

为了让改变生效,你需要杀掉正在运行的 gpg-agent 进程,并重新启动一个新的登入会话:

$ killall gpg-agent
$ bash
$ ssh-add -L

最后的命令将列出代表你的 PGP Auth 密钥的 SSH(注释应该会在结束的位置显示: cardno:XXXXXXXX,表示它来自智能卡)。

为了启用 ssh 的基于密钥的登入,只需要在你要登入的远程系统上添加 ssh-add -L 的输出到 ~/.ssh/authorized_keys 中。祝贺你,这将使你的 SSH 登入凭据更难以窃取。

此外,你可以从公共密钥服务器上下载其它人的基于 PGP 的 ssh 公钥,这样就可以赋予他登入 ssh 的权利:

$ gpg --export-ssh-key [keyid]

如果你有让开发人员通过 ssh 来访问 git 仓库的需要,这将让你非常方便。下一篇文章,我们将提供像保护你的密钥那样保护电子邮件帐户的小技巧。


via: https://www.linux.com/blog/learn/pgp/2018/3/protecting-code-integrity-pgp-part-6-using-pgp-git

作者:KONSTANTIN RYABITSEV 译者:qhwdw 校对:wxy

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

Tarball 提供了一种在 Linux 系统上备份和管理一组文件的通用方法。请按照以下提示了解如何创建它们,以及从中提取和删除单个文件。

“tarball” (LCTT 译注:国内也常称为“tar 包”)一词通常用于描述备份一组选择的文件并将它们打包在一个文件中的一种文件格式。该名称来自 .tar 文件扩展名和 tar 命令,它用于将文件打包到一个文件中,有时还会压缩该文件,使其在移动到其它系统时更小。

tarball 通常用于备份个人或系统文件来创建存档,特别是在进行可能需要撤消的更改之前。例如,Linux 系统管理员通常会在更改应用之前创建包含一系列配置文件的 tarball,以防必须撤消这些更改。从 tarball 中解压文件通常比在备份中搜索文件快。

如何在 Linux 上创建 tarball

使用如下命令,你可以在单条命令中创建 tarball 并压缩它。

$ tar -cvzf PDFs.tar.gz *.pdf

其结果是一个压缩文件(gzip 压缩的),其中包含了当前目录中的所有 PDF 文件。当然,压缩是可选的。一个稍微简单的只是将 PDF 文件打包成未压缩 tarball 的命令:

$ tar -cvf PDFs.tar *.pdf

注意,选项中的 z 将文件变成压缩的。 c 表明创建文件,v(详细)表示你在命令运行时需要一些反馈。如果你不想查看列出的文件,请忽略 v

另一个常见的命名约定是给压缩的 tarball 命名成 .tgz 而不是双扩展名 .tar.gz,如下所示:

$ tar cvzf MyPDFs.tgz *.pdf

如何从 tarball 中解压文件

要从 gzip 压缩包中解压所有文件,你可以使用如下命令:

$ tar -xvzf file.tar.gz

如果使用 .tgz 命名约定,该命令将如下所示:

$ tar -xvzf MyPDFs.tgz

要从 gzip 包中解压单个文件,你可以执行几乎相同的操作,只需添加文件名:

$ tar -xvzf PDFs.tar.gz ShenTix.pdf
ShenTix.pdf
ls -l ShenTix.pdf
-rw-rw-r-- 1 shs shs 122057 Dec 14 14:43 ShenTix.pdf

如果未压缩 tarball,你甚至可以从 tarball 中删除文件。例如,如果我们想从 PDFs.tar.gz 中删除我们上面解压过的文件,我们会这样做:

$ gunzip PDFs.tar.gz
$ ls -l PDFs.tar
-rw-rw-r-- 1 shs shs 10700800 Dec 15 11:51 PDFs.tar
$ tar -vf PDFs.tar --delete ShenTix.pdf
$ ls -l PDFs.tar
-rw-rw-r-- 1 shs shs 10577920 Dec 15 11:45 PDFs.tar

请注意,我们在删除 ShenTix.pdf 后,缩小了一点 tarball 文件占用的空间。如果我们想要,我们可以再次压缩文件:

$ gzip -f PDFs.tar
ls -l PDFs.tar.gz
-rw-rw-r-- 1 shs shs 10134499 Dec 15 11:51 PDFs.tar.gzFlickr / James St. John

丰富的命令行选项使得 tarball 使用起来简单方便。


via: https://www.networkworld.com/article/3328840/linux/working-with-tarballs-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

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

当你可以用两个设备、浏览器和网络连接就能免费搭建一个婴儿监视器时,谁还会花钱去买呢?

新父母和准父母很快就会知道将会有一个既长且昂贵的新生儿所需设备的清单,清单中的首位是一个婴儿监视器,借此他们可以在做其他事情时照看自己的婴儿,但这儿有一件不必消耗你的婴儿经费的设备,Gonimo 是一个可以将现有的设备转换成婴儿监控系统的自由开源解决方案,附近大型婴儿用品商店的过道中有数以千计的其他必备或时尚物品,就可以为其中某一个腾出一些婴儿的预算。

Gonimo 诞生时,它的开发者,一个有双胞胎的开源粉丝,发现现有选择存在问题:

  • 现有硬件婴儿监视器价格昂贵,使用范围有限,需要您带着额外的设备。
  • 虽然有移动监控应用程序,但大多数现有的 iOS / Android 婴儿监控应用程序都不可靠且不安全,不太容易找到开源产品。
  • 如果您有两个小孩(例如双胞胎),您将需要两台监视器,使您的成本翻倍。

Gonimo 是作为一个解决典型的监视器的缺点的开源解决方案而创建的:

  • 昂贵?不,它是免费的!
  • 使用范围有限?不,它适用于互联网 / WiFi,无论您身在何处。
  • 下载并安装应用程序?噢不,它适用于您现有的网络浏览器。
  • 购买新设备?不用,你可以使用任何笔记本电脑、手机或平板电脑与网络浏览器和麦克风和/或相机。

(注意:遗憾的是,Apple iOS 设备尚不支持,但预计很快就会发生变化 —— 请继续阅读,了解如何帮实现这一目标。)

开始

将您的设备转换为婴儿监视器很容易。从您设备的浏览器(理想情况下为 Chrome),访问 gonimo.com 并单击 “Start baby monitor” 以访问该 Web 应用程序。

1、创建家庭:在首次启动的屏幕上,你会看到一只可爱的兔子在地球上奔跑。这是您创建新家庭的地方。单击 “+” 按钮并接受随机生成的姓氏或键入您自己的选择。

 title=

从开始屏幕创建一个新家庭

2、邀请设备:建立完家庭以后,下个屏幕将指示您邀请其他设备加入你的 Gonimo 家庭。您可以通过电子邮件直接发送一次性邀请链接,也可以将其复制并粘贴到消息中。对其他设备,只需打开该链接并接受邀请。对您要邀请的任何其他设备重复此过程。您的设备现在属于同一家庭,可以作为一个完全正常工作的婴儿监视器系统进行配合。

 title=

邀请家庭成员

3、启动婴儿站流:接下来,通过转到 Gonimo 主屏,点击带有奶嘴的按钮,并允许网络浏览器访问设备的麦克风和摄像头,选择将婴儿的音频和视频流式传输到父母的设备。调整相机以指向宝宝的床,或关闭它以节省设备电池(音频仍将流式传输)。点击“Start”。该流现在处于活动状态。

 title=

选择婴儿站

 title=

按“Start”开始以流式传输视频

4、连接到父母站流:要查看婴儿站流,请转到 Gonimo 家族中的另外的设备 —— 即父母站。点击 Gonimo 主屏幕上的 “Parent” 按钮。您将看到该系列中所有设备的列表;旁边有一个闪动的“Connect”按钮的是活跃的婴儿站。选择“Connect”,您可以通过点对点音频/视频流看到和听到您的宝宝。音量条为传输的音频流提供可视化。

 title=

选择父母站

 title=

按下“Connect”开始观看婴儿流。

5、恭喜!您已成功将设备直接通过网络浏览器转换为婴儿监视器,无需下载或安装任何应用程序!

有关重命名设备,从系列中删除设备或删除系列的详细信息和详细说明,请查看 gonimo.com 的视频教程

家庭系统的灵活性

Gonimo 的优势之一是其基于家庭的系统,它为即使在商业 Android 或 iOS 应用中也无法提供的各种情况提供了极大的灵活性。要深入了解这些功能,我们假设您创建了一个由三个设备组成的家庭系统。

  • 多婴儿:如果你想留意你在两个不同房间睡觉的两个小孩怎么办?在每个孩子的房间放一个设备,并将其设置为婴儿站。第三个设备将充当父母站,您可以在其上连接到两个流并通过分屏查看您的幼儿。您甚至可以通过向该家庭系统提供更多设备,并将其设置为婴儿站来将此用例扩展到两个以上的婴儿站。只要您的父母站连接到第一个婴儿站,请单击左上角的后退箭头返回“设备概述”屏幕。现在您可以连接到第二个(以及依次为第三个、第四个、第五个和第五个等)设备,并自动建立分屏。酷!
  • 多父母:如果爸爸想在他上班的时候看孩子怎么办?只需邀请第四个设备(例如,他的办公室 PC )到家庭并将其设置为父母站。父母双方都可以通过他们自己的设备同时检查他们的孩子,甚至可以独立地选择他们希望连接的孩子。
  • 多家庭:单个设备也可以是几个家庭系统的一部分。当您的婴儿站与您一起时,如平板电脑,您经常访问亲戚或朋友时,这非常有用。为“奶奶的房子”或“约翰叔叔的房子”创建另一个家庭,其中包括您的婴儿站设备与奶奶或约翰叔叔的设备配对。您可以随时通过婴儿站设备的 Gonimo 主屏幕在这些家庭中切换婴儿站设备。

想要参加吗?

Gonimo 团队喜欢开源。代码来自社区,代码用于社区。Gonimo 的用户对我们非常重要,但它们只是 Gonimo 故事的一部分。幕后有创意的大脑是创造出色婴儿监视器体验的关键。

目前我们特别需要那些愿意成为 iOS 11 测试者的人的帮助,因为 Apple 在 iOS 11 中对 WebRTC 的支持意味着我们最终将能够支持 iOS 设备。如果可以,请帮助我们实现这个令人赞叹的里程碑。

如果您了解 Haskell 或想要了解它,您可以查看 GitHub 上我们的代码。欢迎发起拉取请求、审查代码以及提出问题。

最后,请通过向新父母和开源世界宣传 Gonimo 婴儿监视器是易于使用并且便携的。

关于作者

Robert Klotzner:我是双胞胎的父亲,一个程序员。当我听到普通人可以给计算机编程时,我买了一本 1200 页的关于 C++ 的书开始学习,我当时才十五岁。我坚持用 C++ 相当长的一段时间,学习了 Java 又回归到 C++,学习了 D、Python 等等,最终学习了 Haskell。我喜欢 Haskell 是因为它丰富的类型系统,这几乎可以避免我书写错误的代码。强壮的静态类型和性能让我爱上了 C++……


via: https://opensource.com/article/17/9/gonimo

作者:Robert Klotzner 译者:lintaov587 校对:wxy

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