Skip to content Skip to main navigation Skip to footer

Linux

Linux:基于容器的自动构建:Docker在美团的应用

自动构建系统是从美团的自动部署系统发展出来的一个新功能。每当开发人员提交代码到仓库后,系统会自动根据开发人员定制的构建配置,启动新的Docker容器,在其中对源代码进行构建(build),包括编译(如Java、C++和Go)、预处理(如JavaScript和CSS)、压缩(如图片)等操作,生成最终需要上线的程序包。

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

(题图来自:tutum.co)

背景和问题

美团的代码自动部署系统承载着美团所有业务的代码上线工作。代码部署系统一开始基于简单的Bash脚本,从一个中央主机上通过Rsync和SSH进行文件传输和命令执行。

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图1  代码部署系统架构图

代码发布系统经过多番演进,增加了很多功能,但原来的中心式架构仍然保留了下来,见图1。发布者通过Web界面或者REST API控制中控机,中控机负责从Git服务拉取代码,构建应用程序包,然后通过Rsync上传程序包到应用集群,并用SSH执行远程命令。

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图2  过去15个月的发布次数

自动部署系统为美团业务的快速发展提供了有力的支撑。由于我们采用了开发人员自助上线的方式,发布操作频繁,工作日每日上线达上千次。图2是过去15个月每个月的发布次数。为了持续优化发布速度,给发布人员提供良好的体验,我们把单次发布平均时间作为发布系统的一项重要的KPI。

然而,随着美团业务的迅速扩张,服务增多,发布应用数目也增多,中心化的架构的问题也凸显了出来。

  • 问题1:资源竞争多个构建任务同时进行,竞争中控机的资源,影响发布速度。有一次一个应用受到同时进行的某Java类应用发布的影响,通常两分钟的发布变成了十多分钟,严重影响发布体验。如果出现事故需要回滚,就是更严重的问题了。
  • 问题2:环境冲突不同应用的构建依赖环境在一台发布机上,需要考虑环境冲突和隔离的问题。例如,Java 1.6/1.7共存,应用需要通过JAVA_HOME变量指定使用的Java版本,Maven 2/3也存在同样的问题。npm的global包也需要兼容多个应用的构建。
  • 问题3:安全隐患应用的构建脚本运行在公共发布机上,脚本的Bug可能会影响到发布机的正常运行。例如某次一个构建脚本里面的sudo service nginx reload命令,本应是在应用服务器上执行的,但开发人员错误配置到了在发布机上执行的构建脚本里面。

解决方案

解决上述三个问题,我们首先想到的方案自然是重构为多台中控机的可横向扩展的方式。但由于某些应用的特殊性,改动比较麻烦,所以开始并没有走这个方向(现在已实现多中控机)。

那么另外一个思路:能不能把构建过程从中控机分离出来?这个思路受到了Travis CI(https://travis-ci.org)的启发。我们借鉴Travis CI,在代码提交时自动在一个新的环境中触发应用的构建。

因此,我们的解决方案可以概括为如下三点:

  • 把构建过程放到Docker容器;
  • 提交代码时自动触发构建;
  • 发布时直接使用构建好的应用包。

使用前配置如下:

  • 在发布系统配置发布项(build.yml);
  • 在Stash配置自动构建服务的URL;
  • 在私有Docker registry上传定制镜像(可选)。

使用过程比较简单,主要有如下几个步骤:

  1. 开发人员提交代码到Stash;
  2. 触发自动构建;
  3. 自动构建根据配置生成任务;
  4. 在Docker服务器上启动容器完成构建;
  5. 将构建好的包上传到美团云对象存储服务(MSS);
  6. 发布时从MSS拉取软件包并发布。 

每次提交代码时会触发自动构建API。构建任务放进队列里,任务在Docker服务器执行。当发布时就不用再去编译,直接拉取软件包进行发布。从图6、图7两幅图中可以看到在发布过程中直接使用了已自动构建好的文件进行部署。

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图3  自动构建的配置

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图4  发布系统的配置界面

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图5  自动构建架构图

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图6  自动构建的日志

Linux:基于容器的自动构建:Docker在美团的应用
Linux:基于容器的自动构建:Docker在美团的应用

图7  嵌入了自动构建日志的发布日志

为什么没有用虚拟机?

美团的虚拟化比较彻底,自动构建也可以用虚拟机而非容器实现。但虚拟机都和业务相关,会长时间保留。其次,虚拟机和CMDB深度结合,创建后会上报基本信息,部署Agent,配置监控项等。此外,虚拟机的创建是比较慢的。综合考虑以上几点,我们使用了Docker而不是虚拟机作为自动构建的基本单元。

效果和收益

基于Docker容器的自动构建很好地解决了之前提到的三个问题:资源竞争、环境冲突和安全隐患。构建任务移出发布机,构建用Docker服务器可横向扩展,解决了资源竞争问题。每个构建都是独立的镜像,环境冲突问题不复存在。构建脚本运行在独立于发布机的Docker服务器上,对发布机造成的安全隐患自然就消除了。

除解决了以上三个问题外,自动构建还显著改善了发布速度。经统计,自动构建任务的平均执行时间是197s,而使用自动构建应用的平均发布时间是99s。如果不使用自动构建,那么这些应用的发布时间就是197s + 99s,大约是三百秒。可以看到,自动构建把应用的发布时间缩短了三分之二。

总结

自动构建是美团对Docker的首次应用。这个应用不是为了用Docker而用Docker的,而是在解决代码部署系统中的问题时,利用Docker很好地解决了我们遇到的问题。该应用只利用了Docker最核心的容器功能,并没有使用Docker集群管理、调度、自动扩容等高级的功能。自动构建的场景非常适合使用Docker。希望本文能够对计划开始使用Docker的公司有所启发。 

作者介绍:潘永之,美团云运维开发技术负责人。2012年加入美团,所在的团队首次在美团的生产环境用起来Docker。

来源:http://www.csdn.net/article/2015-05-18/2824699

Linux:Synfig Studio 1.0:开源动画动真格的了

*现在可以下载 Synfig Studio 这个自由、开源的2D动画软件的全新版本了。 *

在这个跨平台的软件首次发行一年之后,Synfig Studio 1.0 带着一套全新改进过的功能,实现它所承诺的“创造电影级的动画的工业级解决方案”。

在众多功能之上的是一个改进过的用户界面,据项目开发者说那是个用起来‘更简单’、‘更直观’的界面。客户端添加了新的单窗口模式,让界面更整洁,而且使用了最新的 GTK3 库重制

在功能方面有几个值得注意的变化,包括新加的全功能骨骼系统。

这套关节和转轴的‘骨骼’构架非常适合2D剪纸动画,再配上这个版本新加的复杂的变形控制系统或是 Synfig 受欢迎的‘关键帧自动插入’(即:帧到帧之间的变形)应该会变得非常有效率的。(youtube视频 https://www.youtube.com/M8zW1qCq8ng

新的无损剪切工具,摩擦力效果和对逐帧位图动画的支持,可能会有助于释放开源动画师们的创造力,更别说新加的用于同步动画的时间线和声音的声效层!

下载 Synfig Studio 1.0

Synfig Studio 并不是任何人都能用的工具套件,这最新发行版的最新一批改进应该能吸引一些动画制作者试一试这个软件。

如果你想看看开源动画制作软件是什么样的,你可以通过下面的链接直接从工程的 Sourceforge 页下载一个适用于 Ubuntu 的最新版本的安装器。


via: http://www.omgubuntu.co.uk/2015/04/synfig-studio-new-release-features

作者:oey-Elijah Sneddon 译者:H-mudcup 校对:wxy

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

来源:http://linux.cn/article-5522-1.html

Linux:美政府建议最高法院不受理谷歌Java版权申诉

奥巴马政府周二表示,美国最高法院不应就谷歌甲骨文专利权纠纷案的上诉进行听证。本案的焦点在于版权法规定对Java语言有什么样的保护效力,因此对科技行业有着广泛的影响。

去年,美国一家联邦上诉法院判决称,Java的一部分可以获得版权保护。而谷歌认为,该公司可以自由使用Java,同时不必支付授权费。

谷歌在Android系统的设计中使用了Java语言。在这一判决之后,谷歌向美国最高法院进行了上诉。今年1月,关于是否受理本案,美国最高法院向奥巴马政府征询意见,因为美国联邦政府也密切关注这类问题。

例如,美国联邦贸易委员会(FTC)必须确保,企业在使用版权法保护软件著作权时不会违反反垄断法。

谷歌认为,甲骨文在本案中的胜利将不利于创新,因为软件开发者将无法自由地在他人的成果之上进行开发。不过甲骨文表示,有效的版权保护是软件创新的关键。

在周二的法庭文件中,美国副司法部长唐纳德·维瑞利(Donald Verrilli)表示,谷歌的观点缺乏依据,美国最高法院不必再对此进行评估。

维瑞利同时指出,谷歌担心甲骨文获得版权保护将不利于软件开发,但这样的问题可以通过进一步的程序来得到解决。谷歌可以在旧金山联邦法院就软件的“合理使用”为自己辩护。他认为,如果能同时提供所有法律材料,那么美国最高法院可以更好地评估这一问题。

预计美国最高法院将于今年6月做出决定,是否就本案进行听证。

甲骨文对奥巴马政府的建议表示“高兴”。甲骨文指出,“这确认了版权保护对软件创新的重要性”。

来源:http://tech.sina.com.cn/it/2015-05-27/doc-iawzuney6246371.shtml

Linux:Google研究发现网站的“安全问题”其实并不安全

很多网站为了加强安全往往在密码以外增加“安全问题”(即询问特定的问题,以匹配用户自己确定的答案)。但是Google的深度研究表明,这一密码丢失后的最后一道防线要比预想的弱。

Google发现,安全问题的安全强度之所以弱是因为很多人在回答安全问题时撒谎,尤其是有好些人(37%)为了让安全问题更难猜故意提供虚假的答案。但是这样的行为产生的副作用是很多人也因此难以第一时间想起安全问题的答案,尤其是问题非常特别的时候。Google的统计表明,约有40%的人回忆不起答案。相比之下,短信重置密码的成功率则要高得多,达到了80%。Google通过对问题的强度和方便记忆的程度进行比较发现,兼顾安全性和易记性的安全问题几乎不存在。比方说,研究发现“你的飞行常客号码是什么”属于最安全的问题之一,但是选择这一问题的人只有9%记得自己的号码。

研究还发现针对安全问题的攻击尤其危险,因为有很多用户的答案是相同的。比方说黑客对于“喜欢的食品是什么?(英语问题)”这个问题的一次破解的成功率就达到了19.7%。而对于韩国用户,“出生城市”这个问题的10次破解成功率则达到了39%。(第一个问题说明西方人的口味单一;第二个问题则说明韩国地方小 :))。

Google发现的第三个问题是部分安全问题的范畴太过狭隘,从一开始就限制了答案的数量。比方说“谁是你的超级英雄”这样的问题更容易让用户忽略掉安全问题。

来源:http://36kr.com/p/533254.html

Linux:Mandriva梦断桌面Linux,正在清算!

据 LWN 消息Mandriva 正在清算中

Mandriva(Mandrake)项目是世界上第一个为非技术类用户设计的易于使用、安装和管理的linux版本。它早期方便的字体安装工具和默认的中文支持,为Linux普及做出了很大的贡献。然而,公司现在清算,面临破产的结局,让人伤心啊!这款诞生于1998年的Linux发行版,倾注了法国和巴西人的智慧和心血,当年叫Mandrake的时候,其易用性和界面让人惊艳。

在Mandriva的死亡的同时,由前Mandriva雇员和活跃开发者创建的衍生版本Mageia Linux仍然相当活跃,正准备发布Mageia 5.0正式版(RC版在上个月发布)。

来源:http://weibo.com/1715118170/CjJxNmBAu

Linux:实验楼为高校教学提供免费的在线Linux系统环境

       随着就业市场对IT技术人才的需求越来越大,国内高校对Linux课程的教学也逐渐重视,很多学校为计算机专业开设了Linux相关的必修课,但高校里Linux教学依然过于偏重理论,学生缺乏足够的练习和实践。

      大部分高校会让学生自己安装Linux系统练习,但不管是Linux与Windows双系统启动环境,还是使用虚拟机安装Linux,对新手来说都比较复杂,很多进阶的技术,本地电脑的配置也无法支持。有些实验经费比较充足的学校,会选择购买昂贵的实训软件,一套Linux信息安全课程的实训系统少则十几万,多则几十万。而且系统后期维护麻烦、更新慢,最后真正应用起来的高校很少。

    为了使高校里的Linux实践教学更方便,实验楼的在线Linux实验环境已经面向全国高校免费开放。如果你是讲授Linux课程的老师,可以在实验楼开设私有课程,学生通过邀请码加入学习,在虚拟的Linux实验环境中做练习和作业。环境可以使用现有公开课的标准版本系统,也可以根据课程需要去做定制。学生在实验过程中的代码是通过GIT服务在线保存,下次开始实验会自动加载到环境中。做完实验后,学生可以自动将笔记、截图、作业、代码生成一篇完整的实验报告,老师在后台一键下载所有学生的实验报告,教学管理效率也会大大提高。

      实验内容方面,老师可以自己制作,也可以将实验楼线上的公开课,加入到自己为学生定制的私有课中。实验楼上有丰富的Linux公开课资源,其中一门Linux基础入门,上线不到半年,已经有两万人学习过,内容经过不断迭代后,质量已经非常不错。此外还有Linux系统工程师和Linux研发工程师两条成体系的学习路径可以供老师和学生参考。

      随着MOOC的发展,在线的学习资源和线下的课堂正在逐渐融合,很多高校老师开始尝试翻转课堂,学生课前自学线上MOOC课程或文档教程,课堂上老师组织大家一起答疑互动,课后学生在线去完成练习和作业。目前已经有几十位高校老师将实验课搬到了实验楼上。不只是线下教学,与MOOC平台的配合也让在线实验突显了更大的价值。网易云课堂上的“Linux内核分析”与“操作系统”两门课,都在实验楼上开设了配套的实验,学生完成云课堂上的视频学习后,到实验楼做实践练习和作业,省去了本地搭建环境的麻烦,老师也可以通过实验楼获得学生真实的学习效果反馈。

    学习任何一门学科都不能脱离实践练习,实验楼正是在为IT学习者搭建这个线上练习的地方。如果有老师教学上需要在线实验环境,可以在实验楼课程页面点击“我要开课”直接申请,实验楼的服务对老师和学生都是免费的。

课程链接:https://www.shiyanlou.com/courses

 

Linux:指南:使用 Trickle 限制应用程序带宽占用

有没有遇到过系统中的某个应用程序独占了你所有的网络带宽的情形?如果你有过这样的遭遇,那么你就会感受到Trickle这种带宽调整应用的价值。不管你是一个系统管理员还只是普通Linux用户,都需要学习如何控制应用程序的上下行速度,来确保你的网络带宽不会被某个程序霸占。

Install Trickle Bandwidth Limit in Linux

在 Linux 上安装 Trickle 带宽限制

什么是 Trickle?

Trickle是一个网络带宽调整工具,可以让我们管理应用程序的网络上下行速度,使得可以避免其中的某个应用程序霸占了全部或大部分可用的带宽。换句话说,Trickle可以让你基于单个应用程序来控制网络流量速率,而不是仅仅针对与单个用户——这是在客户端网络环境中经典的带宽调整情况。

Trickle 是如何工作的?

另外,trickle 可以帮助我们基于应用来定义优先级,所以当对整个系统进行了全局限制设定,高优先级的应用依然会自动地获取更多的带宽。为了实现这个目标,trickle 对 TCP 连接上的套接字的数据发送、接收设置流量限制。我们必须注意到,除了影响传输速率之外,在这个过程中,trickle任何时候都不会以任何方式来改变其中的数据。

Trickle不能做什么?

这么说吧,唯一的限制就是,trickle不支持静态链接的应用程序或者具有SUID或SGID位设置的二进制程序,因为它使用动态链接的方式将其载入到需要调整的进程和其关联的网络套接字之间。 Trickle此时会在这两种软件组件之间扮演代理的角色。

由于trickle并不需要超级用户的权限来运行,所以用户可以设置他们自己的流量限制。可能这并不是你想要的,我们会探索如何使用全局设定来限制系统中的所有用户的流量限制。也即是说,此时系统中的每个用户具有管理各自的流量速率,但是无论如何,都会受到系统管理员给他们设置的总体限制。

在这篇文章中,我们会描述如何通过trickle在linux平台上管理应用程序使用的网络带宽。为了生成所需的流量,在此会在客户端(CentOS 7 server – dev1: 192.168.0.17)上使用 ncftpput 和 ncftpget, 在服务器(Debian Wheezy 7.5 – dev2: 192.168.0.15)上使用vsftpd 来进行演示。 相同的指令也可以在RedHat,Fedora和Ubuntu等系统使用。

前提条件

  1. 对于 RHEL/CentOS 7/6, 开启EPEL仓库。这些用于企业版 Linux 的额外软件包是一个由Fedora项目维护的高质量、开源的软件仓库,而且百分之百与其衍生产品相兼容,如企业版本Linux和CentOS。 在这个仓库中trickle和ncftp两者都是可用的。

  2. 按照如下方式安装ncftp:

    # yum update && sudo yum install ncftp      [基于 RedHat 的系统]
    # aptitude update && aptitude install ncftp [基于 Debian 的系统]
    
  3. 在单独的服务器上设置一个FTP服务器。需要注意的是,尽管FTP天生就不安全,但是仍然被广泛应用在安全性无关紧要的文件上传下载中。 在这篇文章中我们使用它来演示trickle的优点,同时它也会在客户端的标准输出流中显示传输速率。我们将是否在其它时间使用它放在一边讨论。

    # yum update && yum install vsftpd      [基于 RedHat 的系统]
    # aptitude update && aptitude install vsftpd        [基于 Debian 的系统]
    

    现在,在FTP服务器上按照以下方式编辑 /etc/vsftpd/vsftpd.conf 文件。

    anonymous_enable=NO
    local_enable=YES
    chroot_local_user=YES
    allow_writeable_chroot=YES
    

    在此之后,确保在你的当前会话中启动了vsftpd,并在之后的启动中让其自动启动。

    # systemctl start vsftpd        [基于 systemd 的系统]
    # systemctl enable vsftpd
    # service vsftpd start          [基于 init 的系统]
    # chkconfig vsftpd on
    
  4. 如果你选择在一个使用 SSH 密钥进行远程访问的 CentOS/RHEL 7中搭建FTP服务器,你需要一个密码受保护的用户账户,它能访问root目录之外的某个目录,并有能在其中上传和下载文件的权限。

    你可以通过在你的浏览器中输入以下的URL来浏览你的家目录。一个登录窗口会弹出来提示你输入FTP服务器中的有效的用户名和密码。

    ftp://192.168.0.15
    

    如果验证成功,你就会看到你的家目录中的内容。该教程的稍后部分中,你将可以刷新页面来显示在你之前上传过的文件。

    FTP Directory Tree

    FTP 目录树

如何在Linux中安装 trickle

  1. 通过yum或aptitude来安装trickle.

    为了确保能够成功安装,最好在安装工具之前,保证当前的安装包是最新的版本。

    # yum -y update && yum install trickle              [基于 RedHat 的系统]
    # aptitude -y update && aptitude install trickle        [基于 Debian 的系统]
    
  2. 确认trickle是否对特定的二进制包有用。

    之前我们解释过,trickle只对使用动态或共享的库的二进制包有用。为了确认我们是否可以对某个特定的应用使用trickle,我们可以使用著名的ldd(列出动态依赖)工具。 特别地,我们会查看任何给定程序的动态依赖中其当前使用的glibc,因为其准确地定义了通过套接字通讯所使用的系统调用。

    对一个给定的二进制包执行以下命令来查看是否能对其使用trickle进行带宽调整:

    # ldd $(which [binary]) | grep libc.so
    

    例如,

    # ldd $(which ncftp) | grep libc.so
    

    其输出是:

    # libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
    

    输出中的括号中的字符可能在不同的系统平台有所不同,甚至相同的命令在不同的时候运行也会不同,因为其代表包加载到物理内存中的地址。

    如果上面的命令没有返回任何的结果,就说明这个二进制包没有使用libc包,因此trickle对其不能起到带宽调整的作用。

来源:http://linux.cn/article-5517-1.html

Linux:Fedora 22 正式版发布

Fedora 官方发布了正式版Fedora 22,用户现在就可以通过官方网站进行下载。

Fedora 22于2015年5月26日正式批准发行,它是一款可靠、用户友好,面向笔记本电脑及台式机的强大操作系统。它可以满足广泛的开发需求,从编程爱好者或学生到企业环境中的专家。Fedora 现在更加专注更少的设置选项,更多的创新。选择一种 Fedora 的官方派生版可以简化你的需求,并将工作井井有条。

和Fedora 21一样,它提供了三个版本:桌面版本Fedora Workstation,服务器版Fedora Server 和为云端服务优化的Fedora Cloud 。

Fedora 22的主要变化包括:

  • 包管理器用DNF取代了yum,
  • Atomic Host,
  • BIND v 9.10,
  • 基于PostgreSQL的Database Server Role,
  • Django 1.8,
  • GCC 5,
  • GHC 7.8,
  • GNOME 3.16,
  • Xfce 4.12、
  • KDE Plasma 5、
  • Ruby 2.2、
  • Ruby on Rails 4.2、
  • Perl 5.20,
  • 登录界面使用Wayland而不是X,
  • Fedora Server默认文件系统XFS,
  • 等等。
Torrent Description Size Date
Fedora-Live-Design_suite-i686-22.torrent Fedora Live Design_suite i686 22 1.7GB 2015-05-26
Fedora-Live-Design_suite-x86_64-22.torrent Fedora Live Design_suite x86_64 22 1.7GB 2015-05-26
Fedora-Live-Games-i686-22.torrent Fedora Live Games i686 22 4.0GB 2015-05-26
Fedora-Live-Games-x86_64-22.torrent Fedora Live Games x86_64 22 4.0GB 2015-05-26
Fedora-Live-Jam_KDE-i686-22.torrent Fedora Live Jam_KDE i686 22 1.7GB 2015-05-26
Fedora-Live-Jam_KDE-x86_64-22.torrent Fedora Live Jam_KDE x86_64 22 1.7GB 2015-05-26
Fedora-Live-KDE-i686-22.torrent Fedora Live KDE i686 22 1.1GB 2015-05-26
Fedora-Live-KDE-x86_64-22.torrent Fedora Live KDE x86_64 22 1.1GB 2015-05-26
Fedora-Live-LXDE-i686-22.torrent Fedora Live LXDE i686 22 842.0MB 2015-05-26
Fedora-Live-LXDE-x86_64-22.torrent Fedora Live LXDE x86_64 22 790.0MB 2015-05-26
Fedora-Live-MATE_Compiz-i686-22.torrent Fedora Live MATE_Compiz i686 22 1.2GB 2015-05-26
Fedora-Live-MATE_Compiz-x86_64-22.torrent Fedora Live MATE_Compiz x86_64 22 1.2GB 2015-05-26
Fedora-Live-Robotics-i686-22.torrent Fedora Live Robotics i686 22 2.4GB 2015-05-26
Fedora-Live-Robotics-x86_64-22.torrent Fedora Live Robotics x86_64 22 2.5GB 2015-05-26
Fedora-Live-Scientific_KDE-i686-22.torrent Fedora Live Scientific_KDE i686 22 3.0GB 2015-05-26
Fedora-Live-Scientific_KDE-x86_64-22.torrent Fedora Live Scientific_KDE x86_64 22 3.0GB 2015-05-26
Fedora-Live-Security-i686-22.torrent Fedora Live Security i686 22 857.0MB 2015-05-26
Fedora-Live-Security-x86_64-22.torrent Fedora Live Security x86_64 22 889.0MB 2015-05-26
Fedora-Live-SoaS-i686-22.torrent Fedora Live SoaS i686 22 633.0MB 2015-05-26
Fedora-Live-SoaS-x86_64-22.torrent Fedora Live SoaS x86_64 22 738.0MB 2015-05-26
Fedora-Live-Workstation-i686-22.torrent Fedora Live Workstation i686 22 1.3GB 2015-05-26
Fedora-Live-Workstation-x86_64-22.torrent Fedora Live Workstation x86_64 22 1.3GB 2015-05-26
Fedora-Live-Xfce-i686-22.torrent Fedora Live Xfce i686 22 829.0MB 2015-05-26
Fedora-Live-Xfce-x86_64-22.torrent Fedora Live Xfce x86_64 22 961.0MB 2015-05-26
Fedora-Server-DVD-i386-22.torrent Fedora Server DVD i386 22 2.2GB 2015-05-26
Fedora-Server-DVD-x86_64-22.torrent Fedora Server DVD x86_64 22 2.1GB 2015-05-26

Linux:Richard Stallman称Windows和OS X是恶意程序

自由软件基金会主席RMS(Richard Stallman)在《卫报》的专栏上称,Windows和OS X是恶意程序。当然RMS的恶意程序定义与普通人不相同,它不是指病毒,而是特指设计虐待用户的程序。病毒当然是恶意的,但预装在设备上的软件也可能是恶意的,如果它们 不是自由软件的话。

RMS称,监视用户,束缚用户,审查用户的软件都是恶意程序。微软的Windows就是这样的恶意程序,苹果的Mac OS和iOS也是,甚至Android的非自由组件也包含有恶意后门。

RMS说,亚马逊的Kindle会记录用户的标记,跟踪用户读到了哪一页,束缚读者 自由的赠与和分享电子书,它还有奥威尔式的后门去删除电子书。RMS还警告说,任何相信物联网的人都是白痴。

 

来源:http://www.solidot.org/story?sid=44202

Linux:‘Unity Greeter Badges’:将丢失的会话图标带回Ubuntu登录屏幕

新出现在Ubuntu 15.04中的一个软件包解决了我对Unity 欢迎屏的微词:像Cinnamon这样的其它Linux桌面会话没有徽章图标。

我知道这有点吹毛求疵了;这只是对大多数人而言几乎毫无影响的视觉瑕疵罢了。但是这种不一致性时时刻刻缠绕着我,让我不胜其烦,因为Ubuntu的一些会话带有徽章图标,包括Unity、GNOME和KDE。而剩下的其它桌面环境,包括它自己的一些旁系产品,像Xubuntu,只会在会话切换列表和主用户界面显示了一个不能再简单的白点。

这些点点们造成的这种不一致性刺激着我的神经,即使它只是稍纵即逝,但这种刺激不仅仅来自设计,也来自可用性方面。标牌式的标志符号对于让我们知道我们即将登陆到哪个会话很有帮助。

例如,你能告诉我们这个是个什么会话呢?

Budgie? 也许是 MATE? 也能是 Cinnamon……我必须点开它才能知道。

没有必要这样做啊。构建Unity Greeter,就是为了让桌面环境开发者能够部署徽章到欢迎屏幕中(有些确实这样做了)。但在许多情况下,像MATE,它的包来自上游的Debian,想要移植一个“Ubuntu专用的补丁包”不太可取,也不太可能。

一个解决方案出炉了

一位有经验的Debian维护者Doug Torrance有了修复该可用性瑕疵的解决方案。与其依赖桌面制造者自己来添加品牌式徽章到他们的包中,与其给Ubuntu增加维护它的责任重担,Torrance还不如自己创建了一个独立的‘unity-greeter-badges’包来收容它们。

承担起了直接提供会话标志的假定责任后,该包确保能同时迎合新旧窗口管理器、会话和桌面。

在30个左右的桌面环境列表中,它为以下桌面捆绑了新的会话徽章:

  • Xubuntu
  • Cinnamon
  • MATE
  • Cairo-Dock
  • Xmonad
  • Awesome
  • OpenBox
  • Pantheon

最重要的是,‘Unity-Greeter-Badges’已经被Ubuntu 15.04收录进去。这就意味着Torrance的包将可以直接安装,不需要PPA,也不需要下载。没有像Unity Greeter一样成为核心包的一部分,它可以以更高效和更及时的方式更新新的图标。

如果你真运行着Ubuntu 15.04,在不久的将来,你就可以从软件中心获取并安装该包了。

不想等到15.04?Torrance已经为Ubuntu 14.04和Ubuntu 14.10用户做了个.deb安装器。


via: http://www.omgubuntu.co.uk/2015/01/unity-greeter-badges-brings-missing-session-icons-ubuntu-login-screen

作者:Joey-Elijah Sneddon 译者:GOLinux 校对:wxy

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

来源:http://linux.cn/article-5512-1.html

Linux:Linux Email应用 Geary 更新了

Geary,Linux上流行的桌面email客户端,更新到版本0.10了 — 并且有了很多新的功能。

elementary OS上运行的旧版本的Geary

elementary OS上运行的旧版本的Geary

Geary 0.10有一些不错的用户界面改进以及额外的UI功能,包括:

  • 新增: 可以撤销归档、删除以及移动等操作
  • 新增: 在2列或者2列布局之间切换
  • 新的 “split header bar” — 改进邮件列表,发件人布局
  • 新的快捷键 — 使用j/k切换到上/下一封邮件

根据Yorba介绍,这次更新还引入了一个全新的全文检索算法 ,用来改进Geary的搜索体验。

这个更新应该能平息一下对该应用的搜索能力的抱怨:Geary返回的搜索结果就如同软件自己所宣称的“看起来和查询语句毫不相关”。

‘Yorba 建议所有这个软件客户端的用户升级到这个版本’

“尽管并不是所有的搜索问题在0.10版本中都解决了,但Geary能确保显示的结果能和更好的匹配用户的查询,”团队表示

最后同样重要的是,专业用户会喜欢的主要功能:支持一个账户有多个或者备用的email地址

如果你在Geary中设置Gmail账户来收取你的Yahoo,Outlook和KittyMail信件,你可以看到现在它们都整齐地放在一起,当你写信时在’From’栏你可以选择指定账户作为发送人。这并不是最重要,但是却是最经常被人要求的的功能。

这个流行的Linux电子邮件客户端的这次发布主要是bug修复,性能优化以及一些杂项改进。

Yorba建议所有这个客户端的用户都升级到这个发行版。

在Ubuntu 14.04, 14.10 & 15.04安装Geary 0.10

Yorba的最新版本可以从GNOME的Git账户下载可编译的源代码。但说实话:这不是有点麻烦吗?

Ubuntu用户想知道如何在 14.04,14.10 以及 15.04(那些更新爱好者) 上安装Geary 0.10。

官方的Youba PPA包括了 Geary 最新版本 以及Shotwell(照片管理器)和California(日历应用)。请注意添加这个PPA会使你电脑上任何已经安装的这些应用更新到最近的版本。

Capiche? Coolio.

在Ubuntu上安装Geary你首先需要添加Yorba PPA和你的软件源。做这些你只需要打开终端窗口并小心地输入下面的两条命令:

sudo add-apt-repository ppa:yorba/ppa
sudo apt-get update && sudo apt-get install geary

在输入最后一条命令并敲击回车键后会提示输入你的密码。输入密码让安装完成。

完成后,打开你的桌面环境应用启动面板并查找‘Geary’图标。点击它,添加你的账户并查看通过信息高速公路下载了什么,开始使用简单的图形界面吧。

别忘记:你可以通过电子邮件告诉我们你想看的新闻,应用建议,以及任何你想我们包括的东西。


via: http://www.omgubuntu.co.uk/2015/03/install-geary-ubuntu-linux-email-update

作者:Joey-Elijah Sneddon 译者:ictlyh 校对:wxy

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

来源:http://linux.cn/article-5511-1.html

Linux:zBackup:一个多功能的去重备份工具

zbackup是一个基于rsync思想的全局去重数据备份工具。给它传入一个大的tar文件后,它会仅存储一次该文件的重复部分,然后对结果进行压缩,并根据参数确定是否对其加密。传入另一个tar文件后,它会从之前的已备份文件中复用重复数据。只有新的改动会被保存,并且只要文件差异不是很大,需要的存储空间非常少。无论何时,之前的已备份文件都可以被完整地读出来。

zBackup特性

  • 使用并行的LZMA或者LZO压缩算法压缩已备份数据
  • 使用内置的AES加密算法加密已备份数据
  • 可以删除旧的已备份数据
  • 使用一个64位滚动哈希,保持软碰撞数量为0
  • 备份库由不可更改的文件组成,只有库中不存在的文件才能修改
  • 使用C++语言编写,并且只有适量的依赖库
  • 可以在生产环境安全使用
  • 可以在不同备份库中交换数据而无需重新压缩

在ubuntu中安装zBackup

打开终端并运行如下命令:

sudo apt-get install zbackup

使用zBackup

zbackup init命令会初始化一个备份库,用来存放待备份的数据。

zbackup init [--non-encrypted] [--password-file ~/.my_backup_password ] /my/backup/repo

zbackup backup命令备份一个由tar c命令创建的tar文件到刚才使用zbackup init初始化的备份库。(LCTT 译注:实际使用时类似这样,tar c files | zbackup …)

zbackup [--password-file ~/.my_backup_password ] [--threads number_of_threads ] backup /my/backup/repo/backups/backup-`date ‘+%Y-%m-%d'`

zbackup restore命令从备份库中恢复一个已备份文件到tar文件中。

zbackup [--password-file ~/.my_backup_password ] [--cache-size cache_size_in_mb ] restore /my/backup/repo/backups/backup-`date ‘+%Y-%m-%d'` > /my/precious/backup-restored.tar

可用选项

  • -non-encrypted — 不加密备份库。
  • –password-file ~/.mybackuppassword — 使用位于~/.mybackuppassword的口令文件来加密备份库和待备份文件,以及解密已备份文件。
  • –threads numberofthreads — 限制并行LZMA压缩的线程数为 numberofthreads。建议在32位的系统平台使用。
  • –cache-size cachesizeinmb — 使用cachesizeinmb中的缓存大小来加速恢复文件的过程。

上述命令中 zBackup 相关文件

  • ~/.mybackuppassword 用来加密备份库和待备份文件,以及解密已备份文件。更多细节见zbackup。
  • /my/backup/repo 存放备份库的目录。
  • /my/precious/restored-tar 用来恢复已备份文件的tar文件。
  • /my/backup/repo/backups/backup-date ‘+%Y-%m-%d’指定的之前已备份文件的文件名。

via: http://www.ubuntugeek.com/zbackup-a-versatile-deduplicating-backup-tool.html

作者:ruchi 译者:goreliu 校对:wxy

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

来源:http://linux.cn/article-5523-1.html

Linux:openSUSE 的内核安全加固项目:gardened

随着后棱镜时代的阴影袭来,更多的自由软件狂热分子意识到对抗大规模监控在技术上的利器还是那对孪生兄弟:系统安全和密码工程。

PaX/Grsecurity自从诞生之日起就成为了内核安全的代名词,由于一些”操蛋”的原因,PaX/Grsecurity并没有进入Linux内核主线,但这并不影响PaX/Grsecurity在内核安全领域的地位。最早支持PaX/Grsecurity的发行版是AlpineGentoo,因为棱镜事件,Debian社区也发起了Mempo项目,Mempo其中内核部分的加固就是PaX/Grsecurity。

最近kdave在openSUSE社区也发起了名为”openSUSE gardened“的安全加固项目,目前PaX/Grsecurity在openSUSE 13.1上已经能运行,版本包括3.2.x和3.14.x两个stable版,linux内核4.x还在测试中。据kdave介绍,他受到了Mempo项目的启发想让openSUSE用户至少有安全的选择,目前他是花业余时间在做openSUSE gardened项目。

来源:http://www.solidot.org/story?sid=44212

Linux:Quagga上使用验证加固BGP会话安全

BGP协议运行于TCP之上,因而,它也继承了TCP连接的所有漏洞。例如,在一个BGP会话内,攻击者可以冒充一个合法的BGP邻居,然后说服另一端的BGP路由器共享路由信息给攻击者。在攻击者通告并向邻居路由注入伪造的路由时,就会发生这个问题。毫无戒备的邻居路由器就会开始向攻击者发送通信实况,实际上这些信息并没有去向任何地方,仅仅只是被丢弃了。回到2008年,YouTube实际上也受害于这样的BGP路由中毒,并遭受了长达一个小时的视频服务大量中断。一个更加糟糕的情况是,如果攻击者是个足够懂行的人,他们可以伪装成一台透明路由器,然后嗅探经过的通信以获取敏感数据。你可以想象,这会造成深远的影响。

要保护活跃的BGP会话不受攻击,许多服务提供商在BGP会话中使用MD5校验和及预共享密钥。在受保护的BGP会话中,一台发送包的BGP路由器通过使用预共享的密钥生成MD5散列值、部分IP和TCP头以及有效载荷。然后,MD5散列作为一个TCP选项字段存储。在收到包后,接受路由器用同样的方法使用预共享密钥生成它的MD5版本。它会将它的MD5散列和接收到的某个包的值进行对比,以决定是否接受该包。对于一个攻击者而言,几乎不可能猜测到校验和或其密钥。对于BGP路由器而言,它们能在使用包的内容前确保每个包的合法性。

在本教程中,我们将为大家演示如何使用MD5校验和以及预共享密钥来加固两个邻居间的BGP会话的安全。

准备

加固BGP会话安全是相当简单而直截了当的,我们会使用以下路由器。

路由器名称 AS 号 IP地址
router-A 100 10.10.12.1/30
router-B 200 10.10.12.2/30

常用的Linux内核原生支持IPv4和IPv6的TCP MD5选项。因此,如果你从全新的Linux机器构建了一台Quagga路由器,TCP的MD5功能会自动启用。剩下来的事情,仅仅是配置Quagga以使用它的功能。但是,如果你使用的是FreeBSD机器或者为Quagga构建了一个自定义内核,请确保内核开启了TCP的MD5支持(如,Linux中的CONFIGTCPMD5SIG选项)。

配置Router-A验证功能

我们将使用Quagga的CLI Shell来配置路由器,我们将使用的唯一的一个新命令是‘password’。

[root@router-a ~]# vtysh
router-a# conf t
router-a(config)# router bgp 100
router-a(config-router)# network 192.168.100.0/24
router-a(config-router)# neighbor 10.10.12.2 remote-as 200
router-a(config-router)# neighbor 10.10.12.2 password xmodulo

本例中使用的预共享密钥是‘xmodulo’。很明显,在生产环境中,你需要选择一个更健壮的密钥。

注意: 在Quagga中,‘service password-encryption’命令被用做加密配置文件中所有明文密码(如,登录密码)。然而,当我使用该命令时,我注意到BGP配置中的预共享密钥仍然是明文的。我不确定这是否是Quagga的限制,还是版本自身的问题。

配置Router-B验证功能

我们将以类似的方式配置router-B。

[root@router-b ~]# vtysh
router-b# conf t
router-b(config)# router bgp 200
router-b(config-router)# network 192.168.200.0/24
router-b(config-router)# neighbor 10.10.12.1 remote-as 100
router-b(config-router)# neighbor 10.10.12.1 password xmodulo

验证BGP会话

如果一切配置正确,那么BGP会话就应该起来了,两台路由器应该能交换路由表。这时候,TCP会话中的所有流出包都会携带一个MD5摘要的包内容和一个密钥,而摘要信息会被另一端自动验证。

我们可以像平时一样通过查看BGP的概要来验证活跃的BGP会话。MD5校验和的验证在Quagga内部是透明的,因此,你在BGP级别是无法看到的。

如果你想要测试BGP验证,你可以配置一个邻居路由,设置其密码为空,或者故意使用错误的预共享密钥,然后查看发生了什么。你也可以使用包嗅探器,像tcpdump或者Wireshark等,来分析通过BGP会话的包。例如,带有“-M ”选项的tcpdump将验证TCP选项字段的MD5摘要。

小结

在本教程中,我们演示了怎样简单地加固两台路由间的BGP会话安全。相对于其它协议而言,配置过程非常简明。强烈推荐你加固BGP会话安全,尤其是当你用另一个AS配置BGP会话的时候。预共享密钥也应该安全地保存。


via: http://xmodulo.com/bgp-authentication-quagga.html

作者:Sarmed Rahman 译者:GOLinux 校对:wxy

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

来源:http://linux.cn/article-5524-1.html

Linux:Linux有问必答:如何在Linux中修改环境变量PATH

提问: 当我试着运行一个程序时,它提示“command not found”。 但这个程序就在/usr/local/bin下。我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以不用指定路径来运行这个命令了。

在Linux中,PATH环境变量保存了一系列的目录用于用户在输入的时候搜索命令。PATH变量的值由一系列的由冒号分隔的绝对路径组成。每个用户都有特定的PATH环境变量(由系统级的PATH变量初始化)。

要检查用户的环境变量,用户模式下运行下面的命令:

$ echo $PATH
/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/sbin:/sbin:/home/xmodulo/bin

或者运行:

$ env | grep PATH
PATH=/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/sbin:/sbin:/home/xmodulo/bin

如果你的命令不存在于上面任何一个目录内,shell就会抛出一个错误信息:“command not found”。

如果你想要添加一个另外的目录(比如:/usr/local/bin)到你的PATH变量中,你可以用下面这些命令。

为特定用户修改PATH环境变量

如果你只想在当前的登录会话中临时地添加一个新的目录(比如:/usr/local/bin)给用户的默认搜索路径,你只需要输入下面的命令。

$ PATH=$PATH:/usr/local/bin

检查PATH是否已经更新:

$ echo $PATH
/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/sbin:/sbin:/home/xmodulo/bin:/usr/local/bin

更新后的PATH会在当前的会话一直有效。然而,更改将在新的会话中失效。

如果你想要永久更改PATH变量,用编辑器打开~/.bashrc (或者 ~/.bash_profile),接着在最后添加下面这行。

export PATH=$PATH:/usr/local/bin

接着运行下面这行永久激活更改:

$ source ~/.bashrc (或者 source ~/.bash_profile)

改变系统级的环境变量

如果你想要永久添加/usr/local/bin到系统级的PATH变量中,像下面这样编辑/etc/profile。

$ sudo vi /etc/profile

export PATH=$PATH:/usr/local/bin

你重新登录后,更新的环境变量就会生效了。


via: http://ask.xmodulo.com/change-path-environment-variable-linux.html

作者:Dan Nanni 译者:geekpi 校对:wxy

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

来源:https://linux.cn/article-5478-1.html

Linux:Conky – 终极的 X 视窗系统监视器应用

Conky 是一个用 ‘C’ 语言写就的系统监视器,并在 GNU GPL 和 BSD 许可协议下发布,在 Linux 和 BSD 操作系统中都可以获取到它。这个应用是基于 X 视窗系统的,原本由 Torsmo 分支而来。

特点

  • 简洁的用户界面;
  • 高度可配置;
  • 它既可使用内置的部件(超过 300 多个) 也可使用外部脚本,来在桌面或其自有容器中展示系统的状态;
  • 低资源消耗;
  • 它可显示范围广泛的系统参数,包括但不限于 CPU,内存,swap 分区 ,温度,进程,磁盘使用情况,网络状态,电池电量,邮件收发,系统消息,音乐播放器的控制,天气信息,最新新闻,升级信息等等;
  • 在许多操作系统中如 CrunchBang Linux 和 Pinguy OS 被默认安装;

关于 Conky 的少有人知的事实

  • conky 这个名称来自于一个加拿大电视节目;
  • 它已被移植到 Nokia N900 上;
  • 官方已经不再维护它了;

在 Linux 中 Conky 的安装和使用

在我们安装 conky 之前,我们需要使用下面的命令来安装诸如 lm-sensors, curlhddtemp之类的软件包:

# apt-get install lm-sensors curl hddtemp

然后是检测传感器:

# sensors-detect

: 在被系统提示时,回答 ‘Yes’ 。

检测所有探测到的传感器:

# sensors

样例输出

acpitz-virtual-0
Adapter: Virtual device
temp1:        +49.5°C  (crit = +99.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +49.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:         +49.0°C  (high = +100.0°C, crit = +100.0°C)
Core 1:         +49.0°C  (high = +100.0°C, crit = +100.0°C)

Conky 既可以从软件仓库中安装,也可从源代码编译得到:

# yum install conky              [在 RedHat 系的系统上]
# apt-get install conky-all      [在 Debian 系的系统上]

: 在 Fedora/CentOS 上安装 conky 之前,你必须启用 EPEL 软件仓库

在安装完 conky 之后,只需输入如下命令来开启它:

$ conky &

正在运行的 Conky 监视器

正在运行的 Conky 监视器

这使得 conky 以一个弹窗的形式运行,并使用位于 /etc/conky/conky.conf的 conky 基本配置文件。

你可能想将 conky 集成到桌面上,并不想让它每次以弹窗的形式出现,下面就是你需要做的:

将配置文件 /etc/conky/conky.conf复制到你的家目录中,并将它重命名为 .conkyrc,开头的点号 (.) 是为了确保这个配置文件是隐藏的。

$ cp /etc/conky/conky.conf /home/$USER/.conkyrc

现在重启 conky 来应用新的更改:

$ killall -SIGUSR1 conky

Conky 监视器窗口

Conky 监视器窗口

你可能想编辑位于你的家目录的 conky 的配置文件,这个配置文件的内容是非常容易理解的。

下面是 conky 配置文件的一个样例:

Conky 的配置

Conky 的配置

从上面的窗口中,你可以更改颜色,边框,大小,缩放比例,背景,对齐方式及几个其他属性。通过为不同的 conky 窗口设定不同的对齐方式,我们可以同时运行几个 conky 脚本。

让 conky 使用其它脚本而不是默认配置,以及如何找到这些脚本?

你可以编写你自己的 conky 脚本或使用来自于互联网的脚本;我们并不建议你使用从互联网中找到的具有潜在危险的任何脚本,除非你清楚你正在做什么。然而,有一些著名的主题和网页包含可信赖的 conky 脚本,例如下面所提及的:

在上面的 URL 地址中,你将发现其中每个截图都有一个超链接,它们将指向到脚本文件。

测试 Conky 脚本

这里我将在我的 Debian Jessie 系统中运行一个由第三方写的 conky 脚本,以此来进行测试:

$ wget https://github.com/alexbel/conky/archive/master.zip
$ unzip master.zip

切换当前工作目录到刚才解压的目录:

$ cd conky-master

secrets.yml.example重命名为 secrets.yml

$ mv secrets.yml.example secrets.yml

在你需要运行这个(ruby)脚本之前安装 Ruby:

$ sudo apt-get install ruby
$ ruby starter.rb

华丽的 conky 外观

华丽的 conky 外观

: 可以修改这个脚本以展示你当前的天气,温度等;

假如你想让 conky 开机自启,请在开机启动应用设置(startup Applications) 中添加如下的几行命令:

conky --pause 10
save and exit.

最后,如此轻量级且吸引眼球的实用 GUI 软件包不再处于活跃状态且官方不再进行维护了。最新的稳定发布版本为 conky 1.9.0, 于 2012 年 5 月 3 号发布。在 Ubuntu 论坛上,一个有关用户分享 conky 配置的主题已经超过了 2000 多页。(这个论坛主题的链接为: http://ubuntuforums.org/showthread.php?t=281865/)

这就是全部内容了。保持联系,保持评论。请在下面的评论框里分享你的想法和配置。


via: http://www.tecmint.com/install-conky-in-ubuntu-debian-fedora/

作者:Avishek Kumar 译者:FSSlc 校对:wxy

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

来源:https://linux.cn/article-5474-1.html

Linux:用腻了 wget 或 curl,有什么更好的替代品吗?

如果你经常需要通过终端以非交互模式访问网络服务器(例如,从网络上下载文件,或者是测试 RESTful 网络服务接口),可能你会选择的工具是 wget 或 curl。通过大量的命令行选项,这两种工具都可以处理很多非交互网络访问的情况(比如这里这里,还有这里)。然而,即使像这些一样的强大的工具,你也只能发挥你所了解的那些选项的功能。除非你很精通那些繁冗的语法细节,这些工具对于你来说只不过是简单的网络下载器而已。
就像其宣传的那样,“给人用 curl 类工具”,HTTPie 设计用来增强 wget 和 curl 的可用性。它的主要目标是使通过命令行与网络服务器进行交互的过程变得尽可能的人性化。为此,HTTPie 支持具有表现力、但又很简单很直观的语法。它以彩色模式显示响应,并且还有一些不错的优点,比如对 JSON 的良好支持,和持久性会话用以作业流程化。
我知道很多人对把像 wget 和 curl 这样的无处不在的、可用的、完美的工具换成完全没听说过的软件心存疑虑。这种观点是好的,特别是如果你是一个系统管理员、要处理很多不同的硬件的话。然而,对于开发者和终端用户来说,重要的是效率。如果我发现了一个工具的用户更佳替代品,那么我认为采用易于使用的版本来节省宝贵的时间是毫无疑问的。没有必要对替换掉的工具保持信仰忠诚。毕竟,对于 Linux 来说,最好的事情就是可以选择。
在这篇文章中,让我们来了解并展示一下我所说的 HTTPie,一个用户友好的 wget 和 curl 的替代。

在 Linux 上安装 HTTPie

HTTPie 是用 Python 写的,所以你可以在几乎所有地方(Linux,MacOSX,Windows)安装它。而且,在大多数的 Linux 发行版中都有编译好的安装包。

Debian,Ubuntu 或者 Linux Mint:

$ sudo apt-get install httpie

Fedora:

$ sudo yum install httpie

CentOS/RHEL:

首先,启用EPEL 仓库,然后运行:

$ sudo yum install httpie

对于任何 Linux 发行版,另一个安装方法时使用pip

$ sudo pip install --upgrade httpie

HTTPie 的例子

当你安装完 HTTPie 后,你可以通过输入 http 命令来调用它。在这篇文章的剩余部分,我会展示几个有用的 http 命令的例子。

例1:定制头部

你可以使用 的格式来定制头部。例如,我们发送一个 HTTP GET 请求到 www.test.com ,使用定制用户代理(user-agent)和来源(referer),还有定制头部(比如 MyParam)。

$ http www.test.com User-Agent:Xmodulo/1.0 Referer:http://xmodulo.com MyParam:Foo

注意到当使用 HTTP GET 方法时,就无需明确指定 HTTP 方法。
这个 HTTP 请求看起来如下:

GET / HTTP/1.1
Host: www.test.com
Accept: */*
Referer: http://xmodulo.com
Accept-Encoding: gzip, deflate, compress
MyParam: Foo
User-Agent: Xmodulo/1.0

例2:下载文件

你可以把 http 作为文件下载器来使用。你需要像下面一样把输出重定向到文件。

$ http www.test.com/my_file.zip > my_file.zip

或者:

$ http --download www.test.com/my_file.zip

例3:定制 HTTP 方法

除了默认的 GET 方法,你还可以使用其他方法(比如 PUT,POST,HEAD)。例如,发送一个 HTTP PUT 请求:

$ http PUT www.test.com name='Dan Nanni' email=dan@email.com

例4:提交表单

使用 http 命令提交表单很容易,如下:

$ http -f POST www.test.com name='Dan Nanni' comment='Hi there'

‘-f’ 选项使 http 命令序列化数据字段,并将 ‘Content-Type’ 设置为 “application/x-www-form-urlencoded; charset=utf-8″。
这个 HTTP POST 请求看起来如下:

POST / HTTP/1.1
Host: www.test.com
Content-Length: 31
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: HTTPie/0.8.0
name=Dan+Nanni&comment=Hi+there

例5:JSON 支持

HTTPie 内置 JSON(一种日渐普及的数据交换格式)支持。事实上,HTTPie 默认使用的内容类型(content-type)就是 JSON。因此,当你不指定内容类型发送数据字段时,它们会自动序列化为 JSON 对象。

$ http POST www.test.com name='Dan Nanni' comment='Hi there'

这个 HTTP POST 请求看起来如下:

POST / HTTP/1.1
Host: www.test.com
Content-Length: 44
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: application/json
User-Agent: HTTPie/0.8.0
{"name": "Dan Nanni", "comment": "Hi there"}

例6:输出重定向

HTTPie 的另外一个用户友好特性是输入重定向,你可以使用缓冲数据提供 HTTP 请求内容。例如:

$ http POST api.test.com/db/lookup < my_info.json

或者:

$ echo '{"name": "Dan Nanni"}' | http POST api.test.com/db/lookup

结束语

在这篇文章中,我介绍了 HTTPie,一个 wget 和 curl 的可能替代工具。除了这里展示的几个简单的例子,你可以在其官方网站上找到 HTTPie 的很多有趣的应用。再次重复一遍,一款再强大的工具也取决于你对它的了解程度。从个人而言,我更倾向于 HTTPie,因为我在寻找一种更简洁的测试复杂网络接口的方法。
你怎么看?


via: http://xmodulo.com/wget-curl-alternative-linux.html
 
来源:https://linux.cn/article-5479-1.html

Linux:如何解决 Ubuntu 下不能记住亮度设置的问题

解决亮度控制在Ubuntu和Linux Mint下不工作的问题这篇教程里,一些用户提到虽然问题已经得到解决,但是Ubuntu无法记住亮度设置,同样的情况在Linux Mint下也会发生。每次开机或从睡眠状态下唤醒,亮度会恢复至最大值或最小值。我知道这种情况很烦。不过幸好我们有很简单的方法来解决Ubuntu和Linux Mint下的亮度问题

解决Ubuntu和Linux下不能记住亮度设置

Norbert写了一个脚本,能让Ubuntu和Linux Mint记住亮度设置,不论是开机还是唤醒之后。为了能让你使用这个脚本更简单方便,他把这个适用于Ubuntu 12.04、14.04和14.10的PPA挂在了网上。你需要做的就是输入以下命令:

sudo add-apt-repository ppa:nrbrtx/sysvinit-backlight
sudo apt-get update
sudo apt-get install sysvinit-backlight

安装好之后,重启你的系统。现在就来看看亮度设置有没有被保存下来吧。

希望这篇小贴士能帮助到你。如果你有任何问题,就来这儿提bug吧。


via: http://itsfoss.com/ubuntu-mint-brightness-settings/

作者:Abhishek 译者:ZTinoZ 校对:wxy

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

来源:https://linux.cn/article-5483-1.html

Linux:5个有趣的Linux命令行技巧

你有将Linux物尽其用吗?对很多Linux用户来说,有很多看起来是技巧的有用特性。有些时候你会需要这些技巧。本文会帮助你更好得使用一些命令,发挥其更强大的功能。

5个命令行技巧

图1:5个命令行技巧

我们开始一个新的系列,在这里我们还会写一些技巧,并且用尽量小的篇幅写清楚。

1. 我们可以使用history命令来查看曾经运行过的命令。

这里是一个history命令的示例输出。

# history

history命令例子

图2:history命令例子

history命令输出看,很明显,命令的执行时间没有被打出来。有解决方法吗?有的!运行如下命令:

# HISTTIMEFORMAT="%d/%m/%y %T "
# history

如果你想让这个修改永久生效,添加如下的一行内容到~/.bashrc文件中:

export HISTTIMEFORMAT="%d/%m/%y %T "

然后,在终端中运行:

# source ~/.bashrc

命令和选项的解释:

  • history – 查看运行过的命令
  • HISTIMEFORMAT – 设置时间格式的环境变量
  • %d – 天
  • %m – 月
  • %y – 年
  • %T – 时间戳
  • source – 简而言之就是将文件内容发送给shell来执行
  • .bashrc – BASH以交互方式启动时运行的脚本文件

history命令输出的日志

图3:history命令输出的日志

2. 如何测试磁盘写入速度?

一行dd命令脚本就可以实现。

# dd if=/dev/zero of=/tmp/output.img bs=8k count=256k conv=fdatasync; rm -rf /tmp/output.img

dd命令例子

图4:dd命令例子

命令和选项的解释:

  • dd – 转换和复制文件
  • if=/dev/zero – 指定输入文件,默认为stdin(标准输入)
  • of=/tmp/output.img – 指定输出文件,默认为stdout(标准输出)
  • bs – 一次读和写的块大小,最大可以以MB为单位
  • count – 复制次数
  • conv – 使用逗号分隔的策略来转换文件(LCTT 译注:比如将大写字母转换成小写,echo AA | dd conv=lcase)
  • rm – 删除文件和目录
  • -rf – (-r) 递归地删除目录和其中的内容,(-f)强行删除而不输出确认信息

3. 你如何获取吃掉你磁盘空间的最大的6个文件?

一个使用du命令的简单单行脚本即可实现,du命令主要用于获取文件的空间使用情况。

# du -hsx * | sort -rh | head -6

获取磁盘空间使用情况的方法

图5:获取磁盘空间使用情况的方法

命令和选项的解释:

  • du – 估计文件的空间使用情况
  • -hsx – (-h)更易读的格式,(-s)汇总输出,(-x)跳过其他文件系统的文件
  • sort – 对文本文件按行排序
  • -rf – (-r)将比较的结果逆序输出,(-f)忽略大小写
  • head – 输出文件的头几行

4. 获取一个文件的详细状态信息

可以使用stat命令

# stat filename_ext  (例如:stat abc.pdf)

获取文件的详细信息

图6:获取文件的详细信息

5. 显示帮助

最后一个技巧是为那些入门者准备的,如果你是有经验的用户,可能不需要它,除非你想从中寻找乐趣。入门者可能有Linux命令行恐惧症,下面的命令会随机显示一个man手册页。对入门者来说,好处是总会学到新的东西,而且不会厌倦。

# man $(ls /bin | shuf | head -1)

查看随机的man手册页

图7:查看随机的man手册页

命令和选项的解释:

  • man – Linux man手册
  • ls – 列出文件
  • /bin – 系统可执行文件的路径
  • shuf – 把输入内容按行随机打乱并输出
  • head – 输出文件的头几行

这就是所有的内容了。如果你知道任何类似的技巧,可以分享给我们,我们会用你的语言在网站上发表出来。

不要忘记在下边评论框中留下有价值的反馈。保持联系。可以点赞或者将本文分享来帮助我们更好地传播内容。


via: http://www.tecmint.com/5-linux-command-line-tricks/

作者:Avishek Kumar 译者:goreliu 校对:wxy

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

来源:https://linux.cn/article-5485-1.html

Linux:Linux有问必答:nginx网络服务器上如何阻止特定用户代理(UA)

问题: 我注意到有一些机器人经常访问我的nginx驱动的网站,并且进行一些攻击性的扫描,导致消耗掉了我的网络服务器的大量资源。我一直尝试着通过用户代理符串来阻挡这些机器人。我怎样才能在nginx网络服务器上阻挡掉特定的用户代理呢?

现代互联网滋生了大量各种各样的恶意机器人和网络爬虫,比如像恶意软件机器人、垃圾邮件程序或内容刮刀,这些恶意工具一直偷偷摸摸地扫描你的网站,干些诸如检测潜在网站漏洞、收获电子邮件地址,或者只是从你的网站偷取内容。大多数机器人能够通过它们的“用户代理”签名字符串来识别。

作为第一道防线,你可以尝试通过将这些机器人的用户代理字符串添加入robots.txt文件来阻止这些恶意软件机器人访问你的网站。但是,很不幸的是,该操作只针对那些“行为良好”的机器人,这些机器人被设计遵循robots.txt的规范。许多恶意软件机器人可以很容易地忽略掉robots.txt,然后随意扫描你的网站。

另一个用以阻挡特定机器人的途径,就是配置你的网络服务器,通过特定的用户代理字符串拒绝要求提供内容的请求。本文就是说明如何在nginx网络服务器上阻挡特定的用户代理

在Nginx中将特定用户代理列入黑名单

要配置用户代理阻挡列表,请打开你的网站的nginx配置文件,找到server定义部分。该文件可能会放在不同的地方,这取决于你的nginx配置或Linux版本(如,/etc/nginx/nginx.conf,/etc/nginx/sites-enabled/,/usr/local/nginx/conf/nginx.conf,/etc/nginx/conf.d/)。

server {
    listen       80 default_server;
    server_name  xmodulo.com;
    root         /usr/share/nginx/html;
    ....
}

在打开该配置文件并找到 server部分后,添加以下 if 声明到该部分内的某个地方。

server {
    listen       80 default_server;
    server_name  xmodulo.com;
    root         /usr/share/nginx/html;
    # 大小写敏感的匹配
    if ($http_user_agent ~ (Antivirx|Arian) {
        return 403;
    }
    #大小写无关的匹配
    if ($http_user_agent ~* (netcrawl|npbot|malicious)) {
        return 403;
    }
    ....
}

如你所想,这些 if 声明使用正则表达式匹配了任意不良用户字符串,并向匹配的对象返回403 HTTP状态码。 $http_user_agent是HTTP请求中的一个包含有用户代理字符串的变量。‘~’操作符针对用户代理字符串进行大小写敏感匹配,而‘~*’操作符则进行大小写无关匹配。‘|’操作符是逻辑或,因此,你可以在 if 声明中放入众多的用户代理关键字,然后将它们全部阻挡掉。

在修改配置文件后,你必须重新加载nginx以激活阻挡:

$ sudo /path/to/nginx -s reload

你可以通过使用带有 “–user-agent” 选项的 wget 测试用户代理阻挡。

$ wget --user-agent "malicious bot" http://

管理Nginx中的用户代理黑名单

目前为止,我已经展示了在nginx中如何阻挡一些用户代理的HTTP请求。如果你有许多不同类型的网络爬虫机器人要阻挡,又该怎么办呢?

由于用户代理黑名单会增长得很大,所以将它们放在nginx的server部分不是个好点子。取而代之的是,你可以创建一个独立的文件,在该文件中列出所有被阻挡的用户代理。例如,让我们创建/etc/nginx/useragent.rules,并定义以下面的格式定义所有被阻挡的用户代理的图谱。

$ sudo vi /etc/nginx/useragent.rules

map $http_user_agent $badagent {
        default         0;
        ~*malicious     1;
        ~*backdoor      1;
        ~*netcrawler    1;
        ~Antivirx       1;
        ~Arian          1;
        ~webbandit      1;
}

与先前的配置类似,‘~*’将匹配以大小写不敏感的方式匹配关键字,而‘~’将使用大小写敏感的正则表达式匹配关键字。“default 0”行所表达的意思是,任何其它文件中未被列出的用户代理将被允许。

接下来,打开你的网站的nginx配置文件,找到里面包含 http 的部分,然后添加以下行到 http 部分某个位置。

http {
    .....
    include /etc/nginx/useragent.rules
}

注意,该 include 声明必须出现在 server 部分之前(这就是为什么我们将它添加到了 http 部分里)。

现在,打开nginx配置定义你的服务器的部分,添加以下 if 声明:

server {
    ....
    if ($badagent) {
        return 403;
    }
    ....
}

最后,重新加载nginx。

$ sudo /path/to/nginx -s reload

现在,任何包含有/etc/nginx/useragent.rules中列出的关键字的用户代理将被nginx自动禁止。


via: http://ask.xmodulo.com/block-specific-user-agents-nginx-web-server.html

作者:Dan Nanni 译者:GOLinux 校对:wxy

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

来源:https://linux.cn/article-5487-1.html

Linux:让大数据运转更快:MemSQL推出完全免费的社区版

大数据的兴起,为数据库实时汇总和报告信息带来了巨大的压力。为此,实时数据库专家MemSQL发布了最新版本,以进一步提升这款面向企业的实时数据库解决方案。MemSQL 4能够快速响应,并提升物联网、金融服务、以及移动应用等领域的业务表现。更给力的是,MemSQL推出了一个全新的社区版本,并将之免费提供给全球用户。

MemSQL社区版支持无限量的容量规模、完整事务、以及分析功能,这意味着任何人都可以访问MemSQL并获得实时处理和分析数据所需的速度和可扩展性。

MemSQL 4带来了核心引擎方面的创新、管理和监控功能、以及生态系统的集成,其亮点包括地理空间功能、支持高级分析(增强了优化器并扩展了SQL功能)、以及对Apache Spark、Hadoop文件系统、以及Amazon S3更简易的集成。

MemSQL的应用和解决方案可用于数字广告、金融服务、零售、公共部门、高科技、传媒、以及通信和数据驱动的各行各业。

此外,MemSQL还加入了实时分析、风险管理、个性化、以及位置追踪和监控等应用程序,以帮助企业根据自己的数据作出快速明智的决策。

MemSQL联合创始人兼CEO Eric Frenkiel是前Facebook工程师,他们于2年前正式推出了旨在让大数据运转更快的MemSQL(general availability)。

MemSQL社区版下载地址:

http://www.memsql.com/download/

来源:http://www.cnbeta.com/articles/395475.htm

Linux:如何在Fedora / CentOS上面升级Docker 1.6

Docker,一个流行的将软件打包的开源容器平台,已经有了新的1.6版,增加了许多新的特性。该版本主要更新了Docker Registry、Engine、 Swarm、 Compose 和 Machine等方面。这次发布旨在提升性能、改善开发者和系统管理员的体验。让我们来快速看看有哪些新特性吧。

Docker Registry (2.0)是一项推送Docker镜像用于存储和分享的服务,因为面临加载下的体验问题而经历了架构的改变。它仍然向后兼容。Docker Registry的编写语言现在从Python改为Google的Go语言了,以提升性能。与Docker Engine 1.6结合后,拉取镜像的能力更快了。早先的镜像是队列式输送的,而现在是并行的啦。

Docker Engine (1.6)相比之前的版本有很大的提高。目前支持容器与镜像的标签。通过标签,你可以附加用户自定义的元数据到镜像和容器上,而镜像和容器反过来可以被其他工具使用。标签对正在运行的应用是不可见的,可以用来加速搜索容器和镜像。

Windows版本的Docker客户端可以连接到远程的运行在linux上的Docker Engine。

Docker目前支持日志驱动API,这允许我们发送容器日志给系统如Syslog,或者第三方。这将会使得系统管理员受益。

Swarm (0.2)是一个Docker集群工具,可以将一个Docker主机池转换为一个虚拟主机。在新特性里,容器甚至被放在了可用的节点上。通过添加更多的Docker命令,努力支持完整的Docker API。将来,使用第三方驱动来集群会成为可能。

Compose (1.2) 是一个Docker里定义和运行复杂应用的工具, 也得到了升级。在新版本里,可以创建多个子文件,而不是用一个没有结构的文件描述一个多容器应用。

通过Machine (0.2),我们可以很容易地在本地计算机、云和数据中心上搭建Docker主机。新的发布版本为开发者提供了一个相对干净地驱动界面来编写驱动。Machine集中控制供给,而不是每个独立的驱动。增加了新的命令,可以用来生成主机的TLS证书,以提高安全性。

在Fedora / CentOS 上的升级指导

在这一部分里,我们将会学习如何在Fedora和CentOS上升级已有的docker到最新版本。请注意,目前的Docker仅运行在64位的架构上,Fedora和CentOS都源于RedHat,命令的使用是差不多相同的,除了在Fedora20和CentOS6.5里Docker包被叫做“docker-io”。

如果你系统之前没有安装Docker,使用下面命令安装:

"yum install docker-io"  –  on Fedora20 / CentOS6.5
"yum install docker"  - on Fedora21 / CentOS7

在升级之前,备份一下docker镜像和容器卷是个不错的主意。

参考“将文件系统打成 tar 包”“卷备份、恢复或迁移”,获取更多信息。

目前,测试系统安装了Docker1.5。样例输出显示是来自一个Fedora20的系统。

验证当前系统安装的Docker版本

[root@TestNode1 ~]#sudo docker -v
Docker version 1.5.0, build a8a31ef/1.5.0

如果Docker正在运行,先停掉。

[root@TestNode1 ~]# sudo systemctl stop docker

使用yum update升级到最新版,但是写这篇文章的时候,仓库并不是最新版本(1.6),因此你需要使用二进制的升级方法。

[root@TestNode1 ~]#sudo yum -y update docker-io
No packages marked for update
[root@TestNode1 ~]#sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O /usr/bin/docker
--2015-04-19 13:40:48-- https://get.docker.com/builds/Linux/x86_64/docker-latest
Resolving get.docker.com (get.docker.com)... 162.242.195.82
Connecting to get.docker.com (get.docker.com)|162.242.195.82|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15443598 (15M) [binary/octet-stream]
Saving to: /usr/bin/docker
100%[======================================>] 15,443,598 8.72MB/s in 1.7s
2015-04-19 13:40:50 (8.72 MB/s) - /usr/bin/docker saved

检查更新后的版本

[root@TestNode1 ~]#sudo docker -v
Docker version 1.6.0, build 4749651

重启docker服务

[root@TestNode1 ~]# sudo systemctl start docker

确认Docker在运行

[root@TestNode1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
fedora latest 834629358fe2 3 months ago 241.3 MB
[root@TestNode1 ~]# docker run fedora /bin/echo Hello World
Hello World

CentOS安装时需要注意,在CentOS上安装完Docker后,当你试图启动Docker服务的时候,你可能会得到错误的信息,如下所示:

docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled)
Active: failed (Result: exit-code) since Mon 2015-04-20 03:24:24 EDT; 6h ago
Docs: http://docs.docker.com
Process: 21069 ExecStart=/usr/bin/docker -d $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY (code=exited, status=127)
Main PID: 21069 (code=exited, status=127)
Apr 20 03:24:24 centos7 systemd[1]: Starting Docker Application Container E.....
Apr 20 03:24:24 centos7 docker[21069]: time="2015-04-20T03:24:24-04:00" lev...)"
Apr 20 03:24:24 centos7 docker[21069]: time="2015-04-20T03:24:24-04:00" lev...)"
Apr 20 03:24:24 centos7 docker[21069]: /usr/bin/docker: relocation error: /...ce
Apr 20 03:24:24 centos7 systemd[1]: docker.service: main process exited, co.../a
Apr 20 03:24:24 centos7 systemd[1]: Failed to start Docker Application Cont...e.
Apr 20 03:24:24 centos7 systemd[1]: Unit docker.service entered failed state.

这是一个已知的bug(https://bugzilla.redhat.com/show_bug.cgi?id=1207839),需要将设备映射升级到最新。

[root@centos7 ~]# rpm -qa device-mapper
device-mapper-1.02.84-14.el7.x86_64
[root@centos7 ~]# yum update device-mapper
[root@centos7 ~]# rpm -qa device-mapper
device-mapper-1.02.93-3.el7.x86_64
[root@centos7 ~]# systemctl start docker

总结

尽管docker技术出现时间不长,但很快就变得非常流行了。它使得开发者的生活变得轻松,运维团队可以快速独立地创建和部署应用。通过该公司的发布,Docker的快速更新,产品质量的提升,满足用户需求,未来对于Docker来说一片光明。


via: http://linoxide.com/linux-how-to/docker-1-6-features-upgrade-fedora-centos/

作者:B N Poornima 译者:wi-cuckoo 校对:wxy

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

[20]:

来源:https://linux.cn/article-5488-1.html

Linux:如何在 CentOS Linux 中配置 MariaDB 复制

这是一个创建数据库重复版本的过程。复制过程不仅仅是复制一个数据库,同时也包括从主节点到一个从节点的更改同步。但这并不意味着从数据库就是和主数据库完全相同的副本,因为复制可以配置为只复制表结构、行或者列,这叫做局部复制。复制保证了特定的配置对象在不同的数据库之间保持一致。

Mariadb 复制概念

备份 :复制可以用来进行数据库备份。例如,当你做了主->从复制。如果主节点数据丢失(比如硬盘损坏),你可以从从节点中恢复你的数据库。

扩展 :你可以使用主->从复制作为扩展解决方案。例如,如果你有一些大的数据库以及SQL查询,使用复制你可以将这些查询分离到每个复制节点。写入操作的SQL应该只在主节点进行,而只读查询可以在从节点上进行。

分发解决方案 :你可以用复制来进行分发。例如,你可以将不同的销售数据分发到不同的数据库。

故障解决方案 : 假如你建立有主节点->从节点1->从节点2->从节点3的复制结构。你可以为主节点写脚本监控,如果主节点出故障了,脚本可以快速的将从节点1切换为新的主节点,这样复制结构变成了主节点->从节点1->从节点2,你的应用可以继续工作而不会停机。

复制的简单图解示范

mysql 复制原理

开始之前,你应该知道什么是二进制日志文件以及 Ibdata1。

二进制日志文件中包括关于数据库,数据和结构的所有更改的记录,以及每条语句的执行了多长时间。二进制日志文件包括一系列日志文件和一个索引文件。这意味着主要的SQL语句,例如CREATE, ALTER, INSERT, UPDATE 和 DELETE 会放到这个日志文件中;而例如SELECT这样的语句就不会被记录,它们可以被记录到普通的query.log文件中。

Ibdata1 简单的说据是一个包括所有表和所有数据库信息的文件。

主服务器配置

首先升级服务器

sudo yum install update -y && sudo yum install upgrade -y

我们工作在centos7 服务器上

sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

安装 MariaDB

sudo yum install mariadb-server -y

启动 MariaDB 并启用随服务器启动

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

输出如下:

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

检查 MariaDB 状态

sudo service mariadb status

或者使用

sudo systemctl is-active mariadb.service

输出如下:

Redirecting to /bin/systemctl status  mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

设置 MariaDB 密码

mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit

这里 SOME_ROOT_PASSWORD 是你的 root 密码。 例如我用”q”作为密码,然后尝试登录:

sudo mysql -u root -pSOME_ROOT_PASSWORD

输出如下:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

输入 ‘help;’ 或 ‘\h’ 查看帮助信息。 输入 ‘\c’ 清空当前输入语句。

让我们创建包括一些数据的表的数据库

创建数据库/模式

sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;

其中:

test_repl - 将要被复制的模式的名字

输出:如下

Query OK, 1 row affected (0.00 sec)

创建 Persons 表

mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

输出如下:

mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)

插入一些数据

mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

输出如下:

Query OK, 5 row affected (0.00 sec)

检查数据

mysql> select * from Persons;

输出如下:

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        2 | LastName2 | FirstName2 | Address2 | City2 |
|        3 | LastName3 | FirstName3 | Address3 | City3 |
|        4 | LastName4 | FirstName4 | Address4 | City4 |
|        5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+

来源:https://linux.cn/article-5491-1.html

Linux:如何在 Linux 中产生、加密或解密随机密码

我们一直积极地提供有关 Linux 技巧的系列文章,如果你错过了这个系列的最新文章,你或许可以去访问下面的链接。

在这篇文章中,我们将分享一些有趣 Linux 技巧,内容是有关如何产生随机密码以及加密或解密这些经过加盐或没有加盐处理的密码。

安全是数字时代中的一个主要话题。在电脑,email,云端,手机,文档和其他的场合中,我们都会使用到密码。众所周知,选择密码的基本原则是 “易记,难猜”。考虑过使用基于机器自动生成的密码吗?相信我,Linux 非常擅长这方面的工作。

1. 使用命令 pwgen来生成一个长度为 10 个字符的独特的随机密码。假如你还没有安装 pwgen,请使用 Apt 或 YUM 等包管理器来安装它。

$ pwgen 10 1

生成一个独特的随机密码

生成一个独特的随机密码

一口气生成若干组长度为 50 个字符的唯一的随机密码!

$ pwgen 50

生成多组随机密码

生成多组随机密码

2. 你还可以使用 makepasswd来每次生成一个给定长度的独特的随机密码。在你把玩 makepasswd 命令之前,请确保你已经安装了它。如若没有安装它,试试使用 Apt 或 YUM 包管理器来安装 makepasswd这个软件包。

生成一个长度为 10 个字符的随机密码。该命令产生的密码的长度默认为 10。

$ makepasswd

使用 makepasswd 生成独特的密码

使用 makepasswd 生成独特的密码

生成一个长度为 50 个字符的随机密码。

$ makepasswd  --char 50

生成长度为 50 的密码

生成长度为 50 的密码

生成 7 个长度为 20 个字符的随机密码。

$ makepasswd --char 20 --count 7

3. 使用带“盐”的 Crypt(注:这里应该指的是一个函数,可以参考这里 ) 来加密一个密码。提供手动或自动添加 “盐”。

对于那些不清楚 的意义的人,这里的 “盐” 指的是一个随机数据,它作为密码生成函数的一个额外的输入, 目的是保护密码免受词典攻击。

在执行下面的操作前,请确保你已经安装了 mkpasswd

下面的命令将带 “盐” 加密一个密码。“盐” 的值是随机自动生成的。所以每次你运行下面的命令时,都将产生不同的输出,因为它每次接受了随机取值的 “盐”。

$ mkpasswd tecmint

使用 Crypt 来加密密码

使用 Crypt 来加密密码

现在让我们来手动定义 “盐” 的值。每次它将产生相同的结果。请注意你可以输入任何你想输入的值来作为 “盐” 的值。

$ mkpasswd tecmint -s tt

带“盐”加密密码

带“盐”加密密码

另外, mkpasswd 还是交互式的,假如你在命令中没有提供密码,它将主动询问你来输入密码。

4. 使用 aes-256-cbc 加密算法并使用带“盐”的密码(如 “tecmint”) 加密一个字符串(如 “Tecmint-is-a-Linux-Community”)。

# echo Tecmint-is-a-Linux-Community | openssl enc -aes-256-cbc -a -salt -pass pass:tecmint

在 Linux 中加密一个字符串

在 Linux 中加密一个字符串

在上面例子中, echo 命令的输出通过管道传递给了 openssl 命令,使得该输出通过加密编码方式(enc:Encoding with Cipher ) 所加密,这个过程中使用了 aes-256-cbc 加密算法,并附带了密码 (tecmint) 和 “盐” 。

5. 使用 openssl 命令的 -aes-256-cbc 解密选项来解密上面的字符串。

# echo U2FsdGVkX18Zgoc+dfAdpIK58JbcEYFdJBPMINU91DKPeVVrU2k9oXWsgpvpdO/Z | openssl enc -aes-256-cbc -a -d -salt -pass pass:tecmint

在 Linux 中解密字符串

在 Linux 中解密字符串

现在就是这些内容了。

保持联系,保持连接,敬请关注。不要忘了在下面的评论中提供给我们您有价值的反馈。


via: http://www.tecmint.com/generate-encrypt-decrypt-random-passwords-in-linux/

作者:Avishek Kumar 译者:FSSlc 校对:wxy

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

来源:https://linux.cn/article-5486-1.html

Linux:使用一次性密码本通过 SSH 安全登录 Linux

有人说,安全不是一个产品,而是一个过程(LCTT 注:安全公司 McAfee 认为,安全风险管理是一个方法论,而不是安全产品的堆叠)。虽然 SSH 协议被设计成使用加密技术来确保安全,但如果使用不当,别人还是能够破坏你的系统:比如弱密码、密钥泄露、使用过时的 SSH 客户端等,都能引发安全问题。

在考虑 SSH 认证方案时,大家普遍认为公钥认证比密码认证更安全。然而,公钥认证技术并不是为公共环境设置的,如果你在一台公用电脑上使用公钥认证登录 SSH 服务器,你的服务器已经毫无安全可言了,公用的电脑可能会记录你的公钥,或从你的内存中读取公钥。如果你不信任本地电脑,那你最好还是使用其他方式登录服务器。现在就是“一次性密码(OTP)”派上用场的时候了,就像名字所示,一次性密码只能被使用一次。这种一次性密码非常合适在不安全的环境下发挥作用,就算它被窃取,也无法再次使用。

有个生成一次性密码的方法是通过谷歌认证器,但在本文中,我要介绍的是另一种 SSH 登录方案:OTPW,它是个一次性密码登录的软件包。不像谷歌认证,OTPW 不需要依赖任何第三方库。

OTPW 是什么

OTPW 由一次性密码生成器和 PAM 认证规则组成。在 OTPW 中一次性密码由生成器事先生成,然后由用户以某种安全的方式获得(比如打印到纸上)。另一方面,这些密码会通过 Hash 加密保存在 SSH 服务器端。当用户使用一次性密码登录系统时,OTPW 的 PAM 模块认证这些密码,并且保证它们不能再次使用。

步骤1:OTPW 的安装和配置

在 Debian, Ubuntu 或 Linux Mint 发行版上

使用 apt-get 安装:

$ sudo apt-get install libpam-otpw otpw-bin

打开针对 SSH 服务的 PAM 配置文件(/etc/pam.d/sshd),注释掉下面这行(目的是禁用 PAM 的密码认证功能):

#@include common-auth

添加下面两行(用于打开一次性密码认证功能):

auth       required     pam_otpw.so
session    optional     pam_otpw.so

在 Fedora 或 CentOS/RHEL 发行版上

在基于 RedHat 的发行版中没有编译好的 OTPW,所以我们需要使用源代码来安装它。

首先,安装编译环境:

$ sudo yum git gcc pam-devel
$ git clone https://www.cl.cam.ac.uk/~mgk25/git/otpw
$ cd otpw

打开 Makefile 文件,编辑以“PAMLIB=”开头的那行配置:

64 位系统:

PAMLIB=/usr/lib64/security

32 位系统:

PAMLIB=/usr/lib/security

编译安装。需要注意的是安装过程会自动重启 SSH 服务一下,所以如果你是使用 SSH 连接到服务器,做好被断开连接的准备吧(LCTT 译注:也许不会被断开连接,即便被断开连接,请使用原来的方式重新连接即可,现在还没有换成一次性口令方式。)。

$ make
$ sudo make install

现在你需要更新 SELinux 策略,因为 /usr/sbin/sshd 会往你的 home 目录写数据,而 SELinux 默认是不允许这么做的。如果没有使用 SELinux 服务(LCTT 注:使用 getenforce 命令查看结果,如果是 enforcing,就是打开了 SELinux 服务),请跳过这一步。

$ sudo grep sshd /var/log/audit/audit.log | audit2allow -M mypol
$ sudo semodule -i mypol.pp

接下来打开 PAM 配置文件(/etc/pam.d/sshd),注释下面这行(为了禁用密码认证):

#auth       substack     password-auth

添加下面两行(用于打开一次性密码认证功能):

auth       required     pam_otpw.so
session    optional     pam_otpw.so

步骤2:配置 SSH 服务器,使用一次性密码

打开 /etc/ssh/sshd_config 文件,设置下面三个参数。你要确保下面的参数不会重复存在,否则 SSH 服务器可能会出现异常。

UsePrivilegeSeparation yes
ChallengeResponseAuthentication yes
UsePAM yes

你还需要禁用默认的密码认证功能。另外可以选择开启公钥认证功能,那样的话你就可以在没有一次性密码的时候使用公钥进行认证。

PubkeyAuthentication yes
PasswordAuthentication no

重启 SSH 服务器。

Debian, Ubuntu 或 Linux Mint 发行版:

$ sudo service ssh restart

Fedora 或 CentOS/RHEL 7 发行版:

$ sudo systemctl restart sshd

(LCTT 译注:虽然这里重启了 sshd 服务,但是你当前的 ssh 连接应该不受影响,只是在你完成下述步骤之前,无法按照原有方式建立新的连接了。因此,保险起见,要么多开一个 ssh 连接,避免误退出当前连接;要么将重启 sshd 服务器步骤放到步骤3完成之后。)

步骤3:使用 OTPW 产生一次性密码

之前提到过,你需要事先创建一次性密码,并保存起来。使用 otpw-gen 命令创建密码:

$ cd ~
$ otpw-gen > temporary_password.txt

这个命令会让你输入密码前缀,当你以后登录的时候,你需要同时输入这个前缀以及一次性密码。密码前缀是另外一层保护,就算你的一次性密码表被泄漏,别人也无法通过暴力破解你的 SSH 密码。

设置好密码前缀后,这个命令会产生 280 个一次性密码(LCTT 译注:保存到 ~/.otpw 下),并将它们导出到一个文本文件中(如 temporary_password.txt)。每个密码(默认是 8 个字符)由一个 3 位十进制数索引。你需要将这个密码表打印出来,并随身携带。

查看 ./.otpw 文件,它存放了一次性密码的 HASH 值。头 3 位十进制数与你随身携带的密码表的索引一一对应,在你登录 SSH 服务器的时候会被用到。

$ more ~/.otpw

OTPW1
280 3 12 8
191ai+:ENwmMqwn
218tYRZc%PIY27a
241ve8ns%NsHFmf
055W4/YCauQJkr:
102ZnJ4VWLFrk5N
2273Xww55hteJ8Y
1509d4b5=A64jBT
168FWBXY%ztm9j%
000rWUSdBYr%8UE
037NvyryzcI+YRX
122rEwA3GXvOk=z

测试一次性密码登录 SSH 服务器

使用普通的方式登录 SSH 服务器:

$ ssh user@remote_host

如果 OTPW 成功运行,你会看到一点与平时登录不同的地方:

Password 191:

现在打开你的密码表,找到索引号为 191 的密码。

023 kBvp tq/G  079 jKEw /HRM  135 oW/c /UeB  191 fOO+ PeiD  247 vAnZ EgUt

从上表可知,191 号密码是“fOO+PeiD”。你需要加上密码前缀,比如你设置的前缀是“000”,则你实际需要输入的密码是“000fOO+PeiD”。

成功登录后,你这次输入的密码自动失效。查看 ~/.otpw 文件,你会发现第一行变成“—————”,这表示 191 号密码失效了。

OTPW1
280 3 12 8
---------------
218tYRZc%PIY27a
241ve8ns%NsHFmf
055W4/YCauQJkr:
102ZnJ4VWLFrk5N
2273Xww55hteJ8Y
1509d4b5=A64jBT
168FWBXY%ztm9j%
000rWUSdBYr%8UE
037NvyryzcI+YRX
122rEwA3GXvOk=z

总结

在这个教程中,我介绍了如何使用 OTPW 工具来设置一次性登录密码。你也许意识到了在这种双因子的认证方式中,打印一张密码表让人感觉好 low,但是这种方式是最简单的,并且不用依赖任何第三方软件。无论你用哪种方式创建一次性密码,在你需要在一个不可信任的环境登录 SSH 服务器的时候,它们都很有用。你可以就这个主题来分享你的经验和观点。


via: http://xmodulo.com/secure-ssh-login-one-time-passwords-linux.html

作者:Dan Nanni 译者:bazz2 校对:wxy

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

来源:https://linux.cn/article-5493-1.html

Linux:基于Kickstart自动化安装CentOS实践

前言

因为需要在浪潮的x86服务器中集中部署CentOS搭建基于Hadoop的大数据平台,平时接触SLES(SuSE Linux Enterprise Server)较多并且已经实现基于Autoyast方式使用光盘或者PXE网络自动化安装(后续会分享具体实现方法)。这次主要通过学习Kisckstart实现最简单的光盘方式自动化安装CentOS,而网上的大多数教程并不完全适用于自身的环境,本文将不再赘述Kickstart相关概念,细节可参考扩展阅读。

Kickstart是最为通用的Linux自动化安装方法之一

环境准备

定制系统

CentOS-6.4-x86_64

官方下载地址 – http://wiki.centos.org/Download

安装软件包

代理上网小技巧,export http_proxy=ip:port

yum -y install createrepo mkisofs

制作流程

目录结构

拷贝CentOS原始镜像内容,不做任何精简

mkdir /mnt/centos
mount /dev/sr0 /mnt/centos
mkdir /tmp/iso
cp -r /mnt/centos/* /tmp/iso

增加Kickstart配置文件

文件路径和安装方式可自由定义

cd /tmp/iso/isolinux
#修改引导,注意ks=部分
vi isolinux.cfg
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg
#手动增加Kickstart配置文件
vi ks.cfg
#Kickstart file automatically generated by anaconda.
#version=DEVEL
#Install OS instead of upgrade
#表示是安装,而不是升级
install
#Use text mode install
#文本方式安装
text
#Use network installation
#使用网络安装
#url --url=ftp://ip/centos
#Local installation Use CDROM installation media
#使用光盘安装
cdrom
#Installation Number configuration
#如果是RedHat的系统,会要求输入key,这里配置为跳过,如果不配置安装时会停在那里要求用户输入key
#key –skip
#System language
#语言环境
#lang en_US.UTF-8
lang zh_CN.UTF-8
#System keyboard
#键盘类型
keyboard us
#Network information
#网络配置
#network --device eth0 --bootproto dhcp --onboot yes
#Root password
#root密码
rootpw chinaums
#Firewall configuration
#禁用防火墙
firewall --disabled
#SELinux configuration
#禁用selinux
selinux --disabled
#Run the Setup Agent on first boot
#禁用第一次启动时设置系统的向导
firstboot --disable
#System authorization information
#用户认证配置,useshadow表示使用本地认证,--passalgo表示密码加密算法
authconfig --enableshadow --passalgo=sha512
#System timezone
#设置时区为上海
timezone --isUtc Asia/Shanghai
#System bootloader configuration
#指明bootloader的安装位置,指明驱动器的排序,指明操作系统安装完成之后,向内核传递的参数
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
#Clear the Master Boot Record
#清除MBR引导记录
zerombr yes
#Partition clearing information
#清除硬盘上的所有数据
clearpart --all --initlabel
#Disk partitioning information
#自定义分区
#创建一个200M大小的分区挂载/boot类型为ext4
part /boot --fstype=ext4  --size=200 --ondisk=sda
#创建一个20000M大小的SWAP分区
part swap --size=20000 --ondisk=sda
#创建/目录
part / --fstype=ext4 --grow --size=1 --ondisk=sda
#Reboot after installation
#设置完成之后重启
reboot --eject
#This packages is for CentOS 6.4
#为CentOS 6.4定制的软件包
%packages
@base
@core
@chinese-support
#增加安装后运行脚本
%post
#config service
#自定义服务
service NetworkManager stop
chkconfig NetworkManager off
#eject cdrom
#安装完成弹出光碟
#eject
#reboot
#执行完毕后重启
#reboot -f
#结束自动化部署
%end

生成依赖关系和ISO文件

注意路径和命令的准确性

cd /tmp/iso
createrepo -g repodata/*comps.xml .
mkisofs -o /tmp/CentOS-6.4_64_auto.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table  -joliet-long  -R -J -v -T /tmp/iso/

测试和建议

推荐两篇参考文献,建议先在虚拟机上反复测试验证再到物理机部署

更新历史

2015年05月20日 – 初稿

阅读原文 – http://wsgzao.github.io/post/kickstart/

扩展阅读

来源:http://wsgzao.github.io/post/kickstart/

Linux:SSH 远程连接服务慢的解决方案

连接慢的主要原因是DNS解析导致

解决方法:

1、在ssh服务端上更改/etc/ssh/sshd_config文件中的配置为如下内容:

UseDNS no
# GSSAPI options
GSSAPIAuthentication no

然后,执行/etc/init.d/sshd restart重启sshd进程使上述配置生效,在连接一般就不慢了。

2、如果还慢的话,检查ssh服务端上/etc/hosts文件中,127.0.0.1对应的主机名是否和 uname -n的结果一样,或者把本机ip和hostname(uname -n结果)加入到/etc/hosts里。

[root@C64 ~]# uname -n
C64
[root@C64 ~]# cat /etc/hosts
#modi by oldboy 11:12 2013/9/24
127.0.0.1   C64 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.18   C64
################

利用ssh -v的调试功能查找慢的原因

其实可以用下面的命令调试为什么慢的细节(学习这个思路很重要)。

[root@C64 ~]# ssh -v root@10.0.0.19
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 10.0.0.19 [10.0.0.19] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/identity type -1
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3
debug1: match: OpenSSH_4.3 pat OpenSSH_4*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
The authenticity of host '10.0.0.19 (10.0.0.19)' can't be established.
RSA key fingerprint is ca:18:42:76:0e:5a:1c:7d:ef:fc:24:75:80:11:ad:f9.
Are you sure you want to continue connecting (yes/no)? yes
=======>老男孩老师评:这里就是提示保存密钥的交互提示。
Warning: Permanently added '10.0.0.19' (RSA) to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Next authentication method: password
root@10.0.0.19's password:
=======>老男孩老师评:这里就是提示输入密码的交互提示。
debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
Last login: Tue Sep 24 10:30:02 2013 from 10.0.0.18

在远程连接时如果慢就可以确定卡在哪了。

[root@C64_A ~]# ssh -v oldboy@10.0.0.17
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 10.0.0.17 [10.0.0.17] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/identity type -1
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_dsa type 2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '10.0.0.17' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic

上述配置没配就发现卡到gssapi这。就大概知道是gssapi的问题。

实际上在linux系统优化部分就应该优化SSH服务的此处。

来源:http://oldboy.blog.51cto.com/2561410/1300964

Linux:在 CentOS 7.x / Fedora 21 上面体验 PHP 7.0

PHP是一种为我们熟知的通用服务器网页脚本语言。非常多的在线网站都是用PHP编写的。PHP这些年来一直在持续进化,丰富其功能,变得易于使用,更好地组织的脚本语言。目前PHP的开发团队正筹备下一个PHP版本的发行,名字是PHP 7。现在的PHP版本为PHP 5.6,可能你清楚PHP 6已经流产了,PHP 7的支持者们不希望下一个重要的版本被其他分支混淆,即过去已经停止很久的PHP 6。所以决定下一个PHP主要的发行版本叫PHP 7,而不是PHP 6。PHP 7.0预计在今年十一月份发行。

在下一代主要PHP版本里有一些不错的功能:

  • 为了改善执行效率与内存占用,新的版本添加了PHPNG功能。
  • 引入了JIT引擎来动态编译Zend操作码为自然机器码,以此来达到更快的处理性能。这项功能允许随后的程序调用同一份代码,这样会运行快很多。
  • AST(抽象语法树)是最新添加的功能,它可以增强支持PHP的扩展性和用户应用。
  • 添加异步编程功能以支持同一个请求中的并行任务。
  • 新的版本会支持独立的多线程网页服务器,这样可以使用一个单独的存储池处理很多并发的请求。

在CentOS/Fedora上安装PHP 7

让我们来看看怎样在CentOS 7和Fedora 21安装PHP7。为了安装PHP7,我们首先需要克隆php-src 仓库。当克隆工作完成,我们再配置和编译它。进行下一步之前,我们要确保已经在LInux系统下安装了如下的组件,否则PHP编译会返回错误中止。

  • Git
  • autoconf
  • gcc
  • bison

所有上面提到的要求可以使用Yum软件包管理器安装。以下一条命令即可完成:

yum install git autoconf gcc bison

准备好开始安装PHP7了吗?让我们先创建一个PHP7目录,作为你的当前工作目录。

mkdir php7
cd php7

现在克隆php-src仓库,在终端里运行下面的命令。

git clone https://git.php.net/repository/php-src.git

工作应该会在几分钟后完成,这里是一个样例输出,你应该会在任务完成时看见。

[root@localhost php7]# git clone https://git.php.net/repository/php-src.git
Cloning into 'php-src'...
remote: Counting objects: 615064, done.
remote: Compressing objects: 100% (127800/127800), done.
remote: Total 615064 (delta 492063), reused 608718 (delta 485944)
Receiving objects: 100% (615064/615064), 152.32 MiB | 16.97 MiB/s, done.
Resolving deltas: 100% (492063/492063), done.

让我们来配置,编译PHP7,在终端运行下面的命令,开始配置工作:

cd php-src
./buildconf

下面是./buildconf命令的样例输出。

[root@localhost php-src]# ./buildconf
buildconf: checking installation...
buildconf: autoconf version 2.69 (ok)
rebuilding aclocal.m4
rebuilding configure
rebuilding main/php_config.h.in

使用下面的命令,继续配置进程:

./configure \
--prefix=$HOME/php7/usr \
--with-config-file-path=$HOME/php7/usr/etc \
--enable-mbstring \
--enable-zip \
--enable-bcmath \
--enable-pcntl \
--enable-ftp \
--enable-exif \
--enable-calendar \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-curl \
--with-mcrypt \
--with-iconv \
--with-gmp \
--with-pspell \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-zlib-dir=/usr \
--with-xpm-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib=/usr \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-openssl \
--with-mysql=/usr \
--with-pdo-mysql=/usr \
--with-gettext=/usr \
--with-zlib=/usr \
--with-bz2=/usr \
--with-recode=/usr \
--with-mysqli=/usr/bin/mysql_config

这会花去不少的时间,当完成后你应该会看到如下面的输出:

creating libtool
appending configuration tag "CXX" to libtool
Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+
Thank you for using PHP.
config.status: creating php7.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands

运行下面的命令,完成编译过程。

make

“make”命令的样例输出如下所示:

Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
clicommand.inc
directorytreeiterator.inc
directorygraphiterator.inc
pharcommand.inc
invertedregexiterator.inc
phar.inc
Build complete.
Don't forget to run 'make test'.

活儿干完了,该安装PHP7了,运行下面的命令安装它。

make install

成功安装的进程的样例输出应该像这样:

[root@localhost php-src]# make install
Installing shared extensions:     /root/php7/usr/lib/php/extensions/no-debug-non-zts-20141001/
Installing PHP CLI binary:        /root/php7/usr/bin/
Installing PHP CLI man page:      /root/php7/usr/php/man/man1/
Installing PHP CGI binary:        /root/php7/usr/bin/
Installing PHP CGI man page:      /root/php7/usr/php/man/man1/
Installing build environment:     /root/php7/usr/lib/php/build/
Installing header files:          /root/php7/usr/include/php/
Installing helper programs:       /root/php7/usr/bin/
program: phpize
program: php-config
Installing man pages:             /root/php7/usr/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment:      /root/php7/usr/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.13
[PEAR] Console_Getopt - installed: 1.3.1
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.3
[PEAR] PEAR           - installed: 1.9.5
Wrote PEAR system config file at: /root/php7/usr/etc/pear.conf
You may want to add: /root/php7/usr/lib/php to your php.ini include_path
/root/php7/php-src/build/shtool install -c ext/phar/phar.phar /root/php7/usr/bin
ln -s -f /root/php7/usr/bin/phar.phar /root/php7/usr/bin/phar
Installing PDO headers:          /root/php7/usr/include/php/ext/pdo/

恭喜你,PHP7已经安装在你的Linux系统上了。安装完后,进入PHP7安装文件里的sapi/cli里面。

cd sapi/cli

验证一下PHP的版本。

[root@localhost cli]# ./php -v
PHP 7.0.0-dev (cli) (built: Mar 28 2015 00:54:11)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies

总结

PHP 7也添加到了remi仓库,这个即将到来的版本主要关注执行效率的提升,它的新特性致力于使PHP较好满足现代编程的需求和趋势。PHP 7.0将会有许多新的特性、丢弃一些老版本的东西。在接下来的日子里,我们希望看到新特性和弃用功能的具体情况。希望你喜欢!


via: http://linoxide.com/linux-how-to/install-php-7-centos-7-fedora-21/

作者:Aun Raza 译者:wi-cuckoo 校对:wxy

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

来源:https://linux.cn/article-5501-1.html

Linux:4个可以发送完整电子邮件的命令行工具

今天的文章里我们会讲到一些使用Linux命令行工具来发送带附件的电子邮件的方法。它有很多用处,比如在应用程序所在服务器上,使用电子邮件发送一个文件过来,或者你可以在脚本中使用这些命令来做一些自动化操作。在本文的例子中,我们会使用foo.tar.gz文件作为附件。

有不同的命令行工具可以发送邮件,这里我分享几个多数用户会使用的工具,如mailxmuttswaks

我们即将呈现的这些工具都是非常有名的,并且存在于多数Linux发行版默认的软件仓库中,你可以使用如下命令安装:

Debian / Ubuntu 系统

apt-get install mutt
apt-get install swaks
apt-get install mailx
apt-get install sharutils

在基于Red Hat的系统,如 CentOS 或者 Fedora

yum install mutt
yum install swaks
yum install mailx
yum install sharutils

1) 使用 mail / mailx

mailx工具在多数Linux发行版中是默认的邮件程序,现在已经支持发送附件了。如果它不在你的系统中,你可以使用上边的命令安装。有一点需要注意,老版本的mailx可能不支持发送附件,运行如下命令查看是否支持。

$ man mail

第一行看起来是这样的:

mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . .

如果你看到它支持-a的选项(-a 文件名,将文件作为附件添加到邮件)和-s选项(-s 主题,指定邮件的主题),那就是支持的。可以使用如下的几个例子发送邮件。

a) 简单的邮件

运行mail命令,然后mailx会等待你输入邮件内容。你可以按回车来换行。当输入完成后,按Ctrl + D,mailx会显示EOT表示结束。

然后mailx会自动将邮件发送给收件人。

$ mail user@example.com
HI,
Good Morning
How are you
EOT

b) 发送有主题的邮件

$ echo "Email text" | mail -s "Test Subject" user@example.com

-s的用处是指定邮件的主题。

c) 从文件中读取邮件内容并发送

$ mail -s "message send from file" user@example.com < /path/to/file

d) 将从管道获取到的echo命令输出作为邮件内容发送

$ echo "This is message body" | mail -s "This is Subject" user@example.com

e) 发送带附件的邮件

$ echo “Body with attachment "| mail -a foo.tar.gz -s "attached file" user@example.com

-a选项用于指定附件。

2) mutt

Mutt是类Unix系统上的一个文本界面邮件客户端。它有20多年的历史,在Linux历史中也是一个很重要的部分,它是最早支持进程打分和多线程处理的客户端程序之一。按照如下的例子来发送邮件。

a) 带有主题,从文件中读取邮件的正文,并发送

$ mutt -s "Testing from mutt" user@example.com < /tmp/message.txt

b) 通过管道获取echo命令输出作为邮件内容发送

$ echo "This is the body" | mutt -s "Testing mutt" user@example.com

c) 发送带附件的邮件

$ echo "This is the body" | mutt -s "Testing mutt" user@example.com -a /tmp/foo.tar.gz

d) 发送带有多个附件的邮件

$ echo "This is the body" | mutt -s "Testing" user@example.com -a foo.tar.gz –a bar.tar.gz

3) swaks

Swaks(Swiss Army Knife,瑞士军刀)是SMTP服务上的瑞士军刀,它是一个功能强大、灵活、可编程、面向事务的SMTP测试工具,由John Jetmore开发和维护。你可以使用如下语法发送带附件的邮件:

$ swaks -t "foo@bar.com" --header "Subject: Subject" --body "Email Text" --attach foo.tar.gz

关于Swaks一个重要的地方是,它会为你显示整个邮件发送过程,所以如果你想调试邮件发送过程,它是一个非常有用的工具。

它会给你提供了邮件发送过程的所有细节,包括邮件接收服务器的功能支持、两个服务器之间的每一步交互。

(LCTT 译注:原文此处少了 sharutils 的相关介绍,而多了 uuencode 的介绍。)

4) uuencode

邮件传输系统最初是被设计来传送7位编码(类似ASCII)的内容的。这就意味这它是用来发送文本内容,而不能发会使用8位的二进制内容(如程序文件或者图片)。uuencode(“UNIX to UNIX encoding”,UNIX之间使用的编码方式)程序用来解决这个限制。使用uuencode,发送端将二进制格式的转换成文本格式来传输,接收端再转换回去。

我们可以简单地使用uuencodemailx或者mutt配合,来发送二进制内容,类似这样:

$ uuencode example.jpeg example.jpeg | mail user@example.com

Shell脚本:解释如何发送邮件

#!/bin/bash
FROM=""
SUBJECT=""
ATTACHMENTS=""
TO=""
BODY=""
# 检查文件名对应的文件是否存在
function check_files()
{
output_files=""
for file in $1
do
if [ -s $file ]
then
output_files="${output_files}${file} "
fi
done
echo $output_files
}
echo "*********************"
echo "E-mail sending script."
echo "*********************"
echo
# 读取用户输入的邮件地址
while [ 1 ]
do
if [ ! $FROM ]
then
echo -n -e "Enter the e-mail address you wish to send mail from:\n[Enter] "
else
echo -n -e "The address you provided is not valid:\n[Enter] "
fi
read FROM
echo $FROM | grep -E '^.+@.+$' > /dev/null
if [ $? -eq 0 ]
then
break
fi
done
echo
# 读取用户输入的收件人地址
while [ 1 ]
do
if [ ! $TO ]
then
echo -n -e "Enter the e-mail address you wish to send mail to:\n[Enter] "
else
echo -n -e "The address you provided is not valid:\n[Enter] "
fi
read TO
echo $TO | grep -E '^.+@.+$' > /dev/null
if [ $? -eq 0 ]
then
break
fi
done
echo
# 读取用户输入的邮件主题
echo -n -e "Enter e-mail subject:\n[Enter] "
read SUBJECT
echo
if [ "$SUBJECT" == "" ]
then
echo "Proceeding without the subject..."
fi
# 读取作为附件的文件名
echo -e "Provide the list of attachments. Separate names by space.
If there are spaces in file name, quote file name with \"."
read att
echo
# 确保文件名指向真实文件
attachments=$(check_files "$att")
echo "Attachments: $attachments"
for attachment in $attachments
do
ATTACHMENTS="$ATTACHMENTS-a $attachment "
done
echo
# 读取完整的邮件正文
echo "Enter message. To mark the end of message type ;; in new line."
read line
while [ "$line" != ";;" ]
do
BODY="$BODY$line\n"
read line
done
SENDMAILCMD="mutt -e \"set from=$FROM\" -s \"$SUBJECT\" \
$ATTACHMENTS -- \"$TO\" <<< \"$BODY\""
echo $SENDMAILCMD
mutt -e "set from=$FROM" -s "$SUBJECT" $ATTACHMENTS -- $TO <<< $BODY

** 脚本输出 **

$ bash send_mail.sh
*********************
E-mail sending script.
*********************
Enter the e-mail address you wish to send mail from:
[Enter] test@gmail.com
Enter the e-mail address you wish to send mail to:
[Enter] test@gmail.com
Enter e-mail subject:
[Enter] Message subject
Provide the list of attachments. Separate names by space.
If there are spaces in file name, quote file name with ".
send_mail.sh
Attachments: send_mail.sh
Enter message. To mark the end of message type ;; in new line.
This is a message
text
;;

总结

有很多方法可以使用命令行/Shell脚本来发送邮件,这里我们只分享了其中4个类Unix系统可用的工具。希望你喜欢我们的文章,并且提供您的宝贵意见,让我们知道您想了解哪些新工具。


via: http://linoxide.com/linux-shell-script/send-email-subject-body-attachment-linux/

作者:Bobbin Zachariah 译者:goreliu 校对:wxy

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

来源:https://linux.cn/article-5502-1.html

Linux:Inxi:获取Linux的系统和硬件信息

我们已经展示了一些不同的应用程序和方法来获取Linux的系统和硬件信息。在这一系列里,我们将看到如何使用inxi来获取这些详情信息。在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息。

Inxi是一个可以获取完整的系统和硬件详情信息的命令行工具,内容包括:

  • 硬件
  • CPU
  • 磁盘驱动器
  • Xorg
  • 桌面环境
  • 内核
  • GCC版本
  • 进程
  • 内存占用
  • 和其他有用的信息

安装方法

Inxi在多数现代GNU/Linux操作系统的默认软件仓库中。所以我们可以简单地运行下列命令安装。

在基于Debian的发行版:

sudo apt-get install inxi

在Fedora:

sudo yum install inxi

在基于RHEL的发行版:

安装EPEL软件仓库:

sudo yum install epel-release

然后使用如下命令安装inxi:

sudo yum install inxi

使用方法

在终端运行如下命令可以获取系统的概况信息。

inxi

示例输出:

CPU~Dual core Intel Core i3-2350M CPU (-HT-MCP-) clocked at Min:800.000Mhz Max:1200.000Mhz Kernel~3.13.0-45-generic x86_64 Up~6:41 Mem~1537.7/3861.3MB HDD~500.1GB(52.5% used) Procs~183 Client~Shell inxi~1.9.17

当然,我们可以获取一个特定硬件的详情信息。比如获取声音/音频硬件详情信息,可以运行如下命令:

inxi -A

示例输出:

Audio:     Card: Intel 6 Series/C200 Series Family High Definition Audio Controller driver: snd_hda_intel
           Sound: Advanced Linux Sound Architecture ver: k3.13.0-45-generic

很酷是吧?

同样的,你可以获取显卡的详情信息。

inxi -G

示例输出:

Graphics:  Card: Intel 2nd Generation Core Processor Family Integrated Graphics Controller
           X.Org: 1.15.1 drivers: intel (unloaded: fbdev,vesa) Resolution: 1366x768@60.0hz
           GLX Renderer: Mesa DRI Intel Sandybridge Mobile GLX Version: 3.0 Mesa 10.3.0

硬盘信息呢?也是可以的。运行如下命令来获取完整的硬盘信息。

inxi -D

示例输出:

Drives:    HDD Total Size: 500.1GB (52.5% used) 1: id: /dev/sda model: ST9601325BD size: 500.1GB

显示Bios和主板详情信息:

inxi -M

示例输出:

Machine:   System: Dell (portable) product: Inspiron N5050
           Mobo: Dell model: 01HXXJ version: A05 Bios: Dell version: A05 date: 08/03/2012

不仅是硬性详情信息,它也可以显示我们系统中的可用软件仓库列表

inxi -r

示例输出:

Repos:     Active apt sources in file: /etc/apt/sources.list
           deb http://ubuntu.excellmedia.net/archive/ trusty main restricted
           deb-src http://ubuntu.excellmedia.net/archive/ trusty main restricted
           deb http://ubuntu.excellmedia.net/archive/ trusty-updates main restricted
           deb-src http://ubuntu.excellmedia.net/archive/ trusty-updates main restricted
           deb http://ubuntu.excellmedia.net/archive/ trusty universe
           .
           .
           Active apt sources in file: /etc/apt/sources.list.d/intellinuxgraphics.list
           deb https://download.01.org/gfx/ubuntu/14.04/main trusty main #Intel Graphics drivers
           Active apt sources in file: /etc/apt/sources.list.d/linrunner-tlp-trusty.list
           Active apt sources in file: /etc/apt/sources.list.d/wseverin-ppa-trusty.list
           deb http://ppa.launchpad.net/wseverin/ppa/ubuntu trusty main

Inxi还可以显示你所在位置的天气信息。感到意外吗?是的,它可以。

inxi -W Erode,Tamilnadu

这里Erode是地区,Tamilnadu是印度的一个邦。

示例输出:

Weather:   Conditions: 79 F (26 C) - Clear Time: February 4, 6:00 PM IST

查看完整的硬件详情信息

厌倦了逐一获取每种硬件的信息?你可以使用如下命令将所有信息一次列出:

inxi -F

示例输出:

System:    Host: sk Kernel: 3.13.0-45-generic x86_64 (64 bit) Desktop: LXDE (Openbox 3.5.2) Distro: Ubuntu 14.04 trusty
Machine:   System: Dell (portable) product: Inspiron N5050
           Mobo: Dell model: 01HXXJ version: A05 Bios: Dell version: A05 date: 08/03/2012
CPU:       Dual core Intel Core i3-2350M CPU (-HT-MCP-) cache: 3072 KB flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx)
           Clock Speeds: 1: 800.00 MHz 2: 1000.00 MHz 3: 800.00 MHz 4: 800.00 MHz
Graphics:  Card: Intel 2nd Generation Core Processor Family Integrated Graphics Controller
           X.Org: 1.15.1 drivers: intel (unloaded: fbdev,vesa) Resolution: 1366x768@60.0hz
           GLX Renderer: Mesa DRI Intel Sandybridge Mobile GLX Version: 3.0 Mesa 10.3.0
Audio:     Card: Intel 6 Series/C200 Series Family High Definition Audio Controller driver: snd_hda_intel
           Sound: Advanced Linux Sound Architecture ver: k3.13.0-45-generic
Network:   Card-1: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) driver: ath9k
           IF: wlan0 state: up mac:
           Card-2: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller driver: r8169
           IF: eth0 state: down mac:
Drives:    HDD Total Size: 500.1GB (52.5% used) 1: id: /dev/sda model: ST9500325AS size: 500.1GB
Partition: ID: / size: 455G used: 245G (57%) fs: ext4 ID: /boot size: 236M used: 159M (72%) fs: ext2
           ID: swap-1 size: 4.19GB used: 0.00GB (0%) fs: swap
RAID:      No RAID devices detected - /proc/mdstat and md_mod kernel raid module present
Sensors:   System Temperatures: cpu: 64.5C mobo: N/A
           Fan Speeds (in rpm): cpu: N/A
Info:      Processes: 186 Uptime: 6:52 Memory: 1547.2/3861.3MB Client: Shell (bash) inxi: 1.9.17

就像上面你看到的那样,inxi显示出了完整的硬件详情信息。

更多的细节可以参考man手册。

man inxi

结论

你在寻找一个可以显示完整的系统和硬件详情信息的简单工具吗?那么不用再找了,inxi会提供你所需要的。并且,它还是在你系统默认的软件仓库中的轻量级工具。你还想要更多东西吗?试一试它,你不会失望。

欢呼吧!


via: http://www.unixmen.com/inxi-find-system-hardware-information-linux/

作者:SK 译者:goreliu 校对:wxy

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

来源:https://linux.cn/article-5503-1.html