sar是System Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的 特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。sar是读 /proc这个内存文件系统进行采样来得到数据。sar 从/var/log/sa/sadd 读取记录文件的资料。/usr/lib/sa/sadc 负责维护系统活动资料和建立这些记录文件。sar实际包括两个shell 程序/usr/lib/sa/sa1 和/usr/lib/sa/sa2。/etc/cron.d/systat 是crontab 的系统文件, 每十分钟
2007年5月 归档
sar是System Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的 特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。sar是读 /proc这个内存文件系统进行采样来得到数据。sar 从/var/log/sa/sadd 读取记录文件的资料。/usr/lib/sa/sadc 负责维护系统活动资料和建立这些记录文件。sar实际包括两个shell 程序/usr/lib/sa/sa1 和/usr/lib/sa/sa2。/etc/cron.d/systat 是crontab 的系统文件, 每十分钟
原文链接:http://tech.ccidnet.com/art/322/20041123/180627_1.html
日志也是用户应该注意的地方之一。不要低估日志文件对网络安全的重要作用,因为日志文件能够详细记录系统每天发生的各种各样的事件。用户可以通过日志文件 检查错误产生的原因,或者在受到攻击和黑客入侵时追踪攻击者的踪迹。日志的两个比较重要的作用是:审核和监测。配置好的Linux的日志非常强大。对于 Linux系统而言,所有的日志文件都在/var/log下。默认情况下,Linux的日志文件已经足够强大,但没有记录FTP的活动。用户可以通过修改 /etc/ftpacess让系统记录FTP的一切活动。
Linux日志系统简介: 日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日 志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。Linux系统一般有3个主要的日志子系统:连接时间日志、进程统计日志和错 误日志。
脚本功非常简单删除非2007年的所有邮件
#!/usr/bin/perl -w
use strict;
#本模块主要用于解析email中的内容
use Email::Simple;
foreach my $mailfile (@ARGV){
$/='';
open FD,$mailfile;
my $mail=<FD>;
$/='\n';
具体描述可查看LINUX SERVER HACK一书的188页
/root/bin目录下
建立脚本文件: ssh-to
#!/bin/sh
ssh `basename $0` $*
以主机名为参数做多个链接如:
cd /root/bin/
ln -s ssh-to server1
ln -s ssh-to server2
配合公钥认证就可以最快的登录远端主机或在远端主机运行命令
如
server1 登陆server1主机
server2 uptime 在server2主机上运行uptime命令
使用Net::SMTP进行简单的邮件发送
#!/usr/bin/perl -w
use strict;
use Net::SMTP;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime;
$year+=1900;
my @month=qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @week=qw(Sunday Monday Tuesday Wednesday Thursday Friday Saturday);
my $timestr=$week[$wday].", ".$mday." ".$month[$mon]." ".$year." ".$hour.":".$min.":".$sec." +0800";
my $smtp=Net::SMTP->new('www.gmail.com',DEBUG => 1,HELO => "www.perlmail.pl");
$smtp->mail('<"supersun"@gmail.dcom>');
$smtp->to('<"supersun"@gmail.com>');
ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序。ssh-agent在X会话或登录会话之初启动,所有其他窗口或程序则以客户端程序的身份启动并加入到ssh-agent程序中。通过使用环境变量,可定位代理并在登录到其他使用ssh机器上时使用代理自动进行身份验证。
其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。通过使用ssh-agent就可以很方便的在不的主机间进行漫游了,假如我们手头有三台server:host1、host2、host3且每台server上到保存了本机(supersun.biz)的公钥,因此我可以通过公钥认证登录到每台主机:
[root@supersun.biz ~]#ssh host1
Last login: Thu Oct 18 13:56:08 2007 from supersun
[root@host1 root]#
[root@supersun.biz ~]#ssh host2
Last login: Fri Oct 12 11:14:44 2007 from supersun
[root@host2 root]#
[root@supersun.biz ~]#ssh host3
Last login: Sat Sep 29 10:21:32 2007 from supersun
[root@host3 root]#
所有刻录光盘的机器,我们就称它为刻录机,可被刻录的片,我们称它为空白刻录片(就是俗称的空片),而如果严格来讲的话,刻录的过程,事实上是一项极为复杂的光学过程。
我们从软件的操作与硬件的应用将之简化,所以我们只要学会刻录软件的应用与硬件的搭配即可进行刻录工作,而基本上,那些复杂的过程就交给电脑去处理了!
听起来刻录似乎很简单吧!学学软件就可以上路了?但事实上在软件的应用上却有着许许多多的学问,这也是计算机书店里刻录书籍充斥的原因之一。
文件内容如下:
[root@supersun ~]# cat /proc/loadavg
0.43 0.26 0.29 1/125 4133
这里的平均负载也就是可运行的进程的平均数
前三个值分别对应系统在5分钟、10分钟、15分钟内的平均负载
第四个值的分子是正在运行的进程数,分母是进程总数,最后一个是最近运行的进程ID号
现在我们将平均负载的值写到虚拟终端的标题栏上。
#!/usr/bin/perl -w
use strict;
$|++; #此处将特殊变量$|的值设定为1使得数据不进行缓冲
my $host=`/bin/hostname`;
chomp $host;
while(1){
open(LOAD,"/proc/loadavg") || die "不能打开文件 /proc/loadavg: $!\n";
my @load=split(/ /,<LOAD>);
close LOAD;
print "\033]0;";
print " $host : $load[0] $load[1] $load[2] at ",scalar(localtime);
print "\007";
sleep 2;
}
1: 怎么加快 qmail 投递邮件速度?
A: /var/qmail/control下面是qmail的控制文件,这两个文件:
Concurrentcylocal default: 10 最大本地同时传送数
Concurrencyremote default: 20 最大远程同时传送数
2: Qmail的主要配置文件有哪些?
A: http://chinaunix.net/forum/viewtopic.php?t=1126
3: qmail+LDAP安装配置方法? (netloafer)
A: http://chinaunix.net/forum/viewtopic.php?t=1119
4:Qmail如何限制附件的大小呢??
以下是我用于远程启动jboss服务器的脚本,此处刚好可以学习switch的使用
#!/usr/bin/perl -w
use strict;
sub useage(){
print "用法:$0 1|2|3|4 r|s|rs\n";
}
sub jboss_oprate(){
my ($host,$oprate)=@_;
system("ssh","$host",". /etc/profile;$oprate");
}
print "本程序用于重启rs1 rs2 rs3 rs4中的jboss服务器
";
useage(),exit if $#ARGV != 1;
my $host=shift;
my $oprate=shift;
SWITCH: {
$host == 1 and $host="rs1",last;
$host == 2 and $host="rs2",last;
$host == 3 and $host="rs3",last;
$host == 4 and $host="rs4",last;
useage(),exit;
}
SWITCH: {
$oprate eq "r" and $oprate = "jbr",last;
$oprate eq "s" and $oprate = "jbs",last;
$oprate eq "rs" and $oprate = "jbrestart",last;
useage(),exit;
}
print "现在对服务器$host进行$oprate操作:\n";
&jboss_oprate($host,$oprate);
print "程序运行完毕\n";
与TPC体系注重在线处理能力和数据库查询能力不同,SPEC体系中最广为人知的两个子项,是衡量CPU、内存性能的CPU2000和Web服务器性能的web2005。另外还有一个衡量Java服务器性能的jbb2005,近年来也逐渐受到关注。
除了TPC家族,SPEC家族也是广为人知的一大体系。SPEC指标体系由Standard Performance Evaluation Corp.制定,目前主要包括针对CPU性能的SPEC CPU2000(已有CPU2006,但尚无数据)、针对Web服务器的SPECweb2005、针对高性能计算的SPEC HPC2002与SPEC MPI2006、针对Java应用的jAppServer2004与JBB2005,以及对图形系统、网络和邮件服务器的测试指标。
Web服务参考Web2005
作为SPECweb99和SPECweb99_SSL的继承者,SPECweb2005延续了SPEC的传统,为Web用户提供客观的Web服务器系统性能测试基准。
SPEC Web2005测试的原理,是通过多台客户机向服务器发出Http Get请求,请求调用Web服务器上的网页文件,这些文件从数千字节到数兆字节不等。在相同的时间里,服务器回答的请求越多,就表明服务器对客户端的处理能力越强,系统的Web性能就越好。
跑Java参考jbb2005
SPECjbb2005(Java服务器基准)是一种用于评估服务器端Java性能的SPEC基准。和上一代的SPECjbb2000一样,SPECjbb2005可以通过模拟一套三层式的客户端/服务器系统来评估服务器端Java性能,而在模拟过程中最为强调的就是中间层。
该基准实施了JVM(Java虚拟机)、JIT(Just-In-Time)编译器、垃圾收集、线程和操作系统的某些方面。它还可测量CPU、缓存、内存和共享内存处理器(SMP)的性能。SPECjbb2005提供了一种新的增强型工作负载,而且其实施方式更加客观,可反映出真实环境中应用的设计方法。同时,这种增强型工作负载还引入了一些新的特性,如XML处理和BigDecimal计算,使基准测试可以更真实地反映出今天的各类应用。
目前,SPECjbb2005基准的重点包括:
● 模拟目前服务器端Java应用的最常见类型—三层式的系统。
● 模拟的重点是中间层的工作,如商业逻辑和对象操作等。
● 客户端被驱动器线程替代,数据库存储则被对象的二进制树替代。
连接端及标记
IP地址和端口被称作套接字,它代表一个TCP连接的一个连接端。为了获得TCP服务,必须在发送机的一个端口上和接收机的一个端口上建立连接。TCP连接用两个连接端来区别,也就是(连接端1,连接端2)。连接端互相发送数据包。
一个TCP数据包包括一个TCP头,后面是选项和数据。一个TCP头包含6个标志位。它们的意义分别为:
SYN: 标志位用来建立连接,让连接双方同步序列号。如果SYN=1而ACK=0,则表示该数据包为连接请求,如果SYN=1而ACK=1则表示接受连接。
FIN: 表示发送端已经没有数据要求传输了,希望释放连接。
RST: 用来复位一个连接。RST标志置位的数据包称为复位包。一般情况下,如果TCP收到的一个分段明显不是属于该主机上的任何一个连接,则向远端发送一个复位包。
URG: 为紧急数据标志。如果它为1,表示本数据包中包含紧急数据。此时紧急数据指针有效。
ACK: 为确认标志位。如果为1,表示包中的确认号时有效的。否则,包中的确认号无效。
PSH: 如果置位,接收端应尽快把数据传送给应用层。
TCP连接的建立
TCP是一个面向连接的可靠传输协议。面向连接表示两个应用端在利用TCP传送数据前必须先建立TCP连接。 TCP的可靠性通过校验和,定时器,数据序号和应答来提供。通过给每个发送的字节分配一个序号,接收端接收到数据后发送应答,TCP协议保证了数据的可靠 传输。数据序号用来保证数据的顺序,剔除重复的数据。在一个TCP会话中,有两个数据流(每个连接端从另外一端接收数据,同时向对方发送数据),因此在建 立连接时,必须要为每一个数据流分配ISN(初始序号)。为了了解实现过程,我们假设客户端C希望跟服务器端S建立连接,然后分析连接建立的过程(通常称 作三阶段握手):
1: C --SYN XXà S
2: C ?-SYN YY/ACK XX+1------- S
3: C ----ACK YY+1--à S
#!/usr/bin/perl -w
#nmap-parser.pl
use warnings;
use strict;
use Nmap::Parser;
my @host=map "192.168.1.$_",1..254;
my $nm= new Nmap::Parser;
$nm->parsescan("/usr/bin/nmap","-sP",@host);
foreach my $i (@host){
my $ht=$nm->get_host($i);
if($ht->status() eq "up"){
my $addr=$ht->mac_addr();
print "$i $addr\n";
}
}
部分运行结果
192.168.1.71 00:0D:87:ED:5A:2C
192.168.1.72 00:11:25:D8:46:88
192.168.1.73 00:12:3F:D2:F0:11
192.168.1.74 00:0B:CD:B4:C4:92
192.168.1.75 00:0D:87:ED:6F:EB
192.168.1.76 00:16:EC:75:6F:31
192.168.1.77 00:0D:87:CB:AF:84
192.168.1.79 00:07:E9:88:D7:26
一、定义配置文件
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:
1.配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
2.配置日志信息输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3.配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
二、在代码中使用Log4j
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
2.读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。
3.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-template.tld</taglib-location>
</taglib>
</web-app>
这是一个web.xml的实例,请参考
<!--所有的servlet写在这里-->
<servlet>
<!--依次写下每个servlet和类的对应关系-->
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!--该servlet的初始化参数,共有两个-->
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!--如果有别的servlet,仿照第一个书写形式把它们依次写在这里-->
<!--开始写路径对应关系-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<!--url对应,比如你写http://localhost:8080/*.do,它都会交给名字叫Action的servlet来执行-->
<url-pattern>*.do</url-pattern>
<!--如果有别的servlet,仿照第一个书写形式把它们路径对应关系写在这里-->
</servlet-mapping>
如何获取MAC:
在命令提示符中输入“ipconfig /all”,其中本地连接中的Physical Address对应的就是网卡的MAC地址,无线路由器可以在命令提示符中输入"arp -a"
查询MAC地址分配给哪个厂商:
以下是IEEE Standards Association的查询网址
IEEE OUI and Company_id Assignments
将前6位MAC地址(例“00-0a-d2"),输入Search for:一栏查询
什么是SSH?
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这 些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到 “中间人”(man-in-the-middle)这种方式的攻击。所谓 “中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中 间人”一转手做了手脚之后,就会出现很严重的问题。
SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额 外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一 个安全的“通道”。
最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
SSH的安全验证是如何工作的
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上, 客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来 的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可 以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
安装并测试OpenSSH
因为受到美国法律的限制,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从网络上下载并安装 OpenSSH(有关OpenSSH的安装和配置请参考:http: //www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm)。
安装完OpenSSH之后,用下面命令测试一下:
ssh -l [your accountname on the remote host] [address of the remote host]
如果OpenSSH工作正常,你会看到下面的提示信息:
The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。
然后,SSH提示你输入远程主机上你的帐号的口令。输入完口令之后,就建立了SSH连接,这之后就可以象使用telnet那样使用SSH了。
SSH的密匙
生成你自己的密匙对
生成并分发你自己的密匙有两个好处:
1) 可以防止“中间人”这种攻击方式
2) 可以只用一个口令就登录到所有你想登录的服务器上
用下面的命令可以生成密匙:
ssh-keygen
如果远程主机使用的是SSH 2.x就要用这个命令:
ssh-keygen –d
在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存成不同的文件的。
ssh-keygen命令运行之后会显示下面的信息:
Generating RSA keys: ............................ooooooO......ooooooO
Key generation complete.
Enter file in which to save the key (/home/[user]/.ssh/identity):
[按下ENTER就行了]
Created directory '/home/[user]/.ssh'.
Enter passphrase (empty for no passphrase):
[输入的口令不会显示在屏幕上]
Enter same passphrase again:
[重新输入一遍口令,如果忘记了口令就只能重新生成一次密匙了]
Your identification has been saved in /home/[user]/.ssh/identity.
[这是你的私人密匙]
Your public key has been saved in /home/[user]/.ssh/identity.pub.
The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine]
“ssh-keygen –d”做的是几乎同样的事,但是把一对密匙存为(默认情况下)“/home/[user]/.ssh/id_dsa”(私人密匙)和“/home/[user]/.ssh/id_dsa.pub”(公用密匙)。
现在你有一对密匙了:公用密匙要分发到所有你想用ssh登录的远程主机上去;私人密匙要好好地保管防止别人知道你的私人密匙。用“ls –l ~/.ssh/identity”或“ls –l ~/.ssh/id_dsa”所显示的文件的访问权限必须是“-rw-------”。
如果你怀疑自己的密匙已经被别人知道了,不要迟疑马上生成一对新的密匙。当然,你还要重新分发一次公用密匙。
分发公用密匙
在每一个你需要用SSH连接的远程服务器上,你要在自己的家目录下创建一个“.ssh”的子目录,把你的公用密匙“identity.pub” 拷贝到这个目录下并把它重命名为“authorized_keys”。然后执行:
chmod 644 .ssh/authorized_keys
这一步是必不可少的。如果除了你之外别人对“authorized_keys”文件也有写的权限,SSH就不会工作。
如果你想从不同的计算机登录到远程主机,“authorized_keys”文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密 匙,然后把生成的“identify.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。当然在新的计算机上你必须有一个帐 号,而且密匙是用口令保护的。有一点很重要,就是当你取消了这个帐号之后,别忘了把这一对密匙删掉。
Unicode是一种字符编码规范 。
先从ASCII说起。ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits)
因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他一些符号
。
而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其他符号,这种字符编码规范显然用来处理英 文没有什么问题。(实际上也可以用来处理法文、德文等一些其他的西欧字符,但是不能和英文通用),但是面对中文、阿拉伯文之类复杂的文字,255个字符显 然不够用
于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312-80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII字符来表示。
但是这个方法有问题,最大的问题就是,中文文字没有真正属于自己的编码,因为扩展ASCII码虽然没有真正的标准化,但是PC里的ASCII码还是有一 个事实标准的(存放着英文制表符),所以很多软件利用这些符号来画表格。这样的软件用到中文系统中,这些表格符就会被误认作中文字,破坏版面。而且,统计 中英文混合字符串中的字数,也是比较复杂的,我们必须判断一个ASCII码是否扩展,以及它的下一个ASCII是否扩展,然后才“猜”那可能是一个中文字
。
总之当时处理中文是很痛苦的。而更痛苦的是GB2312是国家标准,台湾当时有一个Big5编码标准,很多编码和GB是相同的,所以……,嘿嘿。
这时候,我们就知道,要真正解决中文问题,不能从扩展ASCII的角度入手,也不能仅靠中国一家来解决。而必须有一个全新的编码系统,这个系统要可以将 中文、英文、法文、德文……等等所有的文字统一起来考虑,为每个文字都分配一个单独的编码,这样才不会有上面那种现象出现。
为了避免裸词字串可能与子例程混淆,use strict subs禁止裸词字符串的使用,但是有几个例外的地方!
第一个可以使用裸词字符串的地方是qw操作符中
第二个是关系操作符的左边,即:
%hash={first => "cat", second => "dog"};
第三个地方就是版本号字串,关于版本号字串格式的定义:字串必须由数字小数点和一个可选项的v前缀,但当字串中只有一个小数点时为了与浮点数相区别,前缀的v就是必须的了.
Perl中字串的引用样式有五种:
原义字符引用
引号类型为单引号
引用操作符 q
插值字符串引用
引号类型为双引号
引用操作符为 qq
正则表达式字串引用
无引用类型
引用操作符为qr
单词表字串引用
无引用类型
引用操作符为qw
执行外部程序字串引用
引用类型为反小点
引用操作符为qx
Unicode 字符编码标准是固定长度的字符编码方案,它包含了世界上几乎所有现用语言的字符。
有关 Unicode 的信息可在最新版本的 The Unicode Standard 一书中找到,并且可从“Unicode 协会”(Unicode Consortium)Web 站点(www.unicode.org)中找到。
Unicode 使用两种编码格式:8 位和 16 位。缺省编码格式是 16 位,即每个字符是 16 位(两个字节)宽,并且通常显示为 U+hhhh,其中 hhhh 是字符的十六进制代码点。生成的 65000+ 代码元素足以用于 编码世界上主要语言的大多数字符,Unicode 标准还提供了一种扩展机制,允许编码一百多万个字符。扩展机制使用一对高位和低位代用字符来对扩展字符或补充字符进行编码。第一个(或高位)代用字符具有 U+D800 和 U+DBFF 之间的代码值,而第二个(或低位)代用字符具有 U+DC00 和 U+DFFF 之间的代码值。
UCS-2
“国际标准组织”(ISO)和“国际电工委员会”(IEC)标 准 10646(ISO/IEC 10646)指定了“通用多八位字节编码字符集”(UCS),该编码字符集有一个 16 位(双字节)版本(UCS-2)和一个 32 位(四字节)版本(UCS-4)。UCS-2 相当于没有代用字符的 Unicode 16 位格式。UCS-2 可以对 Unicode 版本 3.0 指令表中定义的所有(16 位)字符进行编码。两个 UCS-2 字符 - 一个高位代用字符后面跟随一个低位代用字符 - 需要对从 Unicode 版本 3.1 开始引入的每个新补充的字符进行编码。这些补充字符在原始的 16 位“基本多语言位面”(BMP 或位面 0)外部定义。
冰糖银耳汤
|
| 冰糖银耳汤 |
原料:银耳、红枣、枸杞、冰糖
做法:将银耳去蒂洗净放入压力锅内锅中,倒入枸杞、红枣、冰糖盖上锅盖,压力调到米饭档,保压时间10分钟后,即可食用。也可放入冰箱中冷却后食用。
特点:口感滑润,香甜醇美。

