2019年9月

不知道你的 IP 地址是什么?以下是在 Ubuntu 和其他 Linux 发行版中检查 IP 地址的几种方法。

什么是 IP 地址?

互联网协议地址(通常称为 IP 地址)是分配给连接到计算机网络的每个设备(使用互联网协议)的数字标签。IP 地址用于识别和定位机器。

IP 地址在网络中是唯一的,使得所有连接设备能够通信。

你还应该知道有两种类型的 IP 地址公有私有公有 IP 地址是用于互联网通信的地址,这与你用于邮件的物理地址相同。但是,在本地网络(例如使用路由器的家庭)的环境中,会为每个设备分配在该子网内唯一的私有 IP 地址。这在本地网络中使用,而不直接暴露公有 IP(路由器用它与互联网通信)。

另外还有区分 IPv4IPv6 协议。IPv4 是经典的 IP 格式,它由基本的 4 部分结构组成,四个字节用点分隔(例如 127.0.0.1)。但是,随着设备数量的增加,IPv4 很快就无法提供足够的地址。这就是 IPv6 被发明的原因,它使用 128 位地址的格式(与 IPv4 使用的 32 位地址相比)。

在 Ubuntu 中检查你的 IP 地址(终端方式)

检查 IP 地址的最快和最简单的方法是使用 ip 命令。你可以按以下方式使用此命令:

ip addr show

它将同时显示 IPv4 和 IPv6 地址:

Display IP Address in Ubuntu Linux

实际上,你可以进一步缩短这个命令 ip a。它会给你完全相同的结果。

ip a

如果你希望获得最少的细节,也可以使用 hostname

hostname -I

还有一些在 Linux 中检查 IP 地址的方法,但是这两个命令足以满足这个目的。

ifconfig 如何?

老用户可能会想要使用 ifconfig(net-tools 软件包的一部分),但该程序已被弃用。一些较新的 Linux 发行版不再包含此软件包,如果你尝试运行它,你将看到 ifconfig 命令未找到的错误。

在 Ubuntu 中检查你的 IP 地址(GUI 方式)

如果你对命令行不熟悉,你还可以使用图形方式检查 IP 地址。

打开 Ubuntu 应用菜单(在屏幕左下角显示应用)并搜索Settings,然后单击图标:

Applications Menu Settings

这应该会打开设置菜单。进入网络

Network Settings Ubuntu

按下连接旁边的齿轮图标会打开一个窗口,其中包含更多设置和有关你网络链接的信息,其中包括你的 IP 地址:

IP Address GUI Ubuntu

额外提示:检查你的公共 IP 地址(适用于台式计算机)

首先,要检查你的公有 IP 地址(用于与服务器通信),你可以使用 curl 命令。打开终端并输入以下命令:

curl ifconfig.me

这应该只会返回你的 IP 地址而没有其他多余信息。我建议在分享这个地址时要小心,因为这相当于公布你的个人地址。

注意: 如果 curl 没有安装,只需使用 sudo apt install curl -y 来解决问题,然后再试一次。

另一种可以查看公共 IP 地址的简单方法是在 Google 中搜索 “ip address”。

总结

在本文中,我介绍了在 Uuntu Linux 中找到 IP 地址的不同方法,并向你概述了 IP 地址的用途以及它们对我们如此重要的原因。

我希望你喜欢这篇文章。如果你觉得文章有用,请在评论栏告诉我们!


via: https://itsfoss.com/check-ip-address-ubuntu/

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

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

如果你是 DevOps 新人,请查看这 5 个步骤来构建你的第一个 DevOps 流水线。

DevOps 已经成为解决软件开发过程中出现的缓慢、孤立或者其他故障的默认方式。但是当你刚接触 DevOps 并且不确定从哪开始时,就意义不大了。本文探索了什么是 DevOps 流水线并且提供了创建它的 5 个步骤。尽管这个教程并不全面,但可以给你以后上手和扩展打下基础。首先,插入一个小故事。

我的 DevOps 之旅

我曾经在花旗集团的云小组工作,开发 Infrastructure as a Service 基础设施即服务网页应用来管理花旗的云基础设施,但我经常对研究如何让开发流水线更加高效以及如何带给团队积极的文化感兴趣。我在 Greg Lavender 推荐的书中找到了答案。Greg Lavender 是花旗的云架构和基础设施工程(即 Phoenix 项目)的 CTO。这本书尽管解释的是 DevOps 原理,但它读起来像一本小说。

书后面的一张表展示了不同公司部署在发布环境上的频率:

公司部署频率
Amazon23,000 次/天
Google5,500 次/天
Netflix500 次/天
Facebook1 次/天
Twitter3 次/周
典型企业1 次/9 个月

Amazon、Google、Netflix 怎么能做到如此之频繁?那是因为这些公司弄清楚了如何去实现一个近乎完美的 DevOps 流水线。

但在花旗实施 DevOps 之前,情况并非如此。那时候,我的团队拥有不同 构建阶段 stage 的环境,但是在开发服务器上的部署非常手工。所有的开发人员都只能访问一个基于 IBM WebSphere Application 社区版的开发环境服务器。问题是当多个用户同时尝试部署时,服务器就会宕机,因此开发人员在部署时就得互相通知,这一点相当痛苦。此外,还存在代码测试覆盖率低、手动部署过程繁琐以及无法根据定义的任务或用户需求跟踪代码部署的问题。

我意识到必须做些事情,同时也找到了一个有同样感受的同事。我们决定合作去构建一个初始的 DevOps 流水线 —— 他设置了一个虚拟机和一个 Tomcat 服务器,而我则架设了 Jenkins,集成了 Atlassian Jira、BitBucket 和代码覆盖率测试。这个业余项目非常成功:我们近乎全自动化了开发流水线,并在开发服务器上实现了几乎 100% 的正常运行,我们可以追踪并改进代码覆盖率测试,并且 Git 分支能够与部署任务和 jira 任务关联在一起。此外,大多数用来构建 DevOps 所使用的工具都是开源的。

现在我意识到了我们的 DevOps 流水线是多么的原始,因为我们没有利用像 Jenkins 文件或 Ansible 这样的高级设置。然而,这个简单的过程运作良好,这也许是因为 Pareto 原则(也被称作 80/20 法则)。

DevOps 和 CI/CD 流水线的简要介绍

如果你问一些人,“什么是 DevOps?”,你或许会得到一些不同的回答。DevOps,就像敏捷,已经发展到涵盖着诸多不同的学科,但大多数人至少会同意这些:DevOps 是一个软件开发实践或一个 软件开发生命周期 software development lifecycle (SDLC),并且它的核心原则是一种文化上的变革 —— 开发人员与非开发人员呼吸着同一片天空的气息,之前手工的事情变得自动化;每个人做着自己擅长的事;同一时间的部署变得更加频繁;吞吐量提升;灵活度增加。

虽然拥有正确的软件工具并非实现 DevOps 环境所需的唯一东西,但一些工具却是必要的。最关键的一个便是持续集成和持续部署(CI/CD)。在流水线环境中,拥有不同的构建阶段(例如:DEV、INT、TST、QA、UAT、STG、PROD),手动的工作能实现自动化,开发人员可以实现高质量的代码,灵活而且大量部署。

这篇文章描述了一个构建 DevOps 流水线的五步方法,就像下图所展示的那样,使用开源的工具实现。

 title=

闲话少说,让我们开始吧。

第一步:CI/CD 框架

首先你需要的是一个 CI/CD 工具,Jenkins,是一个基于 Java 的 MIT 许可下的开源 CI/CD 工具,它是推广 DevOps 运动的工具,并已成为了 事实标准 de facto standard

所以,什么是 Jenkins?想象它是一种神奇的万能遥控,能够和许多不同的服务器和工具打交道,并且能够将它们统一安排起来。就本身而言,像 Jenkins 这样的 CI/CD 工具本身是没有用的,但随着接入不同的工具与服务器时会变得非常强大。

Jenkins 仅是众多构建 DevOps 流水线的开源 CI/CD 工具之一。

名称许可证
JenkinsCreative Commons 和 MIT
Travis CIMIT
CruiseControlBSD
BuildbotGPL
Apache GumpApache 2.0
CabieGNU

下面就是使用 CI/CD 工具时 DevOps 看起来的样子。

 title=

你的 CI/CD 工具在本地主机上运行,但目前你还不能够做些别的。让我们紧随 DevOps 之旅的脚步。

第二步:源代码控制管理

验证 CI/CD 工具可以执行某些魔术的最佳(也可能是最简单)方法是与源代码控制管理(SCM)工具集成。为什么需要源代码控制?假设你在开发一个应用。无论你什么时候构建应用,无论你使用的是 Java、Python、C++、Go、Ruby、JavaScript 或任意一种语言,你都在编程。你所编写的程序代码称为源代码。在一开始,特别是只有你一个人工作时,将所有的东西放进本地文件夹里或许都是可以的。但是当项目变得庞大并且邀请其他人协作后,你就需要一种方式来避免共享代码修改时的合并冲突。你也需要一种方式来恢复一个之前的版本——备份、复制并粘贴的方式已经过时了。你(和你的团队)想要更好的解决方式。

这就是 SCM 变得不可或缺的原因。SCM 工具通过在仓库中保存代码来帮助进行版本控制与多人协作。

尽管这里有许多 SCM 工具,但 Git 是最标准恰当的。我极力推荐使用 Git,但如果你喜欢这里仍有其他的开源工具。

名称许可证
GitGPLv2 & LGPL v2.1
SubversionApache 2.0
Concurrent Versions System (CVS)GNU
VestaLGPL
MercurialGNU GPL v2+

拥有 SCM 之后,DevOps 流水线看起来就像这样。

 title=

CI/CD 工具能够自动化进行源代码检入检出以及完成成员之间的协作。还不错吧?但是,如何才能把它变成可工作的应用程序,使得数十亿人来使用并欣赏它呢?

第三步:自动化构建工具

真棒!现在你可以检出代码并将修改提交到源代码控制,并且可以邀请你的朋友就源代码控制进行协作。但是到目前为止你还没有构建出应用。要想让它成为一个网页应用,必须将其编译并打包成可部署的包或可执行程序(注意,像 JavaScript 或 PHP 这样的解释型编程语言不需要进行编译)。

于是就引出了自动化构建工具。无论你决定使用哪一款构建工具,它们都有一个共同的目标:将源代码构建成某种想要的格式,并且将清理、编译、测试、部署到某个位置这些任务自动化。构建工具会根据你的编程语言而有不同,但这里有一些通常使用的开源工具值得考虑。

名称许可证编程语言
MavenApache 2.0Java
AntApache 2.0Java
GradleApache 2.0Java
BazelApache 2.0Java
MakeGNUN/A
GruntMITJavaScript
GulpMITJavaScript
BuildrApacheRuby
RakeMITRuby
A-A-PGNUPython
SConsMITPython
BitBakeGPLv2Python
CakeMITC#
ASDFExpat (MIT)LISP
CabalBSDHaskell

太棒了!现在你可以将自动化构建工具的配置文件放进源代码控制管理系统中,并让你的 CI/CD 工具构建它。

 title=

一切都如此美好,对吧?但是在哪里部署它呢?

第四步:网页应用服务器

到目前为止,你有了一个可执行或可部署的打包文件。对任何真正有用的应用程序来说,它必须提供某种服务或者接口,所以你需要一个容器来发布你的应用。

对于网页应用,网页应用服务器就是容器。应用程序服务器提供了环境,让可部署包中的编程逻辑能够被检测到、呈现界面,并通过打开套接字为外部世界提供网页服务。在其他环境下你也需要一个 HTTP 服务器(比如虚拟机)来安装服务应用。现在,我假设你将会自己学习这些东西(尽管我会在下面讨论容器)。

这里有许多开源的网页应用服务器。

名称协议编程语言
TomcatApache 2.0Java
JettyApache 2.0Java
WildFlyGNU Lesser PublicJava
GlassFishCDDL & GNU Less PublicJava
Django3-Clause BSDPython
TornadoApache 2.0Python
GunicornMITPython
Python PasteMITPython
RailsMITRuby
Node.jsMITJavascript

现在 DevOps 流水线差不多能用了,干得好!

 title=

尽管你可以在这里停下来并进行进一步的集成,但是代码质量对于应用开发者来说是一件非常重要的事情。

第五步:代码覆盖测试

实现代码测试件可能是另一个麻烦的需求,但是开发者需要尽早地捕捉程序中的所有错误并提升代码质量来保证最终用户满意度。幸运的是,这里有许多开源工具来测试你的代码并提出改善质量的建议。甚至更好的,大部分 CI/CD 工具能够集成这些工具并将测试过程自动化进行。

代码测试分为两个部分:“代码测试框架”帮助进行编写与运行测试,“代码质量改进工具”帮助提升代码的质量。

代码测试框架

名称许可证编程语言
JUnitEclipse Public LicenseJava
EasyMockApacheJava
MockitoMITJava
PowerMockApache 2.0Java
PytestMITPython
HypothesisMozillaPython
ToxMITPython

代码质量改进工具

名称许可证编程语言
CoberturaGNUJava
CodeCoverEclipse Public (EPL)Java
Coverage.pyApache 2.0Python
EmmaCommon Public LicenseJava
JaCoCoEclipse Public LicenseJava
HypothesisMozillaPython
ToxMITPython
JasmineMITJavaScript
KarmaMITJavaScript
MochaMITJavaScript
JestMITJavaScript

注意,之前提到的大多数工具和框架都是为 Java、Python、JavaScript 写的,因为 C++ 和 C# 是专有编程语言(尽管 GCC 是开源的)。

现在你已经运用了代码覆盖测试工具,你的 DevOps 流水线应该就像教程开始那幅图中展示的那样了。

可选步骤

容器

正如我之前所说,你可以在虚拟机(VM)或服务器上发布你的应用,但是容器是一个更好的解决方法。

什么是容器?简要的介绍就是 VM 需要占用操作系统大量的资源,它提升了应用程序的大小,而容器仅仅需要一些库和配置来运行应用程序。显然,VM 仍有重要的用途,但容器对于发布应用(包括应用程序服务器)来说是一个更为轻量的解决方式。

尽管对于容器来说也有其他的选择,但是 Docker 和 Kubernetes 更为广泛。

名称许可证
DockerApache 2.0
KubernetesApache 2.0

了解更多信息,请查看 Opensource.com 上关于 Docker 和 Kubernetes 的其它文章:

中间件自动化工具

我们的 DevOps 流水线大部分集中在协作构建与部署应用上,但你也可以用 DevOps 工具完成许多其他的事情。其中之一便是利用它实现 基础设施管理 Infrastructure as Code (IaC)工具,这也是熟知的中间件自动化工具。这些工具帮助完成中间件的自动化安装、管理和其他任务。例如,自动化工具可以用正确的配置下拉应用程序,例如网页服务器、数据库和监控工具,并且部署它们到应用服务器上。

这里有几个开源的中间件自动化工具值得考虑:

名称许可证
AnsibleGNU Public
SaltStackApache 2.0
ChefApache 2.0
PuppetApache or GPL

获取更多中间件自动化工具,查看 Opensource.com 上的其它文章:

之后的发展

这只是一个完整 DevOps 流水线的冰山一角。从 CI/CD 工具开始并且探索其他可以自动化的东西来使你的团队更加轻松的工作。并且,寻找开源通讯工具可以帮助你的团队一起工作的更好。

发现更多见解,这里有一些非常棒的文章来介绍 DevOps :

使用开源 agile 工具来集成 DevOps 也是一个很好的主意:


via: https://opensource.com/article/19/4/devops-pipeline

作者:Bryant Son 选题:lujun9972 译者:LuMing 校对:wxy

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

最近我注意到 Emacs 25.1 增加了一个名为 global-eldoc-mode 的模式,它是流行的 eldoc-mode 的一个全局化的变体。而且与 eldoc-mode 不同的是,global-eldoc-mode 默认是开启的!

这意味着你可以删除 Emacs 配置中为主模式开启 eldoc-mode 的代码了:

;; That code is now redundant
(add-hook 'emacs-lisp-mode-hook #'eldoc-mode)
(add-hook 'ielm-mode-hook #'eldoc-mode)
(add-hook 'cider-mode-hook #'eldoc-mode)
(add-hook 'cider-repl-mode-hook #'eldoc-mode)

有人说 global-eldoc-mode 在某些不支持的模式中会有性能问题。我自己从未遇到过,但若你像禁用它则只需要这样:

(global-eldoc-mode -1)

现在是时候清理我的配置了!删除代码就是这么爽!


via: https://emacsredux.com/blog/2018/11/13/eldoc-goes-global/

作者:Bozhidar Batsov 选题:lujun9972 译者:lujun9972 校对:wxy

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

ExtraHop 发现一些企业安全和分析软件正在“私下回拨”,悄悄地将信息上传到客户网络外的服务器上。

Getty Images

当这个博客专注于微软的一切事情时,我常常抱怨、反对 Windows 10 的间谍活动方面。嗯,显然,这些跟企业安全、分析和硬件管理工具所做的相比,都不算什么。

一家叫做 ExtraHop 的分析公司检查了其客户的网络,并发现客户的安全和分析软件悄悄地将信息上传到客户网络外的服务器上。这家公司上周发布了一份报告来进行警示

ExtraHop 特意选择不对这四个例子中的企业安全工具进行点名,这些工具在没有警告用户或使用者的情况发送了数据。这家公司的一位发言人通过电子邮件告诉我,“ExtraHop 希望关注报告的这个趋势,我们已经多次观察到了这种令人担心的情况。这个严重的问题需要企业的更多关注,而只是关注几个特定的软件会削弱这个严重的问题需要得到更多关注的观点。”

产品在安全提交传输方面玩忽职守,并且偷偷地传输数据到异地

ExtraHop 的报告中称发现了一系列的产品在偷偷地传输数据回自己的服务器上,包括终端安全软件、医院设备管理软件、监控摄像头、金融机构使用的安全分析软件等。报告中同样指出,这些应用涉嫌违反了欧洲的通用数据隐私法规(GDPR)

在每个案例里,ExtraHop 都提供了这些软件传输数据到异地的证据,在其中一个案例中,一家公司注意到,大约每隔 30 分钟,一台连接了网络的设备就会发送 UDP 数据包给一个已知的恶意 IP 地址。有问题的是一台某国制造的安全摄像头,这个摄像头正在偷偷联系一个和某国有联系的已知的恶意 IP 地址。

该摄像头很可能由其办公室的一名员工出于其个人安全的用途独自设置的,这显示出影子 IT 的缺陷。

而对于医院设备的管理工具和金融公司的分析工具,这些工具违反了数据安全法,公司面临着法律风险——即使公司不知道这个事。

该医院的医疗设备管理产品应该只使用医院的 WiFi 网络,以此来确保患者的数据隐私和 HIPAA 合规。ExtraHop 注意到管理初始设备部署的工作站正在打开加密的 ssl:443 来连接到供应商自己的云存储服务器,这是一个重要的 HIPAA 违规。

ExtraHop 指出,尽管这些例子中可能没有任何恶意活动。但它仍然违反了法律规定,管理员需要密切关注他们的网络,以此来监视异常活动的流量。

“要明确的是,我们不知道供应商为什么要把数据偷偷传回自己的服务器。这些公司都是受人尊敬的安全和 IT 供应商,并且很有可能,这些数据是由他们的程序框架设计用于合法目的的,或者是错误配置的结果”,报告中说。

如何减轻数据外传的安全风险

为了解决这种安全方面玩忽职守的问题,ExtraHop 建议公司做下面这五件事:

  • 监视供应商的活动:在你的网络上密切注意供应商的非正常活动,无论他们是活跃供应商、以前的供应商,还是评估后的供应商。
  • 监控出口流量:了解出口流量,尤其是来自域控制器等敏感资产的出口流量。当检测到出口流量时,始终将其与核准的应用程序和服务进行匹配。
  • 跟踪部署:在评估过程中,跟踪软件代理的部署。
  • 理解监管方面的考量因素:了解数据跨越政治、地理边界的监管和合规考量因素。
  • 理解合同协议:跟踪数据的使用是否符合供应商合同上的协议。

via: https://www.networkworld.com/article/3429559/is-your-enterprise-software-committing-security-malpractice.html

作者:Andy Patrizio 选题:lujun9972 译者:hopefully2333 校对:wxy

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

你可以让 Git 帮助你轻松发布你的网站。在我们《鲜为人知的 Git 用法》系列的第一篇文章中学习如何做到。

Git 是一个少有的能将如此多的现代计算封装到一个程序之中的应用程序,它可以用作许多其他应用程序的计算引擎。虽然它以跟踪软件开发中的源代码更改而闻名,但它还有许多其他用途,可以让你的生活更轻松、更有条理。在这个 Git 系列中,我们将分享七种鲜为人知的使用 Git 的方法。

创建一个网站曾经是极其简单的,而同时它又是一种黑魔法。回到 Web 1.0 的旧时代(不是每个人都会这样称呼它),你可以打开任何网站,查看其源代码,并对 HTML 及其内联样式和基于表格的布局进行反向工程,在这样的一两个下午之后,你就会感觉自己像一个程序员一样。不过要让你创建的页面放到互联网上,仍然有一些问题,因为这意味着你需要处理服务器、FTP 以及 webroot 目录和文件权限。虽然从那时起,现代网站变得愈加复杂,但如果你让 Git 帮助你,自出版可以同样容易(或更容易!)。

用 Hugo 创建一个网站

Hugo 是一个开源的静态站点生成器。静态网站是过去的 Web 的基础(如果你回溯到很久以前,那就是 Web 的全部了)。静态站点有几个优点:它们相对容易编写,因为你不必编写代码;它们相对安全,因为页面上没有执行代码;并且它们可以非常快,因为除了在页面上传输的任何内容之外没有任何处理。

Hugo 并不是唯一一个静态站点生成器。GravPicoJekyllPodwrite 以及许多其他的同类软件都提供了一种创建一个功能最少的、只需要很少维护的网站的简单方法。Hugo 恰好是内置集成了 GitLab 集成的一个静态站点生成器,这意味着你可以使用免费的 GitLab 帐户生成和托管你的网站。

Hugo 也有一些非常大的用户。例如,如果你曾经去过 Let’s Encrypt 网站,那么你已经用过了一个用 Hugo 构建的网站。

 title=

安装 Hugo

Hugo 是跨平台的,你可以在 Hugo 的入门资源中找到适用于 MacOS、Windows、Linux、OpenBSD 和 FreeBSD 的安装说明。

如果你使用的是 Linux 或 BSD,最简单的方法是从软件存储库或 ports 树安装 Hugo。确切的命令取决于你的发行版,但在 Fedora 上,你应该输入:

$ sudo dnf install hugo

通过打开终端并键入以下内容确认你已正确安装:

$ hugo help

这将打印 hugo 命令的所有可用选项。如果你没有看到,你可能没有正确安装 Hugo 或需要将该命令添加到你的路径

创建你的站点

要构建 Hugo 站点,你必须有个特定的目录结构,通过输入以下命令 Hugo 将为你生成它:

$ hugo new site mysite

你现在有了一个名为 mysite 的目录,它包含构建 Hugo 网站所需的默认目录。

Git 是你将网站放到互联网上的接口,因此切换到你新的 mysite 文件夹,并将其初始化为 Git 存储库:

$ cd mysite
$ git init .

Hugo 与 Git 配合的很好,所以你甚至可以使用 Git 为你的网站安装主题。除非你计划开发你正在安装的主题,否则可以使用 --depth 选项克隆该主题的源的最新状态:

$ git clone --depth 1 https://github.com/darshanbaral/mero.git themes/mero

现在为你的网站创建一些内容:

$ hugo new posts/hello.md

使用你喜欢的文本编辑器编辑 content/posts 目录中的 hello.md 文件。Hugo 接受 Markdown 文件,并会在发布时将它们转换为经过主题化的 HTML 文件,因此你的内容必须采用 Markdown 格式

如果要在帖子中包含图像,请在 static 目录中创建一个名为 images 的文件夹。将图像放入此文件夹,并使用以 /images 开头的绝对路径在标记中引用它们。例如:

![A picture of a thing](/images/thing.jpeg)

选择主题

你可以在 themes.gohugo.io 找到更多主题,但最好在测试时保持一个基本主题。标准的 Hugo 测试主题是 Ananke。某些主题具有复杂的依赖关系,而另外一些主题如果没有复杂的配置的话,也许不会以你预期的方式呈现页面。本例中使用的 Mero 主题捆绑了一个详细的 config.toml 配置文件,但是(为了简单起见)我将在这里只提供基本的配置。在文本编辑器中打开名为 config.toml 的文件,并添加三个配置参数:

languageCode = "en-us"
title = "My website on the web"
theme = "mero"

[params]
  author = "Seth Kenlon"
  description = "My hugo demo"

预览

在你准备发布之前不必(预先)在互联网上放置任何内容。在你开发网站时,你可以通过启动 Hugo 附带的仅限本地访问的 Web 服务器来预览你的站点。

$ hugo server --buildDrafts --disableFastRender

打开 Web 浏览器并导航到 http://localhost:1313 以查看正在进行的工作。

用 Git 发布到 GitLab

要在 GitLab 上发布和托管你的站点,请为你的站点内容创建一个存储库。

要在 GitLab 中创建存储库,请单击 GitLab 的 “Projects” 页面中的 “New Project” 按钮。创建一个名为 yourGitLabUsername.gitlab.io 的空存储库,用你的 GitLab 用户名或组名替换 yourGitLabUsername。你必须使用此命名方式作为该项目的名称。你也可以稍后为其添加自定义域。

不要在 GitLab 上包含许可证或 README 文件(因为你已经在本地启动了一个项目,现在添加这些文件会使将你的数据推向 GitLab 时更加复杂,以后你可以随时添加它们)。

在 GitLab 上创建空存储库后,将其添加为 Hugo 站点的本地副本的远程位置,该站点已经是一个 Git 存储库:

$ git remote add origin [email protected]:skenlon/mysite.git

创建名为 .gitlab-ci.yml 的 GitLab 站点配置文件并输入以下选项:

image: monachus/hugo

variables:
  GIT_SUBMODULE_STRATEGY: recursive

pages:
  script:
  - hugo
  artifacts:
    paths:
    - public
  only:
  - master

image 参数定义了一个为你的站点提供服务的容器化图像。其他参数是告诉 GitLab 服务器在将新代码推送到远程存储库时要执行的操作的说明。有关 GitLab 的 CI/CD(持续集成和交付)选项的更多信息,请参阅 GitLab 文档的 CI/CD 部分

设置排除的内容

你的 Git 存储库已配置好,在 GitLab 服务器上构建站点的命令也已设置,你的站点已准备好发布了。对于你的第一个 Git 提交,你必须采取一些额外的预防措施,以便你不会对你不打算进行版本控制的文件进行版本控制。

首先,将构建你的站点时 Hugo 创建的 /public 目录添加到 .gitignore 文件。你无需在 Git 中管理已完成发布的站点;你需要跟踪的是你的 Hugo 源文件。

$ echo "/public" >> .gitignore

如果不创建 Git 子模块,则无法在 Git 存储库中维护另一个 Git 存储库。为了简单起见,请移除嵌入的存储库的 .git 目录,以使主题(存储库)只是一个主题(目录)。

请注意,你必须将你的主题文件添加到你的 Git 存储库,以便 GitLab 可以访问该主题。如果不提交主题文件,你的网站将无法成功构建。

$ mv themes/mero/.git ~/.local/share/Trash/files/

你也可以像使用回收站一样使用 trash

$ trash themes/mero/.git

现在,你可以将本地项目目录的所有内容添加到 Git 并将其推送到 GitLab:

$ git add .
$ git commit -m 'hugo init'
$ git push -u origin HEAD

用 GitLab 上线

将代码推送到 GitLab 后,请查看你的项目页面。有个图标表示 GitLab 正在处理你的构建。第一次推送代码可能需要几分钟,所以请耐心等待。但是,请不要一直等待,因为该图标并不总是可靠地更新。

 title=

当你在等待 GitLab 组装你的站点时,请转到你的项目设置并找到 “Pages” 面板。你的网站准备就绪后,它的 URL 就可以用了。该 URL 是 yourGitLabUsername.gitlab.io/yourProjectName。导航到该地址以查看你的劳动成果。

 title=

如果你的站点无法正确组装,GitLab 提供了可以深入了解 CI/CD 管道的日志。查看错误消息以找出发生了什么问题。

Git 和 Web

Hugo(或 Jekyll 等类似工具)只是利用 Git 作为 Web 发布工具的一种方式。使用服务器端 Git 挂钩,你可以使用最少的脚本设计你自己的 Git-to-web 工作流。使用 GitLab 的社区版,你可以自行托管你自己的 GitLab 实例;或者你可以使用 GitoliteGitea 等替代方案,并使用本文作为自定义解决方案的灵感来源。祝你玩得开心!


via: https://opensource.com/article/19/4/building-hosting-website-git

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

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

截断(形容词):缩写、删节、缩减、剪切、剪裁、裁剪、修剪……

数据项被截断的一种情况是将其输入到数据库字段中,该字段的字符限制比数据项的长度要短。例如,字符串:

Yarrow Ravine Rattlesnake Habitat Area, 2 mi ENE of Yermo CA

是 60 个字符长。如果你将其输入到具有 50 个字符限制的“位置”字段,则可以获得:

Yarrow Ravine Rattlesnake Habitat Area, 2 mi ENE #末尾带有一个空格

截断也可能导致数据错误,比如你打算输入:

Sally Ann Hunter (aka Sally Cleveland)

但是你忘记了闭合的括号:

Sally Ann Hunter (aka Sally Cleveland

这会让使用数据的用户觉得 Sally 是否有被修剪掉了数据项的其它的别名。

截断的数据项很难检测。在审核数据时,我使用三种不同的方法来查找可能的截断,但我仍然可能会错过一些。

数据项的长度分布。第一种方法是捕获我在各个字段中找到的大多数截断的数据。我将字段传递给 awk 命令,该命令按字段宽度计算数据项,然后我使用 sort 以宽度的逆序打印计数。例如,要检查以 tab 分隔的文件 midges 中的第 33 个字段:

awk -F"\t" 'NR>1 {a[length($33)]++} \
    END {for (i in a) print i FS a[i]}' midges | sort -nr

distro1

最长的条目恰好有 50 个字符,这是可疑的,并且在该宽度处存在数据项的“凸起”,这更加可疑。检查这些 50 个字符的项目会发现截断:

distro2

我用这种方式检查的其他数据表有 100、200 和 255 个字符的“凸起”。在每种情况下,这种“凸起”都包含明显的截断。

未匹配的括号。第二种方法查找类似 ...(Sally Cleveland 的数据项。一个很好的起点是数据表中所有标点符号的统计。这里我检查文件 mag2

grep -o "[[:punct:]]" file | sort | uniqc

punct

请注意,mag2 中的开括号和闭括号的数量不相等。要查看发生了什么,我使用 unmatched 函数,它接受三个参数并检查数据表中的所有字段。第一个参数是文件名,第二个和第三个是开括号和闭括号,用引号括起来。

unmatched()
{
    awk -F"\t" -v start="$2" -v end="$3" \
        '{for (i=1;i<=NF;i++) \
            if (split($i,a,start) != split($i,b,end)) \
                print "line "NR", field "i":\n"$i}' "$1"
}

如果在字段中找到开括号和闭括号之间不匹配,则 unmatched 会报告行号和字段号。这依赖于 awksplit 函数,它返回由分隔符分隔的元素数(包括空格)。这个数字总是比分隔符的数量多一个:

split

这里 ummatched 检查 mag2 中的圆括号并找到一些可能的截断:

unmatched

我使用 unmatched 来找到不匹配的圆括号 ()、方括号 []、花括号 {} 和尖括号 <>,但该函数可用于任何配对的标点字符。

意外的结尾。第三种方法查找以尾随空格或非终止标点符号结尾的数据项,如逗号或连字符。这可以在单个字段上用 cut 用管道输入到 grep 完成,或者用 awk 一步完成。在这里,我正在检查以制表符分隔的表 herp5 的字段 47,并提取可疑数据项及其行号:

cut -f47 herp5 | grep -n "[ ,;:-]$"
或
awk -F"\t" '$47 ~ /[ ,;:-]$/ {print NR": "$47}' herp5

herps5

用于制表符分隔文件的 awk 命令的全字段版本是:

awk -F"\t" '{for (i=1;i<=NF;i++) if ($i ~ /[ ,;:-]$/) \
    print "line "NR", field "i":\n"$i}' file

谨慎的想法。在我对字段进行的验证测试期间也会出现截断。例如,我可能会在“年”的字段中检查合理的 4 位数条目,并且有个 198 可能是 198n?还是 1898 年?带有丢失字符的截断数据项是个谜。 作为数据审计员,我只能报告(可能的)字符损失,并建议数据编制者或管理者恢复(可能)丢失的字符。


via: https://www.polydesmida.info/BASHing/2018-07-04.html

作者:polydesmida 选题:lujun9972 译者:wxy 校对:wxy

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