Skip to content Skip to main navigation Skip to footer

Linux

Linux:Google账户两步验证是如何工作的?

原理篇

我们往往会在不同的网站上使用相同的密码,这样一旦一个网站账户的密码泄露,就会危及到其他使用相同密码的账户的安全,这也是最近的密码泄露事件造成如此大影响的原因。为了解决这个问题,一些网站在登录时要求除了输入账户密码之外,还需要输入另一个一次性密码。银行常用的动态口令卡就是这种一次性密码的例子,在线支付网站的一次性短信密码则是另一种实现。

Google现在也推荐用户启用两步验证(Two-step verification)功能(Youtube上的视频介绍),并且除了以短信或者电话的方式发送一次性密码之外,还提供了另一种基于时间的一次性密码(Time-based One-time Password,简称TOTP),只需要在手机上安装密码生成应用程序,就可以生成一个随着时间变化的一次性密码,用于帐户验证,而且这个应用程序不需要连接网络即可工作。仔细看了看这个方案的实现原理,发现挺有意思的。下面简单介绍一下。

HTOP

Google的两步验证算法源自另一种名为HMAC-Based One-Time Password的算法,简称HOTP。HOTP的工作原理如下:

客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程,此密钥不被任何第三方所知道。此外,客户端和服务器各有一个计数器C,并且事先将计数值同步。

进行验证时,客户端对密钥和计数器的组合(K,C)使用HMAC(Hash-based Message Authentication Code)算法计算一次性密码,公式如下:

HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))

上面采用了HMAC-SHA-1,当然也可以使用HMAC-MD5等。HMAC算法得出的值位数比较多,不方便用户输入,因此需要截断(Truncate)成为一组不太长十进制数(例如6位)。计算完成之后客户端计数器C计数值加1。用户将这一组十进制数输入并且提交之后,服务器端同样的计算,并且与用户提交的数值比较,如果相同,则验证通过,服务器端将计数值C增加1。如果不相同,则验证失败。

这里的一个比较有趣的问题是,如果验证失败或者客户端不小心多进行了一次生成密码操作,那么服务器和客户端之间的计数器C将不再同步,因此需要有一个重新同步(Resynchronization)的机制。这里不作具体介绍,详情可以参看RFC 4226。

TOTP

介绍完了HOTP,Time-based One-time Password(TOTP)也就容易理解了。TOTP将HOTP中的计数器C用当前时间T来替代,于是就得到了随着时间变化的一次性密码。非常有趣吧!

虽然原理很简单,但是用时间来替代计数器会有一些特殊的问题,这些问题也很有意思,我们选取几个进行一下探讨。

首先,时间T的值怎么选取?因为时间每时每刻都在变化,如果选择一个变化太快的T(例如从某一时间点开始的秒数),那么用户来不及输入密码。如果选择一个变化太慢的T(例如从某一时间点开始的小时数),那么第三方攻击者就有充足的时间去尝试所有可能的一次性密码(试想6位数字的一次性密码仅仅有10^6种组合),降低了密码的安全性。除此之外,变化太慢的T还会导致另一个问题。如果用户需要在短时间内两次登录账户,由于密码是一次性的不可重用,用户必须等到下一个一次性密码被生成时才能登录,这意味着最多需要等待59分59秒!这显然不可接受。综合以上考虑,Google选择了30秒作为时间片,T的数值为从Unix epoch(1970年1月1日 00:00:00)来经历的30秒的个数。

第二个问题是,由于网络延时,用户输入延迟等因素,可能当服务器端接收到一次性密码时,T的数值已经改变,这样就会导致服务器计算的一次性密码值与用户输入的不同,验证失败。解决这个问题个一个方法是,服务器计算当前时间片以及前面的n个时间片内的一次性密码值,只要其中有一个与用户输入的密码相同,则验证通过。当然,n不能太大,否则会降低安全性。

事实上,这个方法还有一个另外的功能。我们知道如果客户端和服务器的时钟有偏差,会造成与上面类似的问题,也就是客户端生成的密码和服务端生成的密码不一致。但是,如果服务器通过计算前n个时间片的密码并且成功验证之后,服务器就知道了客户端的时钟偏差。因此,下一次验证时,服务器就可以直接将偏差考虑在内进行计算,而不需要进行n次计算。

以上就是Google两步验证的工作原理,推荐大家使用,这确实是保护帐户安全的利器。

参考资料

  1. TOTP: Time-based One-time Password Algorithm, RFC Draft, http://tools.ietf.org/id/draft-mraihi-totp-timebased-06.html
  2. HOTP: An HMAC-Based One-Time Password Algorithm, RFC 4226, http://tools.ietf.org/html/rfc4226
  3. Google Authenticator project, http://code.google.com/p/google-authenticator/ 

(本节转自: http://blog.seetee.me/archives/73.html

实现篇

实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。

目前客户端有:

用户需要开启Google Authenticator服务时

1.服务器随机生成一个类似于『DPI45HKISEXU6HG7』的密钥,并且把这个密钥保存在数据库中。

2.在页面上显示一个二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥),如『otpauth://totp/kisexu@gmail.com?secret=DPI45HCEBCJK6HG7』,下图:

Linux:Google账户两步验证是如何工作的?
Linux:Google账户两步验证是如何工作的?

3.客户端扫描二维码,把密钥『DPI45HKISEXU6HG7』保存在客户端。

用户需要登陆时

1.客户端每30秒使用密钥『DPI45HKISEXU6HG7』和时间戳通过一种『算法』生成一个6位数字的一次性密码,如『684060』。如下图android版界面:

Linux:Google账户两步验证是如何工作的?
Linux:Google账户两步验证是如何工作的?

2.用户登陆时输入一次性密码『684060』。

3.服务器端使用保存在数据库中的密钥『DPI45HKISEXU6HG7』和时间戳通过同一种『算法』生成一个6位数字的一次性密码。大家都懂控制变量法,如果算法相同、密钥相同,又是同一个时间(时间戳相同),那么客户端和服务器计算出的一次性密码是一样的。服务器验证时如果一样,就登录成功了。

Tips:

1.这种『算法』是公开的,所以服务器端也有很多开源的实现,比如php版的:https://github.com/PHPGangsta/GoogleAuthenticator 。上github搜索『Google Authenticator』可以找到更多语言版的Google Authenticator。

2.所以,你在自己的项目可以轻松加入对Google Authenticator的支持,在一个客户端上显示多个账户的效果可以看上面android版界面的截图。目前dropbox、lastpass、wordpress,甚至vps等第三方应用都支持Google Authenticator登陆,请自行搜索。

3.现实生活中,网银、网络游戏的实体动态口令牌其实原理也差不多,大家可以自行脑补下,谢谢。

(本节转自: http://www.zhihu.com/question/20462696/answer/18731073

Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性

传统地用 SSH 登录 VPS 的时候,靠的只是一串字符密码,如果密码被泄露、被猜解、被暴力枚举成功,那么 VPS 就完全暴露在坏人手中了。安全意识高一些的用户会使用公私钥代替字符来登录,但是这样的缺点是如果在陌生的电脑上想要临时登录一下,由于没有私钥,也就没办法了。传统地登录 WordPress 的时候,更是只有一个密码,如果被泄露、猜解、暴力枚举,辛辛苦苦经营的博客就完蛋了。

Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性

本文介绍如何通过 Google Authenticator 构建“物理屏障”,最大限度地阻断来自网络的密码攻击。本文假定你已经了解 Google Authenticator 的工作原理。

一、前言

虽然从小就被教导说操作系统一定要设置强劲的密码,但实际上,小时候用的大多是“远程桌面连接”默认被禁用的盗版 Windows,且在家里上网时候总是在路由器后面,没有独立公网 IP,因此就算电脑设置为空密码,也没有什么大问题。

后来,上了大学了,网络环境也有所改变:在宿舍上网的时候,电脑能分配到独立公网 IP,并且能直接从校外网络连入(甚至可以跑 Apache 玩),而我的 Xubuntu 又装了 OpenSSH Server,所以这时候密码就非常重要了,如果密码不够强劲的话,别人可以在互联网的任何一个地方通过 SSH 完全控制我的电脑。这太可怕了。

虽然不是所有人的电脑都有公网 IP 可以方便地从外网连入,但是显然 VPS 是有公网 IP 的。我以前居然没有意识到 VPS 是多么地脆弱,但是某天突然灵光一现:如果 VPS 的 root 密码被泄露、猜解或是暴力枚举,那么任何人都可以通过 ssh root@wzyboy.im 来完全控制我的网站!

这么迟才想到这一点的确比较奇怪,但是好在,目前还没有“亡羊”,赶紧先“补牢”吧。个人又非常喜欢 Google Authenticator 这种二步验证工具(以前写过文章)于是便结合 Google Authenticator 折腾出了这篇简陋但是还算安全的教程。本教程中环境默认为:

  • 服务器为 512MiB RAM 的 LAMP VPS,在 XeHost 买的(半广告推荐:此家 VPS 物美价廉,想买的点我),装着 Ubuntu 11.04 amd64。
  • 客户机为装着 Xubuntu 11.10 amd64 的笔记本电脑。
  • 验证器为装有 Android 版 Google Authenticator 的 HTC Desire Z (Vision)。

二、用 Google Authenticator 加强 SSH 登录安全性

安装相关 PMA 模块

首先需要在服务器上安装 libpam-google-authenticator 这个包。Ubuntu 11.10 及以上的官方源里自带了这个包,直接使用sudo apt-get install libpam-google-authenticator 命令便可自动解决依赖关系并安装。但是如果是 11.10 以上或者是其他发行版,就要自己的编译安装了。输入以下几条命令就行了:

sudo apt-get install libpam0g-dev libqrencode3 #这是它依赖的两个包,各发行版里大多带了。
git clone https://code.google.com/p/google-authenticator/ #下载源代码
cd google-authenticator/libpam/
make install #编译并安装

如果用着 Ubuntu 11.10 以下又不想自己编译的话(比如 VPS 是 11.04 的我),其实也有偷懒的办法的,就是直接拿官方源里编译好的 11.10 的二进制包来充数。这回是不需要 libpam0g-dev 这个包了,直接用下面的命令就好了:

sudo apt-get install libqrencode3 #这个包依然是要的
wget http://us.archive.ubuntu.com/ubuntu/pool/universe/g/google-authenticator/libpam-google-authenticator_20110413.68230188bdc7-1ubuntu1_amd64.deb #下载二进制包,如果是 32 位的操作系统的话请把 amd64 换成 i386
sudo dpkg -i libpam-google-authenticator_20110413.68230188bdc7-1ubuntu1_amd64.deb #安装之

配置 Google Authenticator

Google Authenticator 的服务器端已经安装好了,那么客户端呢?Android 用户请点这里安装,iOS 用户请点这里安装,其他智能手机用户也有相应的开源解决方案,请自行搜索下载。非智能手机用户暂时无解。:-( 不过,正在阅读本文的你一定早就用过 Google Authenticator 了吧?

Google Authenticator 其实是一套开源的解决方案,所以不仅在 Google 的网站上能用,在其他地方也能用的。然而,在 Google 的网站上,会直接给你一个 QR 码让你扫的,而自己配置的 Google Authenticator 则要自己生成了。

首先需要切换到对应的用户,如果 VPS 上只有一个用户的话,自然是可以省略这一步的,但是多用户的 VPS 需要先切换到对应的用户,再运行google-authenticator 命令,结果类似这样:

Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性

这个 QR 码自然是给 Google Authenticator 应用程序来扫描的,也可以访问上面的那个链接,用 Google Chart API 生成的 QR 码来扫描。还可以照着 QR 码下面的文字密钥手工输入。当 Google Authenticator 识别了这个账号之后,验证器就配置好了。在文字密钥下面还提供了几个应急码,为手机丢了等情况下所用的,可以妥善保管。

这时 Google Authenticator 虽然运行了,但是相关设置还没有保存,程序会问你Do you want me to update your “~/.google_authenticator” file (y/n) (是否将配置写入家目录的配置文件),当然是回答 y 了。又会问

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

大意是说是否禁止一个口令多用,自然也是答 y。下一个问题是

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

大意是问是否打开时间容错以防止客户端与服务器时间相差太大导致认证失败。这个可以根据实际情况来。我的 Android 设备时间很准(与网络同步的),所以答 n,如果一些 Android 平板电脑不怎么连网的,可以答 y 以防止时间错误导致认证失败。再一个问题是

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

选择是否打开尝试次数限制(防止暴力攻击),自然答 y。

问题答完了,家目录中多出一个 .google_authenticator 文件(默认权限为 400),这时客户端与服务端已经配套起来了,以后不用再运行google-authenticator 命令了,否则会重新生成一组密码。

配置 SSH 验证

此时虽然 Google Authenticator 已经配置好了,但是并没有任何程序会去调用它。所以需要设置 SSH 登录的时候去通过它验证。

打开 /etc/pam.d/sshd 文件,添加

auth required pam_google_authenticator.so

这一行,保存。再打开 /etc/ssh/sshd_config 文件,找到

ChallengeResponseAuthentication no

把它改成

ChallengeResponseAuthentication yes

并保存。最后,输入

sudo service ssh restart

来重启 SSH 服务以应用新的配置。

这时候再用 SSH 登录的话就会这样了:

wzyboy@vermilion:~$ ssh root@natatio
Password:[输入密码]
Verification code:[输入验证码]
Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-8-generic x86_64)

于是就这样成功了。

当然,如果经常要登录 SSH 的话,每次这样输入未免太麻烦了,好在,这个额外的认证步骤与以前的公私钥认证是可以同时使用的。所以在自己的桌面电脑上可以做一下公私钥认证:

ssh-keygen			#生成密钥对,一路回车即可,已经生成过的不用生成了
ssh-copy-id root@example.org	#把公钥添加到 VPS 上

这样达到的效果是,以后在自己的电脑上 SSH 到 VPS 的时候,是不需要输入任何密码的,可以直接连接,而在陌生的电脑上需要管理 VPS 时,需要输入账户密码及 Google Authenticator 的验证码。而想要从网络上攻击你的 VPS 的坏人,就算猜出、枚举出 VPS 的密码由于没有手机上 Google Authenticator 的验证码,就没办法了……

三、用 Google Authenticator 增强 WordPress 安全性

SSH 登录已经有 Google Authenticator 保护了,但是服务器运行的程序还没有,比如 WordPress。相对于 MySQL 漏洞攻击等高难度操作,我觉得 WordPress 被攻破的可能性更大:毕竟也只有一个短短的密码保护着。好在由于 WordPress 是“大路货”,用的人很多,插件自然也不少,有人便开发出了 WordPress 用的 Google Authenticator 的插件。启用方法如下:

  1. 在 WordPress 后台搜索并安装 Google Authenticator 这个插件,启用之。
  2. 在 WordPress 后台个人 Profile 页面 Google Authenticator Settings 选项下,选中 Active,填好 Description(只是在手机上显示的名字而已),再点击 Show/Hide QR Code。
  3. 在 Google Authenticator 应用程序中扫描这个 QR 码以添加账号,或者手工输入 Secret 也行。

配置成功以后,再登录 WordPress 后台的时候就会是这样的:

Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性

不输入正确的 Google Authenticator code 是不能登录的。当然在自己的电脑上是可以勾选 Remember Me 以减少麻烦的。

四、用 Google Authenticator 增强桌面电脑的安全性?

本文第二节讲了如何把 Authenticator 用在 VPS 上以增强 SSH 登录时的安全性。自然,Authenticator 也是能用在装有 GNU/Linux 的桌面电脑上的。安装模块的方法和在 VPS 上是一样的,手机上配置也是一样,但是调用的时候是不同的。

进入 /etc/pam.d/ 目录,可以看到一些文件:

wzyboy@vermilion:/etc/pam.d$ ls
atd             common-password                lightdm-autologin  ppp
chfn            common-session                 login              samba
chpasswd        common-session-noninteractive  newusers           sshd
chsh            cron                           other              su
common-account  cups                           passwd             sudo
common-auth     lightdm                        polkit-1           xscreensaver

这些文件从文件名就能看出它们是干嘛的:控制一些重要操作的认证。在 VPS 中,我们在 sshd 中添加了 auth required pam_google_authenticator.so 这一行,于是在 SSH 登录的时候就会调用 Authenticator 来认证。在别的文件中加入 auth required pam_google_authenticator.so 这一行的话,就会在相应的操作中调用 Authenticator 来认证了。下面是几个重要的:

  • lightdm。这个会使通过图形界面登录的时候要求输入验证码,效果如下:
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    输入密码之后还要再输入验证码:
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    需要注意的是,lightdm 只是 Ubuntu 11.10 和 Xubuntu 11.10 及以上版本默认的显示管理器,其他的发行版可能是 gdm、kdm 等,请自行修改。
  • xscreensaver。这个会使屏保解锁的时候也要输入密码和验证码,效果如下:
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
    Linux:用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
  • login。这个会使在字符界面下(如 tty)登录的时候也会要求输入验证码。
  • passwd。这个会使设置用户密码的时候要求输入验证码。
  • sudo。这个会使普通用户试图提权执行系统操作的时候要求输入验证码。很适合给多人共享电脑用。

当然,如果你的电脑像我一样装了 OpenSSH Server 的话,也可以在 sshd 中加入 auth required pam_google_authenticator.so 这一行,使坏人无法从公网上登录你的电脑。

五、尾声

相对前几篇博客,这篇博客写得有一些仓促。并且,教程的内容并不怎么复杂,Linux 的高级用户肯定都会的,所以本文的目标读者只能是刚接触 Linux VPS 的用户了,希望能帮到他们。

VIA: http://wzyboy.im/post/765.html  

来源:https://wzyboy.im/post/765.html

Linux:进一步部署 Google Authenticator:Apache 模块

Google Authenticator 是个好东西。它不仅可以增强 Google 账户登录的安全性,更因为它开源的特性,被部署到别的地方使用。比如 Linux PAM、WordPress 等,使用户可以借助 Google 的这套 OTP 方案,增强自己的服务器、网站和个人电脑的安全性。笔者之前就写过一篇详细的教程《用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性》,介绍如何把 Google Authenticator 部署到服务器、WordPress 和个人电脑上。如果你觉得这还不够安全的话,本文将会教会你如何把它部署到 Apache 里。

Linux:进一步部署 Google Authenticator:Apache 模块
Linux:进一步部署 Google Authenticator:Apache 模块

一、Google Authenticator 的 Apache 模块的优势

如何增强服务器的安全性?这个问题向来都是站长们的讨论焦点。从 SSH 登录方面来说,可以限制 IP 地址登录,可以禁用密码登录(仅用公钥登录),可以用 Fail2ban 来对付它们,甚至可以把尝试暴力破解的 IP 加到 iptables 黑名单中等。但是,Web 前端怎么办?总不能限制 IP 地址访问吧?比如 WordPress 的管理后台和 phpMyAdmin 的登录页面,就是很容易遭到攻击的地方。为了防御这种人肉攻击,简单点地做法是用mod_auth_basic 或 mod_auth_digest 来进行验证,高档一点的话,可以用 mod_ssl 中的双向 TLS 认证。但是前者太简单,如果页面是 http:// 的话,密码是明文传输的,对攻击者来说十分方便的,而后者相对来说比较复杂,要自己建立并维护一个 CA,或者需要花钱去请第三方 CA 签名证书。而 Google Authenticator 的 Apache 模块 mod_authn_google 则提供一种经济、方便、简洁、有效的认证方式:动态密码认证。

相对 mod_auth_basic 来说,mod_authn_google 的密码是动态的,更不易被猜解;相对 mod_ssl 的双向 TLS 认证来说,mod_authn_google 免去了额外请第三方 CA 签名的资金和复杂的配置 CA 证书的过程的痛苦。

二、安装 mod_authn_google

由于这不是官方模块,所以必然是要我们自己来下载安装的。这个项目的主页在这里,但是它的下载列表中提供的模块是有 Bug 的,如果不想自己修复 Bug 的话,可以在这里下载到 Bug 修复后的 mod_authn_google

注意,这个模块是在 64 位 Linux 下编译的,如果你用的是 32 位的系统,请下载源码后自行编译。

下载得到的是一个 .so 的库文件,可以使用 apxs2 脚本来安装,以 Ubuntu 等基于 APT 和 dpkg 的发行版为例,这个脚本可以通过安装 apache2-prefork-dev 包得到。

sudo apt-get install apache2-prefork-dev

接下来便可使用 apxs2 来安装模块:

sudo apxs2 -i -a -n authn_google mod_authn_google.so

各参数含义:

-i
安装
-a
自动添加 LoadModule 语句,方便加载
-n authn_google
安装后模块的名字
mod_authn_google.so
刚才下载得到的模块的文件名

由于这是一个已经编译好的模块了,所以除了用脚本来自动安装,也可以手工安装:

sudo cp mod_authn_google.so /usr/lib/apache2/modules/
echo "LoadModule authn_google_module /usr/lib/apache2/modules/mod_authn_google.so" | sudo tee /etc/apache2/mods-available/authn_google.load

三、配置 mod_authn_google

首先要建一个供它存放认证信息的地方,比如 /etc/apache2/ga_auth,接下来编辑 /etc/apache2/mods-available/authn_google.conf 文件,以下是范例:

				# 要加上验证的目录
Options FollowSymLinks Indexes ExecCGI
AllowOverride All				# 允许每个目录下通过 .htaccess 覆盖这里的全局设置
Order deny,allow
Allow from all
AuthType Basic
AuthName "Secret"				# 弹出窗口的提示信息
AuthBasicProvider "google_authenticator"
Require valid-user
GoogleAuthUserPath ga_auth			# 保存认证信息的目录
GoogleAuthCookieLife 3600			# Cookies 有效时间,这段时间内不用再输密码,单位为秒
GoogleAuthEntryWindow 2				# 当时间不同步时,允许有这样的正负误差。以 30s 为单位

保存退出之后,再

sudo a2enmod authn_google && sudo service apache2 restart

即可,如果没有报错的话,现在现在 mod_authn_google 应该已经在工作了,访问 /secret 的话会提示输入用户名密码,但是我们没有添加用户,所以输啥都是错的。

四、添加认证用户

认证用户是通过 Google Authenticator 提供的工具来生成认证文件的,将生成的认证文件复制到 GoogleAuthUserPath 所对应的目录即可,比如/etc/apache2/ga_auth。

如何使用 Google Authenticator 生成新用户的说明,在这篇文章中已经很清楚了,这里再提一下:

  1. 使用包管理器安装 libpam-google-authenticator 这个包。以 Ubuntu Server 为例:
    sudo apt-get install libpam-google-authenticator
  2. 如果之前用过 Google Authenticator,请先将 ~/.google_authenticator 文件改名备份一下。
  3. 运行
    google-authenticator

    命令,把屏幕上的 QR 码扫描到装有 Google Authenticator 的手机中,并按照提示回答几个问题,生成新的 ~/.google_authenticator 文件。

这样便生成了一个有效的用户。将家目录中新生成的 .google_authenticator 文件复制到 /etc/apache2/ga_auth 目录下,文件名为用户名,并使用

sudo chmod 640 wzyboy && sudo chown root:www-data wzyboy

(把 wzyboy 更换为相应的用户名)更改文件权限,以确保 Apache 能读取它,便完成了一个用户的添加。如需更多用户访问,重复这些步骤即可。最后记得把家目录里的 .google_authenticator 文件改回来。

五、调试与侦错

建议在浏览器的隐身窗口中进行调试以排除 Cookies 的干扰。如果出错,可从 /var/log/apache2/error.log 中找答案。

补充:该模块在 Google Code 上的预编译文件有 Bug,不读取 Cookies,导致提示找不到 /etc/apache2/ga_auth/(null) 文件。这时一个比较搞笑的 wordaround 就是把你的用户认证信息文件重命名为 (null),然后就可以配合这个 Bug 继续工作了。此时用户名输什么都可以,密码则是要保持正确的。这倒也别有一番风味…… via @jimmy_xu_wrk

via : http://wzyboy.im/post/869.html 

来源:http://wzyboy.im/post/869.html

Linux:使用国外 DNS 造成国内网站访问慢的解决方法

你是否是一个使用国外 DNS 的中国网民?你是否发现使用国外 DNS 之后访问某些国内网站奇慢无比?这不是 DNS 慢,而是电信到联通的线路太慢。如果你愿意小小地折腾一下,那么跟随本文,你可以解决这一问题。

一、为什么要用国外 DNS

由于众所周知的问题,国内 DNS 服务器解析国外网站会遭到 DNS 污染和投毒,使之解析到完全虚构的 IP 上,造成「开了 VPN 也没法访问 Twitter 或 Facebook」等问题。以下是一个例子:

wzyboy@vermilion:~$ dig twitter.com @8.8.8.8 +short
199.59.148.82
199.59.149.230
199.59.148.10
wzyboy@vermilion:~$ dig twitter.com @221.228.255.1 +short
93.46.8.89

Twitter 正确的 IP 地址应该是 199.59.148.0/24 里的那几个,但是如果用 221.228.255.1 这台中国电信的 DNS 服务器查询,查到的就是不知道什么鬼地址了,地理信息是在意大利,乱七八糟的。正是因为这样的 DNS 解析不正确的情况出现,不少人转而使用了国外的 DNS 服务器,如老牌的 OpenDNS 以及这几年新崛起的好记又好用的 Google Pulic DNS 即 8.8.8.8 和 8.8.4.4。使用它们进行查询,再配合以 VPN 或者浏览器的远程 DNS 解析,便可避免 DNS 污染的情况出现,从而解析出正确的地址。

此外,拒绝使用电信的 DNS 服务器,还可以避免烦人的「114 上网导航」页面……

二、为什么使用国外 DNS 会「慢」

我是在「慢」上加了引号的,因为这其实不是国外 DNS 慢,而是你要访问的网站的 CDN 分配错误,慢。由于国内各大运营商之间的主干线路带宽太窄,所以导致「最远的距离是从电信到联通」,电信用户访问联通的服务器非常慢,联通用户访问电信的服务器也非常慢,相信这都是大家有体验的。因此,国内不少网站都用了双线 CDN,在电信的机房里放点服务器,再在联通的机房里放点服务器。运用智能 DNS 技术,当你访问网站的时候,DNS 根据你的来源 IP 判断你是电信用户还是联通用户,然后再返回相应的 IP 地址,这样你会访问到就近的、同运营商的服务器,访问速度就大大提升了。而如果使用国外的 DNS 的话,你的查询来源来自国外,国内网站的 DNS 无法判断你是电信用户还是联通用户,就胡乱分配你一个服务器。比如我是一个江苏电信的用户,但当我访问淘宝网的时候,淘宝的 DNS 把我解析到青岛联通的服务器上,奇慢无比。所以:

很多人认为 Google Public DNS, OpenDNS 等「慢」,主要不是查询慢,而是电信到联通之间太慢。

当然了,如果硬要比较查询的话,倒也是会慢很少一点的:

;; 使用 8.8.8.8 解析 www.google.com 耗时 79 毫秒
;; Query time: 79 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Sep 6 17:20:37 2012
;; MSG SIZE rcvd: 143
;; 使用中国电信 221.228.255.1 服务器解析 www.google.com 耗时 6 毫秒
;; Query time: 6 msec
;; SERVER: 221.228.255.1#53(221.228.255.1)
;; WHEN: Thu Sep 6 17:20:44 2012
;; MSG SIZE rcvd: 284

别看 6 毫秒和 79 毫秒差别很大的样子,但是人类是很难感觉出来的,而且,这只是查询时间,与实际的访问速度无关,就算你一整天都在刷 www.google.com,也就每小时慢个几百毫秒的样子,根本感觉不出来。真正慢的原因,还是上文所说的「电信到联通」的问题。

三、问题的解决思路

现在问题明确了:使用国外 DNS 之后,查询来源变成国外的 IP,使用了 CDN 加速的国内网站的 DNS 会无法判断你的来源,胡乱给你分配一个地址,如果不是同一个运营商的,访问速度便会很慢。

那解决方案也就出现了:让国内网站的 DNS 服务器知晓你的来源,从而给你分配正确的服务器 IP。于是 Google 起草了一个专有协议,叫 EDNS,在 DNS 查询请求中包含源地址,这样淘宝就知道查询来源不是 Google 服务器,而是电信的某用户,就不会把你扔到联通服务器上了 。听起来很美好是吧?不过这个协议不开放,目前几乎没有人用,所以,问题丝毫没有解决。

新思路是:访问那些会因 CDN 加速解析错误而极其缓慢国内网站的时候,直接向国内的服务器发送请求,让 DNS 知晓你的来源,给你分配个正确的 IP。访问其他网站的时候,再通过国外的 DNS 查询。

听起来很简单的样子,实现起来也不难:用 dnsmasq 在本地搭个 DNS 缓存服务器,规定哪些域名用哪个服务器查就好了。

四、安装及配置 dnsmasq

安装 dnsmasq

dnsmasq 是一个非常轻量的 DNS 缓存及 DHCP 服务器,在我的 Arch Linux 上只占用了 368 KiB 的磁盘空间,相比功能极其强大的 BIND9 来说小多了(BIND9 的安装体积是 6.23 MiB)。不光是体积小,它的功能也很专一,配置起来也是十分方便的,五分钟就可以搞定。

Ubuntu 12.04 及之后的版本应该自带了 dnsmasq。如果没有,可以使用 sudo apt-get install dnsmasq 安装。Arch Linux 直接 sudo pacman -S dnsmasq 即可。我的笔记本电脑需要给手机 DHCP 及 IP 转发用,因此早就安装了 dnsmasq,但是直到今天才想起这么用它……

配置 dnsmasq

dnsmasq 的各参数可以通过 man dnsmasq 查看,配置文件中也有许多清晰明了的注释。默认的配置文件位于 /etc/dnsmasq.conf,打开它,可以更改这几个地方:

no-resolv
no-poll
server=8.8.8.8
server=8.8.4.4
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
server=/tbcache.com/114.114.114.114
server=/tdimg.com/114.114.114.114

第一行的 no-resolv 和第二行的 no-pull 让 dnsmasq 不要通过 /etc/resolv.conf 确定上游服务器,也不要检测 /etc/resolv.conf 的变化(因为我们就是要拿本机当服务器嘛),接下来两行指定 dnsmasq 默认查询的上游服务器,此处以 Google Public DNS 为例,喜欢用 OpenDNS 的也可以改 OpenDNS。接下来就是规定一张名单了,把一些国内网站的域名写在这里即可。比如server=/cn/114.114.114.114 便是把所有 .cn 的域名全部通过 114.114.114.114 这台国内 DNS 服务器来解析,你也可以改成其他的国内 DNS 比如你的运营商提供的 DNS。接下来四行是淘宝的几个域名,让它们也通过国内的 DNS 服务器解析。

这样分流操作之后,默认所有域名都通过 8.8.8.8 和 8.8.4.4 解析,但是所有的 .cn 域名以及淘宝的域名通过 114.114.114.114 这台国内 DNS 服务器解析。当然,除了淘宝网,你也可以添加更多的域名,根据自己的喜好,把经常访问,但是使用国外服务器解析到很慢的服务器上的网站域名都可以添加进去,不过:如果这个网站本身就只能一台服务器,没有 CDN 加速,那再怎么添加也是无济于事的,得让网站管理员去买双线机房……另外,在写这篇文章的时候,发现 @felixonmars 维护了一张国内常用的、但是通过国外 DNS 会解析错误的网站域名的列表,据他所,这是他在公司里部署这一套东西之后,公司里其他人报怨「慢」的网站域名收集来的,应该囊括了绝大多数有此问题的网站,值得依赖,欢迎选用。如果觉得直接把这么多域名加在 /etc/dnsmasq.conf 里不爽的话,可以在 dnsmasq.conf 里把 conf-dir=/etc/dnsmasq.d 这一行取消注释,然后把在 /etc/dnsmasq.d 里弄点列表。比如我就是把 @felixonmars 维护的列表放在/etc/dnsmasq.d/server.china.conf 里。

配置好之后,保存,Ubuntu 可用 sudo service dnsmasq restart,Arch Linux 可用 sudo rc.d restart dnsmasq 重启 dnsmasq。如果没有错误的话,这时本地的 dnsmasq 已经跑起来了。

测试 dnsmasq

测试一下:

wzyboy@vermilion:~$ dig www.taobao.com @8.8.8.8 +short
www.gslb.taobao.com.danuoyi.tbcache.com.
scorpio.danuoyi.tbcache.com.
119.167.195.251 → 这是淘宝的青岛联通的服务器,我用江苏电信连奇慢无比
119.167.195.241 → 这也是青岛联通
wzyboy@vermilion:~$ dig www.taobao.com @127.0.0.1 +short
www.gslb.taobao.com.danuoyi.tbcache.com.
scorpio.danuoyi.tbcache.com.
222.186.49.251 → 解析到常州电信了,快!
61.155.221.241 → 这是上海电信
wzyboy@vermilion:~$ dig twitter.com @127.0.0.1 +short
199.59.150.7 → Twitter 还是用 8.8.8.8 解析的,所以解析出来是未经污染的正确地址
199.59.148.82
199.59.149.230

效果很明显,这时可以把本地的 DNS 设为 127.0.0.1 了。大部分 Linux 用户直接更改 /etc/resolv.conf 的内容为

nameserver 127.0.0.1

即可。Ubuntu 12.04 及以后的用户,可能需要对 resolv.conf 做一些手脚,具体参考这里。如果不愿意改的话,可能每次联网都要手工改一次 resolv.conf,或者在 NetworkManager 中手工指定 127.0.0.1 为 DNS。DHCP 用户的话,可以通过 /etc/resolv.conf.head 之类的文件来保证 127.0.0.1 在第一行。

这样配置完之后,如果你没有在 dnsmasq 里限定查询 IP,那么你的家人、朋友们也是可以把你的电脑作为 DNS 服务器的。如果你本地是 VPN 全局翻墙的话,需要把你选择的国内 DNS 服务器通过路由表加入直连的范围内。当然,已经使用 chnroutes 的就不需要了。

五、我不是 Linux 用户怎么办?

如果你是 Windows 用户

参考这个问题,去配个 BIND9 的 Windows 版本试试吧。或者可以装个 dnsmasq 的 Windows 代替品。更新:有人写了篇《Windows 下使用国外 DNS 访问国内网站慢的解决方法》,使用 Windows 下的同类软件解决此问题,值得阅读。

如果你是 Mac OS X 用户

Mac OS X 的 resolver 比较独特,似乎有比较简陋的解决方法,参考这篇文章。另外,OS X 似乎也是自带 named 的,所以……安装 Homebrew 吧,然后 brew install dnsmasq 喽……

其实还有更通用的方法

听说过 VirtualBox 吗?开源、免费、强大的虚拟机软件。可以装个最配置非常低下的虚拟机,比如 32 MiB 内存甚至 16 MiB 内存的虚拟机(要知道 64M 内存的 Linux 已经可以跑 WordPress 这庞然大物了),装个最简单的小 Linux,比如只有 37M 的 Ubuntu Core,然后装上依赖包几乎没有的 dnsmasq,再把 Windows / OS X 的 DNS 设为虚拟机的 IP 地址,于是便可以用了。在当今内存动辄 4 GiB 的情况下,拿 16MiB 内存出来换个更舒畅的上网体验,还是很不错的。

六、尾声

祝各位读者折腾成功,上网愉悦。

补充:其实这样本地 DNS 缓存服务器,还有这样的好处:

wzyboy@vermilion:~$ dig wzyboy.im
; < <>> DiG 9.9.1-P2 < <>> wzyboy.im
;; global options: +cmd
;wzyboy.im.			IN	A
wzyboy.im.		103	IN	A	198.244.51.13
;; Query time: 307 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep  6 21:32:07 2012
;; MSG SIZE  rcvd: 54
wzyboy@vermilion:~$ dig wzyboy.im
; < <>> DiG 9.9.1-P2 < <>> wzyboy.im
;; global options: +cmd
;wzyboy.im.			IN	A
wzyboy.im.		95	IN	A	198.244.51.13
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep  6 21:32:15 2012
;; MSG SIZE  rcvd: 43

看出来了吧?

转载自: https://wzyboy.im/post/874.html 

Linux:Linux中的more命令-逐页显示长文本文件

如果你已经习惯了在Linux系统上工作,那你一定会发现在Linux世界中存在着大量的文本文件。配置文件和日志文件通常都采用文本格式。这些文件通常都有很长的内容,不能在一屏内全部显示。所以在处理这种文件时,我们需要分页显示。这时我们可以用上more命令。

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

more是干嘛的

more是一个用来分页显示大文本文件的命令,它默认是内置在各个Linux发行版中的。

怎么用more

使用more命令,只需要键入:

$ more file_name

比如,我们想检查/var/log目录下的日志文件syslog,只需要键入:

$ more /var/log/syslog
Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

然后我们可以看到在屏幕左下角有个提示,告诉我们当前的显示比例为0%。看上去这个文件相当大,所以第一页是全部页数的0%。使用空格键可以往下翻页,然后就可以看到提示的百分比会增加。

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

限制每页显示的行数

在执行more命令的时候,它会占用你终端窗口的全部空间用于显示。但是你可以通过参数-数字来限制每页显示的行数。

例如,你希望每页限制显示12行,可以通过下面的命令:

$ more -12 /var/log/syslog
Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

现在,你会看到每页只显示12行,在按下空格键后,就会翻页显示后面的12行。

Display user message

我们知道,more命令会在显示区域的左下角提示当前内容所占的百分比。对于第一次使用more命令的人来说,他或她可能会想知道怎么才能往下翻页。为了避免这种情况,我们可以在执行时增加-d参数,这样就会额外显示一行用户信息“[按空格键继续,‘q‘推出.]”

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

如果用户按了‘空格‘或’q‘之外的按键,more会显示一行帮助信息“ [按‘h’键查看提示。]”

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

如果按下h键,会显示一个帮助信息:

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

一个有意思的指令是b按钮,b按钮允许你退回到前面的页面。换句话说,b按钮可以允许向前翻页

你可以通过左上角的…前1页信息来确认当前显示的是前面的页面。

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

禁止滚动

通过参数-c,more命令不会滚动页面,而是直接清除之前的内容,替换为下一页的内容。 With -c option, more will not scroll the page. It will clear the previous page and put the next page or lines there.

$ more -10 -c lynis.log
Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

如果按下空格键,下一页会仍然有相同的大小。

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

忽略多余的空白行

使用参数-s来忽略多余的空白行,下面是个例子:

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

当我们增加参数-s后:

$ more -s doc_30.txt

忽略了多余空白行

查找字符串

如果你的日志文件非常大,那么在其中查找你想要的字符串并不是那么容易。more命令的查找功能可以帮你,通过参数+/string可以用来搜索字符串,找到的关键字会显示在第一行。比如我们要在/var/logs/syslog文件中搜索“dhclient”,那more命令的格式:

$ more +/dhclient /var/log/syslog
Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

然后,如果要在文件中继续搜索下一个,只需要按下/按钮,后面跟有关键字dhclient。

从指定行开始显示

你也可以通过参数+数字来指定开始显示的行,例如,我们有一个15行的文件:

Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

然后我们想从第5行开始显示这个文件的内容,命令看起来会是这个样子:

$ more +5 doc_30.txt
Linux:Linux中的more命令-逐页显示长文本文件
Linux:Linux中的more命令-逐页显示长文本文件

可以显示二进制文件吗?

答案是不行. more命令会提示这样的信息,例如:

显示二进制文件

结论

more是一个用来查看文本文件的基础工具,它不能用来显示二进制文件。通常,我们可以通过命令man more或者more –help来获取更多关于more怎么使用的信息。


via: http://linoxide.com/linux-command/linux-more-command/

译者:zpl1025 校对:wxy

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

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

Linux:如何使用Ubuntu 13.10的磁盘分析器可视化观察分区使用率

电影、书籍、音轨这些内容类型常充斥于用户硬盘中,这方面会常常带来不同问题,例如空间缺乏并不清楚它的主要原因。

Ubuntu 13.10 默认自带磁盘分析器,一个允许用户快速并有效地通过简单的图形视图来查看占据磁盘的文件和文件夹的工具。

运行磁盘分析器,给用户展示的是硬盘分区的标签名,大小和可用大小,单击一个条目,打开这个条目会进入专门的界面,这里是已扫描的分区和它的项目。

因此,用户可以通过侧边栏(基于文本)和右侧观察项目和它们的大小,后者担任了清晰展示已打开分区的作用;将鼠标停留在视图上会展示它的大小和含有的项目。

Linux:如何使用Ubuntu 13.10的磁盘分析器可视化观察分区使用率
Linux:如何使用Ubuntu 13.10的磁盘分析器可视化观察分区使用率

因此,磁盘使用分析器允许用户找出目前为被忽视的有潜在错误的文件夹,例如,用户可以立即发现显著占据分区的一个大尺寸的块(块越大代表其文件大小越大),但是,从文件名上你很难感觉到它的大小。


via: http://iloveubuntu.net/how-visually-observe-partitions-usage-ubuntu-1310s-disk-usage-analyzer

译者:geekpi 校对:wxy

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

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

Linux:怎样在 Ubuntu Unity Dash 添加关机、重启选项

看到这个标题的时候,大家肯定觉得是脱了裤子放屁,的确关机、重启、登出等选项在桌面顶部面板右边不是有吗?干嘛还要这么麻烦的在Ubuntu Unity Dash 添加关机、重启选项?

这篇文章是在国外博客上看到的,作者使用 Ubuntu 14.04 系统的时候发现桌面顶部面板的关机、重启选项没有加载。作者的第一反应是打开 Dash 看看他们会不会在哪里,但是没有?留下来的操作方式就只有两个:使用终端命令或执行硬重启。

其实除了上面两个方式,还有一个简便的方式就是在 Dash 里面添加这几个功能:

该电源命令包括的选项有:

  • 关闭
  • 重启
  • 暂停
  • Hibernate
  • 注销
  • 锁屏

安装方式,使用 PPA ,打开终端,输入以下命令:sudo add-apt-repository ppa:atareao/atareaosudo apt-get update && sudo apt-get install power-commands

现在就可以在 dash 里面搜索到了:

Linux:怎样在 Ubuntu Unity Dash 添加关机、重启选项
Linux:怎样在 Ubuntu Unity Dash 添加关机、重启选项

Linux:树莓派使用实例之:2 Pi R 第二篇:Web服务器

在我的上一篇文章中讲过如何做一个高可用系统:两个树莓派布署上 GlusterFS 集群文件系统,就变成一个容错文件服务器了。在这篇文章中我们会基于这个高可用系统构建另一个容错服务:建立一个简单的 Web 服务器集群。

Linux:树莓派使用实例之:2 Pi R 第二篇:Web服务器
Linux:树莓派使用实例之:2 Pi R 第二篇:Web服务器

可能你没有看过我的上一篇文章,那我就在这里简单回顾一下上次的内容。我有两个树莓派:Pi1 和 Pi2。Pi1 的 IP 地址为 192.168.0.121,Pi2 的 IP 地址为 192.168.0.122。我把它们组合成为 GlusterFS 集群系统,共享一个存储卷,卷名为 gv0。并且这个 gv0 被挂载在两个树莓派上,挂载点都是 /mnt/gluster1,这样一来,两个树莓派能同时访问到这个共享卷。最后我测试了下系统的容错性,将共享卷挂载到第三个物理机上,并执行共享卷上的一个简单的脚本:打印系统时间并输出到 gv0 上的一个文件内,然后轮着关掉两台树莓派,检测这个冗余系统是否还能用。

现在我手上有这个经过检验的存储系统,我要做的是把这个系统做成有容错功能的 Web 服务器集群。树莓派的 CPU 处理速度和内存资源都不是很高,好在对付一个静态 Web 服务器已经是绰绰有余了。我故意把这个例子做得非常简单,因为我觉得如果你能摆平这个简单的例子,你也能处理复杂一点的问题了。

安装 Nginx

虽然我也比较喜欢 Apache,但在资源有限的情况下,像 Nginx 这样功能全、性能高、资源占用少的 Web 服务器是比较理想的选择。在 Raspbian 的默认源中存在 Nginx,所以我只要登入一台树莓派并且输入以下命令:

$ sudo apt-get update
$ sudo apt-get install nginx

Nginx 安装好后,创建配置文件 /mnt/gluster1/cluster ,内容如下:

server {
  root /mnt/gluster1/www;
  index index.html index.htm;
  server_name twopir twopir.example.com;
  location / {
        try_files $uri $uri/ /index.html;
  }
}

注意:我这里把服务器命名为“twopir”,你可以根据自己爱好命名你的网站。另外我把 Web 服务器的根目录设置为 /mng/gluster1/www。这样,我就能把我的静态文件放在这个共享存储系统内,从而让两个树莓派主机都访问到它们。

现在删除默认的 Nginx 配置文件,将上面配好的配置文件作为 Nginx 的配置文件。在 Debian 系统中,Nginx 将它的配置文件像 Apache 一样放在 sites-available 和 site-enabled 两个目录下面。虚拟主机配置文档放在 sites-available 中,而 sites-enabled 目录包含了你想生效的配置文件的软链接。

$ cd /etc/nginx/sites-available
$ sudo ln -s /mnt/gluster1/cluster .
$ cd /etc/nginx/sites-enabled
$ sudo rm default
$ sudo ln -s /etc/nginx/sites-available/cluster .

现在我已经放好了配置文件,但系统还不存在上面所说的 Web 服务器根目录。下一步就是创建目录 /mnt/gluster1/www,并复制 index.html 文件进去。当然你也可以建立自己定义的 index.html 文件,但先复制一个已有的文件是个不错的选择:

$ sudo mkdir /mnt/gluster1/www
$ cp /usr/share/nginx/www/index.html /mnt/gluster1/www

重启 Nginx 服务:

$ sudo /etc/init.d/nginx restart

现在去 DNS 服务器为192.168.0.121的树莓派配置记录。你可以根据自己的情况配置你自己的域名和 IP 地址。现在在浏览器上输入 http://twopir/ 然后出现默认的 Nginx 首页。如果你查看下 /var/log/nginx/access.log 文件,你可以看到点击网页留下的记录。

Nginx 能正常工作后,配置第二个树莓派。因为我们已经将配置文件都放在 GlusterFS 共享目录下,我们现在要做的只是安装 Nginx,创建相关的软链接,重启 Nginx:

$ sudo apt-get update
$ sudo apt-get install nginx
$ cd /etc/nginx/sites-available
$ sudo ln -s /mnt/gluster1/cluster .
$ cd /etc/nginx/sites-enabled
$ sudo rm default
$ sudo ln -s /etc/nginx/sites-available/cluster .
$ sudo /etc/init.d/nginx restart

DNS 服务器上配置两条 A 记录

现在两个主机共享同一份文件,下一步是设置冗余系统的关键步骤。虽然你完全可以设置一个类似心跳的服务用于轮询检测哪个树莓派的 Web 服务是开启的,但这里有个更好的方法:给同一个主机名指定两个 DNS 的 A 记录,分别指向你的两个树莓派(译注:A 记录就是将域名转化为 IP 地址的记录,DNS 包含很多记录方式,如 A 记录、PTR 记录、MX 记录等等),这就是传说中的 DNS 负载均衡,DNS 访问主机时,如果主机名对应多个 IP 地址,DNS 会随机返回这些 IP 地址的顺序:

$ dig twopir.example.com A +short
192.168.0.121
192.168.0.122
$ dig twopir.example.com A +short
192.168.0.122
192.168.0.121

因为返回随机的顺序,用户可以均匀地往两台服务器发送请求,这个负载均衡的机制就是由 DNS 服务器的多条 A 记录来提供。相对于 DNS 的负载均衡技术,我更感兴趣的是 Web 浏览器如何处理请求失败的情况。当浏览器通过网页主机获得两条 A 记录,并且第一条记录所在的主机当机了,浏览器几乎立刻就切到另一条记录上。切换效率快到用户根本察觉不出来,这可比传统的心跳线轮循请求主机快多了。

所以在你正在使用的 DNS 服务器上添加你的树莓派集群的两个 IP 地址,然后试试 dig 命令,就像我在上面使用过的一样,你也应该能得到两个 IP 地址。

当你为同一个域名设置好了两个 A 记录,这套集群就可以提供容错服务了。打开两个终端并分别登录到两个树莓派,运行 tail -f /var/log/ngnix/access.log 命令,你可以监视 Web 服务器的访问情况。当你通过浏览器访问网页时,你可以看到在一台树莓派上产生了访问日志,而在另外一台的日志里什么也没有出现。现在你可以刷新几次页面,当你觉得你对能成功访问到 Web 服务器感到满意了,你可以重启响应你请求的那台树莓派,然后再刷新几次页面。也许浏览器上会出现一个短暂的不可访问信号,但会马上重定向到第二台树莓派上,你会看到一样的页面,并且你能通过终端访问日志了解具体情况。当第一台树莓派启动后,你在浏览器上根本不会察觉到。

(译注:如何处理DNS 轮询的多个IP地址,不同浏览器有不同的做法,目前译者收集到的资料显示,只有mozilla的netlib库支持自动重连下一个IP地址的做法。如果读者知道更多的浏览器对DNS轮询的处理策略,请评论给我们。其实,以译者的态度看,DNS轮询根本就不能算作是高可用性的方案,勉强可以算作是负载均衡方案,建议考虑更可靠的其它方案。)

随机重启一台树莓派,只要有一台在线,Web 服务器就能提供服务。这是一个非常简单的案例,你可以把你其它的静态文件放到 /mnt/gluster1/www 上,为你提供真正有价值的服务,现在好好享受你的低成本容错集群 Web 服务器吧。


via: http://www.linuxjournal.com/content/two-pi-r-2-web-servers

译者:bazz2 校对:wxy

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

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

Linux:如何在 Ubuntu 13.10 中安装 Gnome 3.10

Linux:如何在 Ubuntu 13.10 中安装 Gnome 3.10
Linux:如何在 Ubuntu 13.10 中安装 Gnome 3.10

厌倦 Unity 了吗?或者说就是不喜欢它?为何不试试在 Ubuntu 13.10 中安装 Gnome 3.10?安装一个新的桌面环境是为数不多的安装Ubuntu 13.10后要做的事之一,如果你想要尝试一下。在这篇快速教程中我们将会分享如何在 Ubuntu 13.10 中安装 Gnome 3.10

在 Ubuntu 13.10 中安装 Gnome 3.10:

我们将花费一些时间来使用几个 PPA 安装 Gnome 3.10 和分配升级。我假设你网速不错,如果不是的话,你可以使用一些小技巧来提高 Ubuntu13.10 的系统性能

第一步:安装 GDM [可选]

第一步是安装GDM以及默认的LightDM。这是可选的,但是还是建议各位如很多人提醒的LightDM问题(这句话不通顺,但是不太理解,还请组长看一下)。打开终端(Ctrl+Alt+T),并使用下面的命令:

sudo apt-get install gdm

出现提示时选择 GDM。

第二步:添加PPAs并升级系统

现在是时候添加 Gnome 3.10 PPA 了。使用以下命令添加 PPA 将需要一些时间并下载 200 MB 的数据。

sudo add-apt-repository ppa:gnome3-team/gnome3-next
sudo add-apt-repository ppa:gnome3-team/gnome3-staging
sudo apt-get update
sudo apt-get dist-upgrade

第三步:安装 Gnome shell

一旦升级已经完成,可以使用下面的命令在 Ubuntu 中安装 Gnome3.10。

sudo apt-get install gnome-shell

第四步:安装 Gnome 特定的应用程序 [可选]

这一步是可选的。你可能想安装一些 Gnome 特定的应用程序以达到 Gnome 3.10 在 Ubuntu 中得完美体验。你也许会遇到一些应用程序的相关问题。

sudo apt-get install gnome-weather gnome-music gnome-maps gnome-documents gnome-boxes gnome-shell-extensions gnome-tweak-tool gnome-clocks

这些就是所有你需要做的。重新启动计算机,在登录时,通过点击齿轮标志选择 Gnome。这里是我的 Gnome 3.10 在我的笔记本电脑上的效果:

Linux:如何在 Ubuntu 13.10 中安装 Gnome 3.10
Linux:如何在 Ubuntu 13.10 中安装 Gnome 3.10

卸载 Gnome 3.10:

不喜欢 Gnome 3.10 了?不用担心,通过deleting PPA卸载它们。要做到这一点,你需要安装 PPA Purge(如果尚未安装)。使用下面的命令:

sudo apt-get install ppa-purge

之后,安装你所安装的 PPA:

sudo ppa-purge ppa:gnome3-team/gnome3-staging
sudo ppa-purge ppa:gnome3-team/gnome3-next

在 Ubuntu13.10 版本库中是可以恢复 Gnome 3.10 到 Gnome 3.8。要想完全删除 Gnome 3,使用以下命令:

sudo apt-get remove gnome-shell ubuntu-gnome-desktop

当然,你应该删除任何你专为 Gnome 3.10 安装的应用程序。

我希望本教程能帮助你在 Ubuntu 13.10 中安装 Gnome 3.10。尝试 Gnome 3.10了吗?你更喜欢哪一个,Gnome 还是 Unity?


via: http://itsfoss.com/install-gnome-3-ubuntu-1310/

译者:乌龙茶 校对:Caroline

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

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

Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例

Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例
Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例

Linux 和 Unix 属于多任务的操作系统,也就是说一个系统在同一时间段内能运行多重任务(进程)。在这个新的博客系列,我将会列出相关的 Linux 和 Unix 作业(job)控制的命令,你可以通过这些命令在 Bash 或 Korn 还有 POSIX shell 下实现执行多重任务。

什么是作业控制?

作业控制不只是能够停止/挂起(stop/suspend)正在执行的进程(命令),也可以继续/唤醒(continue/resume)执行你需要的每一个进程。这完全可以用你的操作系统和 bash/ksh 之类的 shell 或 POSIX shell 完成。

谁给作业控制的提供了环境?

Bash / Korn shell,或者是 POSIX shell 提供给了作业控制的环境。

跟作业表打个招呼吧

你的 shell 会留有一张当前作业的表单,称为作业表。当你键入命令时,shell 会给它分配一个 jobID(也称作 JOBSPEC)。一个 jobID 或 JOBSPEC只是很小的整数数值。

#1: 创建你的首个 Linux/Unix 作业

我要运行一个名为 xeyes 的命令,它会在屏幕上显示两个椭圆的眼睛,输入: $ xeyes &

输出样例:

Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例
Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例

Fig.01: 在后台运行 xeyes 命令

我使用&符号让一个 job 在后台运行。shell 会打印一行信息类似如下:

[1] 6891

在这个例子中,有两个数字输出,分别表示:

  • 1 : 在后台执行的 xeyes 任务的作业号为 1。
  • 6891 : 作业1的进程ID。

我在多执行一些 job:

## 启动一个文本编辑器,X 的系统负载显示,和 sleep 命令 ##
gedit /tmp/hello.c &
xload &
sleep 100000 &

#2: 列出当前的作业

查看当前 shell 的激活的任务状态,输入:

$ jobs
$ jobs -l

输出如下:

[1]   9379 Running                 xeyes &
[2]   9380 Running                 gedit /tmp/hello.c &
[3]-  9420 Running                 xload &
[4]+  9421 Running                 sleep 100000 &

简要描述如下:

字段 描述 示例
1 [1] jobIDJOB_SPEC – 工作号要与fg, bg, wait, kill和其他shell命令一起使用。你必须在工作号前缀添加一个百分号:(%)。加号 (+) 标识着默认的或是现在的作业。减号 (-) 标识着前一个作业。 %1fg %1kill %2
2 9379 进程 ID – 系统自动为每个进程创建并分配地独有的身份标志号。 kill 9379
3 Running 状态 – 关于作业的状态:Running – 该 作业正在运行,还没有被外部信号挂起。Stopped – 该作业已经被挂起。 N/A
4 xeyes & command – 由shell给出的命令。 script &firefox url&

你也可以用 ps 命名列出当前系统正在运行的进程:

$ ps

#3: 停止或挂起正在运行的作业

按下[Ctrl]-[Z]键或使用kill 命令,如下所示:

kill -s stop PID

举个例子,启动ping 命令,然后用 Ctrl-Z 键来停止 ping 命令作业:

Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例
Linux:10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例

Animated gif 01: 挂起 ping 命令作业

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

Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

拷贝文件和目录是每一个操作系统的基本指令。备份行为基本上是创建文件和目录的副本。在Linux系统下,我们可以用cp命令来实现。

copy 命令是什么

Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

正如我们在上文提到的,cp是一个用来创建文件和目录副本的命令。在这里我们提供了一些在日常操作中可能用到的cp命令的实例。

1. 不带任何参数下,运行cp

这是 cp 命令最基础的使用。 拷贝名为 myfile.txt 从一个位置到另一个位置,我们可以像这样子输入:

$ cp myfile.txt /home/pungki/office

Copy without options

如果我们没有输入绝对路径,这意味着我们正在当前目录下拷贝一个文件。在上面的实例中,myfile.txt位于/home/pungki/Documents目录下。如果我们当前目录正是/home/pungki/Documets,那么没有必要输入/home/pungki/Documents/myfile.txt来拷贝文件。当/home/pungki/office是一个目录,则文件会拷贝到里面。

2. 同时拷贝多个文件

要在同时拷贝多个文件,我们只需要将多个文件用空格隔开。如下示例:

$ cp file_1.txt file_2.txt file_3.txt /home/pungki/office

Copying multiple files

3. 拷贝一个目录

要拷贝一个目录的话会有点棘手。你需要添加 -r 或者 -R 选项来实现。-r-R 选项表明递归操作。无论该目录是否为空目录,这个选项都是必要的。如下示例:

$ cp -r directory_1 /home/pungki/office

Copy directory

需要注意的一件事,你需要移除在目录名尾部的斜杠。否则你会收到类似的错误信息cp: omitting directory‘directory_1/

Copy directory error

如果你收到错误信息,则目录不会被拷贝到目标文件夹。

4. 创建文件的硬链接,而不是拷贝它们

拷贝文件意味着你必须使用一些存储空间来储存拷贝的文件。有时候出于某种原因,你可能想要创建“快捷方式”或者链接到文件,而不是拷贝它们。要做到这一点,我们可以使用-l选项。

$ cp -l file_4.txt /home/pungki/office
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

从上图看出,我们看到file_4.txt的硬链接已经拷贝到/home/pungki/office/file_4.txt。标记有同样的 inode, 835386。但是请注意,硬链接不能用来创建目录。下面让我们看一个例子。

原目录 directory_1 的 inode 值是 278230

Inode number of original directory

原文件 file_5.txt 的 inode 值是 279231

Original inode number of file

对 directory_1 执行 cp 命令

Copy using -rl options

拷贝的 directory_1副本的 inode 值是 274800

Inode number of copied directory

拷贝的 file_5.txt副本的 inode 值是 279231。跟它的原文件一样

Inode number of copied file

5. 创建文件的符号链接

也有一种链接叫做 软链接符号链接。我们用 -s 选项来实现。下面是命令的示例。

$ cp -s /home/pungki/Documents/file_6.txt file_6.txt

创建符号链接只能在当前目录下进行。在上面的截图中,我们想要创建符号链接 /home/pungki/office/file6.txt 指向原文件 /home/pungki/Documents/file6.txt。但是为了创建符号链接,我必须在将/home/pungki/office作为目标目录。一旦我设法进入目录,我就可以向上面一样运行 cp -s 命令。

现在你列出文件详情,你会看到/home/pungki/office/file_6.txt指向了原文件。在其文件名后标记了箭头符号。

Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

6. 不随符号链接拷贝原文件

[译注:意思是只拷贝符号链接文件]

我们可以用 -P 选项来实现。当对符号链接使用 cp 命令,它会照原样拷贝它自身。来看看下面的示例。

$ cp -P file_6.txt ./movie
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

如你所见,cp 命令照原样拷贝file_6.txt自身。文件类型仍然是一个符号链接。

7. 随符号链接拷贝原文件

现在我们可以试一下-L选项。基本上,这个刚好与上面的 -P 选项 相反。下面是个示例:

$ cp -L file_6.txt ./movie

Copy using -L option

使用这个选项,拷贝的文件将会和file_6.txt原文件一样。我们可以从文件大小看出来。拷贝的文件有50 字节而当file_6.txt作为符号链接时文件大小只有33 字节

8. 文件归档

当我们去拷贝一个目录时,我们会用-r或者-R选项。但是我们也可以用-a选项来归档文件。这样会创建文件和目录的准确套录,如果有的话也可以包括符号链接。下面是示例:[译注:-a 会保留原文件或目录的属性]

$ cp -a directory_1/ /home/pungki/office
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

上列的命令会拷贝一个名为 directory1 的目录到/home/pungki/office目录下。如你所见,**file6.txt**依然作为符号链接被复制。

9. 显示正在做什么

默认情况下,当拷贝作业成功时,我们仅仅会再次看到命令提示符。如果你想了解在拷贝文件时都发生了什么,我们可以用 -v 选项。

$ cp -v *.txt /home/pungki/office

Verbose option

当我们从当前目录下拷贝所有的 txt 文件到 /home/pungki/office 目录,-v选项会显示正在操作的过程。这些额外的信息会帮助我们了解更多拷贝过程。

10. 当原文件较目标文件新时拷贝

我们用 -u选项来实现。下面是具体示例:

$ cp -vu *.txt /home/pungki/office
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

起初我们看到file_1.txt 是0字节大小。然后我们用 vi 编辑,加入一些内容并保存。接下来,我们发现文件大小已经变为了 36 个字节。 与此同时在/home/pungki/office目录中,我们已经包含了所有txt文件。当我们用 -u 选项,结合 -v 选项来查看具体操作,cp 命令会只拷贝比目标目录下新的文件。因此,我们看到只有 file_1.txt 拷贝到 /home/pungki/office 目录下

11. 使用交互模式

交互模式下会询问是否覆盖目标目录下的文件。使用 -i 选项,启用交互模式。

$ cp -ir directory_1/ /home/pungki/office/

Interactive mode

12. 创建备份文件

当目标目录已经含有同名文件,默认情况下 cp 命令会覆盖目标目录下的同名文件。使用 –backup 选项,cp 命令会为每一个现有的目标文件做一个备份。../office 相对于 /home/pungki/office 。下面是示例:

$ cp --backup=simple -v *.txt ../office
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

正如我们看到的,–backup=simple 选项会创建一个在文件名末尾用波浪符标记(~)的备份文件。–backup 选项也有一些其他控制:

  • none, off:从不备份(即使给出 –backup)
  • numbered, t:用编号备份
  • existing, nil :如果编号备份存在则使用编号备份,否者用简易备份[译注:也就是用波浪号]
  • simple, never :总是使用简易备份

13. 只拷贝文件属性

cp 命令也提供给我们 –attributes-only 选项。顾名思义,这个选项只会拷贝文件名及其属性,不会拷贝任何数据。下面是示例:

$ cp --attributes-only file_6.txt -v ../office
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

从上图看出, 原文件 file_6.txt 有 50 字节大小。用了 –attributes-only选项,拷贝的文件只有0字节大小。这是因为文件内容并没有拷贝。

14. 强制拷贝

用了 -f 选项会强制进行拷贝操作。如果目标文件不能打开,可以用 -f 尝试一下。

$ cp -f *.txt -v ../office

Copy with force

15. 在拷贝之前先删除目标

我们可以用,–remove-destination 选项 实现。这个选项与上面的-f选项形成对照。如果 cp 命令在目标目录下发现同名文件, cp 命令会先删除目标文件,然后再拷贝一份新的。下面是示例:

$ cp --remove-destination *.txt -v ../office
Linux:Linux cp 命令的15个示例 - 创建文件和目录的副本
Linux:Linux cp 命令的15个示例 – 创建文件和目录的副本

总结

cp 命令是 Linux 下最基础的命令之一。对于那些想要学习 Linux 的人,必须得把这个命令掌握。当然你也可以在你的终端下键入 man cp 或者 cp –help 来显示更多帮助信息。


via: http://linoxide.com/linux-command/linux-cp-command/

译者:Luoxcat 校对:Mr小眼儿

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

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

Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子

熟悉了 复制命令,下一个相关的命令就是 mv 命令。当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么mv 命令是完成这个任务的首选。

初识 mv 命令

Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子

mv 命令是一个与cp类似的命令,但是它并非创建文件或目录的复制品/副本。不管你在使用什么版本的Linux系统,mv 都默认安装在你的Linux系统上了。来看一下 mv 命令在日常操作中的一些例子。

1.移动文件

移动文件时需要注意的是文件的源地址和目标地址必须不同。这里有个例子,想要将file_1.txt文件从当前目录移动到其它目录,以/home/pungki/为例,语法应该如下:

$ mv file_1.txt /home/pungki/office
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子

如我们所见,当我们移动 file_1.txt 文件时,先前目录的 file_1.txt 就被删除了

2.移动多个文件

如果想一次移动多个文件,我们可以将他们放在一行并用空格分开。

$ mv file_2.txt file_3.txt file_4.txt /home/pungki/office

Move multiple files

如果你的文件有规律可循的话那么你就可以使用通配符。比如,为了移除所有以.txt为扩展名的文件,我们可以用下面的命令:

$ mv *.txt /home/pungki/office

Move using pattern

3.移动目录

不同于复制命令,用 mv 命令移动目录相当直接。移动目录你可以使用不带选项的 mv 命令。看下面的截图就一目了然了。

Moving directory

4.重命名文件或目录

我们也用 mv 命令来重命名文件或目录。不过目标位置和源位置必须相同才可以。然后文件名必须不同。

假定我们当前所在目录为/home/pungki/Documents,而我们想将file_1.txt重命名为file_2.txt。那么命令应该如下:

$ mv file_1.txt file_2.txt

如果是绝对路径,它应该像下面这样:

$ mv /home/pungki/Documents/file_1.txt /home/pungki/Documents/file_2.txt

Renaming file

5. 重命名目录

上一段的规则同样适用于目录。请看这个例子:

$ mv directory_1/ directory_2/

Renaming directory

6. 打印移动信息

当你移动或重命名一大堆文件或目录时,你可能会想在不去目标位置去查看的情况下知道你自己的命令是否成功地执行了。这就要用到-v选项了。

$ mv -v *.txt /home/pungki/office

mv with verbose mode

该方法同样适用于目录。

mv directory with verbose mode

7. 使用交互模式

当你将文件移动到其它位置,而那个位置恰好有同样的文件,这时 mv 命令会覆盖掉原来的文件。对于mv的这一行为一般不会有什么提示。如果想产生一个关于覆盖文件的提示,我们可以使用-i选项。(译注:通常发行版会通过alias命令,将-i作为默认选项,所以会有提示。)

假设我们想将 file_1.txt 移动到 /home/pungki/office。同时,/home/pungki/office 目录下已经有file_1.txt文件了。

$ mv -i file_1.txt /home/pungki/office

mv with interactive mode

这个提示会让我们知道目标位置处file_1.txt的存在。如果我们按y键,那么那个文件将会被删除,否则不会。

8. 使用更新选项

-i 选项会提示我们关于覆盖文件的提示,而 -u 则只在源文件比目标文件新时才执行更新。让我们看一看下面的例子:

Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子

假如 file_1.txt 和 file_2.txt有如下特点:

File_1.txt has 84 bytes file size and it last modified time is 12:00
File_2.txt has 0 bytes file size and it last modified time is 11:59

我们想将它们移动到 /home/pungki/office 目录下。但是目标地址已经有file_1.txt和file_2.txt了。

我们用下面的命令将file_1.txt 和file_2.txt从当前目录移动到/home/pungki/office

$ mv -uv *.txt /home/pungki/office

可以看到这些文件被移动了。能移动这些文件是因为它们最近的修改时间戳比 /home/pungki/office 目录中的文件新。

9.不要覆盖任何已存在的文件

如果-i选项询问我们是否要覆盖文件,那么 -n 选项将不会允许我们覆盖任何已存在的文件。

继续使用第8点中的例子,如果我们将-u 换成 -n同时加上-v选项,那么我们会看到没有任何文件移动到了 /home/pungki/office 目录下。

$ mv -vn *.txt /home/pungki/office
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子

10. 复制时创建备份

默认情况下,移动文件将会覆盖已存在的目标文件。但是如果我们移动错了文件而目标文件已经被新的文件覆盖了,这时应该怎么办才好呢?有没有一种方法可以恢复之前的文件呢?答案是肯定的。我们可以用-b选项。该选项会在新文件覆盖旧文件时将旧文件做备份。这里我们还以第8点为例。

$ mv -bv *.txt /home/pungki/office
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子
Linux:Linux 移动或重命名文件/目录-mv 的10个实用例子

如截图中所见,在 /home/pungki/office 目录下出现了名为file_1.txt~ 和 file_2.txt~ 的文件。那个波浪符号(~)意味着这些文件是备份文件。从它们的属性中我们可以看到,这些文件比file_1.txt和file_2.txt要旧。

11. 无条件覆盖已经存在的文件

(译注:这一节是译者补充的,原文遗漏了这个重要选项)

当你希望无论如何都覆盖已经存在的文件或目录时,你可以使用 -f 选项。如果同时指定了 -f 选项和 -i 或 -n 选项,则 -f 选项会覆盖它们——即不进行任何提示而覆盖,所以,在使用此参数时,知道你在做什么。

$ mv -f *.txt /home/pungki/office

总结

移动文件和目录命令是Linux系统的基本命令。通常你可以通过man mv 或者 mv –help显示mv的手册页以了解更多详细信息。


via: http://linoxide.com/linux-command/mv-command-linux/

译者:Linchenguang 校对:wxy

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

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

Linux:Ubuntu One 的10个鲜为人知的功能

尽管 Ubuntu One 看上去像一个仅支持 Ubuntu 文件同步服务,但实际上它可以在 Windows,Android,iOS 和网页上使用。而且,Ubuntu One 提供了5GB的免费存储空间。

Linux:Ubuntu One 的10个鲜为人知的功能
Linux:Ubuntu One 的10个鲜为人知的功能

(图片来自: http://kryuko.deviantart.com/art/Ubuntu-One-Icon-332840346 )

根据 howtogeek.com 的介绍,用户通过 Ubuntu One 可以在线共享文件或目录,推送音乐到手机,在所有的设备上同步已安装的应用等等。下面我们一起来看一下10个Ubuntu One你也许不知道的功能。

1.同步目录 – 在默认设置下,Ubuntu 系统仅仅会同步用户主目录下的 Ubuntu One 目录。但是你可以用鼠标右击任意文件夹,然后点击 Ubuntu One 菜单,选择 Synchronize This Folder 开始同步,这样就可以将这个目录加入到 Ubuntu One 中了。在 Ubuntu One 中,你可以管理所有的已同步目录。

2.限制带宽 – 在默认设置下,Ubuntu One 会使用系统全部的网络带宽来上传或下载文件。但是,如果你接入网络速度比较慢,它也允许设定上传和下载速度。你可以在 Ubuntu One 主窗口的设置界面里找到带宽设置。

3.在Windows上使用Ubuntu One – Ubuntu One 不是仅仅在 Linux 上运行,它也有一个 Windows 的客户端,提供完整的文件同步支持。Ubuntu One 是一个跨平台的文件同步服务,即使是完全没有接触过 Ubuntu 的 Windows 用户,也可以使用 Ubuntu One 提供的服务。

4.共享文件 – 在文件管理器的鼠标右键菜单或者 Ubuntu One 网站,你可以将文件或者目录共享到因特网上,也可以选择分享给指定的 Ubuntu One 用户。

5.同步已安装应用 – Ubuntu One 可以在你所有的计算机上同步你从Ubuntu的软件中心安装的应用,这样你就可以轻松管理已安装的应用。

6.手机应用 – Ubuntu One 为 Android,iPhone,iPad和Ipod Touch 提供了应用。通过这些应用,你可以在移动设备上轻松访问 Ubuntu One 的文件。

7.自动上传智能手机中的相片 – 移动应用还支持自动上传手机中的相片到 Ubuntu One 云服务器中,这样你可以轻松地在所有的设备上浏览你的相片。

8.在线音乐播放 – Ubuntu One 还提供了 Ubuntu One 音乐应用,支持 Android和iOS。你可以通过智能手机在任意地方欣赏你的音乐,也可以选择缓存到本地离线播放。

9.同步联系人 – Ubuntu One可以同步你的联系人并在线保存。目前,你可以在 Ubuntu One 网页上导入 Facebook 联系人,或者手动添加。早期版本的 Ubuntu 还支持同步 Evolution 邮件客户端的联系人,但在新的12.04版本中不支持从 Thunderbird 邮件客户端同步联系人。

10.在浏览器中管理你的文件 – 在电脑上安装了 Ubuntu One 后,可以在 Ubuntu One 网页上管理本地文件。你可以在浏览器中下载文件,上传文件,或者管理现有的文件。


via: http://www.efytimes.com/e1/fullnews.asp?edid=127466

译者:zpl1025 校对:Caroline

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

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

Linux:自学Linux命令的四种方法

learning-linux-840x420

如果你想成为Linux高手,那么掌握一些Linux命令是必不可少的。下面是自学Linux命令的四种方法。

每日提示

learncommands_tipoftheday

学习Linux命令的一种渐进式方法是:在每次打开终端时,让它显示“每日提示”。这会向你介绍一些有用的命令及其高级使用技巧。在.bashrc中(/home/.bashrc)增加如下一行:

echo "Did you know that:"; whatis$(ls /bin | shuf -n 1)

你只需要增加这行就够了!如果你想让它更娱乐化一些,你可以安装cowsay。Ubuntu/Debian下安装cowsay:

sudo apt-get install cowsay

Fedora下安装cowsay:

yum install cowsay

除了安装cowsay,还需要在.bashrc中增加:

cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2> /dev/null | shuf -n 1)

然而,上述使用cowsay的方法并不是在所有Linux发行版下均可运行成功。

使用“whatis”

如果你不喜欢学习随机的命令,或许你喜欢在使用某种命令的时候学习它的用法。这时你只需要在其前面加上whatis即可。Whatis会逐条的解释你输入的命令。

learncommands_whatis

上图的whatis sudo yum install cheese例子清楚的告诉你:

1)sudo是让你具有管理员权限;

2)yun是软件包管理器;

3)install是让YUM安装软件包;

4)cheese是你打算安装的软件。

这种方法在复杂的或者不常见的命令前执行的效果并不好。但是如果你想了解某个命令的大概用途,这种方法还是值得一试。

浏览命令的所有可用选项

如果你正在使用一个新的命令,那么有两种途径可以查看它的详细用法。一种途径是“man <程序>”,其中<程序>是你要运行的程序名字。例如,“man cp”会在man文件浏览器中告诉你cp的详细用法。

Linux:自学Linux命令的四种方法
Linux:自学Linux命令的四种方法

另一种途径可以更快的查看某个命令的主要用法——“ -help”。例如,“cp -help”会在终端中直接打印出cp命令的大量用法。换句话讲,-help选项在所有的Linux命令中具有相同的含义。

速成班——是的,现在!

最后,你可以在这里学习Linux命令的语法!了解Linux命令的基本语法对于理解命令很有益处,很值得一学。所有的Linux命令都具有相同的结构:

[sudo] program [parameter] [parameter] … [parameter] [-flag] [parameter] [-flag] [parameter] … [flag] [parameter]

让我来分段剖析上述的结构:

  1. 如果一个命令需要管理员权限(root访问权限)才能运行,那么必须在它之前加上“sudo”。这使得在运行命令之输入管理员的密码。
  2. “program”是应用程序的名字。它包括yum, apt-get, cheese, tar, cp, mv和firefox等等。如果没有经过额外的配置,所有可以通过这种方法访问的命令均放在/usr/bin目录下(译者注:默认情况下其它一些目录下的程序也可以这样运行,如/bin下的命令)。对于很多程序,你只需要在终端中输入其名字。例如,在终端中输入”firefox”,然后按Enter键,Firefox就运行起来了。
  3. 在程序名字的后面,你可以使用不同的参数和标志。不同程序在这方面差别很大。例如,命令“cp file1 file2”在file1的所在目录下将其复制一份并另存为file2。这里的“file1”和“file2”是命令“cp”的两个参数。一些命令也通过使用不同的标志来改变其行为。例如,命令“sudo yum install cheese -y”中的“install”是yum的参数,“cheese”是install的参数,“-y”是yum的标志——当yum询问你是否继续的时候,一律默认回答“yes”。需要注意的是,一些标志有自己的参数,而另一些则没有。这里就不给出具体的例子了。每个Linux名字都有自己的一套标志设定,掌握这些需要长时间的积累。

总结

学习Linux命令真的不难——一旦你下定决心和掌握了Linux命令的基本结构。不过一般学习几个小时不会起到明显的效果,这时请不要放弃。重复是最好的学习方式。你要做的就是通过不断的实践来加强记忆。学习Linux命令的资源还有很多,如Linux命令速查表40个重要的Linux命令Linux命令快速入门

原文链接: Danny Stieben 翻译: 极客范 – 小道空空译文链接: http://www.geekfan.net/6603/ 

Linux:如何在Linux上将HTML页面转化成png图片

将一个特定页面抓取为一张png图片的最简单的方法是使用CutyCapt,这是一种在Linux下的方便地将HTML网页转化成矢量图形和位图图像格式的命令行工具(比如,SVG, PDF, PS, PNG, JPEG, TIFF, GIF)。CutyCapt内部使用WebKit渲染引擎来导出网页渲染输出到图片文件中。它使用Qt构建,CutyCapt实际上是一个也可以在Windows上使用的跨平台应用。(译注:也有一个基于IE内核的 IECapt 可以作此用途)

在本篇教程中,我会描述如何将一个HTML网页使用CutyCapt转化成png图片

Linux:如何在Linux上将HTML页面转化成png图片
Linux:如何在Linux上将HTML页面转化成png图片

在Linux上安装 CutyCapt

这是在特定Linux发行版上的安装命令。

在Debian, Ubuntu 或者 Linux Mint 安装 CutyCapt

$ sudo apt-get install cutycapt

在Fedora上安装 CutyCapt

$ sudo yum install subversion qt-devel qtwebkit-devel gcc-c++ make
$ svn co svn://svn.code.sf.net/p/cutycapt/code/ cutycapt
$ cd cutycapt/CutyCapt

在Fedora上编译前,你需要在源码上打上补丁

使用文本编辑器打开CutyCapt.hpp,并且加入在文件的开头加上下面的两行。

#include
#include 

最后,如下编译并安装CutyCapt。

$ qmake-qt4
$ make
$ sudo cp CutyCapt /usr/local/bin/cutycapt

在CentOS 或者 RHEL安装 CutyCapt

首先在你的Linux上启用EPEL仓库。接着和在Fedora上一样使用相同的步骤编译安装。

使用CutyCapt将 HTML 转化成 PNG

将一个HTML页面截图成一个png图片,只要使用下面的格式运行CutyCapt。

$ cutycapt --url=http://www.cnn.com --out=cnn.png

要将HTML页面保存成不同的格式(比如,PDF),只要适当地指定输出文件。

$ cutycapt --url=http://www.cnn.com --out=cnn.pdf

下图显示了CutyCapt命令选项。

Linux:如何在Linux上将HTML页面转化成png图片
Linux:如何在Linux上将HTML页面转化成png图片

在一台不含X的服务器上使用CutyCapt将HTML转换成PNG

虽然CutyCapt是一个命令行工具,但是它需要X服务运行。如果你尝试在不含X服务的机器上运行,你会得到下面这个错误:

cutycapt: cannot connect to X server :0

如果你要不含X的服务器上运行CutyCapt,你可以在服务器上安装Xvfb(轻量级“假的”X11 服务)。这样CutyCapt就不会报错了。

要在Debian, Ubuntu 或者 Linux Mint 上安装Xvfb:

$ sudo apt-get install xvfb

要在Fedora, CentOS 或者 RHEL 上安装Xvfb:

$ sudo yum install xvfb

在安装Xvfb之后,接下来像这样运行CutyCapt。

$ xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url=http://www.cnn.com --out=cnn.png

它首先会运行Xbfb服务,接着使用CutyCapt来抓取网页。因此它可能会花费更长的时间。如果你想要截图多张截图,你可能事先需要将Xvfb作为后台守护进程启动。


via: http://xmodulo.com/2014/02/convert-html-web-page-png-image-linux.html

译者:geekpi 校对:wxy

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

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

Linux:每日 Ubuntu 小技巧——Intel图形安装程序 1.0.3 发布,支持 Ubuntu 13.10 … …

对于那些使用Intel显卡台式机或者笔记本来运行 Ubuntu Linux 13.10 的用户来说,有件事可能想要完成——安装 Linux 版本的Intel图形安装程序。

Linux 版本的Intel图形安装程序允许用户方便地安装最新的Intel图形和视频驱动程序。现在之前,仍不支持 Ubuntu 13.10。

如果你想保持目前Intel卡在你机器中的最新驱动程序,你可能需要这个安装程序。它能增强、优化并提供Intel图形硬件最好的用户体验。

访问官网:https://01.org/linuxgraphics/downloads/2013/intelr-graphics-installer-1.0.3-linux

在 Ubuntu 中安装Intel图形安装程序

如果你确定你的计算机有Intel图形卡,而且你正在运行的版本是 Ubuntu 13.10,继续下面的学习如何安装这个包,

有些用户安装和配置驱动程序包后曾造成系统问题,所以你应该在安装前持谨慎态度,并备份你的系统。当你完成后,执行下面的命令来下载32位版本的软件包。

32位 Ubuntu Linux

cd /tmp && wget https://download.01.org/gfx/ubuntu/13.10/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.3_i386.deb

对于那些运行64位的 Ubuntu,运行下面的命令来下载64位版本。

64位 Ubuntu Linux

cd /tmp && wget https://download.01.org/gfx/ubuntu/13.10/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.3_amd64.deb

下载完成后,运行以下命令进行安装。

sudo dpkg -i intel-linux-graphics-installer*.deb; sudo apt-get -f install

安装程序安装完毕后,进入 Unity Dash 搜索安装程序。打开后继续。它会为你的设备搜索并确定正确的驱动程序。

Linux:每日 Ubuntu 小技巧——Intel图形安装程序 1.0.3 发布,支持 Ubuntu 13.10 ... ...
Linux:每日 Ubuntu 小技巧——Intel图形安装程序 1.0.3 发布,支持 Ubuntu 13.10 … …

为了让你的系统信任Intel图形安装程序,您必须运行下面命令来添加 key 到 Ubuntu 的软件库中。

wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | sudo apt-key add -

就这么简单。如果你按照以上步骤做了,你的机器应该能正确运行Intel驱动程序。如果不是,可能是你的显卡不兼容,或者是不支持。


via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-intel-graphics-installer-1-0-3-released-supports-ubuntu-13-10/

译者:乌龙茶 校对:Caroline

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

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

Linux:在 Linux 下用 mkdir 命令来创建目录和子目录

了解了用 ls 命令在目录中列出条目后,现在我们要学习在 Linux 系统下创建目录。在 Linux 下,我们可以使用 mkdir 命令。Mkdir 是“make directory” 的缩写词。

mkdir 是什么呢

Mkdir 是一个用来在 Linux 系统下创建目录的命令。此命令属于内建命令。

运行 mkdir 命令

你可以在你的控制台直接键入 mkdir 来使用它。

$ mkdir

默认情况下,不带任何参数运行 mkdir 命令会在当前目录下创建目录。下面是参考示例:

mkdir command

从上图看出,我们创建了名为 office 的目录。当我们运行 mkdir 命令时,我们位于 /home/pungki 目录。所以这个新目录 office 创建在/home/pungki目录下。如果我们使用绝对路径 – 例如:/usr/local – , 则 Linux 会在 /usr/local目录下创建一个目录。

当 Linux 发现想要创建的目录已经存在, 那么 Linux 会提示我们 Linux 无法创建它。

mkdir directory exist

另外一个创建目录的首要条件是, 在想要创建目录的目标路径下你必须具有访问权限。当你无法取得权限时 mkdir 会报告这个错误。

mkdir permission denied

创建多个目录

我们也可以同时创建多个目录。比如我们要创建的目录有 ubuntu, redhat 和 slackware。那么语法会像这样子:

$ mkdir ubuntu redhat slackware

create multiple directories

添加包含子目录的目录 [译注:递归地创建目录]

当你要创建的目录包含子目录时,你需要使用 -p 参数。如果 mkdir 找不到父目录,那么这个参数会首先帮助创建父目录。比如说我们要创建名为 letter 的目录,在它的目录下包含有子目录 important。那么语法会像这样子:

$ mkdir -p letter/important
Linux:在 Linux 下用 mkdir 命令来创建目录和子目录
Linux:在 Linux 下用 mkdir 命令来创建目录和子目录

设置访问权限

使用 -m 参数,我们可以给即将生成的新目录设置权限。示例如下:

$ mkdir -m=r-- letter

上面的命令会创建一个名为 letter 的目录,同时为目录所有者、用户组和其他用户针对该目录赋予只读权限

mkdir set privilege

打印创建目录的过程信息

如果我们要查看信息,我们可以使用 -v 参数来实现。示例如下:

$ mkdir -v ubuntu redhat slackware

mkdir verbose

总结

Mkdir 命令也属于一个最基础的命令,对于想要学习 Linux 的朋友这个命令必须掌握。像往常一样,你可以键入man mkdirmkdir –help来显示 mkdir 的手册页面和更加深入的探讨。


via: http://linoxide.com/linux-command/linux-mkdir-command/

译者:Luoxcat 校对:Mr小眼儿

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

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

Linux:如何在 Linux 下执行 bin 文件

嗨,各位 Linux 极客们,

在这篇简短教程中,我会指导你们如何在你的 Linux 机器上安装 .bin 文件。并不是一些可怕的终端命令,我保证!但是我同样会展示如何在终端上操作 。

什么是 .bin 文件?

.bin 文件是在 Linux 和类 Unix 操作系统上的自执行文件。在执行 .bin 文件之前,你需要给它执行权限。这可以通过命令行或者 gui 完成。如果你喜欢用命令行那么打开一个新的终端并运行如下的命令来给予文件执行权限。

chmod +x filename.bin

接着用下面的命令执行。

./filename.bin

确保你在运行上面的命令的时候是超级用户。

那又如何从 gui 来完成呢?进入 .bin 文件的目录并点击鼠标右键,接着如下图所示进入属性。

Linux:如何在 Linux 下执行 bin 文件
Linux:如何在 Linux 下执行 bin 文件

选择 Permissions 并勾选 Allow executing file as a program

Linux:如何在 Linux 下执行 bin 文件
Linux:如何在 Linux 下执行 bin 文件
Linux:如何在 Linux 下执行 bin 文件
Linux:如何在 Linux 下执行 bin 文件

双击文件后它就会执行。这样就完成了。


via: http://www.unixmen.com/execute-bin-files-linux/

译者:geekpi 校对:Caroline

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

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

Linux:每日 Ubuntu 小技巧:怎样在Ubuntu升级新的 Linux Kernel 3.12.7

Linux Kernel 版本3.12.7主线已经发布了,而这篇简短教程将会向你展示怎样简单地在 Ubuntu 中升级。如果你正好运行 Ubuntu 13.10 或者更低版本,还碰巧你的系统还不是安装最新的内核,读完吧。

Linux Kernel 是 linux 操作系统的核心,包括了 Ubuntu。内核使 Ubuntu 可以与系统硬件(内存,CPU,设备等等)通信。内核管理资源并掌管你机器设备的所有重要部分。

没有 Linux Kernel, Ubuntu 只是一串幻想应用而不能连接硬件或者你机器所有的重要部分。这就是为什么Linux Kernel 如此的重要。

为什么升级你的 Ubuntu Kernel?

在升级你的系统内核之前,第一件需要知道的事情就是升级可能会破坏你的系统,使它无法使用。事实上,并不推荐你自己升级内核。Ubuntu 的总公司 Canonical 在 Ubuntu 内核升级上做得很好。

在新版本发布之前,他们测试并且确定内核的安装是兼容的。所以,如果你的设备工作良好,没有问题,你应该保持现有内核,不要升级。

另一方面,如果 Ubuntu 不能识别所有系统的元件或者你的设备功能不正确,升级 Linux kernel 也许会有帮助。

这是因为新的内核为你的新机器增加了新的驱动和功能。如果现在安装的内核不支持机器上的某些功能,你应该升级一下。

更多关于内核3.12.7,点这里阅读更新日志

现在升级 Linux Kernel

要想升级你的内核,运行下列命令来升级所有安装包和现存内核。

sudo apt-get updatesudo apt-get dist-upgradesudo apt-get autoremove

升级完成后,重启你的设备。在安装完系统包和内核后重启机器是一个好习惯。这样做是为了让新的内核能够被应用。

接下来,运行下列命令来下载 Linux Kernel 3.12.7

32位设备,运行下列命令

cd /tmpwget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207-generic_3.12.7-031207.201401091657_i386.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207_3.12.7-031207.201401091657_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-image-3.12.7-031207-generic_3.12.7-031207.201401091657_i386.deb

64位设备,运行下列命令

cd /tmpwget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207-generic_3.12.7-031207.201401091657_amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207_3.12.7-031207.201401091657_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-image-3.12.7-031207-generic_3.12.7-031207.201401091657_amd64.deb

下载你的系统对应版本后,运行下列命令

sudo dpkg -i *.deb

安装完成后,重启你的设备,如果一切都按照上面描述一样进展顺利,你的系统应该拥有了最新稳定的内核版本。

Linux:每日 Ubuntu 小技巧:怎样在Ubuntu升级新的 Linux Kernel 3.12.7
Linux:每日 Ubuntu 小技巧:怎样在Ubuntu升级新的 Linux Kernel 3.12.7

卸载内核3.12.7版本,使用下列命令

sudo apt-get remove linux-headers-3.12.7-* linux-image-3.13.7-*

好好享受吧!


via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-linux-kernel-3-12-7-released-heres-how-to-upgrade-in-ubuntu/

译者:Vic___ 校对:Caroline

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

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

Linux:加盐密码哈希:如何正确使用

如果你是Web开发者,你很可能需要开发一个用户账户系统。这个系统最重要的方面,就是怎样保护用户的密码。存放帐号的数据库经常成为入侵的目标,所以你必须做点什么来保护密码,以防网站被攻破时发生危险。最好的办法就是对密码进行加盐哈希,这篇文章将介绍它是如何做到这点。

在对密码进行哈希加密的问题上,人们有许多争论和误解,这大概是由于网络上广泛的误传吧。密码哈希是一件非常简单的事情,但是依然有很多人理解错误了。本文阐述的并不是进行密码哈希唯一正确的方法,但是会告诉你为什么这样是正确的。

Linux:加盐密码哈希:如何正确使用
Linux:加盐密码哈希:如何正确使用

郑重警告:如果你在试图编写自己的密码哈希代码,赶紧停下来!那太容易搞砸了。即使你受过密码学的高等教育,也应该听从这个警告。这是对所有人说的:不要自己写加密函数!安全存储密码的难题现在已经被解决了,请使用phpass或者本文给出的一些源代码。

如果因为某些原因你忽视了上面那个红色警告,请翻回去好好读一遍,我是认真的。这篇文章的目的不是教你研究出自己的安全算法,而是讲解为什么密码应该被这样储存。

这里也给出了一些基于BSD许可的哈希函数源代码:

为什么密码需要进行哈希?

hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366
hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542

哈希算法是一个单向函数。它可以将任何大小的数据转化为定长的“指纹”,并且无法被反向计算。另外,即使数据源只改动了一丁点,哈希的结果也会完全不同(参考上面的例子)。这样的特性使得它非常适合用于保存密码,因为我们需要加密后的密码无法被解密,同时也能保证正确校验每个用户的密码。

在基于哈希加密的账户系统中,通常用户注册和认证的流程是这样的:

  1. 用户注册一个帐号
  2. 密码经过哈希加密储存在数据库中。只要密码被写入磁盘,任何时候都不允许是明文
  3. 当用户登录的时候,从数据库取出已经加密的密码,和经过哈希的用户输入进行对比
  4. 如果哈希值相同,用户获得登入授权,否则,会被告知输入了无效的登录信息
  5. 每当有用户尝试登录,以上两步都会重复

在第4步中,永远不要告诉用户到底是用户名错了,还是密码错了。只需要给出一个大概的提示,比如“无效的用户名或密码”。这可以防止攻击者在不知道密码的情况下,枚举出有效的用户名。

需要提到的是,用于保护密码的哈希函数和你在数据结构中学到的哈希函数是不同的。比如用于实现哈希表这之类数据结构的哈希函数,它们的目标是快速查找,而不是高安全性。只有加密哈希函数才能用于保护密码,例如SHA256,SHA512,RipeMD和WHIRLPOOL。

也许你很容易就认为只需要简单地执行一遍加密哈希函数,密码就能安全,那么你大错特错了。有太多的办法可以快速地把密码从简单哈希值中恢复出来,但也有很多比较容易实现的技术能使攻击者的效率大大降低。黑客的进步也在激励着这些技术的进步,比如这样一个网站:你可以提交一系列待破解的哈希值,并且在不到1秒的时间内得到了结果。显然,简单哈希加密并不能满足我们对安全性的需求。

那么下一节会讲到几种常用的破解简单哈希加密的办法。

如何破解哈希加密

字典攻击和暴力攻击

Dictionary Attack
Trying apple : failed
Trying blueberry : failed
Trying justinbeiber : failed
...
Trying letmein : failed
Trying s3cr3t : success!
Brute Force Attack
Trying aaaa : failed
Trying aaab : failed
Trying aaac : failed
...
Trying acdb : failed
Trying acdc : success!

• 破解哈希加密最简单的办法,就是去猜,将每个猜测值哈希之后的结果和目标值比对,如果相同则破解成功。两种最常见的猜密码的办法是字典攻击暴力攻击

• 字典攻击需要使用一个字典文件,它包含单词、短语、常用密码以及其他可能用作密码的字符串。其中每个词都是进过哈希后储存的,用它们和密码哈希比对,如果相同,这个词就是密码。字典文件的构成是从大段文本中分解出的单词,甚至还包括一些数据库中真实的密码。然后还可以对字典文件进行更进一步的处理使它更有效,比如把单词中的字母替换为它们的“形近字”(hello变为h3110)。

• 暴力攻击会尝试每一个在给定长度下各种字符的组合。这种攻击会消耗大量的计算,也通常是破解哈希加密中效率最低的办法,但是它最终会找到正确的密码。因此密码需要足够长,以至于遍历所有可能的字符串组合将耗费太长时间,从而不值得去破解它。

• 我们没有办法阻止字典攻击和暴击攻击,尽管可以降低它们的效率,但那也不是完全阻止。如果你的密码哈希系统足够安全,唯一的破解办法就是进行字典攻击或者暴力遍历每一个哈希值。

查表法

Searching: 5f4dcc3b5aa765d61d8327deb882cf99: FOUND: password5
Searching: 6cbe615c106f422d23669b610b564800: not in database
Searching: 630bf032efe4507f2c57b280995925a9: FOUND: letMEin12
Searching: 386f43fab5d096a7a66d67c8f213e5ec: FOUND: mcd0nalds
Searching: d5ec75d5fe70d428685510fae36492d9: FOUND: p@ssw0rd!

查表法对于破解一系列算法相同的哈希值有着无与伦比的效率。主要的思想就是预计算密码字典中的每个密码,然后把哈希值和对应的密码储存到一个用于快速查询的数据结构中。一个良好的查表实现可以每秒进行数百次哈希查询,即使表中储存了几十亿个哈希值。

如果你想更好地体验查表法的速度,尝试使用CrackStation的free hash cracker来破解下图中四个SHA256加密的哈希值吧。

c11083b4b0a7743af748c85d343dfee9fbb8b2576c05f3a7f0d632b0926aadfc
08eac03b80adc33dc7d8fbe44b7c7b05d3a2c511166bdb43fcb710b03ba919e7
e4ba5cbd251c98e6cd1c23f126a3b81d8d8328abc95387229850952b3ef9f904
5206b8b8a996cf5320cb12ca91c7b790fba9f030408efe83ebb83548dc3007bd

反向查表法

Searching for hash(apple) in users' hash list... : Matches [alice3, 0bob0, charles8]
Searching for hash(blueberry) in users' hash list... : Matches [usr10101, timmy, john91]
Searching for hash(letmein) in users' hash list... : Matches [wilson10, dragonslayerX, joe1984]
Searching for hash(s3cr3t) in users' hash list... : Matches [bruce19, knuth1337, john87]
Searching for hash(z@29hjja) in users' hash list... : No users used this password

这种方法可以使攻击者同时对多个哈希值发起字典攻击或暴力攻击,而不需要预先计算出一个查询表。

首先攻击者构造一个基于密码-用户名的一对多的表,当然数据需要从某个已经被入侵的数据库获得,然后猜测一系列哈希值并且从表中查找拥有此密码的用户。通常许多用户可能有着相同的密码,因此这种攻击方式也显得尤为有效。

彩虹表

彩虹表是一种在时间和空间的消耗上找寻平衡的破解技术。它和查表法很类似,但是为了使查询表占用的空间更小而牺牲了破解速度。因为它更小,于是我们可以在一定的空间内存储更多的哈希值,从而使攻击更加有效。能够破解任何8位及以下长度MD5值的彩虹表已经出现了。

下面我们会讲到一种让查表法和彩虹表都失去作用的技术,叫做加盐

Linux:SYNPROXY:廉价的抗DoS攻击方案

DoS攻击是一个永恒的问题,虽然专业厂商的防火墙,负载均衡类的网关设备能比较有效的防御DoS攻击,但黑客们更倾向于x86+GNU/Linux的组合,原因很简单:足够的廉价。

Linux:SYNPROXY:廉价的抗DoS攻击方案
Linux:SYNPROXY:廉价的抗DoS攻击方案

在linux内核3.13里终于加入了SYNPROXY的新功能,这个模块是一个基于链接跟踪的netfilter扩展,主要干的工作就是把来自客户端的初始SYN包标记成UNTRACKED然后直接导入iptables的”SYNPROXY”的动作(类似ACCEPT,NFQUEUE和DROP),这时内核会扮演网关设备的角色继续跟客户端进行TCP的常规握手流程,SYNPROXY会等到最终的ACK(三次握手)的cookie被验证合法后才会开始让包真正的进入目标端。

开发者Jesper Dangaard Brouer的数据表明SYNPROXY对于对抗SYN FLOOD DOS攻击是非常有效的,笔者今天也在Debian和SLES-12-beta2对SYNPROXY进行了DoS测试,大致结果是在使用hping3和metasploit进行测试,开启SYNPROXY后ksoftirq占用会从8%降低到3%以内。

Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?

电脑高手们都会尽可能地寻找各种快捷高效的操作方式,譬如我们之前介绍过很多快速启动类的工具 (如Executor、Launchy),它们大多都会利用键盘的快速操作,让你脱离鼠标,不必需花太多精力地去移动细小的指针进行操作,使得工作的效率提高许多。

不过,实际上很多时候我们还是不得不用鼠标来操作,尤其是在杀时间最多的网页浏览时,没有鼠标很多事情基本上没法做。但是!作为一个键盘党怎么可以容忍这种事情发生呢!今天介绍的 Vimium 和 Vimperator 就是为解决这个问题而生的,它能让你只用键盘就能高效快速便捷地上网,这才是高手们应该有的境界~嗯,软件也是应该要这么玩才有意思……

关于 Vim 和 Vimium、Vimperator

今天的主角是 Vimium 和 Vimperator,相信很多人一看到上面的两个名字就已经联想到了经典的 Vim 编辑器—— 这是一款被无数人誉为编辑器中的神器。它完全只使用键盘操作,虽然 Vim 的入门学习曲线比较陡峭,但一旦熟悉之后,你将会被其极之高效且无比强大的键盘流操作深深折服,而且一点都不会比使用鼠标的编辑器慢,相反,用得好的高手往往效率比使用一般Win下的编辑器效率要高得多。

Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?
Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?

Vimium 和 Vimperator 就是两款参考了 Vim 按键操作方式和理念而来的浏览器插件,可以让你几乎全程使用键盘快捷键来上网,大大提高浏览效率。如果你本身是一位 Vim 用户的话,你几乎没有学习的门槛,很快就能找到使用 Vim 编辑器那种流畅操作的“熟悉感”!不过,如果你之前完全没有接触过 Vim,那么就得稍微了解学习一下了(PS:学习好 VIM/VI 的操作对于使用 Linux 系统有相当相当巨大的帮助,值得去了解一下)。当然,你也可以将其看作是网页浏览器的快捷键工具,记住一些常用操作就能体验一番高手们行云流水地用键盘工作时的畅快感了。

Vimium 和 Vimperator  的使用

Vimium 其实是一款 Chrome 浏览器中的插件,而 Vimperator 则是 FireFox 火狐浏览器的插件,虽然名字不同,但是他们的操作基本上没有什么区别,所以下面我就以介绍 Vimium 为主吧。Vimperator 的同学可以作为参考一下……

Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?
Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?

用 Vim 的方式利用键盘快捷地浏览网页

Vimium 常用的按键功能解释

  • j:向下细微滚动窗口   k:向上细微滚动窗口
  • J:(Shift+j的意思,以下大写全部表示加Shift) 下一个标签页  K:上一个标签页
  • d:向下滚动半个屏幕   u:向上移动半个屏幕
  • g+g(连续按两下g):回到顶部
  • G:到达页面底部
  • H:后退   L: 前进
  • f:将当前网页上的所有可见链接/输入框分配一个快捷键,输入后就可以打开或者跳转到对应的输入框。如果按的是F,那么将在新窗口中打开页面(见上图)
  • g+i:将光标 定位到输入框,如果有多个可以按Tab键切换
  • x:关闭当前页面   X:恢复刚刚关闭的页面
  • o:相当于Chrome中的地址栏,可以匹配历史记录、收藏夹并在当前窗口打开,或者直接打开一个网址或者搜索一个关键字(Chrome在全屏的时候地址栏死都出不来,有了它就解决这个一直困扰我的问题了!~),如果按的是O,则可以在新窗口中打开,非常非常方便!
  • g+s:查看网页的源代码
  • r:重新载入当前网页(顺便提一句,这点上新浪微博和它是一样的,光标没有定位在发送框时,即便没有安装这个插件你也可以用j/k来控制页面上下滚动,用r在刷新,用f或者p来定位到发送框。而Gmail的快捷键如j,k上下移动光标也是类似,有兴趣大家可以再自己去了解一下一些常用web应用的快捷键)

了解更多的快捷键

Vimium / Vimperator 的快捷键远远不止我上面写的这些,想要把它玩得炉火纯青的话,按 shift+/ (chrome)或者是进入设置页面(firefox+chrome),可以找到更详细的的帮助。甚至,你还可以在设置中按照你自己的习惯替换掉一些键。如果有些网站你不想它占用你的按键的话,可以在设置中加入例外,比方说豆瓣电台(小问题:你知道豆瓣电台的快捷键吗?)

Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?
Linux:黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?

Vimium 介绍视频

下面这个视频会帮助你更加好的理解如何使用它,以及用 Vimium / Vimperator 所带来好处!

写在后面

假如你是一个十足的键盘党,或者想体验一下键盘流操作所带来的高效畅快的感觉,那么 Vimium 和 Vimperator 绝对是你最佳的选择(我估计在浏览器中,类似的同样优秀的插件不会多了),要知道,在国外它们可是被誉为“The Hacker’s Browser ”(黑客浏览器)。同样,这也是 Vim 用户梦寐以求的插件,来 iPlaySoft “爱玩”软件的同学试一试总不会错吧。

 

via : http://www.iplaysoft.com/vimium-and-vimperator.html 

Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

我们可能在 Linux 下运用 touch 命令创建一个空文件。当然我们也可以使用其他命令例如 vi, nano 或是任意一个编辑工具来实现。但是你可能需要更多的步骤来完成操作。其实你要知道 touch 命令的主要功能并不是为了创建一个空文件哦。

Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

什么是 touch 命令

众所周知,每个文件都被附有时间戳。这个时间戳记包括访问时间和修改时间。而 Touch 命令主要就是用来修改文件的访问时间和修改时间。

为什么我们需要使用 touch 命令

既然 touch 命令描述的是改变时间戳,那么我们可能会想为什么我们需要去改变时间戳呢?这个问题会引发我们的深思。然而,我想有个理由可以解释为什么我们需要使用它。如果你参加了一个全球范围的开源项目,那么时间戳可能变得很重要。编译源代码文件可能需要同一地区的时间戳。如果未统一,程序可能会编译失败。(译注:有强迫症的同学也很喜欢这个命令——就看不得乱七八糟的时间,;>)

不带任何选项下运行 touch

最简单的使用 touch 命令。只需键入:

$ touch file_name

请观察下面的一张截图。

Touch command

File_1.txt原来的时间戳是 12:42。在我们使用 touch 命令后,它改变为了 17:08。由此看出,默认情况下,touch 会将文件的时间戳改为当前时间。

只改变访问时间

正如我们之前提到的,每个文件都附有访问时间和修改时间。上面的时间戳是 17:08。我们可以看更多的细节。

Detail timestamp

我们发现访问时间和修改时间的值是相同的都是 17:08:35 ,还有它们属于同一时区 GMT +7。

如果现在我们要只改变访问时间,我们需要使用-a选项。

$ touch -a file_1.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

如你所见,访问时间变为了 17:51:37 ,但是修改时间仍为17:08:35。[译注:原文为 Change time(状态改变时间)应是作者笔误]

只改变修改时间

我们可以使用-m选项来实现。现在我们用file_2.txt作个示例。

File_2.txt detail timestamp

$ touch -m file_2.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

现在修改时间从 12:42:20 改为了 17:57:20。请注意,当文件被访问或修改时,状态改变时间域的值总会对其记录。

更改为自定义时间戳

-a-m选项都会将文件的时间戳改为现在当前时间。当然我们也可以更改为自定义时间戳。使用-t选项实现。

从上面示例示例中的 file_2.txt,我们看出它的时间戳是:

访问时间:12:42:20
修改时间:17:57:20
执行日期:2014-01-14

假如我们想要将访问时间和修改时间改为2014年1月12日 09:58:27。我们可以用下列命令来完成:

$ touch -t 201401120958.27 file_2.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

-t 选项语法组成 :

[[CC]YY]MMDDhhmm [.SS]

CC - 年份的前两位
YY - 年份的后两位
MM - 月份 [01-12]
DD - 日期 [01-31]
hh - 时 [00-23]
mm - 分 [00-59]
SS - 秒 [00-61]

改变日期和时间的另一种方式

如果你觉得[[CC]YY]MMDDhhmm [.SS]格式不适合你,我们也可以使用 -d 选项。下面是-d选项使用的一个示例。

更改指定日期

举例来说,我们有个名为 file_3.txt 的文件,它的相关属性在下面的截图中展示了。

File_3.txt detail timestamp

现在我们要将日期2014年1月14日改为2013年12月20日。可以使用下列命令:

$ touch -d '10-December-2013' file_3.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

不出意料,访问时间和修改时间的日期已经改为了2013年12月10日。

改变时区

如果我们想改变指定GMT的时间,我们也可以使用-d选项。先让file_3.txt 移回当前时间。

$ touch file_3.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

不难发现 file_3.txt 的时区为 GMT +0700。要改为 GMT3 时区,我们只需要键入如下命令:

$ touch -d GMT3 file_3.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

好的,现在时间已经改为了 10:00:00 AM。

结合参数下使用-d选项

还可以用很酷的方式使用-d选项。请观察下面的图片。

Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

我们可以将单词 next Sunday 和 GMT 3合成一个值,而 touch 命令仍然能识别它。日期已经改为了2014年1月21日,而当前的日期为2014年1月14日。

还有另一个-d选项的示例。 首先,我们要将file3_3.txt重置到当前日期和时间。

$ touch file_3.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

然后我们尝试这个命令:

$ touch -d '1 year ago 13:43:07' file_3.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

太震撼了,Touch 甚至能识别单词‘1 year ago’。现在的日期以及时间已经改为了2013年1月14日,13:43:07。

创建一个空文件

当你运行 touch 命令目标文件不存在时,touch 会创建一个同名的空文件。

$ touch file_10.txt

Create an empty file

同时创建多个文件

你可以用空格将目标文件分割开来,以此来创建多个文件。

$ touch doc_10.txt doc_20.txt doc_30.txt
Linux:Linux touch 命令 - 为什么我们需要改变时间戳?
Linux:Linux touch 命令 – 为什么我们需要改变时间戳?

总结

如果你要处理关于文件或目录的时间戳问题,那么 Touch 会对你很有用的。一如既往得你也可以键入man touchtouch –help来显示帮助页面了解更多细节。


via: http://linoxide.com/linux-command/linux-touch-command/

译者:Luoxcat 校对:wxy

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

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

Linux:跨越终端中多个vim实例访问剪切板内容

Vim (Vi IMproved)是一款在程序员之间非常受欢迎的文本编辑器。它在执行不同的快捷命令操作上有它自己的特长。

Linux:跨越终端中多个vim实例访问剪切板内容
Linux:跨越终端中多个vim实例访问剪切板内容

比如,要拷贝高亮的文本,我们使用‘y’命令,并用‘x’来剪切。但是,vim(不是gVim)剪切板的内容默认情况下是不能被其他的vim实例访问的。

Vim版本信息中使用‘+’表示启用了系统剪切板。你可以运行‘vim ­­–version’,如果你看不到像“+xterm_clipboard”而是显示“­xterm_clipboard“,那么会使用内部剪切板,其将不能被其它的vim实例访问。

安装gvim和parcellite

为了访问vim剪切板的内容,你需要安装gvim包。gVim是vim编辑器的GUI模式,它的剪切板选项默认启用。

# yum install -y gvim

然后,使用RPMForge 仓库安装parcellite 包。Parcellite是一款轻量级,小巧而免费的Linux剪切板管理工具。

# yum install -y parcellite

一旦安装后,运行下面的命令。这里的参数‘&’是使parcellite以后台进程运行。

# parcellite &

检查选项已经在gvim中启用。

# gvim --version

确保“+xterm_clipboard”选项显示在下面的输出中。

VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr  5 2012 10:12:08)
Included patches: 1-411
Modified by 
Compiled by 
Huge version with GTK2 GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
+cryptv +cscope +cursorshape +dialog_con_gui +diff +digraphs +dnd -ebcdic
+emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path
+float +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand
+jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap
+menu +mksession +modify_fname +mouse +mouseshape +mouse_dec +mouse_gpm
-mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte
+multi_lang -mzscheme +netbeans_intg -osfiletype +path_extra +perl +postscript
+printer +profile +python +quickfix +reltime +rightleft -ruby +scrollbind
+signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax
+tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse
+textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup
+X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save

打开用户的.bashrc文件。

# vim ~/.bashrc

加入别名并保存文件(按下‘i’来插入行并按下ESC,接着运行:wq来保存并退出)。

# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vim='gvim -v'
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

这个alias是内置的用于将一些命令绕到其他命令上。这样每次当vim命令运行时,相应的别名会启动默认带剪切板的gVim。

现在,用类似的方式编辑你的‘.vimrc’文件(以防你没有 .vimrc文件,生成这样一个文件然后再回来)。

# vim ~/.vimrc

追加下面这行并保存文件。

autocmd VimLeave * call system("echo -n $'" . escape(getreg(), "'") . "' | xsel -ib")

现在在vim中打开任何文件并高亮部分文本(使用’v’命令)并按下’y’。尝试在vim外面的任何地方粘帖(关不关vim都行),你就发现vim里面复制的内容被粘帖出来了。

附:生成 .vimrc 文件

运行下面的命令来生成.vimrc文件(如果你已做了就跳过这部分)。

# cd   [返回到你的主目录]
# vim .vimrc

在vim中在按下ESC键后运行下面的命令(在vim中,每个命令是在按下ESC键后也就是带你进入命令模式后运行的)。

:r $VIMRUNTIME/vimrc_example.vim
:w

via: http://www.tecmint.com/accessing-clipboard-contents-across-multiple-instances-of-vim-from-terminal/

译者:geekpi 校对:wxy

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

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

Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad

在几个月前我买了一个安装了iOS 7系统的iPhone 5手机。当我试着把iPhone或者iPad连接到Linux电脑(Ubuntu和Linux Mint)上时,它能够被识别,会提示我:“是否信任这台电脑”?

Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad
Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad

然后我心中默念“我会的”,选择了“信任”,在等待了几秒后,它又重新提示我“是否信任这台电脑”?我继续点了“信任”。然后又提示同样的问题。我感觉我的手机陷入了一个while(true)的死循环。在Ubuntu而在我的Ubuntu电脑上,它只是提示我的iPhone被锁定了,所以我不能访问上面的文件。

在网络上搜索了一会,我才知道这个iOS 7在Linux系统上是否信任这台电脑的死循环是一个已知的问题

这实际上是iOS 7系统的一个新安全特性,针对解决假冒的iPhone充电器问题。既然这样,那这篇文章在说什么?有没有办法解决iOS 7在Linux系统中的“信任这台电脑”的问题libimobiledevice库希望在1.1.6版本中去解决这个问题,只不过稳定版本却一直遥遥无期。 不过别灰心,你仍然可以使用libimobiledevice的非稳定版本,然后轻松地连接你的iPhone和Ubuntu。让我来告诉你,怎么把iPhone手机连接到Ubuntu 13.10或者Linux Mint 16上,而不会有“信任这台电脑”的麻烦。

在Ubuntu 12.04上解决iOS 7的“信任这台电脑”问题:

如果你安装的是Ubuntu 12.04 LTS(32位或64位)或者Linux Mint 13 Maya,你可以添加下面Ingo Haschler的PPA源:

sudo apt-add-repository ppa:ingo/ios7support
sudo apt-get update
sudo apt-get upgrade

之后,libimobiledevice库(已经安装过)会升级到不稳定的1.6版本,然后重启你的电脑,再重新连接iPhone。现在,它应该可以正常使用了。

说明:

如果你碰到“锁定错误”,那么再试试下面的命令:

sudo mkdir /var/lib/lockdown
sudo chmod 777 /va7Lib/lockdown

在Ubuntu 13.10上解决iOS 7的“信任这台电脑”问题:

对于资深的Linux用户,你可以从GitHub上下载源码然后自己编译。对于使用Ubuntu 13.10 64位Linux Mint 16 64位系统的用户,有个Iuri Diniz编译好的Debian包可以用,你可以下载安装这个.deb包,然后就可以很轻松地在Ubuntu 13.10 64位系统上看到你的iPhone了。

双击下载后的.deb文件进行安装。提醒一下,因为Ubuntu和Linux Mint默认已经安装了这个库,所以你看到的会是升级库libimobiledevice,而不是安装它。

Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad
Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad

在装好后,你的iPhone或者iPad应该可以正常连接电脑了。下面是一张我把我的iPhone连接到一台Ubuntu 13.10电脑上的截图。

Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad
Linux:在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad

我可以访问手机上的文件,还可以从Ubuntu传送文件到iPhone。它还会被Rythembox软件认到并开始同步歌曲。这不是第一次,我在把移动设备接到Ubuntu上碰到问题。上次,我写过怎么连接Kindle Fire HD和Ubuntu

我希望这个快速教程也可以解决你可能碰到的“信任这台电脑”的死循环问题。如果这个方法管用,或者你仍然还是不能把你的饿iPhone连接到Ubuntu上,都可以联系我。Ciao


via: http://itsfoss.com/mount-iphone-ipad-ios-7-ubuntu-13-10/

译者:zpl1025 校对:wxy

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

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

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

不管你的Ubuntu 13.10系统是重新安装的或是从以前旧版本升级的,在使用了一段时间后,你应该会感觉到系统开始变慢。在这篇文章中,我们将了解到一些让你的Ubuntu运行得更快的技巧

在我们动手提高Ubuntu 13.10的整体系统性能之前,先思考下为什么系统会随着时间变慢。这里可能有很多原因,比如,你可能有一台简单设置了一下的低配电脑,你可能安装了很多在开机时吃掉系统资源的应用程序。实际上有各种理由。

在这里列出了一些小技巧,能帮你提高一点Ubuntu的速度。还有一些很好的技巧,可以用来提高系统性能,让系统运行更流畅。你可以选择尝试所有技巧或者其中的一部分,他们每一个都可以让你的Ubuntu更流畅,更敏捷,更迅速。

让Ubuntu 13.10运行更快的技巧:

我已经在我的Ubuntu 13.10上应用过这些技巧,但是我相信它们同样可以应用在旧版本的Ubuntu系统上,或者其他基于Ubuntu的Linux发行版,比如:Linux Mint,Elementary OS Luna等等。

减少grub默认的引导等待时间:

grub默认会给你10秒钟时间来选择要引导的系统或是进入恢复模式,这对于我来说太长了。这意味着你得呆在电脑边上按下确认键来立刻引导Ubuntu。是不是觉得有点浪费时间?第一个小技巧就是改变引导等待时间。如果你更喜欢GUI工具,可以阅读这篇文章通过Grub Customizer调整grub等待时间和引导顺序

对其他人来说,只需要通过下面的简单命令来打开grub配置文件:

sudo gedit /etc/default/grub &

GRUB_TIMEOUT=10改为GRUB_TIMEOUT=2,这样就可以把引导等待时间改成2秒。最好不要改成0,因为这样你就不能选择其他操作系统或者恢复模式了。在修改完成后,用下面的命令使改动生效:

sudo update-grub

管理开机启动应用程序:

慢慢的你开始安装各种应用程序。如果你是It’s FOSS的读者,你可能安装了许多本周最佳应用程序系列里推荐的应用。这里面很多应用都会开机启动,程序运行肯定会要消耗系统资源,结果就是:一台每次开机都要很长时间的缓慢启动。打开Unity Dash,然后找到启动应用

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

在里面,检查一下那些开机启动的程序,考虑一下哪些是你觉得没有必要每次开机都启动的程序,然后尽情地移除吧。

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

万一你不想从开机启动列表里移除程序呢?比如说,你安装了Ubuntu 13.10里最好的提示插件里推荐的程序,你希望它们可以在每次开机时都自动启动。这种情况可以这样处理,为应用程序的启动设定一个等待时间。这样,你可以缓解一点启动时的资源占用,而你的应用程序仍然会自动启动,不是是在一段时间后。在前一张图中,点击Edit,然后在运行的命令中加入一个等待。例如,如果你想延迟20秒再启动Dropbox提示,只需要在当前的命令前面增加一条命令

sleep 20;

这样,命令‘dropbox start -i‘变成了‘sleep 20; dropbox start -i‘。这就意味着Dropbox的启动会有20秒延迟。你可以像这样为其他开机启动的应用程序设置一个等待时间。

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

安装preload来加速应用程序加载时间:

Preload是个后台程序,会分析用户的行为和常用的程序。打开终端,用下面的命令安装preload:

sudo apt-get install preload

安装完后重启电脑,然后就可以把它忘了,它会在后台运行。[更多关于preload的信息]

选择最快的软件升级镜像服务器:

最好检查一下自己用来升级软件的镜像服务器是最快的。Ubuntu软件仓库在全球各地都有镜像服务器,建议选择一个离自己最近的。这样可以减少从服务器下载升级包的时间,所以软件升级会更快。

软件与更新->Ubuntu 软件->下载地址里选择其它,然后点击使用最快的服务器

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

系统会自动测试并告诉你哪个镜像服务器是最快的。通常来说,系统默认会选择最快的镜像服务器,但是,检查一下总是没有坏处。不过,如果保存升级包的距离最近的镜像服务器并没有经常保持同步的话,获取更新的时候可能会有点延时。对于网络连接速度比较慢的人来说,这个方法很有用。你可以在文章加速Ubuntu的WIFI速度里更深入地了解这些提示

用apt-fast代替apt-get来加速更新:

apt-fast是用来代替“apt-get”的的一个shell脚本程序,它通过多线程的方式改善了更新和下载安装包的速度。如果你经常用终端和apt-get来安装和升级软件的话,可以试试apt-fast。用下面的命令通过官方PPA安装apt-fast:

sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update
sudo apt-get install apt-fast

从apt-get更新中移除语言相关的可忽略的包:

你有没有注意过sudo apt-get update的输出?里面有三类标志,hitignget。你可以在这里了解它们的含义。检查一下包含IGN的行,你会发现它们大多数都是语言翻译相关的。如果你所有的程序和安装包都是英文的,那完全没有必要检查从英文到英文的安装包数据库。

如果你跳过apt-get的语言相关的更新,能够轻微地提高apt-get update的速度。想这样做的话,在终端里输入下面的命令:

sudo gedit /etc/apt/apt.conf.d/00aptitude

然后在文件末尾加入下面这行:

Acquire::Languages "none";
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

减少系统过热:

如今,过热是计算机的一个普遍问题,一台过热的电脑运行得非常缓慢。如果你的CPU风扇跑得像尤塞恩.博尔特一样快的话,可能会需要超长的时间来打开一个程序。在Ubuntu 13.10中有两个工具可以帮助减少系统过热来实现更好的系统性能,TLP和CPUFREQ。

通过下面的终端命令来安装使用TLP:

sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp tlp-rdw
sudo tlp start

在安装完TLP后不需要做其他额外的事情,它会在后台运行。用下面的命令安装CPUFREQ提示工具:

sudo apt-get install indicator-cpufreq

然后重启电脑,然后选择CPUFREQ的Powersave模式:

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

调整LibreOffice让它运行更快:

如果你经常使用办公软件,那你应该会想调整一下默认的LibreOffice,让它运行得更快些。这里会调整一下内存选项。打开LibreOffice,然后选择工具->选项,然后在左边栏里选择内存,并激活系统加速器来增加内存占用。

Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux
Linux:九大绝招让你在老机器上加速运行 Ubuntu Linux

你可以看一下如何加速LibreOffice了解更多的细节。

使用软件的轻量替代:

这个更像是推荐和喜好。有些系统默认或流行的软件都需要占用大量系统资源,这并不适合一般的低配置电脑。这种情况下,你可以选择使用这些软件的一些替代程序。比如,用AppGrid来替代Ubuntu Software Center;用Gdebi来安装软件;用AbiWord来代替LibreOffice Writer等等。

这些就是我搜集的让Ubuntu 13.10运行更快的技巧。我相信这些小技巧可以整体提升系统性能表现。你是否也有一些隐藏的技巧来加速Ubuntu 13.10?这些小技巧对你是不是有帮助?请和大家分享你的看法,随时欢迎提出任何问题或建议,不要吝啬留下你的评论。


via: http://itsfoss.com/speed-up-ubuntu-1310/

译者:zpl1025 校对:wxy

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

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

Linux:Ubuntu 14.04/13.10 用户怎样安装 Ubuntu Touch 核心应用

这是来自国外博客的教程,没有验证过,喜欢的童靴可以试试。Ubuntu Touch核心应用程序,是在Ubuntu开发者监督下的第三方开发项目创建的,为Ubuntu平台和手机操作系统开发的基本应用程序。

Linux:Ubuntu 14.04/13.10 用户怎样安装 Ubuntu Touch 核心应用
Linux:Ubuntu 14.04/13.10 用户怎样安装 Ubuntu Touch 核心应用

Mark Shuttleworth 的目标是要创建一个完全融合的移动系统,意思就是相同的程序可以在两个版本的Ubuntu中运行:应用程序在分辨率小的和大的显示器上运行良好。

本文将教大家如何在Ubuntu 14.04/13.10系统上安装 Ubuntu Touch 核心应用。

安装和测试Ubuntu Touch核心应用程序需要安装Ubuntu SDK,可以通过一个单独的PPA进行安装,打开终端,输入以下命令:

sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
sudo add-apt-repository ppa:ubuntu-touch-coreapps-drivers/daily
sudo apt-get update
sudo apt-get install ubuntu-sdk touch-coreapps

要安装某个核心应用程序,就将最后一条命令中touch-coreapps替换成想要安装核心应用程序名称,例如要安装ubuntu-weather-app的命令:

sudo apt-get install ubuntu-sdk ubuntu-weather-app

Ubuntu Touch的核心应用程序有如下这些,你可以自己选择进行安装:

ubuntu-calculator-app
calendar-app
ubuntu-clock-app
ubuntu-weather-app
ubuntu-docviewer-app
ubuntu-emailclient-app (not working yet)
ubuntu-filemanager-app
ubuntu-rssreader-app
ubuntu-terminal-app
stock-ticker-mobile-app
dropping-letters
sudoku-app
music-app

 

Linux:Linux 系统实时监控的瑞士军刀 —— Glances

早些时候,我们提到过有很多可以用来监视系统性能的 Linux 系统监视工具。 但我们估计,或许更多的用户会倾向与绝大多数 Linux 发行版都带的工具 (top 命令)。

top 命令是 Linux 下的一个实时任务管理器, 同时也是用于在 GNU/Linux 发行版中寻找系统性能方面的瓶颈,并帮助我们作出正确操作的常用系统监视工具。 她有着一个极为简洁的界面,并自带少量的可以帮助我们快速了解系统性能的实用选项。

但是,有些时候想要通过她寻找一个占用系统资源比较大的应用或进程可能会比较困难。 因为 top 命令本身并不会帮助我们高亮那些吃太多 CPU内存,或者其他资源的程序。

为了达到这个目标,这里我们将介绍一款超牛逼的系统监视程序 —— Glances。 她可以自动高亮利用最高系统资源的程序,并为 Linux/Unix 服务器提供尽可能多的信息。

什么是 Glances?

Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 通过 Glances,我们可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器文件系统 空间的利用情况。

Glances 是一个用来监视 GNU/LinuxFreeBSD 操作系统的 GPL 授权的自由软件。

Glances 同时也提供了很多实用的选项。 其中我们能够在配置文件见到的一项主要的功能就是设置关键值及相应的标签 (careful[小心], warning[警告]critical[严重]), 然后她会自动帮我们用不同颜色标出系统达到某个瓶颈的信息。

Glances 主要功能

  • CPU 信息 (用户的相关应用, 系统核心程序和空闲程序)
  • 总内存信息,包括了物理内存,交换空间和空闲内存等等
  • 之前的 1 分钟、5 分钟和 15 分钟平均的 CPU 负载
  • 网络链接的下行和上行速度
  • 处理器总数,以及其活动状态
  • 硬盘 I/O 相关(读写)速度详情
  • 当前挂载设备的磁盘使用情况
  • 高 CPU 和内存使用的进程名,和相关应用的位置
  • 在底部显示当前日期和时间
  • 将消耗最高系统资源的进程用红色标出

下面是一个 Glances 的使用截图:

Linux:Linux 系统实时监控的瑞士军刀 —— Glances
Linux:Linux 系统实时监控的瑞士军刀 —— Glances

在 Linux/Unix 系统中安装 Glances

虽然这个工具的发布比较晚,但你仍然可以在 Red Hat 系的系统中通过 EPEL 软件源安装。在终端用下面的命令安装:

对于 RHEL/CentOS/Fedora 发行版

# yum install -y glances

对于 Debian/Ubuntu/Linux Mint 发行版

$ sudo apt-add-repository ppa:arnaud-hartmann/glances-stable
$ sudo apt-get update
$ sudo apt-get install glances

如何使用 Glances

首先,你需要在终端中输入以下命令

# glances
Linux:Linux 系统实时监控的瑞士军刀 —— Glances
Linux:Linux 系统实时监控的瑞士军刀 —— Glances

按下 ‘q‘ (‘ESC‘ 和 ‘Ctrl-C‘ 也可以) 退出 Glances 终端。 这里是从 CentOS 6.5 截取的另一张截图:

Linux:Linux 系统实时监控的瑞士军刀 —— Glances
Linux:Linux 系统实时监控的瑞士军刀 —— Glances

Glances 的默认刷新频率是 1 (秒),但是你可以通过在终端指定参数来手动定义其刷新频率

# glances -t 2

Glances 中颜色的含义

Glances 会用一下几种颜色来代表状态:

  • 绿色:OK(一切正常)
  • 蓝色:CAREFUL(需要注意)
  • 紫色:WARNING(警告)
  • 红色:CRITICAL(严重)

阀值可以在配置文件中设置,一般阀值被默认设置为(careful=50warning=70critical=90)。

我们可以按照自己的需求在配置文件(默认在 /etc/glances/glances.conf)中自定义。

Glances 的选项

除了很多命令行选项之外,Glances 还提供了更多的可在其运行时开关输出信息选项的快捷键,下面是一些例子:

  • a – 对进程自动排序
  • c – 按 CPU 百分比对进程排序
  • m – 按内存百分比对进程排序
  • p – 按进程名字母顺序对进程排序
  • i – 按读写频率(I/O)对进程排序
  • d – 显示/隐藏磁盘 I/O 统计信息
  • f – 显示/隐藏文件系统统计信息
  • n – 显示/隐藏网络接口统计信息
  • s – 显示/隐藏传感器统计信息
  • y – 显示/隐藏硬盘温度统计信息
  • l – 显示/隐藏日志(log)
  • b – 切换网络 I/O 单位(Bytes/bits)
  • w – 删除警告日志
  • x – 删除警告和严重日志
  • 1 – 切换全局 CPU 使用情况和每个 CPU 的使用情况
  • h – 显示/隐藏这个帮助画面
  • t – 以组合形式浏览网络 I/O
  • u – 以累计形式浏览网络 I/O
  • q – 退出(‘ESC‘ 和 ‘Ctrl&C‘ 也可以)

远程使用 Glances

你甚至也可以通过 Glances 来监视远程系统。 要在远程系统使用 ‘glances’,需要在服务器运行 ‘glances -s’(-s 启动服务器/客户端模式)命令。

# glances -s
Define the password for the Glances server
Password:
Password (confirm):
Glances server is running on 0.0.0.0:61209

注意:当你执行了‘glances’命令后,她会让你为 Glances 服务器设置密码。

当你设置完毕,你将看到 “Glances server is running on 0.0.0.0:61209” (Glances 服务器正在 0.0.0.0 的 61209 端口运行)的消息。

当 Glances 服务器启动后,到本地执行下面的命令来指定服务器IP地址或主机名以链接。

注:这里的 ‘172.16.27.56’ 是我 Glances 服务器的 IP 地址。

# glances -c -P 172.16.27.56

下面是一些在使用服务器/客户端模式时必须知道的事情:

* 在服务器模式,你可以通过 `-B 地址` 来设置绑定地址,也可以通过 `-p 端口` 来绑定监听的 TCP 端口
* 在客户端模式,你可以通过同样的 `-p 端口` 来指定服务器端口
* 默认的绑定地址是 0.0.0.0,但这么做会监听所有网络接口的指定端口
* 在服务器/客户端模式下,限制的阀值将由服务器的设置决定
* 你也可以在命令行下用过 `-P 密码` 的方式来为服务器端设置一个密码

总结

Glances 对于大多用户而言是个在系统资源上提供过多信息的工具。但是如果你是一个想要仅从命令行就能快速获取系统整体状况的系统管理员,那这个工具绝对是你的必备利器。

译者注

  1. 请不要将 glances(本文中的工具)和 glance(一个 OpenStack 的工具)这两个包搞混了
  2. Ubuntu 官方 Extra 源中的 glances 因为 python 库移动的问题导致无法正常使用 但可以通过建立软链接的方式临时修复:sudo ln -s /usr/lib/python2.7/dist-packages/glances /usr/share/pyshared/glances

via: http://www.tecmint.com/glances-an-advanced-real-time-system-monitoring-tool-for-linux/

译者:VizV 校对:wxy

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

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

Linux:戴文的Linux内核专题:19 配置内核 (15)

Linux:戴文的Linux内核专题:19 配置内核 (15)
Linux:戴文的Linux内核专题:19 配置内核 (15)

你好!在这篇Linux系列文章中,我们将继续配置USB网络驱动。接着我们将进入输入设备。

首先,我们可以启用/禁用”Multi-purpose USB Networking Framework”,这允许连接笔记本到桌面系统上。

下面,可以启用/禁用ASIX USB-to-Ethernet适配器驱动(ASIX AX88xxx Based USB 2.0 Ethernet Adapters)。

那么,还有一个ASIX适配器驱动(ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet)。

注意:通常地,最好将适配器驱动作为模块加入。

通信设备类规范(Communication Device Class specification)在这个驱动中提供(CDC Ethernet support (smart devices such as cable modems))。这个规范用于USB调制解调器。Linux系统可以将USB网络接口识别为以太网网络接口并且指定为”ethX”,这里的”X”是以太设备编号。

下面是一个与上面类似的规范(CDC EEM support)。CDC EEM代表的是”Communication Device Class Ethernet Emulation Model”(通信设备类以太网仿真模型)。

CDC网络控制模型(NCM)同样有一个驱动提供了规范(CDC NCM support)。

这个驱动提供了”CDC MBIM (Mobile Broadband Interface Model)”规范同样也在Linux内核中(CDC MBIM support)。

下面,有一些供货商/设备特定驱动用于不同的USB网络设备和芯片组。

在这之后,有一个用于USB网络设备的通用驱动,它不需要任何特殊的驱动(Simple USB Network Links (CDC Ethernet subset))。

再说一次,还有更多的驱动用于供货商特定设备。

有趣的事实:Linux被用于制作James Cameron的电影"泰坦尼克"的特效。

“CDC Phonet support”是用于使用Phonet的Nokia USB调制解调器。(译注:Phonet是Nokia开发的面向数据包的通信协议,仅用于Nokia maemo/meego产品)

现在,我们可以进入使用802.11规范的无线局域网驱动了。

主要地,这里有一个供货商/设备特定驱动列表。

“SoftLED Support”控制着关于Wifi卡/设备的LED灯。

一些芯片组支持的SDIO在这个驱动中(Atheros ath6kl SDIO support)。SDIO是用于无线SD卡的SD(Secure Digital)规范的扩展。SDIO代表的是”Secure Digital Input/Output”

内核开发者可能注意到一些无线设备可以支持QoS。QoS代表”Quality of Service”(服务质量)。这个特性给予网络传输优先级。假设需要通过网络传输两组数据。只有一个可以先发送。QoS会先发送最重要的数据。

有趣的事实:技术上来说,Linux并不是一个操作系统。Linux是一种内核而GNU/Linux才是操作系统。

WAN卡需要”Generic HDLC layer”。HDLC代表”High-Level Data Link Control”(高级数据链路控制)。这是一个数据链路层协议。

原生HDLC可以通过”Raw HDLC support”驱动启用。

“Raw HDLC Ethernet device support”驱动允许HDLC层模拟以太网。

cHDLC驱动提供了一个HDLC的扩展,同样也称作Cisco HDLC(Cisco HDLC support)。

Linux内核同样也提供了一个HDLC的”Frame Relay support”(帧中继)驱动。帧中继是2层协议。

HDLC同样支持PPP(Synchronous Point-to-Point Protocol (PPP) support)和X.25(X.25 protocol support)。

接下来,这个驱动提供了DLCI下的帧中继(Frame Relay DLCI support)。

“LAPB over Ethernet driver”创建一个允许用户在以太网上使用LAPB的点到点连接到另一台计算机的设备文件。这个设备文件对于第一个此类设备通常是/dev/lapb0。

用这个驱动,X.25帧可以通过电话线发送(X.25 async driver)。特别地,这个驱动允许X.25使用异步串行。

对于ISA SBNI12-xx有一种特殊的驱动(Granch SBNI12 Leased Line adapter support)。这种卡对于租用线路的调制解调器是一种便宜的替代。

下一个驱动允许使用并行连接携带已安排的流量(Multiple line feature support)。这允许Linux系统更加有效地在SBNI12适配器上管理并行连接。一些Linux用户声称这个驱动双倍加速了他们的速度。然而,这个我没有亲身测试了解。

接下来,可以配置”IEEE 802.15.4 drivers”。这个是对于慢速WAN设备。这是一个控制媒体和无线网络物理层的标准。这个规范在不同的大洲使用不同的频率。不如,在欧洲,这类无线设备会使用868.0-868.6MHz的频率。

这个目录中的第一个设定是fake LR-WPAN驱动(Fake LR-WPAN driver with several interconnected devices)。LR-WPAN代表”Low-Rate Wireless Personal Area Network”(低速无线个人网络)。

有趣的事实:目前内核中只有大约2%的代码是由Linus Torvalds写的。

VMware使用vmxnet3虚拟以太网需要这个驱动(VMware VMXNET3 ethernet driver)。当在为大量用户编译内核时,最好将这个启用为一个模块,因为一些人可能并不希望在VMware上使用以太网。

Hyper-V虚拟网络需要这个驱动(Microsoft Hyper-V virtual network driver)。你可能想知道这个是否与微软的Hyper-V相同?是的,Linux支持Hyper-V。

数字电话服务ISDN由这个驱动提供(ISDN support)。ISDN代表”Integrated Services Digital Network”(综合业务数字网)。在法国,ISDN被称为RNIS,代表” Réseau numérique à intégration de services”。有一台ISDN适配器,计算机可以开始并接收语音呼叫。这允许计算机用来做因待机或者其他一些电话服务设备。ISDN同样也可以携带视频信息。

现在,我们可以进入输入设备了(Input device support)。这些是给计算机信息的设备。鼠标和键盘是最常被使用和了解的输入设备。扫描仪是另外一种输入设备的例子。

首先是一个支持不同触觉反馈设备的驱动(Support for memoryless force-feedback devices)。比如,许多游戏控制器的震动就是一种触觉反馈。

一些输入设备会检测硬件的状态(Polled input device skeleton)。这类行为需要这个驱动。

使用稀疏键盘映射的输入设备需要这个驱动(Sparse keymap support library)。键盘映射是键盘的布局信息。

下面,是另外一种键盘映射(Matrix keymap support library)。

注意:当为广泛的用户组编译内核时,包含大多数或者全部输入设备作为模块,因为通常不知道用户可能插到计算机上的设备类型。

有趣的事实:Vanilla内核就是Linux自己的原始内核,是未改变的状态。

“Mouse interface”对于鼠标创建了两个不同的设备文件。这两个设备文件是/dev/input/mouseX 和 /dev/input/mice。

下一个驱动创建了一个psaux设备文件并且它是/dev/input/mice的别名 (Provide legacy /dev/psaux device)。psaux设备文件是/dev/psaux。

如果系统有一块数位板,那么需要设置水平分辨率(Horizontal screen resolution)和垂直分辨率(Vertical screen resolution)。数位板是一种支持允许用户绘画的触控笔的触摸屏。另外的触摸屏无法支持如此复杂的输入。

下一个驱动支持操纵杆和游戏手柄(Joystick interface)。这个驱动会创建/dev/input/jsX文件。

“Event interface”驱动允许输入设备通过dev/input/eventX访问。

“Event debugging”驱动会输出所有的输入事件到系统日志中。除了要调试系统否则不要以任何理由启用它。显然地,这么做为了性能原因,但是我这么建议禁用的主要原因是安全目的。所有的按键都会被明文记录下来包括密码。

下面,列出了不同的键盘(Keyboards)配置驱动,接下来是鼠标(Mice)驱动和操纵杆和游戏手柄(joystick/gamepad)驱动。

在这之后,列出了不同特定的平板硬件/供货商的不同驱动(Tablets)。在这之后是触摸屏的驱动列表。

最后一组输入设备驱动是对于特定硬件和供货商的杂项驱动列表(Miscellaneous devices)。

这个系列的下一篇文章会讨论输入端口。不要忘记阅读这个系列的其他文章和这个网站。谢谢!

致粉丝: 谢谢你们的邮件告诉我你们对这些文章的喜爱。


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-15.4793/

译者:geekpi 校对:wxy

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

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

Linux:Ubuntu 14.04中的经典菜单插件重燃GNOME 2旧情

有很多用户对Unity桌面并不满意,他们认为GNOME 2菜单的解决方案才是正确的道路。经典菜单插件提供了一个可能让所有人满意的妥协

Linux:Ubuntu 14.04中的经典菜单插件重燃GNOME 2旧情
Linux:Ubuntu 14.04中的经典菜单插件重燃GNOME 2旧情

Unity可能是排在首位的被用户反对Ubuntu的功能,即使用户量正在不断增加,而且更多的用户开始用它,仍然有不少用户偏好GNOME 2中的菜单显示。

这也是“MATE”桌面环境为什么产生以及其他桌面环境尝试重建GNOME 2方法的原因。现在,如果你能至少对替代左上角的左上角菜单按钮的样子有所妥协,你可能会享受经典菜单插件带来的愉悦之感。

好消息是,经典菜单插件的开发者也为即将到来的Ubuntu 14.04(Trusty Tahr)制作了一个小应用。如果你恰好正在用Ubuntu 14.04的development build,这个插件将会在你的系统中完美运行。

你有两种方法来安装经典菜单插件,一是运行提供的deb文件,二是使用提供的PPA。我们建议你使用第二种添加PPA的做法,因为通过添加PPA,用户可以摆脱手动安装,及时收到此应用的将来的更新。打开终端输入以下命令(需要有root权限):

sudo add-apt-repository ppa:diesch/testing
sudo apt-get update
sudo apt-get install classicmenu-indicator

当安装成功后(应该用不了多久),你可以从Dash中运行这个插件。幸运的是,此插件会自动将自己纳入开机启动的列表,因此你不需要手动添加它。

前几天此插件有一个更新,不过并没有什么高大上的新功能,而且很多只是对界面的修改。比如对经典菜单的子目录中的文字显示的修复,还通过更改配置增加了一些菜单项目。

最新版本的经典菜单插件也实现了一个有意思的变化,就是通过使用Xfce解决了一些没有Unity的发行版(例如Xubuntu)的老问题。

你也可以在官方网站上获取更多关于此更新的细节.

下载经典菜单插件0.09:


via: http://news.softpedia.com/news/ClassicMenu-Indicator-Rekindles-Old-GNOME-2-Feeling-in-Ubuntu-14-04-LTS-431399.shtml

译者:ThomazL 校对:wxy

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

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