显示标签为“LinuxShell”的博文。显示所有博文
显示标签为“LinuxShell”的博文。显示所有博文

2009年2月20日星期五

VirtualHost 设置

首先配置:http.conf

apache 2.2.8 在最下面添加:
Include "D:/WampServer/bin/apache/apache2.2.8/conf/zfarticle.conf"
上面的路径自己可以设置.

下面是配置文件 zfarticle.conf的设置:

<VirtualHost *:80>
<Directory "D:/ZendArticle/public/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName zf.ostracking.com
ServerAlias zf.ostracking.com
DocumentRoot D:/ZendArticle/public/
ErrorDocument 404 /notfound.php
ErrorLog D:/WampServer/bin/apache/apache2.2.8/logs/zf.site_error.log
CustomLog D:/WampServer/bin/apache/apache2.2.8/logs/zf.site_access.log combined
</VirtualHost>

2008年12月4日星期四

apache rewrite Rule 详解

作为RewriteRule指令的第三个参数, Flags是一个包含以逗号分隔的下列标记的列表:

'redirect|R [=code]' (强制重定向 redirect)
以 http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。
如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。
如果需要使用在300-400范围内的其他响应代码,只需在此指定这个数值即可.
另外,还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端.
如, 重写``/~''为 ``/u/'',或对/u/user加上斜杠,等等。

注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。通常,你会希望停止重写操作而立即重定向,则还需要使用'L'标记.

'forbidden|F' (强制URL为被禁止的 forbidden)
强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。
使用这个标记,可以链接若干RewriteConds以有条件地阻塞某些URL。

'gone|G' (强制URL为已废弃的 gone)
强制当前URL为已废弃的,即,立即反馈一个HTTP响应代码410(已废弃的)。
使用这个标记,可以标明页面已经被废弃而不存在了.

'proxy|P' (强制为代理 proxy)
此标记使替换成分被内部地强制为代理请求,并立即(即, 重写规则处理立即中断)把处理移交给代理模块。
你必须确保此替换串是一个有效的(比如常见的以 http://hostname开头的)能够为Apache代理模块所处理的URI。
使用这个标记,可以把某些远程成分映射到本地服务器名称空间,从而增强了ProxyPass指令的功能。
注意: 要使用这个功能,代理模块必须编译在Apache服务器中。如果你不能确定,可以检查``httpd -l''的输出中是否有mod_proxy.c。 如果有,则mod_rewrite可以使用这个功能;如果没有,则必须启用mod_proxy并重新编译``httpd''程序。

'last|L' (最后一个规则 last)
立即停止重写操作,并不再应用其他重写规则。
它对应于Perl中的last命令或C语言中的break命令。这个标记可以阻止当前已被重写的URL为其后继的规则所重写。
举例,使用它可以重写根路径的URL('/')为实际存在的URL, 比如, '/e/www/'.

'next|N' (重新执行 next round)
重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。
它对应于Perl中的next命令或C语言中的continue命令。
此标记可以重新开始重写操作,即, 立即回到循环的头部。
但是要小心,不要制造死循环!

'chain|C' (与下一个规则相链接 chained)
此标记使当前规则与下一个(其本身又可以与其后继规则相链接的, 并可以如此反复的)规则相链接。
它产生这样一个效果: 如果一个规则被匹配,通常会继续处理其后继规则, 即,这个标记不起作用;如果规则不能被匹配,则其后继的链接的规则会被忽略。
比如,在执行一个外部重定向时, 对一个目录级规则集,你可能需要删除``.www'' (此处不应该出现``.www''的)。

'type|T=MIME-type' (强制MIME类型 type)
强制目标文件的MIME类型为MIME-type。
比如,它可以用于模拟mod_alias中的ScriptAlias指令, 以内部地强制被映射目录中的所有文件的MIME类型为``application/x-httpd-cgi''.

'nosubreq|NS' (仅用于不对内部子请求进行处理 no internal sub-request)
在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。
比如,在mod_include试图搜索可能的目录默认文件(index.xxx)时, Apache会内部地产生子请求。
对子请求,它不一定有用的,而且如果整个规则集都起作用,它甚至可能会引发错误。
所以,可以用这个标记来排除某些规则。

根据你的需要遵循以下原则: 如果你使用了有CGI脚本的URL前缀,以强制它们由CGI脚本处理, 而对子请求处理的出错率(或者开销)很高,在这种情况下,可以使用这个标记。

'nocase|NC' (忽略大小写 no case)
它使Pattern忽略大小写,即, 在Pattern与当前URL匹配时,'A-Z' 和'a-z'没有区别。

'qsappend|QSA' (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。
如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。

'noescape|NE' (在输出中不对URI作转义 no URI escaping)
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。
一般情况下,特殊字符(如'%', '$', ';'等)会被转义为等值的十六进制编码。
此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,
如:
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

可以使'/foo/zed'转向到一个安全的请求'/bar?arg=P1=zed'.

'passthrough|PT' (移交给下一个处理器 pass through)
此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他URI到文件名翻译器的 Alias,ScriptAlias, Redirect 等指令的输出进行后续处理。
举一个能说明其含义的例子: 如果要通过mod_rewrite的重写引擎重写/abc为/def,然后通过mod_alias使/def转变为/ghi,可以这样:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi

如果省略了PT标记,虽然mod_rewrite运作正常, 即, 作为一个使用API的URI到文件名翻译器, 它可以重写uri=/abc/...为filename=/def/..., 但是,后续的mod_alias在试图作URI到文件名的翻译时,则会失效。
注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时, 就必须使用这个标记。。 混合使用mod_alias和mod_rewrite就是个典型的例子。

For Apache hackers
如果当前Apache API除了URI到文件名hook之外,还有一个文件名到文件名的hook, 就不需要这个标记了! 但是,如果没有这样一个hook,则此标记是唯一的解决方案。
Apache Group讨论过这个问题,并在Apache 2.0 版本中会增加这样一个hook。

'skip|S=num' (跳过后继的规则 skip)
此标记强制重写引擎跳过当前匹配规则后继的num个规则。
它可以实现一个伪if-then-else的构造: 最后一个规则是then从句,而被跳过的skip=N个规则是else从句. (它和'chain|C'标记是不同的!)

'env|E=VAR:VAL' (设置环境变量 environment variable)
此标记使环境变量VAR的值为VAL, VAL可以包含可扩展的反向引用的正则表达式$N和%N。
此标记可以多次使用以设置多个变量。
这些变量可以在其后许多情况下被间接引用,但通常是在XSSI (via ) or CGI (如 $ENV{'VAR'})中, 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。
使用它可以从URL中剥离并记住一些信息。

'cookie|CO=NAME:VAL:domain[:lifetime[:path]]' (设置cookie)
它在客户端浏览器上设置一个cookie。
cookie的名称是NAME,其值是VAL。
domain字段是该cookie的域,比如'.apache.org', 可选的lifetime是cookie生命期的分钟数, 可选的path是cookie的路径。
注意
绝不要忘记,在服务器级配置文件中,Pattern是作用于整个URL的。 但是在目录级配置文件中, (一般总是和特定目录名称相同的)目录前缀会在pattern匹配时被自动删除,而又在替换完毕后自动被加上。此特性对很多种重写是必须的,因为,如果没有这个剥离前缀的动作,就必须与其父目录去匹配,而这并不总是可行的。
但是有一个例外: 如果替换串以``http://''开头, 则不会附加目录前缀, 而是强制产生一个外部重定向,或者(如果使用了P标记)是一个代理操作!

注意
为了对目录级配置启用重写引擎,你必须在这些文件中设置``RewriteEngine On'', 并且打开``Options FollowSymLinks'。
如果管理员对用户目录禁用了FollowSymLinks, 则无法使用重写引擎。这个限制是为了安全而设置的。

以下是所有可能的替换组合及其含义:

在服务器级配置中(httpd.conf),对这样一个请求 ``GET /somepath/pathinfo'':


Given Rule Resulting Substitution
---------------------------------------------- ----------------------------------
^/somepath(.*) otherpath$1 not supported, because invalid!
^/somepath(.*) otherpath$1 [R] not supported, because invalid!
^/somepath(.*) otherpath$1 [P] not supported, because invalid!
---------------------------------------------- ----------------------------------
^/somepath(.*) /otherpath$1 /otherpath/pathinfo
^/somepath(.*) /otherpath$1 [R] http://thishost/otherpathvia external redirection
^/somepath(.*) /otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^/somepath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpathvia external redirection
^/somepath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfovia external redirection
^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfovia external redirection (the [R] flag is redundant)

^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfovia internal proxy

在/somepath的目录级配置中
(即, 目录/physical/path/to/somepath的.htaccess文件中包含 RewriteBase /somepath)
对这样一个请求``GET /somepath/localpath/pathinfo'':

Given Rule Resulting Substitution
---------------------------------------------- ----------------------------------
^localpath(.*) otherpath$1 /somepath/otherpath/pathinfo
^localpath(.*) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfovia external redirection
^localpath(.*) otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^localpath(.*) /otherpath$1 /otherpath/pathinfo
^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfovia external redirection
^localpath(.*) /otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^localpath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
^localpath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfovia external redirection
^localpath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^localpath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfovia external redirection
^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfovia external redirection(the [R] flag is redundant)
^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfovia internal proxy


举例:

要重写这种形式的URL:
/ Language /~ Realname /.../ File

/u/ Username /.../ File . Language

可以把这样的对应关系保存在/path/to/file/map.txt映射文件中, 此后,只要在Apache服务器配置文件中增加下列行,即可:

RewriteLog /path/to/file/rewrite.log
RewriteMap real-to-user txt:/path/to/file/map.txt
RewriteRule ^/([^/]+)/~([^/]+)/(.*)$ /u/${real-to-user:$2|nobody}/$3.$1

2008年11月19日星期三

测试 空间是否 支持 .htaccess

如何知道 一个空间是否支持 .htaccess 呢?

使用下面简单的方法就可以测试出结果:

首先在你的WEB根目录建一个 notfound.html , 内容如下:

404 Error , Test .htaccess


其次在你的WEB根目录建一个 .htaccess (# touch .htaccess)文件,然后把下面的内容放进去:

RewriteEngine on
RewriteBase /
ErrorDocument 404 /notfound.html


保存完成之后,你访问一个不存在的页面或是路径,如果提示

404 Error , Test .htaccess


OK, 说明你的空间是支持.htaccess的。

如果没有反应你试一下设置文件的权限:
#chmod +r .htaccess


如果还不行,有可能你的空间就不支持.htaccess了。

说明一下:
.htaccess第一个应用是自定义错误页面,这使得你可以拥有自己的、个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没有任何页面。这会让你的网站在出错的时候看上去更加专业。

任何你知道代码的错误(像404找不到页面),你都可以将其变成自定义页面,要做的只是在.htaccess文件里加入以下一段:

ErrorDocument errornumber /file.html

2008年11月13日星期四

linux scp 命令详解 使用示例

ssh(Secure Shell)是用来登录远程计算机和在远程计算机上执行命令的程序。它是用来替代rlogin和rsh,以及在不安全的网络环境下在两台计算机之间提供安全和加密的信息交流。X11连接和TCP/IP端口可以被转发到一个安全的通道里。

用下面的命令,登录远程计算机:

[test@demo]# ssh username@hostname

例如:

[test@demo]# ssh username@www.test.com
The authenticity of host 'www.test.com (*****)' can't be established.
RSA key fingerprint is 0e:c2:f6:f4:d9:86:9d:4b:c4:3d:77:e7:a4:bb:59:14.
Are you sure you want to continue connecting (yes/no)? yes
username@www.test.com's password:
Last login: Tue Oct 19 1999 18:13:00 -0400 from www.test.com
Welcome to www.test.com on Deepforest.


username是用来登录ssh服务器的用户名,是ssh服务器主机的地址或是IP。

scp
可以用这个命令把文件从本地计算机拷贝到远程计算机,或者反之,甚至可以在两台远程计算机之间用“scp”命令拷贝文件。把远程主机上的文件拷贝到当前目录的一个简单的方法如下。

用下面的命令把文件从远程主机拷贝到本地主机上:

[test@demo /]$ scp -pr username@hostname:/tmp ./ (把远程目录tmp和下面所有文件,文件来一起COPY到当前目录下面 -r 表拷贝目录

例如:

[username@demo]$ scp -p username@dev.test2.com:/tmp ./
Enter passphrase for RSA key 'username@dev.test2.com':

用下面的命令把文件从本地主机拷贝到远程主机上:

[username@demo /]$ scp -p /usr/bin/test username@hostname:/tmp/ (把目录/usr/bin/test文件夹和文件来所有内容SCP到目标服务器/tmp目录下面)

例如:

[username@demo]$ scp -p /usr/bin/test2 username@test:/var/tmp
username@test's password:

注意:“-p”选项表示文件的改变和访问时间属性以及权限,在拷贝过程中被保留。通常是需要这样的。

总之两个功能:
从当前服务器 SCP 到其它服务器 [current@server] scp ./file other@server:/home/tmp/
从其它服务器 SCP 到当前服务器 [current@server] scp other@server:/home/tmp/ ./

linux ls -- 列文件和文件夹 详解

ls

  ls 命令可以说是linux下最常用的命令之一。它有众多的选项,其中有很多是很有用的,你是否熟悉呢?下面列出了 ls 命令的绝大多数选项。

  -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
  -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
  -c 输出文件的 i 节点的修改时间,并以此排序。
  -d 将目录象文件一样显示,而不是显示其下的文件。
  -e 输出时间的全部信息,而不是输出简略信息。
  -f -U 对输出的文件不排序。
  -g 无用。
  -i 输出文件的 i 节点的索引信息。
  -k 以 k 字节的形式表示文件的大小。
  -l 列出文件的详细信息。
  -m 横向输出文件名,并以“,”作分格符。
  -n 用数字的 UID,GID 代替名称。
  -o 显示文件的除组信息外的详细信息。
  -p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
  文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。

  -q 用?代替不可输出的字符。
  -r 对目录反向排序。
  -s 在每个文件名后输出该文件的大小。
  -t 以时间排序。
  -u 以文件上次被访问的时间排序。
  -x 按列输出,横向排序。
  -A 显示除 “.”和“..”外的所有文件。
  -B 不输出以 “~”结尾的备份文件。
  -C 按列输出,纵向排序。
  -G 输出文件的组的信息。
  -L 列出链接文件名而不是链接到的文件。
  -N 不限制文件长度。
  -Q 把输出的文件名用双引号括起来。
  -R 列出所有子目录下的文件。
  -S 以文件大小排序。
  -X 以文件的扩展名(最后一个 . 后的字符)排序。

  -1 一行只输出一个文件。
  --color=no 不显示彩色文件名
  --help 在标准输出上显示帮助信息。
  --version 在标准输出上输出版本信息并退出。
  只列出子目录

  1. ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)
  2. ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)


  计算当前目录下的文件数和目录数,下面命令可以分别计算当前目录下的文件和目录个数:

  # ls -l * |grep "^-"|wc -l ---- to count files
  # ls -l * |grep "^d"|wc -l ----- to count dir

  显示彩色目录列表,打开/etc/bashrc, 加入如下一行:

  alias ls="ls --color"

  下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:

  1. 蓝色-->目录
  2. 绿色-->可执行文件
  3. 红色-->压缩文件
  4. 浅蓝色-->链接文件
  5. 灰色-->其他文件
  ls -tl --time-style=full-iso sshd
  ls -ctl --time-style=long-iso

linux alias -- 别名 详细 讲解

 Linux用户经常会使用到Shell,也经常会和控制台打交道。但是这种CLI界面很难被已经习惯使用MS Windows的用户所接受,尤其是命令。Linux常用的Bash命令有一百多个,虽然一般情况下命令都非常简短,不过也有很多时候需要大量的是用参 数,这样,对很多初学者来说,背命令变成为最头疼的事情,这也是很多Linux初学者望而生畏。在这里,给大家说一个小技巧,一个可以使大家对控制台的操 作更得心应手的技巧——alias(别名)。

  在说这些之前,首先现说一下什么是Shell。我们通常所说的Linux,其实真正含义 是特指 Linux的Kernel(内核),内核就相当于Linux的核心、大脑,用户的所有操作,都是有Kernel来完成的,但是用户却又不是直接对 Kernel作所有的操作,为什么呢?因为用户与Kernel之间,并不能直接的沟通,用户不可以直接的发送指令给Kernel(不要问我为什么,因为就 是这个设计的,呵呵),那用户怎么与Kernel之间联系呢?很简单,这需要一个命令解释器,也就是Shell。Shell在Unix和Linux等众多 的类似操作中,但扮演这个一个非常重要的角色。他起到了连接用户与内核的功能,所有的用户指令,当输入之后,首先,是有Shell读取,然后解释给内核, 由内核来执行。这一点,不同于大家都非常熟悉的MS Windows和DOS。Shell可以完成对Linux的所有操作,其实大家最长接触的GUI界面,也就是X Window,也是通过图形的方式,完成Shell命令而已。常见的Shell有很多种,在这里举几个例子Bash,Csh,Ksh等等……我就不一一列 举了。我们这里只以Bash为例。

  通过前面的叙述,相信大家已经对Shell有了初步的认识,我们现在具体来说Bash的一个非常好 的功能 alias(别名)。顾名思义,别名,就是给一个命令取另外一个名字,他有什么用呢?用处很简单,举一个非常简单的例子:假设说现在有一个命令是 “abcdefgh”,这个命令有点长,如果频繁是用这个命令的话,不免会降低效率。那怎么办呢?我们就给他起个别名,就叫做“123”好了,简短又好 记。我们只需要一条命令就可以搞定:

  alias 123='abcdefgh' #注意,这里是单引号

  这样,你 就可以用123 来代替这个命令了,而且原来的abcdefgh这条命令依旧有效。这时,相信大家已经知道alias指令的用途了吧。我再举一个例子,如果你总是频繁做一 个操作,比如说"cd /home/name/Desktop/",如果你每次要对桌面的文件操作,你就每次都得输入一遍这条命令,有时候,就显的很烦人了。那我们为何不用 alias命令来搞定呢?

  alias zm='cd /home/name/Desktop/'

  这样,我们就可 以用zm这个简单的命令取代那一串输入了。不过这里大家要注意,每当你输入一次alias指令后,这个修改只在当前的Shell生效,也就是说,如果你重 新开启一个 Shell,或者重新登录之后,这些更改不会保留下来,那如果您希望你的更改是永久的,那怎么做呢?很简单,只需要把你的更改写入bash的配置文件就可 以了。你直接修改~/.bashrc文件(/home/username/.bashrc),这个文件是一个隐藏文件。用文本编辑器打开他,比如说vi。 然后在其中加入指令就可以了。

  我在最后附了一份我的配置文件,把里面的alias指令我用红色标明了,大家可以参考一下。

  相信大家这时候已经了解alias的用法了。你们是不是会马上会"alias dir='ls'"?呵呵……

  # ~/.bashrc: executed by bash(1) for non-login shells.

  # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)

  # for examples

  # If not running interactively, don't do anything

  [ -z "$PS1" ] && return

  # don't put duplicate lines in the history. See bash(1) for more options

  export HISTCONTROL=ignoredups

  # check the window size after each command and, if necessary,

  # update the values of LINES and COLUMNS.

  shopt -s checkwinsize

  # make less more friendly for non-text input files, see lesspipe(1)

  [ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"

  # set variable identifying the chroot you work in (used in the prompt below)

  if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then

  debian_chroot=$(cat /etc/debian_chroot)

  fi

  # set a fancy prompt (non-color, unless we know we "want" color)

  case "$TERM" in

  xterm-color)

  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

  ;;

  *)

  PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

  ;;

  esac

  # Comment in the above and uncomment this below for a color prompt

  #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

  # If this is an xterm set the title to user@host:dir

  case "$TERM" in

  xterm*|rxvt*)

  PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'

  ;;

  *)

  ;;

  esac

  # Alias definitions.

  # You may want to put all your additions into a separate file like

  # ~/.bash_aliases, instead of adding them here directly.

  # See /usr/share/doc/bash-doc/examples in the bash-doc package.

  #if [ -f ~/.bash_aliases ]; then

  # . ~/.bash_aliases

  #fi

  # enable color support of ls and also add handy aliases

  if [ "$TERM" != "dumb" ]; then

  eval "`dircolors -b`"

  alias ls='ls --color=auto'

  #alias dir='ls --color=auto --format=vertical'

  #alias vdir='ls --color=auto --format=long'

  fi

  # some more ls aliases

  #alias ll='ls -l'

  #alias la='ls -A'

  #alias l='ls -CF'

  alias agi='sudo apt-get install'

  alias agr='sudo apt-get remove'

  alias reboot='sudo reboot'

  alias halt='sudo halt'

  alias update='sudo apt-get update'

  alias upgrade='sudo apt-get dist-upgrade'

  # enable programmable completion features (you don't need to enable

  # this, if it's already enabled in /etc/bash.bashrc and /etc/profile

  # sources /etc/bash.bashrc).

  if [ -f /etc/bash_completion ]; then

  . /etc/bash_completion

  fi

原文来自:http://doc.linuxpk.com/5966.html

2008年11月5日星期三

Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

配置虚拟主机重启apache服务时有以下输出:

Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

原来是因为没有调协默认的ServerName,在httpd.conf中添加:


ServerName 127.0.0.1

重启,OK没有问题了。

如何使用CentOS光盘通过yum来安装X Window System

使用过CentOS的兄弟们一定知道有个非常方便软件安装工具yum,这个工具可以从互联网上安装需要 的软件。yum的方便是与RedHat的rpm对比而言的,rpm的使用经常是让人非常沮丧的,因为即使有一个依赖的软件包没有安装,rpm都会给我们无 情的返回Failed Dependencies,特别对于那些复杂软件的安装,yum显得是非常方便的。

然而当我们没有连接到Internet,仅仅有CentOS的DVD介质光盘时,仍然可以使用yum来进行软件安装。本文描述了如何在仅仅支持文本模式的CentOS进行X Window安装。

(1) mount CentOS DVD光盘到 /media/cdrom

mount /dev/cdrom /media/cdrom

(2) 给yum指定 /media/cdrom 作为它的软件安装源(移除无法连接的.repo,否则会有Error信息)

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum/repos.d/CentOS-Base.repo.bak

设定 /etc/yum/repos.d/CentOS-Media.repo

[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta

注意:确认baseurl中的文件夹位置上有DVD介质源,需要制定RPM-GPG-KEY或者通过 rpm –import RPM-GPG-KEY来引入所有的RPM包的Public Key

(3) 安装 "X Window System" & "GNOME Desktop Environment"

yum –enablerepo=c5-media groupinstall "X Window System"

yum –enablerepo=c5-media groupinstall "GNOME Desktop Environment"

注意:在安装过程有会有提示,输入y即可

(4) 客户端启动XManager Passive模式

(5) 在服务器运行测试应用

xclock -display 192.168.40.1:0.0

如果在XManager的客户端上看到Xclock的窗口就说明,XWindow安装成功了。

CentOS环境下安装Oray的花生壳Linux客户端

在CentOS环境下安装Oray的花生壳客户端的步骤如下:

(1) 下载 phlinux10.tar.zip 文件

(2) 解压缩后,选择 phlinux-1.0-install.redhat.tar.gz 文件进行再次解压缩

(3) 运行安装脚本 source install.sh

(4) 在版本比较高的CentOS,可能出现如下错误,主要原因是stdc++版本库版本过高

/usr/local/phlinux/phlinux: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory

(5) 应该安装兼容版本,在CentOS 5.1 DVD光盘中安装如下文件

rpm -ivh /media/iso/CentOS/compat-libstdc++-33-3.2.3-61.i386.rpm

(6) 重新运行安装脚本 source install.sh

(7) 输入用户名/密码,此时应该可以看到phlinux安装成功

(8) 在/etc/rc.d/init.d/下touch一个phlinux的文件,并chmod +x phlinux,内容如下:

/usr/local/phlinux/phlinux -d

(9) 修改机器名 vi /etc/host; vi /etc/sysconifg/network;

(10) 重新启动

大功告成,:)

linux tar命令 实战详解

tar命令

tar [-cxtzjvfpPN] 文件与目录 ....
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
   『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:

范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]#
tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc<==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc<==打包后,以 bzip2 压缩
# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
# 上述指令在执行的时候,会显示一个警告讯息:
# 『tar: Removing leading `/" from member names』那是关於绝对路径的特殊设定。

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
# 就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home

范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 这部分我们会在 Bash shell 时,再次提到这个指令跟大家再解释啰!


来源:http://www.21andy.com/blog/20060820/389.html

linux tar命令详解

tar命令
tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。
语法:tar [主选项+辅选项] 文件或者目录
使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。
主选项:
c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。
r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。
t 列出档案文件的内容,查看已经备份了哪些文件。
u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。
x 从档案文件中释放文件。
辅助选项:
b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。
f 使用档案文件或设备,这个选项通常是必选的。
k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。
m 在还原文件时,把所有文件的修改时间设定为现在。
M 创建多卷的档案文件,以便在几个磁盘中存放。
v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
w 每一步都要求确认。
z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。




Linux下的压缩文件剖析

对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap。可是Linux就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外windows下的.zip和.rar也可以在Linux下使用,不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结,希望你下次遇到这些文件时不至于被搞晕:)

  在具体总结各类压缩文件之前呢,首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩。
  Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法:
  tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面来举例说明一下:
  # tar -cf all.tar *.jpg
  这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
  # tar -rf all.tar *.gif
  这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif
  这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

  # tar -tf all.tar
  这条命令是列出all.tar包中所有文件,-t是列出文件的意思
  # tar -xf all.tar
  这条命令是解出all.tar包中所有文件,-t是解开的意思
  以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等。
  1) tar调用gzip
  gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:
  # tar -czf all.tar.gz *.jpg
  这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz
  # tar -xzf all.tar.gz
  这条命令是将上面产生的包解开。
  2) tar调用bzip2
  bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下:
  # tar -cjf all.tar.bz2 *.jpg
  这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2
  # tar -xjf all.tar.bz2
  这条命令是将上面产生的包解开。
3)tar调用compress

  compress也是一个压缩程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下:
  # tar -cZf all.tar.Z *.jpg
  这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z
  # tar -xZf all.tar.Z
  这条命令是将上面产生的包解开
  有了上面的知识,你应该可以解开多种压缩文件了,下面对于tar系列的压缩文件作一个小结:
  1)对于.tar结尾的文件
  tar -xf all.tar
  2)对于.gz结尾的文件
  gzip -d all.gz
  gunzip all.gz
  3)对于.tgz或.tar.gz结尾的文件
  tar -xzf all.tar.gz
  tar -xzf all.tgz
  4)对于.bz2结尾的文件
  bzip2 -d all.bz2
  bunzip2 all.bz2
  5)对于tar.bz2结尾的文件
  tar -xjf all.tar.bz2
  6)对于.Z结尾的文件
  uncompress all.Z
  7)对于.tar.Z结尾的文件
  tar -xZf all.tar.z
  另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们:
  1)对于.zip
  linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
  # zip all.zip *.jpg
  这条命令是将所有.jpg的文件压缩成一个zip包

# unzip all.zip
  这条命令是将all.zip中的所有文件解压出来

  2)对于.rar
  要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux
不是免费的;然后安装:
  # tar -xzpvf rarlinux-3.2.0.tar.gz
  # cd rar
  # make
  这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
  # rar a all *.jpg
  这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar 扩展名将自动附加到包名后。
  # unrar e all.rar
  这条命令是将all.rar中的所有文件解压出来
  到此为至,我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、 zip、unzip、rar、unrar等程式,你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了,以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。
  本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行操作。

2008年10月28日星期二

自动化SCP 最新的文件

时常用到从一台服务器CP到另一台机器,但是文件每个小时在不停生成,手动的话太麻烦了,
使用下面命令就可以了。


for x in `seq 1 10000`;do sleep 10;find . -name "*.tracking.log" -mmin -1 | xargs -r -i scp {} qa_tracking@backup01:/home/qa_tracking/pruk_tracking/ApacheLogs/;done

2008年10月27日星期一

top 命令详解

op命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 下面详细介绍它的使用方法。

认识top的显示结果

top命令的显示结果如下所示:

top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0


统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度.
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。
当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si

最后两行为内存信息,内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,
但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT最后一次写入到现在,被修改过的页面数。
w S 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

更改显示内容

通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。

o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。

按大写的 FO 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2006/08/16/top-command/以及本声明。

2008年10月26日星期日

Linux 完整的WEB服务器安装方案

关机
poweroff

是看端口命令
netstat -ant

更改服务器语言
vi/etc/sysconfig/i18n

英文

LANG="en_US.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SUPPORTED="en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
~


装好虚拟机后
配置
ip ---- setup

编辑
dns vi/etc/resolv.conf

查看
DNS ---- nslookup

然后重启网络
service network restart


设置开机自动启动

vi/etc/rc.local

touch /var/lock/subsys/local
/etc/rc.d/init.d/iptables start
sh /etc/rc.d/firewall-1
#/siteroot/appserver/memcached/bin/memcached -d -m 256 -u nobody -l 127.0.0.1 -p 11211
#postfix stop
/siteroot/appserver/memcached/bin/memcached -d -m 500 -l 192.168.0.86 -p 11211 -u nobody
/siteroot/appserver/memcached/bin/memcached -d -m 100 -l 192.168.0.86 -p 11212 -u nobody
/siteroot/newserver/httpd/bin/apachectl start
/siteroot/newserver/mysql/bin/mysqld_safe --user=mysql &
/siteroot/newserver/squid/sbin/squid start



#######################################################
###download.softs.sh
###以下链接不保证有效..请自行更新
###总共 18个文件
#######################################################

cd /siteroot/softs
rm -rf *

wget http://ftp.plusline.de/mysql/Downloads/MySQL-5.0/mysql-5.0.45.tar.gz
wget http://mirror.x10.com/mirror/apache/httpd/httpd-2.0.59.tar.gz
wget http://superb-west.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.12-no-config.tar.gz
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.2.1.tar.gz
wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
wget http://www.zlib.net/zlib-1.2.3.tar.gz
wget http://monkey.org/~provos/libevent-1.3b.tar.gz
wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
wget http://xmlsoft.org/sources/libxml2-2.6.29.tar.gz

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.2.tar.gz(最新)

wget http://cn.php.net/get/php-5.2.3.tar.gz/from/cz2.php.net/mirror
wget http://bart.eaccelerator.net/source/0.9.5.1/eaccelerator-0.9.5.1.tar.bz2
wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE4.tar.gz
wget http://pecl.php.net/get/memcache-2.1.0.tgz
wget ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.4.1.tar.gz
wget ftp://ftp.eyrie.org/pub/software/system/newsyslog-1.8.tar.gz
wget http://downloads.zend.com/optimizer/3.0.1/ZendOptimizer-3.0.1-linux-glibc21-i386.tar.gz



#######################################################
###soft.install.sh
#######################################################
#######################################################
###apache compile
#######################################################
###########1--##########

cd /siteroot/softs
tar xfvz httpd-2.0.59.tar.gz
cd httpd-2.0.59
make clean
./configure --prefix=/siteroot/appserver/httpd --enable-so --enable-track-vars --enable-moudules-most --enable-rewrite --enable-expires --enable-dav
make
make install
cd /siteroot/softs


#################
配置httpd.conf

1,指定根目录(DocumentRoot)一队...
2,加入三名话
PHPIniDir /etc/php.ini(指定php.ini文件)
AddType application/x-httpd-php .php
AddType application/x-httpd-php-soure .phps

启动apache

/siteroot/appservice/httpd/bin/apachect1 stop
/siteroot/appservice/httpd/bin/apachect1 start


#########################
今天重新编译以前的一个程序,里面用到iconv库:
gcc test.cc -liconv运行时:
a.out:error while loading shared libraries:
libiconv.so.2: cannot open shared object file:
No such file or directory以前编译运行是可以的,可能是不久前升级了iconv库影响。
在/usr/local/lib下可以找到libiconv.so.2,把/usr/local/lib加到路径中也不行。google了一下,
解决了:在/etc/ld.so.conf中加一行 /usr/local/lib,运行ldconfig

#########2--##########

cd /siteroot/softs
groupadd mysql
useradd -g mysql mysql
tar xfvz /siteroot/softs/mysql-5.0.27.tar.gz
cd mysql-5.0.27
make clean
./configure --prefix=/siteroot/appserver/mysql --with-charset=utf8 -with-mysqld-ldflags=-all-static
make
make install
rm -rf /etc/my.cnf
cp /siteroot/softs/mysql-5.0.45/support-files/my-medium.cnf /etc/my.cnf
mkdir /siteroot/appserver/mysql/var


//先初始化后在执行下面的权限

/siteroot/appserver/mysql/bin/mysql_install_db (初始化)
/siteroot/appserver/mysql/bin/mysqld_safe --user=mysql & (启动mysql)

接接数据库

/siteroot/appserver/mysql/bin/mysql -u root -p

下面是
connect 数据库名

mysql >(数据库名)
mysql >sql语句

(chmod)改变文件权限

chown -R root /siteroot/appserver/mysql/
chown -R mysql /siteroot/appserver/mysql/var
chgrp -R mysql /siteroot/appserver/mysql/
cd /siteroot/softs


备份数据

/siteroot/appserver/mysql/var/mysqldump -u root -p kevin(数据库名)->/siteroot(指定路径)/kevin.sql


一、备份数据库:(命令在DOS的mysql\bin目录下执行)

mysqldump --opt school>school.bbb
注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p aikersql> aiker.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u aiker -p aikersql users> aiker_users.sql
3.导出一个数据库结构
mysqldump -u root -p -d --add-drop-table aikersql>d:\aiker_db.sql

-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

二.导入数据库

常用source 命令
进入mysql数据库控制台,如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\aiker_db.sql

也可以用 mysql -uroot -Ddb1 < d : \ aiker_db.sql

三、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用n来代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、数据传入命令 load data local infile "文件名" into table 表名;

注意:你最好将文件复制到mysqlbin目录下,并且要先用use命令打表所在的库。



#######3--#######

cd /siteroot/softs
tar xfvz freetype-2.2.1.tar.gz
cd freetype-2.2.1
make clean
./configure
make
make install
cd /siteroot/softs


###########4--#########

cd /siteroot/softs
tar xfvz libpng-1.2.12-no-config.tar.gz
cd libpng-1.2.12
rm -rf makefile
cp scripts/makefile.std makefile
make clean
make install
cd /siteroot/softs

#######5--#########

cd /siteroot/softs
mkdir /usr/local/modules
mkdir /usr/local/jpeg6
mkdir /usr/local/jpeg6/bin
mkdir /usr/local/jpeg6/lib
mkdir /usr/local/jpeg6/include
mkdir /usr/local/jpeg6/man
mkdir /usr/local/jpeg6/man/man1

cd /siteroot/softs
tar xfvz jpegsrc.v6b.tar.gz
cd jpeg-6b
make clean
./configure --enable-shared --enable-static
make
make install
cd /siteroot/softs

###########6--############

cd /siteroot/softs
tar xfvz gd-2.0.33.tar.gz
cd gd-2.0.33
make clean
./configure
make
make install
cd /siteroot/softs

#########7--#########

cd /siteroot/softs
tar xfvz zlib-1.2.3.tar.gz
cd zlib-1.2.3
make clean
./configure
make
make install
cd /siteroot/softs

##########8--##########

cd /siteroot/softs
tar xfvz libiconv-1.11.tar.gz
cd libiconv-1.11
./configure --prefix=/usr/local/libiconv
make
make install
cd /siteroot/softs

###########9--##############

cd /siteroot/softs
tar xfvz libxml2-2.6.29.tar.gz
cd libxml2-2.6.29
make clean
./configure
make
make install
cd /siteroot/softs

###########10--##############

cd /siteroot/softs
tar xfvz php-5.2.3.tar.gz
cd /siteroot/softs/php-5.2.3
make clean
#./configure --prefix=/siteroot/appserver/php5 --with-apxs2=/siteroot/appserver/httpd/bin/apxs --disable-debug --enable-safe-mode --enable-trans-sid --with-xml --with-mysql=/siteroot/appserver/mysql --with-pdo-mysql=/siteroot/appserver/mysql --enable-short-tags --with-gd --with-zlib --with-jpeg-dir=/usr/local/jpeg6 --with-png --enable-memory-limit --disable-posix --with-iconv --enable-mbstring=cn --enable-gd-nati --enable-ftp --enable-track-vars --enable-gd-nati

不加iconv
./configure --prefix=/siteroot/appserver/php5 --with-apxs2=/siteroot/appserver/httpd/bin/apxs --disable-debug --enable-safe-mode --enable-trans-sid --with-xml --with-mysql=/siteroot/appserver/mysql --with-pdo-mysql=/siteroot/appserver/mysql --enable-short-tags --with-gd --with-zlib --with-jpeg-dir=/usr/local/jpeg6 --with-png --enable-memory-limit --disable-posix --with-iconv-dir=/usr/local --enable-mbstring=cn --enable-gd-nati --enable-ftp --enable-track-vars --enable-gd-nati

加一个iconv的路径
( --with-iconv=/usr/local/libiconv/)用于转码
./configure --prefix=/siteroot/appserver/php5 --with-apxs2=/siteroot/appserver/httpd/bin/apxs --disable-debug --enable-safe-mode --enable-trans-sid --with-xml --with-mysql=/siteroot/appserver/mysql --with-pdo-mysql=/siteroot/appserver/mysql --enable-short-tags --with-gd --with-zlib --with-jpeg-dir=/usr/local/jpeg6 --with-png --enable-memory-limit --disable-posix --with-iconv=/usr/local/libiconv --enable-mbstring=cn --enable-gd-nati --enable-ftp --enable-track-vars --enable-gd-nati


make
make install
rm -rf /etc/php.ini
cp php.ini-dist /etc/php.ini


应行到上基本上装好了,下面是一些辅助



配置php.ini
extension_dir ='/siteroot/appserver/php5/lib/php/extensions/no-debug-non-zts-20060613'
其它的基本不用配
如果要配memcache的话
加上下面这一句
extension =memcache.so

###########11--##############
###########################################################
###instal Zend ZendOptimizer....
#####tar ...xfvz......zend...

##./install
###########################################################

###########12--##############

cd /siteroot/softs
tar xfvz squid-2.6.STABLE4.tar.gz
cd squid-2.6.STABLE4
make clean
./configure --prefix=/siteroot/appserver/squid
make
make install
cd /siteroot/softs

###########13--##############

cd /siteroot/softs
tar xfvz libevent-1.3b.tar.gz
cd libevent-1.3b
make clean
./configure --prefix=/siteroot/appserver/libevent
make
make install
rm -rf /usr/lib/libevent-1.3b.so.1
cp /siteroot/appserver/libevent/lib/libevent-1.3b.so.1 /usr/lib
cd /siteroot/softs


###########14--##############

cd /siteroot/softs
tar xfvz memcached-1.2.0.tar.gz
cd memcached-1.2.0
make clean
./configure --prefix=/siteroot/appserver/memcached -with-libevent=/siteroot/appserver/libevent
make
make install
cd /siteroot/softs

配置memcache

/siteroot/appserver/memcached/bin/memcached -d -m 800 -l 192.168.1.26 -p 11211 -u nobody (-d 启动进程 -m分配给Memcache使用的内存数量 -l是监听的服务器IP地址 -p 设置端口 -u运行Memcache的用户)

例子 1
usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
(-d 选项是启动一个守护进程,-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,-u是运行Memcache的用户,我这里是 root,-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`

也可以启动多个守护进程,不过端口不能重复。)

查看memcache设置成功没

netstat -an|more(查看里面有所设端口没)



###########15--##############

cd /siteroot/softs
bunzip2 eaccelerator-0.9.5.1.tar.bz2
tar xfv eaccelerator-0.9.5.1.tar
cd eaccelerator-0.9.5.1
make clean
export PHP_PREFIX=/siteroot/appserver/php5
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config --prefix=/siteroot/appserver/eaccelerator
make && make install
cd /siteroot/softs


###########16--##############

cd /siteroot/softs
tar xfvz memcache-2.1.0.tgz
cd memcache-2.1.0
make clean
export PHP_PREFIX=/siteroot/appserver/php5
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make && make install
cd /siteroot/softs

###########17--##############

cd /siteroot/softs
tar xfvz newsyslog-1.8.tar.gz
cd newsyslog-1.8
make clean
./configure
make
make install
cd /siteroot/softs



###########18--##############

cd /siteroot/softs
tar xfvz postfix-2.4.1.tar.gz
cd postfix-2.4.1
useradd postfix
useradd postdrop
make
make install
cd /siteroot/softs

(敲好多回车)

#####################################################
###soft config.....
#####################################################

Crate a new file: /usr/local/etc/newsyslog.conf, paste lines below:
CODE:
set squid_logpath = /siteroot/appserver/squid/var/logs
set squid_log = /siteroot/appserver/squid/var/logs/access.log
set date_squid_log = /siteroot/appserver/squid/var/logs/access%Y%M%D.log

SQUID{
restart: run /siteroot/appserver/squid/sbin/squid -k rotate
log: SQUID squid_log squid squid 644
archive: SQUID date_squid_log 0
}

3.run newsyslog in crontab,(example: run once 23:58 daily):
CODE:
58 23 * * * /usr/local/sbin/newsyslog


LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

DAV svn
SVNParentPath /source
AuthzSVNAccessFile /source/authz.conf
AuthType Basic
AuthName "Subversion.zoneyump"
AuthUserFile /source/authfile
Require valid-user


#######################################################
#######################################################

#cd /siteroot/softs
#tar xfvz subversion-1.4.4.tar.gz
#cd subversion-1.4.4
#make clean
#./configure --with-apxs=/siteroot/appserver/httpd/bin/apxs --prefix=/siteroot/appserver/subversion --with-apr=/siteroot/appserver/httpd #--with-apr-util=/siteroot/appserver/httpd --with-ssl --with-zlib --enable-maintainer-mode
#make
#make install

directive requires additional arguments

当虚拟主机设置好以后,我重启时发现停成功了,启动失败了,有如下提示:

Starting httpd: Syntax error on line 993 of /etc/httpd/conf/httpd.conf:
<VirtualHost> directive requires additional arguments


仔细看了一下,原来是设置时少了一个参数,在网上也发现一些网友也有不少遇到同样问题:

<VirtualHost>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /www/docs/dummy-host.example.com

ServerName dummy-host.example.com

ErrorLog logs/dummy-host.example.com-error_log

CustomLog logs/dummy-host.example.com-access_log common

</VirtualHost>


解决方法如下:

NameVirtualHost *:80

然后下面配置虚拟主机设置为:

<VirtualHost *> "这一点不同"

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /www/docs/dummy-host.example.com

ServerName dummy-host.example.com

ErrorLog logs/dummy-host.example.com-error_log

CustomLog logs/dummy-host.example.com-access_log common

</VirtualHost>

然后运行成功了,如下:


[root@smart ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Sun Oct 26 23:26:49 2008] [warn] NameVirtualHost *:80 has no VirtualHosts
[ OK ]

rpm命令的常用用法及命令选项 (lrzsz)

发现自己安装的linux(CenOS 5.1)机器上没有rz,sz命令,每次上传文件非常都得用ftp,相当麻烦,于是进行安装,碰到了以下的问题:
1. 这两个命令所对应的rpm叫什么名字?
还好以前的一台机器上能使用rz,sz命令,这样通过 rpm -qf /usr/bin/rz(rz命令所在的路径,能使用whereis rz 或which rz 命令来查路径).

2. 这样就得知了rz所对应的rpm包了,lrzsz-0.12.20-16.rpm.
3. 到网上去下载或拿出你的linux安装光盘,然后将这个包传到要安装的服务器上面去.
4. 使用命令安装就可以了,如下:
rpm -ivh lrzsz-0.12.20-16.rpm.
5. 好了,这样rz ,sz 命令就能使用了.

附注:rpm命令的一些常用选项:

1. 安装包:rpm -ivh 包名.
2. 升级包:rpm -Uvh 报名 (如果没有旧的就安装,有旧的就升级).
3. 如一个RPM包安装以后到底安装了那些文件,你能使用这个命令?
# rpm -ql packagename
4. 把特定的软件包(packagename)删除掉,“-e”就表示删除(erase)的意思.
# rpm -e packagename

5. 更有最重要的一个命令,反查命令所对应的rpm包, 这样就能知道rz命令所对应的rpm包了
rpm -qf /usr/bin/rz

6. 怎么知道自己所要安装的rpm包将要把程式安装到那些目录中去呢?以免rpm包程式安装完成以后,自己两眼一摸黑,使用rpm命令的如下选项:
# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
......
......

该命令会列出rpm包中所有文件将要放在什么目录中去;

7. 怎么将rpm包安装到自己指定的目录中去?
# rpm -ivh --prefix /dirname rpmname.rpm
这里需要注意的是,有些rpm包的安装路径是不允许进行修改的,这时,只能使用默认安装了。

8. 安装完成以后,能确认一下:
#rpm -ql rpmname.rpm

总结:
如此以来,rpm命令的常用选项基本上已都有了,只要熟练掌控这些选项的使用,处理日常工作中碰到的问题应该不会求人了;
a)怎么查找一个文件属于哪一个rpm包(当然,前提是这个文件是从rpm包安装进来的)
b)怎么安装和卸载一个rpm包(包括路径的改动)
c)怎么查找默认的rpm包安装路径
d)等等吧,不再赘述了

2008年10月23日星期四

vi命令的查找和替换

vi是unix和linux系统上最强大和最普遍的文本编辑工具,一般而言,对于初次接触vi的朋友,往往对它的字符替换不是很熟悉,下面做一个简单的介绍.

对于字符替换,应该解决这样几个问题:
1.用谁替换谁的问题;
2.在那个范围内进行查找和替换;
3.是替换查找到的第一个还是所有匹配的项全部替换;

vi命令的各种选项就提供了这样的选择
按住esc键,进入命令状态,然后按:,进入命令模式,开始输入查找和替换命令,

一般形式如下:
ranges/source/target/g
解释:range表示要搜索的范围 "s"这个字母表示搜索的意思,这个是不能缺少的;
source表示要搜索的字串,
target表示要进行替换的字串,
g表示对于符合条件的字串全部进行替换;
其中ranges的去值如下:
1) %表示全部的行;
2) .表示当前行;
3) $表示最后一行;
4) 可以用具体的数字表示具体的行,如10,20等;

使用方法举例:
1、在vi中使用的查找替换方法
利用 :s 命令可以实现字符串的替换。
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

2、在shell中使用find结合grep进行文件的替换

# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;

上面命令可以在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件


好了,到这里,我想以前对vi命令有些了解的朋友已经可以很好的掌握vi的替换命令了。
zcat dv.21cn002_log.20071015.gz |grep dates=071015|grep 2007:23 |wc -l
要把上述dates=071015 全部替换成user=danahby
在VI下输入:%s/dates=071015 /user=danahby /g

2008年9月18日星期四

Killall的使用详解

先举例:
killall dumpHistory.sh php java
意思是:kill正在运行的文件名为dumpHistory.sh 和所有的php,所有的java程序.
注意:kill文件名字时一定要用全名字。

另外如果有杀不掉的情况,可以强止中止用kill -9 PID

================================================================
----------------------------下面详解----------------------------
================================================================
NAME (名称)
killall - 以名字方式来杀死进程

SYNOPSIS (总览)
killall [-egiqvw] [-signal] name ...
killall -l
killall -V

DESCRIPTION (描述)
killall 发送一条信号给所有运行任意指定命令的进程. 如果没有指定信号名, 则发送 SIGTERM.

信号可以以名字 (如 -HUP ) 或者数字 (如 -1 ) 的方式指定. 信号 0 (检查进程是否存在)只能以数字方式指定.

如果命令名包括斜杠 (/), 那么执行该特定文件的进程将被杀掉, 这与进程名无关.

如果对于所列命令无进程可杀, 那么 killall 会返回非零值. 如果对于每条命令至少杀死了一个进程, killall 返回 0.

killall 进程决不会杀死自己 (但是可以杀死其它 killall 进程).

OPTIONS (选项)

-e :对于很长的名字, 要求准确匹配. 如果一个命令名长于 15 个字符, 则可能不能用整个名字 (溢出了). 在这种情况下, killall 会杀死所有匹配名字前 15 个字符的所有进程. 有了 -e 选项,这样的记录将忽略. 如果同时指定了 -v 选项, killall 会针对每个忽略的记录打印一条消息.
-g :杀死属于该进程组的进程. kill 信号给每个组只发送一次, 即使同一进程组中包含多个进程.
-i :交互方式,在杀死进程之前征求确认信息.
-l :列出所有已知的信号名.
-q :如果没有进程杀死, 不会提出抱怨.
-v :报告信号是否成功发送.
-V :显示版本信息.
-w :等待所有杀的进程死去. killall 会每秒检查一次是否任何被杀的进程仍然存在, 仅当都死光后才返回. 注意: 如果信号被忽略或没有起作用, 或者进程停留在僵尸状态, killall 可能会永久等待.


FILES(相关文件)

/proc proc文件系统的存在位置

KNOWN BUGS (已知 BUGS)
以文件方式杀死只对那些在执行时一直打开的可执行文件起作用, 也即, 混杂的可执行文件不能够通过这种方式杀死.

要警告的是输入 killall name 可能不会在非 Linux 系统上产生预期的效果, 特别是特权用户执行时要小心.

在两次扫描的间隙, 如果进程消失了而被代之以一个有同样 PID 的新进程, killall -w 侦测不到.

2008年9月16日星期二

ssh-keygen 免输入密码登陆

懒得每次登陆时或是SCP远程COPY文件时输入密码,可以使用以下方法:
步骤如下:

# cd ~/.ssh/
# ssh-keygen -t rsa 或 ssh-keygen -d (dsa) => 生成文件 id_rsa, id_rsa.pub
# scp id_rsa.pub remote_server_hostname:~/.ssh/
# ssh user@remote_server_hostname
# cat .ssh/id_rsa.pub >> .ssh/authorized_keys

完成了,接下来你再次登陆和SCP文件时就可以不要密码了。

另外可能一些用户还不行,接下要看你的目录和文件权限是否正确,

# cd ~
# chmod 700 .ssh/ (安全机制考虑)
# chmod 600 .ssh/id_rsa (只读防止别人修改,安全机制考虑)
# ssh user@remote_server_hostnam
# chmod 600 .ssh/authorized_keys

现在完成了,确保可以正确使用了.

说明:

id_rsa: private key
id_rsa.pub: public key

将 public key(id_rsa.pub) 内容拷贝到远程的服务加到user 的 .ssh/authorized_keys 中.
完成之后登陆访问时,就会用本机的private key(id_rsa) 与远程服务器的public key(authorized_keys) 进行认证,认证通过就可以直接登陆或访问了,不用再输入密码,并且相对比较安全.

========================================================================
ssh-keygen 中文手册(来自网友)
========================================================================
名称
ssh-keygen - 生成、管理和转换认证密钥


语法

ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-f input_keyfile]
ssh-keygen -e [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D reader
ssh-keygen -F hostname [-f known_hosts_file]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -U reader [-f input_keyfile]
ssh-keygen -r hostname [-f input_keyfile] [-g]
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-W generator]


描述
ssh-keygen 用于为 ssh(1)生成、管理和转换认证密钥,包括 RSA 和 DSA 两种密钥。
密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。

ssh-keygen 还可以用来产生 Diffie-Hellman group exchange (DH-GEX) 中使用的素数模数。
参见模数和生成小节。

一般说来,如果用户希望使用RSA或DSA认证,那么至少应该运行一次这个程序,
在 ~/.ssh/identity, ~/.ssh/id_dsa 或 ~/.ssh/id_rsa 文件中创建认证所需的密钥。
另外,系统管理员还可以用它产生主机密钥。

通常,这个程序产生一个密钥对,并要求指定一个文件存放私钥,同时将公钥存放在附加了".pub"后缀的同名文件中。
程序同时要求输入一个密语字符串(passphrase),空表示没有密语(主机密钥的密语必须为空)。
密语和口令(password)非常相似,但是密语可以是一句话,里面有单词、标点符号、数字、空格或任何你想要的字符。
好的密语要30个以上的字符,难以猜出,由大小写字母、数字、非字母混合组成。密语可以用 -p 选项修改。

丢失的密语不可恢复。如果丢失或忘记了密语,用户必须产生新的密钥,然后把相应的公钥分发到其他机器上去。

RSA1的密钥文件中有一个"注释"字段,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。
创建密钥的时候,注释域初始化为"user@host",以后可以用 -c 选项修改。

密钥产生后,下面的命令描述了怎样处置和激活密钥。可用的选项有:

-a trials
在使用 -T 对 DH-GEX 候选素数进行安全筛选时需要执行的基本测试数量。

-B 显示指定的公钥/私钥文件的 bubblebabble 摘要。

-b bits
指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。

-C comment
提供一个新注释

-c 要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。
程序将提示输入私钥文件名、密语(如果存在)、新注释。

-D reader
下载存储在智能卡 reader 里的 RSA 公钥。

-e 读取OpenSSH的私钥或公钥文件,并以 RFC 4716 SSH 公钥文件格式在 stdout 上显示出来。
该选项能够为多种商业版本的 SSH 输出密钥。

-F hostname
在 known_hosts 文件中搜索指定的 hostname ,并列出所有的匹配项。
这个选项主要用于查找散列过的主机名/ip地址,还可以和 -H 选项联用打印找到的公钥的散列值。

-f filename
指定密钥文件名。

-G output_file
为 DH-GEX 产生候选素数。这些素数必须在使用之前使用 -T 选项进行安全筛选。

-g 在使用 -r 打印指纹资源记录的时候使用通用的 DNS 格式。

-H 对 known_hosts 文件进行散列计算。这将把文件中的所有主机名/ip地址替换为相应的散列值。
原来文件的内容将会添加一个".old"后缀后保存。这些散列值只能被 ssh 和 sshd 使用。
这个选项不会修改已经经过散列的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用。

-i 读取未加密的SSH-2兼容的私钥/公钥文件,然后在 stdout 显示OpenSSH兼容的私钥/公钥。
该选项主要用于从多种商业版本的SSH中导入密钥。

-l 显示公钥文件的指纹数据。它也支持 RSA1 的私钥。
对于RSA和DSA密钥,将会寻找对应的公钥文件,然后显示其指纹数据。

-M memory
指定在生成 DH-GEXS 候选素数的时候最大内存用量(MB)。

-N new_passphrase
提供一个新的密语。

-P passphrase
提供(旧)密语。

-p 要求改变某私钥文件的密语而不重建私钥。程序将提示输入私钥文件名、原来的密语、以及两次输入新密语。

-q 安静模式。用于在 /etc/rc 中创建新密钥的时候。

-R hostname
从 known_hosts 文件中删除所有属于 hostname 的密钥。
这个选项主要用于删除经过散列的主机(参见 -H 选项)的密钥。

-r hostname
打印名为 hostname 的公钥文件的 SSHFP 指纹资源记录。

-S start
指定在生成 DH-GEX 候选模数时的起始点(16进制)。

-T output_file
测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性。

-t type
指定要创建的密钥类型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)

-U reader
把现存的RSA私钥上传到智能卡 reader

-v 详细模式。ssh-keygen 将会输出处理过程的详细调试信息。常用于调试模数的产生过程。
重复使用多个 -v 选项将会增加信息的详细程度(最大3次)。

-W generator
指定在为 DH-GEX 测试候选模数时想要使用的 generator

-y 读取OpenSSH专有格式的公钥文件,并将OpenSSH公钥显示在 stdout 上。


模数生成
ssh-keygen 可以生成用于 Diffie-Hellman Group Exchange (DH-GEX) 协议的 groups 。
生成过程分为两步:
首先,使用一个快速且消耗内存较多的方法生成一些候选素数。然后,对这些素数进行适应性测试(消耗CPU较多)。

可以使用 -G 选项生成候选素数,同时使用 -b 选项制定其位数。例如:

# ssh-keygen -G moduli-2048.candidates -b 2048

默认将从指定位数范围内的一个随机点开始搜索素数,不过可以使用 -S 选项来指定这个随机点(16进制)。

生成一组候选数之后,接下来就需要使用 -T 选项进行适应性测试。
此时 ssh-keygen 将会从 stdin 读取候选素数(或者通过 -f 选项读取一个文件),例如:

# ssh-keygen -T moduli-2048 -f moduli-2048.candidates

每个候选素数默认都要通过 100 个基本测试(可以通过 -a 选项修改)。
DH generator 的值会自动选择,但是你也可以通过 -W 选项强制指定。有效的值可以是: 2, 3, 5

经过筛选之后的 DH groups 就可以存放到 /etc/ssh/moduli 里面了。
很重要的一点是这个文件必须包括不同长度范围的模数,而且通信双方双方共享相同的模数。


文件
~/.ssh/identity
该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/identity.pub
该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。
此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized_keys 文件中。

~/.ssh/id_dsa
该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/id_dsa.pub
该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized_keys 文件中。

~/.ssh/id_rsa
该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/id_rsa.pub
该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized_keys 文件中。

/etc/ssh/moduli
包含用于 DH-GEX 的 Diffie-Hellman groups 。文件的格式在 moduli(5) 手册页中描述。