Quantcast
Channel: Linux 中国◆开源社区
Viewing all 9060 articles
Browse latest View live

如何在现有的 Linux 系统上添加新的磁盘

$
0
0

作为一个系统管理员,我们会有这样的一些需求:作为升级服务器容量的一部分,或者有时出现磁盘故障时更换磁盘,我们需要将新的硬盘配置到现有服务器。

在这篇文章中,我会向你逐步介绍添加新硬盘到现有 RHEL/CentOS 或者 Debian/Ubuntu Linux 系统的步骤。

推荐阅读: 如何将超过 2TB 的新硬盘添加到现有 Linux

重要:请注意这篇文章的目的只是告诉你如何创建新的分区,而不包括分区扩展或者其它选项。

我使用 fdisk 工具 完成这些配置。

我已经添加了一块 20GB 容量的硬盘,挂载到了 /data 分区。

fdisk 是一个在 Linux 系统上用于显示和管理硬盘和分区命令行工具。

# fdisk -l

这个命令会列出当前分区和配置。

查看 Linux 分区详情

查看 Linux 分区详情

添加了 20GB 容量的硬盘后,fdisk -l 的输出像下面这样。

# fdisk -l

查看新分区详情

查看新分区详情

新添加的磁盘显示为 /dev/xvdc。如果我们添加的是物理磁盘,基于磁盘类型它会显示为类似 /dev/sda。这里我使用的是虚拟磁盘。

要在特定硬盘上分区,例如 /dev/xvdc

# fdisk /dev/xvdc

常用的 fdisk 命令。

  • n - 创建分区
  • p - 打印分区表
  • d - 删除一个分区
  • q - 不保存更改退出
  • w - 保存更改并退出

这里既然我们是要创建一个分区,就用 n 选项。

在 Linux 上创建新分区

在 Linux 上创建新分区

创建主分区或者扩展分区。默认情况下我们最多可以有 4 个主分区。

创建主分区

创建主分区

按需求输入分区编号。推荐使用默认的值 1

分配分区编号

分配分区编号

输入第一个扇区的大小。如果是一个新的磁盘,通常选择默认值。如果你是在同一个磁盘上创建第二个分区,我们需要在前一个分区的最后一个扇区的基础上加 1

为分区分配扇区

为分区分配扇区

输入最后一个扇区或者分区大小的值。通常推荐输入分区的大小。总是添加前缀 + 以防止值超出范围错误。

分配分区大小

分配分区大小

保存更改并退出。

保存分区更改

保存分区更改

现在使用 mkfs 命令格式化磁盘。

# mkfs.ext4 /dev/xvdc1

格式化新分区

格式化新分区

格式化完成后,按照下面的命令挂载分区。

# mount /dev/xvdc1 /data

/etc/fstab 文件中添加条目以便永久启动时自动挂载。

/dev/xvdc1  /data   ext4    defaults     0   0

总结

现在你知道如何使用 fdisk 命令 在新磁盘上创建分区并挂载了。

当处理分区、尤其是编辑已配置磁盘的时候,我们需要格外的小心。请分享你的反馈和建议吧。

(题图:Pixabay,CC0)


作者简介:

我的工作内容包括 IBM-AIX、Solaris、HP-UX 多种平台以及存储技术 ONTAP 和 OneFS,并具有 Oracle 数据库的经验。


via: http://www.tecmint.com/add-new-disk-to-an-existing-linux/

作者:Lakshmi Dhandapani 译者:ictlyh 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8453-1.html?utm_source=rss&utm_medium=rss


京东大规模容器集群之 kubernetes 实践

$
0
0

4 月 22 日,由 K8S 技术社区、Linux 中国联合主办的 K8S GeekGathering 2017 吸引了国内容器领域关注者100+人到场参与,以下是京东容器云产品部总经理郭理靖的演讲实录整理:

大家下午好,我负责整个京东云产品的设计,包括容器、主机等。我分享云计算的下一个时代—容器时代,我会在第一章,讲讲为什么容器时代是云的下个时代,下面几个会讲京东云怎么做容器服务的,接下来会讲容器实践的一些案例,包括我们京东内部的,包括我们客户的。

 

01 容器时代已经到来

当前,容器的占有率可能比想象中还要快地增长,这个是使用 Docker 镜像的受欢迎的程度,可以看到几个排在前面的。然后平均一个公司有多少容器在跑,只有 7 个。但是在 06 年的时候,5 个都不到,其实增长还蛮快。

我觉得这个图挺有意思的,讲的是一个容器的平均生命周期,比较的是容器和未来的生命周期,容器的平均生命周期是 2.5 天,VM 是 23 天,这 2.5 天里面分了两部分,一部分是用了编排,一部分没有用编排。如果用户没有用 K8S 工具,平均的容器生命周期是一天,但是用了 K8S 编排,生命周期是5天,但是这个数据代表了什么意义呢?这个数据最直观的意义是成本,也就是说你用 Docker 也好,用 VM 也好,你可能解决同样的问题,因为 VM 的创建,或者各方面的因素,导致你上手的代价挺大,所以懒得删除了,容器的话很容易,更容易让你删除它。从某种角度上讲,你做同样一件事情,你用容器的成本是用 VM 的 1/9。

我觉得这个数据稍微有点夸张,实际上我们内部和用户的数据体验来看,用容器比 VM 成本降低 50% 一点问题都没有。通过这么一组数据,我想表达一个观点,云计算的下一个时代已经是来临了,而不是三年前说可能是容器,这个数据告诉我们,下一个时代就是容器时代,毫无质疑。

0 2 京东云:将虚拟化和容器结合

容器时代,容器的优点是启动快,应用方便,在虚拟化时代,它的安全是强隔离的,生态也是比较完善,因为经过十年的发展,虚拟化的网络、存储都是相当成熟的。

我们做一个什么事情呢?我们做了把虚拟化和容器结合的工作。我们怎么做?为什么这么做?容器最大的问题是隔离性的问题,毕竟是说它用的技术,理论上存在很多容器逃逸的可能性,历史上发生很多,在一个物理机上起两个容器服务的时候,服务 A 和 B,A 可能很容易逃脱宿主机,拿到容器 B 的数据的权限,因为容器的权限管理很难做,权限给的少用起来不舒服,给得高,应用很容易逃脱。但是这个问题在私有云里面其实并不严重,因为我们在自己的公司里面我们都相信自己开发者开发出的应用是比较安全的,不可能 A 部门的应用读到 B 部门的东西,我们有自己的代码审核机制,安全防范机制,公司内部用传统的容器部署方案没有问题。

公有云上不可能。因为我们永远不知道来的用户是什么人,什么目的,可能是捣乱的,所以我们认为公有云上的用户,应用是不可信的,我们要在公有云上给我们用户提供完整地,安全的服务,让我们怎么做,我们仔细分析 Docker,两部分组成:第一部分是容器部分,用来做隔离,第二部分是 Docker 最创新的地方,用分层的方式存储,可以利用文件系统分级存储,能够快速启动一个容器,其实这个才是 Docker 的精华。因为我们想为什么我们启动虚拟机的时候会慢,慢是有原因的,因为你拉一个镜像就慢了,或者给镜像备份的时候。你这个应用大了,镜像大了,可能会使整体应用慢一些,我们就改写 KVM,让 KVM 适配Docker 的镜像,这样我们利用了虚拟化的安全生态和它的成熟度,同时又保留了容器的启动、体积和应用的优势。

可以看到其实我们做的事情,我们其实,我们的底层还是一个 hypervisor,我们的容器云不能简单说是容器云,为了方便大家理解叫容器云,我们跑 APP 的空间不是 Container,大家知道启动一个虚拟机比较慢,可能要好几分钟,如果大家在公有云用过云主机的话,创建云主机时间比较慢,为什么慢?其实这个慢的过程,跟 KVM 关系不是特别大,关系在于,启动一个 VM 的时候,他认为自己是一个机器,要做很多的引导程序、引导检查这种工作,会导致变慢,但是你在物理机里面的虚拟机,很多工作可以不用做,所以我们在这边启动 VM 的工作进行了简化,同时在,这上面是传统的启动 Docker 的流程,下面是我们启动自己的,叫京东容器 Container 的技术。

03 京东容器云中的 K8S 实践

前面介绍一下我们怎么做容器云服务的,我们在容器云服务里面怎么跟 K8S 结合的。我们对 K8S 改造并不是那么大,大部分用了 K8S 原生的组建和架构,我们只是把容器的运行时换了,里面本来有多个 Container,我们换成 JCLOUDContainer,其他的服务并没有大动。

右侧可以看到,我们跟公有云绑定的,我们的多租户验证与授权管理自己做的。另外,网络和存储,网络接自己开发的 SDN 网络,JCLOUDContainer,跟公有云上创建的云主机,可以放在一个里面,我们支持VM和容器相互通性,每个 JCLOUD,带来便利性,可以放在一块,持久性的存储,我们用的是自己的硬盘,JCLOUDContainer 用的硬盘如果不用了,也可以插到云主机上用。

所以在我们的京东云里面,容器和主机是对等的一个关系,他们都是一等公民,在容器和主机下面,才是我们的云硬盘,我们的网络,监控也是一样,用统一的跟云主机一样的模块。这个图可以让大家很方便看,我们现在容器云服务,京东云容器服务,跟一些传统的其他家或者业界其他做法不一样,如果我们说,如果在一年前,我们说自己用虚拟机搭一套 Swarm 的话,肯定去公有云厂商里面启动一系列的虚拟机,再做。

04 京东容器云的典型应用

接下来介绍京东云的实践之路,介绍我们京东内部是怎么做容器的,同时讲讲内部做容器跟我们在公有云上提供容器服务有什么差异点,以及我们用户是怎么用容器云的,我们有世界上最大的容器集群之一,20 万的容器集群,保证了京东 618,双 11 大促,内部 99% 做了容器化。

内部的做法也是非常标准的做法,本质上并没有跟其他厂商有什么区别,只是在内部的容器化的过程中,我可以讲讲我们经历,因为我们最早还是做虚拟化的。然后在虚拟化的基础上我们做了很多工具,包括我们的子化部署,统一的监控,日志收集,服务发现,整体的管理都是有,我们第一部接触容器的时候没有现在这么彻底,这是最终的图,之前我们采取的做法是,为了减少损耗和风险,我们之前干的第一件事情是把 VM 换成一个容器,先把事情做了,那个时候就是把 VM 换容器最主要的目的是什么呢?主要是把容器用在轻量级隔离,速度和带来的损耗比较少。

第二,容器是隔离技术,对我们重要的一点是可以动态地调整 CPU 内存不影响应用,对大公司很重要,因为很多申请的时候,说 32 核,64G,整体运维没有反抗的余地,他说不给我那么多,影响业务,造成我们资源浪费,资源可调整之后,就方便了。但是我们并没有把 Docker 的精髓用起来,因为 Docker 不仅提供了隔离的方案,还提供了应用分发,还要把我们的自动化部署,把代码和价包拉过来,比较费劲,1.0 过后,到 2.0 的时候,就完全变成真正的容器的K8S的集群,应用也是达到了镜像里面了,不是到我们上面自动拉东西了。

然后我讲讲我们非常典型的应用,就是在容器云内测的,我们已经开始内测了,非常典型的应用就是数据采集,直白一点就是爬虫,都叫数据采集,爬虫比较敏感。爬虫是非常适合用容器做的场景,因为爬虫的应用特别容易做分布式,可能每个应用都长得一样,它的任务可能是爬一个网站,爬完之后就销毁,对于爬虫而言,最大的问题还是在于 IP 的问题,因为爬虫和反爬永远是业界的两个热点,很多人对网站的信息不喜欢被爬,有反爬机制,一段时间的访问请求次数有控制,所以我们提供了很丰富的IP池,包含 100 个 C 的 IP 池,前面两条,灵活这个我们容器解决,但是 IP 这个问题,我们要靠一个大的 IPS 解决,每个用户到我们这里申请 IP 的时候,我们分配得比较均匀。有可能对方把你这个 C 封了,我们有大的 IP 池之后。

这个其实我觉得有点像云计算分时租赁的味道,每个用户去爬取的网站不一样,用户A爬新浪微博,但是用户B爬的是淘宝,被新浪微博的IP也可以访问淘宝,我们对每个用户有黑名单的 IP,可以打一个 tab,下次申请新IP的时候,如果带上新浪这个我不会把黑名单的IP池分配给你,用户有自己分组的黑名单,保证你的 IP 可用,保证你不会拿到被扔到 IP 池的 IP。

下面,我们内部用的微服务,这个概念,大家一定耳熟能详了,我们也一样,我们内部,在京东云上提供的微服务,通过我们的容器的部署去部署上去。当然我们框里面都是微服务,后面像数据库、日志是用 Docker 部署的,不能适用于微服务,我讲讲 Docker 为什么和微服务结合得很紧密,确实说微服务是 Docker 非常好的应用场景,刚才说的爬虫的例子,也是可以很好用容器解决的。很多里面,容器刚好解决了微服务的很多痛点,包括容器共享,大家可以看到,他最少可以做到一个 C 4 兆,小对小刚好匹配上了,每个容器是单独独立的,而且说它是跟应用绑定的。我们有一个用户是做机器学习和基因研究的,他们团队里面有很多个不同部门的工程师,每个工程师用的工具链,工具包完全不一样。

他们运维直接崩溃了,因为每个小组需要的语言和工具链不一样,给每个应用安装部署花很多时间,用容器化就特别容易做这个事情,直接每个小组部门容器化,做微服务的时候,不应该强制每个服务用同样的语言去出现,因为你微服务做得够小,有些微服务需要高效的,有些不需要,不同的微服务需要不同的语言解决反而会提高效率,开发环境和生产环境相同。然后应用是一体化的,那你以前整个微服务的,代码和业面可以共用一套管理体系,我们做微服务的时候希望微服务快速响应,多的时候启多一些,少的话小一些。

纵向的扩容就是内存调整,我们用 Container 的技术。最重要的还是省钱,不管是微服务还好,容器服务也好,最终的目的是提高整个团队开发的效率,部署的效率,我觉得给大家讲一个我的理解和概念,其实用容器和用虚拟机省下来的钱可能只有一点点。

比如你的服务器只有一百台,用容器后可能变成 60 台、 50 台,省下来的钱也许不多,但是在人工上省的钱非常多,我们现在都知道工程师非常贵。如果开发一个东西原先需要 10 个人,现在需要 5 个人,省下来的钱非常多。微服务也好,主要是省人工的。大家要明白容器带来的,或者 K8S 带来的更多的优势不是你节省的机器成本,更多节省你的管理和人员成本。

最后一个场景是我们常见的,比较推崇的 DevOps,开发环境、测试环境、生产环境统一后带来的好处,以及开发环境可以用多个 Container 的时候,如果你能在自己的环境里面,因为每个开发者都有自己的笔记本,在自己的笔记本里面可以很轻松地搭建完整的开发环境的话,效率非常高,哪怕加自己的两台虚拟机可以搭建起来的话,那个是非常重要的,我们在大公司开发会发现,你的工程进度不取决于你写代码的速度,取决于其他团队跟你协调的速度,或者对方把这些东西写好了,你要部署起来,这个挺费时间,如果你自己有相对比较完整的开发环境的话,你不依赖于别人的进步,对每个开发者而言是效率提高的,在这个效率提升来讲,我个人认为是非常划算的。

我们非常推崇走这个 DevOps 路线,保证自己有完整的开发环境,每个团队做这样的微服务的架构,每个模块,可以,不是以人与人为主,是以文档为主,可以有效提高我们的效率,所以不管是容器好还是K8S还好,微服务也好,这种理念是整个团队所有人认可之后,才能产生应该有的效率。以上就是我的整体分享,非常感谢大家的时间。

点此下载演讲 PPT,下载提取码: uyeh


完美阅读及发表评论,请猛击:https://linux.cn/article-8454-1.html?utm_source=rss&utm_medium=rss

用 NTP 把控时间(一):使用概览

$
0
0

NTP

这系列共三部分,首先,Chirs Binnie 探讨了在一个合理的架构中 NTP 服务的重要性。

鲜有互联网上的服务能如时间服务一样重要。影响你系统计时的小问题可能需要一两天才能被发现,而这些不期而遇的问题所带来的连锁反应几乎总是让人伤脑筋的。

设想你的备份服务器与网络时间协议(NTP)服务器断开连接,过了几天,引起了几小时的时间偏差。你的同事照常九点上班,发现需要大量带宽的备份服务器消耗了所有网络资源,这也就意味着他们在备份完成之前几乎不能登录工作台开始他们的日常工作。

这系列共三部分,首先,我将提供简要介绍 NTP 来防止这种困境的发生。从邮件的时间戳到记录你工作的进展,NTP 服务对于一个合理的架构是如此的重要。

可以把如此重要的 NTP 服务器(其他的服务器从此获取时钟数据)看做是倒置金字塔的底部,它被称之为一层Stratum 1服务器(也被称为“primary”服务器)。这些服务器与国家级时间服务(称为零层Stratum 0,通常这些设备是是原子钟和 GPS 钟之类的装置)直接交互。与之安全通讯的方法很多,例如通过卫星或者无线电。

令人惊讶的是,几乎所有的大型企业都会连接二层Stratum 2服务器(或“次级secondary”服务器)而是不是主服务器。如你所料,二层服务器和一层直接同步。如果你觉得大公司可能有自己的本地 NTP 服务器(至少两个,通常三个,为了灾难恢复之用),这些就是三层服务器。这样,三层服务器将连接上层预定义的次级服务器,负责任地传递时间给客户端和服务器,精确地反馈当前时间。

由简单设计而构成的 NTP 可以工作的前提是——多亏了通过互联网跨越了大范围的地理距离——在确认时间完全准确之前,来回时间(包什么时候发出和多少秒后被收到)都会被清楚记录。设置电脑的时间的背后要比你想象的复杂得多,如果你不相信,那这神奇的网页值得一看。

再次重提一遍,为了确保你的架构如预期般工作,NTP 是如此的关键,你的 NTP 与层次服务器之间的连接必须是完全可信赖并且能提供额外的冗余,才能保持你的内部时钟同步。在 NTP 主站有一个有用的一层服务器列表。

正如你在列表所见,一些 NTP 一层服务器以 “ClosedAccount” 状态运行;这些服务器需要事先接受才可以使用。但是只要你完全按照他们的使用引导做,“OpenAccess” 服务器是可以用于轮询使用的。而 “RestrictedAccess” 服务器有时候会因为大量客户端访问或者轮询间隙太小而受限。另外有时候也有一些专供某种类型的组织使用,例如学术界。

尊重我的权威

在公共 NTP 服务器上,你可能发现遵从某些规则的使用规范。现在让我们看看其中一些。

“iburst” 选项作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包(八个包而不是通常的一个)给 NTP 服务器。如果在短时间内呼叫 NTP 服务器几次,没有出现可辨识的应答,那么本地时间将不会变化。

不像 “iburst” ,按照 NTP 服务器的通用规则, “burst” 选项一般不允许使用(所以不要用它!)。这个选项不仅在轮询间隔发送大量包(明显又是八个),而且也会在服务器能正常使用时这样做。如果你在高层服务器持续发送包,甚至是它们在正常应答时,你可能会因为使用 “burst” 选项而被拉黑。

显然,你连接服务器的频率造成了它的负载差异(和少量的带宽占用)。使用 “minpoll” 和 “maxpoll” 选项可以本地设置频率。然而,根据连接 NTP 服务器的规则,你不应该分别修改其默认的 64 秒和 1024 秒。

此外,需要提出的是客户应该重视那些请求时间的服务器发出的“亲一下就死(死亡之吻)Kiss-Of-Death” (KOD)消息。如果 NTP 服务器不想响应某个特定的请求,就像路由和防火墙技术那样,那么它最有可能的就是简单地遗弃或吞没任何相关的包。

换句话说,接受到这些数据的服务器并不需要特别处理这些包,简单地丢弃这些它认为这不值得回应的包即可。你可以想象,这并不是特别好的做法,有时候礼貌地问客户是否中止或停止比忽略请求更为有效。因此,这种特别的包类型叫做 KOD 包。如果一个客户端被发送了这种不受欢迎的 KOD 包,它应该记住这个发回了拒绝访问标志的服务器。

如果从该服务器收到不止一个 KOD 包,客户端会猜想服务器上发生了流量限速的情况(或类似的)。这种情况下,客户端一般会写入本地日志,提示与该服务器的交流不太顺利,以备将来排错之用。

牢记,出于显而易见的原因,关键在于 NTP 服务器的架构应该是动态的。因此,不要给你的 NTP 配置硬编码 IP 地址是非常重要的。通过使用 DNS 域名,个别服务器断开网络时服务仍能继续进行,而 IP 地址空间也能重新分配,并且可引入简单的负载均衡(具有一定程度的弹性)。

请别忘了我们也需要考虑呈指数增长的物联网(IoT),这最终将包括数以亿万计的新装置,意味着这些设备都需要保持正确时间。硬件卖家无意(或有意)设置他们的设备只能与一个提供者的(甚至一个) NTP 服务器连接终将成为过去,这是一个非常麻烦的问题。

你可能会想象,随着买入和上线更多的硬件单元,NTP 基础设施的拥有者大概不会为相关的费用而感到高兴,因为他们正被没有实际收入所困扰。这种情形并非杞人忧天。头疼的问题多呢 -- 由于 NTP 流量导致基础架构不堪重负 -- 这在过去几年里已发生过多次。

在下面两篇文章里,我将着重于一些重要的 NTP 安全配置选项和描述服务器的搭建。


via: https://www.linux.com/learn/arrive-time-ntp-part-1-usage-overview

作者:CHRIS BINNIE 译者:XYenChi 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8456-1.html?utm_source=rss&utm_medium=rss

Linux 下网络协议分析器 Wireshark 使用基础

$
0
0

Wireshark 是 Kali 中预置的众多有价值工具中的一种。与其它工具一样,它可以被用于正面用途,同样也可以被用于不良目的。当然,本文将会介绍如何追踪你自己的网络流量来发现潜在的非正常活动。

Wireshark 相当的强大,当你第一次见到它的时候可能会被它吓到,但是它的目的始终就只有一个,那就是追踪网络流量,并且它所实现的所有选项都只为了加强它追踪流量的能力。

安装

Kali 中预置了 Wireshark 。不过,wireshark-gtk 包提供了一个更好的界面使你在使用 Wireshark 的时候会有更友好的体验。因此,在使用 Wireshark 前的第一步是安装 wireshark-gtk 这个包。

# apt install wireshark-gtk

如果你的 Kali 是从 live 介质上运行的也不需要担心,依然有效。

基础配置

在你使用 Wireshark 之前,将它设置成你使用起来最舒适的状态可能是最好的。Wireshark 提供了许多不同的布局方案和选项来配置程序的行为。尽管数量很多,但是使用起来是相当直接明确的。

从启动 Wireshark-gtk 开始。需要确定启动的是 GTK 版本的。在 Kali 中它们是被分别列出的。

Wireshark running on Kali

布局

默认情况下,Wireshark 的信息展示分为三块内容,每一块都叠在另一块上方。(LCTT 译注:这里的三部分指的是展示抓包信息的时候的那三块内容,本段配图没有展示,配图 4、5、6 的设置不是默认设置,与这里的描述不符)最上方的一块是所抓包的列表。中间的一块是包的详细信息。最下面那块中包含的是包的原始字节信息。通常来说,上面的两块中的信息比最下面的那块有用的多,但是对于资深用户来说这块内容仍然是重要信息。

每一块都是可以缩放的,可并不是每一个人都必须使用这样叠起来的布局方式。你可以在 Wireshark 的“选项Preferences”菜单中进行更改。点击“编辑Edit”菜单,最下方就是的“选项Preferences”菜单。这个选项会打开一个有更多选项的新窗口。单击侧边菜单中“用户界面User Interface”下的“布局Layout”选项。

Wireshark's layout configuration

你将会看到一些不同的布局方案。上方的图示可以让你选择不同的面板位置布局方案,下面的单选框可以让你选择不同面板中的数据内容。

下面那个标记为“Columns”的标签可以让你选择展示所抓取包的哪些信息。选择那些你需要的数据信息,或者全部展示。

工具条

对于 Wireshark 的工具条能做的设置不是太多,但是如果你想设置的话,你依然在前文中提到的“布局”菜单中的窗口管理工具下方找到一些有用的设置选项。那些能让你配置工具条和工具条中条目的选项就在窗口选项下方。

你还可以在“视图View”菜单下勾选来配置工具条的显示内容。

功能

主要的用来控制 Wireshark 抓包的控制选项基本都集中在“捕捉Capture”菜单下的“选项Options”选项中。

在开启的窗口中最上方的“捕捉Capture”部分可以让你选择 Wireshark 要监控的某个具体的网络接口。这部分可能会由于你系统的配置不同而会有相当大的不同。要记得勾选正确的选择框才能获得正确的数据。虚拟机和伴随它们一起的网络接口也同样会在这个列表里显示。同样也会有多种不同的选项对应这多种不同的网络接口。

Wireshark's capture configuration

在网络接口列表的下方是两个选项。其中一个选项是全选所有的接口。另一个选项用来选择是否开启混杂模式。这个选项可以使你的计算机监控到所选网络上的所有的计算机。(LCTT 译注:混杂模式可以在 HUB 中或监听模式的交换机接口上捕获那些由于 MAC 地址非本机而会被自动丢弃的数据包)如果你想监控你所在的整个网络,这个选项是你所需要的。

注意: 在一个不属于你或者不拥有权限的网络上使用混杂模式来监控是非法的!

在窗口下方的右侧是“显示选项Display Options”和“名称解析Name Resolution”选项块。对于“显示选项Display Options”来说,三个选项全选可能就是一个很好的选择了。当然你也可以取消选择,但是最好还是保留选择“实时更新抓包列表”。

在“名称解析Name Resolution”中你也可以设置你的偏好。这里的选项会产生附加的请求因此选得越多就会有越多的请求产生使你的抓取的包列表显得杂乱。把 MAC 解析选项选上是个好主意,那样就可以知道所使用的网络硬件的品牌了。这可以帮助你来确定你是在与哪台设备上的哪个接口进行交互。

抓包

抓包是 Wireshark 的核心功能。监控和记录特定网络上的流量就是它最初产生的目的。使用它最基本的方式来作这个抓包的工作是相当简单方便的。当然,越多的配置和选项就越可以充分利用 Wireshark 的力量。这里的介绍的关注点依然还是它最基本的记录方式。

按下那个看起来像蓝色鲨鱼鳍的新建实时抓包按钮就可以开始抓包了。(LCTT 译注:在我的 Debian 上它是绿色的)

Wireshark listing packet information

在抓包的过程中,Wireshark 会收集所有它能收集到的包的数据并且记录下来。如果没有更改过相关设置的话,在抓包的过程中你会看见不断的有新的包进入到“包列表”面板中。你可以实时的查看你认为有趣的包,或者就让 Wireshark 运行着,同时你可以做一些其它的事情。

当你完成了,按下红色的正方形“停止”按钮就可以了。现在,你可以选择是否要保存这些所抓取的数据了。要保存的话,你可以使用“文件”菜单下的“保存”或者是“另存为”选项。

读取数据

Wireshark 的目标是向你提供你所需要的所有数据。这样做时,它会在它监控的网络上收集大量的与网络包相关的数据。它使用可折叠的标签来展示这些数据,使得这些数据看起来没有那么吓人。每一个标签都对应于网络包中一部分的请求数据。

这些标签是按照从最底层到最高层一层层堆起来的。顶部标签总是包含数据包中包含的字节数据。最下方的标签可能会是多种多样的。在下图的例子中是一个 HTTP 请求,它会包含 HTTP 的信息。您遇到的大多数数据包将是 TCP 数据,它将展示在底层的标签中。

Wireshark listing HTTP packet info

每一个标签页都包含了抓取包中对应部分的相关数据。一个 HTTP 包可能会包含与请求类型相关的信息,如所使用的网络浏览器,服务器的 IP 地址,语言,编码方式等的数据。一个 TCP 包会包含服务器与客户端使用的端口信息和 TCP 三次握手过程中的标志位信息。

Wireshark listing TCP packet info

在上方的其它标签中包含了一些大多数用户都感兴趣的少量信息。其中一个标签中包含了数据包是否是通过 IPv4 或者 IPv6 传输的,以及客户端和服务器端的 IP 地址。另一个标签中包含了客户端和接入因特网的路由器或网关的设备的 MAC 地址信息。

结语

即使只使用这些基础选项与配置,你依然可以发现 Wireshark 会是一个多么强大的工具。监控你的网络流量可以帮助你识别、终止网络攻击或者提升连接速度。它也可以帮你找到问题应用。下一篇 Wireshark 指南我们将会一起探索 Wireshark 的包过滤选项。


via: https://linuxconfig.org/basic-of-network-protocol-analyzer-wireshark-on-linux

作者:Nick Congleton 译者:wcnnbdk1 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8457-1.html?utm_source=rss&utm_medium=rss

腾讯开源高性能 RPC 开发框架与微服务平台 Tars

$
0
0

Tars 是基于名字服务使用 Tars 协议的高性能 RPC 开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。

Tars 是将腾讯内部使用的微服务架构 TAF(Total Application Framework)多年的实践成果总结而成的开源项目,目前已于4 月 10 日正式对外开源。Tars 的开源协议为 BSD-3-Clause 。

作为支持多语言的高性能 RPC 开发框架和配套一体化的服务治理平台,Tars 可以帮助企业或者用户以微服务的方式快速构建稳定可靠的分布式应用,它的设计灵感来源于采取分层思想,实现开发与运营之间的分离。目前该框架在腾讯内部,已经在 160 多个业务(如手机浏览器、应用宝、手机管家、手机 QQ、手机游戏等)、1.6 多万台服务器上运行使用,基于该框架部署运行的服务节点规模达到上万个,经过了海量用户及数据量的考验。

与业界其他同类或相识的应用框架相比,Tars 具有以下优势:

  1. Tars 提供了支持多语言(C++/Java)的高性能(性能可达 40w/s)RPC 开发框架,比如业界开源的 Dubbo 只支持Java,业界开源的 Thrift、gRPC 性能没有 Tars 好;
  2. Tars 具有针对服务进行治理的运营管理平台,比如名字路由与发现、部署/发布/扩缩容、立体化监控、日志管理、配置管理等,让系统的运行状态一切尽在掌握,而业界的 Thrift、gRPC 只是 RPC 通信框架,业务在它们之上仍要做很多开发;
  3. Tars 经过多年在腾讯不同业务上的实践和发展,其成熟度和稳定性更好。

Tars 的名字来自星际穿越电影人机器人 Tars,电影中的 Tars 有着非常友好的交互方式,任何初次接触它的人都可以轻松的和它进行交流,同时能在外太空、外星等复杂地形上,超预期的高效率的完成托付的所有任务。拥有着类似设计理念的 Tars 也是一个兼顾易用性、高性能、服务治理的框架,目的是让开发更简单,聚焦业务逻辑,让运营更高效,一切尽在掌握。

历经近十年探索,Tars终于正式开源,它更适合消息调用客户端和服务端比较明确的业务场景。开源地址为:https://github.com/Tencent/Tars

关于Tars的详细技术介绍可以关注:

https://github.com/Tencent/Tars/blob/master/Introduction.md


完美阅读及发表评论,请猛击:https://linux.cn/article-8455-1.html?utm_source=rss&utm_medium=rss

在 Linux 上使用 Meld 比较文件夹

$
0
0

我们已经从一个新手的角度了解了 Meld (包括 Meld 的安装),我们也提及了一些 Meld 中级用户常用的小技巧。如果你有印象,在新手教程中,我们说过 Meld 可以比较文件和文件夹。已经讨论过怎么比较文件,今天,我们来看看 Meld 怎么比较文件夹。

需要指出的是,本教程中的所有命令和例子都是在 Ubuntu 14.04 上测试的,使用的 Meld 版本为 3.14.2。

用 Meld 比较文件夹

打开 Meld 工具,然后选择 比较文件夹Directory comparison 选项来比较两个文件夹。

Compare directories using Meld

选择你要比较的文件夹:

select the directories

然后单击比较Compare 按钮,你会看到 Meld 像图中这样分成两栏比较目录,就像文件比较一样。

Compare directories visually

分栏会树形显示这些文件夹。你可以在上图中看到 —— 区别之处,不论是新建的还是被修改过的文件 —— 都会以不同的颜色高亮显示。

根据 Meld 的官方文档可以知道,在窗口中看到的每个不同的文件或文件夹都会被突出显示。这样就很容易看出这个文件/文件夹与另一个分栏中对应位置的文件/文件夹的区别。

下表是 Meld 网站上列出的在比较文件夹时突出显示的不同字体大小/颜色/背景等代表的含义。

状态表现含义
相同 正常字体 比较的文件夹中所有文件/文件夹相同。
过滤后相同 斜体 文件夹中文件不同,但使用文本过滤器的话,文件是相同的。
修改过 蓝色粗体 比较的文件夹中这些文件不同。
新建 绿色粗体 该文件/文件夹在这个目录中存在,但其它目录中没有。
缺失 置灰文本,删除线 该文件/文件夹在这个目录中不存在,在在其它某个目录中存在。
错误 黄色背景的红色粗体 比较文件时发生错误,最常见错误原因是文件权限(例如,Meld 无法打开该文件)和文件名编码错误。

Meld 默认会列出比较文件夹中的所有内容,即使这些内容没有任何不同。当然,你也可以在工具栏中单击相同Same按钮设置 Meld 不显示这些相同的文件/文件夹 —— 单击这个按钮使其不可用。

same button

Meld compare buttons

下面是单击 相同Same 按钮使其不可用的截图:

Directory Comparison without same files

这样你会看到只显示了两个文件夹中不同的文件(新建的和修改过的)。同样,如果你单击 新建New 按钮使其不可用,那么 Meld 就只会列出修改过的文件。所以,在比较文件夹时可以通过这些按钮自定义要显示的内容。

你可以使用工具窗口显示区的上下箭头来切换选择是显示新建的文件还是修改过的文件。要打开两个文件进行分栏比较,可以双击文件,或者单击箭头旁边的 比较Compare按钮。

meld compare arrow keys

提示 1:如果你仔细观察,就会看到 Meld 窗口的左边和右边有一些小条。这些条的目的是提供“简单的用颜色区分的比较结果”。对每个不同的文件/文件夹,条上就有一个小的颜色块。你可以单击每一个这样的小块跳到它对应的文件/文件夹。

提示 2:你总可以分栏比较文件,然后以你的方式合并不同的文件,假如你想要合并所有不同的文件/文件夹(就是说你想要一个特定的文件/文件夹与另一个完全相同),那么你可以用 复制到左边Copy Left复制到右边Copy Right 按钮:

meld copy right part

比如,你可以在左边的分栏中选择一个文件或文件夹,然后单击 复制到右边Copy Right 按钮,使右边对应条目完全一样。

现在,在窗口的下拉菜单中找到 过滤Filters 按钮,它就在 相同Same新建New修改的Modified 这三个按钮下面。这里你可以选择或取消文件的类型,告知 Meld 在比较文件夹时是否显示这种类型的文件/文件夹。官方文档解释说菜单中的这个条目表示“执行文件夹比较时该类文件名不会被查看。”

该列表中条目包括备份文件,操作系统元数据,版本控制文件、二进制文件和多媒体文件。

Meld filters

前面提到的条目也可以通过这样的方式找到:浏览->文件过滤。你可以通过 编辑->首选项->文件过滤 为这个条目增加新元素(也可以删除已经存在的元素)。

Meld preferences

要新建一个过滤条件,你需要使用一组 shell 符号,下表列出了 Meld 支持的 shell 符号:

通配符匹配
* 任何字符 (例如,零个或多个字符)
? 一个字符
[abc] 所列字符中的任何一个
[!abc] 不在所列字符中的任何一个
{cat,dog} “cat” 或 “dog” 中的一个

最重要的一点是 Meld 的文件名默认大小写敏感。也就是说,Meld 认为 readme 和 ReadMe 与 README 是不一样的文件。

幸运的是,你可以关掉 Meld 的大小写敏感。只需要打开 浏览 菜单然后选择 忽略文件名大小写 Ignore Filename Case 选项。 Meld ignore filename case

结论

你是否觉得使用 Meld 比较文件夹很容易呢 —— 事实上,我认为它相当容易。只有新建一个文件过滤器会花点时间,但是这不意味着你没必要学习创建过滤器。显然,这取决于你的需求。

另外,你甚至可以用 Meld 比较三个文件夹。想要比较三个文件夹时,你可以通过单击 三向比较3-way comparison 复选框。今天,我们不介绍怎么比较三个文件夹,但它肯定会出现在后续的教程中。


via: https://www.howtoforge.com/tutorial/how-to-perform-directory-comparison-using-meld/

作者:Ansh 译者:vim-kakali 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8458-1.html?utm_source=rss&utm_medium=rss

在 PC 上尝试树莓派的 PIXEL OS

$
0
0

Try Raspberry Pi's PIXEL OS on your PC

在过去四年中,树莓派基金会非常努力地针对树莓派的硬件优化了 Debian 的移植版 Raspbian,包括创建新的教育软件、编程工具和更美观的桌面。

在(去年) 9 月份,我们发布了一个更新,介绍了树莓派新的桌面环境 PIXEL(Pi Improved Xwindows Environment,轻量级)。在圣诞节之前,我们发布了一个在 x86 PC 上运行的操作系统版本,所以现在可以将它安装在 PC、Mac 或笔记本电脑上。

Installing PIXEL

当然,像许多支持良好的 Linux 发行版一样,操作系统在旧的硬件上也能正常运行。 Raspbian 是让你几年前就丢弃的旧式 Windows 机器焕发新生的好方法。

PIXEL ISO 可从树莓派网站上下载,在 “MagPi” 杂志封面上也有赠送可启动的 Live DVD 。

Welcome to PIXEL

为了消除想要学习计算机的人们的入门障碍,我们发布了树莓派的个人电脑操作系统。它比购买一块树莓派更便宜,因为它是免费的,你可以在现有的计算机上使用它。PIXEL 是我们一直想要的 Linux 桌面,我们希望它可供所有人使用。

由 Debian 提供支持

不构建在 Debian 之上的话,Raspbian 或 x86 PIXEL 发行版就都不会存在。 Debian 拥有庞大的可以从一个 apt 仓库中获得的免费开源软件、程序、游戏和其他工具。在树莓派中,你仅限运行为 ARM 芯片编译的软件包。然而,在 PC 镜像中,你可以在机器上运行的软件包的范围更广,因为 PC 中的 Intel 芯片有更多的支持。

Debian Advanced Packaging Tool (APT) repository

PIXEL 包含什么

带有 PIXEL 的 Raspbian 和带有 PIXEL 的 Debian 都捆绑了大量的软件。Raspbian 自带:

  • Python、Java、Scratch、Sonic Pi、Mathematica*、Node-RED 和 Sense HAT 仿真器的编程环境
  • LibreOffice 办公套件
  • Chromium(包含 Flash)和 Epiphany 网络浏览器
  • Minecraft:树莓派版(包括 Python API)*
  • 各种工具和实用程序

*由于许可证限制,本列表中唯一没有包含在 x86 版本中的程序是 Mathematica 和 Minecraft。

PIXEL menu

创建一个 PIXEL Live 盘

你可以下载 PIXEL ISO 并将其写入空白 DVD 或 USB 记忆棒中。 然后,你就可以从盘中启动你的电脑,这样你可以立刻看到 PIXEL 桌面。你可以浏览网页、打开编程环境或使用办公套件,而无需在计算机上安装任何内容。完成后,只需拿出 DVD 或 USB 驱动器,关闭计算机,再次重新启动计算机时,将会像以前一样重新启动到你平常的操作系统。

在虚拟机中运行 PIXEL

另外一种尝试 PIXEL 的方法是在像 VirtualBox 这样的虚拟机中安装它。

PIXEL Virtualbox

这允许你体验镜像而不用安装它,也可以在主操作系统里面的窗口中运行它,并访问 PIXEL 中的软件和工具。这也意味着你的会话会一直存在,而不是每次重新启动时从头开始,就像使用 Live 盘一样。

在 PC 中安装 PIXEL

如果你真的准备开始,你可以擦除旧的操作系统并将 PIXEL 安装在硬盘上。如果你想使用旧的闲置的笔记本电脑,这可能是个好主意。

用于教育的 PIXEL

许多学校在所有电脑上使用 Windows,并且对它们可以安装的软件进行严格的控制。这使得教师难以使用必要的软件工具和 IDE(集成开发环境)来教授编程技能。即使在线编程计划(如 Scratch 2)也可能被过于谨慎的网络过滤器阻止。在某些情况下,安装像 Python 这样的东西根本是不可能的。树莓派硬件通过提供包含教育软件的 SD 卡引导的小型廉价计算机来解决这个问题,学生可以连接到现有 PC 的显示器、鼠标和键盘上。

然而,PIXEL Live 光盘允许教师引导到装有能立即使用的编程语言和工具的系统中,所有这些都不需要安装权限。在课程结束时,他们可以安全关闭,使计算机恢复原状。这也是 Code Clubs、CoderDojos、青年俱乐部、Raspberry Jams 等等的一个方便的解决方案。

远程 GPIO

树莓派与传统台式 PC 区别的功能之一是 GPIO 引脚(通用输入/输出)引脚的存在,它允许你将现实世界中的电子元件和附加板连接设备上,这将开放一个新的世界,如业余项目、家庭自动化、连接的设备和物联网。

GPIO Zero Python 库的一个很棒的功能是通过在 PC 上写入一些简单的代码,然后在网络上控制树莓派的 GPIO 引脚。

远程 GPIO 可以从一台树莓派连接到另一台树莓派,或者从运行任何系统的 OS 的 PC 连接到树莓派上,但是,使用 PIXEL x86 的话所有需要的软件都是开箱即用的。参见 Josh 的博文,并参考我的 gist 了解更多信息。

更多指南

MagPi 的第 53 期提供了一些试用和安装 PIXEL 的指南,包括使用带持久驱动的 Live 光盘来维护你的文件和应用程序。你可以购买一份,或免费下载 PDF 来了解更多。

(图片版权:树莓派基金会, CC BY-SA)


作者简介:

Ben Nuttall - Ben Nuttall 是一名树莓派社区管理员。他除了为树莓派基金会工作外,他还对自由软件、数学、皮划艇、GitHub、Adventure Time 和 Futurama 等感兴趣。在 Twitter @ben_nuttall 上关注 Ben。


via: https://opensource.com/article/17/1/try-raspberry-pis-pixel-os-your-pc

作者:Ben Nuttall 译者:geekpi 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8459-1.html?utm_source=rss&utm_medium=rss

如何在 CentOS 7 上安装 Elastic Stack

$
0
0

Elasticsearch 是基于 Lucene 由 Java 开发的开源搜索引擎。它提供了一个分布式、多租户的全文搜索引擎(LCTT 译注:多租户是指多租户技术,是一种软件架构技术,用来探讨与实现如何在多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。),并带有 HTTP 仪表盘的 Web 界面(Kibana)。数据会被 Elasticsearch 查询、检索,并且使用 JSON 文档方案存储。Elasticsearch 是一个可扩展的搜索引擎,可用于搜索所有类型的文本文档,包括日志文件。Elasticsearch 是 Elastic Stack 的核心,Elastic Stack 也被称为 ELK Stack。

Logstash 是用于管理事件和日志的开源工具。它为数据收集提供实时传递途径。 Logstash 将收集您的日志数据,将数据转换为 JSON 文档,并将其存储在 Elasticsearch 中。

Kibana 是 Elasticsearch 的开源数据可视化工具。Kibana 提供了一个漂亮的仪表盘 Web 界面。 你可以用它来管理和可视化来自 Elasticsearch 的数据。 它不仅美丽,而且强大。

在本教程中,我将向您展示如何在 CentOS 7 服务器上安装和配置 Elastic Stack 以监视服务器日志。 然后,我将向您展示如何在操作系统为 CentOS 7 和 Ubuntu 16 的客户端上安装 “Elastic beats”。

前提条件

  • 64 位的 CentOS 7,4 GB 内存 - elk 主控机
  • 64 位的 CentOS 7 ,1 GB 内存 - 客户端 1
  • 64 位的 Ubuntu 16 ,1 GB 内存 - 客户端 2

步骤 1 - 准备操作系统

在本教程中,我们将禁用 CentOS 7 服务器上的 SELinux。 编辑 SELinux 配置文件。

vim /etc/sysconfig/selinux

SELINUX 的值从 enforcing 改成 disabled

SELINUX=disabled

然后重启服务器:

reboot

再次登录服务器并检查 SELinux 状态。

getenforce

确保结果是 disabled

步骤 2 - 安装 Java

部署 Elastic stack 依赖于Java,Elasticsearch 需要 Java 8 版本,推荐使用 Oracle JDK 1.8 。我将从官方的 Oracle rpm 包安装 Java 8。

使用 wget 命令下载 Java 8 的 JDK。

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm"

然后使用 rpm 命令安装:

rpm -ivh jdk-8u77-linux-x64.rpm

最后,检查 java JDK 版本,确保它正常工作。

java -version

您将看到服务器的 Java 版本。

步骤 3 - 安装和配置 Elasticsearch

在此步骤中,我们将安装和配置 Elasticsearch。 从 elastic.co 网站提供的 rpm 包安装 Elasticsearch,并将其配置运行在 localhost 上(以确保该程序安全,而且不能从外部访问)。

在安装 Elasticsearch 之前,将 elastic.co 的密钥添加到服务器。

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接下来,使用 wget 下载 Elasticsearch 5.1,然后安装它。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
rpm -ivh elasticsearch-5.1.1.rpm

Elasticsearch 已经安装好了。 现在进入配置目录编辑 elasticsaerch.yml 配置文件。

cd /etc/elasticsearch/
vim elasticsearch.yml

去掉第 40 行的注释,启用 Elasticsearch 的内存锁。这将禁用 Elasticsearch 的内存交换。

bootstrap.memory_lock: true

Network 块中,取消注释 network.hosthttp.port 行。

network.host: localhost
http.port: 9200

保存文件并退出编辑器。

现在编辑 elasticsearch.service 文件的内存锁配置。

vim /usr/lib/systemd/system/elasticsearch.service

去掉第 60 行的注释,确保该值为 unlimited

MAX_LOCKED_MEMORY=unlimited

保存并退出。

Elasticsearch 配置到此结束。Elasticsearch 将在本机的 9200 端口运行,我们通过在 CentOS 服务器上启用 mlockall 来禁用内存交换。重新加载 systemd,将 Elasticsearch 置为开机启动,然后启动服务。

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

等待 Eelasticsearch 启动成功,然后检查服务器上打开的端口,确保 9200 端口的状态是 LISTEN

netstat -plntu

Check elasticsearch running on port 9200

然后检查内存锁以确保启用 mlockall,并使用以下命令检查 Elasticsearch 是否正在运行。

curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'

会看到如下结果。

Check memory lock elasticsearch and check status

步骤 4 - 安装和配置 Kibana 和 Nginx

在这一步,我们将在 Nginx Web 服务器上安装并配置 Kibana。 Kibana 监听在 localhost 上,而 Nginx 作为 Kibana 的反向代理。

wget 下载 Kibana 5.1,然后使用 rpm 命令安装:

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
rpm -ivh kibana-5.1.1-x86_64.rpm

编辑 Kibana 配置文件。

vim /etc/kibana/kibana.yml

去掉配置文件中 server.portserver.hostelasticsearch.url 这三行的注释。

server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

保存并退出。

将 Kibana 设为开机启动,并且启动 Kibana 。

sudo systemctl enable kibana
sudo systemctl start kibana

Kibana 将作为 node 应用程序运行在端口 5601 上。

netstat -plntu

Kibana running as node application on port 5601

Kibana 安装到此结束。 现在我们需要安装 Nginx 并将其配置为反向代理,以便能够从公共 IP 地址访问 Kibana。

Nginx 在 Epel 资源库中可以找到,用 yum 安装 epel-release。

yum -y install epel-release

然后安装 Nginx 和 httpd-tools 这两个包。

yum -y install nginx httpd-tools

httpd-tools 软件包包含 Web 服务器的工具,可以为 Kibana 添加 htpasswd 基础认证。

编辑 Nginx 配置文件并删除 server {} 块,这样我们可以添加一个新的虚拟主机配置。

cd /etc/nginx/
vim nginx.conf

删除 server { } 块。

Remove Server Block on Nginx configuration

保存并退出。

现在我们需要在 conf.d 目录中创建一个新的虚拟主机配置文件。 用 vim 创建新文件 kibana.conf

vim /etc/nginx/conf.d/kibana.conf

复制下面的配置。

server {
    listen 80;

    server_name elk-stack.co;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

保存并退出。

然后使用 htpasswd 命令创建一个新的基本认证文件。

sudo htpasswd -c /etc/nginx/.kibana-user admin
“输入你的密码”

测试 Nginx 配置,确保没有错误。 然后设定 Nginx 开机启动并启动 Nginx。

nginx -t
systemctl enable nginx
systemctl start nginx

Add nginx virtual host configuration for Kibana Application

步骤 5 - 安装和配置 Logstash

在此步骤中,我们将安装 Logstash,并将其配置为:从配置了 filebeat 的 logstash 客户端里集中化服务器的日志,然后过滤和转换 Syslog 数据,并将其移动到存储中心(Elasticsearch)中。

下载 Logstash 并使用 rpm 进行安装。

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
rpm -ivh logstash-5.1.1.rpm

生成新的 SSL 证书文件,以便客户端可以识别 elastic 服务端。

进入 tls 目录并编辑 openssl.cnf 文件。

cd /etc/pki/tls
vim openssl.cnf

[v3_ca] 部分添加服务器标识。

[ v3_ca ]

# Server IP Address
subjectAltName = IP: 10.0.15.10

保存并退出。

使用 openssl 命令生成证书文件。

openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt

证书文件可以在 /etc/pki/tls/certs//etc/pki/tls/private/ 目录中找到。

接下来,我们会为 Logstash 创建新的配置文件。创建一个新的 filebeat-input.conf 文件来为 filebeat 配置日志源,然后创建一个 syslog-filter.conf 配置文件来处理 syslog,再创建一个 output-elasticsearch.conf 文件来定义输出日志数据到 Elasticsearch。

转到 logstash 配置目录,并在 conf.d 子目录中创建新的配置文件。

cd /etc/logstash/
vim conf.d/filebeat-input.conf

输入配置,粘贴以下配置:

input {
  beats {
    port => 5443
    ssl => true
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

保存并退出。

创建 syslog-filter.conf 文件。

vim conf.d/syslog-filter.conf

粘贴以下配置:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

我们使用名为 grok 的过滤器插件来解析 syslog 文件。

保存并退出。

创建输出配置文件 output-elasticsearch.conf

vim conf.d/output-elasticsearch.conf

粘贴以下配置:

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

保存并退出。

最后,将 logstash 设定为开机启动并且启动服务。

sudo systemctl enable logstash
sudo systemctl start logstash

Logstash started on port 5443 with SSL Connection

步骤 6 - 在 CentOS 客户端上安装并配置 Filebeat

Beat 作为数据发送人的角色,是一种可以安装在客户端节点上的轻量级代理,将大量数据从客户机发送到 Logstash 或 Elasticsearch 服务器。有 4 种 beat,Filebeat 用于发送“日志文件”,Metricbeat 用于发送“指标”,Packetbeat 用于发送“网络数据”,Winlogbeat 用于发送 Windows 客户端的“事件日志”。

在本教程中,我将向您展示如何安装和配置 Filebeat,通过 SSL 连接将数据日志文件传输到 Logstash 服务器。

登录到客户端1的服务器上。 然后将证书文件从 elastic 服务器复制到客户端1的服务器上。

ssh root@client1IP

使用 scp 命令拷贝证书文件。

scp root@elk-serverIP:~/logstash-forwarder.crt .
输入 elk-server 的密码

创建一个新的目录,将证书移动到这个目录中。

sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

接下来,在客户端 1 服务器上导入 elastic 密钥。

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

下载 Filebeat 并且用 rpm 命令安装。

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
rpm -ivh filebeat-5.1.1-x86_64.rpm

Filebeat 已经安装好了,请转到配置目录并编辑 filebeat.yml 文件。

cd /etc/filebeat/
vim filebeat.yml

在第 21 行的路径部分,添加新的日志文件。 我们将创建两个文件,记录 ssh 活动的 /var/log/secure 文件 ,以及服务器日志 /var/log/messages

  paths:
    - /var/log/secure
    - /var/log/messages

在第 26 行添加一个新配置来定义 syslog 类型的文件。

  document-type: syslog

Filebeat 默认使用 Elasticsearch 作为输出目标。 在本教程中,我们将其更改为 Logshtash。 在 83 行和 85 行添加注释来禁用 Elasticsearch 输出。

禁用 Elasticsearch 输出:

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]

现在添加新的 logstash 输出配置。 去掉 logstash 输出配置的注释,并将所有值更改为下面配置中的值。

output.logstash:
  # The Logstash hosts
  hosts: ["10.0.15.10:5443"]
  bulk_max_size: 1024
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

保存文件并退出 vim。

将 Filebeat 设定为开机启动并启动。

sudo systemctl enable filebeat
sudo systemctl start filebeat

步骤 7 - 在 Ubuntu 客户端上安装并配置 Filebeat

使用 ssh 连接到服务器。

ssh root@ubuntu-clientIP

使用 scp 命令拷贝证书文件。

scp root@elk-serverIP:~/logstash-forwarder.crt .

创建一个新的目录,将证书移动到这个目录中。

sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

在服务器上导入 elastic 密钥。

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

下载 Filebeat .deb 包并且使用 dpkg 命令进行安装。

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.deb

转到配置目录并编辑 filebeat.yml 文件。

cd /etc/filebeat/
vim filebeat.yml

在路径配置部分添加新的日志文件路径。

  paths:
    - /var/log/auth.log
    - /var/log/syslog

设定文档类型为 syslog

  document-type: syslog

将下列几行注释掉,禁用输出到 Elasticsearch。

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]

启用 logstash 输出,去掉以下配置的注释并且按照如下所示更改值。

output.logstash:
  # The Logstash hosts
  hosts: ["10.0.15.10:5443"]
  bulk_max_size: 1024
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

保存并退出 vim。

将 Filebeat 设定为开机启动并启动。

sudo systemctl enable filebeat
sudo systemctl start filebeat

检查服务状态:

systemctl status filebeat

Filebeat is running on the client Ubuntu

步骤 8 - 测试

打开您的网络浏览器,并访问您在 Nginx 中配置的 elastic stack 域名,我的是“elk-stack.co”。 使用管理员密码登录,然后按 Enter 键登录 Kibana 仪表盘。

Login to the Kibana Dashboard with Basic Auth

创建一个新的默认索引 filebeat-*,然后点击“创建”按钮。

Create First index filebeat for Kibana

默认索引已创建。 如果 elastic stack 上有多个 beat,您可以在“星形”按钮上点击一下即可配置默认 beat。

Filebeat index as default index on Kibana Dashboard

转到 “发现” 菜单,您就可以看到 elk-client1 和 elk-client2 服务器上的所有日志文件。

Discover all Log Files from the Servers

来自 elk-client1 服务器日志中的无效 ssh 登录的 JSON 输出示例。

JSON output for Failed SSH Login

使用其他的选项,你可以使用 Kibana 仪表盘做更多的事情。

Elastic Stack 已安装在 CentOS 7 服务器上。 Filebeat 已安装在 CentOS 7 和 Ubuntu 客户端上。


via: https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-centos-7/

作者:Muhammad Arul 译者:Flowsnow 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8460-1.html?utm_source=rss&utm_medium=rss


十分钟带你看遍 DockerCon 2017

$
0
0

在刚刚过去的 4 月 20 日,Docker 公司在德克萨斯州的奥斯汀市召开了 DockerCon 2017 大会。作为当下最受关注的容器公司,我们来看看他们在 DockerCon 2017 上都说了些什么。

快速阅读

  1. Docker 公司将 Docker 项目改名为 Moby Project,Docker 这个名称保留用作其产品名
  2. Docker 公司发布 Linux Kit,这是一个快速构建、安全可移植系统的工具集
  3. Docker 企业版发布,阿里云飞天敏捷版为国内唯一具有全商业版支持能力的容器云平台
  4. 微软为 Docker 站台,为 LinuxKit 提供基于 Hyper-V 的原生支持

Docker 变成了 Moby ?

在本次 DockerCon 上最大的新闻莫过于 Solomon Hykes 宣布 Moby Project 了,这在网上引起了轩然大波,毕竟作为 Docker 这种顶级开源项目,一举一动都会引起人们的关注,更何况是更名?

简单的来说,Docker 公司出于某些考虑,决定将软件产品 “Docker” 和开源项目 “Docker” 区分开来,而 Moby Project 项目将作为开源项目的新名称。Moby 将由开源社区的开发者共同维护。而 Docker 公司会基于 Moby 构建 Docker 社区版 (CE) 和企业版 (EE) 等软件产品。Moby 和 Docker 在逻辑上就像我们所熟知的 Fedora 开源项目和 Red Hat Enterprise Linux 的关系。

经过此次更名,Docker 公司将限制 “Docker” 名称的使用范围,Docker 作为 Docker 公司的注册商标,只能被用于 Docker 的产品(比如社区版、企业版、Docker Hub、Docker Store 等)。项目开源代码的地址也将变为 https://github.com/moby/moby。

编辑点评

更名这么重大的事情在没有充分沟通的情况下进行,导致了不少开发者的不满;Docker 名称的使用范围限制对于 Docker 公司来说,是一个不错的选择,但是对于整个开源项目来说,或许是由盛转衰的开始。从 Docker 到 Moby ,大量的普通用户可能因此而丢失,开发者也可能选择不再对该项目贡献。但反过来说,Docker 公司将继续推动Docker 技术的组件化和开放性,从向 Linux 和 CNCF 基金会贡献 runc 到 containerd,到今天将 Moby Project 交给开发者社区主导。一个初创公司已经为容器开源社区做出了众多贡献,预见的是更多有创意的容器应用可以从开放的社区中孕育出来。

至于项目最终如何,我们将拭目以待。

点击链接,前往 Github 查看开发者们对于 Moby Project 更名的讨论:https://github.com/moby/moby/pull/32691

国内也有相应的讨论:对于 Docker 改名 Moby ,大家怎么看? https://www.zhihu.com/question/58805021

LinuxKit

在本次大会上,还有一个值得大家关注的重磅消息,便是 LinuxKit 的开源发布。

LinuxKit 是一个用来构建安全、可移植、精益的专门为容器服务的操作系统的工具集。它可以构建一个所有的系统服务都是基于容器的非常轻量的操作系统,这样的操作系统最小可以达到 35 MB!

LinuxKit 打包出来的新的操作系统,相比于现在的 Linux 发行版,具有更强的安全型性和易用性,其设计也使其拥有了更强的拓展性。同时,其可移植性也更高。借助 LinuxKit,可以在 Windows 上原生运行 Docker 容器。其本身虽然不是 OS ,但是其产生的产品却实实在在的成为了 CoreOS 之类面向容器的操作系统的竞品。

编辑点评

LinuxKit 作为一个工具,给用户更大的安全防护和选择自由,用户可以根据自己的需要,构建适合自己的 Linux 的最小镜像,借助这样的最小镜像, 最大程度的利用好数据中心和硬件资源。Docker 开始发觉标准的 Linux 发行版的不足。借助于 Moby 和 LinuxKit ,Docker 可以像 CoreOS 一样,掌控底层,但是又不完全和 CoreOS 的路线相同。

国外知名科技媒体 ZDNet 对于此事也有报道,有兴趣的可以去看看:http://www.zdnet.com/article/docker-linuxkit-secure-linux-containers-for-windows-macos-and-clouds/

Docker EE 的发布 和阿里飞天敏捷版支持 Docker 企业版

在 Moby 项目出现的同时,也就意味着 Docker EE (Enterprise Edition) 正式走上台前。

相比于 Docker CE(Community Edition),Docker EE 强化了其安全特性,为企业提供更加安全和可靠的容器服务,提供了一系列的安全组件和认证设施,更加满足企业的安全需求。并通过认证生态系统,笼络了大量的能够为用户提供服务的企业。

此外,Docker 的 CEO Ben 在大会上宣布 Docker 将会在阿里云平台的飞天敏捷版(Apsara Stack Agility)中落地,这是国内第一个支持 Docker 官方企业版(Enterprise Edition,EE)的容器类产品,可以部署在企业自有数据中心环境内,特别适用于企业专有云及混合云场景。

飞天敏捷版深度整合了 Docker 商业版套件和阿里的容器服务,成为国内唯一具有全商业版支持能力的容器云平台,可以部署在客户自有数据中心,包含从容器的创建到运行以及镜像的全生命周期管理。

Ben 在演讲中还提及阿里巴巴电商平台已经全面容器化,能够部署和管控超过几十万容器规模,在双 11 狂欢节稳定支撑了每秒 175000 次的订单交易。并重点并强调说阿里云不但是 Docker 的业务伙伴,同时也将为 Docker 带来大规模容器应用的实践经验。

编辑点评

Docker EE 的出现,虽然说导致了 Docker 项目的更名,但是对于 Docker 公司来说,有了盈利的可能和机会。一个能够盈利、并且活下来的公司,显然更加容易为整个世界作出更大的贡献。而阿里云成为国内首家支持 Docker EE 的产品,也为 Docker 在国内的商业应用打下了坚实的基础。

如果对 Reddit 上关于 Docker EE 和 Docker CE 的讨论有兴趣,可以看看 https://www.reddit.com/r/docker/comments/5x3os0/docker_announces_enterprise_community_editions/

微软为 Docker 站台,提供 Windows 下的 Docker 原生支持

在过去的三年中,Docker 公司和微软公司合作,开发了多款产品。

如今,Windows 开发者也可以在 Windows 基于 Hyper-V 的内核原生地运行 Linux 内核容器。

微软通过 Hyper-V 来支持了 Linux 容器在 Windows 下的运行,给开发者以更好的体验。用户可以选择使用主流的Linux 的操作系统和 Linux Kit 来运行自己需要的容器。

编辑点评

虽然微软已经不再是曾经那个叱咤风云的微软了,但依旧强大,近些年来,微软在开源社区动作频频,不断的开放、自我改变。

相信 Docker 会在微软的帮助下,能够变得更加的完善。

小结

随着 Docker 的不断演进,我们不断的看到更多新的特性被释放出来,但是同样的,随着商业化的不断进行,Docker 公司也开始走上类似红帽公司的道路。从长远的角度来说,商业化是必然的,只有不断的获取盈利,Docker 才能够不断的走下去,持续为我们提供服务。


完美阅读及发表评论,请猛击:https://linux.cn/article-8461-1.html?utm_source=rss&utm_medium=rss

pyDash:一个基于 web 的 Linux 性能监测工具

$
0
0

pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart.js 来写的。经测试,在下面这些主流 Linux 发行版上可运行:CentOS、Fedora、Ubuntu、Debian、Raspbian 以及 Pidora 。

你可以使用这个工具来监视你的 Linux 个人电脑/服务器资源,比如 CPU、内存、网络统计,包括在线用户的进程以及更多。仪表盘完全由主要的 Python 发行版本所提供的 Python 库开发,因此它的依赖关系很少,你不需要安装许多包或库来运行它。

在这篇文章中,我将展示如何安装 pyDash 来监测 Linux 服务器性能。

如何在 Linux 系统下安装 pyDash

1、首先,像下面这样安装需要的软件包 gitPython pip

-------------- 在 Debian/Ubuntu 上 --------------
$ sudo apt-get install git python-pip
-------------- 在 CentOS/RHEL 上 --------------
# yum install epel-release
# yum install git python-pip
-------------- 在 Fedora 22+ 上 --------------
# dnf install git python-pip

2、如果安装好了 git 和 Python pip,那么接下来,像下面这样安装 virtualenv,它有助于处理针对 Python 项目的依赖关系:

# pip install virtualenv
或
$ sudo pip install virtualenv

3、现在,像下面这样使用 git 命令,把 pyDash 仓库克隆到 home 目录中:

# git clone https://github.com/k3oni/pydash.git
# cd pydash

4、下一步,使用下面的 virtualenv 命令为项目创建一个叫做 pydashtest 虚拟环境:

$ virtualenv pydashtest #give a name for your virtual environment like pydashtest

Create Virtual Environment

创建虚拟环境

重要:请注意,上面的屏幕截图中,虚拟环境的 bin 目录被高亮显示,你的可能和这不一样,取决于你把 pyDash 目录克隆到什么位置。

5、创建好虚拟环境(pydashtest)以后,你需要在使用前像下面这样激活它:

$ source /home/aaronkilik/pydash/pydashtest/bin/activate

Active Virtual Environment

激活虚拟环境

从上面的屏幕截图中,你可以注意到,提示字符串 1(PS1)已经发生改变,这表明虚拟环境已经被激活,而且可以开始使用。

6、现在,安装 pydash 项目 requirements;如何你好奇的话,可以使用 cat 命令查看 requirements.txt 的内容,然后像下面所示那样进行安装:

$ cat requirements.txt
$ pip install -r requirements.txt

7、现在,进入 pydash 目录,里面包含一个名为 settings.py 的文件,也可直接运行下面的命令打开这个文件,然后把 SECRET_KEY 改为一个特定值:

$ vi pydash/settings.py

Set Secret Key

设置密匙

保存文件然后退出。

8、之后,运行下面的命令来创建一个项目数据库和安装 Django 的身份验证系统,并创建一个项目的超级用户:

$ python manage.py syncdb

根据你的情况回答下面的问题:

Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): admin
Email address: aaronkilik@gmail.com
Password: ###########
Password (again): ############

Create Project Database

创建项目数据库

9、这个时候,一切都设置好了,然后,运行下面的命令来启用 Django 开发服务器:

$ python manage.py runserver

10、接下来,打开你的 web 浏览器,输入网址:http://127.0.0.1:8000/ 进入 web 控制台登录界面,输入你在第 8 步中创建数据库和安装 Django 身份验证系统时创建的超级用户名和密码,然后点击登录。

pyDash Login Interface

pyDash 登录界面

11、登录到 pydash 主页面以后,你将会可以看到监测系统的基本信息,包括 CPU、内存和硬盘使用量以及系统平均负载。

向下滚动便可查看更多部分的信息。

pyDash Server Performance Overview

pydash 服务器性能概述

12、下一个屏幕截图显示的是一段 pydash 的跟踪界面,包括 IP 地址、互联网流量、硬盘读/写、在线用户以及 netstats 。

pyDash Network Overview

pyDash 网络概述

13、下一个 pydash 主页面的截图显示了一部分系统中被监视的活跃进程。

pyDash Active Linux Processes

pyDash 监视活跃 Linux 进程

如果想了解更多信息,请在 GitHub 上查看 pydash:https://github.com/k3oni/pydash

这就是全部内容了。在这篇文章中,我们展示了在 Linux 中如何安装 pyDash 并测试它的主要特性。如果你有什么想法,可以通过下面的反馈部分联系我们;如果你知道任何有用或类似的工具,也可以在评论中告知我们。


作者简介:

我叫 Ravi Saive,是 TecMint 的原创作者,是一个喜欢在网上分享技巧和知识的计算机极客和 Linux Guru。我的大多数服务器都运行在 Linux 开源平台上。请关注我:TwitterFacebook 以及 Google+


via: http://www.tecmint.com/pydash-a-web-based-linux-performance-monitoring-tool/

作者:Ravi Saive 译者:ucasFL 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8462-1.html?utm_source=rss&utm_medium=rss

史上最全的使用 gnome-screenshot 获取屏幕快照指南

$
0
0

在应用市场中有好几种屏幕截图工具,但其中大多数都是基于 GUI 的。如果你经常在 linux 命令行上工作,而且正在寻找一款优秀的功能丰富的基于命令行的屏幕截图工具,你可能会想尝试 gnome-screenshot。在本教程中,我将使用易于理解的例子来解释这个实用程序。

请注意,本教程中提到的所有例子已经在 Ubuntu 16.04 LTS 上测试过,测试所使用的 gonme-screenshot 版本是 3.18.0。

关于 Gnome-screenshot

Gnome-screenshot 是一款 GNOME 工具,顾名思义,它是一款用来对整个屏幕、一个特定的窗口或者用户所定义一些其他区域进行捕获的工具。该工具提供了几个其他的功能,包括对所捕获的截图的边界进行美化的功能。

Gnome-screenshot 安装

Ubuntu 系统上已经预安装了 gnome-screeshot 工具,但是如果你出于某些原因需要重新安装这款软件程序,你可以使用下面的命令来进行安装:

sudo apt-get install gnome-screeshot

一旦软件安装完成后,你可以使用下面的命令来启动它:

gnome-screenshot

Gnome-screenshot 用法/特点

在这部分,我们将讨论如何使用 gnome-screenshot ,以及它提供的所有功能。

默认情况下,使用该工具且不带任何命令行选项时,就会抓取整个屏幕。

Starting Gnome Screenshot

捕获当前活动窗口

如何你需要的话,你可以使用 -w 选项限制到只对当前活动窗口截图。

gnome-screenshot -w

Capturing current active window

窗口边框

默认情况下,这个程序会将它捕获的窗口的边框包含在内,尽管还有一个明确的命令行选项 -b 可以启用此功能(以防你在某处想使用它)。以下是如何使用这个程序的:

gnome-screenshot -wb

当然,你需要同时使用 -w 选项和 -b 选项,以便捕获的是当前活动的窗口(否则,-b 将没有作用)。

更重要的是,如果你需要的话,你也可以移除窗口的边框。可以使用 -B 选项来完成。下面是你可以如何使用这个选项的一个例子:

gnome-screenshot -wB

下面是例子的截图:

Window border

添加效果到窗口边框

在 gnome-screenshot 工具的帮助下,您还可以向窗口边框添加各种效果。这可以使用 --border-effect 选项来做到。

你可以添加这款程序所提供的任何效果,比如 shadow 效果(在窗口添加阴影)、bordor 效果(在屏幕截图周围添加矩形区域)和 vintage 效果(使截图略微淡化,着色并在其周围添加矩形区域)。

gnome-screenshot --border-effect=[EFFECT]

例如,运行下面的命令添加 shadow 效果:

gnome-screenshot –border-effect=shadow

以下是 shadow 效果的示例快照:

Adding effects to window borders

请注意,上述屏幕截图主要集中在终端的一个角落,以便您清楚地看到阴影效果。

对特定区域的截图

如何你需要,你还可以使用 gnome-screenshot 程序对你电脑屏幕的某一特定区域进行截图。这可以通过使用 -a 选项来完成。

gnome-screenshot -a

当上面的命令被运行后,你的鼠标指针将会变成 '+' 这个符号。在这种模式下,你可以按住鼠标左键移动鼠标来对某个特定区域截图。

这是一个示例截图,裁剪了我的终端窗口的一小部分。

example screenshot wherein I cropped a small area of my terminal window

在截图中包含鼠标指针

默认情况下,每当你使用这个工具截图的时候,截的图中并不会包含鼠标指针。然而,这个程序是可以让你把指针包括进去的,你可以使用 -p 命令行选项做到。

gnome-screenshot -p

这是一个示例截图:

Include mouse pointer in snapshot

延时截图

截图时你还可以引入时间延迟。要做到这,你不需要给 --delay 选项赋予一个以秒为单位的值。

gnome-screenshot –delay=[SECONDS]

例如:

gnome-screenshot --delay=5

示例截图如下:

Delay in taking screenshots

以交互模式运行这个工具

这个工具还允许你使用一个单独的 -i 选项来访问其所有功能。使用这个命令行选项,用户可以在运行这个命令时使用这个工具的一个或多个功能。

gnome-screenshot -i

示例截图如下:

Run the tool in interactive mode

你可以从上面的截图中看到,-i 选项提供了对很多功能的访问,比如截取整个屏幕、截取当前窗口、选择一个区域进行截图、延时选项和特效选项等都在交互模式里。

直接保存你的截图

如果你需要的话,你可以直接将你截的图片从终端中保存到你当前的工作目录,这意味着,在这个程序运行后,它并不要求你为截取的图片输入一个文件名。这个功能可以使用 --file 命令行选项来获取,很明显,需要给它传递一个文件名。

gnome-screenshot –file=[FILENAME]

例如:

gnome-screenshot --file=ashish

示例截图如下:

Directly save your screenshot

复制到剪切板

gnome-screenshot 也允许你把你截的图复制到剪切板。这可以通过使用 -c 命令行选项做到。

gnome-screenshot -c

Copy to clipboard

在这个模式下,例如,你可以把复制的图直接粘贴到你的任何一个图片编辑器中(比如 GIMP)。

多显示器情形下的截图

如果有多个显示器连接到你的系统,你想对某一个进行截图,那么你可以使用 --then 命令行选项。需要给这个选项一个显示器设备 ID 的值(需要被截图的显示器的 ID)。

gnome-screenshot --display=[DISPLAY]

例如:

gnome-screenshot --display=VGA-0

在上面的例子中,VAG-0 是我正试图对其进行截图的显示器的 ID。为了找到你想对其进行截图的显示器的 ID,你可以使用下面的命令:

xrandr --query

为了让你明白一些,在我的例子中这个命令产生了下面的输出:

$ xrandr --query
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
1366x768 59.8*+
1024x768 75.1 75.0 60.0 
832x624 74.6 
800x600 75.0 60.3 56.2 
640x480 75.0 60.0 
720x400 70.1 
HDMI-0 disconnected (normal left inverted right x axis y axis)

自动化屏幕截图过程

正如我们之前讨论的,-a 命令行选项可以帮助我们对屏幕的某一个特定区域进行截图。然而,我们需要用鼠标手动选取这个区域。如果你想的话,你可以使用 gnome-screenshot 来自动化完成这个过程,但是在那种情形下,你将需要使用一个名为 xdotol 的工具,它可以模仿敲打键盘甚至是点击鼠标这些事件。

例如:

(gnome-screenshot -a &); sleep 0.1 && xdotool mousemove 100 100 mousedown 1 mousemove 400 400 mouseup 1

mousemove 子命令自动把鼠标指针定位到明确的 X 坐标和 Y 坐标的位置(上面例子中是 100 和 100)。mousedown 子命令触发一个与点击执行相同操作的事件(因为我们想左击,所以我们使用了参数 1),然而 mouseup 子命令触发一个执行用户释放鼠标按钮的任务的事件。

所以总而言之,上面所示的 xdotool 命令做了一项本来需要使用鼠标手动执行对同一区域进行截图的工作。特别说明,该命令把鼠标指针定位到屏幕上坐标为 100,100 的位置并选择封闭区域,直到指针到达屏幕上坐标为 400,400 的位置。所选择的区域随之被 gnome-screenshot 捕获。

这是上述命令的截图:

screenshot of the above command

这是输出的结果:

Screenshot output

想获取更多关于 xdotool 的信息,请到这来

获取帮助

如果你有疑问或者你正面临一个与该命令行的其中某个选项有关的问题,那么你可以使用 --help、-? 或者 -h 选项来获取相关信息。

gnome-screenshot -h

总结

我推荐你至少使用一次这个程序,因为它不仅对初学者来说比较简单,而且还提供功能丰富的高级用法体验。动起手来,尝试一下吧。


via: https://www.howtoforge.com/tutorial/taking-screenshots-in-linux-using-gnome-screenshot/

作者:Himanshu Arora 译者:zhousiyu325 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8463-1.html?utm_source=rss&utm_medium=rss

极客漫画:鸭子爸爸生活中的 Java 集合

$
0
0

随着需求不断的增加,数据管理也将变得越发复杂。

队列list集合set,甚至用映射map来解决……

迟早有一天,坐在办公桌前的鸭子爸爸发现,这些只不过都是个“堆栈stack”而已~

via: https://turnoff.us/geek/java-collections/

作者:Daniel Stori 译者&点评:martin2011qi 校对&合成:GHLandy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8464-1.html?utm_source=rss&utm_medium=rss

《自由软件,自由社会》:政府推动自由软件的措施

$
0
0

Copyright © 2011–2014 自由软件基金会,此文于2011年首次发表在 http://gnu.org

本文提出了一些推动自由软件在国内发展的强力政策,并引领国内其他方面转向软件自由。

国家的使命是通过整合社会资源为人民自由谋福祉。这个使命在计算机领域的一个方面就是鼓励用户使用自由软件:代表用户自由的软件。而专有(非自由)软件则践踏了人民的自由;这是一个国家应该努力去根除的社会问题。

参见《什么是自由软件?》一文了解自由软件的定义

从国家的计算主权角度来说,国家需要坚持自由软件的主张(国家控制其计算过程)。所有用户理所应当控制自己的计算过程,但国家有代表人民对计算过程维持控制的责任。现在大多数政府活动都依赖计算过程,而对这些活动的控制则依赖于对计算过程的控制。而在任务很关键的机构里失去这种控制将会极大危害国家安全。

将国家机构转向自由软件同时也会提供额外的好处,比如节省经费和鼓励本地的软件支持行业等等。

本文中,“国家实体”指代各级政府,以及公共机构包括学校,公共—私立伙伴关系,大型国有活动比如特许公立学校,以及由国家控制或由国家特许经营或注资的“私营”企业。

教育领域

教育领域的政策非常重要,因为会影响国家的未来

  • 只能教授自由软件

    教育活动或者至少这些国立教育实体,必须只教授自由软件(因此,他们决不能引导学生使用非自由程序),并教育学生坚持使用自由软件背后的公民原因。教授非自由程序就是在教授依赖性,这与学校的使命是相悖的。

国家与公众

这些政策对个人与组织使用软件的影响也很巨大:

  • 永远不要求非自由程序

    法律和公共部门实践活动必须改革永远不能要求或施压给个人或组织使用非自由程序。他们还必须不能在通信或出版行业引入类似的规定(包括数字限制管理 Digital Restrictions Management)。

    参见反 DRM 活动网站http://defectivebydesign.org/what_is_drm以及《应避免使用(或慎用)的词语》一文中有关 DRM 的章节了解相关问题。
  • 只散播自由软件

    国家实体无论在什么时候将软件公开散播,包括网页中包含或附带的程序,必须作为自由软件散播,且必须与只运行自由软件的平台兼容。

  • 政府网站

    政府实体的网站和网络服务必须设计成用户能够只用自由软件使用,(相对专有软件——译者注)没有劣势。

  • 自由的格式和通信协议

    国家实体必须只使用自由软件广泛支持的文件格式和通信协议,特别是已经公开的规格(我们并不说“标准”,因为它应该适用于标准和非标准的接口)。例如,他们必须不能散播使用 Flash 或者非自由解码器播放的音频或视频文件,对外公布的库必须不能包含数字限制管理。

  • 解除对计算机的限制性许可证

    销售计算机必须不能要求购买一份专有软件许可证。必须通过法律来约束销售方提供给消费者购买计算机时不需要专有软件以及不需要为此付费的选项。强制付费是另一个错误,不能让我们从专有软件的不公中分散注意力,应更关注失去自由而导致的损失。虽然如此,强迫用户为其付费等于是给了特定专有软件开发者一个额外的不平等优势——让他们来决定用户的自由。国家应该防止这种情况发生。

国家计算主权

很多政策会影响到国家计算主权。国家实体必须维持对它们的计算资源的控制,而不是放弃控制而委之于私人之手。这一点适用于所有计算机,包括智能手机。

  • 迁移到自由软件

    国家实体必须迁移到自由软件,并且不能安装和继续使用非自由软件,除非临时例外。只有一个机构可以有权授予这些临时例外,且需要令人信服的理由。这个机构的目标是将这些例外必须减少到零。

  • 开发自由的 IT 解决方案

    当政府实体需要为开发计算机解决方案付费时,合同必须要求以自由软件形式交付,并且方案必须设计为可以在百分之百自由软件环境中运行和开发。所有合同都需要这条,这样如果开发商一旦不符合需求,作品就不给报酬。

  • 为自由软件选配计算机

    当政府实体购买或租借计算机时,必须在其等级中选择几乎无需专有软件即可运行的型号。政府需要为每个等级的计算机维护一个按此标准授过权的型号的列表。对于公开型号和政府采购型号,应该选择只对政府开放的型号。

  • 与厂商协商

    国家必须经常与厂商协商市场(对外销售或/和面向政府)上适合的硬件产品,在所有相关产品领域,都不能需要专有软件。

  • 与其他国家联合

    本国需邀请其他国家来和厂商一同协商适合的硬件产品。联合它们获得更多影响力。

国家计算主权之二

国家计算主权(和安全)包括控制计算机做国家的事情。这需要避免“替代软件的服务”Service as a Software Substitute——除非这类服务是运行在国家机关的同一分支机构,以及其他降低国家对计算资源控制的实用形式。因此:

 参见《服务器真正为谁服务?》一文的相关章节,了解 SaaSS。

  • 国家必须控制其计算机

    每一台国家使用的计算机必须从属于政府的同一个要使用它们的分支机构或由此机构租借,而这个政府分支机构必须不能把谁有权物理访问计算机,谁能维护(软件和硬件),或者能够安装什么软件的权力放弃给外人。如果计算机不可移动,那么计算机所在的物理空间必须是国家所有(无论是所有者或者承租人)。

对开发的影响

国家政策会影响自由和非自由软件的开发:

  • 鼓励自由

    国家需要鼓励开发者创立或完善自由软件并将其公开,比如通过减税或其他财政补贴的方式。相反,对非自由软件的开发者则没有此类财政补贴。

  • 不要鼓励非自由

    特别的,专有软件开发者不应该“捐献”软件副本给学校,并根据软件的售价申请减税优惠。专有软件在学校是不合法的。

电子垃圾

自由不应意味着产生更多电子垃圾:

  • 可替代性软件

    很多现在计算机设计为无法用自由软件替代其预装的软件。因此唯一解放它们的方式就是丢掉,而这对社会不利。

    因此,对凡是大量销售、进口或分发硬件接口保密或有意设限的,阻碍用户开发、安装或阻碍用户使用任何可替代内部由制造方升级预装软件的,无论新(即,非二手)计算机或基于计算机的产品都应该是非法的,或者至少课以重税来劝退。这特别适用于任何需要“越狱”方可在其上安装不同操作系统的设备,或包含保密接口外设的设备。

技术中立

通过本文中给出的措施,政府可以恢复对其计算过程的控制,并引导国家公民、商业和组织控制自己的计算过程。然而,很多反对意见认为这会违反技术中立的“原则”。

技术中立是指国家不应该在技术选型时强加干涉。无论这是不是有效的原则或是争议,这仅仅只涉及到技术问题。而这里提出来的措施解决的是道义、社会和政治问题,因此超出了技术中立的范畴。除非他们觉得其政府需要在主权和公民自由上保持“中立”。

参见我的文章“Technological Neutrality and Free Software” 。


完美阅读及发表评论,请猛击:https://linux.cn/article-8465-1.html?utm_source=rss&utm_medium=rss

cpustat:在 Linux 下根据运行的进程监控 CPU 使用率

$
0
0

cpustat 是 Linux 下一个强大的系统性能测量程序,它用 Go 编程语言 编写。它通过使用 “用于分析任意系统的性能的方法(USE)”,以有效的方式显示 CPU 利用率和饱和度。

它高频率对系统中运行的每个进程进行取样,然后以较低的频率汇总这些样本。例如,它能够每 200ms 测量一次每个进程,然后每 5 秒汇总这些样本,包括某些度量的最小/平均/最大值(min/avg/max)。

推荐阅读: 监控 Linux 性能的 20 个命令行工具

cpustat 能用两种方式输出数据:定时汇总的纯文本列表和每个取样的彩色滚动面板。

如何在 Linux 中安装 cpustat

为了使用 cpustat,你的 Linux 系统中必须安装有 Go 语言(GoLang),如果你还没有安装它,点击下面的链接逐步安装 GoLang:

安装完 Go 以后,输入下面的 go get 命令安装 cpustat,这个命令会将 cpustat 二进制文件安装到你的 GOBIN 变量(所指的路径):

# go get github.com/uber-common/cpustat

如何在 Linux 中使用 cpustat

安装过程完成后,如果你不是以 root 用户控制系统,像下面这样使用 sudo 命令获取 root 权限运行 cpustat,否则会出现下面显示的错误信息:

$ $GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.

注意:想要像你系统中已经安装的其它 Go 程序那样运行 cpustat,你需要把 GOBIN 变量添加到 PATH 环境变量。打开下面的链接学习如何在 Linux 中设置 PATH 变量。

cpustat 是这样工作的:在每个时间间隔查询 /proc 目录获取当前进程 ID 列表,然后:

  • 对于每个 PID,读取 /proc/pid/stat,然后计算和前一个样本的差别。
  • 如果是一个新的 PID,读取 /proc/pid/cmdline
  • 对于每个 PID,发送 netlink 消息获取 taskstat,计算和前一个样本的差别。
  • 读取 /proc/stat 获取总的系统统计信息。

根据获取所有这些统计信息所花费的时间,会调整每个休息间隔。另外,通过每次取样之间实际经过的时间,每个样本也会记录它用于测量的时间。这可用于计算 cpustat 自身的延迟。

当不带任何参数运行时,cpustat 默认会显示以下信息:样本间隔:200ms;汇总间隔:2s(10 个样本);显示前 10 个进程;用户过滤器:all;pid 过滤器:all。正如下面截图所示:

$ sudo $GOBIN/cpustat

cpustat - 监控 Linux CPU 使用

cpustat – 监控 Linux CPU 使用

在上面的输出中,之前显示的系统范围的度量字段意义如下:

  • usr - 用户模式运行时间占 CPU 百分比的 min/avg/max 值。
  • sys - 系统模式运行时间占 CPU 百分比的 min/avg/max 值。
  • nice - 用户模式低优先级运行时间占 CPU 百分比的 min/avg/max 值。
  • idle - 用户模式空闲时间占 CPU 百分比的 min/avg/max 值。
  • iowait - 等待磁盘 IO 的 min/avg/max 延迟时间。
  • prun - 处于可运行状态的 min/avg/max 进程数量(同“平均负载”一样)。
  • pblock - 被磁盘 IO 阻塞的 min/avg/max 进程数量。
  • pstat - 在本次汇总间隔里启动的进程/线程数目。

同样还是上面的输出,对于一个进程,不同列的意思分别是:

  • name - 从 /proc/pid/stat/proc/pid/cmdline 获取的进程名称。
  • pid - 进程 ID,也被用作 “tgid” (线程组 ID)。
  • min - 该 pid 的用户模式+系统模式时间的最小样本,取自 /proc/pid/stat。比率是 CPU 的百分比。
  • max - 该 pid 的用户模式+系统模式时间的最大样本,取自 /proc/pid/stat
  • usr - 在汇总期间该 pid 的平均用户模式运行时间,取自 /proc/pid/stat
  • sys - 在汇总期间该 pid 的平均系统模式运行时间,取自 /proc/pid/stat
  • nice - 表示该进程的当前 “nice” 值,取自 /proc/pid/stat。值越高表示越好(nicer)。
  • runq - 进程和它所有线程可运行但等待运行的时间,通过 netlink 取自 taskstats。比率是 CPU 的百分比。
  • iow - 进程和它所有线程被磁盘 IO 阻塞的时间,通过 netlink 取自 taskstats。比率是 CPU 的百分比,对整个汇总间隔平均。
  • swap - 进程和它所有线程等待被换入(swap in)的时间,通过 netlink 取自 taskstats。Scale 是 CPU 的百分比,对整个汇总间隔平均。
  • vcx 和 icx - 在汇总间隔期间进程和它的所有线程自动上下文切换总的次数,通过 netlink 取自 taskstats。
  • rss - 从 /proc/pid/stat 获取的当前 RSS 值。它是指该进程正在使用的内存数量。
  • ctime - 在汇总间隔期间等待子进程退出的用户模式+系统模式 CPU 时间总和,取自 /proc/pid/stat。 注意长时间运行的子进程可能导致混淆这个值,因为只有在子进程退出后才会报告时间。但是,这对于计算高频 cron 任务以及 CPU 时间经常被多个子进程使用的健康检查非常有帮助。
  • thrd - 汇总间隔最后线程的数目,取自 /proc/pid/stat
  • sam - 在这个汇总间隔期间该进程的样本数目。最近启动或退出的进程可能看起来比汇总间隔的样本数目少。

下面的命令显示了系统中运行的前 10 个 root 用户进程:

$ sudo $GOBIN/cpustat -u root

查找 root 用户正在运行的进程

查找 root 用户正在运行的进程

要想用更好看的终端模式显示输出,像下面这样用 -t 选项:

$ sudo $GOBIN/cpustat -u root -t

root 用户正在运行的进程

root 用户正在运行的进程

要查看前 x 个进程(默认是 10),你可以使用 -n 选项,下面的命令显示了系统中 正在运行的前 20 个进程

$ sudo $GOBIN/cpustat -n 20

你也可以像下面这样使用 -cpuprofile 选项将 CPU 信息写到文件,然后用 cat 命令查看文件:

$ sudo $GOBIN/cpustat -cpuprofile cpuprof.txt
$ cat cpuprof.txt

要显示帮助信息,像下面这样使用 -h 选项:

$ sudo $GOBIN/cpustat -h

可以从 cpustat 的 Github 仓库:https://github.com/uber-common/cpustat 查阅其它资料。

就是这些!在这篇文章中,我们向你展示了如何安装和使用 cpustat,Linux 下的一个有用的系统性能测量工具。通过下面的评论框和我们分享你的想法吧。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S(Free and Open-Source Software) 爱好者,一个 Linux 系统管理员、web 开发员,现在也是 TecMint 的内容创建者,他喜欢和电脑一起工作,他相信知识共享。


via: http://www.tecmint.com/cpustat-monitors-cpu-utilization-by-processes-in-linux/

作者:Aaron Kili 译者:ictlyh 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8466-1.html?utm_source=rss&utm_medium=rss

如何用 bash-support 插件将 Vim 编辑器打造成编写 Bash 脚本的 IDE

$
0
0

IDE(集成开发环境)就是这样一个软件,它为了最大化程序员生产效率,提供了很多编程所需的设施和组件。 IDE 将所有开发工作集中到一个程序中,使得程序员可以编写、修改、编译、部署以及调试程序。

在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个编写 Bash 脚本的 IDE。

什么是 bash-support.vim 插件?

bash-support 是一个高度定制化的 vim 插件,它允许你插入:文件头、补全语句、注释、函数、以及代码块。它也使你可以进行语法检查、使脚本可执行、一键启动调试器;而完成所有的这些而不需要关闭编辑器。

它使用快捷键(映射),通过有组织地、一致的文件内容编写/插入,使得 bash 脚本编程变得有趣和愉快。

插件当前版本是 4.3,4.0 版本 重写了之前的 3.12.1 版本,4.0 及之后的版本基于一个全新的、更强大的、和之前版本模板语法不同的模板系统。

如何在 Linux 中安装 Bash-support 插件

用下面的命令下载最新版本的 bash-support 插件:

$ cd Downloads
$ curl http://www.vim.org/scripts/download_script.php?src_id=24452 >bash-support.zip

按照如下步骤安装;在你的主目录创建 .vim 目录(如果它不存在的话),进入该目录并提取 bash-support.zip 内容:

$ mkdir ~/.vim
$ cd .vim
$ unzip ~/Downloads/bash-support.zip

下一步,在 .vimrc 文件中激活它:

$ vi ~/.vimrc

并插入下面一行:

filetype plug-in on
set number   # 可选,增加这行以在 vim 中显示行号

如何在 Vim 编辑器中使用 Bash-support 插件

为了简化使用,通常使用的结构和特定操作可以分别通过键映射来插入/执行。 ~/.vim/doc/bashsupport.txt 和 ~/.vim/bash-support/doc/bash-hotkeys.pdf 或者 ~/.vim/bash-support/doc/bash-hotkeys.tex 文件中介绍了映射。

重要:

  1. 所有映射(\+字符 组合)都是针对特定文件类型的:为了避免和其它插件的映射冲突,它们只适用于 sh 文件。
  2. 使用键映射的时候打字速度也有关系,引导符 \ 和后面字符的组合要在特定短时间内才能识别出来(很可能少于 3 秒 - 基于假设)。

下面我们会介绍和学习使用这个插件一些显著的功能:

如何为新脚本自动生成文件头

看下面的示例文件头,为了要在你所有的新脚本中自动创建该文件头,请按照以下步骤操作。

脚本示例文件头选项

脚本示例文件头选项

首先设置你的个人信息(作者名称、作者参考、组织、公司等)。在一个 Bash 缓冲区(像下面这样打开一个测试脚本)中使用映射 \ntw 启动模板设置向导。

选中选项 1 设置个性化文件,然后按回车键。

$ vi test.sh

在脚本文件中设置个性化信息

在脚本文件中设置个性化信息

之后,再次输入回车键。然后再一次选中选项 1 设置个性化文件的路径并输入回车。

设置个性化文件路径

设置个性化文件路径

设置向导会把目标文件 .vim/bash-support/rc/personal.templates 拷贝到 .vim/templates/personal.templates,打开并编辑它,在这里你可以输入你的信息。

i 键像截图那样在单引号中插入合适的值。

在脚本文件头添加信息

在脚本文件头添加信息

一旦你设置了正确的值,输入 :wq 保存并退出文件。关闭 Bash 测试脚本,打开另一个脚本来测试新的配置。现在文件头中应该有和下面截图类似的你的个人信息:

$ vi test2.sh

自动添加文件头到脚本

自动添加文件头到脚本

添加 Bash-support 插件帮助信息

为此,在 Vim 命令行输入下面的命令并按回车键,它会创建 .vim/doc/tags 文件:

:helptags $HOME/.vim/doc/

在 Vi 编辑器添加插件帮助

在 Vi 编辑器添加插件帮助

如何在 Shell 脚本中插入注释

要插入一个块注释,在普通模式下输入 \cfr

添加注释到脚本

添加注释到脚本

如何在 Shell 脚本中插入语句

下面是一些用于插入语句的键映射(n – 普通模式, i – 插入模式,v 可视模式):

  1. \sc – case in … esac (n, i)
  2. \sei – elif then (n, i)
  3. \sf – for in do done (n, i, v)
  4. \sfo – for ((…)) do done (n, i, v)
  5. \si – if then fi (n, i, v)
  6. \sie – if then else fi (n, i, v)
  7. \ss – select in do done (n, i, v)
  8. \su – until do done (n, i, v)
  9. \sw – while do done (n, i, v)
  10. \sfu – function (n, i, v)
  11. \se – echo -e "…" (n, i, v)
  12. \sp – printf "…" (n, i, v)
  13. \sa – 数组元素, ${.[.]} (n, i, v) 和其它更多的数组功能。

插入一个函数和函数头

输入 \sfu 添加一个新的空函数,然后添加函数名并按回车键创建它。之后,添加你的函数代码。

在脚本中插入新函数

在脚本中插入新函数

为了给上面的函数创建函数头,输入 \cfu,输入函数名称,按回车键并填入合适的值(名称、介绍、参数、返回值):

在脚本中创建函数头

在脚本中创建函数头

更多关于添加 Bash 语句的例子

下面是一个使用 \si 插入一条 if 语句的例子:

在脚本中插入语句

在脚本中插入语句

下面的例子显示使用 \se 添加一条 echo 语句:

在脚本中添加 echo 语句

在脚本中添加 echo 语句

如何在 Vi 编辑器中使用运行操作

下面是一些运行操作键映射的列表:

  1. \rr – 更新文件,运行脚本(n, i)
  2. \ra – 设置脚本命令行参数 (n, i)
  3. \rc – 更新文件,检查语法 (n, i)
  4. \rco – 语法检查选项 (n, i)
  5. \rd – 启动调试器(n, i)
  6. \re – 使脚本可/不可执行(*) (n, i)

使脚本可执行

编写完脚本后,保存它然后输入 \re 和回车键使它可执行。

使脚本可执行

使脚本可执行

如何在 Bash 脚本中使用预定义代码片段

预定义代码片段是为了特定目的包含了已写好代码的文件。为了添加代码段,输入 \nr 和 \nw 读/写预定义代码段。输入下面的命令列出默认的代码段:

$ .vim/bash-support/codesnippets/

代码段列表

代码段列表

为了使用代码段,例如 free-software-comment,输入 \nr 并使用自动补全功能选择它的名称,然后输入回车键:

添加代码段到脚本

添加代码段到脚本

创建自定义预定义代码段

可以在  ~/.vim/bash-support/codesnippets/ 目录下编写你自己的代码段。另外,你还可以从你正常的脚本代码中创建你自己的代码段:

  1. 选择你想作为代码段的部分代码,然后输入  \nw 并给它一个相近的文件名。
  2. 要读入它,只需要输入  \nr 然后使用文件名就可以添加你自定义的代码段。

在当前光标处查看内建和命令帮助

要显示帮助,在普通模式下输入:

  1. \hh – 内建帮助
  2. \hm – 命令帮助

查看内建命令帮助

查看内建命令帮助

更多参考资料,可以查看文件:

~/.vim/doc/bashsupport.txt  #在线文档的副本
~/.vim/doc/tags

就是这些啦,在这篇文章中,我们介绍了在 Linux 中使用 Bash-support 插件安装和配置 Vim 为一个 Bash-IDE 的步骤。快去发现这个插件其它令人兴奋的功能吧,一定要在评论中和我们分享哦。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者、Linux 系统管理员、网络开发人员,现在也是 TecMint 的内容创作者,她喜欢和电脑一起工作,坚信共享知识。


via: http://www.tecmint.com/use-vim-as-bash-ide-using-bash-support-in-linux/

作者:Aaron Kili 译者:ictlyh 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8467-1.html?utm_source=rss&utm_medium=rss


LCBot:Linux 中国开源的微信群管理机器人

$
0
0

Linux 中国一直以来都在运营着一些微信群,帮助大家找到组织,和有共同爱好的朋友一起讨论关于 Linux 、运维 、开发等等。但是长期以来,受限制于微信群二维码仅能在群成员少于 100 人时使用,超过 100 人就需要微信群管理员手动拉人,对管理员们造成了很大的困扰。同时,由于群里有很多人,平时管理员们也有自己的工作,导致无法让用户获得更好的体验。

出于解决上述两个问题的初衷,我们基于 @youfou 开源的 wxpy 库开发了微信机器人,来协助我们的管理员处理微信群的管理问题。

现在,我们的微信机器人已经正式接管了 Linux 中国的所有微信群管理,所以,在这里,我隆重为大家介绍这款机器人 —— LCBot

LCBot 是由 Linux 中国旗下翻译组 LCTT 的开发团队开发的一个为 Linux 中国服务的微信机器人,主要为 Linux 中国下的微信群做管理、维护等工作。

可以说,有了微信机器人,微信群的运营和管理会更加方便,目前我们已经支持的功能有:

  • 根据关键字自动发送加群邀请
  • 接受若干指定的管理员的指令踢出某些群成员

已经排期计划的功能:

  • 根据设定的规则,自动踢人功能(如刷图、长期潜水、红包小偷等)
  • 微信群将满时自动创建分群,自动分流新入群成员
  • 自动创建主题群
  • 自动创建临时群,如果不能达成长久存在条件,自动解散
  • 自动分享公众号推送内容
  • 被踢用户加入黑名单,视情况分别处于不同处罚:一次性踢出、永久踢出、全部群永久踢出
  • ……

开源

技术的红利不止我们需要享受,在这里我们也将这款产品介绍给您,希望 LCBot 可以帮助您更好的运营您的微信群!LCBot 的开源代码在: https://github.com/LCTT/LCBot ,欢迎大家拿去使用和提交 issue

在此,我们要感谢 @youfou 开源了好用的 wxpy 库!感谢 @youfou 在项目开发中对我们的支持!

如果您在使用后,觉得非常好用,不妨来给我们点个 Star ,支持我们的项目更好的发展。

体验

请扫描如下微信二维码,将我们的微信机器人“小二 » Linux中国”(微信号“linux_cn”)添加为好友:

验证信息输入下述关键字,或给机器人发送如下关键字,即可获得加群邀请。

已支持关键词

关键词对应群关键词对应群
 运维  Linux 中国 ◆ 运维群 DBA Linux 中国 ◆ DBA交流群
开发 Linux 中国 ◆ 开发群 PHP Linux 中国 ◆ PHP 交流群
云计算 Linux 中国 ◆ 云计算群 Golang Linux 中国 ◆ Golang 交流群
学生 Linux 中国 ◆ 学生群 Docker Linux 中国 ◆ Docker 交流群
安全 Linux 中国 ◆ 网络安全群  LFS Linux 中国 ◆ LFS 交流群
机器人 Linux 中国 ◆ 微信机器人群    
嵌入式 Linux ◆ 嵌入式群    
运维密码 “运维密码” 用户体验群    

效果

和机器人对话

参与项目开发

目前我们的项目正在不断的迭代中,欢迎参与项目开发,提交 issue、 pull request 。

欢迎大家在 issue 中提交合理的需求,我们将排期开发!

如果您在使用中有问题,也欢迎你加入“Linux 中国 ◆ 微信机器人群”,参与到我们的讨论中来。

 


完美阅读及发表评论,请猛击:https://linux.cn/article-8468-1.html?utm_source=rss&utm_medium=rss

极客漫画:让高等生命都迷茫的 Erlang

eval 之源

$
0
0

(LCTT 译注:本文标题 “The root of all eval” 影射著名歌曲“The root of all evil”(万恶之源))

唉,eval 这个函数让我爱恨交织,而且多半是后者居多。

$ perl -E'my $program = q[say "OH HAI"]; eval $program'
OH HAI

eval 函数在 Perl 6 中被重命名为 EVAL 时,我感到有点震惊(这要追溯到 2013 年,在这里讨论规范之后)。我一直没有从内心接受这样这样的做法。虽然这是个很好的意见,但是在这个意见上我似乎或多或少是孤独的。

理由是“这个函数真的很奇怪,所以我们应该用大写标记”。就像我们用 BEGIN 和其他 phaser 一样。使用 BEGIN 和其他 phaser,鼓励使用大写,这点我是同意的。phaser 能将程序“脱离正常控制流”。 但是 eval 函数并不能。(LCTT 译注: 在 Perl 6 当中,phaser 是在一个特定的执行阶段中调用的代码块。)

其他大写的地方像是 .WHAT 这样的东西,它看起来像属性,但是会在编译时将代码变成完全不同的东西。因为这发生在常规情况之外,因此大写甚至是被鼓励的。

eval 归根到底是另一个函数。是的,这是一个潜在存在大量副作用的函数。但是那么多的标准函数都有大量的副作用。(举几个例子:shell、 die、 exit)你没看到有人呼吁将它们大写。

我猜有人会争论说 eval 是非常特别的,因为它以正常函数所没有的方式钩到编译器和运行时里面。(这也是 TimToady 在将该函数重命名的提交中的提交消息中解释的。)这是一个来自实现细节的争论,然而这并不令人满意。这也同样适用与刚才提到的那些小写函数。

雪上加霜的是,更名后 EVAL 也更难于使用:

$ perl6 -e'my $program = q[say "OH HAI"]; EVAL $program'
===SORRY!=== Error while compiling -e
EVAL is a very dangerous function!!! (use the MONKEY-SEE-NO-EVAL pragma to override this error,
but only if you're VERY sure your data contains no injection attacks)
at -e:1
------> program = q[say "OH HAI"]; EVAL $program⏏<EOL>

$ perl6 -e'use MONKEY-SEE-NO-EVAL; my $program = q[say "OH HAI"]; EVAL $program'
OH HAI

首先,注入攻击是一个真实的问题,并不是一个笑话。我们应该互相教育对方和新手。

其次,这个错误消息("EVAL is a very dangerous function!!!")完全是恐吓多于帮助。我觉得当我们向人们解释代码注入的危险时,我们需要冷静并且切合实际,而不是用三个感叹号。这个错误信息对已经知道什么是注入攻击的人来说是有意义的,对于那些不了解这种风险的人员,它没有提供任何提示或线索。

(Perl 6 社区并不是唯一对 eval 歇斯底里的,昨天我偶然发现了一个 StackOverflow 主题,关于如何将一个有类型名称的字符串转换为 JavaScript 中的相应构造函数,一些人不幸地提出了用 eval,而其他人立即集结起来指出这是多么不负责任,就像膝跳反射那样——“因为 eval 是坏的”)。

第三,“MOKNEY-SEE-NO-EVAL”。拜托,我们能不能不要这样……汗,启用一个核弹级的函数时,就像是猴子般的随机引用和轻率的尝试,我奇怪地发现启用 EVAL 函数的是一个称为 NO-EVAL 的东西。这并不符合“最少惊喜Least Surprise”原则。

不管怎样,有一天,我意识到我可以同时解决全大写名字问题和该指令的必要问题:

$ perl6 -e'my &eval = &EVAL; my $program = q[say "OH HAI"]; eval $program'
OH HAI

我很高兴我能想到这点子并记录下来。显然我们把它改回了旧名字,这个非常危险的功能(!!!)就又好了。 耶!


via: http://strangelyconsistent.org/blog/the-root-of-all-eval

作者:Carl Mäsak 译者:geekpi 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8470-1.html?utm_source=rss&utm_medium=rss

命令行的生活是如此的 F**K

$
0
0

你是不是经常在终端敲错命令,其实这都是因为该死的终端不配合,不能领会你的意思。

每当这个时候,甚至当你一再敲错到时候,你的内心肯定是崩溃的,一定在默念“……”。

而现在,是让你的终端觉悟的时候了!

有位名为 @liamosaur 的哥们就忍不住对自己的终端发出了愤怒的吼声,并付诸实践:

受此启发, 一位名为 Vladimir Iakovlev 程序员对这个该死的终端发出了致命一击!他以及他的 90 位愤怒的小伙伴们打造出了一个名为 “thefuck” 的神器!

当你的终端没有按你想象的输入命令时,请 fuck 它!

当你的终端没有按你想象的以 sudo 执行命令时,请 fuck 它!

当你的的终端不知道填上显而易见的参数时,请 fuck 它!

当你输入错误的命令时:

➜ puthon
No command 'puthon' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
 Command 'python' from package 'python3' (main)
zsh: command not found: puthon

➜ fuck
python [enter/↑/↓/ctrl+c]
Python 3.4.2 (default, Oct  8 2014, 13:08:17)
...

当你忘记输入参数时:

➜ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

➜ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...

当你输入错误的参数时:

➜ git brnch
git: 'brnch' is not a git command. See 'git --help'.

Did you mean this?
    branch

➜ fuck
git branch [enter/↑/↓/ctrl+c]
* master

当你忘记输入 sudo 时:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...

如果生活是如此的不如意,你可以不断的“教诲”它:

➜ aptget install vim
No command 'aptget' found, did you mean:
 Command 'apt-get' from package 'apt' (main)
zsh: command not found: aptget
➜ fuck
aot-get install vim [enter/ctrl-c]
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg), are you root?

还需要权限?再来!

➜ fuck
sudo apt-get install vim [enter/ctrl-c]
[sudo] password for nvbn:
Reading package lists... Done
Building dependency tree... 0%
... ...

虐我千百遍 我待如初恋

好了,我想你肯定也想拥有这样的神器,请如此这般……

我要这个神器!

环境需求

首先,你需要这些:

  • python (2.7+ or 3.3+)
  • pip
  • python-dev

安装

然后,在不同的操作系统上(没错,有 Python 的地方就行):

在 Ubuntu 上可以通过 apt 安装:

sudo apt update
sudo apt install python3-dev python3-pip
pip3 install --user thefuck

OS X 上使用 Homebrew 来安装:

brew install thefuck

其它的系统上,只要你有 pip 就行:

pip install --user thefuck

更多的 Linux 发行版,可以看这里

设置别名

上述安装的软件包名字是:“thefuck”——别问我为啥不能直接叫 “fuck”。所以,你可以设置个别名:

Bash

将下述行加入到 .bashrc 或 .bash_profile (用于 OSX):

eval "$(thefuck --alias)"

ZSH

将下述行加入到 .zshrc:

eval "$(thefuck --alias)"

其它的 shell ,包括 powershell,可以参考这里

当然,我觉得我更喜欢给它起个别名叫 “kao”。

要让别名立刻生效,你需要用 source 命令,如:

source ~/.bashrc
或 
source ~/.zshrc

它是怎么让我念头通达的?

thefuck 这个软件包包含了上百个匹配规则,专门用来修改你的那些错误,贴心地将它们修改成应该的样子!

具体有哪些规则,你可以看看这里,或者试试就知道了。

当然,如果你经常犯一些独特的错误,你也可以建立自己的规则,而且不妨提交拉取请求给这个项目,找到和你一样独特的小伙伴们。

还等什么?赶快去啊!

(本文中的例子和图片来自该项目。)


完美阅读及发表评论,请猛击:https://linux.cn/article-8471-1.html?utm_source=rss&utm_medium=rss

如何在树莓派中安装 VoIP 系统:Asterisk

$
0
0

你是否在为小型企业或家庭办公室寻找电话系统?

你是否在为小型企业或家庭办公室寻找电话系统?我一直对可扩展 VoIP(Voice over IP)解决方案感兴趣,后来我在树莓派上找到 Asterisk 的一个实现。

我的好奇心被激起了,我决心尝试一下,所以我从 Asterisk 官网下载了它(RasPBX),然后使用我的树莓派 3 构建服务器。

准备开始

首先,我将下载的镜像刻录到 MicroSD 卡上。建议的最小值是 4 GB。将镜像传输到 MicroSD 卡并插到树莓派上的相应插槽中后,我将网线连接到树莓派和家庭路由器上的以太网端口中。

更多关于树莓派的内容:

接下来,我在 Linux 上打开一个终端,并输入 ssh root@192.168.1.8,这是我的服务器的 IP 地址。我被提示以 root 用户身份登录到 RasPBX 上。默认密码是 raspberry。 (出于安全考虑,如果你打算再多试试,请务必更改默认密码。)

当我登录到了 RasPBX 上的 shell 后,接下来我需要准备配置了。根据网站上提供的文档,我在 shell 下输入 regen-hostkeys 来创建新的主机密钥。然后输入 configure-timezone 来配置服务器的时区。我通过在提示符下输入 dpkg-reconfigure locales 来配置区域设置。我也安装了 Fail2Ban 来保障服务器的安全性。

现在我准备测试我的配置。

测试

我从 RasPBX 的 shell 中登出,然后打开浏览器并输入我的服务器的 IP 地址。将服务器 IP 地址加载到浏览器中,我看到了一个可爱的登录页面。

FreePBX 提供了一个非常好的基于 Web 的开源图形用户界面,我用它来控制和配置 Asterisk(可在 GitHub 上找到)。(FreePBX 是 GPL 许可的)。我用它来完成其余的配置。FreePBX 的默认登录账号为用户名:admin; 密码:admin

FreePBX_Login_Screen

登录之后,我进入位于显示屏左上方的应用菜单Application Menu。点击菜单链接并选择了第二个选项,即 “应用”Applications,接着选择了第四个选项,“分机”Extensions。从那里我选择创建一个  New Chan_Sip 分机。

我使用密码配置了一个 sip 分机用户。密码是自动生成的,也可以选择创建自己的密码。

现在我有了一个完整的分机,我急于尝试我的新的 VoIP 服务器。我下载并安装了 Yate 客户端,这是在构建服务器的过程中发现的。安装 Yate 之后,我想测试与服务器的连接。我发现我可以使用 Yate 连接到服务器并输入 *43 进行回声测试。当我听到客户端指示时,我感到很激动。

我决定创建另外一个 sip 分机,这样我就可以测试系统的语音信箱功能。 在完成后,我使用 Yate 客户端来呼叫这个分机,并留下了简短的语音留言。然后再次使用 Yate 呼叫该分机并输入 *97 来检索语音留言。然后我想看看我是否可以使用我的新服务器来呼叫外线。返回到菜单,选择 “连接”Connectivity 选项,并添加了 Google Voice 号码。

Google_Voice_Connectivity

接着我返回到 “连接” 菜单,并将 Google Voice 添加到出站路由中。

Google_Voice_outbound_route

完成一个呼叫

回到 Yate 客户端,我呼叫了一个外线并成功完成了这个呼叫。

我相信这个特定的 VoIP 解决方案可以轻松地为一个小型办公室工作。根据 RasPBX 网站的常见问题部分,典型的树莓派系统可以在树莓派 1 上支持多达 10 个并发呼叫。

Asterisk 有很多细微差别的功能,FreePBX 则可以很容易地利用它们。

关于树莓派上的 Asterisk 的更多信息,请参考他们的博客。你可以在他们的网站上找到有关 FreePBX 源代码的其他信息。

(题图:Pixabay,CC0)


作者简介:

Don Watkins - 教育家、教育技术专家、企业家、开源倡导者。教育心理学硕士、教育领导硕士、Linux 系统管理员、CCNA、使用 Virtual Box 虚拟化。关注我 @Don_Watkins。


via: https://opensource.com/article/17/4/asterisk-raspberry-pi-3

作者:Don Watkins 译者:geekpi 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8472-1.html?utm_source=rss&utm_medium=rss

Viewing all 9060 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>