实用的Linux/Unix快捷键大汇总

实用的Linux/Unix快捷键大汇总,近期在工作中发现,许多同事,尤其是我们的开发者,基本不会用Linux/unix下的快捷方式,严重影响工作效率,所以特撰写此文,每个用法后我会详细注释。

下述所有命令在Linux/unix的shell下有效,这里以bash为主。如有出入,以你自己的服务器为准。本文所指的Linux主要指RHEL/CentOS,unix指的是FreeBSD,这也是服务器中用得最多的版本。

Ctrl + a 切换到命令行开始

这个操作跟Home实现的结果一样的,但Home在某些unix环境下无法使用,便可以使用这个组合;在Linux下的vim,这个也是有效的;另外,在windows的许多文件编辑器里,这个也是有效的。 Continue reading 实用的Linux/Unix快捷键大汇总

为什么Linux到现在也不能双击安装软件

看最近互联网上的评论,有一位仁兄矢志不渝的重复“世界上最差的系统就是linux,双击不能安装软件”,而对于该评论的观点众多,但是真正正确的确极少。综合来看,广大网友尤其是喜欢评论的盆友对Linux理解的还比较少,而且很多都是跟Windows做比较(当然这里我承认高手也大有人在),所以我想在这里有必要说一下为什么Linux到现在也不能做到双击安装软件。

首先要说一下,很多Linux的发行版例如Ubuntu或者CentOS、Fedora等,已经早就可以双击安装自己发行版的安装包了,例如deb、rpm等。
那么为什么现在大部分软件还是需要下载一个tar.gz然后./configure/make/make install繁琐的命令安装呢?

其实,Linux下跟Windows的软件发布有一个最大的不同就是Linux下大部分软件都是开源的,只提供源码下载,不提供编译好的二进制下载。所以,上面的三个命令实际上是编译一个软件,然后拷贝到系统对应目录,准确来说不是安装。

但是为什么非要这三个命令,而不是双击之后自动执行上述三个命令呢? Continue reading 为什么Linux到现在也不能双击安装软件

使用负载均衡技术建设高负载的网络站点

Internet的快速增长使多媒体网络服务器,特别是Web服务器,面对的访问者数量快速增加,网络服务器需要具备提供大量并发访问服务的能力。例如 Yahoo每天会收到数百万次的访问请求,因此对于提供大负载Web服务的服务器来讲,CPU、 I/O处理能力很快会成为瓶颈。

简单的提高硬件性能并不能真正解决这个问题,因为单台服务器的性能总是有限的,一般来讲,一台PC服务器所能提供的并发访问处理能力大约为1000个,更 为高档的专用服务器能够支持3000-5000个并发访问,这样的能力还是无法满足负载较大的网站的要求。尤其是网络请求具有突发性,当某些重大事件发生 时,网络访问就会急剧上升,从而造成网络瓶颈,例如在网上发布的克林顿弹劾书就是很明显的例子。必须采用多台服务器提供网络服务,并将网络请 求分配给这些服务器分担,才能提供处理大量并发服务的能力。

当使用多台服务器来分担负载的时候,最简单的办法是将不同的服务器用在不同的方面。按提供的内容进行分割时,可以将一台服务器用于提供新闻页面,而另一台 用于提供游戏页面;或者可以按服务器的功能进行分割,将一台服务器用于提供静态页面访问,而另一些用于提供CGI等需要大量消耗资源的动态页面访问。然而 由于网络访问的突发性,使得很难确定那些页面造成的负载太大,如果将服务的页面分割的过细就会造成很大浪费。事实上造成负载过大的页面常常是在变化中的, 如果要经常按照负载变化来调整页面所在的服务器,那么势必对管理和维护造成极大的问题。因此这种分割方法只能是大方向的调整,对于大负载的网站,根本的解 决办法还需要应用负载均衡技术。

负载均衡的思路下多台服务器为对称方式,每台服务器都具备等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。然后通过某种负载分担技术,将外部 发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求。由于建立内容完全一致的Web服务器并不复杂,可以使 用服务器同步更新或者共享存储空间等方法来完成,因此负载均衡技术就成为建立一个高负载Web站点的关键性技术。 Continue reading 使用负载均衡技术建设高负载的网络站点

如何部署WordPress到Amazon云主机

在过去的10年,架设一个大型网站是一个非常艰巨的任务,那可不是非专业人士可以完成的。现在好了,亚马逊开放了他们的服务器架构,一切都改变了。 计算机硬件被移动到了云端,普通站长和开发人员都可以利用亚马逊的硬件和网络资源来运行自己的应用。在本文中,我们将把WordPress博客安装到云端。


介绍

大多数博客和小型企业站点都托管在共享主机上面,通过固定的月租费用来获得预装软件和特定功能的使用。大多数情况下,共享主机是一个完美的解决方案,但是将你的博客安装在Amazon云端有很多好处是值得我们考虑的:

  • 更容易升级更新. 在Amazon云端创建一个新服务器可以在数分钟内完成。使用该服务,你的网站将有能力应付突如其来的流量爆发,比如你的博客文章被推荐到了Digg或者Reddit的首页,你可以添加更多服务器并平衡负载。
  • 经济有效的大规模服务能力. 如果你的站点吸引了大量的用户,并且最终超过了主机的正常伺服能力,Amazon Web Services 将给你一个经济有效的办法来设计一个符合你的需求的网站服务架构,而你并不需要去雇佣一个完整的网络运作团队来安装和管理网络。这也是许多 Facebook开发人员选择Amazon云服务器的原因。
  • 完善的安装与设置. 在运行WordPress时,这一点可能不是太重要,但如果你想使用PHP和MySQL之外的一些东西来建设你的下一个项目,则没有必要请求主机公司的帮助,你可以就像在你自己的服务器上一样安装你所需要的软件。

是否把WordPress站点放到亚马逊云端由你的博客流量决定,并且你可以根据你的实际需求来决定服务器配置。通过下面的指南,你可以了解到怎样迅速的在Amazon Cloud上设置和运行服务器。 Continue reading 如何部署WordPress到Amazon云主机

创建一个加密的squid代理通道

众所周知,在大陆不能自由的访问互联网,为此人们想出了各种办法,真是八仙过海各显神通,然而,很多办法是既绕圈子,又没有普遍应用的意义,使用ssh tunnel实际上效率是很低的,因为ssh不是为了这个目的而开发,今天我们要介绍的是具有普遍的意义的代理服务器squid和stunnel。

其实这二者组合并不新鲜,也并不罕见,下面说说这个组合的 应用条件:

1,一台运行在自由世界的服务器,或者虚拟机。
2,这台服务器上安装了squid。
3,当然,你必须要可以从中国大陆连接它。

首先我们来配置安装好的squid,很多旧的案例使用stunnel加密squid端口,然后在客户机上使用stunnel解密,这是多走了一个弯路,squid自身已经支持加密的代理方法,在服务器上,我们根本就不需要运行stunnel,例如我们要将这个加密的代理运行在服务器IP地址为216.218.186.2的443端口,具体配置参数如下:

https_port 216.218.186.2:443    cert=/etc/squid/hnair.com.crt key=/etc/squid/hnair.com.key

其中,hnair.com.crt和hnair.com.key是使用openssl生成用于加密的数字证书和密钥,关于自行生成数字证书的方法,可参考如下:

openssl req -new > hnair.com.csr

openssl rsa -in privkey.pem -out hnair.com.key

openssl x509 -in hnair.com.csr -out hnair.com.crt -req -signkey hnair.com.key -days 3650

然后启动squid即可。

接下来,我们需要对客户端进行配置,不管你是Windows还是Linux,都可以到这里下载:ftp://ftp.stunnel.org/stunnel/

将相应的stunnel压缩包解压缩或者安装,添加一个配置文件(stunnel.conf)至程序的目录:

client = yes
[ssl2http]
accept = 127.0.0.1:8080
connect = 216.218.186.2:443

注意,有些Linux发行版中,例如Ubuntu,在进行apt-get安装stunnel的时候,stunnel v3和v4都会安装上去,此时应该使用stunnel4来运行,直接运行 /usr/bin/stunnel4 即可,在Windows中不存在这个问题。

然后,我们将浏览器的代理服务器设置为本机的8080端口,也就是127.0.0.1:8080,即可使用一个加密的通道,自由的访问互联网了,实际上,这个方法被广泛应用在XX功的网站上,只不过他们用的是Apache做反向代理,因为上面还有他们的网站,虽然总是胡说八道来着,由于我们不需要在上面运行网站,所以squid代理服务器是最佳选择。

我很好奇为什么那么多人在卖ssh代理,却没有人卖加密的squid,在squid上添加用户身份验证,即可达到类似的效果,究其原因,其实还是有两个:

第一,ssh代理可以实现socks请求转发,有些应用可能需要。

第二,ssh代理本身效率不高,可以防止用户滥用,流量超荷,而加密的squid如果没有流量限制,那显然是一场悲剧。

苹果的另一面:开源软件重镇

刚才一个苹果网站的链接在很短时间内成为Hacker News的头条。这个普通的网址却揭开了以封闭著称的苹果公司不太为人所知的另一面:开源社区的积极一员。

正如这个网页上苹果自己所说的,它是第一个将开源软件作为关键战略的主要计算机公司。了解苹果历史的人肯定知道此言不虚。苹果最重要的软件产品——Mac OS X的内核XNU再加上一些驱动等核心组件合称为Darwin,就是一个开源项目。这个开源项目有个可爱的吉祥物Hexley(达尔文的斗犬赫胥黎是也,不过为什么是鸭子的形状,是因为混合吗?),熟悉FreeBSD的人应该发出会心一笑吧:

这是一个堪称完美的混合内核,著名学院派操作系统Mach的微内核提供了足够的灵活性,也支持着系统的任务、线程、进程、消息传递(IPC)、RPC、SMP调度支持、保护式内存、虚拟内存管理等主要底层功能;而Unix正宗FreeBSD则满足了足够的性能要求,并提供了POSIX API、文件系统、网络栈、安全、抢占式多任务、用户与组管理、权限管理等特性;此外还有Apple独有的面向对象设备驱动框架I/O Kit。这个内核的模块性如此之好,以至于苹果的架构师们能够比较自由地为Mac电脑以及iOS设备选择底层硬件,从PowerPC到Intel,再到ARM……

Darwin架构图

作为目前普通用户最多的类Unix操作系统,Mac OS X中还内置了Unix中常见的各种开源软件,包括Ruby、Python、Perl等语言开发环境以及各种工具。也难怪现在越来越多程序员将Mac OS作为开发机,并渐渐“沦为果粉”……

苹果的另一个著名开源项目大家应该都听说过,但未必知道出自苹果。这就是浏览器引擎WebKit。WebKit(开源项目网址)是1998年苹果工程师开发的一个(KDE开源项目旗下)KHTML与KJS派生版本,开始的时候代码会提交到KDE项目中,但后来双方产生了矛盾而分裂。2005年6月,苹果宣布WebKit开源,成为一个独立的项目。

除了Safari之外,排名第三的开源浏览器Chrome也是基于WebKit的,甚至Adobe的AIR和Creative Suite CS 5也使用它来渲染HTML。当然,使WebKit日益重要的是手机,目前大多数智能手机浏览器包括Android、iPhone、黑莓、Symbian都基于WebKit,据估计目前用户已经超过4亿。今天的WebKit项目开发团队中,除了苹果的工程师外,Google也是生力军,此外还有不少RIM公司的人,他们应该是来自被黑莓收购的Torch浏览器开发团队。

苹果还有几个在更专业的领域里非常重要的开源项目,比如编译器框架LLVM,异构编程框架OpenCL,服务发现协议实现Bonjour等。其中,LLVM现在已经成为语言创新的温床,看看都有哪些项目因此而如虎添翼吧。

了解了苹果在开源方面的贡献,你对它的印象是否已经有所改观?其实也不稀奇,苹果是一家工程师文化深厚的公司,开源本来就是应该是工程师文化的一部分。

New Openvpn Router

重新买了一个wrt54gs,因为buffalo的wbr2-g54s坏了,本来我以为是电源坏掉,拿去万用表测了下电压和电流都是很正常的数值,只能怀疑是板子烧了,未作深究,拆开看了下,也没有看到哪个地方烧糊了。考虑到DDWRT很大程度上是基于wrt54g系列设计的,使用Openvpn也不会有问题。

如果你有一枚3G上网卡,又有一只3G路由器,恰好你还有一张若干年前的中国移不动WAP包月卡,而且你还有一个运行在公网上,端口在443的Openvpn服务器,嗯,你知道我要做什么。

将3G上网卡插上3G路由器,使用3G路由器拨CMWAP,然后将3G路由器的LAN口插上网线,另一头插进wrt54gs的internet口,不好意思它没有WAN口,然后在wrt54gs上拨Openvpn,相当不幸的是,DDWRT固件中的Openvpn没有代理服务器的设置,所以我们需要自定义配置文件,但是呢,并不是说DDWRTOpenvpnclient的设置界面是毫无用处的,你需要在那个界面中把ca.crt,client.crt和client.key的内容输入进去,根据官方文档所述,可以将自定义的配置加入startup-scripts,不过经过我的测试,从来没有成功过,但通过telnet终端界面,是可以运行的,很显然,下面这个配置,看得懂的自然就看得懂,看不懂的解释了也看不懂,所以我就不解释太多,第一句解释下,DDWRT每次重启会丢失时间,因为大家知道嘛,网络设备的时间是通过ntp获取的,不正确的系统时间会导致证书验证错误而致无法正确连接,也就是我之前提及的数字证书问题。

date 041220302011
killall openvpn
echo “client
dev tun
proto tcp
remote 202.202.0.188 443
http-proxy 10.0.0.172 80
http-proxy-timeout 30
http-proxy-retry
http-proxy-option AGENT “NokiaN90-1/3.0545.5.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1″
resolv-retry infinite
nobind
persist-key
persist-tun
ca /tmp/openvpncl/ca.crt
cert /tmp/openvpncl/client.crt
key /tmp/openvpncl/client.key
ns-cert-type server
comp-lzo
verb 3
redirect-gateway def1″ > /tmp/openvpncl/openvpn.conf
killall openvpn
openvpn –config /tmp/openvpncl/openvpn.conf –route-up /tmp/openvpncl/route-up.sh –down /tmp/openvpncl/route-down.sh &

连接的速度一般,不是很快,看看网页聊聊扣扣,看个电影要先缓冲一个小时,但这里是北京市二环,附近就是大唐电信,可见中国移不动的TD-SCDMA实在是不过如此。

Opening Windows to a Wider World

Opening Windows to a Wider World

这个广告词我觉得写得不错,如前述,在FreeBSD下频繁的读写ext3分区有导致分区dirty的可能,所以我把接入磁盘阵列的操作系统换成了Centos5.5,使用LiveCD灌到U盘,然后通过VNC,局域网网络安装,没有图形界面,速度很快,十几分钟就欧了,这台笔记本配置很低,一枚VIA的800Mhz处理器,2G内存,80G硬盘,我最中意它的是因为它作为一台笔记本,是没有风扇的~大大减少了物理损坏的可能。装好Centos,yum了一个samba3x上去,mount上磁盘阵列,修改好配置文件,发现总是启动failed,我英明的查看了一下samba日志,然后上网搜了搜~

[2011/04/01 15:28:20,  0] smbd/server.c:main(1275)
smbd version 3.3.8-0.52.el5_5.2 started.
Copyright Andrew Tridgell and the Samba Team 1992-2009
[2011/04/01 15:28:20,  0] lib/messages_local.c:messaging_tdb_init(96)
ERROR: Failed to initialise messages database: Permission denied
[2011/04/01 15:28:20,  0] lib/messages.c:messaging_init(204)
messaging_tdb_init failed: NT_STATUS_ACCESS_DENIED

搜索的结果是,出现这些个错误的原因林林种种,什么数据库错误,编码问题,但很明显都不是我要的结果,就在我准备放弃的时候,我看见有人在其它的问题上抱怨SElinux……电光火石间,我意识到了这个问题。

究其根本,是因为以前在安装Centos服务器的时候,考虑到使用Oracle数据库的可能,都装上了图形界面,而且我习惯性的在装好之后把SElinux和iptables都禁用掉,这次只安装了命令行,木有安装图形界面,于是,SElinux和iptables都在那运行着……找到了问题,解决起来就很简单,把SElinux直接disable掉(/etc/sysconfig/selinux),然后chkconfig iptables off,chkconfig ip6tables off,reboot。

终于可以顺利的启动Samba服务,接下来进行配置,参考原来mybookworld中的配置文件,简单的说呢就是,有一些目录大家可读可写,有一些目录大家可读不可写,有一些目录大家不可读不可写,有一些目录我可读可写,嗯,还没晕的话说明你逻辑思维能力很强。

smb.conf配置如下:

[global]
server string = MyBookWorld Version %v
netbios name = mybookworld
workgroup = WORKGROUP
interfaces=192.168.151.5/24 127.0.0.1/8
security=user
smb passwd file=/etc/samba/smbusers
guest account=www
log file=/var/log/log.%m
max log size=50
dns proxy=No
unix charset = utf8
lock directory=/var/lock
pid directory=/var/lock
use sendfile=Yes
map to guest = Bad User
create mask = 755
map hidden = Yes

[dummy-1]
include=/etc/samba/shares.inc

其中,包含了一个配置文件,shares.inc,这个文件中含有所有的共享目录设置,配置如下:

[PRIVATE]
path=/shares/PRIVATE
force user=www
valid users=kenbaby
write list=kenbaby

[MOVIE]
path=/shares/MOVIE
force user=www
guest ok=Yes
valid users=kenbaby www
write list=kenbaby
read list=www

[PUBLIC]
path=/shares/PUBLIC
force user=www
valid users=www kenbaby
write list=www kenbaby
guest ok=Yes

这个配置文件很简单,英文过了四级的都能看懂,第一个PRIVATE目录,只允许kenbaby进行读写,写入的文件权限赋给www用户,第二个MOVIE目录,所有用户都可以读取,但只有kenbaby可以写入,同样,写入的文件权限赋给www用户,第三个目录PUBLIC,所有的用户都可以进行读写。将写入的文件权限赋给www用户,很好的保证了文件在磁盘上的权限统一在一个用户下,前面的smb.conf配置文件中,已经将www用户指定为来宾用户,也就是说,在Windows PC访问共享的时候,默认的Guest用户就能够直接访问,不用输入用户名和密码了。

最后一步,添加系统用户和samba用户,首先是添加系统用户:

groupadd www
useradd www -g www
groupadd kenbaby
useradd kenbaby -g kenbaby

系统用户无需初始化密码,这样它们也无法通过shell登入操作系统。然后我们添加samba用户,由于www用户是指定的来宾帐户,不需要设置密码,我们只需要为kenbaby用户添加密码即可。

smbpasswd -La kenbaby

添加完成后,重新启动smb服务即可访问共享啦!当然,如果要使用netbios name,还需要启动nmbd服务(/etc/init.d/nmbd restart)

Minicom的配置和使用

Minicom是一款类unix操作系统下串口通讯工具,功能和超级终端,或者说putty的COM通信类似,我们可以用它来配置通信modem,思科产品,以及其它需要串口通信配置的硬件,以下以FreeBSD为例,首先我们看下系统里面有没有串口信息,如果有以下的信息呢就代表串口硬件是存在的,正常~下图中的机器是有两个串口,一个uart0,一个uart2。

接下来我们安装minicom软件,这种常用软件直接用ports安装就可以了,make install,第一次运行我们需要初始化配置文件,使用参数启动:minicom -s

可以看到,最重要的配置自然是设备和端口了~我们稍加配置即可,需要说明的是,在FreeBSD中,虽然内核中的设备名称是uart0和uart2,但实际的设备名称分为呼出和呼入设备,呼出设备为cuau,呼入设备就是我们熟悉的tty了,在以Linux为内核的操作系统中,设备就不是这样命名的鸟……例如上面我们说到的uart0和uart2,对应的call out device分别是cuau0和cuau2,所以我们设置如图:(通信速率显然也需要设置一下)

由于Minicom本意是设计为modem通信使用的,所以在modem & dialing设置项中有很多的初始化设置,如果不需要的话,可以把它们删掉~最后当然是Save setup as default,以后就不用每次更改设置了,设置完成之后exit,就进入了通信界面,我们可以sh ver一下。

单点故障的可能

上次说到使用Memcached来存储session,这样就可以不用Tomcat的session同步机制(因为Y这么多年居然一点没变化过),直接做http的负载均衡,前端不管用硬件还是软件实现,系统结构都会显得更为简单,但是一直觉得,依然存在单点故障的可能,想想还是画个图比较清晰,画了几遍,如果除去Cache Cluster,那么木有单点故障的最小结构至少需要服务器十台,当然,我画的是理想化状态,Memcached的logo真TM恐怖……这样的结构,应该不会再有单点故障的可能,而且扩展起来也是很方便的,堆服务器就是了。