Skip to content Skip to main navigation Skip to footer

Linux

Linux:在CentOS 7上给一个网卡分配多个IP地址

有时你也许想要给一个网卡多个地址。你该怎么做呢?另外买一个网卡来分配地址?在小型网络中其实不用这么做。我们现在可以在CentOS/RHEL 7中给一个网卡分配多个ip地址。想知道怎么做么?好的,跟随我,这并不难。

Linux:在CentOS 7上给一个网卡分配多个IP地址
Linux:在CentOS 7上给一个网卡分配多个IP地址

首先,让我们找到网卡的IP地址。在我的CentOS 7服务器中,我只使用了一个网卡。

用root特权运行下面的命令:

ip addr

示例输出:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever

如上所见,我的网卡名是enp0s3,ip地址是192.168.1.150。

如你所知,网卡的配置文件存储在 /etc/sysconfig/network-scripts/ 目录下。每个网卡的详细内容将会以不同的名字存储,比如ifcfg-enp0s3

让我们看下ifcfg-enp0s3的细节。

cat /etc/sysconfig/network-scripts/ifcfg-enp0s3

示例输出:

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="e9f9caef-cb9e-4a19-aace-767c6ee6f849"
ONBOOT="yes"
HWADDR="08:00:27:80:63:19"
IPADDR0="192.168.1.150"
PREFIX0="24"
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

好的,现在我们将在相同的子网中分配多个地址了。

编辑文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

像下面那样加入额外的IP地址。

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0"
ONBOOT="yes"
HWADDR="08:00:27:3F:AB:68"
IPADDR0="192.168.1.150"
IPADDR1="192.168.1.151"
IPADDR2="192.168.1.152"
PREFIX0="24"
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

如你所见,我已经加了两个IP地址:IPADDR1=”192.168.1.151″ & IPADDR2=”192.168.1.152″

类似地,你可以加入更多的ip地址。

最后,保存并退出文件。重启网络服务来使更改生效。

systemctl restart network

现在,让我们检查是否已经加入了ip地址。

ip addr

示例输出:

: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:3f:ab:68 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.151/24 brd 192.168.1.255 scope global secondary enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.152/24 brd 192.168.1.255 scope global secondary enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe3f:ab68/64 scope link
       valid_lft forever preferred_lft forever

如你所见,单个网卡已经有3个ip地址了。

让我们ping一下新增的IP地址:

ping -c 4 192.168.1.151

示例输出:

PING 192.168.1.151 (192.168.1.151) 56(84) bytes of data.
64 bytes from 192.168.1.151: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 192.168.1.151: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 192.168.1.151: icmp_seq=3 ttl=64 time=0.077 ms
64 bytes from 192.168.1.151: icmp_seq=4 ttl=64 time=0.077 ms
--- 192.168.1.151 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.048/0.069/0.077/0.013 ms

ping -c 4 192.168.1.152

示例输出:

PING 192.168.1.152 (192.168.1.152) 56(84) bytes of data.
64 bytes from 192.168.1.152: icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from 192.168.1.152: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 192.168.1.152: icmp_seq=3 ttl=64 time=0.073 ms
64 bytes from 192.168.1.152: icmp_seq=4 ttl=64 time=0.075 ms
--- 192.168.1.152 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.034/0.064/0.075/0.018 ms

如果你想要使用不同的子网,你要改变PREFIX0=24成不同的子网,比如 PREFIX1=16

比如,我想要添加一个A类地址(*比如10.0.0.1)到我的网卡中。

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0"
ONBOOT="yes"
HWADDR="08:00:27:3F:AB:68"
IPADDR0="192.168.1.150"
IPADDR1="192.168.1.151"
IPADDR2="192.168.1.152"
IPADDR3="10.0.0.1"
PREFIX0="24"
PREFIX1=16
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

你可以看到我已经添加一个A类地址(10.0.0.1)并且前缀是16。

保存并退出文件。重启网络服务,接着,ping新增的地址:

ping -c 4 10.0.0.1

示例输出:

PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.074 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.075 ms
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.073/0.079/0.097/0.014 ms

相似地,你可以添加不同的网关。

就是这样。


via: http://www.unixmen.com/linux-basics-assign-multiple-ip-addresses-single-network-interface-card-centos-7/

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

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

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

Linux:如何让Ubuntu服务器远离鬼影漏洞(GHOST)影响

2015年1月27日,GNU C库(glibc)的一个漏洞也称鬼影漏洞(GHOST)被公诸于众。总的来说,这个漏洞允许远程攻击者利用glibc中的GetHOST函数的缓冲区溢出漏洞来获得系统的完全控制。点击这里获得更多细节。

鬼影漏洞可在版本在glibc-2.18之前的Linux系统上被利用。也就是说没有打过补丁的版本2.2到2.17都是有风险的。

Linux:如何让Ubuntu服务器远离鬼影漏洞(GHOST)影响
Linux:如何让Ubuntu服务器远离鬼影漏洞(GHOST)影响

检查系统漏洞

你可以使用下面的命令来检查glib的版本

ldd --version

输出

ldd (Ubuntu GLIBC 2.19-10ubuntu2) 2.19 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper.

glib的版本应该高于2.17,我们的输出是2.19。如果你看到glib的版本在2.2到2.17之间。你应该运行下面的命令。

sudo apt-get update
sudo apt-get dist-upgrade

安装完之后,你应该用下面的命令重启系统。

sudo reboot

重启完成之后,你可以用同样的命令来检查glib的版本。


via: http://www.ubuntugeek.com/how-to-protect-ubuntu-server-against-the-ghost-vulnerability.html

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

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

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

Linux:Linux 下最为人熟知的归档/压缩工具

很多时候,通过互联网发送或接收大文件和图片是一件令人头疼的事。压缩及解压缩工具正好可以应对这个问题。下面让我们快速浏览一些可以使得我们的工作更加轻松的开源工具。

Tar

Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

Tar 由 ‘Tape archiver(磁带归档器)’ 衍生而来,最初被用来在磁带上归档和存储文件。Tar 是一个 GNU 软件,它可以压缩一组文件(归档),或提取它们以及对已有的归档文件进行相关操作。在存储、备份以及传输文件方面,它是很有用的。在创建归档文件时,Tar 可以保持原有文件和目录结构不变。通过 Tar 归档的文件的后缀名为 ‘.tar’。

基本用法如下:

a) 创建归档 (c / –create)

tar --create --verbose --file=archive.tar file1 file2 file3

tar cvf archive.tar file1 file2 file3

tar cvf

创建一个归档

b) 列出归档文件内容 ( t / –list)

tar --list archive.tar

tar tvf

列出归档中包含的文件

c) 提取归档 (x / –extract)

tar xvf archive.tar
tar xvf archive.tar --wildcards '*.c'  -  从归档中提取后缀名为 *.c 的文件。

tar xvf

提取文件

tar xvf --wildcards

只提取需要的文件

d) 对归档文件进行更新 ( u / –update)

tar uvf archive.tar newfile.c   -  假如归档的newfile.c  要比先前已经归档的新,则添加更新的 newfile.c 到归档里面.
Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

更新一个归档

e) 从归档中删除文件 (–delete)

tar --delete -f archive.tar file1.c
- 从压缩包'archive.tar' 中删除文件'file1.c'

tar --delete

删除文件

更加具体的使用方法请参考tar 主页

Gzip / Gunzip

Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

Gzip 即 GNU zip,它是一个被广泛用于 Linux 操作系统中的压缩应用,被其压缩的文件的后缀名为’*.gz’ 。

基本用法如下:

a) 压缩文件

gzip file(s)

每个文件将被单独压缩

gzip

压缩文件

通常在压缩完成后,它会将原来的文件删除。我们可以使用 -c选项来保留原来的文件。

gzip -c file > file.gz

gzip-c

压缩后保留原有文件

我们也可以将一组文件压缩到一个单独的文件中

cat file1 file2 file3 | gzip > archieve.gz

gz group

压缩一组文件

b) 检查压缩比

被压缩文件的压缩比可以使用 ‘-l’ 选项来进行检验。

gzip -l archieve.gz

gzip -l

检查压缩率

c) 解压文件

Gunzip 用来解压文件,在这里,原有的(压缩)文件在被解压后同样会被删除。使用 -c选项来保留原始文件。

gunzip -c archieve.gz

gunzip -c

解压文件

gzip 加上’-d’选项 和 gunzip 对压缩文件有同样的效果。

更多细节可以从 gzip 主页 得到。

Bzip2 / Bunzip2

Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

同 gzip 一样,Bzip2 也是一个压缩工具,与其他传统的工具相比,它可以将文件压缩到更小,但其缺点为:运行速度比 gzip 慢。

基本用法如下:

a) 压缩文件

一般情况下,针对压缩而言,Bzip2 不用什么选项,将被压缩的文件被传递为它的参数。每个文件被单独压缩,且压缩文件以 ‘bz2’ 为后缀名。

bzip2 file1 file2 file3

bzip2

文件压缩

使用 ‘-k’ 选项可以使得在压缩或解压缩之后保留原有的文件。

bzip2 -k

在压缩后保留原有文件

b) 解压

‘-d’ 选项被用来解压缩。

bzip2 -d

使用 -d 选项解压缩文件

也可以使用 bunzip2 来解压缩。

bunzip2 filename

bunzip2

解压文件

bunzip2 可以解压后缀名为 bz2, bz, tbz2 和 tbz 的文件。带有 tbz2 和 tbz 的文件在压缩后,后缀名将变为’.tar’ 。

bzip2 -dc
-   执行解压文件到标准输出的功能。

7-zip

Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

7-zip 是另一个开源压缩软件。它使用 7z 这种新的压缩格式,并支持高压缩比。因此,它被认为是比先前提及的压缩工具更好的软件。在 Linux 下,可以通过 p7zip 软件包得到,该软件包里包含 3 个二进制文件: 7z, 7za 和 7zr,读者可以参考 p7zip wiki 来了解这三个二进制文件之间的不同。在本篇中,我们将使用 7zr 来解释 7-zip 的用法。归档文件以 ‘.7z’ 为后缀名。

基本用法如下:

a) 创建归档

7zr a archive-name.7z file-name(s) / directory-name(s)
Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

创建一个归档文件

b) 列出归档包含文件

7zr l archive-name.7z
Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

列出归档中包含的文件

c) 提取归档文件

7zr e archive-name.7z
Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

提取归档

d) 更新归档文件

7zr u archive-name.7z new-file
Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

更新一个归档文件

e) 从归档文件中删除文件

7zr d archive-name.7z file-to-be-deleted

7zr d

删除文件

Linux:Linux 下最为人熟知的归档/压缩工具
Linux:Linux 下最为人熟知的归档/压缩工具

确认文件删除


via: http://linoxide.com/tools/linux-compress-decompress-tools/

作者:B N Poornima 译者:FSSlc 校对:wxy

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

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

Linux:借助 HTTP/2 打造更迅捷的 Web 体验

HTTP/2 的目标

2015 年 2 月,互联网工程任务组(IETF)批准了 HTTP/2 标准提案,1999 年 HTTP/1.1 正式标准化 ,而 HTTP/2 是自那时以来的首个重大升级。HTTP/2 的主要目标是与 HTTP/1.1 完全语义兼容的基础上,进一步减少网络延迟。换句话说,HTTP/2 要在不破坏原有 Web 体系的基础上使它变得更快。

Linux:借助 HTTP/2 打造更迅捷的 Web 体验
Linux:借助 HTTP/2 打造更迅捷的 Web 体验

SPDY 的起源

自 2009 年底以来,Google 一直在开发一个实验性的协议,这个神秘的协议名叫 SPDY(读作 speedy)。SPDY 并不是一个首字母缩略词,其实,它是 Google 注册的一个商标,HTTP/2 正是起源于这个 SPDY 实验。事实上,后来有许多曾经参与 SPDY 项目的核心开发者同样也加入到 HTTP/2 的开发中去。在 2015 年 2 月,Google正式宣布停止支持 SPDY 计划,全力支持 HTTP/2 的开发,预计在 2016 年前实现全部功能。

HTTP/1.1

自 1999 年以来,HTTP/1.1 默默地为我们服务了十几年,它是在当时那样的计算机和网络应用场景下被设计出来的。我不说你也知道,HTTP 早就应该升级了。为了便于描述 HTTP/1 是如何工作的,我在下面放了几张图解。根据序号的顺序你就会看到,从客户端开始(很可能是一个web浏览器)与右方的服务器建立一个 HTTP/1 的连接。

(2) 客户端/浏览器随后发送一个 GET 请求(HTTP 方法)获取 index.html 页面。 (3) 服务器响应客户端请求的资源。 (4-7) 在我们这个简单的示例中,这个不断进行的 请求-响应循环过程 持续地获取样式表和脚本来完善整个 HTML 文档。 (8) 最终,这个 HTTP/1 连接断开了。

Linux:借助 HTTP/2 打造更迅捷的 Web 体验
Linux:借助 HTTP/2 打造更迅捷的 Web 体验

线头阻塞(Head-of-Line Blocking)

如你所见,客户端/浏览器 花费大量的时间等待每一个资源被响应。因为 HTTP/1 不能在同一个连接上进行并发请求,浏览器通常需要开启多个连接来加速请求资源的过程。

代价高昂的连接

即使开启多个连接能有效提高资源的加载速度,但是从计算机网络的角度来看,开启每一个连接的代价都很高。所以,现代浏览器通常都有最多 6-8 个 HTTP/1.1 连接的限制,许多网站现在需要加载 80多个或者更多的资源,这些连接限制逐渐成为了整个 Web 系统的性能瓶颈。

HTTP 管线化(HTTP Pipelining)

HTTP/1.1 尝试利用一个名为 HTTP管线化的技术解决性能瓶颈问题,不幸的是,单一的大文件和过慢的响应仍然会阻塞所有后续的请求。HTTP管线化 不难部署,但你基本上不太可能去部署它,现代浏览器几乎都不怎么支持 HTTP 管线化的功能,因为许多媒介和服务器不能正确地处理它(译者注:可以参考 http://en.wikipedia.org/wiki/HTTP_pipelining 查看一下支持的平台)。

HTTP/2 多路复用(Multiplexing)

多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息,为了向你们量化展示一个 HTTP/2 连接到底快多少,我准备了一套并排的图对比 HTTP/2 与 HTTP/1 的性能,在这个简单的示例中只请求 3 个资源,从 web 页面开始渲染到加载结束,HTTP/2 比 HTTP/1 节省不少时间。

推而广之,当 80 个资源复合请求时,与 HTTP/1.1 相比,很明显通过单一连接进行传递的 HTTP/2 更高效!

Linux:借助 HTTP/2 打造更迅捷的 Web 体验
Linux:借助 HTTP/2 打造更迅捷的 Web 体验

其它提高 HTTP/2 性能的因素

除了多路复用,HTTP/2 还是二进制的,与 HTTP/1 这样的文本协议相比,二进制协议解析起来更加高效。很显然,二进制的协议更适合在线路进行传输,并且更不容易出错。

HTTP/2 同时也减少了压缩头部的开销,这些在 HTTP/1 里都没有实现。

服务器推送(Server Push)

在 HTTP/2 中,服务器推送是指在客户端请求之前发送数据的机制。如果一个请求是由你的主页发起的,服务器很可能响应主页内容、logo以及样式表,因为它知道客户端会用到这些东西。这相当于在一个 HTML 文档内集合了所有的资源,不过与之相比,服务器推送有一个很大的优势:可以缓存!

当然这同时也是它的一个缺点,如果客户端已经缓存了数据,此时会产生不必要的冗余。这也是为什么我推荐服务器提示(Server Hints)的原因。

服务器提示(Server Hints)

服务器提示可以先于客户端检测到将要请求的资源,提前通知客户端,服务器不发送所有资源的实体,它只发送资源的 URL。客户端接到提示后进一步验证之前的缓存,如果发现需要这些资源,则正式发起请求。服务器提示对 HTTP/2 来说兴许不是最新的,但非常值得在这里顺便一提,因为它没有上文提到的服务器推送冗余的缺点。

服务器提示是通过 HTTP Link header 和与已实现的 link prefetching 语义重叠的部分来实现的。举个例子,一个 HTTP Link header 看起来是这样的:

Link:; rel=prefetch

如果 HTML 文档的 head 标签中有一个 prefetch link标签,不需要在服务端有额外的实现,举个例子:

了解更多有关 rel="prefetch" 的信息,参考 Mozilla 出品的 Link prefetching 常见问题

进一步了解资源提示

预加载关联用于声明一个资源和它的 fetch 属性,这个规范通过额外的处理策略扩展了功能,有效地获取在下一个导航可能需要请求的资源,举个例子

一些浏览器中,loadpolicy="next inert" 等同于 rel=prefetch 这样的实现,loadpolicy 属性的 next 值在语义上与 rel=prerender 相同,这个规范对预获取和预渲染的功能进行了标准化,并且给他们扩展了额外的功能。

欲了解更多,移步发布在 W3C 的由 Ilya Grigorik 编辑的文章 资源提示

HTTP/2 安全批判

尽管 HTTP/2 的主要目标是使网络更快,但是因为它不强制加密连接,目前饱受批判。还好的是,主导的浏览器厂商迄今为止都拒绝开发不加密的 HTTP/2,所以 HTTP/2 需要通过代理部署一个加密的连接。如果你不认为这对 Web 的未来大有裨益,请移步我的文章 HTTPS 无所不在

浏览器支持

HTTP/2 现在或者将来会被所有主流浏览器支持。

  • Chrome 40 支持 HTTP/2 14 号草案,但是默认不开启。HTTP/2 17 号草案(也就是最终草案),现在可以在 Chrome Canary 43(开发者预览版)里使用了,目前只有基于 TLS(加密的)的 HTTP/2 实现。 如需在 Chrome 中启用 HTTP/2,访问: chrome://flags/#enable-spdy4
  • Firefox 支持 HTTP/2,在第 36 版中默认启用,早在第 34 版中,就已经开始添加针对 HTTP/2 的实验性支持。目前也只有基于 TLS 的HTTP/2 实现。
  • IE11 支持 HTTP/2,但是只在 Windows 10 Beta 版里默认启用。目前也只有基于 TLS 的 HTTP/2 实现。
  • Spartan 预计也会支持基于 TLS 的 HTTP/2,尽管微软为 Windows 10 打造的新浏览器的有关细节尚未完全曝光。
  • Safari 在 Mac OS X Yosemite(10.10)和 iOS 8 中默认支持 SPDY,对于 HTTP/2 的全支持预计在 2015 年底完成。
  • Opera 默认支持 SPDY。预计在 Chrome 全部实现 HTTP/2 最终草案的特性后全面支持 HTTP/2。

服务器支持

支持 HTTP/2

  • IIS(互联网信息服务)在 Windows 10 beta 版中支持 HTTP/2。
  • OpenLiteSpeed 1.3.8 和 1.4.5 支持 HTTP/2 第 17 号草案。

支持 SPDY,但不支持 HTTP/2

  • Apache 通过 mod_spdy 模块支持老版本的 SPDY,目前这个模块已经停止开发。
  • LiteSpeed Web 服务器目前支持 SPDY/3.1。
  • Nginx 通过一个模块提供针对 SPDY(Draft 3.1) 的实验性支持,计划在 2015 年底支持 HTTP/2。

目前没有支持 HTTP/2 计划的

  • lighttpd 在版本 1.x 中没有支持 SPDY 或 HTTP/2 的计划

其它 HTTP/2 实现

其它已知的 HTTP/2 实现可以在 Github HTTP/2 wiki 中找到

最后,有关 HTTP/2 的畅想

正如我们所探索的,HTTP/2 早就应该为升级 Web 而出现,当它在接下来的几年中被广泛接受,网站和其它 web 服务将会变得更快,比以前任何时候更加能干。感谢有远见的浏览器厂商们,HTTP/2 将会增强用户的隐私和安全。我认为对于整个 Web 生态来说,HTTP/2 是一次至关重要的飞跃,未来有许多新的事业正等着我们去开拓。

如果关于 HTTP/2 你有任何的问题或建议,可以在 Twitter 上 @BenjaminPatch

致谢

非常感谢 Ilya Grigorik,他是一位 Google 的 web 性能工程师,在他的协助下我完成了这篇关于 HTTP/2 的文章,Ilya 同时也是《高性能浏览器网络(High-Performance Browser Networking)》(译者注:图灵出版社已经出版,李松峰老师翻译的,《Web性能权威指南》)的作者,这是一本为 web 开发者准备书,它非常棒,阅读这本书你可以了解更多有关网络和浏览器性能的知识。

来源:http://www.w3ctech.com/topic/862

Linux:怎样在 Linux 中限制网络带宽使用

假如你经常在 Linux 桌面上运行多个网络应用,或在家中让多台电脑共享带宽;那么你可能想更好地控制带宽的使用。否则,当你使用下载器下载一个大文件时,交互式 SSH 会话可能会变得缓慢以至不可用;或者当你通过 Dropbox 来同步一个大文件夹时,你的室友可能会抱怨在她的电脑上,视频流变得断断续续。

在本教程中,我将为你描述两种在 Linux 中限制网络流量速率的不同方法。

Linux:怎样在 Linux 中限制网络带宽使用
Linux:怎样在 Linux 中限制网络带宽使用

在 Linux 中限制一个应用的速率

限制网络流量速率的一种方法是通过一个名为trickle的命令行工具。通过在程序运行时,预先加载一个速率限制 socket 库 的方法,trickle 命令允许你改变任意一个特定程序的流量。 trickle 命令有一个很好的特性是它仅在用户空间中运行,这意味着,你不必需要 root 权限就可以限制一个程序的带宽使用。要能使用 trickle 程序控制程序的带宽,这个程序就必须使用非静态链接库的套接字接口。当你想对一个不具有内置带宽控制功能的程序进行速率限制时,trickle 可以帮得上忙。

在 Ubuntu,Debian 及其衍生发行版中安装 trickle :

$ sudo apt-get install trickle

在 Fdora 或 CentOS/RHEL (带有 EPEL 软件仓库):

$ sudo yum install trickle

trickle 的基本使用方法如下。仅需简单地把 trickle 命令(及速率参数)放在你想运行的命令之前。

$ trickle -d  -u   

这就可以将 的下载和上传速率限定为特定值(单位 KBytes/s)。

例如,将你的 scp 会话的最大上传带宽设定为 100 KB/s:

 $ trickle -u 100 scp backup.tgz alice@remote_host.com:

如若你想,你可以通过创建一个自定义启动器的方式,使用下面的命令为你的 Firefox 浏览器设定最大下载速率(例如, 300 KB/s)。

trickle -d 300 firefox %u

最后, trickle 也可以以守护进程模式运行,在该模式下,它将会限制所有通过 trickle 启动且正在运行的程序的总带宽之和。 启动 trickle 使其作为一个守护进程(例如, trickled):

$ sudo trickled -d 1000

一旦 trickled 守护进程在后台运行,你便可以通过 trickle 命令来启动其他程序。假如你通过 trickle 启动一个程序,那么这个程序的最大下载速率将是 1000 KB/s, 假如你再通过 trickle 启动了另一个程序,则每个程序的(下载)速率极限将会被限制为 500 KB/s,等等。

在 Linux 中限制一个网络接口的速率

另一种控制你的带宽资源的方式是在每一个接口上限制带宽。这在你与其他人分享你的网络连接的上行带宽时尤为实用。同其他一样,Linux 有一个工具来为你做这件事。wondershaper就是干这个的。

wondershaper 实际上是一个 shell 脚本,它使用 tc 来定义流量调整命令,使用 QoS 来处理特定的网络接口。外发流量通过放在不同优先级的队列中,达到限制传出流量速率的目的;而传入流量通过丢包的方式来达到速率限制的目的。

事实上, wondershaper 的既定目标不仅仅是对一个接口增加其带宽上限;当批量下载或上传正在进行时,wondershaper 还试图去保持互动性会话如 SSH 的低延迟。同样的,它还会控制批量上传(例如, Dropbox 的同步)不会使得下载“窒息”,反之亦然。

在 Ubuntu Debian 及其衍生发行版中安装 wondershaper:

$ sudo apt-get install wondershaper

在 Fdora 或 CentOS/RHEL (带有 EPEL 软件仓库) 中安装 wondershaper:

$ sudo yum install wondershaper

wondershaper 的基本使用如下:

 $ sudo wondershaper   

举个例子, 将 eth0的最大下载/上传带宽分别设定为 1000Kbit/s 和 500Kbit/s:

$ sudo wondershaper eth0 1000 500

你也可以通过运行下面的命令将速率限制进行消除:

$ sudo wondershaper clear eth0

假如你对 wondershaper 的运行原理感兴趣,你可以阅读其 shell 脚本源文件(/sbin/wondershaper)。

总结

在本教程中,我介绍了两种不同的方法,来达到如何在 Linux 桌面环境中,控制每个应用或每个接口的带宽使用的目的。 这些工具的使用都很简单,都为用户提供了一个快速且容易的方式来调整或限制流量。 对于那些想更多地了解如何在 Linux 中进行速率控制的读者,请参考 the Linux bible.


via: http://xmodulo.com/limit-network-bandwidth-linux.html

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

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

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

Linux:如何通过命令查看服务器的内存条使用情况

今天接到PM的一个要求说要查看服务器上插了几个内存条,还有几个插槽是空着的,百度了半天没找到,最后还是靠google和man手册页才搞定。

其实就一个命令就搞定了:dmidecode。

最常用的选项就是用 -t 或者 –type 来限定关键字:

bios, system, baseboard, chassis, processor, memory, cache, connector, slot

关于这些关键字可以百度是什么意思, 或者去看man手册页,这里只介绍memory的检测。

直接上我自己ubuntu测试的结果:

Linux:如何通过命令查看服务器的内存条使用情况
Linux:如何通过命令查看服务器的内存条使用情况

第一部分输出是概要信息,主要说板支持的最大内存是16GB,共有两个内存插槽。

Linux:如何通过命令查看服务器的内存条使用情况
Linux:如何通过命令查看服务器的内存条使用情况
Linux:如何通过命令查看服务器的内存条使用情况
Linux:如何通过命令查看服务器的内存条使用情况

接下了就是两个插槽的信息,由于我只插了一条8G的条,所以第二个的信息是空的

再上一张服务器的运行结果做对比:

Linux:如何通过命令查看服务器的内存条使用情况
Linux:如何通过命令查看服务器的内存条使用情况

这个服务器最大支持8*16=128G的内存,却插了8条4G的(后边7条信息都差不多,没上图),现在想扩展只能换内存条了,当时我的心情就奔溃了。

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

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

说明

写这篇文章对我来说是一件奇怪的事情,因为我通常都是提倡安装Ubuntu而卸载Windows的。

让今天写这篇文章更加奇怪的是,我决定在微软决定终止对Windows7的主流支持的这一天来写。

那么为什么我现在要写这篇文章呢?

到目前为止我曾经在很多场合被问到如何从一个装有Windows7或Windows8的双系统中删除Ubuntu系统,因此写这篇文章就变得有意义了。

我在圣诞节期间浏览了人们在我文章中的留言,感觉是时候把缺失的文章写完同时更新一下那些比较老的又需要关注的文章了。

我打算把一月份剩下的时间都用在这上面。这是第一步。如果你的电脑上安装了Windows7和Ubuntu双系统,同时你不想通过恢复出厂设置的方式恢复Windows7系统,那么请参考该教程。(注意:对于Windows8系统,有一个独立的教程)

删除Ubuntu系统需要的步骤

  1. 通过修复Windows启动项来删除Grub
  2. 删除Ubuntu系统所在分区
  3. 扩展Windows系统分区

备份系统

在你开始之前,我建议为你的系统保留一个备份。

我建议你不要放弃备份的机会,但也不要使用微软自带的工具。

点击查看如何使用Macrinum Reflect备份你的驱动

如果Ubuntu中有你希望保存的数据,现在就登录进去然后将数据保存到外部硬盘驱动器,USB驱动器或者DVD中。

步骤1 – 删除Grub启动菜单

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

当你启动系统的时候你会看见一个与上图类似的菜单。

要想删除这个菜单直接进入Windows系统,你必须修复主引导记录。

要达到这个目的,我将向你展示如何创建一个系统恢复盘,如何从恢复盘中启动以及如何修复主引导记录。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

按下“开始”按钮,搜索“备份和还原”。点击出现的图标。

将会打开一个与上图一样的窗口。

点击“创建系统修复光盘”。

你需要一个空的DVD盘

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

将空的DVD盘插入到驱动器中然后从下拉列表中选择你的DVD驱动器。

点击“创建光盘”。

将光盘留在电脑中并重启电脑,当出现从CD中启动的消息的时候按下键盘上的“回车”键。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

屏幕上会出现“系统恢复选项”。

它会要求你选择你的键盘布局方式。

从列表中选择合适的选项,然后点击“下一步”。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

下一个界面让你选择你想修复的操作系统。

或者你可以使用早先保存的系统镜像恢复系统。

选中上面的选项然后点击“下一步”。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

现在你将会看到一个有修复硬盘和恢复您的系统等选项的界面。

你需要做的是修复主引导记录,而这可以通过领命提示符来完成。

点击“命令提示符”。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

现在只需要把下面的命令输入到命令提示符中:

bootrec.exe /fixmbr

接下来将会出现一条消息,提示操作已经成功完成。

你现在就可以关闭命令提示符窗口了。

点击“重启”按钮然后取出DVD。

你的电脑就会直接启动进入Windows7系统了。

步骤 2 – 删除Ubuntu分区

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

要删除Ubuntu你需要使用Windows系统提供的“磁盘管理”工具。

按下“开始”按钮然后在搜索框中输入“创建和格式化磁盘分区”。将会出现一个与上图类似的窗口。

现在上面我的屏幕将不再和你的一模一样了,不过也不会相差太多。你会看到第0块磁盘有101MB的未分配空间,另外还有4个分区。

这101MB的空间是之前我安装Windows7时犯的一个错误。驱动器C是Windows7系统,下一个分区(46.57GB)是Ubuntu的根分区。287G的分区是/HOME分区,8G的分区是交换空间。

对于Windows系统来说,我们真正需要的只有驱动器C,所以剩下的是可以删掉的。

注意: 注意一下.你的磁盘上可能有恢复分区。 不要删除恢复分区。它们应该有专门的卷标,文件系统也许是NTFS或FAT32

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

在你希望删除的分区上单击右键(例如:root,home和swap分区),然后从弹出的菜单中点击“删除卷”。

(不要删除任何NTFS或者FAT32文件系统的分区!)

对于剩下的两个分区重复执行上面的操作。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

分区被删除后你将会有很大的一片空闲区域。右键点击空闲区域然后选择删除。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

现在你的磁盘将包含驱动器C和一大片没有分配的空间。

步骤 3 – 扩展Windows分区

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

最后一步是扩展Windows以便于将它再变成一个大的分区。

右键点击Windows分区(C盘),然后选择“扩展卷”。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

当出现左面的窗口的时候点击“下一步”。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

接下来是一个向导界面,在这里你可以选择扩展到那个盘,同时修改扩展的大小。

默认情况下,向导界面将显示它能从未分配区域中获取的最大的磁盘空间数。

接受默认的选项,然后点击“下一步”。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

最后的界面展示了你在前一个界面中的选择结果。

点击“结束”进行磁盘扩展。

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

从上图中你可以看到,我的Windows分区占据了整个磁盘(除了我之前安装Windows的时候偶然创建的101MB的空间)。

总结

Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu
Linux:如何通过简单的3步恢复Windows 7同时删除Ubuntu

这就是全部内容。一个致力于Linux的网站刚刚向你展示了如何移除Linux然后用Windows7取而代之。

有任何疑问可以在下面评论区留言。


 

via: http://www.everydaylinuxuser.com/2015/01/how-to-recover-windows-7-and-delete.html

作者:Gary Newell 译者:Medusar 校对:wxy

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

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

Linux:如何在Linux上找出并删除重复的文件:FSlint

大家好,今天我们会学习如何在Linux PC或者服务器上找出和删除重复文件。这里有一款工具你可以工具自己的需要使用。

无论你是否正在使用Linux桌面或者服务器,有一些很好的工具能够帮你扫描系统中的重复文件并删除它们来释放空间。图形界面和命令行界面的都有。重复文件是磁盘空间不必要的浪费。毕竟,如果你的确需要在不同的位置享有同一个文件,你可以使用软链接或者硬链接,这样就可以在磁盘的一个地方存储数据了。

FSlint

FSlint 在不同的Linux发行版二进制仓库中都有,包括Ubuntu、Debian、Fedora和Red Hat。只需你运行你的包管理器并安装“fslint”包就行。这个工具默认提供了一个简单的图形化界面,同样也有包含各种功能的命令行版本。

不要担心FSlint的图形化界面太复杂。默认情况下,它会自动选中Duplicate窗格,并以你的家目录作为搜索路径。

要安装fslint,若像我这样运行的是Ubuntu,这里是默认的命令:

$ sudo apt-get install fslint

这里还有针对其他发行版的安装命令:

Debian:

svn checkout http://fslint.googlecode.com/svn/trunk/ fslint-2.45
cd fslint-2.45
dpkg-buildpackage -I.svn -rfakeroot -tc
sudo dpkg -i ../fslint_2.45-1_all.deb

Fedora:

sudo yum install fslint

OpenSUSE:

[ -f /etc/mandrake-release ] && pkg=rpm
[ -f /etc/SuSE-release ] && pkg=packages
wget http://www.pixelbeat.org/fslint/fslint-2.42.tar.gz
sudo rpmbuild -ta fslint-2.42.tar.gz
sudo rpm -Uvh /usr/src/$pkg/RPMS/noarch/fslint-2.42-1.*.noarch.rpm

对于其他发行版:

wget http://www.pixelbeat.org/fslint/fslint-2.44.tar.gz
tar -xzf fslint-2.44.tar.gz
cd fslint-2.44
(cd po && make)
./fslint-gui

要在Ubuntu中运行fslint的GUI版本fslint-gui, 使用Alt+F2运行命令或者在终端输入:

$ fslint-gui

默认情况下,它会自动选中Duplicate窗格,并以你的家目录作为搜索路径。你要做的就是点击Find按钮,FSlint会自动在你的家目录下找出重复文件列表。

Linux:如何在Linux上找出并删除重复的文件:FSlint
Linux:如何在Linux上找出并删除重复的文件:FSlint

点击按钮来删除任何你要删除的文件,并且可以双击预览。

完成这一切后,我们就成功地删除你系统中的重复文件了。

注意 ,命令行工具默认不在环境的路径中,你不能像典型的命令那样运行它。在Ubuntu中,你可以在/usr/share/fslint/fslint下找到它。因此,如果你要在一个单独的目录运行fslint完整扫描,下面是Ubuntu中的运行命令:

cd /usr/share/fslint/fslint
./fslint /path/to/directory

这个命令实际上并不会删除任何文件。它只会打印出重复文件的列表-你需要自己做接下来的事。

$ /usr/share/fslint/fslint/findup --help
find dUPlicate files.
Usage: findup [[[-t [-m|-d]] | [--summary]] [-r] [-f] paths(s) ...]
If no path(s) specified then the current directory is assumed.
When -m is specified any found duplicates will be merged (using hardlinks).
When -d is specified any found duplicates will be deleted (leaving just 1).
When -t is specfied, only report what -m or -d would do.
When --summary is specified change output format to include file sizes.
You can also pipe this summary format to /usr/share/fslint/fslint/fstool/dupwaste
to get a total of the wastage due to duplicates.
Linux:如何在Linux上找出并删除重复的文件:FSlint
Linux:如何在Linux上找出并删除重复的文件:FSlint

via: http://linoxide.com/file-system/find-remove-duplicate-files-linux/

作者:Arun Pyasi 译者:geekpi 校对:wxy

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

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

Linux:如何在树莓派上使用图片特效

现在使用树莓派摄像头模组(“raspi cam”),也可以像使用卡片相机那样,给拍摄的照片增加各种各样的图片特效。 raspistill命令行工具,为您的树莓派提供了丰富的图片特效选项,来美化处理你的图片。

三个命令行工具可以用于抓取raspicam拍摄的照片或者视频,在这文章中将重点介绍其中的raspstill工具。raspstill工具提供了丰富的控制选项来处理图片,比如说:锐度(sharpness)、对比度(contrast)、亮度(brightness)、饱和度(saturation)、ISO、自动白平衡(AWB)、以及图片特效(image effect)等。

在这篇文章中,将介绍如何使用raspstill工具以及raspicam摄像头模组来控制照片的曝光、AWB以及其他的图片效果。我写了一个简单的python脚本来自动拍摄照片并在这些照片上自动应用各种图片特效。raspicam的帮助文档中介绍了该摄像头模组所支持的曝光模式、AWB和图片特效。总的来说,raspicam一共支持16种图片特效、12种曝光模式以及10种AWB选项。

Python脚本很简单,如下所示 。

#!/usb/bin/python
import os
import time
import subprocess
list_ex=['auto','night']
list_awb=['auto','cloud',flash']
list_ifx=['blur','cartoon','colourswap','emboss','film','gpen','hatch','negative','oilpaint','posterise','sketch','solarise','watercolour']
x=0
for ex in list_ex:
    for awb in list_awb:
        for ifx in list_ifx:
            x=x+1
            filename='img_'+ex+'_'+awb+'_'+ifx+'.jpg'
            cmd='raspistill -o '+filename+' -n -t 1000 -ex '+ex+' -awb '+awb+' -ifx '+ifx+' -w 640 -h 480'
            pid=subprocess.call(cmd,shell=True)
            print "["+str(x)+"]-"+ex+"_"+awb+"_"+ifx+".jpg"
            time.sleep(0.25)
print "End of image capture"

这个脚本完成了以下几个工作。首先,脚本中定义了3个列表,分别用于枚举曝光模式、AWB模式以及图片特效。在这个实例中,我们将使用到2种曝光模式、3种AWB模式以及13种图片特效。脚本会遍历上述3种选项的各种组合,并使用这些参数组合来运行raspistill工具。传入的参数共6个,分别为:(1)输出文件名;(2)曝光模式;(3)AWB模式;(4)图片特效模式;(5)拍照时间,设为1秒;(6)图片尺寸,设为640×480。脚本会自动拍摄78张照片,每张照片会应用不同的特效参数。

执行这个脚本也很简单,只需键入下面的命令行:

$ python name_of_this_script.py

下面是抓取到一些样张。

Linux:如何在树莓派上使用图片特效
Linux:如何在树莓派上使用图片特效

小福利

除了使用raspistill命令行工具来操控raspicam摄像模组以外,还有其他的方法可以用哦。Picamera是一个python库,它提供了操控raspicam摄像模组的的API接口,这样就可以便捷地构建更加复杂的应用程序。如果你精通python,那么picamera一定是你的 hack 项目的好伙伴。picamera已经被默认集成到Raspbian最新版本的的镜像中。当然,如果你用的不是最新的Raspbian或者是使用其他的操作系统版本,你可以通过下面的方法来进行手动安装。

首先,先在你的系统上安装pip,详见指导

然后,就可以按下面的方法安装picamera。

 $ sudo pip install picamera

picamera的使用说明可以查阅官方文档


via: http://xmodulo.com/apply-image-effects-pictures-raspberrypi.html

作者:Kristophorus Hadiono 译者:coloka 校对:wxy

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

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

Linux:利用OpenVSwitch构建多主机Docker网络

【编者的话】当你在一台主机上成功运行Docker容器后,信心满满地打算将其扩展到多台主机时,却发现前面的尝试只相当于写了个Hello World的入门程序,多主机的网络设置成了下一道门槛。在你尝试各种方案时不妨先看看本文,或许就会豁然开朗,发现原来也不复杂。嗯,是的,本文用到了 OpenVSwitch。 运行Docker已经不是什么新鲜事,网上有很多入门教程来帮助你在一台主机上运行容器。这台主机可以是Linux服务器,也可以是Mac(借助类似boot2docker的项目)。 在多台主机上运行却是另外一回事…… 可选方案:

  • 分别在每台主机上运行Docker,在公网或内网网卡上暴露端口以便容器间相互通讯。这可能比较麻烦,而且会引发安全问题。
  • 运行类似Weave的中间层方案来完全地抽象网络。这个项目前景不错,不过还太年轻,尚未与compose(之前的fig)或maestro-ng这类编排工具整合。
  • 运行类似DeisFlynn的Docker多主机一站式方案。这可能不在你的考虑范围内。
  • 在主机间的网状网络中创建一个共享网桥,让Docker服务在那运行容器。这听起来有点复杂,不过……本文中我们将看到这可以非常容易地完成!
Linux:利用OpenVSwitch构建多主机Docker网络
Linux:利用OpenVSwitch构建多主机Docker网络

概述

基本上,我们将执行以下步骤:

  • 在每台服务器上安装Docker;
  • 在每台服务器上安装OpenVSwitch;
  • 自定义网络设置用以自动在主机间创建网桥/隧道(在每台服务器的/etc/network/interfaces里);
  • 自定义每个Docker服务配置,只处理docker0 IP范围的一小部分,防止新容器的IP地址发生重叠。

就是这样。重启服务或重启服务器后,你将获得一个具备连接冗余(link redundancy)的全网状网络,Docker服务可以在专用的IP范围(不会重叠)上运行容器,并且不需要在公网或内网网卡上暴露所有端口就能互联。很棒,对么?

技术

简单列一下我们用到的技术:

  • Docker:嗯……这是篇关于Docker与网络的文章,所以……
  • OpenVSwitch:非常棒的虚拟网络交换机项目,伸缩性非常好,根据本指南,你可以运行“任意”规模的网络。

我们将假定服务器运行的是Ubuntu Server 14.04.02 LTS x64,对于其它系统,你可能需要修改下面提供的各项配置。

安装

Docker

无需多言,遵循官网提供的指南就行。稍后我们将深入其配置,以便运行于服务器上的不同Docker服务可相互协作。

OpenVSwitch

糟糕的是,默认仓库里OpenVSwitch安装包不可用(或过期了),我们需要自己构建.deb文件(一次),然后分发给不同主机。为了保持生产机的整洁,可另外找台小主机来安装开发包,并构建安装包。 OpenVSwitch GitHub上有详细的构建手册。 执行下列命令来构建安装包(新版请按要求修改):

#获取最新存档
wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
tar xzvf openvswitch-2.3.1.tar.gz
cd openvswitch-2.3.1
#安装依赖
sudo apt-get install -y build-essential fakeroot debhelper 
                    autoconf automake bzip2 libssl-dev 
                    openssl graphviz python-all procps 
                    python-qt4 python-zopeinterface 
                    python-twisted-conch libtool
# 构建(不使用并行检查)
DEB_BUILD_OPTIONS='parallel=8 nocheck' fakeroot debian/rules binary
# 得到最新deb文件并复制到某处
cd ..
ls -al *deb

现在你有了新的.deb安装包,接下来将其推送并安装到所有主机上。

# 复制包到各主机并ssh登录
scp -r *deb user@remote_host:~/.
ssh user@remote_host
# 安装一些依赖(后面需要)并安装包
sudo apt-get install -y bridge-utils
sudo dpkg -i openvswitch-common_2.3.1-1_amd64.deb 
         openvswitch-switch_2.3.1-1_amd64.deb

 

配置

网络

你可以使用OpenVSwitch提供的不同命令行工具来构建网状网络(比如ovs-vsctl),不过Ubuntu提供了一个辅助工具让你可以通过/etc/network/interfaces文件定义网络。 假定三台主机:1.1.1.1、2.2.2.2和3.3.3.3,可以通过上述IP相互ping通,它们是在公网或内网上并不重要。host1的/etc/network/interfaces大概如下。

...
# eth0、eth1和lo配置
...
# auto:为了有效地在主机启动时启动它
# br0=br0:防止在`ifquery --list`时被找到
auto br0=br0
allow-ovs br0
iface br0 inet manual
ovs_type OVSBridge
ovs_ports gre1 gre2
ovs_extra set bridge ${IFACE} stp_enable=true
mtu 1462
# 没有auto,这是ovs的一个额外配置
# 两台主机的gre名字必须相符
allow-br0 gre1
iface gre1 inet manual
ovs_type OVSPort
ovs_bridge br0
ovs_extra set interface ${IFACE} type=gre options:remote_ip=2.2.2.2
allow-br0 gre2
iface gre2 inet manual
ovs_type OVSPort
ovs_bridge br0
ovs_extra set interface ${IFACE} type=gre options:remote_ip=3.3.3.3
# auto:启动时创建
# 定义docker要使用的docker0,并(在可用时)连接到到OpenVSwitch创建的br0网桥上
# 每台主机需要使用不同的IP地址(不要相互冲突!)
auto docker0=docker0
iface docker0 inet static
address 172.17.42.1
network 172.17.0.0
netmask 255.255.0.0
bridge_ports br0
mtu 1462

在其它主机上要对这个配置上做些调整:remote_ip的IP地址要相互配对。

Linux:利用OpenVSwitch构建多主机Docker网络
Linux:利用OpenVSwitch构建多主机Docker网络
几点说明:

  • 生成树协议(Spanning Tree Protocol):如果应用该配置,将在3台服务器中创建一个网络回路,这可不行。给br0网桥添加stp_enable=true将确保一些gre隧道被切断。同时确保网状网络的冗余,允许网络在其中一台主机下线时恢复。
  • MTU:这是一项关键设定!没有这项,你可能获得一些意外“惊喜”:网络看起来工作正常(比如可以ping),但无法支持大数据包(比如BW测试中的iperf、大数据量请求或简单的文件复制)。注意,GRE隧道需要封装多种协议:
    • 以太网:14字节——我们说的是网桥间的第2层;
    • IPv4:20字节——容器/主机间通讯;
    • GRE:4字节——因为,嗯,这是个GRE隧道;
    • 也就是物理网卡MTU减去38字节,结果是1462(基于常规的1500 MTU网卡)。
  • 在auto定义中使用“=:对于具有固定IP的服务器这不是必需的,但有些云服务商(这里就不说是谁了……Digital Ocean(译者:软广再次乱入))使用了一个依靠ifquery --list --allow auto的init服务(/etc/init/cloud-init-container.conf)。不加上“=”号将包含OpenVSwitch网卡,并延迟整个启动过程直到init脚本失败并超时。
  • docker0网桥:每台服务器都需要自己的IP地址(比如172.17.42.1172.17.42.2)。由于docker0网桥处在br0网桥之上,它们将(也应该!)可以相互连接。想象一下,要解决IP冲突会有多乱……这也是为什么我们要在启动时定义它,而不依赖docker服务来为我们创建这个网桥。
  • GRE隧道:你可以从gre0(而不是gre1)开始,它能完美工作。但由于某种原因,在输入ifconfig时你可以看到gre0,却看不到其他隧道。这可能是gre0作为虚拟网卡的一个副作用。从gre1开始将让所有的gre隧道对ifconfig“隐身”(好过于只能看见一个)。别着急,你还是可以使用ovs-vsctl命令显示隧道/网桥。
  • 3台以上主机:你可以遵循相同的逻辑,并且:
    • 添加额外的隧道(iface greX)来连接新主机。
    • br0网桥定义中更新ovs_ports以包含interfaces文件中定义的所有gre隧道。
    • 聪明点……不要将每台服务器跟其他主机一一链接……STP收敛(convergence)将需要更长的时间,并且无法提供任何除了多重额外链路冗余之外的有用价值。

如果现在重启服务器,你将拥有一个具备冗余的网状网络,你可以运行以下命令来测试:

  • 从host1上ping 172.17.42.2或其他IP;
  • 在主机上运行iperf,通过ifconfig查看使用中的链接;
  • 在ping第三台主机时停止“中间”那台,查看网络收敛(通过STP)时ping中断了几秒钟。
Linux:利用OpenVSwitch构建多主机Docker网络
Linux:利用OpenVSwitch构建多主机Docker网络

Docker

我们现在有了一个完善的网络,每个Docker服务都可以将它们的容器挂接到docker0网桥上。让Docker自动完成这步不是很棒么?答案在于Docker有能力分配一个最小的IP地址池! 对于该示例,我们假定:

  • 每台主机(1.1.1.12.2.2.23.3.3.3)挂接到前面创建的docker0网桥上,其各自的IP地址是172.17.42.1172.17.42.2172.17.42.3
  • docker0网卡指定了一个/16的IP范围;
  • 给每台主机指定了一小块docker0的IP范围,以/18 fixed-cidr的形式保存在它们的docker服务配置中。分别是172.17.64.0/18172.17.128.0/18172.17.192.0/18

如果你的主机多于3台,你需要细分一个每个范围,或根据组织需要对整个网络拓扑结构进行重新考虑。

Linux:利用OpenVSwitch构建多主机Docker网络
Linux:利用OpenVSwitch构建多主机Docker网络
host1的配置文件(/etc/default/docker)是这样的:

BRIDGE=docker0
CIDR=172.17.64.0/18
wait_ip() {
address=$(ip add show $BRIDGE | grep 'inet ' | awk '{print $2}')
[ -z "$address" ] && sleep $1 || :
}
wait_ip 5
wait_ip 15
DOCKER_OPTS="
-H unix:///var/run/docker.sock
-H tcp://0.0.0.0:2375
--fixed-cidr=$CIDR
--bridge $BRIDGE
--mtu 1462
"

你可以根据需要修改DOCKER_OPTS配置,添加镜像、不安全的registry、DNS等等。 说明:

  • wait_ip:由于docker0网桥最后被创建,获取IP地址可能需要花点时间。使用wait_ip“功能”,你可以在返回docker init脚本前安全地等待几秒钟。该配置文件是被真正的init脚本(/etc/init/docker.conf)所引用。
  • mtu:与前面相同原因,只是一个预防措施,用于确保每个网卡被创建时会被指定正确的MTU。
  • -H tcp://……:如果你不想通过0.0.0.0将其“公开”(或绑定到服务器“真实”网卡之一),你也可以将它安全地绑定到……该主机的docker0 IP地址(比如172.17.42.2)!这样,你可以从任何一台主机访问到私有网状网络里的任何一个docker服务。

 

结语

重启一下(至少保证启动时所有东西都会自动上线)。 你可以试试以下命令看看一切是否正常。

# 访问host1
ssh user@host1
# 运行一个新容器
docker run -ti ubuntu bash
# 检查IP(在容器内运行)
ip add | grep eth0
#
# 在其他窗口中
#
# 访问另一台主机(host2或3)
ssh user@host2
# 运行一个新容器
docker run -ti ubuntu bash
# Ping其他的容器!
ping $IP

这不是一份指导如何在多主机上设置Docker的权威指南,欢迎大家提出批评(译者注:译稿也一样,请大家多多指正)。很多想法是在整体安装时产生的,本文尽可能详细地说明了为何选择这个或那个选项。 如果将分级网桥、VLAN等包括进来,事情将更复杂,不过那超出了本文的范围。;) 显然,更完整的网络是有需求的,而且看起来这个已经在开发中。 参考内容

如果你读完本文了,恭喜!

来源:http://dockerone.com/article/228

Linux:使用“最近通知工具”保持桌面通知历史

Linux:使用“最近通知工具”保持桌面通知历史
Linux:使用“最近通知工具”保持桌面通知历史

大多数桌面环境像Unity和Gnome都有通知特性。我很喜欢其中一些。它尤其当我在Ubuntu上收听流媒体时帮到我。默认上通知会在桌面的顶部显示几秒接着就会消失。如果你听见了通知的声音但是没有看到内容怎么办?你该如何知道通知的内容?

如果你可以看到最近所有通知的历史会很棒吧?是的,我知道这很棒。你可以在Ubuntu Unity或者Gnome中使用最近通知小工具来追踪所有的最近通知。

最近通知位于顶部面板,并且记录了最近所有通知的历史。当它捕获到新的通知后,它就会变绿来表明你有未读的通知。

Linux:使用“最近通知工具”保持桌面通知历史
Linux:使用“最近通知工具”保持桌面通知历史

当你点击它后,你就会看到最近所有的通知。你可以选择清空所有或者删除部分。

Linux:使用“最近通知工具”保持桌面通知历史
Linux:使用“最近通知工具”保持桌面通知历史

不幸的是它没有配置选项。因此你不能屏蔽特定程序的通知。所有的通知都会被保存。

在Ubuntu 14.04 和 14.10 中安装最近通知工具

一般说来这个最近通知工具应该也可以在Linux Mint Cinnamon版本中运行。你可以试一试。使用下面的命令来在在Ubuntu 14.04 和 14.10 中安装最近通知工具:

sudo add-apt-repository ppa:jconti/recent-notifications
sudo apt-get update
sudo apt-get install indicator-notifications

安装完成后,重新登录后你就可以用了。现在妈妈再也不用担心我的通知没看到了。很方便的小工具,不是么?


via: http://itsfoss.com/notifications-appindicator/

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

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

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

Linux:Linux 有问必答:如何在Ubuntu或者Debian中编译安装ixgbe驱动

提问: 我想为我的Intel 10G网卡下载安装最新的ixgbe驱动。我该如何在Ubuntu(或者Debian)中安装ixgbe驱动?

Intel的10G网卡(比如,82598、 82599、 x540)由ixgbe驱动支持。现代的Linux发行版已经带有了ixgbe驱动,通过可加载模块的方式使用。然而,有些情况你希望在你机器上的自己编译安装ixgbe驱动,比如,你想要体验ixbge驱动的最新特性时。同样,内核默认自带的ixgbe驱动中的一个问题是不允许你自定义驱动的参数。如果你想要一个完全定制的ixgbe驱动(比如 RSS、多队列、中断阈值等等),你需要手动从源码编译ixgbe驱动。

Linux:Linux 有问必答:如何在Ubuntu或者Debian中编译安装ixgbe驱动
Linux:Linux 有问必答:如何在Ubuntu或者Debian中编译安装ixgbe驱动

这里是如何在Ubuntu、Debian或者它们的衍生版中下载安装ixgbe驱动的教程。

第一步: 安装前提

安装之前,需要安装匹配的内核头文件和开发工具包。

$ sudo apt-get install linux-headers-$(uname -r)
$ sudo apt-get install gcc make

第二步: 编译Ixgbe驱动

最新的ixgbe驱动中下载源码。

$ wget http://sourceforge.net/projects/e1000/files/ixgbe%20stable/3.23.2/ixgbe-3.23.2.tar.gz

如下编译ixgbe驱动。

$ tar xvfvz ixgbe-3.23.2.tar.gz
$ cd ixgbe-3.23.2/src
$ make

第三步: 检查Ixgbe驱动

编译之后,你会看到在ixgbe-3.23.2/src目录下创建了ixgbe.ko。这就是会加载到内核之中的ixgbe驱动。

用modinfo命令检查内核模块的信息。注意你需要指定模块文件的绝对路径(比如 ./ixgbe.ko 或者 /home/xmodulo/ixgbe/ixgbe-3.23.2/src/ixgbe.ko)。输出中会显示ixgbe内核的版本。

$ modinfo ./ixgbe.ko

filename:       /home/xmodulo/ixgbe/ixgbe-3.23.2/src/ixgbe.ko
version:        3.23.2
license:        GPL
description:    Intel(R) 10 Gigabit PCI Express Network Driver
author:         Intel Corporation,
srcversion:     2ADA5E537923E983FA9DAE2
alias:          pci:v00008086d00001560sv*sd*bc*sc*i*
alias:          pci:v00008086d00001558sv*sd*bc*sc*i*
alias:          pci:v00008086d0000154Asv*sd*bc*sc*i*
alias:          pci:v00008086d00001557sv*sd*bc*sc*i*
alias:          pci:v00008086d0000154Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000154Dsv*sd*bc*sc*i*
alias:          pci:v00008086d00001528sv*sd*bc*sc*i*
alias:          pci:v00008086d000010F8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000151Csv*sd*bc*sc*i*
alias:          pci:v00008086d00001529sv*sd*bc*sc*i*
alias:          pci:v00008086d0000152Asv*sd*bc*sc*i*
alias:          pci:v00008086d000010F9sv*sd*bc*sc*i*
alias:          pci:v00008086d00001514sv*sd*bc*sc*i*
alias:          pci:v00008086d00001507sv*sd*bc*sc*i*
alias:          pci:v00008086d000010FBsv*sd*bc*sc*i*
alias:          pci:v00008086d00001517sv*sd*bc*sc*i*
alias:          pci:v00008086d000010FCsv*sd*bc*sc*i*
alias:          pci:v00008086d000010F7sv*sd*bc*sc*i*
alias:          pci:v00008086d00001508sv*sd*bc*sc*i*
alias:          pci:v00008086d000010DBsv*sd*bc*sc*i*
alias:          pci:v00008086d000010F4sv*sd*bc*sc*i*
alias:          pci:v00008086d000010E1sv*sd*bc*sc*i*
alias:          pci:v00008086d000010F1sv*sd*bc*sc*i*
alias:          pci:v00008086d000010ECsv*sd*bc*sc*i*
alias:          pci:v00008086d000010DDsv*sd*bc*sc*i*
alias:          pci:v00008086d0000150Bsv*sd*bc*sc*i*
alias:          pci:v00008086d000010C8sv*sd*bc*sc*i*
alias:          pci:v00008086d000010C7sv*sd*bc*sc*i*
alias:          pci:v00008086d000010C6sv*sd*bc*sc*i*
alias:          pci:v00008086d000010B6sv*sd*bc*sc*i*
depends:        ptp,dca
vermagic:       3.11.0-19-generic SMP mod_unload modversions
parm:           InterruptType:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default IntMode (deprecated) (array of int)
parm:           IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int)
parm:           MQ:Disable or enable Multiple Queues, default 1 (array of int)
parm:           DCA:Disable or enable Direct Cache Access, 0=disabled, 1=descriptor only, 2=descriptor and data (array of int)
parm:           RSS:Number of Receive-Side Scaling Descriptor Queues, default 0=number of cpus (array of int)
parm:           VMDQ:Number of Virtual Machine Device Queues: 0/1 = disable, 2-16 enable (default=8) (array of int)
parm:           max_vfs:Number of Virtual Functions: 0 = disable (default), 1-63 = enable this many VFs (array of int)
parm:           VEPA:VEPA Bridge Mode: 0 = VEB (default), 1 = VEPA (array of int)
parm:           InterruptThrottleRate:Maximum interrupts per second, per vector, (0,1,956-488281), default 1 (array of int)
parm:           LLIPort:Low Latency Interrupt TCP Port (0-65535) (array of int)
parm:           LLIPush:Low Latency Interrupt on TCP Push flag (0,1) (array of int)
parm:           LLISize:Low Latency Interrupt on Packet Size (0-1500) (array of int)
parm:           LLIEType:Low Latency Interrupt Ethernet Protocol Type (array of int)
parm:           LLIVLANP:Low Latency Interrupt on VLAN priority threshold (array of int)
parm:           FdirPballoc:Flow Director packet buffer allocation level:
            1 = 8k hash filters or 2k perfect filters
            2 = 16k hash filters or 4k perfect filters
            3 = 32k hash filters or 8k perfect filters (array of int)
parm:           AtrSampleRate:Software ATR Tx packet sample rate (array of int)
parm:           FCoE:Disable or enable FCoE Offload, default 1 (array of int)
parm:           LRO:Large Receive Offload (0,1), default 1 = on (array of int)
parm:           allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599 based adapters, default 0 = Disable (array of int)

第四步: 测试Ixgbe驱动

在测试新的模块之前,如果你内核中已存在旧版本ixgbe模块的话你需要先移除它。

$ sudo rmmod ixgbe

接着使用insmod命令插入新编译的ixgbe模块。确保指定一个模块的绝对路径。

$ sudo insmod ./ixgbe.ko

如果上面的命令成功运行,就不会显示任何的信息。

如果你需要,你可以尝试加入额外的参数。比如,设置RSS的队列数量为16:

$ sudo insmod ./ixgbe.ko RSS=16

检查/var/log/kern.log来查看ixgbe驱动是否成功激活。查看日志中的“Intel(R) 10 Gigabit PCI Express Network Driver”。ixgbe的版本信息应该和之前的modinfo的显示应该相同。

Sep 18 14:48:52 spongebob kernel: [684717.906254] Intel(R) 10 Gigabit PCI Express Network Driver - version 3.22.3
Linux:Linux 有问必答:如何在Ubuntu或者Debian中编译安装ixgbe驱动
Linux:Linux 有问必答:如何在Ubuntu或者Debian中编译安装ixgbe驱动

第五步: 安装Ixgbe驱动

一旦你验证新的ixgbe驱动可以成功加载,最后一步是在你的系统中安装驱动。

$ sudo make install

ixgbe.ko 会安装在/lib/modules//kernel/drivers/net/ethernet/intel/ixgbe 下。

从这一步起,你可以用下面的modprobe命令加载ixgbe驱动了。注意你不必再指定绝对路径。

$ sudo modprobe ixgbe

如果你希望在启动时加载ixgbe驱动,你可以在/etc/modules的最后加入“ixgbe”。


via: http://ask.xmodulo.com/download-install-ixgbe-driver-ubuntu-debian.html

译者:geekpi 校对:wxy

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

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

Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境

在Linux或类Unix系统中,每个用户和进程都运行在一个特定环境中。这个环境包含了变量、设置、别名、函数以及更多的东西。下面是对Shell环境下一些常用命令的简单介绍,包括每个命令如何使用的例子,以及在命令行下设定你自己的环境来提高效率。

Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境
Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境

找出你当前的shell

在终端应用中输入下面命令中的任意一个:

ps $$
ps -p $$

或者

echo "$0"

输出范例:

Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境
Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境

图1:找出当前的shell

找出所有已安装的shell

找到已安装shell的完整路径:

type -a zsh
type -a ksh
type -a sh
type -a bash

输出范例:

Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境
Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境

图2:找出shell的路径

文件/etc/shells里包含了系统所支持的shell列表。每一行代表一个shell,是相对根目录的完整路径。用这个cat命令来查看这些数据:

cat /etc/shells

输出范例:

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish

临时改变当前shell

只需要输入shell的名字。在下面的例子里,我从bash切换到了zsh:

zsh

这只是临时改变了系统shell。也叫做子shell。要从子/临时shell退出,输入下面的命令或者按下CTRL-D:

exit

找出子shell的层级或临时shell的嵌套层级

每个bash实例启动后,变量$SHLVL的值都会加一。输入下面的命令:

echo "$SHLVL"

示例输出:

Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境
Linux:Shell入门:掌握Linux,OS X,Unix的Shell环境

图3:Bash shell嵌套层级(子shell数目)

通过chsh命令永久变更系统shell

想要把当前系统shell从bash永久换成zsh?试试这个:

chsh -s /bin/zsh

想把其他用户的shell从bash永久换成ksh?试试这个:

sudo chsh -s /bin/ksh userNameHere

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

Linux:Linux 基础:如何在Ubuntu上检查一个软件包是否安装

Linux:Linux 基础:如何在Ubuntu上检查一个软件包是否安装
Linux:Linux 基础:如何在Ubuntu上检查一个软件包是否安装

如果你正在管理Debian或者Ubuntu服务器,你也许会经常使用dpkg 或者 apt-get命令。这两个命令用来安装、卸载和更新包。

在本篇中,让我们看下如何在基于DEB的系统下检查是否安装了一个包。

要检查特定的包,比如firefox是否安装了,使用这个命令:

dpkg -s firefox

示例输出:

 Package: firefox
 Status: install ok installed
 Priority: optional
 Section: web
 Installed-Size: 93339
 Maintainer: Ubuntu Mozilla Team 
 Architecture: amd64
 Version: 35.0+build3-0ubuntu0.14.04.2
 Replaces: kubuntu-firefox-installer
 Provides: gnome-www-browser, iceweasel, www-browser
 Depends: lsb-release, libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.17), libcairo2 (>= 1.2.4), libdbus-1-3 (>= 1.0.2), libdbus-glib-1-2 (>= 0.78), libfontconfig1 (>= 2.9.0), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.37.3), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.22.0), libpangocairo-1.0-0 (>= 1.14.0), libstartup-notification0 (>= 0.8), libstdc++6 (>= 4.6), libx11-6, libxcomposite1 (>= 1:0.3-1), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxrender1, libxt6
 Recommends: xul-ext-ubufox, libcanberra0, libdbusmenu-glib4, libdbusmenu-gtk4
 Suggests: ttf-lyx
 Conffiles:
 /etc/firefox/syspref.js 09e457e65435a1a043521f2bd19cd2a1
 /etc/apport/blacklist.d/firefox ee63264f847e671832d42255912ce144
 /etc/apport/native-origins.d/firefox 7c26b75c7c2b715c89cc6d85338252a4
 /etc/apparmor.d/usr.bin.firefox f54f7a43361c7ecfa3874abca2f292cf
 Description: Safe and easy web browser from Mozilla
 Firefox delivers safe, easy web browsing. A familiar user interface,
 enhanced security features including protection from online identity theft,
 and integrated search let you get the most out of the web.
 Xul-Appid: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}

如上所见,firefox已经安装了。

同样,你可以使用dpkg-query 命令。这个命令会有一个更好的输出,当然,你可以用通配符。

dpkg-query -l firefox

示例输出:

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                 Version                 Architecture            Description
+++-====================================-=======================-=======================-=============================================================================
ii  firefox                              35.0+build3-0ubuntu0.14 amd64                   Safe and easy web browser from Mozilla

要列出你系统中安装的所有包,输入下面的命令:

dpkg --get-selections

示例输出:

abiword                        install
abiword-common                    install
accountsservice                    install
acl                        install
adduser                        install
alsa-base                    install
alsa-utils                    install
anacron                        install
app-install-data                install
apparmor                    install
.
.
.
zeitgeist                    install
zeitgeist-core                    install
zeitgeist-datahub                install
zenity                        install
zenity-common                    install
zip                        install
zlib1g:amd64                    install
zlib1g:i386                    install

上面的输出可能会非常长,这依赖于你的系统已安装的包。

你同样可以通过grep来过滤割到更精确的包。比如,我想要使用dpkg命令查看系统中安装的gcc包:

dpkg --get-selections | grep gcc

示例输出:

gcc                        install
gcc-4.8                        install
gcc-4.8-base:amd64                install
gcc-4.8-base:i386                install
gcc-4.9-base:amd64                install
gcc-4.9-base:i386                install
libgcc-4.8-dev:amd64                install
libgcc1:amd64                    install
libgcc1:i386                    install

此外,你可以使用“-L”参数来找出包中文件的位置。

dpkg -L gcc-4.8

示例输出:

/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/gcc-4.8-base
/usr/share/doc/gcc-4.8-base/README.Bugs
/usr/share/doc/gcc-4.8-base/NEWS.html
/usr/share/doc/gcc-4.8-base/quadmath
/usr/share/doc/gcc-4.8-base/quadmath/changelog.gz
/usr/share/doc/gcc-4.8-base/gcc
.
.
.
/usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/x86_64-linux-gnu-gcov-4.8

就是这样了。希望这篇对你有用。

美好的一天!


via: http://www.unixmen.com/linux-basics-check-package-installed-not-ubuntu/

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

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

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

Linux:如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘

通常在你在虚拟机中添加一块新硬盘时,你可能会看到新硬盘没有自动加载。这是因为连接到硬盘的SCSI总线需要重新扫描来使得新硬盘可见。这里有一个简单的命令来重新扫描SCSI总线和SCSI设备。下面这几步在CentOS 7 和RHEL 7 中测试过。

  1. 在ESXi或者vCenter中添加一块新的20G硬盘:

    Linux:如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘
    Linux:如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘
  2. 显示当前磁盘分区:

    [root@centos7 ~]# fdisk -l
    

    Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x0006b96a
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     1026047      512000   83  Linux
    /dev/sda2         1026048    62914559    30944256   8e  Linux LVM
    Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/mapper/centos-root: 29.5 GB, 29536288768 bytes, 57688064 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
  3. 确定主机总线号

    [root@centos7 ~]# ls /sys/class/scsi_host/
    host0  host1  host2
    
  4. 重新扫描SCSI总线来添加设备

    [root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
    [root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
    [root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
    
  5. 验证磁盘和分区并确保20GB硬盘已经添加了。在本例中,出现了下面这行 “Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors” 并且可以确认没有重启服务器就添加了新盘:

    [root@centos7 ~]# fdisk -l
    Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x0006b96a
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     1026047      512000   83  Linux
    /dev/sda2         1026048    62914559    30944256   8e  Linux LVM
    Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/mapper/centos-root: 29.5 GB, 29536288768 bytes, 57688064 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    

via: http://www.ehowstuff.com/how-to-add-a-new-hard-disk-without-rebooting-on-centos-7-rhel-7/

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

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

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

Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV

恶意软件是指任何旨在干扰或破坏计算系统正常运行的软件程序。虽然最臭名昭著的几种恶意软件如病毒、间谍软件和广告软件,但它们企图引起的危害不一:有的是窃取私密信息,有的是删除个人数据,有的则介于两者之间;而恶意软件的另一个常见用途就是控制系统,然后利用该系统发动僵尸网络,形成所谓的拒绝服务(DoS)攻击或分布式拒绝服务(DDoS)攻击。

Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV

换句话说,我们万万不可抱有这种想法“因为我并不存储任何敏感数据或重要数据,所以不需要保护自己的系统远离恶意软件”,因为那些数据并不是恶意软件的唯一目标。

由于这个原因,我们将在本文中介绍在RHEL 7.0/6.x(x是版本号)、CentOS 7.0/6.x和Fedora 21-12中,如何安装并配置Linux恶意软件检测工具(又叫MalDet,或简称LMD)和ClamAV(反病毒引擎)。

这是采用GPL v2许可证发布的一款恶意软件扫描工具,专门为主机托管环境而设计。然而,你很快就会认识到,无论自己面对哪种环境,都会得益于MalDet。

将LMD安装到RHEL/CentOS 7.0/6.x和Fedora 21-12上

LMD无法从在线软件库获得,而是以打包文件的形式从项目官方网站分发。打包文件含有最新版本的源代码,总是可以从下列链接处获得,可使用下列命令来下载:

# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz

然后,我们需要解压该打包文件,并进入提取/解压内容的目录。由于当前版本是1.4.2,目录为maldetect-1.4.2。我们会在该目录中找到安装脚本install.sh。

# tar -xvf maldetect-current.tar.gz
# ls -l | grep maldetect

Linux恶意软件检测和反病毒引擎ClamAV安装使用教程

下载Linux恶意软件检测工具

如果我们检查安装脚本,该脚本长度只有75行(包括注释),就会发现,它不仅安装该工具,还执行预检测,看看默认安装目录(/usr/local/maldetect)有无存在。要是不存在,脚本就会先创建安装目录,然后执行下一步。

最后,安装完成后,只要将cron.daily脚本(参阅上图)放入到/etc/cron.daily,就可以排定通过cron(计划任务)的每天执行。这个帮助脚本具有诸多功能,包括清空旧的临时数据,检查新的LMD版本,扫描默认Apache和Web控制面板(比如CPanel和DirectAdmin等)默认数据目录。

话虽如此,还是按平常那样运行安装脚本:

# ./install.sh

Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV

在Linux中安装Linux恶意软件检测工具

配置Linux恶意软件检测工具

配置LDM的工作通过/usr/local/maldetect/conf.maldet来处理,所以选项都进行了充分的注释,以便配置起来相当容易。万一你哪里卡住了,还可以参阅/usr/local/src/maldetect-1.4.2/README,了解进一步的指示。

在配置文件中,你会找到用方括号括起来的下列部分:

  • EMAIL ALERTS(邮件提醒)
  • QUARANTINE OPTIONS(隔离选项)
  • SCAN OPTIONS(扫描选项)
  • STATISTICAL ANALYSIS(统计分析)
  • MONITORING OPTIONS(监控选项)

这每个部分都含有几个变量,表明LMD会如何运行、有哪些功能特性可以使用。

  • 如果你想收到通知恶意软件检测结果的电子邮件,就设置email_alert=1。为了简洁起见,我们只将邮件转发到本地系统用户,但是你同样可以探究其他选项,比如将邮件提醒发送到外部用户。
  • 如果你之前已设置了email_alert=1,设置email_subj=”Your subject here”和email_addr=username@localhost。
  • 至于quar_hits,即针对恶意软件袭击的默认隔离操作(0 =仅仅提醒,1 = 转而隔离并提醒),你告诉LMD在检测到恶意软件后执行什么操作。
  • quar_clean将让你决定想不想清理基于字符串的恶意软件注入。牢记一点:就本身而言,字符串特征是“连续的字节序列,有可能与恶意软件家族的许多变种匹配。”
  • quar_susp,即针对遭到袭击的用户采取的默认暂停操作,让你可以禁用其所属文件已被确认为遭到袭击的帐户。
  • clamav_scan=1将告诉LMD试图检测有无存在ClamAV二进制代码,并用作默认扫描器引擎。这可以获得最多快出四倍的扫描性能和出色的十六进制分析。这个选项只使用ClamAV作为扫描器引擎,LMD特征仍是检测威胁的基础。

重要提示:

请注意:quar_clean和quar_susp需要quar_hits被启用(=1)。

总之,在/usr/local/maldetect/conf.maldet中,有这些变量的行应该看起来如下:

email_alert=1
email_addr=gacanepa@localhost
email_subj="Malware alerts for $HOSTNAME - $(date +%Y-%m-%d)"
quar_hits=1
quar_clean=1
quar_susp=1
clam_av=1

将ClamAV安装到RHEL/CentOS 7.0/6.x和Fedora 21-12上

想安装ClamAV以便充分利用clamav_scan设置,请遵循这些步骤:

创建软件库文件/etc/yum.repos.d/dag.repo:

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag/
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
enabled=1

然后运行命令:

# yum update && yum install clamd

注意:这些只是安装ClamAV的基本指令,以便将它与LMD整合起来。我们在ClamAV设置方面不作详细介绍,因为正如前面所述,LMD特征仍是检测和清除威胁的基础。

测试Linux恶意软件检测工具

现在就可以检测我们刚刚安装的LMD / ClamAV了。不是使用实际的恶意软件,我们将使用EICAR测试文件(http://www.eicar.org/86-0-Intended-use.html),这些文件可从EICAR网站下载获得。

# cd /var/www/html
# wget http://www.eicar.org/download/eicar.com
# wget http://www.eicar.org/download/eicar.com.txt
# wget http://www.eicar.org/download/eicar_com.zip
# wget http://www.eicar.org/download/eicarcom2.zip

这时候,你可以等待下一个cron任务运行,也可以自行手动执行maldet。我们将采用第二种方法:

# maldet --scan-all /var/www/

LMD还接受通配符,所以如果你只想扫描某种类型的文件(比如说zip文件),就可以这么做:

# maldet --scan-all /var/www/*.zip
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV

扫描Linux中的恶意软件

扫描完成后,你可以查阅LMD发送过来的电子邮件,也可以用下列命令查看报告:

# maldet --report 021015-1051.3559
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV
Linux:如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV

Linux恶意软件扫描报告

其中021015-1051.3559是SCANID(SCANID与你的实际结果会略有不同)。

重要提示:请注意:由于eicar.com文件下载了两次(因而导致eicar.com和eicar.com.1),LMD发现了5次袭击。

如果你检查隔离文件夹(我只留下了一个文件,删除了其余文件),我们会看到下列结果:

# ls –l 

Linux恶意软件检测工具隔离文件

Linux恶意软件检测工具隔离文件

你然后可以用下列命令删除所有隔离的文件:

# rm -rf /usr/local/maldetect/quarantine/*

万一那样,

# maldet --clean SCANID

最后的考虑因素

由于maldet需要与cron整合起来,你就需要在root的crontab中设置下列变量(以root用户的身份键入crontab –e,并按回车键),也许你会注意到LMD并没有每天正确运行:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
SHELL=/bin/bash

这将有助于提供必要的调试信息。

结束语

我们在本文中讨论了如何安装并配置Linux恶意软件检测工具和ClamAV这个功能强大的搭档。借助这两种工具,检测恶意软件应该是相当轻松的任务。

不过,你要帮自己一个忙,熟悉之前解释的README文件,那样你就能确信自己的系统得到了全面支持和妥善管理。

要是你有什么评论或问题,欢迎随时留言。

来源:http://netsecurity.51cto.com/art/201503/469669.htm

Linux:如何在CentOS 7.0 安装 Websvn

大家好,今天我们会在CentOS 7.0 上为 subversion(SVN)安装Web 界面 WebSVN。(subverion 是 apache 的顶级项目,也称为 Apache SVN 或 SVN)

WebSVN 将 Svbverion 的操作你的仓库的各种功能通过 Web 界面提供出来。通过它,我们可以看到任何给定版本的任何文件或者目录的日志,并且可看到所有文件改动、添加、删除的列表。我们同样可以查看两个版本间的差异来知道特定版本改动了什么。

Linux:如何在CentOS 7.0 安装 Websvn
Linux:如何在CentOS 7.0 安装 Websvn

特性

WebSVN提供了下面这些特性:

  • 易于使用的用户界面
  • 可定制的模板系统
  • 色彩化的文件列表
  • 追溯视图
  • 日志信息查询
  • RSS支持
  • 更多

由于其使用PHP写成,WebSVN同样易于移植和安装。

现在我们将为Subverison安装WebSVN。请确保你的服务器上已经安装了 SVN。如果你还没有安装,你可以按本教程安装。

安装完SVN后,你需要以下几步。

1. 下载 WebSVN

你可以从官方网站 http://www.websvn.info/download/ 中下载 WebSVN。我们首先进入 /var/www/html/ 并在这里下载安装包。

$ sudo -s

请在shell或者终端中执行上面的命令,因为我们需要切换到root权限来对系统限制区域有访问权。

# cd /var/www/html
# wget http://websvn.tigris.org/files/documents/1380/49057/websvn-2.3.3.zip
Linux:如何在CentOS 7.0 安装 Websvn
Linux:如何在CentOS 7.0 安装 Websvn

这里,我下载的是最新的2.3.3版本的 websvn。你可以从上面这个网站找到下载链接,用适合你的包的链接来替换上面的链接。

2. 解压下载的zip

# unzip websvn-2.3.3.zip
# mv websvn-2.3.3 websvn
Linux:如何在CentOS 7.0 安装 Websvn
Linux:如何在CentOS 7.0 安装 Websvn

3. 安装php

# yum install php
Linux:如何在CentOS 7.0 安装 Websvn
Linux:如何在CentOS 7.0 安装 Websvn

4. 编辑WebSVN配置

现在,我们需要拷贝位于 /var/www/html/websvn/include 的 distconfig.php 为 config.php,并且接着编辑该配置文件。

# cd /var/www/html/websvn/include
# cp distconfig.php config.php
# nano config.php

现在我们需要按如下改变文件。完成之后,请保存并退出。

// Configure these lines if your commands aren't on your path.
//
 $config->setSVNCommandPath('/usr/bin'); // e.g. c:\program files\subversion\bin
 $config->setDiffPath('/usr/bin');
// For syntax colouring, if option enabled...
 $config->setEnscriptPath('/usr/bin');
 $config->setSedPath('/bin');
// For delivered tarballs, if option enabled...
 $config->setTarPath('/bin');
// For delivered GZIP'd files and tarballs, if option enabled...
 $config->setGZipPath('/bin');
//
 $config->parentPath('/svn/');
$extEnscript[".pl"] = "perl";
$extEnscript[".py"] = "python";
$extEnscript[".sql"] = "sql";
$extEnscript[".java"] = "java";
$extEnscript[".html"] = "html";
$extEnscript[".xml"] = "html";
$extEnscript[".thtml"] = "html";
$extEnscript[".tpl"] = "html";
$extEnscript[".sh"] = "bash";
Linux:如何在CentOS 7.0 安装 Websvn
Linux:如何在CentOS 7.0 安装 Websvn

5. 启动 WebSVN

现在,我们将近完成了。现在需要重启Apache服务。你可以用下面的命令。

# systemctl restart httpd.service

接着我们在浏览器中打开WebSVN,输入 http:// IP地址/websvn ,或者你在本地的话,你可以输入 http://localhost/websvn 。

Linux:如何在CentOS 7.0 安装 Websvn
Linux:如何在CentOS 7.0 安装 Websvn

注意: 如果你遇到一个像”Unable to find “enscript” tool at location “/usr/bin/enscript”这样的问题,那么你需要使用“yum install enscript”安装enscript来修复这个问题。

总结

好了,我们已经在CentOS 7上完成WebSVN的安装了。这个教程同样适用于RHEL 7。

如果你有任何问题、评论、反馈请在下面的评论栏中留下,来让我们知道该添加什么和改进。谢谢! 用用看吧。:-)


via: http://linoxide.com/linux-how-to/install-websvn-subversion-centos-7/

作者:Arun Pyasi 译者:geekpi 校对:wxy

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

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

Linux:Linux基础:如何找出你的系统所支持的最大内存

Linux:Linux基础:如何找出你的系统所支持的最大内存
Linux:Linux基础:如何找出你的系统所支持的最大内存

大多数情况下你可以从BIOS、产品目录或者干脆手动找出你的系统所持的最大内存。这里,我们介绍一种简单有用的技巧——使用dmidecode来找出系统支持的最大内存,这样你就无需打开机箱或者参照BIOS和产品目录了。

什么是 dmidecode?

就像你可能知道的一样, dmidecode是一个将计算机DMI(又名SMBIOS)表的内容转换为可读格式的工具。这个表包含了系统硬件组件的介绍以及其他一些如序列号和IOS版本等有用的信息。使用dmidecode你能够获取此项信息,而无需去探测真实的硬件。

找出你的系统所支持的最大内存

请确定你已经在系统中安装了dmidecode,我觉得你的操作系统应该已经自动安装过了,不过并不非常确定。

在基于Deb的系统中安装

sudo apt-get install dmidecode

在基于RPM的系统中安装

sudo yum install dmidecode

在SUSE/openSUSE中安装

sudo zypper in dmidecode

好了,我们已经安装了dmidecode,接下来让我们找出支持的最大内存。输入以下命令:

sudo dmidecode -t 16

输出样本

# dmidecode 2.12
SMBIOS 2.6 present.
Handle 0x0014, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 16 GB
    Error Information Handle: Not Provided
    Number Of Devices: 2

就像你看到的,我的系统支持最大内存到16G,并且有两个内存插槽,简单吧?

接下来,让我们找出现在已经安装的内存的详细信息。

sudo dmidecode -t 17

输出样本

# dmidecode 2.12
SMBIOS 2.6 present.
Handle 0x0017, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0014
    Error Information Handle: 0x0000
    Total Width: Unknown
    Data Width: Unknown
    Size: No Module Installed
    Form Factor: DIMM
    Set: None
    Locator: DIMM_B
    Bank Locator: BANK 2
    Type: Unknown
    Type Detail: None
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown
Handle 0x0015, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0014
    Error Information Handle: 0x0000
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: SODIMM
    Set: None
    Locator: DIMM_A
    Bank Locator: BANK 0
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1067 MHz
    Manufacturer: 014F
    Serial Number: 00092AF2
    Asset Tag: 54114000
    Part Number: JM1066KSN-4G
    Rank: Unknown

就像上边输出的一样,我在插槽1里边安装了一个内存条。内存大小为4G,类型为DDR3,速度为1067 MHz

同样的,我们可以通过下边命令得到完整的内存信息。

sudo dmidecode -t memory
sudo dmidecode -t memory | less
sudo dmidecode -t memory | more

输出样本

# dmidecode 2.12
SMBIOS 2.6 present.
Handle 0x0014, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 16 GB
    Error Information Handle: Not Provided
    Number Of Devices: 2
Handle 0x0017, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0014
    Error Information Handle: 0x0000
    Total Width: Unknown
    Data Width: Unknown
    Size: No Module Installed
    Form Factor: DIMM
    Set: None
    Locator: DIMM_B
    Bank Locator: BANK 2
    Type: Unknown
    Type Detail: None
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown
Handle 0x0015, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0014
    Error Information Handle: 0x0000
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: SODIMM
    Set: None
    Locator: DIMM_A
    Bank Locator: BANK 0
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1067 MHz
    Manufacturer: 014F
    Serial Number: 00092AF2
    Asset Tag: 54114000
    Part Number: JM1066KSN-4G
    Rank: Unknown

如果你好奇想要知道整个系统的详细信息,例如主板、内存、BIOS等,那么可以输入以下命令来获取。

sudo dmidecode

输出样本

# dmidecode 2.12
SMBIOS 2.6 present.
48 structures occupying 2173 bytes.
Table at 0x000EB840.
Handle 0xDA00, DMI type 218, 251 bytes
OEM-specific Type
    Header and Data:
        DA FB 00 DA B2 00 0D 5F 0F 37 40 7D 00 00 00 00
        00 7E 00 01 00 00 00 DC 01 00 80 02 00 DD 01 00
        80 03 00 75 01 01 80 01 00 76 01 02 80 01 00 2D
        01 03 80 01 00 2E 01 03 80 00 00 81 01 07 80 00
        00 82 01 07 80 01 00 83 01 08 80 00 00 84 01 08
        80 01 00 85 01 06 80 00 00 86 01 06 80 01 00 58
        02 05 80 00 00 57 02 05 80 01 00 9C 00 02 00 01
        00 9B 00 02 00 00 00 8A 01 03 00 01 00 89 01 03
        00 00 00 7F 01 04 00 00 00 80 01 04 00 01 00 53
        01 05 00 00 00 52 01 05 00 01 00 7B 01 06 00 00
        00 7C 01 06 00 01 00 94 01 07 00 00 00 93 01 07
        00 01 00 7D 00 08 00 00 00 2D 00 09 00 01 00 2E
        00 09 00 00 00 6E 00 0A 00 00 00 95 00 0B 00 01
        00 96 00 0B 00 00 00 2F 02 0C 00 01 00 30 02 0C
        00 00 00 50 02 0D 00 00 00 51 02 0D 00 01 00 52
        02 0D 00 02 00 FF FF 00 00 00 00
Handle 0xDA01, DMI type 218, 59 bytes
OEM-specific Type
    Header and Data:
        DA 3B 01 DA B2 00 0D 5F 0F 37 40 53 02 0D 00 03
        00 54 02 0D 00 04 00 56 02 0D 00 05 00 4B 01 0E
        00 01 00 4A 01 0E 00 00 00 EA 00 0F 00 01 00 EB
        00 0F 00 00 00 FF FF 00 00 00 00
Handle 0x0004, DMI type 4, 42 bytes
Processor Information
    Socket Designation: CPU 1
    Type: Central Processor
    Family: Core i3
    Manufacturer: Intel
    ID: A7 06 03 01 FF FB AB BE
    Signature: Type 0, Family 6, Model 42, Stepping 7
    Flags:
        FPU (Floating-point unit on-chip)
        VME (Virtual mode extension)
        DE (Debugging extension)
        PSE (Page size extension)
        TSC (Time stamp counter)
        MSR (Model specific registers)
        PAE (Physical address extension)
        MCE (Machine check exception)
        CX8 (CMPXCHG8 instruction supported)
        APIC (On-chip APIC hardware supported)
        SEP (Fast system call)
        MTRR (Memory type range registers)
        PGE (Page global enable)
        MCA (Machine check architecture)
        CMOV (Conditional move instruction supported)
        PAT (Page attribute table)
        PSE-36 (36-bit page size extension)
        CLFSH (CLFLUSH instruction supported)
        DS (Debug store)
        ACPI (ACPI supported)
        MMX (MMX technology supported)
        FXSR (FXSAVE and FXSTOR instructions supported)
        SSE (Streaming SIMD extensions)
        SSE2 (Streaming SIMD extensions 2)
        SS (Self-snoop)
        HTT (Multi-threading)
        TM (Thermal monitor supported)
        PBE (Pending break enabled)
    Version: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
    Voltage: 1.1 V
    External Clock: 100 MHz
    Max Speed: 2300 MHz
    Current Speed: 2300 MHz
    Status: Populated, Enabled
    Upgrade: Other
    L1 Cache Handle: 0x0005
    L2 Cache Handle: 0x0006
    L3 Cache Handle: 0x0007
    Serial Number: To Be Filled By O.E.M.
    Asset Tag: To Be Filled By O.E.M.
    Part Number: To Be Filled By O.E.M.
    Core Count: 2
    Core Enabled: 1
    Thread Count: 2
    Characteristics:
        64-bit capable
Handle 0x0005, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L1-Cache
    Configuration: Enabled, Not Socketed, Level 1
    Operational Mode: Write Back
    Location: Internal
    Installed Size: 64 kB
    Maximum Size: 64 kB
    Supported SRAM Types:
        Other
    Installed SRAM Type: Other
    Speed: Unknown
    Error Correction Type: None
    System Type: Unified
    Associativity: 8-way Set-associative
Handle 0x0006, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L2-Cache
    Configuration: Enabled, Not Socketed, Level 2
    Operational Mode: Varies With Memory Address
    Location: Internal
    Installed Size: 512 kB
    Maximum Size: 512 kB
    Supported SRAM Types:
        Other
    Installed SRAM Type: Other
    Speed: Unknown
    Error Correction Type: None
    System Type: Unified
    Associativity: 8-way Set-associative
Handle 0x0007, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L3-Cache
    Configuration: Enabled, Not Socketed, Level 3
    Operational Mode: Varies With Memory Address
    Location: Internal
    Installed Size: 3072 kB
    Maximum Size: 3072 kB
    Supported SRAM Types:
        Other
    Installed SRAM Type: Other
    Speed: Unknown
    Error Correction Type: None
    System Type: Unified
    Associativity: Other
Handle 0x0008, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J1A1
    Internal Connector Type: None
    External Reference Designator: PS2Mouse
    External Connector Type: PS/2
    Port Type: Mouse Port
Handle 0x0009, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J1A1
    Internal Connector Type: None
    External Reference Designator: Keyboard
    External Connector Type: PS/2
    Port Type: Keyboard Port
Handle 0x000A, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J2A2B
    Internal Connector Type: None
    External Reference Designator: Video
    External Connector Type: DB-15 female
    Port Type: Video Port
Handle 0x000B, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J3A1
    Internal Connector Type: None
    External Reference Designator: USB1
    External Connector Type: Access Bus (USB)
    Port Type: USB
Handle 0x000C, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J3A1
    Internal Connector Type: None
    External Reference Designator: USB2
    External Connector Type: Access Bus (USB)
    Port Type: USB
Handle 0x000D, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J3A1
    Internal Connector Type: None
    External Reference Designator: USB3
    External Connector Type: Access Bus (USB)
    Port Type: USB
Handle 0x000E, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: J5A1
    Internal Connector Type: None
    External Reference Designator: LAN
    External Connector Type: RJ-45
    Port Type: Network Port
Handle 0x000F, DMI type 9, 17 bytes
System Slot Information
    Designation: J6B2
    Type: x16 PCI Express
    Current Usage: In Use
    Length: Long
    ID: 0
    Characteristics:
        3.3 V is provided
        Opening is shared
        PME signal is supported
    Bus Address: 0000:00:01.0
Handle 0x0010, DMI type 9, 17 bytes
System Slot Information
    Designation: J6B1
    Type: x1 PCI Express
    Current Usage: In Use
    Length: Short
    ID: 1
    Characteristics:
        3.3 V is provided
        Opening is shared
        PME signal is supported
    Bus Address: 0000:00:1c.3
Handle 0x0012, DMI type 11, 5 bytes
OEM Strings
    String 1: Dell System
    String 2: 5[0003]
    String 3: 13[P18F]
Handle 0x0013, DMI type 12, 5 bytes
System Configuration Options
    Option 1: To Be Filled By O.E.M.
Handle 0x001C, DMI type 21, 7 bytes
Built-in Pointing Device
    Type: Touch Pad
    Interface: Bus Mouse
    Buttons: 2
Handle 0x001D, DMI type 22, 26 bytes
Portable Battery
    Location: Sys. Battery Bay
    Manufacturer: Sanyo
    Serial Number: 5390
    Name: DELL 4YRJH22
    Chemistry: Lithium Ion
    Design Capacity: 45000 mWh
    Design Voltage: 10800 mV
    SBDS Version: 1.0
    Maximum Error: 2%
    SBDS Manufacture Date: 2012-02-28
    OEM-specific Information: 0x00000001
Handle 0x001E, DMI type 32, 20 bytes
System Boot Information
    Status: No errors detected
Handle 0x0020, DMI type 27, 12 bytes
Cooling Device
    Type: Fan
    Status: OK
    OEM-specific Information: 0x00000000
Handle 0x0021, DMI type 28, 20 bytes
Temperature Probe
    Description: CPU Internal Temperature
    Location: Processor
    Status: OK
    Maximum Value: 127.0 deg C
    Minimum Value: 0.0 deg C
    Resolution: 1.000 deg C
    Tolerance: 0.5 deg C
    Accuracy: Unknown
    OEM-specific Information: 0x00000000
Handle 0xB000, DMI type 176, 5 bytes
OEM-specific Type
    Header and Data:
        B0 05 00 B0 00
Handle 0xB100, DMI type 177, 12 bytes
OEM-specific Type
    Header and Data:
        B1 0C 00 B1 1A 0E 00 00 00 00 00 00
Handle 0x0025, DMI type 209, 12 bytes
OEM-specific Type
    Header and Data:
        D1 0C 25 00 00 00 00 03 05 01 00 03
Handle 0x0026, DMI type 210, 12 bytes
OEM-specific Type
    Header and Data:
        D2 0C 26 00 00 00 00 03 05 20 01 03
Handle 0x0027, DMI type 211, 13 bytes
OEM-specific Type
    Header and Data:
        D3 0D 27 00 01 00 00 00 00 02 03 04 04
    Strings:
        Front
Handle 0x0028, DMI type 212, 57 bytes
OEM-specific Type
    Header and Data:
        D4 39 28 00 70 00 71 00 01 49 50 48 9C 00 49 FC
        01 9B 00 49 FC 00 7F 01 4A FB 04 80 01 4A FB 00
        53 01 4A F7 08 52 01 4A F7 08 7B 01 4A EF 10 7C
        01 4A EF 10 FF FF 00 00 00
Handle 0x002A, DMI type 217, 8 bytes
OEM-specific Type
    Header and Data:
        D9 08 2A 00 01 02 00 00
    Strings:
Handle 0x002B, DMI type 219, 11 bytes
OEM-specific Type
    Header and Data:
        DB 0B 2B 00 00 01 02 03 00 04 05
    Strings:
Handle 0x002C, DMI type 220, 22 bytes
OEM-specific Type
    Header and Data:
        DC 16 2C 00 01 F0 00 00 02 F0 00 00 00 00 03 F0
        04 F0 00 00 00 00
Handle 0x002D, DMI type 221, 19 bytes
OEM-specific Type
    Header and Data:
        DD 13 2D 00 00 00 00 00 00 03 00 00 00 00 00 00
        00 00 00
Handle 0x002E, DMI type 222, 16 bytes
OEM-specific Type
    Header and Data:
        DE 10 2E 00 01 08 FF FF 00 00 00 00 00 00 00 00
Handle 0x0014, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 16 GB
    Error Information Handle: Not Provided
    Number Of Devices: 2
Handle 0x0016, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x0015
    Memory Array Mapped Address Handle: 0x0018
    Partition Row Position: 1
    Interleave Position: 1
    Interleaved Data Depth: 1
Handle 0x0017, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0014
    Error Information Handle: 0x0000
    Total Width: Unknown
    Data Width: Unknown
    Size: No Module Installed
    Form Factor: DIMM
    Set: None
    Locator: DIMM_B
    Bank Locator: BANK 2
    Type: Unknown
    Type Detail: None
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown
Handle 0x0018, DMI type 19, 15 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000FFFFFFFF
    Range Size: 4 GB
    Physical Array Handle: 0x0014
    Partition Width: 2
Handle 0x002F, DMI type 13, 22 bytes
BIOS Language Information
    Language Description Format: Abbreviated
    Installable Languages: 1
        eng
        Currently Installed Language: eng
Handle 0x0030, DMI type 131, 64 bytes
OEM-specific Type
    Header and Data:
        83 40 30 00 31 00 00 00 00 00 00 00 00 00 00 00
        F8 00 4B 1C FF FF FF FF 01 00 00 00 00 00 07 00
        AD 04 04 00 00 00 00 00 C8 00 FF FF 00 00 00 00
        00 00 00 00 32 00 00 00 76 50 72 6F 00 00 00 00
Handle 0x0029, DMI type 216, 9 bytes
OEM-specific Type
    Header and Data:
        D8 09 29 00 01 02 01 00 00
    Strings:
        INTEL
        0000
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
    Vendor: Dell Inc.
    Version: A05
    Release Date: 08/03/2012
    Address: 0xF0000
    Runtime Size: 64 kB
    ROM Size: 2048 kB
    Characteristics:
        MCA is supported
        PCI is supported
        BIOS is upgradeable
        BIOS shadowing is allowed
        ESCD support is available
        Boot from CD is supported
        Selectable boot is supported
        BIOS ROM is socketed
        EDD is supported
        5.25"/1.2 MB floppy services are supported (int 13h)
        3.5"/720 kB floppy services are supported (int 13h)
        3.5"/2.88 MB floppy services are supported (int 13h)
        Print screen service is supported (int 5h)
        8042 keyboard services are supported (int 9h)
        Serial services are supported (int 14h)
        Printer services are supported (int 17h)
        CGA/mono video services are supported (int 10h)
        ACPI is supported
        USB legacy is supported
        ATAPI Zip drive boot is supported
        BIOS boot specification is supported
        Targeted content distribution is supported
    BIOS Revision: 0.5
    Firmware Revision: 0.5
Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
    Manufacturer: Dell Inc.
    Product Name: 01HXXJ
    Version: A05
    Serial Number: .JSQ7PA1.CN7117623M00J2.
    Asset Tag: Not Specified
    Features:
        Board is a hosting board
        Board is replaceable
    Location In Chassis: To Be Filled By O.E.M.
    Chassis Handle: 0x0003
    Type: Motherboard
    Contained Object Handles: 0
Handle 0x0003, DMI type 3, 21 bytes
Chassis Information
    Manufacturer: Dell Inc.
    Type: Portable
    Lock: Not Present
    Version: Not Specified
    Serial Number: JSR1
    Asset Tag: Not Specified
    Boot-up State: Safe
    Power Supply State: Safe
    Thermal State: Safe
    Security Status: None
    OEM Information: 0x00000000
    Height: Unspecified
    Number Of Power Cords: 1
    Contained Elements: 0
Handle 0x0001, DMI type 1, 27 bytes
System Information
    Manufacturer: Dell Inc.
    Product Name: Inspiron N5050
    Version: Not Specified
    Serial Number: JSR1
    UUID: 4C4C4544-0053-5110-8029-CAC05241
    Wake-up Type: Power Switch
    SKU Number: To be filled by O.E.M.
    Family:
Handle 0x0024, DMI type 208, 12 bytes
OEM-specific Type
    Header and Data:
        D0 0C 24 00 02 05 FE 00 04 05 01 02
    Strings:
        20120323
        20120323
Handle 0x0011, DMI type 10, 6 bytes
On Board Device Information
    Type: Video
    Status: Enabled
    Description: Mobile Intel SandyBridge HD Graphics
Handle 0x0015, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0014
    Error Information Handle: 0x0000
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: SODIMM
    Set: None
    Locator: DIMM_A
    Bank Locator: BANK 0
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1067 MHz
    Manufacturer: 014F
    Serial Number: 0009F2
    Asset Tag: 54114000
    Part Number: JM1066-4G
    Rank: Unknown
Handle 0x0031, DMI type 127, 4 bytes
End Of Table

好了,就是这样。


via: http://www.unixmen.com/linux-basics-how-to-find-maximum-supported-ram-by-your-system/

作者:SK 译者:mr-ping 校对:wxy

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

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

Linux:HTTPS的七个误解

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

误解七:HTTPS无法缓存

许多人以为,出于安全考虑,浏览器不会在本地保存HTTPS缓存。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的。

微软的IE项目经理Eric Lawrence写道:

“说来也许令人震惊,只要HTTP头允许这样做,所有版本的IE都缓存HTTPS内容。比如,如果头命令是Cache-Control: max-age=600,那么这个网页就将被IE缓存10分钟。IE的缓存策略,与是否使用HTTPS协议无关。(其他浏览器在这方面的行为不一致,取决于你使用的版本,所以这里不加以讨论。)”

Firefox默认只在内存中缓存HTTPS。但是,只要头命令中有Cache-Control: Public,缓存就会被写到硬盘上。下面的图片显示,Firefox的硬盘缓存中有HTTPS内容,头命令正是Cache-Control:Public。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

误解六:SSL证书很贵

如果你在网上搜一下,就会发现很多便宜的SSL证书,大概10美元一年,这和一个.com域名的年费差不多。而且事实上,还能找到免费的SSL证书。

在效力上,便宜的证书当然会比大机构颁发的证书差一点,但是几乎所有的主流浏览器都接受这些证书。

误解五:HTTPS站点必须有独享的IP地址

由于IPv4将要分配完毕,所以很多人关心这个问题。每个IP地址只能安装一张SSL证书,这是毫无疑问的。但是,如果你使用子域名通配符SSL证书(wildcard SSL certificate,价格大约是每年125美元),就能在一个IP地址上部署多个HTTPS子域名。比如,https://www.httpwatch.com和https://store.httpwatch.com,就共享同一个IP地址。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

另外,UCC(统一通信证书,Unified Communications Certificate)支持一张证书同时匹配多个站点,可以是完全不同的域名。SNI(服务器名称指示,Server Name Indication)允许一个IP地址上多个域名安装多张证书。服务器端,Apache和Nginx支持该技术,IIS不支持;客户端,IE 7+、Firefox 2.0+、Chrome 6+、Safari 2.1+和Opera 8.0+支持。

误解四:转移服务器时要购买新证书

部署SSL证书,需要这样几步:

  1. 在你的服务器上,生成一个CSR文件(SSL证书请求文件,SSL Certificate Signing Request)。

  2. 使用CSR文件,购买SSL证书。

  3. 安装SSL证书。

这些步骤都经过精心设计,保证传输的安全,防止有人截取或非法获得证书。结果就是,你在第二步得到的证书不能用在另一台服务器上。如果你需要这样做,就必须以其他格式输出证书。

比如,IIS的做法是生成一个可以转移的.pfx文件,并加以密码保护。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

将这个文件传入其他服务器,将可以继续使用原来的SSL证书了。

误解三:HTTPS太慢

使用HTTPS不会使你的网站变得更快(实际上有可能,请看下文),但是有一些技巧可以大大减少额外开销。

首先,只要压缩文本内容,就会降低解码耗用的CPU资源。不过,对于当代CPU来说,这点开销不值一提。

其次,建立HTTPS连接,要求额外的TCP往返,因此会新增一些发送和接收的字节。但是,从下图可以看到,新增的字节是很少的。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

第一次打开网页的时候,HTTPS协议会比HTTP协议慢一点,这是因为读取和验证SSL证书的时间。下面是一张HTTP网页打开时间的瀑布图。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

同一张网页使用HTTPS协议之后,打开时间变长了。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

建立连接的部分,大约慢了10%。但是,一旦有效的HTTPS连接建立起来,再刷新网页,两种协议几乎没有区别。先是HTTP协议的刷新表现:

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

然后是HTTPS协议:

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

某些用户可能发现,HTTPS比HTTP更快一点。这会发生在一些大公司的内部局域网,因为通常情况下,公司的网关会截取并分析所有的网络通信。但是,当它遇到HTTPS连接时,它就只能直接放行,因为HTTPS无法被解读。正是因为少了这个解读的过程,所以HTTPS变得比较快。

误解二:有了HTTPS,Cookie和查询字符串就安全了

虽然无法直接从HTTPS数据中读取Cookie和查询字符串,但是你仍然需要使它们的值变得难以预测。

比如,曾经有一家英国银行,直接使用顺序排列的数值表示session id:

黑客可以先注册一个账户,找到这个cookie,看到这个值的表示方法。然后,改动cookie,从而劫持其他人的session id。至于查询字符串,也可以通过类似方式泄漏。

误解一:只有注册登录页,才需要HTTPS

这种想法很普遍。人们觉得,HTTPS可以保护用户的密码,此外就不需要了。Firefox浏览器新插件Firesheep,证明了这种想法是错的。我们可以看到,在Twitter和Facebook上,劫持其他人的session是非常容易的。

咖啡馆的免费WiFi,就是一个很理想的劫持环境,因为两个原因:

  1. 这种WiFi通常不会加密,所以很容易监控所有流量。

  2. WiFi通常使用NAT进行外网和内网的地址转换,所有内网客户端都共享一个外网地址。这意味着,被劫持的session,看上去很像来自原来的登录者。

以Twitter为例,它的登录页使用了HTTPS,但是登录以后,其他页面就变成了HTTP。这时,它的cookie里的session值就暴露了。

Linux:HTTPS的七个误解
Linux:HTTPS的七个误解

也就是说,这些cookie是在HTTPS环境下建立的,但是却在HTTP环境下传输。如果有人劫持到这些cookie,那他就能以你的身份在Twitter上发言了。

来源:http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html

Linux:如何在Linux服务器中隐藏PHP版本

通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP。PHP 是如今流行的服务端html嵌入式语言(之一?)。在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞。因此,我会简单描述如何在Linux服务器中隐藏PHP信息。

默认上expose_php默认是开的。关闭“expose_php”参数可以使php隐藏它的版本信息。

[root@centos66 ~]# vi /etc/php.ini

在你的php.ini, 定位到含有expose_php的那行把On设成Off:

expose_php = Off

在此之前,web服务器头看上去就像这样:

[root@centos66 ~]# curl -I http://www.ehowstuff.com/

HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.3
X-Pingback: http://www.ehowstuff.com/xmlrpc.php
Date: Wed, 11 Feb 2015 14:10:43 GMT
X-Page-Speed: 1.9.32.2-4321
Cache-Control: max-age=0, no-cache

更改并重启 Web 服务后,php就不会在web服务头中显示版本了:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 11 Feb 2015 15:38:14 GMT
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Pingback: http://www.ehowstuff.com/xmlrpc.php
Date: Wed, 11 Feb 2015 14:10:43 GMT
X-Page-Speed: 1.9.32.2-4321
Cache-Control: max-age=0, no-cache

LCTT译注:除了 PHP 的版本之外,Web 服务器也会默认泄露版本号。如果使用 Apache 服务器,请参照此文章关闭Apache 版本显示;如果使用 Nginx 服务器,请在 http 段内加入server_tokens off;配置。以上修改请记得重启相关服务。


via: http://www.ehowstuff.com/how-to-hide-php-version-in-linux/

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

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

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

Linux:在linux中创建和解压文档的11个 tar 命令例子

linux中的tar命令

tar(磁带归档)命令是linux系统中被经常用来将文件存入到一个归档文件中的命令。

其常见的文件扩展包括:.tar.gz 和 .tar.bz2, 分别表示通过了gzip或bzip算法进一步进行了压缩。

在本教程中我们会管中窥豹一下在linux桌面或服务器版本中使用tar命令来处理一些创建和解压归档文件的日常工作的例子。

Linux:在linux中创建和解压文档的11个 tar 命令例子
Linux:在linux中创建和解压文档的11个 tar 命令例子

使用tar命令

tar命令在大部分linux系统默认情况下都是可用的,所以你不用单独安装该软件。

tar命令具有两个压缩格式,gzip和bzip,该命令的“z”选项用来指定gzip,“j”选项用来指定bzip。同时也可以创建非压缩归档文件。

1.解压一个tar.gz归档

一般常见的用法是用来解压归档文件,下面的命令将会把文件从一个tar.gz归档文件中解压出来。

$ tar -xvzf tarfile.tar.gz

这里对这些参数做一个简单解释-

x – 解压文件

v – 冗长模式,在解压每个文件时打印出文件的名称。

z – 该文件是一个使用 gzip 压缩的文件。

f – 使用接下来的tar归档来进行操作。

这些就是一些需要记住的重要选项。

解压 tar.bz2/bzip 归档文件

具有bz2扩展名的文件是使用bzip算法进行压缩的,但是tar命令也可以对其进行处理,但是需要通过使用“j”选项来替换“z”选项。

$ tar -xvjf archivefile.tar.bz2

2.将文件解压到一个指定的目录或路径

为了将文件解压到一个指定的目录中,使用“-C”选项来指定路径,此处的“C”是大写“C”。

$ tar -xvzf abc.tar.gz -C /opt/folder/

然后,首先需要确认目标目录是否存在,毕竟tar命令并不会为你创建目录,所以如果目标目录不存在的情况下该命令会失败。

3. 提取出单个文件

为了从一个归档文件中提取出单个文件,只需要将文件名按照以下方式将其放置在命令后面。

$ tar -xz -f abc.tar.gz "./new/abc.txt"

在上述命令中,可以按照以下方式来指定多个文件。

$ tar -xz -f abc.tar.gz "./new/cde.txt" "./new/abc.txt"

4.使用通配符来解压多个文件

通配符可以用来解压于给定通配符匹配的一批文件,例如所有以”.txt”作为扩展名的文件。

$ tar -xz -f abc.tar.gz --wildcards "*.txt"

5. 列出并检索tar归档文件中的内容

如果你仅仅想要列出而不是解压tar归档文件的中的内容,使用“-t”(test)选项, 下面的命令用来打印一个使用gzip压缩过的tar归档文件中的内容。

$ tar -tz -f abc.tar.gz
./new/
./new/cde.txt
./new/subdir/
./new/subdir/in.txt
./new/abc.txt
...

可以将输出通过管道定向到grep来搜索一个文件,或者定向到less命令来浏览内容列表。 使用”v”冗长选项将会打印出每个文件的额外详细信息。

对于 tar.bz2/bzip文件,需要使用”j”选项。

结合上述的命令和grep命令来检索归档文件,如下所示。简单吧!

$ tar -tvz -f abc.tar.gz | grep abc.txt
-rw-rw-r-- enlightened/enlightened 0 2015-01-13 11:40 ./new/abc.txt

6.创建一个tar/tar.gz归档文件

现在我们已经学过了如何解压一个tar归档文件,是时候开始创建一个新的tar归档文件了。tar命令可以用来将所选的文件或整个目录放入到一个归档文件中,以下是相应的样例。

下面的命令使用一个目录来创建一个tar归档文件,它会将该目录中所有的文件和子目录都加入到归档文件中。

$ tar -cvf abc.tar ./new/
./new/
./new/cde.txt
./new/abc.txt

上述命令不会创建一个压缩的的归档文件,只是一个普通的归档文件,只是将多个文件放入到一个归档文件中并没有真正地压缩每个文件。

为了使用压缩,可以分别使用“z”或“j”选项进行gzip或bzip压缩算法。

$ tar -cvzf abc.tar.gz ./new/

文件的扩展名其实并不真正有什么影响。“tar.gz” 和“tgz”是gzip压缩算法压缩文件的常见扩展名。 “tar.bz2”和“tbz”是bzip压缩算法压缩文件的常见扩展名(LCTT 译注:归档是否是压缩的和采用哪种压缩方式并不取决于其扩展名,扩展名只是为了便于辨识。)。

7. 在添加文件之前进行确认

一个有用的选项是“w”,该选项使得tar命令在添加每个文件到归档文件之前来让用户进行确认,有时候这会很有用。

使用该选项时,只有用户输入“y”时的文件才会被加入到归档文件中,如果你不输入任何东西,其默认表示是一个“n”。

# 添加指定文件
$ tar -czw -f abc.tar.gz ./new/*
add ‘./new/abc.txt’?y
add ‘./new/cde.txt’?y
add ‘./new/newfile.txt’?n
add ‘./new/subdir’?y
add ‘./new/subdir/in.txt’?n
#现在列出所有被加入的文件
$ tar -t -f abc.tar.gz
./new/abc.txt
./new/cde.txt
./new/subdir/

8. 加入文件到存在的归档文件中

“r”选项可以被用来将文件加入到已存在的归档文件中,而不用创建一个新的归档文件,下面是一个简单的样例:

$ tar -rv -f abc.tar abc.txt

文件并不能加入到已压缩的归档文件中(gz 或 bzip)。文件只能被加入到普通的归档文件中。

9. 将文件加入到压缩的归档文件中(tar.gz/tar.bz2)

之前已经提到了不可能将文件加入到已压缩的归档文件中,然而依然可以通过简单的一些把戏来完成。使用gunzip命令来解压缩归档文件,然后将文件加入到归档文件中后重新进行压缩。

$ gunzip archive.tar.gz
$ tar -rf archive.tar ./path/to/file
$ gzip archive.tar

对于bzip文件分别使用bzip2和bunzip2。

10.通过tar来进行备份

一个真实的场景是在固定的时间间隔内来备份目录,tar命令可以通过cron调度来实现这样的一个备份,以下是一个样例 :

$ tar -cvz -f archive-$(date +%Y%m%d).tar.gz ./new/

使用cron来运行上述的命令会保持创建类似以下名称的备份文件 :’archive-20150218.tar.gz’。

当然,需要确保日益增长的归档文件不会导致磁盘空间的溢出。

11. 在创建归档文件时进行验证

“W”选项可以用来在创建归档文件之后进行验证,以下是一个简单例子。

$ tar -cvW -f abc.tar ./new/
./new/
./new/cde.txt
./new/subdir/
./new/subdir/in.txt
./new/newfile.txt
./new/abc.txt
Verify ./new/
Verify ./new/cde.txt
Verify ./new/subdir/
Verify ./new/subdir/in.txt
Verify ./new/newfile.txt
Verify ./new/abc.txt

需要注意的是验证动作不能在压缩过的归档文件上进行,只能在非压缩的tar归档文件上执行。

这次就先到此为止,可以通过“man tar”命令来查看tar命令的的手册。


via: http://www.binarytides.com/linux-tar-command/

作者:Silver Moon 译者:theo-l 校对:wxy

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

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

Linux:浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

相关背景知识

要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。

  1. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义
  2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”)
  3. 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别)
  4. 大致了解 CA 证书的用途

考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下。如果你自认为不是菜鸟,请略过本章节,直接去看“HTTPS 协议的需求”。

Linux:浅谈 HTTPS 和 SSL/TLS 协议的背景与基础
Linux:浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

先澄清几个术语——HTTPS、SSL、TLS

1. “HTTP”是干嘛用滴?

首先,HTTP 是一个网络协议,是专门用来帮你传输 Web 内容滴。关于这个协议,就算你不了解,至少也听说过吧?比如你访问俺的博客的主页,浏览器地址栏会出现如下的网址 http://program-think.blogspot.com/

俺加了粗体的部分就是指 HTTP 协议。大部分网站都是通过 HTTP 协议来传输 Web 页面、以及 Web 页面上包含的各种东东(图片、CSS 样式、JS 脚本)。

2. “SSL/TLS”是干嘛用滴?

SSL 是洋文“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)

为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。

到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。

很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

3. “HTTPS”是啥意思?

解释完 HTTP 和 SSL/TLS,现在就可以来解释 HTTPS 啦。咱们通常所说的 HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合。你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。

再来说说 HTTP 协议的特点

作为背景知识介绍,还需要再稍微谈一下 HTTP 协议本身的特点。HTTP 本身有很多特点,考虑到篇幅有限,俺只谈那些和 HTTPS 相关的特点。

1. HTTP 的版本和历史

如今咱们用的 HTTP 协议,版本号是 1.1(也就是 HTTP 1.1)。这个 1.1 版本是1995年底开始起草的(技术文档是 RFC2068),并在1999年正式发布(技术文档是 RFC2616)。

在 1.1 之前,还有曾经出现过两个版本“0.9 和 1.0”,其中的 HTTP 0.9 【没有】被广泛使用,而 HTTP 1.0 被广泛使用过。

另外,据说明年(2015)IETF 就要发布 HTTP 2.0 的标准了。俺拭目以待。

2. HTTP 和 TCP 之间的关系

简单地说,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。

在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。有很多常见的应用层协议是以 TCP 为基础的,比如“FTP、SMTP、POP、IMAP”等。

TCP 被称为“面向连接”的传输层协议。关于它的具体细节,俺就不展开了(否则篇幅又失控了)。你只需知道:传输层主要有两个协议,分别是 TCP 和 UDP。TCP 比 UDP 更可靠。你可以把 TCP 协议想象成某个水管,发送端这头进水,接收端那头就出水。并且 TCP 协议能够确保,先发送的数据先到达(与之相反,UDP 不保证这点)。

3. HTTP 协议如何使用 TCP 连接?

HTTP 对 TCP 连接的使用,分为两种方式:俗称“短连接”和“长连接”(“长连接”又称“持久连接”,洋文叫做“Keep-Alive”或“Persistent Connection”)

假设有一个网页,里面包含好多图片,还包含好多【外部的】CSS 文件和 JS 文件。在“短连接”的模式下,浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSS、JS)。然后针对【每一个】外部资源,再分别发起一个个 TCP 连接,把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)

相反,如果是“长连接”的方式,浏览器也会先发起一个 TCP 连接去抓取页面。但是抓取页面之后,该 TCP 连接并不会立即关闭,而是暂时先保持着(所谓的“Keep-Alive”)。然后浏览器分析 HTML 源码之后,发现有很多外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。

在 HTTP 1.0 版本,【默认】使用的是“短连接”(那时候是 Web 诞生初期,网页相对简单,“短连接”的问题不大);

到了1995年底开始制定 HTTP 1.1 草案的时候,网页已经开始变得复杂(网页内的图片、脚本越来越多了)。这时候再用短连接的方式,效率太低下了(因为建立 TCP 连接是有“时间成本”和“CPU 成本”滴)。所以,在 HTTP 1.1 中,【默认】采用的是“Keep-Alive”的方式。

关于“Keep-Alive”的更多介绍,可以参见维基百科词条(在“这里”)

谈谈“对称加密”和“非对称加密”的概念

1. 啥是“加密”和“解密”?

通俗而言,你可以把“加密”和“解密”理解为某种【互逆的】数学运算。就好比“加法和减法”互为逆运算、“乘法和除法”互为逆运算。

“加密”的过程,就是把“明文”变成“密文”的过程;反之,“解密”的过程,就是把“密文”变为“明文”。在这两个过程中,都需要一个关键的东东——叫做“密钥”——来参与数学运算。

2. 啥是“对称加密”?

所谓的“对称加密技术”,意思就是说:“加密”和“解密”使用【相同的】密钥。这个比较好理解。就好比你用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包。当你下次要把这个压缩文件解开的时候,你需要输入【同样的】密码。在这个例子中,密码/口令就如同刚才说的“密钥”。

3. 啥是“非对称加密”?

所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用【不同的】密钥。这玩意儿比较难理解,也比较难想到。当年“非对称加密”的发明,还被誉为“密码学”历史上的一次革命。

由于篇幅有限,对“非对称加密”这个话题,俺就不展开了。有空的话,再单独写一篇扫盲。

4. 各自有啥优缺点?

看完刚才的定义,很显然:(从功能角度而言)“非对称加密”能干的事情比“对称加密”要多。这是“非对称加密”的优点。但是“非对称加密”的实现,通常需要涉及到“复杂数学问题”。所以,“非对称加密”的性能通常要差很多(相对于“对称加密”而言)。

这两者的优缺点,也影响到了 SSL 协议的设计。

CA 证书的原理及用途

关于这方面,请看俺4年前写的《数字证书及CA的扫盲介绍》。这里就不再重复唠叨了,免得篇幅太长。

HTTPS 协议的需求是啥?

花了好多口水,终于把背景知识说完了。下面正式进入正题。先来说说当初设计 HTTPS 是为了满足哪些需求?

很多介绍 HTTPS 的文章一上来就给你讲实现细节。个人觉得:这是不好的做法。早在2009年开博的时候,发过一篇《学习技术的三部曲:WHAT、HOW、WHY》,其中谈到“WHY 型问题”的重要性。一上来就给你讲协议细节,你充其量只能知道 WHAT 和 HOW,无法理解 WHY。俺在前一个章节讲了“背景知识”,在这个章节讲了“需求”,这就有助于你理解:当初为什么要设计成这样?——这就是 WHY 型的问题。

兼容性

因为是先有 HTTP 再有 HTTPS。所以,HTTPS 的设计者肯定要考虑到对原有 HTTP 的兼容性。

这里所说的兼容性包括很多方面。比如已有的 Web 应用要尽可能无缝地迁移到 HTTPS;比如对浏览器厂商而言,改动要尽可能小;……

基于“兼容性”方面的考虑,很容易得出如下几个结论:

1. HTTPS 还是要基于 TCP 来传输

(如果改为 UDP 作传输层,无论是 Web 服务端还是浏览器客户端,都要大改,动静太大了)

2. 单独使用一个新的协议,把 HTTP 协议包裹起来

(所谓的“HTTP over SSL”,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装。HTTP 协议原有的 GET、POST 之类的机制,基本上原封不动)

打个比方:如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。

可扩展性

前面说了,HTTPS 相当于是“HTTP over SSL”。

如果 SSL 这个协议在“可扩展性”方面的设计足够牛逼,那么它除了能跟 HTTP 搭配,还能够跟其它的应用层协议搭配。岂不美哉?

现在看来,当初设计 SSL 的人确实比较牛。如今的 SSL/TLS 可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet)搭配,来强化这些应用层协议的安全性。

接着刚才打的比方:如果把 SSL/TLS 视作一根用来加固的金属管,它不仅可以用来加固输水的管道,还可以用来加固输煤气的管道。

保密性(防泄密)

HTTPS 需要做到足够好的保密性。

说到保密性,首先要能够对抗嗅探(行话叫 Sniffer)。所谓的“嗅探”,通俗而言就是监视你的网络传输流量。如果你使用明文的 HTTP 上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。

嗅探是最低级的攻击手法。除了嗅探,HTTPS 还需要能对抗其它一些稍微高级的攻击手法——比如“重放攻击”(后面讲协议原理的时候,会再聊)。

完整性(防篡改)

除了“保密性”,还有一个同样重要的目标是“确保完整性”。关于“完整性”这个概念,在之前的博文《扫盲文件完整性校验——关于散列值和数字签名》中大致提过。健忘的同学再去温习一下。

在发明 HTTPS 之前,由于 HTTP 是明文的,不但容易被嗅探,还容易被篡改。

举个例子:

比如咱们天朝的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某网站(本来是没有广告的),竟然会跳出很多中国电信的广告。为啥会这样捏?因为你的网络流量需要经过 ISP 的线路才能到达公网。如果你使用的是明文的 HTTP,ISP 很容易就可以在你访问的页面中植入广告。

所以,当初设计 HTTPS 的时候,还有一个需求是“确保 HTTP 协议的内容不被篡改”。

真实性(防假冒)

在谈到 HTTPS 的需求时,“真实性”经常被忽略。其实“真实性”的重要程度不亚于前面的“保密性”和“完整性”。

举个例子:

你因为使用网银,需要访问该网银的 Web 站点。那么,你如何确保你访问的网站确实是你想访问的网站?(这话有点绕口令)

有些天真的同学会说:通过看网址里面的域名,来确保。为啥说这样的同学是“天真的”?因为 DNS 系统本身是不可靠的(尤其是在设计 SSL 的那个年代,连 DNSSEC 都还没发明)。由于 DNS 的不可靠(存在“域名欺骗”和“域名劫持”),你看到的网址里面的域名【未必】是真实滴!

(不了解“域名欺骗”和“域名劫持”的同学,可以参见俺之前写的《扫盲 DNS 原理,兼谈“域名劫持”和“域名欺骗/域名污染”》)

所以,HTTPS 协议必须有某种机制来确保“真实性”的需求(至于如何确保,后面会细聊)。

性能

再来说最后一个需求——性能。

引入 HTTPS 之后,【不能】导致性能变得太差。否则的话,谁还愿意用?

为了确保性能,SSL 的设计者至少要考虑如下几点:

  1. 如何选择加密算法(“对称”or“非对称”)?
  2. 如何兼顾 HTTP 采用的“短连接”TCP 方式?

(SSL 是在1995年之前开始设计的,那时候的 HTTP 版本还是 1.0,默认使用的是“短连接”的 TCP 方式——默认不启用 Keep-Alive)

小结

以上就是设计 SSL 协议时,必须兼顾的各种需求。后面聊协议的实现时,俺会拿 SSL 协议的特点跟前面的需求作对照。看看这些需求是如何一一满足滴。

设计 HTTPS 协议的主要难点

设计 HTTPS 这个协议,有好几个难点。俺个人认为最大的难点在于“密钥交换”。

在传统的密码学场景中,假如张三要跟李四建立一个加密通讯的渠道,双方事先要约定好使用哪种加密算法?同时也要约定好使用的密钥是啥?在这个场景中,加密算法的【类型】让旁人知道,没太大关系。但是密钥【千万不能】让旁人知道。一旦旁人知道了密钥,自然就可以破解通讯的密文,得到明文。

好,现在回到 HTTPS 的场景。

当你访问某个公网的网站,你的浏览器和网站的服务器之间,如果要建立加密通讯,必然要商量好双方使用啥算法,啥密钥。——在网络通讯术语中,这个过程称之为“握手/handshake”。在握手阶段,因为加密方式还没有协商好,所以握手阶段的通讯必定是【明文】滴!既然是明文,自然有可能被第三方偷窥到。然后,还要考虑到双方之间隔着一个互联网,什么样的偷窥都可能发生。

因此,在握手的过程中,如何做到安全地交换密钥信息,而不让周围的第三方看到。这就是设计 HTTPS 最大的难点。

结尾

本文费这么多口水,来介绍 HTTPS 的“需求”和“难点”,为啥捏?因为只有当你了解这些,后面介绍 SSL/TLS 的实现原理时,你才能理解——当初为啥要把协议设计成这个样子。

来源:http://program-think.blogspot.com/2014/11/https-ssl-tls-1.html

Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程。也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB。往下看我们告诉你为什么这样做。

为什么要用MariaDB来代替MySQL

MariaDB是MySQL社区开发的分支,也是一个增强型的替代品。它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样。自从Oracle买下了MySQL,它就不再自由开源了,但是 MariaDB仍然自由开源。一些如谷歌、维基、LinkedIn、Mozilla等的顶级的网站已经迁移到MariaDB了。它的优势在哪里:

  • 向后兼容MySQL
  • 永远开源
  • 由MySQL缔造者的维护
  • 更尖端的功能
  • 更多的存储引擎
  • 大型的网站已经转向MariaDB

现在,让我们迁移到MariaDB吧!

Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

让我们创建一个叫linoxidedb用于测试的示例数据库。

使用以下命令用root账户登陆MySQL:

$ mysql -u root -p

输入mysql 的 root 用户密码后,你将进入mysql的命令行

创建测试数据库:

在mysql命令行输入以下命令以创建测试数据库。

mysql> create database linoxidedb;

查看可用的数据库,输入以下命令:

mysql> show databases;
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

如你所见,算上刚刚新建的linoxidedb我们一共有5个数据库。

mysql> quit

现在,我们就将刚创建的数据库从MySQL迁移到MariaDB。

注:使用CentOS这类基于fedora的linux发行版没有必要参考这篇教程,因为它们在安装MariaDB时会自动代替MySQL,无需备份现有的数据库,你只需要更新mysql就可以得到mariadb。

1. 备份现有的数据库

我们第一个重要的步骤就是备份现有的数据库。我们在终端(不是MySQL命令行)里输入如下命令来完成备份。

$ mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql

哇哦!我们遇到了点麻烦。别担心我们可以搞定。

$ mysqldump: Error: Binlogging on server not active

mysqldump error

为了修复这个错误,我们需要对my.cnf文件做一些小改动。

编辑my.cnf文件:

$ sudo nano /etc/mysql/my.cnf

在[mysqld]部分添加如下参数。

log-bin=mysql-bin

Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

好了,在保存并关闭文件后,我们需要重启一下mysql服务。运行以下命令重启:

$ sudo /etc/init.d/mysql restart

现在,重新运行mysqldump命令来备份所有的数据库。

$ mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

dumping databases

上面的命令将会备份所有的数据库,把它们存储在当前目录下的backupdatabase.sql文件中。

2. 卸载MySQL

首先,我们得把my.cnf文件挪到安全的地方去

:在你卸载MySQL包的时候不会自动删除my.cnf文件,我们这样做只是以防万一。在MariaDB安装时,它会询问我们是保持现存的my.cnf文件,还是使用包中自带的版本(即新my.cnf文件)。

在shell或终端中输入如下命令来备份my.cnf文件:

$ sudo cp /etc/mysql/my.cnf my.cnf.bak

运行命令来终止mysql服务:

$ sudo /etc/init.d/mysql stop

然后移除mysql包:

$ sudo apt-get remove mysql-server mysql-client
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

3. 安装MariaDB

这是在Ubuntu系统中安装MariaDB的命令:

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
# sudo add-apt-repository 'deb http://mirror.mephi.ru/mariadb/repo/5.5/ubuntu trusty main'
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

键值导入并且添加完仓库后,你就可以用以下命令安装MariaDB了:

$ sudo apt-get update
$ sudo apt-get install mariadb-server
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

我们应该还没忘记在MariaDB安装时,它会问你是使用现有的my.cnf文件,还是包中自带的版本。你可以使用以前的my.cnf也可以用包中自带的。即使你想直接使用新的my.cnf文件,你依然可以晚点时候将以前的备份内容还原进去(别忘了我们已经将它复制到安全的地方了)。所以,我们直接选择了默认的选项“N”。如果需要安装其他版本,请参考MariaDB官方仓库

4. 恢复配置文件

想要将my.cnf.bak中的内容恢复到my.cnf,在终端中输入以下命令。由于my.cnf.bak文件在当前目录下,所以我们只要简单的执行以下命令即可:

$ sudo cp my.cnf.bak /etc/mysql/my.cnf

5. 导入数据库

最后,让我们把我们之前创建的数据库导入吧!运行一下命令即可完成导入。

$ mysql -u root -p < backupdatabase.sql

就这样,我们已成功将之前的数据库导入了进来。

来,让我们登录一下mysql命令行,检查一下数据库是否真的已经导入了:

$ mysql -u root -p
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

为了检查数据库是否被迁移到MariaDB,请在MariaDB命令行中输入“show databases;”不用输入(“”),如下:

mariaDB> show databases;
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
Linux:Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

如你所见,linoxidedb及所有的数据库都已经成功的被迁移了。

总结

最后,我们已经成功地从MySQL迁移到了MariaDB数据库管理系统。MariaDB比MySQL好,虽然在性能方面MySQL还是比它更快,但是MariaDB的优点在于它额外的特性与支持的许可证。这能够确保它自由开源(FOSS),并永久自由开源,相比之下MySQL还有许多额外的插件,有些不能自由使用代码、有些没有公开的开发进程、有些在不久的将来会变的不再自由开源。如果你有任何的问题、评论、反馈给我们,不要犹豫直接在评论区留下你的看法。谢谢观看本教程,希望你能喜欢MariaDB。


via: http://linoxide.com/linux-how-to/migrate-mysql-mariadb-linux/

作者:Arun Pyasi 译者:martin2011qi 校对:wxy

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

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

Linux:在Ubuntu 14.04 中修复无法清空回收站的问题

Linux:在Ubuntu 14.04 中修复无法清空回收站的问题
Linux:在Ubuntu 14.04 中修复无法清空回收站的问题

问题

我遇到了无法在Ubuntu 14.04中清空回收站的问题。我右键回收站图标并选择清空回收站,就像我一直做的那样。我看到进度条显示删除文件中过了一段时间。但是它停止了,并且Nautilus文件管理也停止了。我不得不在终端中停止了它。

但是这很痛苦因为文件还在垃圾箱中。并且我反复尝试清空后窗口都冻结了。

方案

老实说,我不知道什么导致了这个问题。但是我有一个解决方案如果你在Ubuntu 14.04或者14.10遇到这个问题的话。

打开终端并使用下面的命令:

sudo rm -rf ~/.local/share/Trash/*

这里注意你的输入。你使用超级管理员权限来运行删除命令。我相信你不会删除其他文件或者目录。

上面的命令会删除回收站目录下的所有文件。换句话说,这是用命令清空垃圾箱。使用完上面的命令后,你会看到垃圾箱已经清空了。如果你清空了所有文件,你不应该在看到Nautilus崩溃的问题了。

对你有用么?

我希望这篇贴士对你有用,今后你也不会在Ubuntu或者其他发行版中再遇到相同的问题。如果你遇到任何问题请让我知道。


via: http://itsfoss.com/fix-empty-trash-ubuntu/

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

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

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

Linux:Nmap : 不是只能用于做坏事!

如果SSH是系统管理员世界的”瑞士军刀”的话,那么Nmap就是一盒炸药。炸药很容易被误用然后将你的双脚崩掉,但是也是一个很有威力的工具,能够胜任一些看似无法完成的任务。

Linux:Nmap : 不是只能用于做坏事!
Linux:Nmap : 不是只能用于做坏事!

大多数人想到Nmap时,他们想到的是扫描服务器,查找开放端口来实施攻击。然而,在过去的这些年中,这样的超能力在当你管理服务器或计算机遇到问题时也是非常的有用。无论是你试图找出在你的网络上有哪些类型的服务器使用了指定的IP地址,或者尝试锁定一个新的NAS设备,以及扫描网络等,都会非常有用。

下图显示了我的QNAP NAS的网络扫描结果。我使用该设备的唯一目的是为了NFS和SMB文件共享,但是你可以看到,它包含了一大堆大开大敞的端口。如果没有Nmap,很难发现机器到底在运行着什么玩意儿。

Linux:Nmap : 不是只能用于做坏事!
Linux:Nmap : 不是只能用于做坏事!

网络扫描

另外一个可能你没想到的用途是用它来扫描一个网络。你甚至根本不需要root的访问权限,而且你也可以非常容易地来指定你想要扫描的网络地址块,例如输入:

nmap 192.168.1.0/24

上述命令会扫描我的局域网中全部的254个可用的IP地址,让我可以知道那个是可以Ping的,以及那些端口是开放的。如果你刚刚在网络上添加一个新的硬件,但是不知道它通过DHCP获取的IP地址是什么,那么此时Nmap就是无价之宝。例如,上述命令在我的网络中揭示了这个问题:

Nmap scan report for TIVO-8480001903CCDDB.brainofshawn.com (192.168.1.220)
Host is up (0.0083s latency).
Not shown: 995 filtered ports
PORT     STATE  SERVICE
80/tcp   open   http
443/tcp  open   https
2190/tcp open   tivoconnect
2191/tcp open   tvbus
9080/tcp closed glrpc

它不仅显示了新的Tivo 设备,而且还告诉我那些端口是开放的。由于它的可靠性、可用性以及“黑边帽子”的能力,Nmap获得了本月的 <<编辑推荐>>奖。这不是一个新的程序,但是如果你是一个linux用户的话,你应该玩玩它。


via: http://www.linuxjournal.com/content/nmap%E2%80%94not-just-evil

作者:Shawn Powers 译者:theo-l 校对:wxy

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

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

Linux:重走LFS之路:(一) 环境准备

自从大学二年级的寒假没日没夜地用了整整两个月的时间编译了LFS之后,就再也没做过。这两天在Linux中国的微信公众号上看到LFS都升级到7.7了,故而觉得是时候重新再编译一遍的时候了。

诚然LFS是Linux学习和深入理解的终南捷径,每个真心希望了解Linux的人都建议去做一遍LFS,因为每做一次就会获得新的知识,对Linux有更多更深入的理解。

Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备

(题图来自: techradar.com)

貌似LFS官网(http://www.linuxfromscratch.org)不再提供LiveCD了,好吧好吧,那我就从虚拟机装个宿主系统,依然是Debian。说句题外话,对于自己用得惯的OS,真心应该最小安装到虚拟机一份,再有需要的时候,直接复制一下改个名,省心又省力。

此时我把Debian更新到了最新,并且为了使用显卡驱动让它能够在我的显示器上全屏显示,就用tasksel装上了Debian desktop environment。

Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备

我在自己的Home目录中新建了一个目录lfs,用于整个工程的存储。这时候我在~/lfs/中新建了一个checkscript目录,用于存储事前的环境检查脚本。

我们来编写第一个检查脚本,这个脚本会检查各个需要的工具及内核版本号,看看是否符合lfs7.7的列表要求,如果没有,会报not found。

cd ~/lfs/checkscript
vi check_env.sh

 

#/bin/sh
export LC_ALL=C
bash –version | head -n1 | cut -d” ” -f2-4
echo “/bin/sh -> `readlink -f /bin/sh`”
echo -n “Binutils: “; ld –version | head -n1 | cut -d” ” -f3-
bison –version | head -n1
if [ -h /usr/bin/yacc ]; then
echo “/usr/bin/yacc -> `readlink -f /usr/bin/yacc`”;
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc –version | head -n1`
else
echo “yacc not found”
fi
bzip2 –version 2>&1 < /dev/null | head -n1 | cut -d” ” -f1,6-
echo -n “Coreutils: “; chown –version | head -n1 | cut -d”)” -f2
diff –version | head -n1
find –version | head -n1
gawk –version | head -n1
if [ -h /usr/bin/awk ]; then
echo “/usr/bin/awk -> `readlink -f /usr/bin/awk`”;
elif [ -x /usr/bin/awk ]; then
echo yacc is `/usr/bin/awk –version | head -n1`
else
echo “awk not found”
fi
gcc –version | head -n1
g++ –version | head -n1
ldd –version | head -n1 | cut -d” ” -f2- # glibc version
grep –version | head -n1
gzip –version | head -n1
cat /proc/version
m4 –version | head -n1
make –version | head -n1
patch –version | head -n1
echo Perl `perl -V:version`
sed –version | head -n1
tar –version | head -n1
makeinfo –version | head -n1
xz –version | head -n1
echo ‘main(){}’ > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]; then
echo “g++ compilation OK”;
else
echo “g++ compilation failed”;
fi
rm -f dummy.c dummy
Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备

此时的脚本是不能直接执行的,需要加执行权限,也就是x权限

chmod +x check_env.sh

现在可以执行脚本了

Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备

从检查结果中可以看到,我的Debian太干净了,缺了好几样东西,bison gawk g++,所以我用aptitude装上他们就好了。

Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备

此时环境检查没有报错信息了,需要的工具也已经正确显示了版本号。

下面检查需要用到的库,一共有三个,gmp, mpfr和mpc

cd ~/lfs/checkscript
vi check_lib.sh

 

#!/bin/bash
for lib in lib{gmp,mpfr,mpc}.la; do
echo $lib: $(
if find /usr/lib* -name $lib | grep -q $lib; then
:;
else
echo not;
fi
) found
done
unset lib
Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备
Linux:重走LFS之路:(一) 环境准备

从检查结果来看,三个库目前都不具备,不过没关系,现在还用不到这三个货,先把脚本写好。

作者简介:

郝平睿 – Pure How

京东集团安全应急响应中心 安全研发工程师

非著名相声演员

过了期的旧黑客

能写出Segmentation right的半调子程序员

常年游走于曲艺、象棋、园艺、饲养、安全、研发等一系列没正事的边缘

E-mail :  haopingrui@haopingrui.cn 

来源:http://www.haopingrui.cn/?p=52

Linux:Fedora GNOME 的常用快捷键

在Fedora中,为了获得最好的GNOME桌面体验,你需要了解并掌握一些驾驭系统的快捷键。

这篇文章将列举我们日常使用中使用频率最高的快捷键。

Linux:Fedora GNOME 的常用快捷键
Linux:Fedora GNOME 的常用快捷键

1. Super键

GNOME Keyboard Shortcuts - The Super Key.

GNOME 快捷键 – super键

“super”键是如今驾驭操作系统的好朋友。

在传统的笔记本电脑中“super”键坐落于最后一列就在“alt”键的旁边(就是徽标键)。

当你按下“super”键后“activities”总览图就会出现,你就能看见所有打开应用的缩略图。

同时按下 “ALT” 和”F1″一样可以达到这样的效果。

2. 如何快速执行一条命令

GNOME Run Command.

GNOME 运行某命令

如果你需要快速的执行一条指令,你可以按下”ALT”+”F2″,这样就会出现指令运行对话框了。

现在你就可以在窗口中输入你想要执行的指令了,回车执行。

3. 快速切换到另一个打开的应用

TAB Through Applications.

使用TAB在应用中切换

就像在微软的Windows下一样你可以使用”ALT”和”TAB” 的组合键在应用程序之间切换。

在一些键盘上tab键上画的是这样的|<- ->|,而有些则是简单的”TAB”字母。

GNOME应用切换器随着你的切换,显示简单的图标和应用的名字。

如果你按下”shift”+”tab”将以反序切换应用。

4. 在同一应用中快速切换不同的窗口

Switch Windows In The Same Application.

在应用中切换不同窗口

如果你像我一样经常打开五六个Firefox。

你已经知道通过”Alt”+”Tab”实现应用间的切换。有两种方法可以在同一个应用中所有打开的窗口中切换。

第一种是按”Alt”+”Tab”让选框停留在你所要切换窗口的应用图标上。短暂的停留等到下拉窗口出现你就能用鼠标选择窗口了。

第二种也是比较推荐的方式是按”Alt”+”Tab”让选框停留在你所要切换窗口的应用图标上,然后按”super”+”`”在此应用打开的窗口间切换。

注释:”`”就是tab键上面的那个键。无论你使用的那种键盘排布,用于切换的键一直都是tab上面的那个键,所以也有可能不是”`”键。

如果你的手很灵活(或者是我称之为忍者手的)那你也可以同时按”shift”, “`”和”super”键来反向切换窗口。

5. 切换键盘焦点

Switch Keyboard Focus.

切换键盘焦点

这个键盘快捷键并不是必须掌握的,但是还是最好掌握。

如若你想将输入的焦点放到搜索栏或者一个应用窗口上,你可以同时按下”CTRL”, “ALT”和”TAB”,这样就会出现一个让你选择切换区域的列表。

然后就可以按方向键做出选择了。

6. 显示所有应用程序列表

Show All Applications.

显示所有应用程序

如果恰巧最后一个应用就是你想要找的,那么这样做真的会帮你省很多时间。

按”super”和”A”键来快速切换到这个包含你系统上所有应用的列表上。

7. 切换工作区

Linux:Fedora GNOME 的常用快捷键
Linux:Fedora GNOME 的常用快捷键

切换工作区

如果你已经使用linux有一段时间了,那么这种多工作区切换的工作方式一定深得你心了吧。

举个例子,你在第一个工作区里做开发,第二个之中浏览网页,而把你邮件的客户端开在第三个工作区中。

工作区切换你可以使用”super”+”Page Up” (向上翻页)键朝一个方向切,也可以按”super”+”Page Down” (向下翻页)键朝另一个方向切。

还有一个比较麻烦的备选方案就是按”super”显示打开的应用,然后在屏幕的右侧选择你所要切换的工作区。

8. 将一些项目移至一个新的工作区

Move Application To Another Workspace.

将应用移至另一个工作区

如果这个工作区已经被搞得杂乱无章了,没准你会想将手头的应用转到一个全新的工作区,请按组合键”super”, “shift”和”page up”或”super”, “shift”和”page down” 键。

备选方案按”super”键,然后在应用列表中找到你想要移动的应用拖到屏幕右侧的工作区。

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

Linux:C语言数据类型是如何被大多数计算机系统所支持?

问题:

在读K&R版的The C Programming Language一书时,我在[介绍,第3页]看到这样一条说明:

因为C语言提供的数据类型和控制结构可以直接被大部分计算机系统所支持,所以在实现自包含程序时所需要的运行库文件一般很小。

这段黑体说明了什么?能否找到一个例子来说明C语言中的某种数据类型或控制结构不被某种计算机系统直接支持呢?

Linux:C语言数据类型是如何被大多数计算机系统所支持?
Linux:C语言数据类型是如何被大多数计算机系统所支持?

回答:

事实上,C语言中确实有不被直接支持的数据类型。

在许多嵌入式系统中,硬件上并没有浮点运算单元。因此,如果你写出下面的代码:

float x = 1.0f, y = 2.0f;
return x + y;

可能会被转化成下面这种形式:

unsigned x = 0x3f800000, y = 0x40000000;
return _float_add(x, y);

然后编译器或标准库必须提供’floatadd()’的具体实现,这会占用嵌入式系统的内存空间。依此去计算代码在某个微型系统(译者注:也就是指微型嵌入式系统)的实际字节数,也会发现有所增加。

另一个常见的例子是64位整型数(C语言标准中’long long’类型是1999年之后才出现的),这种类型在32位系统上也不能直接使用。古董级的SPARC系统则不支持整型乘法,所以在运行时必须提供乘法的实现。当然,还有一些其它例子。

其它语言

相比起来,其它编程语言有更加复杂的基本类型。

比如,Lisp中的symbol需要大量的运行时实现支持,就像Lua中的table、Python中的string、Fortran中的array,等等。在C语言中等价的类型通常要么不属于标准库(C语言没有标准symbol或table),要么更加简单,而且并不需要那么多的运行时支持(C语言中的array基本上就是指针,以NULL结尾的字符串实现起来也很简单)。

控制结构

异常处理是C语言中没有的一种控制结构。非局部的退出只有’setjmp()’和’longjmp()’两种,只能提供保存和恢复某些部分的处理器状态。相比之下,C++运行时环境必须先遍历函数调用栈,然后调用析构函数和异常处理函数。


via:stackoverflow

作者:Dietrich Epp 译者:KayGuoWhu 校对:wxy

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

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

Linux:如何使用btsync通过网络实现计算机间的文件共享

如果你是那种使用各式设备在网上工作的人,我相信你肯定需要一个在不同设备间同步文件及目录的方法,至少是非常渴望有这种功能。

BitTorrent Sync简称btsync,是一个基于BitTorrent(著名P2P文件分享协议)的免费跨平台同步工具。与传统BitTorrent客户端不同的是,btsync可以在不同操作系统及设备之间加密数据传输和基于自动生成的密钥来授予访问共享文件的权限。

更具体点,当你想要通过btsync共享一些文件或文件夹,相应的读/写密钥(所谓的密码)就创建好了。这些密钥可以通过HTTPS链接,电子邮件,二维码等在不同的设备间共享传递。一旦两台设备通过一个密钥配对成功,其所对应的内容将会直接在其间同步。如果没有事先设置,传输将不会有文件大小和速度的限制。你可以在btsync中创建账号,这样你可以通过 web 界面来创建和管理通过网络分享的密钥和文件。

Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

BitTorrent Sync可以在许多的操作系统上运行,包括Linux,MacOS X,Windows,在 AndroidiOS上也可以使用。在这里,我们将教你在Linux环境(一台家用服务器)与Windows环境(一台笔记本电脑)之间如何使用BitTorrent Sync来同步文件。

Linux下安装btsync

BitTorrent Sync可以在项目主页直接下载。由于Windows版本的BitTorrent Syn安装起来十分简单,所以我们假设笔记本上已经安装了。我们把焦点放到Linux服务器上的安装和配置。

在下载页面中选择你的系统架构,右键相应链接,复制连接地址(或者类似的功能,不同浏览器可能不同),将链接粘贴到在终端中用wget下载,如下:

64位Linux:

# wget http://download.getsyncapp.com/endpoint/btsync/os/linux-x64/track/stable

32位Linux:

# wget http://download.getsyncapp.com/endpoint/btsync/os/linux-i386/track/stable
Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

下载完成后,把包中内容解压到你专门创建的目录中,为了完成这些:

# cd /usr/local/bin
# mkdir btsync
# tar xzf stable -C btsync
Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

现在你可以选择将/usr/local/bin/btsync添加到环境变量PATH中去。

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

或者在该文件夹中运行btsync的二进制文件。我们推荐使用第一种方式,虽需要少量的输入但更容易记忆。

配置btsync

btsync带有一个内置的网络服务器,用作其管理接口。想要使用这个接口你需要创建一个配置文件。你可以使用以下命令来创建:

# btsync --dump-sample-config > btsync.config

然后使用你最常用的编辑器对btsync.config文件的(webui部分)作以下修改

"listen" : "0.0.0.0:8888",
"login" : "yourusername",
"password" : "yourpassword"

你可以选择任何用户名和密码。

Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

如果你将来想要优化一下它的配置,可以看一下 /usr/local/bin/btsync 目录下的 README 文件,不过现在我们先继续下面的步骤。

第一次运行btsync

作为一个系统的最高执行者我们需要依赖日志文件!所以在我们启动btsync之前,我们将先为btsync创建一个日志文件。

# touch /var/log/btsync.log

最后,让我们启动btsync:

# btsync --config /usr/local/bin/btsync/btsync.config --log /var/log/btsync.log

现在在你的浏览器中输入正在运行的btsync所监听的服务器IP地址和端口(我这是192.168.0.15:8888),同意其隐私政策,条款和最终用户许可协议:

Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

这样页面就会转到你安装的btsync主页:

Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

点击添加文件夹并在你的文件系统中选择一个你想要分享的目录,在我们的例子中,我们使用的是/btsync:

Linux:如何使用btsync通过网络实现计算机间的文件共享
Linux:如何使用btsync通过网络实现计算机间的文件共享

现在这样就够了。在运行接下来的步骤之前,请先在Windows主机(或你想使用的其他Linux设备)上安装BitTorrent Sync。

btsync分享文件

这个视频(需要翻墙)展示了如何在安装Windows8的电脑[192.168.0.106]上分享现有的文件夹。在添加好想要同步的文件夹后,你会得到它的密钥,通过“Enter a key or link”菜单(上面的图已经展示过了)添加到你安装到的Linux机器上,并开始同步。

现在用别的设备试试吧;找一个想要分享的文件夹或是一些文件,并通过Linux服务器的网络接口将密钥导入到你安装的“中央”btsync中。

以常规用户开机自动运行btsync

你们可能注意到了,视频中在同步文件时是使用’root’组的用户创建/btsync目录的。那是因为我们使用超级用户手动启动BitTorrent Sync的原因。在通常情况下,你会希望它开机自动使用无权限用户(www_data或是专门为此创建的账户,例如btsync)启动。

所以,我们创建了一个叫做btsync的用户,并在/etc/rc.local文件(exit 0 这一行前)添加如下字段:

sudo -u btsync /usr/local/bin/btsync/btsync --config /usr/local/bin/btsync/btsync.config --log /var/log/btsync.log

最后,创建pid文件:

# touch /usr/local/bin/btsync/.sync/sync.pid

并递归更改 /usr/local/bin/btsync的所属用户:

# chown -R btsync:root /usr/local/bin/btsync

现在重启试试,看看btsync是否正在由预期中的用户运行:

基于你选择的发行版不同,你可能找到不同的方式来开机自启动btsync。在本教程中,我选择rc.local的方式是因为它在不同发行版中都可使用。

尾注

如你所见,BitTorrent Sync对你而言几乎就像一个无服务器的Dropbox。我说“几乎”的原因是:当你在局域网内同步数据时,同步在两个设备之间直接进行。然而如果你想要跨网段同步数据,并且你的设备可能要穿过防火墙的限制来配对,那就只能通过一个提供BitTorrent的第三方中继服务器来完成同步传输。虽然声称传输经过 AES加密,你还是可能会遇到不想发生的状况。为了你的隐私着想,务必在你共享的每个文件夹中关掉中继/跟踪选项。

希望这些对你有用!分享愉快!


via: http://xmodulo.com/share-files-between-computers-over-network.html

作者:Gabriel Cánepa 译者:martin2011qi 校对:校对者ID

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

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

Linux:重走LFS之路:(二) 存储设备准备

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

(题图来自: techradar.com)

LFS的编译需要单独有一块存储,条件不好的就单独划个分区,条件好的就再挂块硬盘,实在不行就新建个目录来做这件事好了,只不过这样是没法引导起来,只能chroot之后当编译环境用。

我这就以VirtualBox新建一块SATA硬盘,然后接入虚拟机,分区,挂载为例来记录这个过程。

打开VirtualBox,左侧列表中选择我用来做LFS的虚拟机PureDebian-LFS。

单击设置,弹出的对话框中选择存储这一项,从右侧点击”控制器:SATA”,同一行会出现两个小图标,一个是光盘,一个是硬盘。

点击硬盘图标,在弹出的对话框中选择”创建新的虚拟盘(N)”

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

在出现的”创建虚拟硬盘”对话框中,我选择了”VDI(VirtualBox 磁盘映像)”,这是VirtualBox的默认磁盘格式。

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

点击下一步,进入”存储在物理硬盘上”这一步,可以选择存储方式,建议选择动态分配,这样的好处就是用到了更大空间才会自动扩展,不会一直占用那么大物理硬盘空间,同时创建时间会大大缩短。

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

再次单击下一步,进入”文件位置和大小”选项。这里需要选择新增虚拟硬盘的位置,名称和最大容量。

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

新硬盘参数配置完成,点击”创建”按钮,VirtualBox就会按照刚才指定的参数来创建一块新的虚拟硬盘,并自动顺序添加到虚拟机的硬盘列表中。

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

此时就可以点确定按钮,然后启动虚拟机了。

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

使用ls -l /dev | grep sd来查看虚拟机所有的硬盘设备,显然sda是有分区的,那么新硬盘应该就是sdb。接下来理所当然应该是新硬盘的分区工作,诚然fdisk无论在开源还是闭源世界都有着无可替代的地位,不过在命令行中我们现在有了更好的硬盘工具来帮助我们分区——cfdisk。

sudo cfdisk /dev/sdb

我们通过参数来指定了cfdisk来操作的设备

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

文字图形工具还是比命令行看起来舒服一些,上面很清楚得显示着硬盘信息,比如:我们在操作一块名字叫做/dev/sdb的存储设备,它的容量是21.4GB。

此时我们可以通过方向键来移动光标所覆盖的选项来进行操作,下面我们来新建分区。方便起见,除了/boot分区我会分128M来存放grub,还有1GB的swap分区,其他全部分为一个区,分区上不再区分其他目录。

选择”New”来新建一个分区。

光标默认覆盖[Primary],提示”Create a new primary partition”,直接敲回车创建一个新的主分区。

此时提示Size (in MB),我把数字改成128来表示我要创建的分区大小,单位是MB,此时我们要创建的是一个引导分区,就放一个grub,所以128足够了,所以按下回车进入下一步。

光标默认覆盖[Beginning]提示”Add partition at beginning of free space”,在空闲空间的起始位置来添加一个分区,直接回车进入下一步。

这一步操作比较多,需要激活引导,选择分区类型和写入更改。

光标默认覆盖[ Bootable ],先回车一下,在上方新建的分区这一栏Flags字段会出现Boot字样即可。

按方向键向右移动光标到[ Type ],此时提示”Change the filesystem type (DOS, Linux OS/2 and so on)”,更改文件系统类型。现在新建的分区那一栏FS Type一项默认就是Linux,所以不用更改,等下建立swap交换分区的时候会用到。

继续向右移动光标到Write,提示”Write partition table to disk (this might destroy data)”,向硬盘写入分区表(这可能会破坏数据)。此时我们不着急写入,因为还有别的分区没有划分,等我们都划分完成,再一起写入。

方向键按向下,光标选中”Free Space”,我们来建立交换分区。基本上都是重复刚才的步骤,只不过大小改成1024,不需要置Boot标识。

这里需要选择[ Type ]来改一下类型,选中回车后进入类型选择菜单,编号默认输入就是82,也就是”Linux swap / Solaris”,直接回车即可。此时回到主菜单,可以看到第二个分区sdb2的”FS Type”一项改成了”Linux swap / Solaris”。

按方向键向下,选中Free Space,重复sdb1的创建步骤,类型选择[Logical],大小默认最大即可,不需要更改,创建完成后Name栏会显示sdb5。

Linux:重走LFS之路:(二) 存储设备准备
Linux:重走LFS之路:(二) 存储设备准备

关于为什么逻辑分区要从5开始排号……

科普一下,Boot Sector也就是硬盘的第一个扇区,它由MBR(Master Boot Record), DPT(Disk Partition Table) 和 Boot Record ID三部分组成。

MBR又称为主引导记录,占用Boot Sector的前446个字节(0~0x1BD),存放系统主引导程序(它负责从活动分区中装载并且运行系统引导程序)。

DPT即主分区表占用64个字节(0x1BE~0x1FD),记录磁盘的基本分区信息。主分区表分为四个分区项,每项16个字节,分别记录每个主分区的信息(因此最多可以有四个主分区)。

Boot Record ID即引导区标记占用两个字节(0x1FE~0x1FF),对于合法引导区,它等于0xaa55,这是判别引导区是否合法的标志)

新的硬盘分区表建立完毕,需要写入硬盘了。横移光标覆盖[ Write ],回车,会出现一个问题”Are you sure you want to write the partition table to disk? (yes or no):”,你确定要把分区表写入磁盘咩?需要回答yes或者no,同时下方会出现一个警告”Warning!!  This may destroy data on your disk!”,警告!!这可能会损坏你硬盘上的数据!

事实上不是可能,重新写入分区表一定会损失硬盘数据。不过没关系,反正是块空硬盘,敲入yes回车就好了,提示”Wrote partition table to disk”,分区表已经被写入磁盘。至此,分区工作完成,光标默认覆盖[ Bootable ],右移到[ Quit ]回车,退出cfdisk。LFS需要的独立存储设备与分区准备完毕。

来源:http://www.haopingrui.cn/?p=62