如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持
HTTP/2 是 HTTP 网络协议的主要修订版本，其专注于 HTTP 协议的性能改进。HTTP/2 协议的目标是减少延迟，并且允许在 Web 浏览器和服务器之间的一个连接上并行发起多个请求，因此 Web 应用程序会更快。在本篇教程中，我们将像你展示如何在安装有 Ubuntu 或 CentOS 作为操作系统的 Linux VPS 上使用开启 Nginx 的 HTTP/2 协议。如果你使用 Apache，你可以查看我们的另一篇教程：如何在 Ubuntu 上开启 Apache 的 HTTP/2 协议。必备条件为了能够按照本篇教程最终在服务器上启用 HTTP/2 协议，你需要先安装好 Nginx 。并且确保功能正常而且配置没有错误。你可以使用下面的命令来检查一下：sudo nginx -t 此外，你需要有服务器的 root 访问权限，或者至少有一个具有 sudo 权限的非 root 系统用户，以便你在修改 Nginx 配置文件的时候不会出现权限问题。最后你需要有一个域名和一个颁发给这个域名的有效的 SSL 证书。在 Ubuntu 上开启 Nginx 的 HTTP/2 协议为了在 Ubuntu VPS 上开启 Nginx 的 HTTP/2 协议，你需要编辑默认的 Nginx 的服务（server）块，我们使用的是 nano，你可以使用你自己的文本编辑器。sudo nano /etc/nginx/sites-available/default 增加下面的服务块：server { server_name domain.com www.domain.com; listen 443 ssl http2 default_server; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } ssl_certificate /etc/nginx/ssl/domain.com.crt; ssl_certificate_key /etc/nginx/ssl/domain.com.key; } server { listen 80; server_name domain.com www.domain.com; return 301 https://$server_name$request_uri; } 确保 domain.com 替换成你真正的域名。 此外，应正确设置文档根（root）目录，还有 SSL 证书和密钥的路径。当你编辑完成这个服务块之后，需要保存并关闭文件。使用以下命令检查 Nginx 配置是否有错误：sudo nginx -t 为了刚刚的改变生效，需要重启 Nginx：sudo systemctl restart nginx.service 如果你想为另一个域名开启 HTTP/2 协议，你可以查看我们的博客如何在 Ubuntu 和 CentOS 上设置 Nginx 服务块。在 CentOS 上开启 Nginx 的 HTTP/2 协议为了在 CentOS VPS 开启 Nginx 的 HTTP/2 协议，你需要按照 Ubuntu 上完全相同的步骤做。唯一的不同点是 Nginx 块文件的位置。为了在 CentOS 上编辑默认的 Nginx 服务块，你需要进入 /etc/nginx/conf.d 这个文件夹。# nano /etc/nginx/conf.d/default.conf 再次检查配置是否有错误，保存并关闭文件，然后使用以下命令重新启动 Nginx 服务：# systemctl restart nginx.service 为了检测 Nginx 的 HTTP/2 协议是否开启成功，你可以使用一些在线 HTTP/2 检测工具。via: https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/作者：rosehosting.com 译者：Flowsnow 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如果你运行了一个 web 服务器或者一台 VPS ，你可能需要在你的 PHP 程序中发送邮件。同样，如果你正在运行一个 WordPress 博客，或者你正在使用任何类型的 CMS ，你允许你的访问者通过联系表单向你发送电子邮件（例如使用 WordPress 的 Contact Form 7 插件），你可能需要安装一个名为 sendmail 的简单的程序到你的 web 服务器上。Sendmail 是一个通用的互联网电子邮件投递工具，支持多种邮件传输和传递方法，包括用于通过 Internet 进行电子邮件传输的简单邮件传输协议（SMTP）。来自 Wikipedia。Sendmail 可以通过你的发行版的软件包管理器安装。以下是在 CentOS 7 上安装 Sendmail 的说明。安装要在 CentOS 7 中安装 CentOS 7 ，运行下面的命令：# yum install sendmail 允许服务器可以发送邮件如果在 CentOS 7 中使用了 SELinux， 你需要使用下面的命令允许 sendmail 发送邮件：# setsebool -P httpd_can_sendmail=on 使用 PHP 发送一封测试邮件使用这个命令进入 php 交互 shell 中：php -a 在交互 shell 中，粘贴下面的代码：mail('user@receiver.com', "Test email", "Test email from the Internet", null, "-f user@sender.com"); 不要忘记将 user@receiver.com 和 user@sender.com 分别替换为你的收件地址和发件地址。浏览 sendmail 日志要监控邮件日志，你可以使用这个命令：tail /var/log/maillog 在服务器上安装 sendmail 完成后，你可以允许你的用户通过联系栏通过邮件联系你了。via: http://fasterland.net/sending-email-via-php-centos-7-using-sendmail.html作者：Francesco Mondello 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
对西部数据 My Passport Wireless 移动存储进行 Linux 魔改
虽然 WD My Passport Wireless 本身就是一个相当有用的设备，但它有一个轻量级但完整的 Linux 发行版提供支持的事实意味着其功能可以进一步扩展。例如，在设备上部署 rclone，这样你可以将存储在磁盘上的照片和 RAW 文件备份到任何支持的云存储服务中。在开始之前，你需要将设备连接到 Wi-Fi 网络并启用 SSH（以便你可以通过 SSH 访问底层 Linux 系统）。要将 WD My Passport Wireless 连接到当前的 Wi-Fi 网络中，请为设备供电并连接到从常规 Linux 计算机创建的无线热点。打开浏览器，进入 http://mypassport.local，然后登录到设备的 web 界面。切换到 Wi-Fi 一栏，并连接到现有的本地 Wi-Fi 网络。然后切换到管理员部分并启用 SSH 访问。在你的 Linux 机器上，打开终端并使用 ssh root@mypassport.local 连接到设备。使用下面的命令部署 rclone：curl -O http://downloads.rclone.org/rclone-current-linux-arm.zip unzip rclone-current-linux-arm.zip cd rclone-*-linux-arm cp rclone /usr/sbin/ chown root:root /usr/sbin/rclone chmod 755 /usr/sbin/rclone mkdir -p /usr/local/share/man/man1 sudo cp rclone.1 /usr/local/share/man/man1/ sudo mandb 完成后运行 rclone config 命令。由于在无外接显示器的机器上配置 rclone，请按照远程设置页面上的说明进行操作。你可以在 Linux Photography 这本书中找到有关配置和使用 rclone 的详细信息。你也可以将 WD My Passport Wireless 用到其他实际用途。由于设备附带了 Python，因此你可以在设备上运行脚本和基于 Python 的 web 应用程序。例如，你可以部署简单的 What’s in My Bag 程序来跟踪你的照相设备。curl -LOk https://github.com/dmpop/wimb/archive/master.zip unzip master.zip mv wimb-master/ wimb cd wimb curl -LOk https://github.com/bottlepy/bottle/raw/master/bottle.py 运行 ./wimb.py 启动应用，并在浏览器中打开 http://mypassport:8080/wimb 访问并使用程序。via: https://scribblesandsnaps.com/2017/02/10/wd-my-passport-wireless-linux-hacks/作者：Dmitri Popov 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在互联网成为一个巨大的、世界性的现象之前，开发团队常常被限制在一个小的物理空间内。如果公司没有资金支持的话，与世界另一方的人合作是一个非常昂贵或几乎不可能的梦想。幸运的是，情况不再是这样了。互联网诞生了基于网络的解决方案，允许公司组成合作团体，包括彼此相距数千英里的人。自从 2008 年首次推出以来，Bitbucket 已成为使用 Mercurial 或 Git 版本控制系统（VCS）的开发人员团队中越来越受欢迎的选择。它既提供免费帐户，带有不限数量的私人存储库（每个账户最多 5 个用户），也提供多种付费计划，允许每个帐户有更多用户。此外，标记为“公开”的仓库对可以编辑或读取其内容的人数没有限制。注册 Bitbucket要使用 Bitbucket，你需要建立一个免费帐户。要这样做，请进入 https://bitbucket.org/， 然后单击 免费开始 Get started for free 按钮。首先，你需要输入有效的电子邮件地址，然后点击继续。 你的电子邮件帐户将被验证，如果一切正常，你将被提示输入所需的密码。完成后，再次点击 继续，然后检查你的电子邮件收件箱，以确认你的帐户是否已创建：Bitbucket 注册验证电子邮件地址后，系统会要求你确定用户名。 然后将创建你的帐户，你将会进入 Bitbucket 面板，在那里开始创建团队、项目和仓库：Bitbucket 面板如你所见，你可以在几分钟内注册 Bitbucket。Atlassian 的人简化了这个过程，以便你可以把你的时间真正用在 Bitbucket 上 - 我们下面会进一步讲。使用 Bitbucket让我们浏览下注册 Bitbucket 之后必须要做的事情。它们都在顶部菜单中：探索 Bitbucket 功能1). 创建一个团队，通过允许多个 Bitbucket 用户共享一个账号计划的方式鼓励协作。这将允许他们轻松管理团队拥有的仓库。要创建团队，请输入团队名称，并确保团队标识不存在。接下来，输入你要添加到群组的人员的电子邮件地址，并指明是否要将其设为管理员。最后，单击创建：Bitbucket – 创建一个团队2) 创建或导入一个仓库如果你已经使用基于 Git 的解决方案，你可以轻松地将你的仓库导入 Bitbucket。否则，你可以从头创建一个。让我们看看在每种情况下你需要做什么。要创建新的仓库，请单击 仓库 Repositories 菜单中的 创建仓库 Create repository 选项。为新仓库和要分组到的项目选择一个名称。接下来，指明是否要将其设置为 private 并指定类型（Git 或 Mercurial）。最后，单击创建仓库：Bitbucket – 创建一个新仓库要导入已有仓库，请从仓库下拉菜单中选择 导入 Import 仓库。要开始导入，请指定源，输入 URL 和所需的登录凭据（如果需要）。最后，选择新的仓库设置，然后单击导入仓库。忽略有关在指定 URL 处找不到仓库的警告，因为它是虚拟的，仅用于演示目的：Bitbucket – 导入已有代码就是这样，很简单吧。在 Bitbucket 中使用仓库创建一个新仓库或者导入一个仓库后，它会在面板上展示出来。这时就能执行一些常规操作，如克隆、创建分支、pull request、提交修改、添加 README 文件等等：Bitbucket – 仓库概览如果想了解如何用仓库工作，或者想要提升你的 git 技能，可以参考 Bitbucket 官方文档。总结如你所见，不管你是版本管理的新手还是老手，Bitbucket 都能使管理变得更简单。如果你对本文有任何疑问或评论，请不要犹豫让我们知道。我们期待听到你的声音！作者简介：我是 Ravi Saive，TecMint 的原创作者。一个喜爱在互联网上分享技巧和提示的计算机 geek 和 Linux 老手。我的大多数服务运行在 Linux 开源平台上。请在 Twitter、Facebook、Google+ 上关注我。via: http://www.tecmint.com/bitbucket-for-version-control/作者：Ravi Saive 译者：geekpi 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
如何在 CentOS 7 中使用 Nginx 和 PHP7-FPM 安装 Nextcloud
Nextcloud 是一款自由 (开源) 的类 Dropbox 软件，由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写，支持多种数据库系统，比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 SQLite。它可以使你的桌面系统和云服务器中的文件保持同步，Nextcloud 为 Windows、Linux、Mac、安卓以及苹果手机都提供了客户端支持。Nextcloud 并非只是 Dropbox 的克隆，它还提供了很多附加特性，如日历、联系人、计划任务以及流媒体 Ampache。在这篇文章中，我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 10。我会通过 Nginx 和 PHP7-FPM 来运行 Nextcloud，同时使用 MariaDB 做为数据库系统。先决条件64 位的 CentOS 7服务器的 Root 权限步骤 1 - 在 CentOS 7 中安装 Nginx 和 PHP7-FPM在开始安装 Nginx 和 php7-fpm 之前，我们还学要先添加 EPEL 包的仓库源。使用如下命令：yum -y install epel-release 现在开始从 EPEL 仓库来安装 Nginx：yum -y install nginx 然后我们还需要为 php7-fpm 添加另外一个仓库。互联网中有很个远程仓库提供了 PHP 7 系列包，我在这里使用的是 webtatic。添加 PHP7-FPM webtatic 仓库：rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 然后就是安装 PHP7-FPM 以及 Nextcloud 需要的一些包。yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-json php70w-pecl-apcu php70w-pecl-apcu-devel 最后，从服务器终端里查看 PHP 的版本号，以便验证 PHP 是否正确安装。php -v 步骤 2 - 配置 PHP7-FPM在这一个步骤中，我们将配置 php-fpm 与 Nginx 协同运行。Php7-fpm 将使用 nginx 用户来运行，并监听 9000 端口。使用 vim 编辑默认的 php7-fpm 配置文件。vim /etc/php-fpm.d/www.conf 在第 8 行和第 10行，user 和 group 赋值为 nginx。user = nginx group = nginx 在第 22 行，确保 php-fpm 运行在指定端口。listen = 127.0.0.1:9000 取消第 366-370 行的注释，启用 php-fpm 的系统环境变量。env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp 保存文件并退出 vim 编辑器。下一步，就是在 /var/lib/ 目录下创建一个新的文件夹 session，并将其拥有者变更为 nginx 用户。mkdir -p /var/lib/php/session chown nginx:nginx -R /var/lib/php/session/ 然后启动 php-fpm 和 Nginx，并且将它们设置为随开机启动的服务。sudo systemctl start php-fpm sudo systemctl start nginx sudo systemctl enable php-fpm sudo systemctl enable nginx PHP7-FPM 配置完成步骤 3 - 安装和配置 MariaDB我这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 yum 命令从 CentOS 默认远程仓库中安装 mariadb-server 包。yum -y install mariadb mariadb-server 启动 MariaDB，并将其添加到随系统启动的服务中去。systemctl start mariadb systemctl enable mariadb 现在开始配置 MariaDB 的 root 用户密码。mysql_secure_installation 键入 Y ，然后设置 MariaDB 的 root 密码。Set root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y 这样就设置好了密码，现在登录到 mysql shell 并为 Nextcloud 创建一个新的数据库和用户。这里我创建名为 nextcloud_db 的数据库以及名为 nextclouduser 的用户，用户密码为 nextclouduser@。当然了，要给你自己的系统选用一个更安全的密码。mysql -u root -p 输入 MariaDB 的 root 密码，即可登录 mysql shell。输入以下 mysql 查询语句来创建新的数据库和用户。create database nextcloud_db; create user nextclouduser@localhost identified by 'nextclouduser@'; grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextclouduser@'; flush privileges; nextcloud_db 数据库和 nextclouduser 数据库用户创建完成步骤 4 - 为 Nextcloud 生成一个自签名 SSL 证书在教程中，我会让客户端以 https 连接来运行 Nextcloud。你可以使用诸如 let's encrypt 等免费 SSL 证书，或者是自己创建自签名 (self signed) SSL 证书。这里我使用 OpenSSL 来创建自己的自签名 SSL 证书。为 SSL 文件创建新目录：mkdir -p /etc/nginx/cert/ 如下，使用 openssl 生成一个新的 SSL 证书。openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key 最后使用 chmod 命令将所有证书文件的权限设置为 600。chmod 700 /etc/nginx/cert chmod 600 /etc/nginx/cert/* 步骤 5 - 下载和安装 Nextcloud我直接使用 wget 命令下载 Nextcloud 到服务器上，因此需要先行安装 wget。此外，还需要安装 unzip 来进行解压。使用 yum 命令来安装这两个程序。yum -y install wget unzip 先进入 /tmp 目录，然后使用 wget 从官网下载最新的 Nextcloud 10。cd /tmp wget https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip 解压 Nextcloud，并将其移动到 /usr/share/nginx/html/ 目录。unzip nextcloud-10.0.2.zip mv nextcloud/ /usr/share/nginx/html/ 下一步，转到 Nginx 的 web 根目录为 Nextcloud 创建一个 data 文件夹。cd /usr/share/nginx/html/ mkdir -p nextcloud/data/ 变更 nextcloud 目录的拥有者为 nginx 用户和组。chown nginx:nginx -R nextcloud/ 步骤 6 - 在 Nginx 中为 Nextcloud 配置虚拟主机在步骤 5 我们已经下载好了 Nextcloud 源码，并配置好了让它运行于 Nginx 服务器中，但我们还需要为它配置一个虚拟主机。在 Nginx 的 conf.d 目录下创建一个新的虚拟主机配置文件 nextcloud.conf。cd /etc/nginx/conf.d/ vim nextcloud.conf 将以下内容粘贴到虚拟主机配置文件中：upstream php-handler { server 127.0.0.1:9000; #server unix:/var/run/php5-fpm.sock; } server { listen 80; server_name cloud.nextcloud.co; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name cloud.nextcloud.co; ssl_certificate /etc/nginx/cert/nextcloud.crt; ssl_certificate_key /etc/nginx/cert/nextcloud.key; # Add headers to serve security related headers # Before enabling Strict-Transport-Security headers please read into this # topic first. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; # Path to the root of your installation root /usr/share/nginx/html/nextcloud/; location = /robots.txt { allow all; log_not_found off; access_log off; } # The following 2 rules are only needed for the user_webfinger app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/host-meta /public.php?service=host-meta last; #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json # last; location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } # set max upload size client_max_body_size 512M; fastcgi_buffers 64 4K; # Disable gzip to avoid the removal of the ETag header gzip off; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location / { rewrite ^ /index.php$uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_request_buffering off; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } # Adding the cache control header for js and css files # Make sure it is BELOW the PHP block location ~* \.(?:css|js)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=7200"; # Add headers to serve security related headers (It is intended to # have those duplicated to the ones above) # Before enabling Strict-Transport-Security headers please read into # this topic first. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; # Optional: Don't log access to assets access_log off; } location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ { try_files $uri /index.php$uri$is_args$args; # Optional: Don't log access to other assets access_log off; } }保存文件并退出 vim。下载测试以下该 Nginx 配置文件是否有错误，没有的话就可以重启服务了。nginx -t systemctl restart nginx 步骤 7 - 为 Nextcloud 配置 SELinux 和 FirewallD 规则本教程中，我们将以强制模式运行 SELinux，因此需要一个 SELinux 管理工具来为 Nextcloud 配置 SELinux。使用以下命令安装 SELinux 管理工具。yum -y install policycoreutils-python 然后以 root 用户来运行以下命令，以便让 Nextcloud 运行于 SELinux 环境之下。如果你是用的其他名称的目录，记得将 nextcloud 替换掉。semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/config(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/apps(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/assets(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.htaccess' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.user.ini' restorecon -Rv '/usr/share/nginx/html/nextcloud/' 接下来，我们要启用 firewalld 服务，同时为 Nextcloud 开启 http 和 https 端口。启动 firewalld 并设置随系统启动。systemctl start firewalld systemctl enable firewalld 现在使用 firewall-cmd 命令来开启 http 和 https 端口，然后重新加载防火墙。firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload 至此，服务器配置完成。步骤 8 - Nextcloud 安装打开你的 Web 浏览器，输入你为 Nextcloud 设置的域名，我这里设置为 cloud.nextcloud.co，然后会重定向到安全性更好的 https 连接。设置你的管理员用户名和密码，然后输入数据验证信息，点击 '完成安装 (Finish Setup)'。Nextcloud 管理面板大致如下：Nextcloud 用户设置：管理设置：至此，我们在 CentOS 7 服务器上通过使用 Nginx、PHP7-FPM、MariaDB 完成了 Nextcloud 的安装。参考链接https://docs.nextcloud.com/译者简介：GHLandy —— 划不完粉腮柳眉泣别离。via: https://www.howtoforge.com/tutorial/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/作者：Muhammad Arul 译者：GHLandy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
CoreFreq 是一个用于英特尔 64 位处理器的 CPU 监控程序，并且支持 Atom、Core2、Nehalem、SandyBridge 及以上、还有 AMD 0F 家族。它的核心建立在内核模块上，用于从每个 CPU 核心检索内部性能计数器，并且与收集数据的守护进程一起工作，一个小型控制台客户端连接到该守护程序并显示收集的数据。它提供了高精度的重新捕获 CPU 数据的基础工作：核心频率和比率；SpeedStep（EIST）、Turbo Boost、超线程（HTT）以及 基本时钟 （ Base Clock ） 。性能计数器结合 时间戳计数器 （ Time Stamp Counter ） （TSC）、 非停机核心周期 （ Unhalted Core Cycles ） （UCC）、 非停机引用周期 （ Unhalted Reference Cycles ） （URC）。每周期或每秒的指令数：IPS、IPC 或 CPI。CPU C 状态： C0 C1 C3 C6 C7 - C1E - C1、C3 的自动/ 非降级 （ UnDemotion ） 。带有 Tjunction Max 的 DTS 温度、 热监测 （ Thermal Monitoring ） TM1、TM2 状态。包括用于自举的高速缓存和应用程序 CPU 拓扑图。处理器特性、品牌、架构字符串。注意：此工具更适用于 Linux 专家用户和经验丰富的系统管理员，但新手用户可以逐步学习如何使用它。CoreFreq 如何工作它通过调用一个 Linux 内核模块实现，它使用了：汇编代码保持尽可能接近性能计数器读数。按每个 CPU 影响的 slab 数据内存加上高分辨率定时器。支持 CPU 暂停/恢复和 CPU 热插拔。使用共享内存来保护内核免受来自用户空间程序的损害。使用原子级同步的线程来消除互斥和死锁。如何在 Linux 中安装 CoreFreq要安装 CoreFreq，你首先需要安装依赖程序（开发工具）来编译并从源码构建程序。$ sudo yum group install 'Development Tools' [On CentOS/RHEL] $ sudo dnf group install 'Development Tools' [On Fedora 22+ Versions] # sudo apt-get install dkms git libpthread-stubs0-dev [On Debian/Ubuntu] 接下来克隆 Github 上 CoreFreq 源码，进入下载文件夹并编译构建程序：$ git clone https://github.com/cyring/CoreFreq.git $ cd CoreFreq $ make 构建 CoreFreq 程序注意：Arch Linux 用户可以从 AUR 中安装 corefreq-git。现在运行以下命令从本地目录加载 Linux 内核模块，接着运行守护程序：$ sudo insmod corefreqk.ko $ sudo ./corefreqd 接着使用普通用户启动客户端。$ ./corefreq-cli CoreFreq Linux CPU 监控在上面的界面中，你可以使用这些快捷键：使用 F2 显示屏幕顶部显示的使用菜单。使用 右 和 左 箭头移动菜单选项卡。使用 上和 下 箭头选择菜单项，然后单击回车。使用 F4 关闭程序。使用 h 打开快速参考。要查看所有的使用选项，请输入以下命令：$ ./corefreq-cli -h CoreFreq 选项：CoreFreq. Copyright (C) 2015-2017 CYRIL INGENIERIE usage: corefreq-cli [-option <arguments>] -t Show Top (default) -d Show Dashboard arguments: <left> <top> <marginWidth> <marginHeight> -c Monitor Counters -i Monitor Instructions -s Print System Information -M Print Memory Controller -m Print Topology -u Print CPUID -k Print Kernel -h Print out this message Exit status: 0 if OK, 1 if problems, >1 if serious trouble. Report bugs to labs[at]cyring.fr 要打印内核的信息，运行：$ ./corefreq-cli -k 打印 CPU 细节信息：$ ./corefreq-cli -u 你也可以实时监控 CPU 指令：$ ./corefreq-cli -i 如下启用计数器追踪：$ ./corefreq-cli -c 有关更多信息和用法，请访问 CoreFreq 的 Github 仓库：https://github.com/cyring/CoreFreq 。在本文中，我们评估了一个强大的 CPU 监控工具，这对于 Linux 专家或经验丰富的系统管理员来说可能比新手用户更有用。通过下面的评论栏与我们分享你对这个工具或任何相关的想法。作者简介：Aaron Kili 是 Linux 和 F.O.S.S 爱好者，将来的 Linux 系统管理员和网络开发人员，目前是 TecMint 的内容创作者，他喜欢用电脑工作，并坚信分享知识。via: http://www.tecmint.com/corefreq-linux-cpu-monitoring-tool/作者：Aaron Kili 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
你的 Ubuntu 系统可以运行得如此顺畅，以至于你会奇怪为什么没有早一些从那些桌面加载很慢的操作系统（比如 Windows）转过来。Ubuntu 在大多数现代化的机器上都能够很顺畅的运行，一些更老的机器使用 Ubuntu 系统的一些变种版本，比如 Lubuntu、Xubuntu 和 Ubuntu MATE，同样给人留下了深刻印象。极少的情况下，你对 Ubuntu 桌面的使用体验会越来越糟。如果非常不走运，你的 Ubuntu 系统并没有像你所希望的那样运行顺畅，那么你可以做一些事情来提高系统性能和响应速度。不过首先我们来看一看为什么电脑会运行得很慢？下面是我列举的一些原因：电脑陈旧安装了太多的应用系统里的一些东西坏了还有更多的原因...现在让我们来看一些改善这个问题的技巧。1、 交换值 Swappiness 如果你的系统有一个交换分区，那么这个技巧对你是最适合的（注：交换分区不建议为固态驱动器，因为这样会缩短驱动器的使用寿命）。交换分区可以帮助系统，特别是内存容量较低的系统，来管理系统内存。将数据写入交换分区（硬盘）比写入内存要慢一些，所以你可以通过减少 swappiness 值来限制数据写入交换分区的频率。默认情况下， Ubuntu 的 swappiness 值是 60%， 所以你可以通过下面的命令将它减至 10%：sudo bash -c "echo 'vm.swappiness = 10' >> /etc/sysctl.conf" 2、 停止索引索引的目的是加快搜索结果，但另一方面，索引会导致较老配置的系统出现一些问题。为了停止索引，输入下面的命令来移除索引工具：sudo apt-get purge apt-xapian-index 3、 管理 启动应用 startup applications 启动应用会对系统性能造成很大的影响。当你安装一些应用以后，这些应用会添加启动项，从而当你启动系统的时候它们也跟着启动，但你可以移除这些应用以提高系统性能。通过在 Unity 窗口搜索打开 “启动应用”。绝大多数自启动选项都会被隐藏，所以在终端输入下面的命令使它们可见然后你就可以停止某些 “启动应用”了：sudo sed -i "s/NoDisplay=true/NoDisplay=false/g" /etc/xdg/autostart/\*.desktop 4、 尝试预载入预载入（preload） 是一个守护进程/后台服务，它可以监控系统上使用的应用程序，它会将所需要的二进制库在其需要加载到内存前就预先载入，以便应用程序启动得更快。在终端输入下面的命令安装预载入：sudo apt-get install preload 5、 选择更加轻量型的应用你在 Ubuntu 桌面上使用什么应用程序呢？有更轻量的替代品吗？如果有，就替换成它们——如果它们也能满足你的需求的话。 LibreOffice 能够给你最好的办公体验，但是它的替代品，比如 Abiword 能够很大程度的改善系统性能。6、 切换到一个更加轻量型的桌面环境你在 Ubuntu 系统上使用的桌面环境是 Unity 或 KDE 吗？这些桌面环境对系统的要求很高。相反，你可以在当前桌面环境之外同时安装一个 LxQt 或者 XFCE 环境，然后切换到它们。或者，你也可以换到 Ubuntu 的不同变种版本，比如 Lubuntu 或 Xubuntu ，从而享受更快的体验。7、 清理系统垃圾尽管 Ubuntu 系统不会变得像 Windows 系统那么慢，但它还是会变慢。清除系统里不需要的文件可以改善系统性能。尝试使用 Ubuntu Tweak 工具中的 Janitor 工具来清理系统。还有一个 Bleachbit 工具也可用来清理系统。同时请阅读 - Bleachbit - CCleaner 的一个替代品8、 尝试重新安装有时，一些东西可能坏了，清理垃圾或者使用上面提到的大多数技巧都没用。这时，你唯一的选择就是备份文件，然后尝试重新安装。9、 升级硬件我列表上的最后一个技巧是升级硬件。在绝大多数情况下，这是可以的。如果可以这样做，那将极大的提高系统性能。你可以增加已安装的内存， 从传统磁盘切换到固态驱动器或者升级你的处理器，特别是如果你在台式电脑上运行 Ubuntu 系统，这将极大提高系统性能。结论我希望这些技巧能够陪伴你走很长的一段路，让你的 Ubuntu 桌面以一个令人印象深刻的速度运行。注意，你不需要尝试所有的技巧，只需要找到一个适合你的情况的技巧，然后观察系统响应如何变化。你还知道其他提高 Ubuntu 系统性能的技巧吗？请在评论里分享给我们。via: http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed作者：linuxandubuntu.com 译者：ucasFL 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
备份 Android 系统上的应用数据、文本信息等等是非常乏味的，有时还很昂贵。电子市场的许多应用都承诺可以备份数据，但效果不佳或者需要付昂贵费用。你是否知道有一种更好的方法可以来做这件事，并且在你的电脑上就可以完成？Android 自带一套开发工具。有许多种开发工具，但人们最为感兴趣的项目是 ADB（或者叫做 Android 调试桥 Android Debug Bridge ）。它允许用户通过命令行直接访问任何 Android 设备。有了这个工具，一切皆有可能 - 包括备份整个 Android 设备。在这篇文章中，将讨论如何在 Ubuntu 系统上完成这件事。注：这篇教程是针对 Ubuntu Linux 系统的。不过， ADB 在 Windows 系统和 Mac 上也是可用的，也可以在这些平台上对 Android 数据进行备份。下载针对 Windows 和 Mac 的 ADB 版本。安装 ADB 并启用 USB 调试打开一个终端窗口，然后输入下面的命令来安装 ADB，它将与 Android 进行会话。sudo apt install adb 在系统上安装好 ADB 工具以后，需要在 Android 内部启动调试。首先打开 Android 的 设置 Settings 区域。然后一直滚动到底部找到“ 关于手机 About Phone ”并点击。这将打开“ 电话状态 Phone status ”页。在这一页面上再次滚动到底部，找到“ 版本号 Build number ”并点击七次，从而启动开发者模式。为了进入 开发者设置 Developer Settings ，按设备上的返回键返回上一页面。在“设置”中将会出现一个新的选项：“ 开发者选项 Developer options ”。点击它进入开发者设置区域。滚动页面直到看到 “ Android 调试 Android debugging ”（或它的一些其他名称），点击它启用设置。备份使用 ADB 创建一个备份就如同运行一个命令一样简单。首先，用一根与 Android 设备匹配的 USB 线将 Android 设备连接到电脑上。然后打开终端运行下面的命令：adb start-server 这将启动 ADB 服务器。运行这个命令时，要快速解锁 Android 设备，因为 ADB 将强制出现一个确认窗口，必须选择接受后才可继续。要启动备份进程，打开终端，然后执行下面的备份命令。该命令将读取 Android 上的文本信息以及其他应用数据，然后存入加密文件中。adb backup -apk -shared -all -f backup-file.adb 当运行备份命令时，Android 会在启动备份进程前提示用户查看 Android 并设置加密文件的密码。请输入一个强壮而容易记住的密码。然后，点击“备份我的数据”按钮。备份过程将会花费一定时间。备份完成以后，在目录 /home/username/ 中会出现一个叫做 backup-file.adb 的文件。恢复备份要恢复备份，首先启用 ADB 服务器（像上面提到的一样），然后运行下面这个命令来还原备份数据：adb restore backup-file.adb 再次转到 Android， 因为 ADB 将提示用户输入密码。这次，不是创建一个密码，而是需要输入之前创建的那个密码。在点击 “ 恢复我的数据 restore my data ” 以后，恢复进程就开始了。耐心点，因为这可能需要一定时间。结论没有多少 Android 用户知道这样备份数据，但是 ADB 的确很强大。利用它甚至可以获得对设备的 root 访问。事实上，利用这个工具还可以做很多的事情，需要更多的文章来讨论它。你还知道 ADB 可以用来干什么吗？请在下面的评论区告知我们！via: https://www.maketecheasier.com/back-up-android-data-adb-ubuntu/作者：Derrik Diener 译者：ucasFL 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
探索 rsync 在备份方案中的作用。在系统管理员的工作中备份无疑是一个重要的部分。当没有完整备份或者良好规划的备份和实施时，就可能或早或晚不可挽回地丢失重要的数据。所有公司，无论大小，都运营在数据之上。考虑到丢失业务数据造成的经济和业务损失，从最小的个人公司到最大的跨国企业，没有一个公司能在丢失大部分数据以后得以幸存。你的办公室可以通过保险赔偿重建，但是你的数据就不可能再恢复了。这里提到的丢失是指数据的完全损坏。而不是指数据被偷走，那是另一种灾难。我这里说的是数据被完全摧毁。即使你只是个人用户而不是一个企业，备份你自己的数据也是非常重要的，我有二十年来的个人财务数据和我现在已经关闭的企业的数据，以及大量的电子发票。也包括近年来我创作的大量不同类型的文档、报告和数据报表。我不想失去任何这些数据。所以备份是我数据长期安全的必要保障。备份软件选择有许多软件可以执行备份。大多数 Linux 发行版提供至少一种开源的备份软件。同时也有许多商业备份软件，但是这些都不符合我的需求，所以我决定使用基础的 Linux 工具来进行备份。在我为 Open Source Yearbook 写的文章， 最佳搭档之 2015：tar 和 ssh 中，我说明了昂贵的商业备份软件在设计实施可行的备份计划中并不是必要的。从去年开始我尝试了另一种选择， rsync 命令，它有许多我已经从中受益的有趣特性。我的主要需求是所创建的备份，用户不需要解压备份压缩包就能定位和恢复文件，以便节约创建备份的时间。这篇文章的目的只是为了说明 rsync 在我的备份方案中的作用。并不是 rsync 的全部能力或者它的各种适用场景的概览。rsync 命令Andrew Tridgell 和 Paul Mackerras 编写了 rsync ，首次发布于 1996 年。它的目标是向另一台电脑同步文件。你注意到了他们为什么取这个名字了吗（remotely synchronize）？它是大多数发行版都提供的开源软件。rsync 能够用于同步两个目录或目录树，无论它们是在同一个计算机上还是不同的计算机上，而且不仅如此，它还能做到更多。它创建或者更新的目录与源目录完全一样。新的目录不是以 tar 或 zip 等打包存储，而是普通的目录和文件，常见的 Linux 工具都能轻松访问，而这正是我所需要的。rsync 的最重要的特性之一是它处理源目录被修改的已有文件的方式。它使用分块校验来比较源文件和目标文件，而不是从源把整个文件复制过去。如果两个文件所有块的校验和都相同，那么就不用传输数据。否则只有被改变的块被传输。这样节约了远程同步消耗的大量时间和带宽。比如，我第一次使用 rsync 脚本来把我所有的主机备份到一个外接的大型 usb 硬盘上需要三个小时，因为所有的数据都需要传输过去。而接下来的备份需要的时间就只是 3 到 8 分钟，这取决于上次备份以来创建和改变了多少文件。我使用 time 命令来记录实际花费的时间。昨天晚上，我只花了三分钟来从六个远程系统和本地工作站备份大概 750 Gb 数据。实际上只有在白天改变的几百 Mb 数据需要备份。下面的命令可以用来同步两个目录及其任意子目录的内容。也就是说，在新目录的内容和源目录同步完之后，它们的内容完全一样。rsync -aH sourcedir targetdir -a 选项表示归档模式，它会保持权限、所有关系和符号（软）链接。-H 选项用来保持硬链接。注意源目录和目标目录都可以在远程主机上。假设昨天我们使用 rsync 同步了两个目录。今天我们想再同步一次，但是我们从源目录删除了一些文件。rsync 默认只复制新的和改变过的文件到新目录里，而不去改变新目录里被我们删除的文件，但是如果你想让那些在源目录里被删除的文件在新目录里也被删除，那么你可以加上 --delete 选项来删除。另一个有趣的选项，也是我个人最喜欢的选项是 --link-dest，因为它极大地增加了 rsync 的能力和灵活性。--link-dest 使每日备份只花费很少的额外空间和很短的时间。用这个选项指定前一天的备份目录，以及今天的备份目录，然后 rsync 会创建今天的新备份目录，并将昨天备份目录里的每一个文件在今天的备份目录中创建硬链接。现在我们在今天的备份目录中有一大堆指向昨天备份的硬链接。文件没有被重复创建，而是创建了一些硬链接。对于硬链接，在 Wikipedia 中有非常详细的描述。而在用昨天的备份目录文件的硬链接创建了今天的备份之后，rsync 和平常一样进行备份，如果在文件中检测到了变化，就不会做硬链接，而是从昨天的备份目录里复制一个文件的副本，再把源文件中变化的部分复制过去。（LCTT 译注：此处疑似原文表述不清，参见 generator.c 的 try_dests_reg 函数，先根据 match_level 选择复制或者硬链接，而不是创建硬链接后再判断 match_level）现在我们的命令类似于下面这样。rsync -aH --delete --link-dest=yesterdaystargetdir sourcedir todaystargetdir 你也可能想要排除一些不想要备份的目录或者文件。那么就可以使用 --exclude 选项。用这个选项加上你想排除文件或目录的模式。你可以用下面的新命令来排除浏览器的缓存。rsync -aH --delete --exclude Cache --link-dest=yesterdaystargetdir sourcedir todaystargetdir 注意：你想排除的每一个文件的模式前面都分别需要加上 --exclude 选项。rsync 可以同步远程主机，无论是作为同步源头还是目标。再举一个例子，我们假设想要把名为 remote1 的远程主机的目录同步到本地。因为 ssh 作为与远程主机交换数据的默认协议，我一直使用 ssh 选项。现在命令类似于下面这样。rsync -aH -e ssh --delete --exclude Cache --link-dest=yesterdaystargetdir remote1:sourcedir todaystargetdir 这就是我的 rsync 备份命令的最终版本。你可以依靠 rsync 的大量选项来定制你的同步过程。大多数情况而言，我刚刚描述的简单命令就足以胜任我的个人需要。你可以阅读 rsync 丰富的文档来了解它的其他能力。部署备份我的备份自动运行因为—“万物皆可自动化”。我写了一个 BASH 脚本使用 rsync 创建每天的备份。包括确保备份介质被挂载，生成每天的备份目录的名字，以及在备份介质中创建合适的目录结构，最后执行真正的备份再卸载备份介质。我用 cron 每天早晨执行脚本确保我永远不会忘记备份。我的脚本 rsbu 和配置文件 rsbu.conf 可以在 GitHub 上获取。恢复测试所有没有经过测试的备份计划都不完整的。你可以通过测试恢复某个文件或者整个目录，以确保备份在照常工作并且可以通过它来在数据全部丢失后恢复。我见过太多备份由于种种理由失败，以及由于缺乏测试忽略的问题导致宝贵的数据被丢失。选择一个文件恢复到比如 /tmp 的测试目录，这样你就不会覆盖任何备份后被更新的文件。验证文件的内容是否是你预期的。恢复用 rsync 备份的文件仅仅只是找到你的备份文件然后把它复制到你想恢复的地方去那样简单。我有几次不得不恢复我的个人文件，偶尔是整个目录。大多数是自己意外删除了文件或者目录。有几次是因为硬盘崩溃。这些备份迟早会派上用场。最后一步但仅仅创建备份并不能拯救你的业务，你需要定期的地创建备份，使最近的一次备份储存在另一台远程机器上，如果有可能，放在另外一个建筑物中或几英里之外。这样可以确保大规模的灾难不会摧毁你的所有备份。对于小型企业的一个合理选择是在可移动介质上做每日备份，晚上把最新的备份带回家里，第二天早上把更早的备份带到办公室。你就会有几个轮流的拷贝。甚至可以把最新的备份带到银行并放到你的保管箱里，然后带回之前的备份。作者简介：David Both - 他居住在北卡罗来纳州的罗列，是 Linux 和开源提倡者。他已经从事 IT 行业 40 多年。在 IBM 教授了二十多年 OS/2。在 IBM 的时候，他在 1981 年为最初的 IBM 个人电脑编写了第一门培训课程。他为红帽教授 RHCE 课程，并曾在世通公司、思科、北卡罗来纳州政府工作。他使用 Linux 和开源软件已经有二十年左右了。via: https://opensource.com/article/17/1/rsync-backup-linux作者：David Both 译者：trnhoe 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用 Yum 历史查找已安装或已删除的软件包信息
Yum 是 RHEL/CentOS 的一个基于 rpm 的交互式高级包管理器，用户可以用它来安装新的软件包、卸载或清除旧的/不需要的软件包。它可以自动运行系统更新，并执行依赖分析，对已安装的或可用的软件包进行查询等等。在本文中，我们将解释如何查看 Yum 事务的历史记录，以便于了解有关安装的软件包以及从系统中所卸载/清除软件包的信息。推荐阅读： 20 条关于 Linux 软件包管理的 Yum 命令以下是一些如何使用 Yum 历史命令的示例。查看完整的 Yum 历史要查看 Yum 事务完整的历史记录，我们可以运行以下命令，然后将显示：事务 ID、执行特定操作的用户、操作发生的日期和时间、实际操作以及任何错误的附加信息与操作：# yum history 使用 Yum 查找软件包信息history 的子命令：info/list/summary 可以将事务 ID 或包名作为参数。此外，list 子命令可以加上特殊的参数，all 表示所有的事务。运行以下命令查看先前的历史：# yum history list all 并且，你可以使用下面的 info 命令查看涉及指定软件包的事务详情，例如 httpd：# yum history info httpd 发出以下命令可以获得包含 httpd 软件包的事务的摘要：# yum history summary httpd 还可以使用事务的 ID 来查找，以下命令会显示 ID 为 15 的事务的详情。# yum history info 15 使用 yum history 查找软件包事务信息有一些用于打印某个或多个软件包事务详情的子命令。我们可以使用 package-list 或 package_info 查看关于 httpd 的更多信息，例如：# yum history package-list httpd 或 # yum history package-info httpd 要得到多个软件包的记录，我们可以运行：# yum history package-list httpd epel-release 或 # yum history packages-list httpd epel-release 使用 Yum 回滚软件包此外，还有一些 history 的子命令可以让我们撤销/重做/回滚事务。undo - 会撤销一个指定的事务。redo - 重复一次指定的事务。rollback - 撤销指定事务之后的所有事务。它们采用单个事务 id 或关键字 last 和从最后一个事务开始的偏移量。例如，假设我们已经做了 60 个事务，last 是指事务 60，last-4 指向事务 56。推荐阅读： 怎样使用 yum-utils 来维护以及加速 Yum以上子命令是如下工作的：如果我们有 5 个事务——V，W，X，Y 和 Z，其中分别是安装各个软件包的。# yum history undo 2 #将删除软件包 W # yum history redo 2 #将重新安装软件包 W # yum history rollback 2 #将删除软件包 X、 Y 和 Z 在下面的示例中，事务 2 是一个更新操作，如下所示，以下 redo 命令将重复事务 2 直到所有软件包到更新到当前时间的最新版本：# yum history | grep -w "2" # yum history redo 2 redo 子命令同样可以在我们指定事务之前加上一些可选的参数：force-reinstall - 重新安装所有在此事务中安装的软件包（通过 yum install、upgrade 或 downgrade）。force-remove - 移除所有已经更新或回滚的软件包。# yum history redo force-reinstall 16 查找 Yum 历史数据库和来源信息这些子命令为我们提供有关历史记录数据库和其它信息来源的信息：addon-info - 提供更多的信息来源。stats - 显示当前历史数据库的统计信息。sync - 使我们能够更改为所有已安装软件包存储的 rpmdb/yumdb 数据。看一下以下的命令的子命令实际上是怎样工作的：# yum history addon-info # yum history stats # yum history sync 使用 new 子命令设置新的历史文件：# yum history new 我们可以在 yum 手册页找到关于 Yum history 命令和其它几个命令的完整信息：# man yum 推荐阅读： 4 个使用 Yum 禁用/锁定某些软件包更新的方法就是这么多了。在本篇指南中，我们介绍了各种 Yum history 命令，以查看 Yum 事务的详细信息。作者简介：Aaron Kili 是 Linux 和 F.O.S.S 的爱好者，目前任 TecMint 的作者，志向是一名 Linux 系统管理员、web 开发者。他喜欢用电脑工作，并热衷于分享知识。via: http://www.tecmint.com/view-yum-history-to-find-packages-info/作者：Aaron Kili 译者：OneNewLife 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出