Skip to content Skip to main navigation Skip to footer

Linux

Linux:如何配置使用 HTTP 严格传输安全(HSTS)

HTTP 严格传输安全(HSTS)是一种安全功能,web 服务器通过它来告诉浏览器仅用 HTTPS 来与之通讯,而不是使用 HTTP。本文会说明如何在 Apache2、Nginx 和 Lighttpd 上如何启用 HSTS。在主流的 web 服务器上测试通过: Nginx 1.1.19、 Lighttpd 1.4.28 和 Apache 2.2.22 ,环境为 Ubuntu 12.04、 Debian 6 & 7 和 CentOS 6,只需要调整部分参数就可以工作在其它的发行版上。

Linux:如何配置使用 HTTP 严格传输安全(HSTS)
Linux:如何配置使用 HTTP 严格传输安全(HSTS)

什么是 HTTP 严格传输安全?

引用自 Mozilla Developer Network

如果一个 web 服务器支持 HTTP 访问,并将其重定向到 HTTPS 访问的话,那么访问者在重定向前的初始会话是非加密的。举个例子,比如访问者输入 http://www.foo.com/ 或直接输入 foo.com 时。

这就给了中间人攻击的一个机会,重定向可能会被破坏,从而定向到一个恶意站点而不是应该访问的加密页面。

HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。

以下引自维基百科

HSTS 可以用来抵御 SSL 剥离攻击。SSL 剥离攻击是中间人攻击的一种,由 Moxie Marlinspike 于2009年发明。他在当年的黑帽大会上发表的题为 “New Tricks For Defeating SSL In Practice” 的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://,达到阻止HTTPS的目的。

HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

场景举例:

当你通过一个无线路由器的免费 WiFi 访问你的网银时,很不幸的,这个免费 WiFi 也许就是由黑客的笔记本所提供的,他们会劫持你的原始请求,并将其重定向到克隆的网银站点,然后,你的所有的隐私数据都曝光在黑客眼下。

严格传输安全可以解决这个问题。如果你之前使用 HTTPS 访问过你的网银,而且网银的站点支持 HSTS,那么你的浏览器就知道应该只使用 HTTPS,无论你是否输入了 HTTPS。这样就防范了中间人劫持攻击。

注意,如果你之前没有使用 HTTPS 访问过该站点,那么 HSTS 是不奏效的。网站需要通过 HTTPS 协议告诉你的浏览器它支持 HSTS。

服务器开启 HSTS 的方法是,当客户端通过HTTPS发出请求时,在服务器返回的 HTTP 响应头中包含 Strict-Transport-Security 字段。非加密传输时设置的HSTS字段无效。

在 Apache2 中设置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so

    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数)。这个失效时间每次都会设置为两年后,所以,明天你访问时,它会设置为明天的两年后。

你只能在 HTTPS 虚拟机中设置这个头,而不能设置在 HTTP 虚拟机中。

要将你的访问者重定向到对应 HTTPS 站点,可使用如下设置:


  [...]
  ServerName example.com
  Redirect permanent / https://example.com/

如果仅仅是做重定向的话,甚至不需要设置 DocumentRoot。

你也可以使用 mod_rewrite 来做重定向,但是上述的方式更简单更安全。不过,mod_rewrite 可以重定向页面到对应的 HTTPS 页面,而上述配置则只重定向到“/”:


  [...]
  
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  

不要忘记重启 Apache。

Lighttpd

对于 lighttpd 来说很简单,将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

重启 Lighttpd。失效时间也是两年。

Nginx

Nginx 甚至更简单,将下述行添加到你的 HTTPS 配置的 server 块中:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

不要忘记重启 Nginx。

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

Linux:PHP优化杂烩

讲 PHP 优化的文章往往都是教大家如何编写高效的代码,本文打算从另一个角度来讨论问题,教大家如何配置高效的环境,如此同样能够达到优化的目的。 

Linux:PHP优化杂烩
Linux:PHP优化杂烩

pool

一个让人沮丧的消息是绝大多数 PHP 程序员都忽视了池的价值。这里所说的池可不是指数据库连接池之类的东西,而是指进程池,PHP 允许同时启动多个池,每个池使用不同的配置,各个池之间尊重彼此的主权领土完整,互不干涉内政。

pool

pool

有什么好处呢?默认情况下,PHP 只启用了一个池,所有请求均在这个池中执行。一旦某些请求出现拥堵之类的情况,那么很可能会连累整个池出现火烧赤壁的结局;如果启用多个池,那么可以把请求分门别类放到不同的池中执行,此时如果某些请求出现拥堵之类的情况,那么只会影响自己所在的池,从而控制故障的波及范围。

listen

虽然 Nginx 和 PHP 可以部署在不同的服务器上,但是实际应用中,多数人都习惯把它们部署在同一台服务器上,如此就有两个选择:一个是 TCP,另一个是 Unix Socket。

listen

listen

和 TCP 比较,Unix Socket 省略了一些诸如 TCP 三次握手之类的环节,所以相对更高效,不过需要注意的是,在使用 Unix Socket 时,因为没有 TCP 对应的可靠性保证机制,所以最好把 backlog 和 somaxconn 设置大些,否则面对高并发时会不稳定。

pm

进程管理有动态和静态之分。动态模式一般先启动少量进程,再按照请求数的多少实时调整进程数。如此的优点很明显:节省资源;当然它的缺点也很明显:一旦出现高并发请求,系统将不得不忙着 FORK 新进程,必然会影响性能。相对应的,静态模式一次性 FORK 足量的进程,之后不管请求量如何均保持不变。和动态模式相比,静态模式虽然消耗了更多的资源,但是面对高并发请求,它不需要执行高昂的 FORK。

Linux:PHP优化杂烩
Linux:PHP优化杂烩

pm

对大流量网站而言,除非服务器资源紧张,否则静态模式无疑是最佳选择。

pm.max_children

启动多少个 PHP 进程合适?在你给出自己的答案之前,不妨看看下面的文章:

一个 CPU 在某一个时刻只能处理一个请求。当请求数大于 CPU 个数时,CPU 会划分时间片,轮流执行各个请求,既然涉及多个任务的调度,那么上下文切换必然会消耗一部分性能,从这个意义上讲,进程数应该等于 CPU 个数,如此一来每个进程都对应一个专属的 CPU,可以把上下文切换损失的效率降到最低。不过这个结论仅在请求是 CPU 密集型时才是正确的,而对于一般的 Web 请求而言,多半是 IO 密集型的,此时这个结论就值得商榷了,因为数据库查询等 IO 的存在,必然会导致 CPU 有相当一部分时间处于 WAIT 状态,也就是被浪费的状态。此时如果进程数多于 CPU 个数的话,那么当发生 IO 时,CPU 就有机会切换到别的请求继续执行,虽然这会带来一定上下文切换的开销,但是总比卡在 WAIT 状态好多了。

那多少合适呢?要理清这个问题,我们除了要关注 CPU 之外,还要关注内存情况:

Linux:PHP优化杂烩
Linux:PHP优化杂烩

PHP Memory

如上所示 top 命令的结果中和内存相关的列分别是 VIRT,RES,SHR。其中 VIRT 表示的是内存占用的理论值,通常不用在意它,RES 表示的是内存占用的实际值,虽然 RES 看上去很大,但是包含着共享内存,也就是 SHR 显示的值,所以单个 PHP 进程实际独立占用的内存大小等于「RES – SHR」,一般就是 10M 上下。以此推算,理论上 1G 内存能支撑大概一百个 PHP 进程,10G 内存能大概支撑一千个 PHP 进程。当然并不能粗暴认为越多越好,最好结合 PHP 的 status 接口,通过监控活跃连接数的数量来调整。

说明:关于 Web 并发模型方面的知识建议参考范凯的「Web并发模型粗浅探讨」。

来源:http://huoding.com/2014/12/25/398

Linux:Nginx 战斗准备:优化指南

大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了。然而,如果你真的想挤压出nginx的性能,你必须更深入一些。在本指南中,我将解释Nginx的那些设置可以微调,以优化处理大量客户端时的性能。需要注意一点,这不是一个全面的微调指南。这是一个简单的预览——那些可以通过微调来提高性能设置的概述。你的情况可能不同。

Linux:Nginx 战斗准备:优化指南
Linux:Nginx 战斗准备:优化指南

基本的 (优化过的)配置

我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置。你应该能够在服务器的/etc/nginx目录中找到nginx.conf。首先,我们将谈论一些全局设置,然后按文件中的模块挨个来,谈一下哪些设置能够让你在大量客户端访问时拥有良好的性能,为什么它们会提高性能。本文的结尾有一个完整的配置文件。

高层的配置

nginx.conf文件中,Nginx中有少数的几个高级配置在模块部分之上。

user www-data;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 100000;

userpid应该按默认设置 – 我们不会更改这些内容,因为更改与否没有什么不同。

worker_processes 定义了nginx对外提供web服务时的worder进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。

worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。

Events模块

events模块中包含nginx中所有处理连接的设置。

events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}

worker_connections设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。

记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。

multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。

use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。想知道更多有关事件轮询?看下维基百科吧(注意,想了解一切的话可能需要neckbeard和操作系统的课程基础)

(值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)。

HTTP 模块

HTTP模块控制着nginx http处理的所有核心特性。因为这里只有很少的配置,所以我们只节选配置的一小部分。所有这些设置都应该在http模块中,甚至你不会特别的注意到这段设置。

http {
    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}

server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。

sendfile可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)

tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送

tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

access_log off;
error_log /var/log/nginx/error.log crit;

access_log设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。

error_log 告诉nginx只能记录严重的错误。

keepalive_timeout 10;
client_header_timeout 10;
client_body_timeout 10;
reset_timedout_connection on;
send_timeout 10;

keepalive_timeout 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。

client_header_timeout 和client_body_timeout 设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些。

reset_timeout_connection告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。

send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。

limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 100;

limit_conn为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。

limit_conn_zone设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。

include /etc/nginx/mime.types;
default_type text/html;
charset UTF-8;

include只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型。

default_type设置文件使用的默认的MIME-type。

charset设置我们的头文件中的默认的字符集。

以下两点对于性能的提升在伟大的WebMasters StackExchange中有解释。

gzip on;
gzip_disable "msie6";
# gzip_static on;
gzip_proxied any;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

gzip是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。

gzip_disable为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。

gzip_static告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。

gzip_proxied允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。

gzip_min_length设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。

gzip_comp_level设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。

gzip_type设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。

# cache informations about file descriptors, frequently accessed files
# can boost performance, but you need to test those values
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
##
# Virtual Host Configs
# aka our settings for specific servers
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

open_file_cache打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。

open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。

open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数。

open_file_cache_errors指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。

一个完整的配置

user www-data;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 100000;
events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}
http {
    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    access_log off;
    error_log /var/log/nginx/error.log crit;
    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;
    include /etc/nginx/mime.types;
    default_type text/html;
    charset UTF-8;
    gzip on;
    gzip_disable "msie6";
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    open_file_cache max=100000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

编辑完配置后,确认重启nginx使设置生效。

sudo service nginx restart

后记

就这样!你的Web服务器现在已经就绪,之前困扰你的众多访问者的问题来吧。这并不是加速网站的唯一途径,很快我会写更多介绍其他加速网站方法的文章的。

来源:http://www.oschina.net/translate/nginx-setup

Linux:重走LFS之路:(九) 基础系统编译-2

Linux:重走LFS之路:(九) 基础系统编译-2
Linux:重走LFS之路:(九) 基础系统编译-2

(题图来自: techradar.com)

GMP-6.0.0a

GMP编译有点不同,在编译选项配置阶段需要确定架构

还是先进入/src,解压并进入GMP源码目录

cd /src
tar xf gmp-6.0.0a.tar.xz
cd gmp-6.0.0

如果是x86 – 32bit,则需要在配置编译选项时前面加点东西

ABI=32 ./configure …

如果是x86_64就继续配置编译选项

./configure –prefix=/usr
–enable-cxx
–docdir=/usr/share/doc/gmp-6.0.0a

GMP是有文档需要生成的,所以这一步编译之后要再生成一下文档

make
make html

进行编译测试并生成测试日志

make check 2>&1 | tee gmp-check-log

从测试日志中找出测试通过的结果总数,共有188项测试

awk ‘/tests passed/{total+=$2} ; END{print total}’ gmp-check-log
Linux:重走LFS之路:(九) 基础系统编译-2
Linux:重走LFS之路:(九) 基础系统编译-2

测试全部通过,这时要安装两部分,一部分是GMP,还有它的文档

make install
make install-html

MPFR-3.1.2

回到/src目录,解压并进入mpfr的源码目录

cd /src
tar xf mpfr-3.1.2.tar.xz
cd mpfr-3.1.2

MPFR是需要先打补丁再配置和编译的

patch -Np1 -i ../mpfr-3.1.2-upstream_fixes-3.patch

配置编译选项

./configure –prefix=/usr
–enable-thread-safe
–docdir=/usr/share/doc/mpfr-3.1.2

依然是编译和生成文档

make
make html

检查编译

make check

安装MPFR和它的文档

make install
make install-html

MPC-1.0.2

依然是回到/src目录来解压和进入MPC源码目录

cd /src
tar zxvf mpc-1.0.2.tar.gz
cd mpc-1.0.2

配置编译选项时有点不同,需要指定文档安装目录

./configure –prefix=/usr –docdir=/usr/share/doc/mpc-1.0.2

编译和生成文档

make
make html

编译检查

make check

安装MPC和文档

make install
make install-html

GCC-4.9.2

再次编译GCC,我们至少应该编译过两遍以上了,非常熟悉

依旧是进入/src/gcc-4.9.2,由于以前编译过,先把gcc-build重命名,再新建一个空目录构建

cd /src/gcc-4.9.2
mv ../gcc-build ../gcc-build.tool
mkdir -v ../gcc-build
cd ../gcc-build

定义SED变量为sed的别名,然后配置编译选项

SED=sed
../gcc-4.9.2/configure
–prefix=/usr
–enable-languages=c,c++
–disable-multilib
–disable-bootstrap
–with-system-zlib

编译GCC

make

编译完成,在测试之前需要修改堆栈限制

ulimit -s 32768

执行编译测试

make -k check

实测这个测试要做好久好久,如果你不是强迫症患者,可以选择跳过这一步……

如果你是强迫症患者没有跳过测试,那么在测试完成后可以执行一个脚本来查看结果

../gcc-4.9.2/contrib/test_summary

没什么事就安装吧

make install

只不过在安装之后,GCC需要手动去做符号链接

ln -sv ../usr/bin/cpp /lib
ln -sv gcc /usr/bin/cc
install -v -dm755 /usr/lib/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/4.9.2/liblto_plugin.so /usr/lib/bfd-plugins/

下面来进行测试

echo ‘main(){}’ > dummy.c
cc dummy.c -v -Wl,–verbose &> dummy.log
readelf -l a.out | grep ‘: /lib’

我这里是什么都没显示,文档说要显示个东西

[Requesting program interpreter: /lib/ld-linux.so.2]

然后要查看日志

grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log
grep -B4 ‘^ /usr/include’ dummy.log
grep ‘SEARCH.*/usr/lib’ dummy.log |sed ‘s|; |n|g’
grep “/lib.*/libc.so.6 ” dummy.log
grep found dummy.log

这几个只要有显示,没报错,就应该没啥问题

清理测试现场

rm -v dummy.c a.out dummy.log

最后安装一些其他的文件

mkdir -pv /usr/share/gdb/auto-load/usr/lib
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib

据说到这时候GCC就安装完成了。

Bzip2-1.0.6

这也是个得打补丁的东西,而且还得改两行Makefile

cd /src
rm -rf /src/bzip2-1.0.6
tar zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
sed -i ‘s@(ln -s -f )$(PREFIX)/bin/@1@’ Makefile
sed -i “s@(PREFIX)/man@(PREFIX)/share/man@g” Makefile

这里有个准备编译,如果是在上次编译的那个目录里做的话,这一步会报错

make -f Makefile-libbz2_so
make clean

编译和安装

make
make PREFIX=/usr install

还需要手动安装模块文件和建立符号链接

cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat

Pkg-config-0.28

回到/src,解压并进入源码目录

cd /src
tar zxvf pkg-config-0.28.tar.gz
cd pkg-config-0.28

编译选项配置的时候会有几个参数调整

./configure –prefix=/usr
–with-internal-glib
–disable-host-tool
–docdir=/usr/share/doc/pkg-config-0.28

然后编译,测试,安装一气呵成

make
make check
make install

Ncurses-5.9

由于以前编译过,所以需要重命名后再重新解压源码目录

cd /src
mv ncurses-5.9 ncurses-5.9.tool
tar zxvf ncurses-5.9.tar.gz
cd ncurses-5.9

调整几个编译配置

./configure –prefix=/usr
–mandir=/usr/share/man
–with-shared
–without-debug
–enable-pc-files
–enable-widec

编译安装

make
make install

还需要手工安装模块和简历符号链接

mv -v /usr/lib/libncursesw.so.5* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so
for lib in ncurses form panel menu ; do
rm -vf /usr/lib/lib${lib}.so
echo “INPUT(-l${lib}w)” > /usr/lib/lib${lib}.so
ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a
ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc
done
ln -sfv libncurses++w.a /usr/lib/libncurses++.a
rm -vf /usr/lib/libcursesw.so
echo “INPUT(-lncursesw)” > /usr/lib/libcursesw.so
ln -sfv libncurses.so /usr/lib/libcurses.so
ln -sfv libncursesw.a /usr/lib/libcursesw.a
ln -sfv libncurses.a /usr/lib/libcurses.a

最后来安装文档

mkdir -v /usr/share/doc/ncurses-5.9
cp -v -R doc/* /usr/share/doc/ncurses-5.9

但是这时候有个问题,它不支持非宽字符集,我们需要再做点事情

make distclean
./configure –prefix=/usr
–with-shared
–without-normal
–without-debug
–without-cxx-binding
make sources libs
cp -av lib/lib*.so.5* /usr/lib

 

来源:http://www.haopingrui.cn/?p=119

Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

今天我们来学习一下如何在CentOS 7 Linux分布式系统中为Tomcat绑定IPv4。

Apache Tomcat 是由Apache 软件基金会 开发的开源web服务器和servlet容器。它实现了Java Servlet,JavaServer页面(JSP),Java的统一表达式语言,以及Sun Microsystems的Java的WebSocket规范,并提供了一个运行java代码的web服务器环境。

Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

如果由于tomcat默认绑定到IPv6而导致我们的web服务器不能正常工作,就有必要将tomcat绑定到IPv4。众所周知,IPv6是为设备分配IP地址的现代方法,虽然在不久的将来也许会得到应用,但是现在并没有得到完全应用。由于没有用处,目前我们并不需要将我们的Tomcat服务器向IPv6转换,我们应该将其绑定到IPv4。

在开始将tomcat绑定到IPv4之前,我们应该确保在我们的CentOS 7中已经安装了tomcat。可以看这个如何在CentOS 7.0服务器中安装tomcat 8的指导。

1. 切换到tomcat用户

首先,我们要切换到 tomcat 用户。我们可以通过在shell或者终端中运行 su tomcat 命令完成。

# su tomcat

切换到tomcat用户

2. 找到文件 Catalina.sh

现在我们要进入Apache Tomcat安装目录下的bin文件夹,通常是 /usr/share/apache-tomcat-8.0.x/bin/, 这里的x是 Apache Tomcat发行版的子版本号。因为我的CentOS 7服务器中安装的版本是8.0.18,这里我的目录是 /usr/share/apache-tomcat-8.0.18/bin/

$ cd /usr/share/apache-tomcat-8.0.18/bin

注意:请用你系统中安装的Apache Tomcat的版本号替换8.0.18。

在bin目录中,有一个名字是catalina.sh的脚本文件。这就是我们要编辑的文件,我们将在里面增加一行将tomcat绑定到IPv4的配置信息。你可以通过在shell或者终端中运行命令 ls 来查看这个文件。

$ ls
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

3. 配置 Catalina.sh

如图所示,我们将在catalina.sh脚本文件的最后增加一行 JAVA_OPTS= "$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses"。我们可以使用我们喜欢的文本编辑器来编辑这个文件,例如nano、vim等等。这里我们使用nano。

$ nano catalina.sh
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

然后,如下图所示,将该行增加到文件。

Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

现在,我们已经将配置信息增加到文件中。保存文件并退出nano。

4. 重启

现在,我们通过重启tomcat服务器使配置生效。我们要先运行shutdown.sh,然后运行startup.sh。

$ ./shutdown.sh

运行可执行文件startup.sh:

$ ./startup.sh
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址
Linux:如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

这将重启我们的tomcat服务器并加载将服务器绑定到IPv4的配置信息。

结尾

好了,我们终于将我们运行在CentOS 7 Linux发行版上的tomcat服务器绑定到IPv4上了。尽管IPv6在不久的将来也许会得到应用,但由于现在还没有使用,如果因为将你的Tomcat服务器绑定到IPv6上而使得你的tomcat服务器不工作,就有必要将tomcat绑定到IPv4上,这也很简单。如果你有任何疑问,建议,反馈,请在下面的评论框中写下来,让我们知道有什么需要增加或者改进。非常感谢!


via: http://linoxide.com/linux-how-to/bind-apache-tomcat-ipv4-centos/

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

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

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

Linux:在 Apache、NGINX 和 Lighttpd 上启用 HTTP 公钥固定扩展(HPKP)

编者按:前段时间,Google 报告说 CNNIC 签发的一个中级 CA 签发了一个伪造的 Google 证书,从而导致 Google 和 Mozilla 在其产品中取消了对 CNNIC 后继签发的证书信任。

本文就来讲述一下,这种伪造证书是如何被 Google 发现的,其技术机制是什么?如何在网站服务器上实现伪造证书防御和报告机制。

公钥固定(Public Key Pinning)是指一个证书链中必须包含一个白名单中的公钥,也就是说只有被列入白名单的证书签发机构(CA)才能为某个域名*.example.com签发证书,而不是你的浏览器中所存储的任何 CA 都可以为之签发。本文讲述了这种机制的背景知识,并提供了 Apache、 Lighttpd 和 NGINX 上的配置范例。

Linux:在 Apache、NGINX 和 Lighttpd 上启用 HTTP 公钥固定扩展(HPKP)
Linux:在 Apache、NGINX 和 Lighttpd 上启用 HTTP 公钥固定扩展(HPKP)

HTTP 公钥固定扩展

用你使用的银行做个例子,它一直使用 CA 公司 A 为其签发证书。但是在当前的证书体系下,CA 公司 B、CA 公司 C 和 NSA 的 CA 都能给你的银行创建证书,而你的浏览器会毫无疑虑的接受它们,因为这些公司都是你所信任的根 CA。

如果你的银行实现了 HPKP 并固定了它们的第一个中级证书(来自 CA 公司 A),那么浏览器将不会接受来自CA 公司 B 和 CA 公司 C 的证书,即便它们也有一个有效的信任链。HPKP 也允许你的浏览器将这种违例行为报告给该银行,以便银行知道被伪造证书攻击了。

HTTP 公钥固定扩展是一个从2011年开始开发的针对 HTTP 用户代理(即浏览器)的公钥固定标准。它由 Google 发起,甚至在 Chrome 中实现的固定机制可以使用一个人工维护的网站公钥固定列表,这个列表包含了固定的几个网站的公钥签名。(LCTT 译注:Chrome 和 FireFox 32 及以后版本都支持公钥固定机制,并使用内置的人工维护的公钥固定列表数据,这些数据随着浏览器软件的更新而更新,主要包括几个大型站点。目前还只有 Chrome 38+ 支持通过 HTTP 响应头传递公钥固定信息。)

以下是 HPKP 的几个功能简述:

  • HPKP 是在 HTTP 层面设置的,使用 Public-Key-Pins(PKP)响应头。
  • 该规则的保留周期通过 max-age 参数设置,单位是秒。
  • PKP 响应头只能用于正确的安全加密通讯里面。
  • 如果出现了多个这样的响应头,则只处理第一个。
  • 固定机制可以使用includeSubDomains参数扩展到子域。
  • 当接收到一个新的 PKP 响应头时,它会覆盖之前存储的公钥固定和元数据。
  • 公钥固定是用哈希算法生成的,其实是一个“主题公钥信息(SKPI)”指纹。

本文首先会介绍一些 HPKP 工作的原理,接下来我们会展示给你如何得到需要的指纹并配置到 web 服务器中。

SPKI 指纹 – 理论

以下摘自 Adam Langley 的帖子,我们哈希的是一个公钥,而不是证书:

通常来说,对证书进行哈希是一个显而易见的解决方案,但是其实这是错的。不能这样做的原因是 CA 证书可以不断重新签发:同一个公钥、主题名可以对应多个证书,而这些证书有不同的延展或失效时间。浏览器从下至上地在证书池中构建证书链时,另外一个版本的证书可能就替代匹配了你原本所期望的证书。

举个例子,StartSSL 有两个根证书:一个是以 SHA1 签名的,另外是一个是 SHA256。如果你希望固定住 StartSSL 作为你的 CA,那么你该使用哪个证书呢?你也许可以使用这两个,但是如果我不告诉你,你怎么会知道还有一个根证书呢?

相反地,对公钥进行哈希则不会有这个问题:

浏览器假定子证书是固定不动的:它总是证书链的起点。子证书所携带的签名一定是一个有效的签名,它来自其父证书给这个证书专门签发的。这就是说,父证书的公钥相对于子证书来说是固定的。所以可推论公钥链是固定的。

唯一的问题是你不能固定到一个交叉认证的根证书上。举个例子,GoDaddy 的根证书是 Valicert 签名的,这是为了让那些不能识别 GoDaddy 根证书的老客户可以信任其证书。然而,你不能固定到 Valicert 上,因为新的客户在证书链上发现了 GoDaddy 证书就会停止上溯(LCTT 译注:所以就找不到固定信息了)。

此外,我们是对 SubjectPublicKeyInfo(SPKI)进行哈希而不是对公钥位串。SPKI 包括了公钥类型、公钥自身及其相关参数。这很重要,因为如果对公钥进行哈希就有可能导致发生曲解攻击。对于一个 Diffie-Hellman 公钥而言:如果仅对公钥进行哈希,而不是对完整的 SPKI,那么攻击者可以使用同样的公钥而让客户端将其解释为其它组。同样地,这样也有可能强制将一个 RSA 密钥当成 DSA 密钥解释等等。

固定在哪里

你应该固定在什么地方?固定你自己的公钥并不是一个最好的办法。你的密钥也许会改变或撤销。你也许会使用多个证书,经常轮换证书的话密钥就改变了。也许由于服务器被入侵而撤销证书。

最容易但是不是太安全的方法是固定第一个中级 CA 证书。该证书是签名在你的网站证书之上的,所以签发该证书的 CA 的公钥肯定是在证书链上的。

采用这种方法你可以从同一个 CA 更新你的证书而不用担心固定信息不对。如果该 CA 发行了一个不同的根证书,也许你会遇到一些问题,对此并没有太好的解决方案。不过你可以通过如下做法来减轻这种问题的影响:

  • 从一个不同的 CA 申请一个备用的证书,并固定该备份。

RFC 里面说你至少需要做两个固定。一个是当前连接所使用的证书链上的,另外一个是备份的。

另外的固定是对备份公钥的,它可以是来自另外一个给你签发证书的不同 CA 的 SKPI 指纹。

在这个问题上还有一种更安全的方法,就是事先创建好至少三个独立的公钥(使用 OpenSSL,参见此页 了解 Javascript OpenSSL 命令生成器),并将其中两个备份到一个安全的地方,离线存储、不要放到网上。

为这三个证书创建 SPKI 指纹并固定它们,然后仅使用第一个作为当前的证书。当需要时,你可以使用备份密钥之一。不过你需要让 CA 给你做签名来生成证书对,这可能需要几天,依你的 CA 的工作情况而定。

对于 HPKP 来说这没有问题,因为我们使用的是公钥的 SPKI 哈希,而不是证书。失效或不同的 CA 签名链并不影响。

如果你按照上述方法生成并安全存储了至少三个独立的密钥,并固定它们,也可以防止你的 CA 撤销你的网站证书并签发一个假证书时出现问题。

SPKI 指纹

可以使用如下的 OpenSSL 命令来生成 SPKI 指纹,它出现在 RFC 草案 中:

openssl x509 -noout -in certificate.pem -pubkey |
openssl asn1parse -noout -inform pem -out public.key;
openssl dgst -sha256 -binary public.key | openssl enc -base64

结果:

klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=

上面输入的 certificate.pem文件是本站(https://raymii.org)的证书链中第一个证书。(在写本文时, COMODO RSA Domain Validation Secure Server CA, 序列号 2B:2E:6E:EA:D9:75:36:6C:14:8A:6E:DB:A3:7C:8C:07 )。

你也需要同样对你的另外两个备份公钥生成指纹。

故障

在写本文时(2015/1),唯一支持 HPKP 的浏览器(chrome)有一个严重的问题:Chrome 并不能够区分 HSTS 和 HPKP 响应头中的 max-age 和 includeSubdomains 参数。也就是说,如果你的 HSTS 和 HPKP 设置了不同的 max-age 和 includeSubdomains 参数,它们会互相搞乱。关于这个故障的更多信息参见:https://code.google.com/p/chromium/issues/detail?id=444511。感谢 Scott Helme(https://scotthelme.co.uk)发现并告诉我这个 Chromium 项目的问题。

Web 服务器配置

下面你可以看到三个主流 Web 服务器的配置方法。这只是一个 HTTP 响应头,绝大多数 Web 服务器都可以设置它。它只需要设置到 HTTPS 网站上。

下面的例子固定到 COMODO RSA Domain Validation Secure Server CA及备份的 Comodo PositiveSSLCA 上,30天失效期,包括所有的子域。

Apache

编辑你的 Apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 或 /etc/apache2/httpd.conf),并添加下列行到你的 VirtualHost 中:

# 如需要,载入 headers 模块。
LoadModule headers_module modules/mod_headers.so
Header set Public-Key-Pins "pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains"

Lighttpd

Lighttpd 更简单一些,将下列行添加到你的 Lighttpd 配置文件(如 /etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
    setenv.add-response-header  = ( "Public-Key-Pins" => "pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains")
}

NGINX

NGINX 的配置更简短。添加以下行到你的 HTTPS 配置的 server 块中:

add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains';

报告功能

HPKP 报告功能允许浏览器报告任何违例给你。

如果你在响应头中添加了附加的 report-uri=”http://example.org/hpkp-report”参数,并用该 URI 处理接收到的数据的话,客户端会在发现违例时发送报告给你。这个报告是以 POST 方式发送到你指定的 report-uri 上,并以类似下面的 JSON 格式:

{
    "date-time": "2014-12-26T11:52:10Z",
    "hostname": "www.example.org",
    "port": 443,
    "effective-expiration-date": "2014-12-31T12:59:59",
    "include-subdomains": true,
    "served-certificate-chain": [
        "-----BEGINCERTIFICATE-----nMIIAuyg[...]tqU0CkVDNxn-----ENDCERTIFICATE-----"
    ],
    "validated-certificate-chain": [
        "-----BEGINCERTIFICATE-----nEBDCCygAwIBA[...]PX4WecNxn-----ENDCERTIFICATE-----"
    ],
    "known-pins": [
        "pin-sha256="dUezRu9zOECb901Md727xWltNsj0e6qzGk"",
        "pin-sha256="E9CqVKB9+xZ9INDbd+2eRQozqbQ2yXLYc""
    ]
}

非强制,只报告

HPKP 也可以设置为非强制的,可以使用 Public-Key-Pins-Report-Only来只发送违例报告给你。

这样可以让你在网站不可访问或 HPKP 配置不正确时不固定,之后你可以将这个响应头改为 Public-Key-Pins来强制固定。


via: https://raymii.org/s/articles/HTTP_Public_Key_Pinning_Extension_HPKP.html

作者:Remy van Elst 译者:wxy 校对:wxy

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

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

Linux:如何判断Unix系统的一个库文件是32位还是64位的

Linux:如何判断Unix系统的一个库文件是32位还是64位的
Linux:如何判断Unix系统的一个库文件是32位还是64位的

某些时候,我们需要知道操作系统的位数,或者配置插件的时候需要知道主程序的位数(例如配置apache插件的时候需要知道apache的位数以便配置相应的插件),最简单的办法就是执行file命令,如:

file 命令

Linux:

# file libnss1_files-2.2.4.so 
libnss1_files-2.2.4.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped 
# file libtrsbean.so 
libtrsbean.so: ELF 64-bit LSB shared object, version 1, not stripped

AIX:

32位的没有说明

#file /usr/ccs/lib/mcrt0.o 
/usr/ccs/lib/mcrt0.o:   executable (RISC System/6000) or object module not stripped
#file /usr/ccs/lib/mcrt0_64.o 
/usr/ccs/lib/mcrt0_64.o:        64-bit XCOFF executable or object module not stripped

Solaris:

# file libmp.so 
libmp.so:       ELF 32-位 MSB 动态库 SPARC 版本 1,动态链接,没有除去

od 命令

另外通过二进制查看命令od查看相关的库文件也可以解决此问题,但难度大,也不保险。下面给出在不同系统中的结果,以供参考(由于只在某一版本的操作系统下面做的测试,下面的结果不可能适应所有的所有版本的系统)

Linux

32位第4段是0101;64位第4段是0102 。-h 表示按16进制2字节整数查看,整数高低位也调整了(如7f45变成457f); -N 10 表示查看10个字节。

#od -h -N 10 32.so 
      0000000 457f 464c 0101 0001 0000
#od -h  -N 10  64.so 
      0000000 457f 464c 0102 0001  0000

Solaris

和Linux差不多,只是Linux的 -h 参数变成 -x。另外显示结果也不太一样,Solaris是按照字节顺序显示的,Linux是按照16进制2字节整数查看,会把高低位调整了。

#od -x -N 10  32.so            
     0000000 7f45 4c46 0101 0100 0000
#od -x -N 10  64.so            
     0000000 7f45 4c46 0102 0100 0000

AIX

32位是01df ;64位是01f7

#od -N 10 -h crt0_r.o 
     0000000  01df 0003 3d65 462a 0000
#od -N 10 -h mcrt0_64.o 
      0000000  01f7 0003 3fe2 7fd5 0000

HP Unix

没有实际操作,只是通过UltraEdit打开两个文件xxx32.sl和xxx64.sl并比较前面几个字节(HP库文件是.sl结尾不是.so结尾的)。发现64位的文件和Linux/Solaris的类似。

02 10 01 0e 05 12 40
7f 45 4c 46 02 02 01

 

来源:http://blog.csdn.net/coolmasoft/article/details/3168838

Linux:理解 Ceph:一个开源的分布式存储平台

Ceph是一个软件分布式存储平台,可运行在商用硬件上。为了了解Ceph的运行效率,我们首先要弄清什么是商用硬件。商用电脑是由多个硬件供应商提供的硬件组装而成的,供应商们开发这些硬件是基于同一个开放标准的。与超级微型计算机相比,商品电脑的成本更低,并且它的开放标准能减少众多硬件提供商提供的硬件差异性。Ceph存储集群运行在商用机上,为了确保集群中数据的分布式存储和良好的可扩展性,Ceph运用了著名的CRUSH(Controllled Replication Under Scalable Hashing)算法。Ceph开发的主要目标是提供高可扩展性和提供对象存储、块存储和文件系统的存储机制。Ceph提供一个单一的存储平台,可以处理所有类型的数据存储(包括对象、块和文件)。它的高扩展性可以达到PB级,它还拥有高容错性和高一致性数据冗余机制。

Ceph的历史

在2004年,Sage Weil开发了一个名叫Ceph的开源项目,并于2006年,基于开源协议开源了Ceph。Weil 曾经是“Inktank Storage”公司的创始人。Inktank Storage一直专注于Ceph的研发,直到它被红帽收购。2012年,Ceph的第一个稳定版本发布了。2014年10月,Ceph的开发团队发布了Ceph的第七个稳定版本Giant。为了让Ceph更加成熟与完美,这个项目还在继续开发中。

一个Ceph集群由两种类型的后台进程(Daemon)组成:

  • OSD Daemon
  • Ceph Monitor

Ceph OSD Daemon

Object Storage Device(OSD)是Ceph集群中的重要组成部分。OSD可以存储文件或数据的内容,它使用文件系统来存储数据。OSD Daemon主要负责管理集群中的所有磁盘。OSD Daemon还负责在本地文件系统存储数据,并为不同的客户软件或存取媒介通过网络提供数据访问。而且,OSD Daemon还负责添加和删除磁盘,磁盘分区,管理OSD、低层空间管理,提供安全措施和磁盘数据的可复制性。

Ceph Monitor

Ceph Monitor也是一种Ceph OSD Daemon,它主要负责管理全部集群。当你运行一个Ceph集群时,你就会需要Ceph Monitor每天帮你检查集群的健康情况和状态。管理一个集群需要每天做很多工作比如检测所有OSD的状态和文件系统或块数据的状态。你可以通过Ceph Monitor来管理负载均衡和数据响应的详细信息。为了更好的了解Ceph集群的工作原理,我们来看看它是如何处理三种类型数据存储的机制。

Ceph Object storage

当向Ceph写入数据时,Ceph通过内部机制自动跨集群标记和复制数据。Ceph存储对象数据时,不仅可以通过调用Ceph内部的API来实现,还可以通过亚马逊的S3服务或AWS REST提供的API来实现。Ceph块存储机制提供了RADOS(Reliable Autonomic Distributed Object Store)服务。RADOS服务存储机制中不可或缺的;RADOS服务通过使用节点中安装的软件管理工具能够扩展千级的硬件设备(通常被应用为“Nodes“)。

Ceph Block Storage

Ceph的块存储模式使用户可以像挂载一个小型块设备一样挂载Ceph。在块数据存储级别上,RADOS服务也保证块数据的可扩展性。Librados就是包含在这一级别上的一个python类库,你可以使用librados类库和存储服务器或节点进行通信。Librados是一个开源的应用,你可以调整和增强它。Librados通过“RADOS Block Device“即RBD与后台进行交互。RBD不仅继承了Librados的功能,还能够为集群建立快照和恢复数据。

Ceph File Storage

CephFS 是一个为Ceph集群设计的,且遵循POSIX标准的分布式文件系统。CephFS提供把数据目录和文件映射到存储在RADOS中对象的存储的服务。通过这种方式,CephFS和RADOS可以相互协作。在这里,RADOS动态均等地把数据分布到不同的节点上。这种文件系统支持无限的数据存储和更强的数据安全性。在文件存储集群系统中,Ceph因提供容量大和高可扩展性而闻名。请注意你可以同时把Ceph与btrfs或EXT4一起使用,但Red Hat推荐使用最新Linux内核(3.14版本或者更新版本)。

结论

Red Hat下的Ceph文件系统拥有性价比高、操作简单、集群数据高可靠性的特点。RedHat也一直为Ceph投入了很多人力,这也确保了Bug可的跟进速度,以及新特性的引入。由于Ceph是开源的,所以你可以按照你的需求随意修改它。

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

Linux:高并发Web服务的演变——节约系统内存和CPU

一、越来越多的并发连接数

现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置。虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。

并发连接数为什么呈指数增长?实际上,从这几年的用户基数上看,这个数量并没有出现指数增长,因此它并非主要原因。主要原因,还是web变得更复杂,交互更丰富所导致的。

1. 页面元素增多,交互复杂

Web页面元素越来越多,更为丰富。更多的资源元素,意味着更多的下载请求。Web系统的交互越来越复杂,交互场景和次数也大幅增加。以“www.qq.com”的首页为例子,刷新一次,大概会有244个请求。并且,在页面打开完成之后,还会有一些定时的查询或者上报请求持续运作。

 

目前的Http请求,为了减少反复的创建和销毁连接行为,通常都建立长连接(Connection keep-alive)。一经建立,这个连接会被保持住一段时间,被后续请求复用。然而,它也带来了另一个新的问题,连接的保持是会占用Web系统服务端资源的,如果不充分使用这个连接,会导致资源浪费。长连接被创建后,首批资源传输完毕,之后几乎没有数据交互,一直到超时时间,才会自动释放长连接占据的系统资源。

 

除此之外,还有一些Web需求本身就需要长期保持连接的,例如Web socket。

2. 主流的本浏览器的连接数在增加

面对越来越丰富的Web资源,主流浏览器并发连接数也在增加,同一个域下,早期的浏览器一般只有1-2个下载连接,而目前的主流浏览器通常在2-6个。增加浏览器并发连接数目,在需要下载资源比较多的场景下,可以加快页面的加载速度。更多的连接对浏览器加载页面元素是有好处的,在某些连接遭遇“网络阻塞”的情况下,其他正常的下载连接可以继续工作。

这样自然无形增加了Web系统后端的压力,更多的下载连接意味着占据了更多的Web服务器的资源。而在用户访问高峰期,自热而然就形成了“高并发”场景。这些连接和请求,占据了服务器的大量CPU和内存等资源。尤其在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要。

二、Web前端优化,降低服务端压力

在缓解“高并发”的压力,需要前端和后端的共同配合优化,才能达到最大效果。在用户第一线的Web前端,可以起到减少或者减轻Http请求的效果。

1. 减少Web请求

常用的实现方法是通过Http协议头中的expire或max-age来控制,将静态内容放入浏览器的本地缓存,在之后的一段时间里,不再请求Web服务器,直接使用本地资源。还有HTML5中的本地存储技术(LocalStorage),也被作为一个强大的数据本地缓存。

 

这种方案缓存后,根本不发送请求到Web服务器,大幅降低服务器压力,也带来了良好的用户体验。但是,这种方案,对首次访问的用户无效,同时,也影响部分Web资源的实时性。

2. 减轻Web请求

浏览器的本地缓存是存在过期时间的,一旦过期,就必须重新向服务器请求。这个时候,会有两种情形:

(1)服务器的资源内容没有更新,浏览器请求Web资源,服务器回复“可以继续使用本地缓存”。(发生通信,但是Web服务器只需要做简单“回复”)

(2)服务器的文件或者内容已经更新,浏览器请求Web资源,Web服务器通过网络传输新的资源内容。(发生通信,Web服务器需要完成复杂的传输工作)

这里的协商方式是通过Http协议的Last-Modified或Etag来控制,这个时候请求服务器,如果是内容没有发生变更的情况,服务器会返回304 Not Modified。这样的话,就不需要每次请求Web服务器都做复杂的传输完整数据文件的工作,只要简单的http应答就可以达到相同的效果。

 

虽然上述请求,起到“减轻”Web服务器的压力,但是连接仍然被建立,请求也发生了。

3. 合并页面请求

如果是比较老一些的Web开发者,应该会更有印象,在ajax盛行之前。页面大部分都是直接输出的,并没有这么多的ajax请求,Web后端将页面内容完全拼凑好了,再返回给前端。那个时候,页面静态化,是一个挺广泛的优化方式。后来,被交互更友好的ajax渐渐替代了,一个页面的请求也变得越来越多。

由于移动端的网络(2G/3G)比起PC宽带差很多,并且部分手机配置比较低,面对一个超过100个请求的网页,加载的速度会缓慢很多。于是,优化的方向又重新回到合并页面元素,减少请求数量:

(1)合并HTML展示内容。将CSS和JS直接嵌入到HTML页面内,不通过连接的方式引入。

(2)Ajax动态内容合并请求。对于动态内容,将10次Ajax请求合并为1次的批量信息查询。

(3)小图片合并,通过CSS的偏移量技术Sprites,将很多小图片合并为一张。这个优化方式,在PC端的Web优化中,也非常常见。

 

合并请求,减少了传输数据的次数,也就是相当于将它们从一个一个地请求,变为一次的“批量”请求。上述优化方法,到达“减轻”Web服务器压力的目的,减少了需要建立的连接。

来源:http://www.csdn.net/article/2015-02-12/2823952

Linux:开源Puppet 4:提供更高能力和可靠性

生产就绪的开源Puppet 4现在可用了。官方宣布了新的特性与强化功能,将让你体验更快、更一致的服务器配置管理。所增加的功能可以帮助你节省时间,减少错误以及提高可靠性。

Linux:开源Puppet 4:提供更高能力和可靠性
Linux:开源Puppet 4:提供更高能力和可靠性

通过现代化Puppet语言获得更多能力并减少错误

在过去的一年里,Puppet就有了新语言的变化,并在社区中能够预览和测试。谢谢您有价值的反馈,Puppet已经完全重新编写解析器和鉴别器,解决了一些问题。简而言之,解析器将不做更改,它基本就是这样,默认情况下可用。同时增强的Puppet语言提供更多的能力和更高的可靠性、更聪明、更紧凑,代码可读性更好。

资源安装更新开源Puppet更省时省力

由于意识到安装和更新软件可能是乏味和令人沮丧的,通常会涉及到手动的移除文件、潜在的重复……。Puppet的目标是提供一个更加的安装体验,无论你所运行的平台是什么,安装Puppet 4的过程将是一个简单的、流线型的体验(AIO安装包,包括Facter 2.4和CFacter 0.4、最新的Hiera和MCollective、Ruby 2.1.5、OpenSSL 1.0.0r和gem dependencies)。

Puppet 4引入了Puppet Collections,一种交付开源Puppet软件的新方式。一个Puppet Collections是一个确保Puppet开源包在相关集合工作中的包存储库。你可以把它想象成一个专为相关Puppet包的Linux分发。查看这些Puppet Collections博客帖子会对你有所帮助,点此进入

拓展:

本文中所讲的特性只是Puppet 4的一小部分,想了解更多可查看以下所列举的文档:

来源:http://geek.csdn.net/news/detail/30911

Linux:Redis集群技术及Codis实践

前言

本文主要讨论Redis集群相关技术及新发展,关于Redis运维等内容,以后另开主题讨论。

本文重点推荐Codis——豌豆荚开源的Redis分布式中间件(该项目于4个月前在GitHub开源,目前star已超过2100)。其和Twemproxy相比,有诸多激动人心的新特性,并支持从Twemproxy无缝迁移至Codis。

好吧我们正式开始。

Linux:Redis集群技术及Codis实践
Linux:Redis集群技术及Codis实践

1. Redis常见集群技术

长期以来,Redis本身仅支持单实例,内存一般最多10~20GB。这无法支撑大型线上业务系统的需求。而且也造成资源的利用率过低——毕竟现在服务器内存动辄100~200GB。

为解决单机承载能力不足的问题,各大互联网企业纷纷出手,“自助式”地实现了集群机制。在这些非官方集群解决方案中,物理上把数据“分片”(sharding)存储在多个Redis实例,一般情况下,每一“片”是一个Redis实例。

包括官方近期推出的Redis Cluster,Redis集群有三种实现机制,分别介绍如下,希望对大家选型有所帮助。

1.1 客户端分片

这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行分布式访问。这样的好处是,不依赖于第三方分布式中间件,实现方法和代码都自己掌控,可随时调整,不用担心踩到坑。

这实际上是一种静态分片技术。Redis实例的增减,都得手工调整分片程序。基于此分片机制的开源产品,现在仍不多见。

这种分片机制的性能比代理式更好(少了一个中间分发环节)。但缺点是升级麻烦,对研发人员的个人依赖性强——需要有较强的程序开发能力做后盾。如果主力程序员离职,可能新的负责人,会选择重写一遍。

所以,这种方式下,可运维性较差。出现故障,定位和解决都得研发和运维配合着解决,故障时间变长。

这种方案,难以进行标准化运维,不太适合中小公司(除非有足够的DevOPS)。

1.2 代理分片

这种方案,将分片工作交给专门的代理程序来做。代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给业务程序。

Linux:Redis集群技术及Codis实践
Linux:Redis集群技术及Codis实践

这种机制下,一般会选用第三方代理程序(而不是自己研发),因为后端有多个Redis实例,所以这类程序又称为分布式中间件。

这样的好处是,业务程序不用关心后端Redis实例,运维起来也方便。虽然会因此带来些性能损耗,但对于Redis这种内存读写型应用,相对而言是能容忍的。

这是我们推荐的集群实现方案。像基于该机制的开源产品Twemproxy,便是其中代表之一,应用非常广泛。

1.3 Redis Cluster

在这种机制下,没有中心节点(和代理模式的重要不同之处)。所以,一切开心和不开心的事情,都将基于此而展开。

Redis Cluster将所有Key映射到16384个Slot中,集群中每个Redis实例负责一部分,业务程序通过集成的Redis Cluster客户端进行操作。客户端可以向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。

Redis Cluster的成员管理(节点名称、IP、端口、状态、角色)等,都通过节点之间两两通讯,定期交换并更新。

由此可见,这是一种非常“重”的方案。已经不是Redis单实例的“简单、可依赖”了。可能这也是延期多年之后,才近期发布的原因之一。

这令人想起一段历史。因为Memcache不支持持久化,所以有人写了一个Membase,后来改名叫Couchbase,说是支持Auto Rebalance,好几年了,至今都没多少家公司在使用。

这是个令人忧心忡忡的方案。为解决仲裁等集群管理的问题,Oracle RAC还会使用存储设备的一块空间。而Redis Cluster,是一种完全的去中心化……

本方案目前不推荐使用,从了解的情况来看,线上业务的实际应用也并不多见。

2. Twemproxy及不足之处

Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。

这个方案顺理成章地解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。

我想很多人都应该感谢Twemproxy,这么些年来,应用范围最广、稳定性最高、最久经考验的分布式中间件,应该就是它了。只是,他还有诸多不方便之处。

Twemproxy最大的痛点在于,无法平滑地扩容/缩容。

这样导致运维同学非常痛苦:业务量突增,需增加Redis服务器;业务量萎缩,需要减少Redis服务器。但对Twemproxy而言,基本上都很难操作(那是一种锥心的、纠结的痛……)。

或者说,Twemproxy更加像服务器端静态sharding。有时为了规避业务量突增导致的扩容需求,甚至被迫新开一个基于Twemproxy的Redis集群。

Twemproxy另一个痛点是,运维不友好,甚至没有控制面板。

Codis刚好击中Twemproxy的这两大痛点,并且提供诸多其他令人激赏的特性。

来源:http://www.infoq.com/cn/articles/effective-ops-part-03

Linux:如何在Docker容器中运行GUI程序

各位,今天我们将学习如何在Docker之中运行GUI程序。我们可以轻易地在Docker容器中运行大多数GUI程序且不出错。Docker是一个开源项目,提供了一个打包、分发和运行任意程序的轻量级容器的开放平台。它没有语言支持、框架或者打包系统的限制,并可以运行在任何地方、任何时候,从小型的家用电脑到高端的服务器都可以运行。这让人们可以打包不同的包用于部署和扩展网络应用,数据库和后端服务而不必依赖于特定的栈或者提供商。

Linux:如何在Docker容器中运行GUI程序
Linux:如何在Docker容器中运行GUI程序

下面是我们该如何在Docker容器中运行GUI程序的简单步骤。本教程中,我们会用Firefox作为例子。

1. 安装 Docker

在开始前,我们首先得确保在Linux主机中已经安装了Docker。这里,我运行的是CentOS 7 主机,我们将运行yum管理器和下面的命令来安装Docker。

# yum install docker
Linux:如何在Docker容器中运行GUI程序
Linux:如何在Docker容器中运行GUI程序
# systemctl restart docker.service

2. 创建 Dockerfile

现在,Docker守护进程已经在运行中了,我们现在准备创建自己的Firefox Docker容器。我们要创建一个Dockerfile,在其中我们要输入需要的配置来创建一个可以工作的Firefox容器。为了运行 Docker 镜像我们需要使用最新版本的CentOS。要创建 Docker 镜像,我们需要用文本编辑器创建一个名为Dockerfile的文件。

# nano Dockerfile

接着,在Dockerfile中添加下面的行并保存。

#!/bin/bash
FROM centos:7
RUN yum install -y firefox
# 用你自己的 uid /gid 替换下面的0
RUN export uid=0 gid=0
RUN mkdir -p /home/developer
RUN echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd
RUN echo "developer:x:${uid}:" >> /etc/group
RUN echo "developer ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN chmod 0440 /etc/sudoers
RUN chown ${uid}:${gid} -R /home/developer
USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox
Linux:如何在Docker容器中运行GUI程序
Linux:如何在Docker容器中运行GUI程序

注意:在第四行的配置中,用你自己的用户和组id来替换0。 我们可以用下面的命令在shell或者终端中得到uid和gid。

#  id $USER

3. 构造Docker容器

下面我们就要根据上面的Dockerfile构建一个容器。它会安装firefox浏览器和它需要的包。它接着会设置用户权限并让它可以工作。这里镜像名是firefox,你可以根据你的需要命名。

# docker build --rm -t firefox .
Linux:如何在Docker容器中运行GUI程序
Linux:如何在Docker容器中运行GUI程序

4. 运行Docker容器

现在,如果一切顺利,我们现在可以在运行在CentOS 7镜像中的Docker容器里面运行我们的GUI程序也就是Firefox浏览器了。

# docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix firefox

总结

在Docker容器中运行GUI程序是一次很棒的体验,它对你的主机文件系统没有任何的伤害。它完全依赖你的Docker容器。本教程中,我尝试了CentOS 7 Docker中的Firefox。我们可以用这个技术尝试更多的GUI程序。如果你有任何问题、建议、反馈请在下面的评论栏中写下来,这样我们可以提升或更新我们的内容。谢谢!


via: http://linoxide.com/linux-how-to/run-gui-apps-docker-container/

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

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

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

Linux:在 Ubuntu14.10/Mint7 上安装 Gnome Flashback 经典桌面

如果你不喜欢现在的Unity桌面,Gnome Flashback桌面环境是一个简单的并且很棒的选择,让你能找回曾经经典的桌面。

Gnome Flashback基于GTK3并提供与原先gnome桌面视觉上相似的界面。

Gnome Flashback的另一个改变是采用了源自mint和xface的MATE桌面,但无论mint还是xface都是基于GTK2的。

安装 Gnome Flashback

在你的ubuntu上安装以下包即可:

$ sudo apt-get install gnome-session-flashback

然后注销返回到登录界面,单击密码输入框右上角的徽标型按钮,即可选择桌面环境。可供选择的有Gnome Flashback (Metacity) 会话模式和Gnome Flashback (Compiz)会话模式。

Metacity更轻更快,而Compiz则能带给你更棒的桌面效果。下面是我使用gnome flashback桌面的截图。

桌面采用了elementary OS的壁纸和Plank dock并且移除了底部面板。这些都会在这篇教程中涉及到。

Linux:在 Ubuntu14.10/Mint7 上安装 Gnome Flashback 经典桌面
Linux:在 Ubuntu14.10/Mint7 上安装 Gnome Flashback 经典桌面

在安装好gnome flashback桌面以后也许你对效果还不满意,这样你可能需要执行接下来的一系列操作来对它进行微调。

1. 安装 Gnome Tweak Tool

Gnome Tweak Tool能够帮助你定制比如字体、主题等,这些在Unity桌面的控制中心是十分困难,几乎不可能完成的任务。

$ sudo apt-get install gnome-tweak-tool

启动按步骤: 应用程序 > 系统工具 > 首选项 > Tweak Tool

2. 在面板上添加小应用

默认的右键点击面板是没有效果的。你可以尝试在右键点击面板的同时按住键盘上的Alt+Super (win)键,这样就会出现定制面板的相关选项。

你可以修改或删除面板,并在上面添加些小应用。在这个例子中我们移除了底部面板,并用Plank dock来代替它的位置。

在顶部面板的中间添加一个显示时间的小应用。通过配置使它显示时间和天气。

同样的添加一个工作空间切换器到顶部面板,并创建合适个数的工作空间。

3. 将窗口标题栏的按钮右置

在ubuntu中,最小化、最大化和关闭按钮默认是在标题栏左侧的。需要稍作手脚才能让他们乖乖回到右边去。

想让窗口的按钮到右边可以使用下面的命令,这是我在askubuntu上找到的。

$ gsettings set org.gnome.desktop.wm.preferences button-layout 'menu:minimize,maximize,close'

4.安装 Plank dock

plank dock位于屏幕底部,用于启动应用和切换打开的窗口。它会在必要的时间隐藏自己,并在需要的时候出现。elementary OS使用的dock就是plank dock。

运行以下命令安装:

$ sudo add-apt-repository ppa:ricotz/docky -y
$ sudo apt-get update
$ sudo apt-get install plank -y

现在启动:应用程序 > 附件 > Plank。若想让它开机自动启动,找到 应用程序 > 系统工具 > 首选项 > 启动应用程序 并将“plank”的命令加到列表中。

5. 安装 Conky 系统监视器

Conky非常酷,它用系统的中如CPU和内存使用率的统计值来装饰桌面。它不太占资源,并且绝大部分情况下运行都不会有什么问题。

运行如下命令安装:

$ sudo apt-add-repository -y ppa:teejee2008/ppa
$ sudo apt-get update
$ sudo apt-get install conky-manager

现在启动:应用程序 > 附件 > Conky Manager ,选择你想在桌面上显示的部件。Conky Manager同样可以配置到启动项中。

6. 安装CCSM

如果你更愿意使用Gnome Flashback (Compiz),那么CCSM将是你配置桌面特效的得力助手。

运行以下命令安装:

$ sudo apt-get install compizconfig-settings-manager

启动按步骤: 应用程序 > 系统工具 > 首选项 > CompizConfig Settings Manager.

在虚拟机中经常会发生compiz会话中装饰窗口消失。可以通过启动Compiz设置,并启用”Copy to texture”插件,注销后重新登录即可。

不过值得一提的是Compiz 会话会比Metacity慢。


via: http://www.binarytides.com/install-gnome-flashback-ubuntu/

作者:Silver Moon 译者:martin2011qi 校对:wxy

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

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

Linux:Linux Shell脚本面试25问

Linux:Linux Shell脚本面试25问
Linux:Linux Shell脚本面试25问

Q:1 Shell脚本是什么、它是必需的吗?

答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。

Q:2 什么是默认登录shell,如何改变指定用户的登录shell

答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:

# chsh <用户名> -s <新shell>
# chsh linuxtechi -s /bin/sh

Q:3 可以在shell脚本中使用哪些类型的变量?

答:在shell脚本,我们可以使用两种类型的变量:

  • 系统定义变量
  • 用户定义变量

系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。

用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。

Q:4 如何将标准输出和错误输出同时重定向到同一位置?

答:这里有两个方法来实现:

方法一:

2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )

方法二:

&> (如# ls /usr/share/doc &> out.txt )

Q:5 shell脚本中“if”语法如何嵌套?

答:基础语法如下:

if [ 条件 ]
then
命令1
命令2
…..
else
if [ 条件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi

Q:6 shell脚本中“$?”标记的用途是什么? ?

答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。简单的例子如下:

root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?

如果结束状态是0,说明前一个命令执行成功。

root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2

如果结束状态不是0,说明命令执行失败。

Q:7 在shell脚本中如何比较两个数字 ?

答:在if-then中使用测试命令( -gt 等)来比较两个数字,例子如下:

#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi

Q:8 shell脚本中break命令的作用 ?

答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。

Q:9 shell脚本中continue命令的作用 ?

答:continue命令不同于break命令,它只跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。

Q:10 告诉我shell脚本中Case语句的语法 ?

答:基础语法如下:

case 变量 in
值1)
命令1
命令2
…..
最后命令
!!
值2)
命令1
命令2
……
最后命令
;;
esac

Q:11 shell脚本中while循环语法 ?

答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:

while [ 条件 ]
do
命令…
done

Q:12 如何使脚本可执行 ?

答:使用chmod命令来使脚本可执行。例子如下:

# chmod a+x myscript.sh

Q:13 “#!/bin/bash”的作用 ?

答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。

Q:14 shell脚本中for循环语法 ?

答:for循环的基础语法:

for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done

Q:15 如何调试shell脚本 ?

答:使用’-x’参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。

Q:16 shell脚本如何比较字符串?

答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。

Q:17 Bourne shell(bash) 中有哪些特殊的变量 ?

答:下面的表列出了Bourne shell为命令行设置的特殊变量。

内建变量

解释

$0

命令行中的脚本名字

$1

第一个命令行参数

$2

第二个命令行参数

…..

…….

$9

第九个命令行参数

$#

命令行参数的数量

$*

所有命令行参数,以空格隔开

Q:18 How to test files in a shell script ?

Q:18 在shell脚本中,如何测试文件 ?

答:test命令可以用来测试文件。基础用法如下表格:

Test

用法

-d 文件名

如果文件存在并且是目录,返回true

-e 文件名

如果文件存在,返回true

-f 文件名

如果文件存在并且是普通文件,返回true

-r 文件名

如果文件存在并可读,返回true

-s 文件名

如果文件存在并且不为空,返回true

-w 文件名

如果文件存在并可写,返回true

-x 文件名

如果文件存在并可执行,返回true

Q:19 在shell脚本中,如何写入注释 ?

答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下:

#!/bin/bash
# This is a command
echo “I am logged in as $USER”

Q:20 如何让 shell 就脚本得到来自终端的输入?

答:read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。例子如下:

# vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo “My Name is $name”
# ./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi

Q:21 如何取消变量或取消变量赋值 ?

答:“unset”命令用于取消变量或取消变量赋值。语法如下所示:

# unset <变量名>

Q:22 如何执行算术运算 ?

答:有两种方法来执行算术运算:

1.使用expr命令(# expr 5 + 2) 2.用一个美元符号和方括号($[ 表达式 ])例如:test=$[16 + 4] ; test=$[16 + 4]

Q:23 do-while语句的基本格式 ?

答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次。)。下面是用do-while语句的语法

do
{
命令
} while (条件)

Q:24 在shell脚本如何定义函数呢 ?

答:函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。示例如下所示:

$ diskusage () { df -h ; }
译注:下面是我给的shell函数语法,原文没有
[ function ] 函数名 [()]
{
  命令;
  [return int;]
}

Q:25 如何在shell脚本中使用BC(bash计算器) ?

答:使用下列格式,在shell脚本中使用bc:

variable=`echo “options; expression” | bc`

(题图来自:wonderhowto.com)


via: http://www.linuxtechi.com/linux-shell-scripting-interview-questions-answers/

作者:Pradeep Kumar 译者:VicYu/Vic020 校对:wxy

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

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

Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头

Question: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它?

如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头板。如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的USB 摄像头。你可能已经在PC上安装过了。

Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头
Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头

本教程中,我会展示如何在树莓派上设置摄像头。我们假设你使用的系统是Raspbian。

在此之前,你最好检查一下你的摄像头是否在这些已知与树莓派兼容的摄像头之中。如果你的摄像头不在这个兼容列表中,不要丧气,仍然有可能树莓派能检测到你的摄像头。

检查USB摄像头是否雨树莓派兼容

要检查你的摄像头是否可以被树莓派检测到,将它插入到树莓派的USB口中,然后输入下面的命令。

$ lsusb

如果输出中没有你的摄像头,那么有可能你的树莓派的电源无法供应足够的电力给你的摄像头。这时你可以给你的摄像头用独立的电源线,比如有源USB hub,并重新输入lsusb命令。如果摄像头还是不能被识别,我们只有建议你购买其他树莓派支持的摄像头了。

Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头
Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头

在上面的截屏中,USB摄像头被识别为“1e4e:0102”,但是没有显示摄像头的制造商。当你在笔记本的Fedora 20中使用它时,它可以成功的检测到“1e4e:0102 Cubeternet GL-UPC822 UVC WebCam”。

另外一个可以检查摄像头是否被树莓派支持的方法是检查/dev目录。如果有/dev/video0,那么这暗示树莓派支持你的摄像头。

用USB Webcam拍照片

当USB摄像头成功挂载到树莓派上之后,下一步就是拍一些照片来验证它的功能了。

要想拍摄照片,你要安装fswebcam,这是一款小型摄像头程序。你可以直接通过Raspbian的仓库来安装fswebcam。

$ sudo apt-get install fswebcam

fswebcam安装完成后,在终端中运行下面的命令来抓去一张来自摄像头的照片:

$ fswebcam --no-banner -r 640x480 image.jpg

这条命令可以抓取一张640×480分辨率的照片,并且用jpg格式保存。它不会在照片的底部留下任何水印.

这就是fswebcam下640×480分辨率的结果。

Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头
Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头

下面的例子是没有定义分辨率的照片。图片是偏蓝的,并且默认的分辨率是358×288。

Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头
Linux:Linux有问必答:如何在树莓派上安装USB网络摄像头

via: http://ask.xmodulo.com/install-usb-webcam-raspberry-pi.html

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

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

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

Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用

在你的 Ubuntu 里,如果你需要处理一些工作,你并不需要关闭正运行着的那些应用,只需要管理一下窗口,并打开那些工作需要的应用就行。然而,如果你需要离开处理些别的事情或你的机器电量低使得你必须马上关闭电脑,这些程序可能就需要关闭终止了。不过幸运的是,你可以让 Ubuntu 记住所有你正运行的应用并在你下一次登录时还原它们。

Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用
Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用

自动保存会话

现在,为了让我们的 Ubuntu 记住当前会话中正运行的应用并在我们下一次登录时还原它们,我们将会使用到 dconf-editor。这个工具代替了前一个 Ubuntu 版本里安装的 gconf-editor,但默认情况下现在这个 Ubuntu 版本(注:这里指的是 Ubuntu 14.04 LTS) 并没有安装。为了安装 dconf-editor, 你需要运行 sudo apt-get install dconf-editor命令:

$ sudo apt-get install dconf-tools

一旦 dconf-editor安装完毕,你就可以从应用菜单(注:这里指的是 Unity Dash)里打开它,或者你可以通过直接在终端里运行,或使用 alt+f2运行下面的命令来启动它:

$ dconf-editor

在 “dconf Editor” 窗口中,在左边窗格里点击临近 “org” 的右箭头来展开这个选项的分支。

Dconf Editor Apps, org

然后在 “org” 下,点击临近 “gnome” 的右箭头。

Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用
Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用

接着在 “gnome” 下点击 “gnome-session”。在右边窗格里,选择 “auto-save-session” 选项框并将它开启。

Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用
Linux:如何在 Ubuntu 中再次登录时还原上次运行的应用

在你确认对刚才的选项打钩之后,点击默认情况下位于窗口左上角的关闭按钮(X)来关闭 “Dconf Editor”。

dconf-editor closing dconf editor

在你登出并再登录回来时,所有你正运行的应用就可以被还原了。

欢呼吧,我们已经成功地配置了我们的 Ubuntu 14.04 LTS “Trusty” 来自动记住我们上一次会话中正在运行的应用。

除了关机后恢复应用之外,还可以通过休眠来达成类似的功能。

休眠功能

现在,在这个教程里,我们也将学会 如何在 Ubuntu 14.04 LTS 里开启休眠功能 :

在开始之前,在键盘上按 Ctrl+Alt+T来开启终端。在它开启以后,运行:

sudo pm-hibernate

在你的电脑关闭后,再重新开启它。这时,你开启的应用被重新打开了吗?如果休眠功能没有发挥作用,请检查你的交换分区大小,它至少要和你可用 RAM 大小相当。

你可以在系统监视器里查看你的交换分区大小,系统监视器可以通过在应用菜单或在终端里运行下面的命令来开启:

$ gnome-system-monitor

在系统托盘里启用休眠功能:

系统托盘里面的会话指示器现在使用 logind 而不是 upower 了。默认情况下,在 upower 和 logind 中,休眠菜单都被禁用了。

为了开启它的休眠菜单,依次运行下面的命令来编辑配置文件:

sudo -i
cd /var/lib/polkit-1/localauthority/50-local.d/
gedit com.ubuntu.enable-hibernate.pkla

提示:假如对你来说,这个配置文件并没有起到作用,请替换上面代码中的 /var/lib 为 /etc 来试试另一个配置文件

复制并粘贴下面的代码到文件中并保存:

[Re-enable hibernate by default in upower]
 Identity=unix-user:*
 Action=org.freedesktop.upower.hibernate
 ResultActive=yes
[Re-enable hibernate by default in logind]
 Identity=unix-user:*
 Action=org.freedesktop.login1.hibernate
 ResultActive=yes

重启你的电脑就可以了。

当你盖上笔记本的后盖时,让它休眠:

  1. 通过下面的命令编辑文件 “/etc/systemd/logind.conf” :
    $ sudo nano /etc/systemd/logind.conf
  2. #HandleLidSwitch=suspend (挂起)这一行改为 HandleLidSwitch=hibernate (休眠)并保存文件;
  3. 运行下面的命令或重启你的电脑来应用更改:
    $ sudo restart systemd-logind

就是这样。 成功了吗?现在我们设置了 dconf 并开启了休眠功能 🙂 这样,无论你是关机还是直接合上笔记本盖子,你的 Ubuntu 将能够完全记住你开启的应用和窗口了。


via: http://linoxide.com/ubuntu-how-to/remember-running-applications-ubuntu/

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

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

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

Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

Elementary OS是一个以Ubuntu为基础的轻量级操作系统,广受欢迎。目前已经发行了三个版本,而第四个版本将会以即将到来的Ubuntu16.04为基础开发。

  • Jupiter (0.1): 第一个Elementary OS稳定发行版基于Ubuntu 10.10,在2011年三月发布。
  • Luna (0.2): 第二个Elementary OS稳定发行版基于Ubuntu 12.04,于2012年11月发布。
  • Freya (0.3): 第三个Elementary OS稳定发行版基于Ubuntu 14.04的,2015年二月8号发布。
  • Loki (0.4): 未来Elementary OS第四版,计划以Ubuntu16.04为基础,并且提供更新服务直到2021年。

Freya是目前最新的Elementary OS版本(0.3)。最初是被命名为ISIS,但是后来改了,是为了避免与同名的恐怖组织产生任何的联系。Freya有一些非常不错的预装应用。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

突出的特性

这里列举了一些特性,但并非Elementary OS 0.3的所有特性。

  • 更好的交互性消息通知,可在通知设定面板设定系统级别的“Do Not Disturb(不要打扰)”模式。
  • 最新版Elementary OS提供更好的emoji表情支持,及内置替换了网页应用中的微软核心字体。
  • “隐私模式”是一个新的防火墙工具,易于使用,可以帮助保护电脑免遭恶意脚本和应用的攻击。
  • 统一风格的登入和锁定界面。
  • 改进了界面效果和功能的应用中心菜单,包括快速操作列表,搜索拖放,支持快速数学计算。
  • 重新设计的多任务视图提供了更多以应用为中心的功能。
  • 更新了软件栈(Linux 3.16, Gtk 3.14 和Vala 0.26),更好的支持和增强了最新开发的应用。
  • 支持UEFI。
  • 通过新的联网助手,WiFi连接变得更容易。

下载64位&32位版本

安装Elementary OS 0.3 (Freya)

下载Elementary OS 0.3的ISO文件,并且写入到一个USB启动盘或者DVD/CD。支持32位和64位的架构。当计算机从Elementary OS ISO文件启动后,有两个选项可用,不安装而仅试用,或直接安装到计算机里。这里选择第二项。Elmentary OS也可以与已有操作系统并存安装,构成双重启动。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

在进行下面的步骤之前会检查系统要求和资源有效性。如果你的系统有足够的资源,点击继续。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

安装向导提供许多安装形式。选取最适合你的选项,通常大多数都选用第一个选项:“擦除磁盘以安装elementary”。选择该选项,必须保证你的原有数据都已经正确备份了,因为磁盘(分区)擦除后,其上所有的数据就会丢失。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

接下来的对话框显示了Elementary OS所使用和需要格式化的磁盘分区列表,确保数据完整后点击继续。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

选择你的地理位置,确定时区,点击继续。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

选择你的语言,点击继续。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

填入你的信息,选择一个高强度的超级用户/管理员密码,点击继续。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

当你的信息提供后,核心安装进程就会启动,正在安装的组件的详细信息会在一个小对话框里随进度条一闪而过。

Installation progress

恭喜你!最新的Elementary OS 0.3 (Freya)已经安装完成了。此时需要重启来更新和完整注册,恭喜。

Installation Complet

启动时,Elementary OS将显示它优雅的logo,然后会出现密码保护的管理员登入和游客访问选项。游客访问有相当多的限制功能,而且没有安装软件的权限。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

下图是新安装的Elementary OS 0.3的画面。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

个性化桌面

Elementary OS 0.3以其轻巧和美观而为我们熟知。每个人有自己独特的审美观和计算机使用习惯,桌面反映出每一个计算机使用者的个人偏好。如其他操作系统一样,Elementary OS 0.3也提供了许多选项来个性化配置桌面,包括壁纸,字体大小,主题等等。

基本的个性化配置,点击Applications > System Settings > Desktop

我们可以改变壁纸,泊板(dock)和启用桌面热角。

默认提供了很少的壁纸,更多的可以从网上下载或者从你的相机传输过来。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

Elementary OS真正的美丽在于优雅的泊板。桌面上没有任何图标,泊板上的应用图标显示逼真,通过它可以快速访问常用应用。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

用户可以定制桌面的四个热角的功能。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

通过安装elementary tweaks工具来更深入的个性化定制。

可以使用如下命令,将它的稳定版的PPA添加到高级软件包管理工具(APT)仓库。

sudo add-apt-repository ppa:mpstark/elementary-tweaks-daily

ppa

当 PPA 添加到仓库后,我们需要用以下命令更新仓库

sudo apt-get update

update repository

更新仓库后,我们就可以安装elementary-tweaks,用以下命令完成

sudo apt-get install elementary-tweaks

install elementary tweaks

我们可以在Application > System Settings下的个人区域的看到增加了一个Tweaks项目。它现在可以给我们提供更多的个性化定制选项。

Linux:直击 Elementary OS 0.3 Freya - 下载和安装指南
Linux:直击 Elementary OS 0.3 Freya – 下载和安装指南

为了进一步定制,我们也安装了gnome桌面系统的tweak工具,以演示解锁桌面。

sudo apt-get install gnome-tweak-tool

gnome

总结

Elementary OS十分接近Linux发行版Ubuntu,它的优缺点两方面也都十分相似。Elementary OS在外观和体验上都十分轻巧和优雅,并且正在快速地走向成熟。它有潜力成为Windows和OS X操作系统之外的第三选择。最新的Elementary OS 0.3(Freya)以其良好的功能基础而迅速流行。想了解更多信息,最近的更新和下载,请访问其官方网站


via: http://linoxide.com/ubuntu-how-to/elementary-os-0-3-freya-install-guide/

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

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

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

Linux:在 Docker 中运行 OpenOffice

Docker与GUI应用
Docker是开源的容器技术,容器是比虚拟机更轻量的虚拟化技术,优势是隔离软件的运行环境并且最小化其额外的开销。隔离运行环境的好处之一就是可以轻易创建干净的开发环境,而在我第一次Docker分享中,大家最关心的问题就是“Docker可以运行GUI应用吗”。
Docker作为虚拟化技术,并没有改变进程的运行方式和图像显示协议,因此Docker是可以运行GUI应用的。就像在裸机中要运行图形界面,我们有必要了解下Linux的X Window协议。在Linux中,一个GUI应用的显示都经过X Window这个C/S模型,简单概括就是X Server在后台运行,接受X Client的请求,并将显示的结果通过特定安全的协议返回。
运行Docker GUI应用的原理与之类似,下面将一步步带领大家创建基于Docker的图形化程序。

Dockerized OpenOffice

Linux:在 Docker 中运行 OpenOfficeDockerized-openoffice就是运行在容器内的GUI应用,执行命令docker run -d -p 6080:6080 tobegit3hub/dockerized-openoffice然后在浏览器打开http://127.0.0.1:6080/vnc.html就可以看到图形界面的OpenOffice应用。
其实玄机就在Dockerfile中,代码中有安装apt-get install -y lxde x11vnc xvfb这一步,就是安装我们前面提到的X Server,这样通过特定的VNC客户端就可以访问这个GUI应用了。这里我们选择noVNC客户端来连接我们的Dockerized应用,导入noVNC源码,启动服务器,打开6080端口,这样我们docker run以后就可以通过浏览器来访问GUI应用了。

FROM ubuntu:14.04
 MAINTAINER Doro Wu <fcwu.tw@gmail.com>
ENV DEBIAN_FRONTEND noninteractive
 ENV HOME /root
# setup our Ubuntu sources (ADD breaks caching)
 RUN echo "deb http://tw.archive.ubuntu.com/ubuntu/ trusty mainn
 deb http://tw.archive.ubuntu.com/ubuntu/ trusty multiversen
 deb http://tw.archive.ubuntu.com/ubuntu/ trusty universen
 deb http://tw.archive.ubuntu.com/ubuntu/ trusty restrictedn
 deb http://ppa.launchpad.net/chris-lea/node.js/ubuntu trusty mainn
 "> /etc/apt/sources.list
# no Upstart or DBus
 # https://github.com/dotcloud/docker/issues/1724#issuecomment-26294856
 RUN apt-mark hold initscripts udev plymouth mountall
 RUN dpkg-divert --local --rename --add /sbin/initctl && ln -sf /bin/true /sbin/initctl
RUN apt-get update
 && apt-get install -y --force-yes --no-install-recommends supervisor
 openssh-server pwgen sudo vim-tiny
 net-tools
 lxde x11vnc xvfb
 gtk2-engines-murrine ttf-ubuntu-font-family
 nodejs
 libreoffice firefox
 && apt-get autoclean
 && apt-get autoremove
 && rm -rf /var/lib/apt/lists/*
ADD noVNC /noVNC/
ADD startup.sh /
 ADD supervisord.conf /
 EXPOSE 6080
 EXPOSE 5900
 EXPOSE 22
 WORKDIR /
# Remove LibOffice
 RUN apt-get remove -y --purge libreoffice* libexttextcat-data* && sudo apt-get -y autoremove
# Install wget
 RUN apt-get update -y &&
 apt-get install -y wget
# Install OpenOffice
 RUN wget http://sourceforge.net/projects/openofficeorg.mirror/files/4.0.0/binaries/en-US/Apache_OpenOffice_4.0.0_Linux_x86-64_install-deb_en-US.tar.gz
 RUN tar -xvf Apache_OpenOffice*.tar.gz
 RUN dpkg -i en-US/DEBS/*.deb
 RUN dpkg -i en-US/DEBS/desktop-integration/*.deb
ENTRYPOINT ["/startup.sh"]

实际上这里我们把整个Linux桌面管理器都装了,因此运行Firefox等一切应用都是可能的。

参考链接

https://github.com/fcwu/docker-ubuntu-vnc-desktop使用VNC和noVNC搭建Ubuntu环境的实例,无论是源码还是使用的技术都值得参考。
http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/在Docker运行NetBeans等开发环境,虽然使用价值不大但Docker就真的做到了。
http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container运行Firefox而不需要安装Firefox,整个Dockerfile也相当简单。
https://blog.docker.com/2013/07/docker-desktop-your-desktop-over-ssh-running-inside-of-a-docker-container/Docker官方文档介绍通过SSH运行桌面系统,使用的是Xpra。
来源:http://chendihao.cn/docker-gui-application/

Linux:Prips – 打印指定范围内的IP地址

prips是一个可以打印出指定范围内所有ip地址的一个工具。它可以增强那些只能同时工作在一个主机上的工具的可用性。

Linux:Prips - 打印指定范围内的IP地址
Linux:Prips – 打印指定范围内的IP地址

在ubuntu上安装prips

打开终端并输入下面的命令

sudo apt-get install prips

使用prips

prips语法

prips [-c] [-d delim] [-e exclude] [-f format] [-i incr] start end
prips [-c] [-d delim] [-e exclude] [-f format] [-i incr] CIDR-block

可用选项

prips接受下面的命令行选项:

  • -c — 以CIDR形式打印范围。
  • -d 分隔符 — 用ASCII码作为分隔符,0 <= 分隔符 <= 255。
  • -e — 排除输出的范围。
  • -f 格式 — 设置地址格式 (hex:16进制, dec:10进制, 或者dot:以点分隔).
  • -i 增长 — 设置增长上限

Prips示例

显示保留的子网内的所有地址:

prips 192.168.32.0 192.168.32.255

同上面一样,使用CIDR标示:

prips 192.168.32/24

只显示A类保留子网内所有可用的地址,用空格而不是换行作为分隔符:

prips -d 32 10.0.0.1 10.255.255.255

每块显示4个ip地址:

prips -i 4 192.168.32.7 192.168.33.5

打印包含两个地址的最小CIDR块。

prips -c 192.168.32.5 192.168.32.11

via: http://www.ubuntugeek.com/prips-print-ip-address-on-a-given-range.html

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

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

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

Linux:如何在Ubuntu/CentOS上安装Linux内核4.0

大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0。代号为‘Hurr durr I’m a sheep’的Linux内核4.0是目前为止最新的主干内核。它是稳定版3.19.4之后发布的内核。4月12日是所有的开源运动爱好者的大日子,Linux Torvalds宣布了Linux内核4.0的发布,它现在就已经可用了。由于包括了一些很棒的功能,例如无重启补丁(实时补丁),新的升级驱动,最新的硬件支持以及很多有趣的功能都有新的版本,它原本被期望是一次重要版本。但是实际上内核4.0并不认为是期望中的重要版本,Linus 表示期望4.1会是一个更重要的版本。实时补丁功能已经集成到了SUSE企业版Linux操作系统上。你可以在发布公告上查看关于这次发布的更多详细内容。

Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0

警告: 安装新的内核可能会导致你的系统不可用或不稳定。如果你仍然使用以下命令继续安装,请确保备份所有重要数据到外部硬盘。

在Ubuntu 15.04上安装Linux内核4.0

如果你正在使用Linux的发行版Ubuntu 15.04,你可以直接通过Ubuntu内核网站安装。在你的Ubuntu15.04上安装最新的Linux内核4.0,你需要在shell或终端中在root访问权限下运行以下命令。

在 64位 Ubuntu 15.04

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-image-4.0.0-040000-generic_4.0.0-040000.201504121935_amd64.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-headers-4.0.0-040000-generic_4.0.0-040000.201504121935_amd64.deb
$ sudo dpkg -i linux-headers-4.0.0*.deb linux-image-4.0.0*.deb

在 32位 Ubuntu 15.04

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-image-4.0.0-040000-generic_4.0.0-040000.201504121935_i386.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-headers-4.0.0-040000-generic_4.0.0-040000.201504121935_i386.deb
$ sudo dpkg -i linux-headers-4.0.0*.deb linux-image-4.0.0*.deb

在CentOS 7上安装Linux内核4.0

我们可以用两种简单的方式在CentOS 7上安装Linux内核4.0。

  1. 从Elrepo软件仓库安装
  2. 从源代码编译安装

我们首先用ElRepo安装,这是最简单的方式:

使用 Elrepo 安装

1. 下载和安装ELRepo

我们首先下载ELRepo的GPG密钥并安装relrepo-release安装包。因为我们用的是CentOS 7,我们使用以下命令安装elrepo-release-7.0-2.el7.elrepo.noarch.rpm。

注: 如果你启用了secure boot,请查看这个网页获取更多信息

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

添加 Elrepo 源

2. 升级Linux内核到4.0版本

现在,我们准备从ELRepo软件仓库安装最新的稳定版内核4.0。安装它我们需要在CentOS 7的shell或者终端中输入以下命令。

# yum --enablerepo=elrepo-kernel install kernel-ml
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0

上面的命令会自动安装为CentOS 7构建的Linux内核4.0。

现在,下面的是另一种方式,通过编译源代码安装最新的内核4.0。

从源代码编译安装

1. 安装依赖软件

首先我们需要为编译linux内核安装依赖的软件。要完成这些,我们需要在一个终端或者shell中运行以下命令。

# yum groupinstall "Development Tools"
# yum install gcc ncurses ncurses-devel
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0

然后,我们会升级我们的整个系统。

# yum update

2. 下载源代码

现在我们通过wget命令从Linux内核的官方仓库中下载最新发布的linux内核4.0的源代码。你也可以使用你的浏览器直接从kernel.org网站下载内核。

#  cd /tmp/
# wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.xz
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0

3. 解压tar压缩包

文件下载好后我们在/usr/src/文件夹下用以下命令解压。

# tar -xf linux-4.0.tar.xz -C /usr/src/
# cd /usr/src/linux-4.0/

解压内核tar压缩包

4. 配置

配置Linux内核有两种选择的。我们可以创建一个新的自定义配置文件或者使用已有的配置文件来构建和安装Linux内核。这都取决于你自己的需要。

配置新的内核

现在我们在shell或终端中运行make menuconfig命令来配置Linux内核。我们执行以下命令后会显示一个包含所有菜单的弹出窗口。在这里我们可以选择我们新的内核配置。如果你不熟悉这些菜单,那就敲击ESC键两次退出。

# make menuconfig
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
已有的配置

如果你想用已有的配置文件配置你最新的内核,那就输入下面的命令。如果你对配置有任何调整,你可以选择Y或者N,或者仅仅是按Enter键继续。

# make oldconfig

5. 编译Linux内核

下一步,我们会执行make命令来编译内核4.0。取决于你的系统配置,编译至少需要20-30分钟。

注:如果编译内核的时候出现bc command not found的错误,你可以用yum install bc命令安装bc修复这个错误。

# make
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0
Linux:如何在Ubuntu/CentOS上安装Linux内核4.0

6. 安装Linux内核4.0

编译完成后,我们终于要在你的Linux系统上安装内核了。下面的命令会在/boot目录下创建文件并且在Grub 菜单中新建一个内核条目。

# make modules_install install

7. 验证内核

安装完最新的内核4.0后我们希望能验证它。做这些我们只需要在终端中输入以下命令。如果所有都进展顺利,我们会看到内核版本,例如4.0出现在输出列表中。

# uname -r

结论

好了,我们成功地在我们的CentOS 7操作系统上安装了最新的Linux内核版本4.0。通常并不需要升级linux内核,因为和之前版本运行良好的硬件可能并不适合新的版本。我们要确保它包括能使你的硬件正常工作的功能和配件。但大部分情况下,新的稳定版本内核能使你的硬件性能更好。因此,如果你有任何问题,评论,反馈,请在下面的评论框中注明,让我们知道需要增加或者删除什么问题。多谢!享受最新的稳定版Linux内核4.0吧 🙂


via: http://linoxide.com/how-tos/install-linux-kernel-4-0-elrepo-source/

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

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

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

Linux:后Hadoop时代的大数据架构

提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年的历史了,很多东西发生了变化,版本也从0.x 进化到目前的2.6版本。我把2012年后定义成后Hadoop平台时代,这不是说不用Hadoop,而是像NoSQL (Not Only SQL)那样,有其他的选型补充。我在知乎上也写过Hadoop的一些入门文章 如何学习Hadoop – 董飞的回答,为了给大家有个铺垫,简单讲一些相关开源组件。

背景篇

  • Hadoop: 开源的数据分析平台解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理。适合处理非结构化数据,包括HDFS,MapReduce基本组件。
  • HDFS:提供了一种跨服务器的弹性数据存储系统。
  • MapReduce:技术提供了感知数据位置的标准化处理流程:读取数据,对数据进行映射(Map),使用某个键值对数据进行重排,然后对数据进行化简(Reduce)得到最终的输出。
  • Amazon Elastic Map Reduce(EMR): 托管的解决方案,运行在由Amazon Elastic Compute Cloud(EC2)和Simple Strorage Service(S3)组成的网络规模的基础设施之上。如果你需要一次性的或不常见的大数据处理,EMR可能会为你节省开支。但EMR是高度优化成与S3 中的数据一起工作,会有较高的延时。
  • Hadoop 还包含了一系列技术的扩展系统,这些技术主要包括了Sqoop、Flume、Hive、Pig、Mahout、Datafu和HUE等。
    • Pig:分析大数据集的一个平台,该平台由一种表达数据分析程序的高级语言和对这些程序进行评估的基础设施一起组成。
    • Hive:用于Hadoop的一个数据仓库系统,它提供了类似于SQL的查询语言,通过使用该语言,可以方便地进行数据汇总,特定查询以及分析。
    • Hbase:一种分布的、可伸缩的、大数据储存库,支持随机、实时读/写访问。
    • Sqoop:为高效传输批量数据而设计的一种工具,其用于Apache Hadoop和结构化数据储存库如关系数据库之间的数据传输。
    • Flume:一种分布式的、可靠的、可用的服务,其用于高效地搜集、汇总、移动大量日志数据。
    • ZooKeeper:一种集中服务,其用于维护配置信息,命名,提供分布式同步,以及提供分组服务。
  • Cloudera:最成型的Hadoop发行版本,拥有最多的部署案例。提供强大的部署、管理和监控工具。开发并贡献了可实时处理大数据的Impala项目。
  • Hortonworks:使用了100%开源Apache Hadoop提供商。开发了很多增强特性并提交至核心主干,这使得Hadoop能够在包括Windows Server和Azure在内平台上本地运行。
  • MapR:获取更好的性能和易用性而支持本地Unix文件系统而不是HDFS。提供诸如快照、镜像或有状态的故障恢复等高可用性特性。领导着Apache Drill项目,是Google的Dremel的开源实现,目的是执行类似SQL的查询以提供实时处理。

原理篇

数据存储

我们的目标是做一个可靠的,支持大规模扩展和容易维护的系统。计算机里面有个locality(局部性定律),如图所示。从下到上访问速度越来越快,但存储代价更大。

相对内存,磁盘和SSD就需要考虑数据的摆放, 因为性能会差异很大。磁盘好处是持久化,单位成本便宜,容易备份。但随着内存便宜,很多数据集合可以考虑直接放入内存并分布到各机器上,有些基于 key-value, Memcached用在缓存上。内存的持久化可以通过 (带电池的RAM),提前写入日志再定期做Snapshot或者在其他机器内存中复制。当重启时需要从磁盘或网络载入之前状态。其实写入磁盘就用在追加日 志上面 ,读的话就直接从内存。像VoltDB, MemSQL,RAMCloud 关系型又基于内存数据库,可以提供高性能,解决之前磁盘管理的麻烦。

HyperLogLog & Bloom Filter & CountMin Sketch

都是是应用于大数据的算法,大致思路是用一组相互独立的哈希函数依次处理输入。HyperLogLog 用来计算一个很大集合的基数(即合理总共有多少不相同的元素),对哈希值分块计数:对高位统计有多少连续的0;用低位的值当做数据块。 BloomFilter,在预处理阶段对输入算出所有哈希函数的值并做出标记。当查找一个特定的输入是否出现过,只需查找这一系列的哈希函数对应值上有没 有标记。对于BloomFilter,可能有False Positive,但不可能有False Negative。BloomFilter可看做查找一个数据有或者没有的数据结构(数据的频率是否大于1)。CountMin Sketch在BloomFilter的基础上更进一步,它可用来估算某一个输入的频率(不局限于大于1)。

CAP Theorem

简单说是三个特性:一致性,可用性和网络分区,最多只能取其二。设计不同类型系统要多去权衡。分布式系统还有很多算法和高深理论,比如:Paxos算法(paxos分布式一致性算法–讲述诸葛亮的反穿越),Gossip协议(Cassandra学习笔记之Gossip协议),Quorum (分布式系统)时间逻辑,向量时钟(一致性算法之四: 时间戳和向量图),拜占庭将军问题二阶段提交等,需要耐心研究。

技术篇

来自:http://thinkbig.teradata.com/leading_big_data_technologies/big-data-reference-architecture/

根据不同的延迟要求(SLA),数据量存储大小, 更新量多少,分析需求,大数据处理的架构也需要做灵活的设计。上图就描述了在不同领域中大数据组件。

说大数据的技术还是要先提Google,Google 新三辆马车,Spanner, F1, Dremel

Spanner高可扩展、多版本、全球分布式外加同步复制特性的谷歌内部数据库,支持外部一致性的分布式事务;设计目标是横跨全球上百个数据中心,覆盖百万台服务器,包含万亿条行记录!(Google就是这么霸气^-^)

F1: 构建于Spanner之上,在利用Spanner的丰富特性基础之上,还提供分布式SQL、事务一致性的二级索引等功能,在AdWords广告业务上成功代替了之前老旧的手工MySQL Shard方案。

Dremel: 一种用来分析信息的方法,它可以在数以千计的服务器上运行,类似使用SQL语言,能以极快的速度处理网络规模的海量数据(PB数量级),只需几秒钟时间就能完成。

Spark

2014年最火的大数据技术Spark,有什么关于 Spark 的书推荐? – 董飞的回答 做了介绍。主要意图是基于内存计算做更快的数据分析。同时支持图计算,流式计算和批处理。Berkeley AMP Lab的核心成员出来成立公司Databricks开发Cloud产品。

Flink

使用了一种类似于SQL数据库查询优化的方法,这也是它与当前版本的Apache Spark的主要区别。它可以将全局优化方案应用于某个查询之上以获得更佳的性能。

Kafka

Announcing the Confluent Platform 1.0 Kafka 描述为 LinkedIn 的“中枢神经系统”,管理从各个应用程序汇聚到此的信息流,这些数据经过处理后再被分发到各处。不同于传统的企业信息列队系统,Kafka 是以近乎实时的方式处理流经一个公司的所有数据,目前已经为 LinkedIn, Netflix, Uber 和 Verizon 建立了实时信息处理平台。Kafka 的优势就在于近乎实时性。

Storm

Handle Five Billion Sessions a Day in Real Time,Twitter的实时计算框架。所谓流处理框架,就是一种分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易。经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。

Samza

LinkedIn主推的流式计算框架。与其他类似的Spark,Storm做了几个比较。跟Kafka集成良好,作为主要的存储节点和中介。

Lambda architecture

Nathan写了文章《如何去打败CAP理论》How to beat the CAP theorem,提出Lambda Architecture,主要思想是对一些延迟高但数据量大的还是采用批处理架构,但对于即时性实时数据使用流式处理框架,然后在之上搭建一个服务层去合并两边的数据流,这种系统能够平衡实时的高效和批处理的Scale,看了觉得脑洞大开,确实很有效,被很多公司采用在生产系统中。

Summingbird

Lambda架构的问题要维护两套系统,Twitter开发了Summingbird来做到一次编程,多处运行。将批处理和流处理无缝连接,通过整合批处理与流处理来减少它们之间的转换开销。下图就解释了系统运行时。

NoSQL

数据传统上是用树形结构存储(层次结构),但很难表示多对多的关系,关系型数据库就是解决这个难题,最近几年发现关系型数据库也不灵了,新型NoSQL出现 如Cassandra,MongoDB,Couchbase。NoSQL 里面也分成这几类,文档型,图运算型,列存储,key-value型,不同系统解决不同问题。没一个one-size-fits-all 的方案。

Cassandra

大数据架构中,Cassandra的主要作用就是存储结构化数据。DataStax的Cassandra是一种面向列的数据库,它通过分布式架构提供高可用性及耐用性的服务。它实现了超大规模的集群,并提供一种称作“最终一致性”的一致性类型,这意味着在任何时刻,在不同服务器中的相同数据库条目可以有不同的值。

SQL on Hadoop

开源社区业出现了很多 SQL-on-Hadoop的项目,着眼跟一些商业的数据仓库系统竞争。包括Apache Hive, Spark SQL, Cloudera Impala, Hortonworks Stinger, Facebook Presto, Apache Tajo,Apache Drill。有些是基于Google Dremel设计。

Impala

Cloudera公司主导开发的新型查询系统,它提供SQL语义,能够查询存储在Hadoop的HDFS和HBase中的PB级大数据,号称比Hive快5-10倍,但最近被Spark的风头给罩住了,大家还是更倾向于后者。

Drill

Apache社区类似于Dremel的开源版本—Drill。一个专为互动分析大型数据集的分布式系统。

Druid

在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个高级的索引结构,来达成在秒级以内对十亿行级别的表进行任意的探索分析。

Berkeley Data Analytics Stack

上面说道Spark,在Berkeley AMP lab 中有个更宏伟的蓝图,就是BDAS,里面有很多明星项目,除了Spark,还包括:

Mesos:一个分布式环境的资源管理平台,它使得Hadoop、MPI、Spark作业在统一资源管理环境下执行。它对Hadoop2.0支持很好。Twitter,Coursera都在使用。

Tachyon:是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和MapReduce那样。项目发起人李浩源说目前发展非常快,甚至比Spark当时还要惊人,已经成立创业公司Tachyon Nexus.

BlinkDB:也很有意思,在海量数据上运行交互式 SQL 查询的大规模并行查询引擎。它允许用户通过权衡数据精度来提升查询响应时间,其数据的精度被控制在允许的误差范围内。

Cloudera

Hadoop老大哥提出的经典解决方案。

HDP (Hadoop Data Platform)

Hortonworks 提出的架构选型。

Redshift

Amazon RedShift是 ParAccel一个版本。它是一种(massively parallel computer)架构,是非常方便的数据仓库解决方案,SQL接口,跟各个云服务无缝连接,最大特点就是快,在TB到PB级别非常好的性能,我在工作中 也是直接使用,它还支持不同的硬件平台,如果想速度更快,可以使用SSD。

Netflix

完全基于AWS的数据处理解决方案。

Intel

参考链接

The Hadoop Ecosystem Table

How to beat the CAP theorem

Lambda Architecture

Questioning the Lambda Architecture

来源:http://zhuanlan.zhihu.com/donglaoshi/19962491

Linux:Mydumper – MySQL数据库备份工具

Mydumper 是 MySQL 数据库服务器备份工具,它比 MySQL 自带的 mysqldump 快很多。它还有在转储的同时获取远程服务器二进制日志文件的能力。

Linux:Mydumper - MySQL数据库备份工具
Linux:Mydumper – MySQL数据库备份工具

Mydumper 的优势

  • 并行能力 (因此有高速度) 和性能 (高效的代码避免了耗费 CPU 处理能力的字符集转换过程)
  • 更容易管理输出 (每个表都对应独立的文件,转储元数据等,便于查看/解析数据)
  • 一致性 :跨线程维护快照, 提供精确的主从日志定位等。
  • 可管理性 : 支持用 PCRE 来包含/排除指定的数据库和表(LCTT译注:PCRE,Perl Compatible Regular Expression,Perl兼容正则表达式)

在Ubuntu上安装 mydumper

打开终端运行以下命令

sudo apt-get install mydumper

使用 Mydumper

语法

mydumper [options]

应用程序选项:

  • -B, –database 要转储的数据库
  • -T, –tables-list 逗号分隔的转储表列表(不会被正则表达式排除)
  • -o, –outputdir 保存输出文件的目录
  • -s, –statement-size 插入语句的字节大小, 默认是1000000个字节
  • -r, –rows 把表按行数切块
  • -c, –compress 压缩输出文件
  • -e, –build-empty-files 空表也输出文件
  • -x, –regex 匹配‘db.table’的正则表达式
  • -i, –ignore-engines 以逗号分隔的被忽略的存储引擎列表
  • -m, –no-schemas 不转储表架构
  • -k, –no-locks 不执行临时共享读锁。警告: 这会导致备份的不一致性
  • -l, –long-query-guard 设置长查询的计时器秒数,默认是60秒
  • –kill-long-queries 杀死长查询 (而不是退出程序)
  • -b, –binlogs 获取二进制日志文件快照并转储数据
  • -D, –daemon 开启守护进程模式
  • -I, –snapshot-interval 每个转储快照之间的间隔时间(分钟), 需要开启 –daemon, 默认是60分钟
  • -L, –logfile 日志文件的名字,默认是stdout
  • -h, –host 要连接的主机
  • -u, –user 有转储权限的用户名
  • -p, –password 用户密码
  • -P, –port 连接的TCP/IP端口
  • -S, –socket 用于连接的Unix套接字文件
  • -t, –threads 使用的线程数,默认是4
  • -C, –compress-protocol 在MySQL连接上使用压缩
  • -V, –version 查看程序版本号
  • -v, –verbose 输出信息的等级, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认是2

Mydumper 例子

mydumper
--database=$DB_NAME
--host=$DB_HOST
--user=$DB_USER
--password=$DB_PASS
--outputdir=$DB_DUMP
--rows=500000
--compress
--build-empty-files
--threads=2
--compress-protocol

Mydumper 输出数据的说明

Mydumper 不直接指定输出的文件,而是输出到文件夹的文件中。–outputdir 选项指定要使用的目录名称。

输出分为两部分

表结构

对数据库中的每个表,创建一个包含 CREATE TABLE 语句的文件。文件命名为:

dbname.tablename-schema.sql.gz

数据

每个表名跟着按 –rows 参数所切块的数量, 创建文件名字为:

dbname.tablename.0000n.sql.gz

“n”从0开始.

你可以使用Myloader恢复这些备份

myloader
--database=$DB_NAME
--directory=$DB_DUMP
--queries-per-transaction=50000
--threads=10
--compress-protocol
--verbose=3

via: http://www.ubuntugeek.com/mydumper-mysql-database-backup-tool.html

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

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

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

Linux:怎样用 WPScan,Nmap 和 Nikto 扫描和检查一个 WordPress 站点的安全性

介绍

数百万个网站用着 WordPress ,这当然是有原因的。WordPress 是众多内容管理系统中对开发者最友好的,本质上说你可以用它做任何事情。不幸的是,每天都有些吓人的报告说某个主要的网站被黑了,或者某个重要的数据库被泄露了之类的,吓得人一愣一愣的。

如果你还没有安装 WordPress ,可以看下下面的文章。

在基于 Debian 的系统上:

在基于 RPM 的系统上:

我之前的文章 如何安全加固 WordPress 站点 里面列出的备忘录为读者维护 WordPress 的安全提供了一点帮助。

在这篇文章里面,我将介绍 wpscan 的安装过程,以及怎样使用 wpscan 来定位那些已知的会让你的站点变得易受攻击的插件和主题。还有怎样安装和使用一款免费的网络探索和攻击的安全扫描软件 nmap 。最后展示的是使用 nikto 的步骤。

Linux:怎样用 WPScan,Nmap 和 Nikto 扫描和检查一个 WordPress 站点的安全性
Linux:怎样用 WPScan,Nmap 和 Nikto 扫描和检查一个 WordPress 站点的安全性

(题图来自:codersmount.com)

用 WPScan 测试 WordPress 中易受攻击的插件和主题

WPScan 是一个 WordPress 黑盒安全扫描软件,用 Ruby 写成,它是专门用来寻找已知的 WordPress 的弱点的。它为安全专家和 WordPress 管理员提供了一条评估他们的 WordPress 站点的途径。它的基于开源代码,在 GPLv3 下发行。

下载和安装 WPScan

在我们开始安装之前,很重要的一点是要注意 wpscan 不能在 Windows 下工作,所以你需要使用一台 Linux 或者 OS X 的机器来完成下面的事情。如果你只有 Windows 的系统,拿你可以下载一个 Virtualbox 然后在虚拟机里面安装任何你喜欢的 Linux 发行版本。

WPScan 的源代码放在 Github 上,所以需要先安装 git(LCTT 译注:其实你也可以直接从 Github 上下载打包的源代码,而不必非得装 git )。

sudo apt-get install git

git 装好了,我们就要安装 wpscan 的依赖包了。

sudo apt-get install libcurl4-gnutls-dev libopenssl-ruby libxml2 libxml2-dev libxslt1-dev ruby-dev ruby1.9.3

把 wpscan 从 github 上 clone 下来。

git clone https://github.com/wpscanteam/wpscan.git

现在我们可以进入这个新建立的 wpscan 目录,通过 bundler 安装必要的 ruby 包。

cd wpscan
sudo gem install bundler && bundle install --without test development

现在 wpscan 装好了,我们就可以用它来搜索我们 WordPress 站点潜在的易受攻击的文件。wpcan 最重要的方面是它能列出不仅是插件和主题,也能列出用户和缩略图的功能。WPScan 也可以用来暴力破解 WordPress —— 但这不是本文要讨论的内容。

更新 WPScan

ruby wpscan.rb --update

列举插件

要列出所有插件,只需要加上 “–enumerate p” 参数,就像这样:

ruby wpscan.rb --url http(s)://www.yoursiteurl.com --enumerate p

或者仅仅列出易受攻击的插件:

ruby wpscan.rb --url http(s)://www.yoursiteurl.com --enumerate vp

下面是一些例子:

| Name: ukiscet
| Location: http://********.com/wp-content/plugins/akismet/
| Name: audio-player
| Location: http://********.com/wp-content/plugins/audio-player/
|
| * Title: Audio Player - player.swf playerID Parameter XSS
| * Reference: http://seclists.org/bugtraq/2013/Feb/35
| * Reference: http://secunia.com/advisories/52083
| * Reference: http://osvdb.org/89963
| * Fixed in: 2.0.4.6
| Name: bbpress - v2.3.2
| Location: http://********.com/wp-content/plugins/bbpress/
| Readme: http://********.com/wp-content/plugins/bbpress/readme.txt
|
| * Title: BBPress - Multiple Script Malformed Input Path Disclosure
| * Reference: http://xforce.iss.net/xforce/xfdb/78244
| * Reference: http://packetstormsecurity.com/files/116123/
| * Reference: http://osvdb.org/86399
| * Reference: http://www.exploit-db.com/exploits/22396/
|
| * Title: BBPress - forum.php page Parameter SQL Injection
| * Reference: http://xforce.iss.net/xforce/xfdb/78244
| * Reference: http://packetstormsecurity.com/files/116123/
| * Reference: http://osvdb.org/86400
| * Reference: http://www.exploit-db.com/exploits/22396/
| Name: contact
| Location: http://********.com/wp-content/plugins/contact/

列举主题

列举主题和列举插件差不多,只要用”–enumerate t”就可以了。

ruby wpscan.rb --url http(s)://www.host-name.com --enumerate t

或者只列出易受攻击的主题:

ruby wpscan.rb --url http(s)://www.host-name.com --enumerate vt

例子的输出:

| Name: path
| Location: http://********.com/wp-content/themes/path/
| Style URL: http://********.com/wp-content/themes/path/style.css
| Description:
| Name: pub
| Location: http://********.com/wp-content/themes/pub/
| Style URL: http://********.com/wp-content/themes/pub/style.css
| Description:
| Name: rockstar
| Location: http://********.com/wp-content/themes/rockstar/
| Style URL: http://********.com/wp-content/themes/rockstar/style.css
| Description:
|
| * Title: WooThemes WooFramework Remote Unauthenticated Shortcode Execution
| * Reference: https://gist.github.com/2523147
| Name: twentyten
| Location: http://********.com/wp-content/themes/twentyten/
| Style URL: http://********.com/wp-content/themes/twentyten/style.css
| Description:

列举用户

WPscan 也可以用来列举某个 WordPress 站点的用户和有效的登录记录。攻击者常常这么做——为了获得一个用户清单,好进行暴力破解。

ruby wpscan.rb --url http(s)://www.host-name.com --enumerate u

列举 Timthumb 文件

关于 WPscan ,我要说的最后一个功能是列举 timthub (缩略图)相关的文件。近年来,timthumb 已经成为攻击者眼里的一个常见目标,因为无数的漏洞被找出来并发到论坛上、邮件列表等等地方。用下面的命令可以通过 wpscan 找出易受攻击的 timthub 文件:

ruby wpscan.rb --url http(s)://www.host-name.com --enumerate tt

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

Linux:Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or dir

提问: 我尝试着在Linux中编译视频编码器,但是编译提示出错:“fatal error: lame/lame.h: No such file or directory”, 我该如何修复这个错误?

下面的编译错误说明你的系统没有安装LAME库和它的开发文件。

fatal error: lame/lame.h: No such file or directory

LAME(”LAME Ain’t an MP3 Encoder”)是一个流行的LPGL授权的MP3编码器。许多视频编码工具使用或者支持LAME,如 FFmpeg、 VLC、 Audacity、 K3b、 RipperX等。

要修复这个编译错误,你需要安装LAME库和开发文件,按照下面的来。

在Debian、Ubuntu或者Linux Mint上安装LAME库和安装文件

Debian和它的衍生版在基础库中已经提供了LAME库,因此可以用apt-get直接安装。

$ sudo apt-get install libmp3lame-dev

在Fedora、CentOS/RHEL上安装LAME库和安装文件

在基于RED HAT的版本中,LAME在RPM Fusion的免费仓库中就有,那么你需要先设置RPM Fusion (免费)仓库

RPM Fusion设置完成后,如下安装LAME开发包。

$ sudo yum --enablerepo=rpmfusion-free-updates install lame-devel

在2015年1月,RPM Fusion仓库已经不可以在CentOS/RHEL 7中可用了。因此,这个方法不能用在CentOS/RHEL 7 中。这时你就要从源码安装LAME库了(下面会描述)。

在Debian、Ubuntu或者Linux Mint中从源码编译LAME库

如果你希望用不同的编译选项安装自定义的LAME库,你需要自己编译。下面是怎样在基于Debian的系统中编译和安装LAME库(和它的头文件)。

$ sudo apt-get install gcc git
$ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ tar -xzf lame-3.99.5.tar.gz
$ cd lame-3.99.5
$ ./configure --enable-static --enable-shared
$ make
$ sudo make install

注意当你运行上面的配置步骤时,你可以根据你的需求启用会禁止不同的选项。运行下面的命令查看不同的编译选项。

$ ./configure --help

共享/静态的LAME库默认安装在 /usr/local/lib。要让共享库可以被其他程序使用,完成最后一步:

用编辑器打开 /etc/ld.so.conf,加入下面这行。

/usr/local/lib

接着运行下面的命令,这会将/usr/local/lib中的共享库添加到动态加载缓存中,因此LAME库就可以被其他程序调用了。

$ sudo ldconfig

在Fedora或者CentOS/RHEL中从源码编译LAME库

如果你的发行版(比如 CentOS 7)没有提供预编译的LAME库,或者你想要自定义LAME库,你需要从源码自己编译。下面是在基于Red Hat的系统中编译安装LAME库的方法。

$ sudo yum install gcc git
$ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ tar -xzf lame-3.99.5.tar.gz
$ cd lame-3.99.5
$ ./configure --enable-static --enable-shared
$ make
$ sudo make install

运行make之前,你可以在configure中带上合适的选项自定义编译选项。你可以用下面的命令检查可用的选项:

$ ./configure --help

最后你需要完成最后一步,因为安装在/usr/local/lib的LAME共享库可能在其他程序中不可用。

在/etc/ld.so.conf中添加下面这行:

/usr/local/lib

接着运行下面的命令。这会添加 /usr/local/lib中的共享库(包括LAME)到动态加载缓存中,让其他程序可以访问到。

$ sudo ldconfig
Linux:Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or dir
Linux:Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or dir

via: http://ask.xmodulo.com/fatal-error-lame-no-such-file-or-directory.html

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

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

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

Linux:如何设置 Linux 上 SSH 登录的 Email 提醒

Linux:如何设置 Linux 上 SSH 登录的 Email 提醒
Linux:如何设置 Linux 上 SSH 登录的 Email 提醒

虚拟私有服务器 (VPS)上启用 SSH 服务使得该服务器暴露到互联网中,为黑客攻击提供了机会,尤其是当 VPS 还允许root 直接访问时。VPS 应该为每次 SSH 登录成功尝试配置一个自动的 email 警告。 VPS 服务器的所有者会得到各种 SSH 服务器访问日志的通知,例如登录者、登录时间以及来源 IP 地址等信息。这是一个对于服务器拥有者来说,保护服务器避免未知登录尝试的重要安全关注点。这是因为如果黑客使用暴力破解方式通过 SSH 来登录到你的 VPS 的话,后果很严重。在本文中,我会解释如何在 CentOS 6、 CentOS 7、 RHEL 6 和 RHEL 7上为所有的 SSH 用户登录设置一个 email 警告。

  1. 使用root用户登录到你的服务器;

  2. 在全局源定义处配置警告(/etc/bashrc),这样就会对 root 用户以及普通用户都生效:

    [root@vps ~]# vi /etc/bashrc
    

    将下面的内容加入到上述文件的尾部。

    echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com
    
  3. 你也可以选择性地让警告只对 root 用户生效:

    [root@vps ~]# vi .bashrc
    

    将下面的内容添加到/root/.bashrc的尾部:

    echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com
    

    整个配置文件样例:

    # .bashrc
    # User specific aliases and functions
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com
    
  4. 你也可以选择性地让警告只对特定的普通用户生效(例如 skytech):

    [root@vps ~]# vi /home/skytech/.bashrc
    

    将下面的内容加入到/home/skytech/.bashrc文件尾部:

    echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com
    

via: http://www.ehowstuff.com/how-to-get-email-alerts-for-ssh-login-on-linux-server/

作者:skytech 译者:theo-l 校对:wxy

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

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

Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

这是一个关于怎样在你的 CentOS 7 上安装配置 VNC 服务的教程。当然这个教程也适合 RHEL 7 。在这个教程里,我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置 VNC 服务器

我们都知道,作为一个系统管理员,大多数时间是通过网络管理服务器的。在管理服务器的过程中很少会用到图形界面,多数情况下我们只是用 SSH 来完成我们的管理任务。在这篇文章里,我们将配置 VNC 来提供一个连接我们 CentOS 7 服务器的方法。VNC 允许我们开启一个远程图形会话来连接我们的服务器,这样我们就可以通过网络远程访问服务器的图形界面了。

VNC 服务器是一个自由开源软件,它可以让用户可以远程访问服务器的桌面环境。另外连接 VNC 服务器需要使用 VNC viewer 这个客户端。

Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

一些 VNC 服务器的优点:

  • 远程的图形管理方式让工作变得简单方便。
  • 剪贴板可以在 CentOS 服务器主机和 VNC 客户端机器之间共享。
  • CentOS 服务器上也可以安装图形工具,让管理能力变得更强大。
  • 只要安装了 VNC 客户端,通过任何操作系统都可以管理 CentOS 服务器了。
  • 比 ssh 图形转发和 RDP 连接更可靠。

那么,让我们开始安装 VNC 服务器之旅吧。我们需要按照下面的步骤一步一步来搭建一个可用的 VNC。

首先,我们需要一个可用的桌面环境(X-Window),如果没有的话要先安装一个。

注意:以下命令必须以 root 权限运行。要切换到 root ,请在终端下运行“sudo -s”,当然不包括双引号(“”)

1. 安装 X-Window

首先我们需要安装 X-Window,在终端中运行下面的命令,安装会花费一点时间。

# yum check-update
# yum groupinstall "X Window System"
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
#yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
### 设置默认启动图形界面
# unlink /etc/systemd/system/default.target
# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
# reboot

在服务器重启之后,我们就有了一个工作着的 CentOS 7 桌面环境了。

现在,我们要在服务器上安装 VNC 服务器了。

2. 安装 VNC 服务器

现在要在我们的 CentOS 7 上安装 VNC 服务器了。我们需要执行下面的命令。

# yum install tigervnc-server -y
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

3. 配置 VNC

然后,我们需要在 /etc/systemd/system/目录里创建一个配置文件。我们可以将 /lib/systemd/sytem/vncserver@.service拷贝一份配置文件范例过来。

# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

copying vnc server configuration

接着我们用自己最喜欢的编辑器(这儿我们用的 nano )打开 /etc/systemd/system/vncserver@:1.service,找到下面这几行,用自己的用户名替换掉 。举例来说,我的用户名是 linoxide 所以我用 linoxide 来替换掉 :

ExecStart=/sbin/runuser -l  -c "/usr/bin/vncserver %i"
PIDFile=/home//.vnc/%H%i.pid

替换成

ExecStart=/sbin/runuser -l linoxide -c "/usr/bin/vncserver %i"
PIDFile=/home/linoxide/.vnc/%H%i.pid

如果是 root 用户则

ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

好了,下面重启 systemd 。

# systemctl daemon-reload

最后还要设置一下用户的 VNC 密码。要设置某个用户的密码,必须要有能通过 sudo 切换到用户的权限,这里我用 linoxide 的权限,执行“su linoxide”就可以了。

# su linoxide
$ sudo vncpasswd
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

确保你输入的密码多于6个字符

4. 开启服务

用下面的命令(永久地)开启服务:

$ sudo systemctl enable vncserver@:1.service

启动服务。

$ sudo systemctl start vncserver@:1.service

5. 防火墙设置

我们需要配置防火墙来让 VNC 服务正常工作。

$ sudo firewall-cmd --permanent --add-service vnc-server
$ sudo systemctl restart firewalld.service
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

现在就可以用 IP 和端口号(LCTT 译注:例如 192.168.1.1:1 ,这里的端口不是服务器的端口,而是视 VNC 连接数的多少从1开始排序)来连接 VNC 服务器了。

6. 用 VNC 客户端连接服务器

好了,现在已经完成了 VNC 服务器的安装了。要使用 VNC 连接服务器,我们还需要一个在本地计算机上安装的仅供连接远程计算机使用的 VNC 客户端。

Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器
Linux:怎样在 CentOS 7.0 上安装和配置 VNC 服务器

你可以用像 Tightvnc viewerRealvnc viewer 的客户端来连接到服务器。

要用更多的用户连接,需要创建配置文件和端口,请回到第3步,添加一个新的用户和端口。你需要创建 vncserver@:2.service并替换配置文件里的用户名和之后步骤里相应的文件名、端口号。请确保你登录 VNC 服务器用的是你之前配置 VNC 密码的时候使用的那个用户名

VNC 服务本身使用的是5900端口。鉴于有不同的用户使用 VNC ,每个人的连接都会获得不同的端口。配置文件名里面的数字告诉 VNC 服务器把服务运行在5900的子端口上。在我们这个例子里,第一个 VNC 服务会运行在5901(5900 + 1)端口上,之后的依次增加,运行在5900 + x 号端口上。其中 x 是指之后用户的配置文件名 vncserver@:x.service里面的 x 。

在建立连接之前,我们需要知道服务器的 IP 地址和端口。IP 地址是一台计算机在网络中的独特的识别号码。我的服务器的 IP 地址是96.126.120.92,VNC 用户端口是1。

执行下面的命令可以获得服务器的公网 IP 地址(LCTT 译注:如果你的服务器放在内网或使用动态地址的话,可以这样获得其公网 IP 地址)。

# curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

总结

好了,现在我们已经在运行 CentOS 7 / RHEL 7 的服务器上安装配置好了 VNC 服务器。VNC 是自由开源软件中最简单的一种能实现远程控制服务器的工具,也是一款优秀的 Teamviewer Remote Access 替代品。VNC 允许一个安装了 VNC 客户端的用户远程控制一台安装了 VNC 服务的服务器。下面还有一些经常使用的相关命令。好好玩!

其他命令:

  • 关闭 VNC 服务。

    # systemctl stop vncserver@:1.service
    
  • 禁止 VNC 服务开机启动。

    # systemctl disable vncserver@:1.service
    
  • 关闭防火墙。

    # systemctl stop firewalld.service
    

via: http://linoxide.com/linux-how-to/install-configure-vnc-server-centos-7-0/

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

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

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

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本。你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级、安装新的软件包、配置特定服务和应用程序等操作。

这篇文章介绍了 “安装完 RHEL/CentOS 7 后需要做的 30 件事情”。阅读帖子的时候请先完成 RHEL/CentOS 最小化安装,这是首选的企业和生产环境。如果还没有,你可以按照下面的指南,它会告诉你两者的最小化安装方法。

我们会基于工业标准的需求来介绍以下列出的这些重要工作。我们希望这些东西在你配置服务器的时候能有所帮助。

  1. 注册并启用红帽订阅
  2. 使用静态 IP 地址配置网络
  3. 设置服务器的主机名称
  4. 更新或升级最小化安装的 CentOS
  5. 安装命令行 Web 浏览器
  6. 安装 Apache HTTP 服务器
  7. 安装 PHP
  8. 安装 MariaDB 数据库
  9. 安装并配置 SSH 服务器
  10. 安装 GCC (GNU 编译器集)
  11. 安装 Java
  12. 安装 Apache Tomcat
  13. 安装 Nmap 检查开放端口
  14. 配置防火墙
  15. 安装 Wget
  16. 安装 Telnet
  17. 安装 Webmin
  18. 启用第三方库
  19. 安装 7-zip 工具
  20. 安装 NTFS-3G 驱动
  21. 安装 Vsftpd FTP 服务器
  22. 安装和配置 sudo
  23. 安装并启用 SELinux
  24. 安装 Rootkit Hunter
  25. 安装 Linux Malware Detect (LMD)
  26. 用 Speedtest-cli 测试服务器带宽
  27. 配置 Cron 作业
  28. 安装 Owncloud
  29. 启用 VirtualBox 虚拟化
  30. 用密码保护 GRUB

(LCTT 译注:关于 CentOS/RHEL 7的更多信息,请参考专题:http://www.linux.cn/topic-centos7.html

1. 注册并启用红帽订阅

RHEL 7 最小化安装完成后,就应该注册并启用系统红帽订阅库, 并执行一个完整的系统更新。这只当你有一个可用的红帽订阅时才能有用。你要注册才能启用官方红帽系统库,并时不时进行操作系统更新。(LCTT 译注:订阅服务是收费的)

在下面的指南中我们已经包括了一个如何注册并激活红帽订阅的详细说明。

注意: 这一步仅适用于有一个有效订阅的红帽企业版 Linux。如果你用的是 CentOS 服务器,请查看后面的章节。

2. 使用静态 IP 地址配置网络

你第一件要做的事情就是为你的 CentOS 服务器配置静态 IP 地址、路由以及 DNS。我们会使用 ip 命令代替 ifconfig 命令。当然,ifconfig 命令对于大部分 Linux 发行版来说还是可用的,还能从默认库安装。

# yum install net-tools             [它提供 ifconfig 工具,如果你不习惯 ip 命令,还可以使用它]
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

(LCTT 译注:关于 ip 命令的使用,请参照:http://www.linux.cn/article-3631-1.html

但正如我之前说,我们会使用 ip 命令来配置静态 IP 地址。所以,确认你首先检查了当前的 IP 地址。

# ip addr show
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

现在用你的编辑器打开并编辑文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3 (LCTT 译注:你的网卡名称可能不同,如果希望修改为老式网卡名称,参考:http://www.linux.cn/article-4045-1.html )。这里,我使用 vi 编辑器,另外你要确保你是 root 用户才能保存更改。

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

我们会编辑文件中的四个地方。注意下面的四个地方并保证不碰任何其它的东西。也保留双引号,在它们中间输入你的数据。

IPADDR = "[在这里输入你的静态 IP]"
GATEWAY = "[输入你的默认网关]"
DNS1 = "[你的DNS 1]"
DNS2 = "[你的DNS 2]"

更改了 ‘ifcfg-enp0s3’ 之后,它看起来像下面的图片。注意你的 IP,网关和 DNS 可能会变化,请和你的 ISP(译者注:互联网服务提供商,即给你提供接入的服务的电信或 IDC) 确认。保存并退出。

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

网络详情

重启网络服务并检查 IP 是否和分配的一样。如果一切都顺利,用 Ping 查看网络状态。

# service network restart
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

重启网络服务

重启网络后,确认检查了 IP 地址和网络状态。

# ip addr show
# ping -c4 google.com
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

验证 IP 地址

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

检查网络状态

(LCTT 译注:关于设置静态 IP 地址的更多信息,请参照:http://www.linux.cn/article-3977-1.html

3. 设置服务器的主机名称

下一步是更改 CentOS 服务器的主机名称。查看当前分配的主机名称。

# echo $HOSTNAME
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

查看系统主机名称

要设置新的主机名称,我们需要编辑 ‘/etc/hostsname’ 文件并用想要的名称替换旧的主机名称。

# vi /etc/hostname
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

在 CentOS 中设置主机名称

设置完了主机名称之后,务必注销后重新登录确认主机名称。登录后检查新的主机名称。

$ echo $HOSTNAME
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

确认主机名称

你也可以用 ‘hostname’ 命令查看你当前的主机名。

$ hostname

(LCTT 译注:关于设置静态、瞬态和灵活主机名的更多信息,请参考:http://www.linux.cn/article-3937-1.html

4. 更新或升级最小化安装的 CentOS

这样做除了更新安装已有的软件最新版本以及安全升级,不会安装任何新的软件。总的来说更新(update)和升级(upgrade)是相同的,除了事实上 升级 = 更新 + 更新时进行废弃处理。

# yum update && yum upgrade
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

更新最小化安装的 CentOS 服务器

重要: 你也可以运行下面的命令,这不会弹出软件更新的提示,你也就不需要输入 ‘y’ 接受更改。

然而,查看服务器上会发生的变化总是一个好主意,尤其是在生产中。因此使用下面的命令虽然可以为你自动更新和升级,但并不推荐。

# yum -y update && yum -y upgrade

5. 安装命令行 Web 浏览器

大部分情况下,尤其是在生产环境中,我们通常用没有 GUI 的命令行安装 CentOS,在这种情况下我们必须有一个能通过终端查看网站的命令行浏览工具。为了实现这个目的,我们打算安装名为 ‘links’ 的著名工具。

# yum install links
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

Links: 命令行 Web 浏览器

请查看我们的文章 用 links 工具命令行浏览 Web 了解用 links 工具浏览 web 的方法和例子。

6. 安装 Apache HTTP 服务器

不管你因为什么原因使用服务器,大部分情况下你都需要一个 HTTP 服务器运行网站、多媒体、用户端脚本和很多其它的东西。

# yum install httpd
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

安装 Apache 服务器

如果你想更改 Apache HTTP 服务器的默认端口号(80)为其它端口,你需要编辑配置文件 ‘/etc/httpd/conf/httpd.conf’ 并查找以下面开始的行:

LISTEN 80

把端口号 ‘80’ 改为其它任何端口(例如 3221),保存并退出。

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

更改 Apache 端口

增加刚才分配给 Apache 的端口通过防火墙,然后重新加载防火墙。

允许 http 服务通过防火墙(永久)。

# firewall-cmd –add-service=http

允许 3221 号端口通过防火墙(永久)。

# firewall-cmd –permanent –add-port=3221/tcp

重新加载防火墙。

# firewall-cmd –reload

(LCTT 译注:关于 firewall 的进一步使用,请参照:http://www.linux.cn/article-4425-1.html

完成上面的所有事情之后,是时候重启 Apache HTTP 服务器了,然后新的端口号才能生效。

# systemctl restart httpd.service

现在添加 Apache 服务到系统层使其随系统自动启动。

# systemctl start httpd.service
# systemctl enable httpd.service

(LCTT 译注:关于 systemctl 的进一步使用,请参照:http://www.linux.cn/article-3719-1.html

如下图所示,用 links 命令行工具 验证 Apache HTTP 服务器。

# links 127.0.0.1
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

验证 Apache 状态


via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/

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

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

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

Linux:如何部署 Docker Registry 服务

本文阐释了怎样部署私有的 Docker Registry 服务 —— 或为公司私用,或公开给其他用户使用。例如,你公司可能需要私人的 Registry 来支持持续集成(CI)。又或,你的公司可能有大量镜像方式的产品或服务,你想以公司品牌的方式来整体提供和呈现。

Linux:如何部署 Docker Registry 服务
Linux:如何部署 Docker Registry 服务

Docker 公共的 Registry 里维护有一个默认的 registry 镜像可以用以协助该部署过程。该 Registry 镜像对本地测试足矣,但不能用于生产环境。对于生产环境,应以 docker/distribution 为基础,自行配置并构建自定义 Registry 镜像。

注意:本文中的例子在 Ubuntu 14.04 下编写及测试。如果你在不同的操作系统中运行Docker,你或许需要“翻译”这些命令,以适合你运行环境的需要。

官方镜像下的简单示例

本节中,将创建一个 Container 来运行 Docker 的官方 Registry 镜像。你将推送(Push)一个镜像到这个 Registry 服务器,然后再从该 Registry 中拉取(Pull)同一个镜像。

这是个很好的练习,有助于理解客户端与本地 Registry 的基本交互。

1、安装 Docker。

2、从 Docker 公共 Registry 中运行 hello-world 镜像。

$ docker run hello-world

run 命令自动从 Docker 的官方镜像库中将 hello-world 镜像 pull 下来。

3、在 localhost 上启动 Registry 服务。

$ docker run -p 5000:5000 registry:2.0

这将在 DOCKER_HOST 上启动一个 Registry 服务,并在 5000 端口监听。4、列出镜像。

$ docker images
REPOSITORY     TAG     IMAGE ID      CREATED       VIRTUAL SIZE
registry       2.0     bbf0b6ffe923  3 days ago    545.1 MB
golang         1.4     121a93c90463  5 days ago    514.9 MB
hello-world    latest  e45a5af57b00  3 months ago  910 B

这个列表应当包括一个由先前运行而得来的 hello-world 镜像。

5、为本地 repoistory 重新标记 hello-world 镜像。

$ docker tag hello-world:latest localhost:5000/hello-mine:latest

此命令使用 [REGISTRYHOST/]NAME[:TAG] 格式为 hello-world:latest 重新打标。REGISTRYHOST在此例中是 localhost。在 Mac OSX 环境中,得把 localhost 换成 $(boot2docker ip):5000

6、列出新镜像。

$ docker images
REPOSITORY                  TAG          IMAGE ID      CREATED       VIRTUAL SIZE
registry                    2.0     bbf0b6ffe923  3 days ago    545.1 MB
golang                      1.4     121a93c90463  5 days ago    514.9 MB
hello-world                 latest  e45a5af57b00  3 months ago  910 B
localhost:5000/hello-mine   latest  ef5a5gf57b01  3 months ago  910 B

可以看到,新镜像已经出现在列表中。

7、推送新镜像到本地 Registry 中。

$ docker push localhost:5000/hello-mine:latest
The push refers to a repository [localhost:5000/hello-mine] (len: 1)
e45a5af57b00: Image already exists
31cbccb51277: Image successfully pushed
511136ea3c5a: Image already exists
Digest: sha256:a1b13bc01783882434593119198938b9b9ef2bd32a0a246f16ac99b01383ef7a

8、使用 curl 命令及 Docker Registry 服务 API v2 列出 Registry 中的镜像:

$ curl -v -X GET http://localhost:5000/v2/hello-mine/tags/list
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /v2/hello-mine/tags/list HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:5000
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
< Date: Sun, 12 Apr 2015 01:29:47 GMT
< Content-Length: 40
<
{"name":"hello-mine","tags":["latest"]}
* Connection #0 to host localhost left intact

也可以通过在浏览器中访问以下地址来获取这些信息:http://localhost:5000/v2/hello-mine/tags/list

9、从你的本地环境中移除所有未使用的镜像:

$ docker rmi -f $(docker images -q -a )

此命令仅用于说明目的;移除镜像强制 run 从 Registry 而不是从本地缓存拉取。如果在这之后运行docker images,在你的镜像列表中,应该看不到任何 hello-world 或 hello-mine 的实例。

$ docker images
REPOSITORY      TAG      IMAGE ID      CREATED       VIRTUAL SIZE
registry         2.0     bbf0b6ffe923  3 days ago    545.1 MB
golang           1.4     121a93c90463  5 days ago    514.9 MB

10、试运行 hello-mine

$ docker run hello-mine
Unable to find image 'hello-mine:latest' locally
Pulling repository hello-mine
FATA[0001] Error: image library/hello-mine:latest not found

命令 run 运行失败,因为你的新镜像在 Docker 公共 Registry 中是不存在的。11、现在,尝试指定镜像的 Registry 来运行镜像:

$ docker run localhost:5000/hello-mine

如果你在这之后运行 docker images, 你会发现里面多了一个 hello-mine 的实例。

使 Docker 官方 Registry 镜像做好生产环境准备

Docker 的官方镜像只为简单的测试或除错准备。其配置对多数生产环境来讲都不适用。例如,任何能访问服务器 IP 的客户端,都能推送及拉取镜像。参看下一节,获取使该镜像做好生产环境准备的信息。

理解生产环境的部署

当部署一个用于生产环境发布的 Registry 时,须考虑如下因素:

  • BACKEND STORAGE 应在何处存储镜像?
  • ACCESS AND/OR AUTHENTICATION 用户是否应拥有全部或受控的访问权限?这取决于你为公众提供镜像服务,还是只为公司内部提供。
  • DEBUGGING 当问题或状况发生时,是否有解决这些它们的方法。日志由于可以看到问题动向,这使其很有用。
  • CACHING 快速提取镜像可能至关重要,如果依赖镜像进行测试、构建,或有其他自动化系统的话。

我们可以配置 Registry 功能特性,用以调整适配这些因素。可以在命令行里指定选项来干这个,或者更通常地,用一个 Registry 配置文件来完成此事。配置文件是 YAML 格式的。

Docker 的官方 Repository 镜像用以下配置文件做了预置:

version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
  layerinfo: inmemory
filesystem:
  rootdirectory: /tmp/registry-dev
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
  addr: localhost:5001
redis:
addr: localhost:6379
pool:
maxidle: 16
maxactive: 64
idletimeout: 300s
dialtimeout: 10ms
readtimeout: 10ms
writetimeout: 10ms
notifications:
endpoints:
  - name: local-8082
    url: http://localhost:5003/callback
    headers:
       Authorization: [Bearer ]
    timeout: 1s
    threshold: 10
    backoff: 1s
    disabled: true
  - name: local-8083
    url: http://localhost:8083/callback
    timeout: 1s
    threshold: 10
    backoff: 1s
    disabled: true

这个配置非常基本,可以看到这在生产环境下会有一些问题。例如,http 区块详述了运行 Registry 的主机的 HTTP 服务器配置,但服务器没有使用甚至是最低要求的传输层安全性(TLS)配置。接下来我们将配置这些东西。

来源:http://livedig.com/686

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

7. 安装 PHP

PHP 是用于 web 基础服务的服务器端脚本语言。它也经常被用作通用编程语言。在最小化安装的 CentOS 中安装 PHP:

# yum install php

安装完 php 之后,确认重启 Apache 服务以便在 Web 浏览器中渲染 PHP。

# systemctl restart httpd.service

下一步,通过在 Apache 文档根目录下创建下面的 php 脚本验证 PHP。

# echo -e ""  > /var/www/html/phpinfo.php

现在在 Linux 命令行中查看我们刚才创建的 PHP 文件(phpinfo.php)。

# php /var/www/html/phpinfo.php
或者
# links http://127.0.0.1/phpinfo.php
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

验证 PHP

8. 安装 MariaDB 数据库

MariaDB 是 MySQL 的一个分支。RHEL 以及它的衍生版已经从 MySQL 迁移到 MariaDB。这是一个主流的数据库管理系统,也是一个你必须拥有的工具。不管你在配置怎样的服务器,或迟或早你都会需要它。在最小化安装的 CentOS 上安装 MariaDB,如下所示:

# yum install mariadb-server mariadb
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

安装 MariaDB 数据库

启动 MariaDB 并配置它开机时自动启动。

# systemctl start mariadb.service
# systemctl enable mariadb.service

允许 mysql(mariadb) 服务通过防火墙(LCTT 译注:如果你的 MariaDB 只用在本机,则务必不要设置防火墙允许通过,使用 UNIX Socket 连接你的数据库;如果需要在别的服务器上连接数据库,则尽量使用内部网络,而不要将数据库服务暴露在公开的互联网上。)

# firewall-cmd –add-service=mysql

现在是时候确保 MariaDB 服务器安全了(LCTT 译注:这个步骤主要是设置 mysql 管理密码)。

# /usr/bin/mysql_secure_installation
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

保护 MariaDB 数据库

请阅读:

9. 安装和配置 SSH 服务器

SSH 即 Secure Shell,是 Linux 远程管理的默认协议。 SSH 是随最小化 CentOS 服务器中安装运行的最重要的软件之一。

检查当前已安装的 SSH 版本。

# SSH -V
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

检查 SSH 版本

使用更安全的 SSH 协议,而不是默认的协议,并更改端口号进一步加强安全。编辑 SSH 的配置文件 ‘/etc/ssh/ssh_config’。

去掉下面行的注释或者从协议行中删除 1,然后行看起来像这样(LCTT 译注: SSH v1 是过期废弃的不安全协议):

# Protocol 2,1 (原来)
Protocol 2 (现在)

这个改变强制 SSH 使用 协议 2,它被认为比协议 1 更安全,同时也确保在配置中更改端口号 22 为其它。

Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

保护 SSH 登录

取消 SSH 中的‘root login’, 只允许通过普通用户账号登录后才能使用 su 切换到 root,以进一步加强安全。请打开并编辑配置文件 ‘/etc/ssh/sshd_config’ 并更改 PermitRootLogin yes 为 PermitRootLogin no。

# PermitRootLogin yes (原来)
PermitRootLogin no (现在)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

取消 SSH Root 直接登录

最后,重启 SSH 服务启用更改。

# systemctl restart sshd.service

请查看:

10. 安装 GCC (GNU 编译器集)

GCC 即 GNU 编译器集,是一个 GNU 项目开发的支持多种编程语言的编译系统(LCTT 译注:在你需要自己编译构建软件时需要它)。在最小化安装的 CentOS 没有默认安装。运行下面的命令安装 gcc 编译器。

# yum install gcc
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

在 CentOS 上安装 GCC

检查安装的 gcc 版本。

# gcc --version
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

检查 GCC 版本

11. 安装 Java

Java是一种通用的基于类的,面向对象的编程语言。在最小化 CentOS 服务器中没有默认安装(LCTT 译注:如果你没有任何 Java 应用,可以不用装它)。按照下面命令从库中安装 Java。

# yum install java
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

安装 Java

检查安装的 Java 版本。

# java -version
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)
Linux:安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

检查 Java 版本


via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/2/

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

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

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

Linux:15 个‘ls’命令的面试问题(一)

Unix或类Unix系统中的“文件列表”命令“ls”是最基础并且使用的最广泛的命令行中工具之一。它是一个POSIX兼容工具,在GNU基本工具集以及BSD各种变体上都可以使用。“ls”命令可以结合大量的选项来达到想要的结果。

这篇文章的目的在于通过相关的样例来深入讨论文件列表命令。

15 ls Command Questions

15个“ls”命令问题。

1. 如何列出目录中的文件?

答:linux文件列表命令“ls”就是干这个的。

# ls

List Files

列出文件

同时,我们也可以使用“echo(回显)”命令与一个通配符(*)参数来雷锤目录中的所有文件。

# echo *

List All Files

列出所有的文件。

2. 如何只使用echo命令来只列出所有目录?

# echo */

List All Directories

列出所有的目录

3. 怎样列出一个目录中的所有文件, 包括隐藏的以“.”开头的文件?

答:我们需要将“-a”选项与“ls”命令一起使用。

# ls -a

List All Hidden Files

列出所有的隐藏文件。

4. 如何列出目录中除了 “当前目录 .”和“父目录 ..”之外的所有文件,包括隐藏文件?

答: 我们需要将“-A”选项与“ls”命令一起使用

# ls -A

Do Not List Implied

别列出指代当前目录和父目录的文件

5. 如何使用长格式打印出当前目录内容?

答: 我们需要将“-l”选项与“ls”命令一起使用。

# ls -l

List Files Long

列出文件的长格式。

上面的样例中,其输出结果看起来向下面这样。

drwxr-xr-x  5 avi tecmint      4096 Sep 30 11:31 Binary

上面的drwxr-xr-x 是文件的权限,分别代表了文件所有者,所属组以及“整个世界”。 所有者具有读(r),写(w)以及执行(x)等权限。 该文件所属组具有读(r)和执行(x)但是没有写的权限,整个世界的其他可以访问到该文件的人也具有相同权限。

  • 开头的‘d’意味着这是一个目录
  • 数字’5’表示链接数为5
  • 文件 Binary归属于用户 “avi”以及用户组 “tecmint”
  • Sep 30 11:31 表示文件最后一次的访问日期与时间。

6. 假如让你来将目录中的内容以长格式列表打印,并且显示出隐藏的“点文件”,你会如何实现?

答: 我们需要同时将”-a”和”-l”选项与“ls”命令一起使用(LCTT 译注:单字符选项可以合并写)。

# ls -la

Print Content of Directory

打印目录内容

此外,如果我们不想列出“当前目录”和”父目录”,可以将“-A”和“-l”选项同“ls”命令一起使用。

# ls -lA

7. 如何找到每个文件的创建者?

答: 我们需要结合 “–author”和 “-l”选项来打印出每个文件的创建者。

# ls --author -l

List Author Files

列出文件创建者。

8. 如何对用转义字符打印出非显示字符?

答:我们只需要使用“-b”选项来对非显示字符进行转义打印

# ls -b

Print Escape Character

9. 用指定特定的单位格式来列出文件和目录的大小,你会如何实现?

答: 在此可以同时使用选项“-block-size=scale”和“-l”,但是我们需要用特定的单位如M,K等来替换‘scale’参数。

# ls --block-size=M -l
# ls --block-size=K -l

List File Scale Format

列出文件大小单位格式。

10. 列出目录中的文件,但是不显示备份文件,即那些文件名以‘~’结尾的文件

答: 选项‘-B’赶来救驾。

# ls -B

List File Without Backup

列出非备份文件

11. 将目录中的所有文件按照名称进行排序,并显示其最后修改时间信息?

答: 为了实现这个需求,我们需要同时将“-c”和”-l”选项与命令一起使用。

# ls -cl

Sort Files

文件排序

12. 将目录中的文件按照修改时间进行排序,并显示相关联的信息。

答: 我们需要同时使用3个选项:’-l’,’-t’,’-c’ 来对文件使用修改时间排序,最新的修改时间排在最前。

# ls -ltc

Sort Files by Modification

按照修改时间对文件排序。

13. 如何控制‘ls’命令的输出颜色的有无?

答: 需要使用选项‘–color=parameter’,参数具有三种不同值,“auto(自动)”,“always(一直)”,“never(无色)”。

# ls --color=never
# ls --color=auto
# ls --color=always

ls Colorful Output

ls的输出颜色

14. 假如只需要列出目录本身,而不是目录的内容,你会如何做?

答:在此“-d”选项就会显得很顺手。

# ls -d

List Directory Entries

列出目录本身

15. 为长格式列表命令”ls -l”创建一个别名“ll”,并将其结果输出到一个文件而不是标准输出中。

答:在上述的这个场景中,我们需要将别名添加到.bashrc文件中,然后使用重定向操作符将输出写入到文件而不是标准输出中。我们将会使用编辑器nano。

# ls -a
# nano .bashrc
# ll >> ll.txt
# nano ll.txt

Create Alias for ls command

为ls命令创建别名。

先到此为止,别忘了在下面的评论中提出你们的宝贵意见,我会再次带着另外的有趣的文章在此闪亮登场。

参考阅读:


via: http://www.tecmint.com/ls-command-interview-questions/

作者:Avishek Kumar 译者:theo-l 校对:校对者ID

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

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