2017年12月

正则表达式 Regular expressions (简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来执行“搜索”或者“搜索并替换”操作,也可以被用来验证像密码策略等条件。

正则表达式是一个我们可利用的非常强大的工具,并且使用正则表达式的优点是它能在几乎所有计算机语言中被使用。所以如果你使用 Bash 脚本或者创建一个 python 程序时,我们可以使用正则表达式,或者也可以写一个单行搜索查询。

在这篇教程中,我们将会学习一些正则表达式的基本概念,并且学习如何在 Bash 中通过 grep 使用它们,但是如果你希望在其他语言如 python 或者 C 中使用它们,你只能使用正则表达式部分。那么让我们通过正则表达式的一个例子开始吧,

正则表达式看起来像 /t[aeiou]l/ 这个样子。

但这是什么意思呢?它意味着所提到的正则表达式将寻找一个词,它以 t 开始,在中间包含字母 a e i o u 中任意一个,并且字母 l 最为最后一个字符。它可以是 teltal 或者 til,可以匹配一个单独的词或者其它单词像 tiltbrutal 或者 telephone 的一部分。

grep 使用正则表达式的语法是 $ grep "regex_search_term" file_location

如果不理解,不要担心,这只是一个例子,来展示可以利用正则表达式获取什么,相信我,这是最简单的例子。我们可以从正则表达式中获取更多。现在我们将从正则表达式基础的开始。

基础的正则表示式

现在我们开始学习一些被称为 元字符 MetaCharacters 的特殊字符。它们可以帮助我们创建更复杂的正则表达式搜索项。下面提到的是基本元字符的列表,

  • . 点将匹配任意字符
  • [ ] 将匹配一个字符范围
  • [^ ] 将匹配除了括号中提到的那个之外的所有字符
  • * 将匹配零个或多个前面的项
  • + 将匹配一个或多个前面的项
  • ? 将匹配零个或一个前面的项
  • {n} 将匹配 n 次前面的项
  • {n,} 将匹配 n 次或更多前面的项
  • {n,m} 将匹配在 n 和 m 次之间的项
  • {,m} 将匹配少于或等于 m 次的项
  • \ 是一个转义字符,当我们需要在我们的搜索中包含一个元字符时使用

现在我们将用例子讨论所有这些元字符。

. (点)

它用于匹配出现在我们搜索项中的任意字符。举个例子,我们可以使用点如:

$ grep "d.g" file1

这个正则表达式意味着我们在名为 ‘file1’ 的文件中查找的词以 d 开始,以 g结尾,中间可以有 1 个字符的字符串。同样,我们可以使用任意数量的点作为我们的搜索模式,如 T......h,这个查询项将查找一个词,以 T 开始,以 h 结尾,并且中间可以有任意 6 个字符。

[ ]

方括号用于定义字符范围。例如,我们需要搜索一些特别的单词而不是匹配任何字符,

$ grep "N[oen]n" file2

这里,我们正寻找一个单词,以 N开头,以 n 结尾,并且中间只能有 oe 或者 n 中的一个。 在方括号中我们可以提到单个到任意数量的字符。

我们在方括号中也可以定义像 a-e或者 1-18 作为匹配字符的列表。

[^ ]

这就像正则表达式的 not 操作。当使用 [^ ] 时,它意味着我们的搜索将包括除了方括号内提到的所有字符。例如,

$ grep "St[^1-9]d" file3

这意味着我们可以拥有所有这样的单词,它们以 St 开始,以字母 d 结尾,并且不得包含从 19 的任何数字。

到现在为止,我们只使用了仅需要在中间查找单个字符的正则表达式的例子,但是如果我们需要更多字符该怎么办呢。假设我们需要找到以一个字符开头和结尾的所有单词,并且在中间可以有任意数量的字符。这就是我们使用乘数元字符如 + *? 的地方。

{n}{n,m}{n,} 或者 {,m} 也是可以在我们的正则表达式项中使用的其他乘数元字符。

* (星号)

以下示例匹配字母 k 的任意出现次数,包括一次没有:

$ grep "lak*" file4

它意味着我们可以匹配到 lakela 或者 lakkkk

+

以下模式要求字符串中的字母 k 至少被匹配到一次:

$ grep "lak+" file5

这里 k 在我们的搜索中至少需要发生一次,所以我们的结果可以为 lake 或者 lakkkk,但不能是 la

?

在以下模式匹配中

$ grep "ba?b" file6

匹配字符串 bbbab,使用 ? 乘数,我们可以有一个或零个字符的出现。

非常重要的提示

当使用乘数时这是非常重要的,假设我们有一个正则表达式

$ grep "S.*l" file7

我们得到的结果是 smallsilly,并且我们也得到了 Shane is a little to play ball。但是为什么我们得到了 Shane is a little to play ball?我们只是在搜索中寻找单词,为什么我们得到了整个句子作为我们的输出。

这是因为它满足我们的搜索标准,它以字母 s 开头,中间有任意数量的字符并以字母 l 结尾。那么,我们可以做些什么来纠正我们的正则表达式来只是得到单词而不是整个句子作为我们的输出。

我们在正则表达式中需要增加 ? 元字符,

$ grep "S.*?l" file7

这将会纠正我们正则表达式的行为。

\

\ 是当我们需要包含一个元字符或者对正则表达式有特殊含义的字符的时候来使用。例如,我们需要找到所有以点结尾的单词,所以我们可以使用:

$ grep "S.*\\." file8

这将会查找和匹配所有以一个点字符结尾的词。

通过这篇基本正则表达式教程,我们现在有一些关于正则表达式如何工作的基本概念。在我们的下一篇教程中,我们将学习一些高级的正则表达式的概念。同时尽可能多地练习,创建正则表达式并试着尽可能多的在你的工作中加入它们。如果有任何疑问或问题,您可以在下面的评论区留言。


via: http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/

作者:SHUSAIN 译者:kimii 校对:wxy

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

就在之前几篇文章,我开始了“系统管理 101”系列文章,用来记录现今许多初级系统管理员、DevOps 工程师或者“全栈”开发者可能不曾接触过的一些系统管理方面的基本知识。按照我原本的设想,该系列文章已经是完结了的。然而后来 WannaCry 恶意软件出现,并在补丁管理不善的 Windows 主机网络间爆发。我能想象到那些仍然深陷 2000 年代 Linux 与 Windows 争论的读者听到这个消息可能已经面露优越的微笑。

我之所以这么快就决定再次继续“系统管理 101”文章系列,是因为我意识到在补丁管理方面一些 Linux 系统管理员和 Windows 系统管理员没有差别。实话说,在一些方面甚至做的更差(特别是以持续运行时间为自豪)。所以,这篇文章会涉及 Linux 下补丁管理的基础概念,包括良好的补丁管理该是怎样的,你可能会用到的一些相关工具,以及整个补丁安装过程是如何进行的。

什么是补丁管理?

我所说的补丁管理,是指你部署用于升级服务器上软件的系统,不仅仅是把软件更新到最新最好的前沿版本。即使是像 Debian 这样为了“稳定性”持续保持某一特定版本软件的保守派发行版,也会时常发布升级补丁用于修补错误和安全漏洞。

当然,如果你的组织决定自己维护特定软件的版本,要么是因为开发者有最新最好版本的需求,需要派生软件源码并做出修改,要么是因为你喜欢给自己额外的工作量,这时你就会遇到问题。理想情况下,你应该已经配置好你的系统,让它在自动构建和打包定制版本软件时使用其它软件所用的同一套持续集成系统。然而,许多系统管理员仍旧在自己的本地主机上按照维基上的文档(但愿是最新的文档)使用过时的方法打包软件。不论使用哪种方法,你都需要明确你所使用的版本有没有安全缺陷,如果有,那必须确保新补丁安装到你定制版本的软件上了。

良好的补丁管理是怎样的

补丁管理首先要做的是检查软件的升级。首先,对于核心软件,你应该订阅相应 Linux 发行版的安全邮件列表,这样才能第一时间得知软件的安全升级情况。如果你使用的软件有些不是来自发行版的仓库,那么你也必须设法跟踪它们的安全更新。一旦接收到新的安全通知,你必须查阅通知细节,以此明确安全漏洞的严重程度,确定你的系统是否受影响,以及安全补丁的紧急性。

一些组织仍在使用手动方式管理补丁。在这种方式下,当出现一个安全补丁,系统管理员就要凭借记忆,登录到各个服务器上进行检查。在确定了哪些服务器需要升级后,再使用服务器内建的包管理工具从发行版仓库升级这些软件。最后以相同的方式升级剩余的所有服务器。

手动管理补丁的方式存在很多问题。首先,这么做会使补丁安装成为一个苦力活,安装补丁越多就需要越多人力成本,系统管理员就越可能推迟甚至完全忽略它。其次,手动管理方式依赖系统管理员凭借记忆去跟踪他或她所负责的服务器的升级情况。这非常容易导致有些服务器被遗漏而未能及时升级。

补丁管理越快速简便,你就越可能把它做好。你应该构建一个系统,用来快速查询哪些服务器运行着特定的软件,以及这些软件的版本号,而且它最好还能够推送各种升级补丁。就个人而言,我倾向于使用 MCollective 这样的编排工具来完成这个任务,但是红帽提供的 Satellite 以及 Canonical 提供的 Landscape 也可以让你在统一的管理界面上查看服务器的软件版本信息,并且安装补丁。

补丁安装还应该具有容错能力。你应该具备在不下线的情况下为服务安装补丁的能力。这同样适用于需要重启系统的内核补丁。我采用的方法是把我的服务器划分为不同的高可用组,lb1、app1、rabbitmq1 和 db1 在一个组,而lb2、app2、rabbitmq2 和 db2 在另一个组。这样,我就能一次升级一个组,而无须下线服务。

所以,多快才能算快呢?对于少数没有附带服务的软件,你的系统最快应该能够在几分钟到一小时内安装好补丁(例如 bash 的 ShellShock 漏洞)。对于像 OpenSSL 这样需要重启服务的软件,以容错的方式安装补丁并重启服务的过程可能会花费稍多的时间,但这就是编排工具派上用场的时候。我在最近的关于 MCollective 的文章中(查看 2016 年 12 月和 2017 年 1 月的工单)给了几个使用 MCollective 实现补丁管理的例子。你最好能够部署一个系统,以具备容错性的自动化方式简化补丁安装和服务重启的过程。

如果补丁要求重启系统,像内核补丁,那它会花费更多的时间。再次强调,自动化和编排工具能够让这个过程比你想象的还要快。我能够在一到两个小时内在生产环境中以容错方式升级并重启服务器,如果重启之间无须等待集群同步备份,这个过程还能更快。

不幸的是,许多系统管理员仍坚信过时的观点,把持续运行时间(uptime)作为一种骄傲的象征——鉴于紧急内核补丁大约每年一次。对于我来说,这只能说明你没有认真对待系统的安全性!

很多组织仍然使用无法暂时下线的单点故障的服务器,也因为这个原因,它无法升级或者重启。如果你想让系统更加安全,你需要去除过时的包袱,搭建一个至少能在深夜维护时段重启的系统。

基本上,快速便捷的补丁管理也是一个成熟专业的系统管理团队所具备的标志。升级软件是所有系统管理员的必要工作之一,花费时间去让这个过程简洁快速,带来的好处远远不止是系统安全性。例如,它能帮助我们找到架构设计中的单点故障。另外,它还帮助鉴定出环境中过时的系统,给我们替换这些部分提供了动机。最后,当补丁管理做得足够好,它会节省系统管理员的时间,让他们把精力放在真正需要专业知识的地方。


Kyle Rankin 是高级安全与基础设施架构师,其著作包括: Linux Hardening in Hostile Networks,DevOps Troubleshooting 以及 The Official Ubuntu Server Book。同时,他还是 Linux Journal 的专栏作家。


via: https://www.linuxjournal.com/content/sysadmin-101-patch-management

作者:Kyle Rankin 译者:haoqixu 校对:wxy

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

你是否关注过开源技术的发展趋势? 这里是 10 个预测。

 title=

技术一直在变革,诸如 OpenStack、 增强型网页应用 Progressive Web App (PWA)、Rust、R、 认知云 the cognitive cloud 、人工智能(AI),物联网等一些新技术正在颠覆我们对世界的固有认知。以下概述了 2018 年最可能成为主流的开源技术。

1、 OpenStack 认可度持续高涨

OpenStack 本质上是一个云操作平台(系统),它为管理员提供直观友好的控制面板,以便对大量的计算、存储和网络资源进行配置和监管。

目前,很多企业运用 OpenStack 平台搭建和管理云计算系统。得益于其灵活的生态系统、透明度和运行速度,OpenStack 越来越流行。相比其他替代方案,OpenStack 只需更少的花费便能轻松支持任务关键型应用程序。 但是,其复杂的结构以及其对虚拟化、服务器和大量网络资源的严重依赖使得不少企业对使用 OpenStack 心存顾虑。另外,想要用好 OpenStack,好的硬件支持和高水平的员工二者缺一不可。

OpenStack 基金会一直在致力于完善他们的产品。一些功能创新,无论是已经发布的还是尚处于打造阶段,都将解决许多 OpenStack 潜在的问题。随着其结构复杂性降低,OpenStack 将获取更大认可。加之众多大型的软件开发及托管公司以及成千上万会员的支持, OpenStack 在云计算时代前途光明。

2、 PWA 或将大热

PWA,即 增强型网页应用 Progressive Web App ,是对技术、设计和 网络应用程序接口 Web API 的整合,它能够在移动浏览器上提供类似应用的体验。

传统的网站有许多与生俱来的缺点。虽然应用(app)提供了比网站更加个性化、用户参与度更高的体验,但是却要占用大量的系统资源;并且要想使用应用,你还必须提前下载安装。PWA 则扬长避短,它可用浏览器访问、可被引擎搜索检索,并可响应式适应外在环境,为用户提供应用级体验。PWA 也能像应用一样自我更新,总是显示最新的实时信息,并且像网站一样,以极其安全的 HTTPS 模式递交信息。PWA 运行于标准容器中,无须安装,任何人只要输入 URL 即可访问。

现在的移动用户看重便利性和参与度,PWAs 的特性完美契合这一需求,所以 PWA 成为主流是必然趋势。

3、 Rust 成开发者新宠

大多数的编程语言都需在安全和控制二者之间折衷,但 Rust 是一个例外。Rust 使用广泛的编译时检查进行 100% 的控制而不影响程序安全性。上一次 Pwn2Own 竞赛找出了 Firefox C++ 底层实现的许多严重漏洞。如果 Firefox 是用 Rust 编写的,这些漏洞在产品发布之前的编译阶段就会被发现并解决。

Rust 独特的内建单元测试方式使开发者们考虑将其作为首选的开源语言。它是 C 和 Python 等其他编程语言有效的替代方案,Rust 可以在不损失程序可读性的情况下写出安全的代码。总之,Rust 前途光明。

4、 R 用户群在壮大

R) 编程语言,是一个与统计计算和图像呈现相关的 GUN 项目。它提供了大量的统计和图形技术,并且可扩展增强。它是 S) 语言的延续。S 语言早已成为统计方法学的首选工具,R 为数据操作、计算和图形显示提供了开源选择。R 语言的另一个优势是对细节的把控和对细微差别的关注。

和 Rust 一样,R 语言也处于上升期。

5、 广义的 XaaS

XaaS 是 “ 一切皆服务 anything as a service ” 的缩写,是通过网络提供的各种线上服务的总称。XaaS 的外延正在扩大,软件即服务(SaaS)、基础设施即服务(IaaS) 和平台即服务(PaaS)等观念已深入人心,新兴的基于云的服务如网络即服务(NaaS)、存储即服务(SaaS 或 StaaS)、监控即服务(MaaS)以及通信即服务(CaaS)等概念也正在普及。我们正在迈向一个万事万物 “皆为服务” 的世界。

现在,XaaS 的概念已经延伸到实体企业。著名的例子有 Uber 、Lyft 和 Airbnb,前二者利用新科技提供交通服务,后者提供住宿服务。

高速网络和服务器虚拟化使得强大的计算能力成为可能,这加速了 XaaS 的发展,2018 年可能是 “XaaS 年”。XaaS 无与伦比的灵活性、可扩展性将推动 XaaS 进一步发展。

6、 容器技术越来越受欢迎

容器技术,是用标准化方法打包代码的技术,它使得代码能够在任意环境中快速地 “接入并运行”。容器技术让企业可以削减经费、降低实施周期。尽管容器技术在 IT 基础结构改革方面的已经初显潜力,但事实上,运用好容器技术仍然比较复杂。

容器技术仍在发展中,技术复杂性随着各方面的进步在下降。最新的技术让容器使用起来像使用智能手机一样简单、直观,更不用说现在的企业需求:速度和灵活性往往能决定业务成败。

7、 机器学习和人工智能的更广泛应用

机器学习和人工智能 指在没有程序员给出明确的编码指令的情况下,机器具备自主学习并且积累经验自我改进的能力。

随着一些开源技术利用机器学习和人工智能实现尖端服务和应用,这两项技术已经深入人心。

Gartner 预测,2018 年机器学习和人工智能的应用会更广。其他一些领域诸如数据准备、集成、算法选择、学习方法选择、模块制造等随着机器学习的加入将会取得很大进步。

全新的智能开源解决方案将改变人们和系统交互的方式,转变由来已久的工作观念。

  • 机器交互,像聊天机器人这样的对话平台,提供“问与答”的体验——用户提出问题,对话平台作出回应,成为人机之间默认的交互界面。
  • 无人驾驶和无人机现在已经家喻户晓了,2018 年将会更司空见惯。
  • 沉浸式体验的应用不再仅仅局限于视频游戏,在真实的生活场景比如设计、培训和可视化过程中都能看到沉浸式体验的身影。

8、 区块链将成为主流

自比特币应用区块链技术以来,其已经取得了重大进展,并且已广泛应用在金融系统、保密选举、学历验证等领域中。未来几年,区块链会在医疗、制造业、供应链物流、政府服务等领域中大展拳脚。

区块链分布式存储数据信息,这些数据信息依赖于数百万个共享数据库的节点。区块链不被任意单一所有者控制,并且单个损坏的节点不影响其正常运行,区块链的这两个特性让它异常健壮、透明、不可破坏。同时也规避了有人从中篡改数据的风险。区块链强大的先天优势足够支撑其成为将来主流技术。

9、 认知云粉墨登场

认识技术,比如前面所述的机器学习和人工智能,用于为多行业提供简单化和个性化服务。一个典型例子是金融行业的游戏化应用,其为投资者提供了严谨的投资建议,降低投资模块的复杂程度。数字信托平台使得金融机构的身份认证过程较以前精简 80%,提升了合规性,降低了诈骗比率。

认知云技术现在正向云端迁移,借助云,它将更加强大。IBM Watson) 是认知云应用最知名的例子。IBM 的 UIMA 架构是开源的,由 Apache 基金会负责维护。DARPA(美国国防高级研究计划局)的 DeepDive 项目借鉴了 Watson 的机器学习能力,通过不断学习人类行为来增强决策能力。另一个开源平台 OpenCog ,为开发者和数据科学家开发人工智能应用程序提供支撑。

考虑到实现先进的、个性化的用户体验风险较高,这些认知云平台来年时机成熟时才会粉墨登场。

10、 物联网智联万物

物联网(IoT)的核心在于建立小到嵌入式传感器、大至计算机设备的相互连接,让其(“物”)相互之间可以收发数据。毫无疑问,物联网将会是科技界的下一个 “搅局者”,但物联网本身处于一个不断变化的状态。

物联网最广为人知的产品就是 IBM 和三星合力打造的去中心化 P2P 自动遥测系统(ADEPT)。它运用和区块链类似的技术来构建一个去中心化的物联网。没有中央控制设备,“物” 之间通过自主交流来进行升级软件、处理 bug、管理电源等等一系列操作。

开源推动技术创新

数字化颠覆是当今以科技为中心的时代的常态。在技术领域,开放源代码正在逐渐普及,其在 2018 将年成为大多数技术创新的驱动力。

此榜单对开源技术趋势的预测有遗漏?在评论区告诉我们吧!

(题图:Mitch Bennett. Opensource.com 修改)

关于作者

Sreejith Omanakuttan - 自 2000 年开始编程,2007年开始从事专业工作。目前在 Fingent 领导开源团队,工作内容涵盖不同的技术层面,从“无聊的工作”(?)到前沿科技。有一套 “构建—修复—推倒重来” 工作哲学。在领英上关注我: https://www.linkedin.com/in/futuregeek/


via: https://opensource.com/article/17/11/10-open-source-technology-trends-2018

作者:Sreejith Omanakuttan 译者:wangy325 校对:wxy

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

GitHub and all CI tools

持续集成(CI)工具可以帮助你在每次提交时执行测试,并将报告结果提交到合并请求,从而帮助维持团队的质量标准。结合持续交付(CD)工具,你还可以在多种配置上测试你的代码,运行额外的性能测试,并自动执行每个步骤,直到进入产品阶段

有几个与 GitHub 集成的 CI 和 CD 工具,其中一些可以在 GitHub Marketplace 中点击几下安装。有了这么多的选择,你可以选择最好的工具 —— 即使它不是与你的系统预集成的工具。

最适合你的工具取决于许多因素,其中包括:

  • 编程语言和程序架构
  • 你计划支持的操作系统和浏览器
  • 你团队的经验和技能
  • 扩展能力和增长计划
  • 依赖系统的地理分布和使用的人
  • 打包和交付目标

当然,无法为所有这些情况优化你的 CI 工具。构建它们的人需要选择哪些情况下服务更好,何时优先考虑复杂性而不是简单性。例如,如果你想测试针对一个平台的用特定语言编写的小程序,那么你就不需要那些可在数十个平台上测试,有许多编程语言和框架的,用来测试嵌入软件控制器的复杂工具。

如果你需要一些灵感来挑选最好使用哪个 CI 工具,那么看一下 Github 上的流行项目。许多人在他们的 README.md 中将他们的集成的 CI/CD 工具的状态显示为徽章。我们还分析了 GitHub 社区中超过 5000 万个仓库中 CI 工具的使用情况,并发现了很多变化。下图显示了根据我们的拉取请求中使用最多的提交状态上下文,GitHub.com 使用的前 10 个 CI 工具的相对百分比。

我们的分析还显示,许多团队在他们的项目中使用多个 CI 工具,使他们能够发挥它们最擅长的。

Top 10 CI systems used with GitHub.com based on most used commit status contexts

如果你想查看,下面是团队中使用最多的 10 个工具:

这只是尝试选择默认的、预先集成的工具,而没有花时间根据任务研究和选择最好的工具,但是对于你的特定情况会有很多很好的选择。如果你以后改变主意,没问题。当你为特定情况选择最佳工具时,你可以保证量身定制的性能和不再适合时互换的自由。

准备好了解 CI 工具如何适应你的工作流程了么?


via: https://github.com/blog/2463-github-welcomes-all-ci-tools

作者:jonico 译者:geekpi 校对:wxy

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

Undistract-me

前一段时间,我们发表了如何在终端活动完成时获取通知。今天,我发现了一个叫做 “undistract-me” 的类似工具,它可以在长时间运行的终端命令完成时通知你。想象这个场景。你运行着一个需要一段时间才能完成的命令。与此同时,你查看你的 Facebook,并参与其中。过了一会儿,你记得你几分钟前执行了一个命令。你回到终端,注意到这个命令已经完成了。但是你不知道命令何时完成。你有没有遇到这种情况?我敢打赌,你们大多数人遇到过许多次这种情况。这就是 “undistract-me” 能帮助的了。你不需要经常检查终端,查看命令是否完成。长时间运行的命令完成后,undistract-me 会通知你。它能在 Arch Linux、Debian、Ubuntu 和其他 Ubuntu 衍生版上运行。

安装 Undistract-me

Undistract-me 可以在 Debian 及其衍生版(如 Ubuntu)的默认仓库中使用。你要做的就是运行下面的命令来安装它。

sudo apt-get install undistract-me

Arch Linux 用户可以使用任何帮助程序从 AUR 安装它。

使用 Pacaur

pacaur -S undistract-me-git

使用 Packer

packer -S undistract-me-git

使用 Yaourt

yaourt -S undistract-me-git

然后,运行以下命令将 “undistract-me” 添加到 Bash 中。

echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc

或者,你可以运行此命令将其添加到你的 Bash:

echo "source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install" >> .bashrc

如果你在 Zsh shell 中,请运行以下命令:

echo "source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install" >> .zshrc

最后让更改生效。

对于 Bash:

source ~/.bashrc

对于 Zsh:

source ~/.zshrc

配置 Undistract-me

默认情况下,Undistract-me 会将任何超过 10 秒的命令视为长时间运行的命令。你可以通过编辑 /usr/share/undistract-me/long-running.bash 来更改此时间间隔。

sudo nano /usr/share/undistract-me/long-running.bash

找到 LONG_RUNNING_COMMAND_TIMEOUT 变量并将默认值(10 秒)更改为你所选择的其他值。

保存并关闭文件。不要忘记让更改生效:

source ~/.bashrc

此外,你可以禁用特定命令的通知。为此,找到 LONG_RUNNING_IGNORE_LIST 变量并像下面那样用空格分隔命令。

默认情况下,只有当活动窗口不是命令运行的窗口时才会显示通知。也就是说,只有当命令在后台终端窗口中运行时,它才会通知你。如果该命令在活动窗口终端中运行,则不会收到通知。如果你希望无论终端窗口可见还是在后台都发送通知,你可以将 IGNORE_WINDOW_CHECK 设置为 1 以跳过窗口检查。

Undistract-me 的另一个很酷的功能是当命令完成时,你可以设置音频通知和可视通知。默认情况下,它只会发送一个可视通知。你可以通过在命令行上将变量 UDM_PLAY_SOUND 设置为非零整数来更改此行为。但是,你的 Ubuntu 系统应该安装 pulseaudio-utils 和 sound-theme-freedesktop 程序来启用此功能。

请记住,你需要运行以下命令来更新所做的更改。

对于 Bash:

source ~/.bashrc

对于 Zsh:

source ~/.zshrc

现在是时候来验证这是否真的有效。

在长时间运行的终端命令完成时获取通知

现在,运行任何需要超过 10 秒或者你在 Undistract-me 脚本中定义的时间的命令

我在 Arch Linux 桌面上运行以下命令:

sudo pacman -Sy

这个命令花了 32 秒完成。上述命令完成后,我收到以下通知。

请记住,只有当给定的命令花了超过 10 秒才能完成时,Undistract-me 脚本才会通知你。如果命令在 10 秒内完成,你将不会收到通知。当然,你可以按照上面的“配置”部分所述更改此时间间隔设置。

我发现这个工具非常有用。在我迷失在其他任务上时,它帮助我回到正事。我希望这个工具也能对你有帮助。

还有更多的工具。保持耐心!

干杯!

资源:


via: https://www.ostechnix.com/undistract-get-notification-long-running-terminal-commands-complete/

作者:sk 译者:geekpi 校对:wxy

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

我去!又是这样。 我还以为我登录到家里的服务器呢。 结果 重启的居然是数据库服务器。 另外我也有时会在错误终端内输入 “shutdown -h 0” 命令。 我知道有些人 经常会犯这个错误

我的愤怒无从容忍

有办法解决这个问题吗?我真的只能忍受这种随机重启和关机的痛苦吗? 虽说人总是要犯错的,但总不能一错再错吧。

最新我在 tweet 上发了一通牢骚:

我总是一遍又一遍地犯下同样的错误 :( 本来应该输入: sudo virsh reboot d1

却总是输错重启了自己的电脑 sudo reboot d1

-- nixCraft (@nixcraft) February 19,2017

结果收到了一些建议。我们来试一下。

向你引荐 molly guard

Molly-Guard 尝试阻止你不小心关闭或重启 Linux 服务器。它在 Debian/Ubuntu 中的包描述为:

这个包会安装一个 shell 脚本来屏蔽现有的 shutdown/reboot/halt/poweroff/coldreboot/pm-hibernate/pm-suspend* 命令。 molly-gurad 会首先运行一系列的脚本,只有在所有的脚本都返回成功的条件下, 才会调用真正的命令。 其中一个脚本会检查是否存在 SSH 会话。 如果是通过 SSH 会话调用的命令, shell 脚本会提示你输入相关闭主机的名称。 这应该足够防止你发生意外的关机或重启了。

貌似 molly-guard 还是个 专有名词 Jargon File

一种用于防止由于笨拙或者不小心触碰道大红开关的屏障。最初指的临时盖在 IBM 4341 的大红按钮上的有机玻璃,因为有一个程序员蹒跚学步的女儿(名叫 Molly)一天之内重启了它两次。 后来这个东西也被用来盖住磁盘和网络设备上的停止/重启按钮。在硬件目录中,你很少会看到 “guarded button” 这样无趣的描述"。

如何安装 molly guard

使用 apt-get 命令 或者 apt 命令 来搜索并安装 molly-guard:

$ apt search molly-guard
$ sudo apt-get install molly-guard

结果为:

Fig.01: Installing molly guard on Linux

测试一下

输入 reboot 命令shutdown 命令:

$ sudo reboot
# reboot
$ shutdown -h 0
# sudo shutdown -h 0
### running wrong command such as follows instead of
### sudo virsh reboot vm_name_here
$ sudo reboot vm_name_here

结果为:

Fig.02: Molly guard saved my butt ;)

我超级喜欢 molly-guard。因此我将下行内容加入到 apt-debian-ubuntu-common.yml 文件中了:

 - apt:
 name: molly-guard

是的。我使用 Ansible 在所有的 Debian 和 Ubuntu 服务器上都自动安装上它了。

相关我的 10 大 UNIX 命令行错误

如果我的 Linux 发行版或者 Unix 系统(比如 FreeBSD) 没有 molly-guard 怎么办呢?

不用怕,设置 shell 别名

## bash shell example ###
alias reboot = "echo 'Are you sure?' If so, run /sbin/reboot"
alias shutdown = "echo 'Are you sure?' If so, run /sbin/shutdown"

你也可以 临时取消别名机制运行真正的命令。比如要运行 reboot 可以这样:

# \reboot

或者

# /sbin/reboot

另外你也可以写一个 shell/perl/python 脚本来调用这些命令并要求 确认 reboot/halt/shutdown 的选项。


via: https://www.cyberciti.biz/hardware/how-to-protects-linux-and-unix-machines-from-accidental-shutdownsreboots-with-molly-guard/

作者:Vivek Gite 译者:lujun9972 校对:wxy

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