<style type="text/css">
<!--
.ifile
{ position:absolute;
height:25px;
opacity:0;
filter:alpha(opacity=0);
-moz-opacity:0;
width:360px;
margin-top:4px;
}
-->
</style>
<input type="file" name="upfilename" id="upfilename" size="55" class="ifile"
onchange="
document.form.txtfilename.value=this.value.substr(this.value.lastIndexOf('\\')+1); " >
<input name="txtfilename" type="text" class="box" id="txtfilename" size="50" readonly style="height:17px;"/>
<span class="title" style="width: 80%"><img src="/image/button_browse.gif" width="80" height="30" align="absmiddle" onclick="document.form.upfilename.click();" style="z-index:999;" /></span>
主要注意点:
(1)FF 和IE兼容
(2)input file 隐藏
<!--
.ifile
{ position:absolute;
height:25px;
opacity:0;
filter:alpha(opacity=0);
-moz-opacity:0;
width:360px;
margin-top:4px;
}
-->
</style>
<input type="file" name="upfilename" id="upfilename" size="55" class="ifile"
onchange="
document.form.txtfilename.value=this.value.substr(this.value.lastIndexOf('\\')+1); " >
<input name="txtfilename" type="text" class="box" id="txtfilename" size="50" readonly style="height:17px;"/>
<span class="title" style="width: 80%"><img src="/image/button_browse.gif" width="80" height="30" align="absmiddle" onclick="document.form.upfilename.click();" style="z-index:999;" /></span>
主要注意点:
(1)FF 和IE兼容
(2)input file 隐藏
http://www.hificat.com/element/element.asp
http://www.hificat.com/wireless/cc1100_2.html
http://www.hificat.com/wireless/cc1100_2.html
<script type="text/javascript" src="/js/follow.js" ></script>
<script type="text/javascript">
function jumppage(){
$('#bloomup').dialog( {modal: true,resizable:false,width:'400px', height:'400px',overlay: { opacity: 0.7, background: 'black' } });
}
function closejumppage(){
$('#bloomup').dialog('close');
}
</script>
<iframe name="iframexq" id="iframexq" src="/con/exchange/act/putcodes" frameborder="0" scrolling="no" style="width:400px; height:390px"></iframe>
<div id="dialog"> </div>
$("#dialog").dialog( {
autoOpen :true,
height :200,
width :300,
modal :true,
bgiframe :true,
postion:'center',
close : function() {
},
buttons : {
"关闭" : function() {
$(this).dialog('close');
}
}
});
$('#dialog').dialog('open');
为什么用了 bgiframe :true 属性后,我页面上的SELECT标签还是会在DIALOG的前面,还有 postion:'center',但是DIALOG显示位置不是在页成居中.
页面用的是STRUTS2的SELECT标签,会不会是这二个有冲突,那位高手指点一下。
阅读全文
第一种:
第二种:
第三种:
第四种:
第五种:
我的方法:
<script language="javascript" type="text/javascript">
window.location.href="login.jsp?backurl="+window.location.href;
</script>
window.location.href="login.jsp?backurl="+window.location.href;
</script>
第二种:
<script language="javascript">
alert("返回");
window.history.back(-1);
</script>
alert("返回");
window.history.back(-1);
</script>
第三种:
<script language="javascript">
window.navigate("top.jsp");
</script>
window.navigate("top.jsp");
</script>
第四种:
<script language="JavaScript">
self.location='top.htm';
</script>
self.location='top.htm';
</script>
第五种:
<script language="javascript">
alert("非法访问!");
top.location='xx.jsp';
</script>
alert("非法访问!");
top.location='xx.jsp';
</script>
我的方法:
$go2url = "http://*.act.*.com/con/user/act/**?cqq=".$qq;
echo '<script language="javascript" type="text/javascript">';
echo 'window.location.href="'.$go2url.'"';
echo "</script>";
echo '<script language="javascript" type="text/javascript">';
echo 'window.location.href="'.$go2url.'"';
echo "</script>";
1、location和“:”号间不能有空格,否则会出错。
2、在用header前不能有任何的输出。
3、header后的PHP代码还会被执行。
下面是和asp中重定向response.redirect的比较:
例1:
两者区别:
asp的redirect函数可以在向客户发送头文件后起作用.
如
查是php中下例代码会报错:
只能这样:
即header函数之前不能向客户发送任何数据.
例2:
asp中
结果是重定向a.asp文件.
php呢?
我们发现它重定向b.php.
原来在asp中执行redirect后不会再执行后面的代码.
而php在执行header后,继续执行下面的代码.
在这方面上php中的header重定向不如asp中的重定向.有时我们要重定向后,不能执行后面的代码:
一般地我们用
但是我们可以简单的用下面的方法:
还要注意的是,如果是用Unicode(UTF-8)编码时也会出现问题,需要调整缓存设置.
php的js页面跳转方法:
第一种:
其中:XX是秒数,0为立即跳转.refresh 是刷新的意思.Url 是要跳转到的页面.
第二种:利用script实现
第三种:利用script实现,所不同的是使用 open 语句.且可以限制原窗口还是父窗口,子窗口或者新窗口.
其中 更改\'_self\' 就可以实现跳转限制原窗口还是父窗口,子窗口或者新窗口.第四种:利用php自带函数发送头部信息
速度最快,功能强大...但是有个问题必须指出:如果在使用这个函数前已经有html输出,哪怕是一个空格.那么在页顶会显示错误信息..
2、在用header前不能有任何的输出。
3、header后的PHP代码还会被执行。
下面是和asp中重定向response.redirect的比较:
例1:
两者区别:
asp的redirect函数可以在向客户发送头文件后起作用.
如
查是php中下例代码会报错:
只能这样:
即header函数之前不能向客户发送任何数据.
例2:
asp中
结果是重定向a.asp文件.
php呢?
我们发现它重定向b.php.
原来在asp中执行redirect后不会再执行后面的代码.
而php在执行header后,继续执行下面的代码.
在这方面上php中的header重定向不如asp中的重定向.有时我们要重定向后,不能执行后面的代码:
一般地我们用
但是我们可以简单的用下面的方法:
还要注意的是,如果是用Unicode(UTF-8)编码时也会出现问题,需要调整缓存设置.
php的js页面跳转方法:
第一种:
其中:XX是秒数,0为立即跳转.refresh 是刷新的意思.Url 是要跳转到的页面.
第二种:利用script实现
第三种:利用script实现,所不同的是使用 open 语句.且可以限制原窗口还是父窗口,子窗口或者新窗口.
其中 更改\'_self\' 就可以实现跳转限制原窗口还是父窗口,子窗口或者新窗口.第四种:利用php自带函数发送头部信息
速度最快,功能强大...但是有个问题必须指出:如果在使用这个函数前已经有html输出,哪怕是一个空格.那么在页顶会显示错误信息..
文语通2.0 (顶级中英文语音朗读软件) 迅雷下载.
最好 的文本语音朗读软件,支持各种格式文本,可调整播放速度,音量.
ftp://soft.anxz.com:2102/wyt2.0.iso
注意:要先启动迅雷,再把上面的地址复制到IE地址栏,回车就能用迅雷下载了
阅读全文
最好 的文本语音朗读软件,支持各种格式文本,可调整播放速度,音量.
ftp://soft.anxz.com:2102/wyt2.0.iso
注意:要先启动迅雷,再把上面的地址复制到IE地址栏,回车就能用迅雷下载了
阅读全文
字符串数组,删除数组元素
学过C语言的人可能都知道,C语言对字符串的处理功能很强,PHP是用C写成的,自然不例外的继承了C
的处理字符串的优势。不过毕竟PHP是一门新的语言,与C语言还是有区别的,自然不能保证与C是完全相同
的。所以有些功能只有经过测试才能知道。
有时候需要对一个字符串的每个字符进行处理,一般的做法可能是:
这样是可以,但是有没有更优美一点的办法呢?有,就是把它看成一个数组,C语言就是这样处理的。
我们把上面的例子,改成用字符串数组的处理方式:
删除数组元素
定义了一个数组,有时想删除其中几项怎么办?我在www.phpbuilder.com中看到了一个答案,就是使用
unset()函数。还是让我们做一个测试吧。
是什么意思呢?先生成一个有三个元素的数组$a,将其显示出来,然后,将第1个(下标为0)删除,再
显示出来。结果应该是数组还剩两个元素了。但是不对呀!答案与我们想的不一样,难道是unset() 不好用
吗?仔细想一想,原来unset($a[0])将第1个元素给删除了,但是输出时,我们还从$i=0 开始的,当然就不
对了,php可不会自动调整下标的。这样只好用别的方法处理了:
这是一个通用的显示数组的方法,可以不用考虑数组的下标了。
注意:sizeof()用于返回数组的个数,同count()一样
学过C语言的人可能都知道,C语言对字符串的处理功能很强,PHP是用C写成的,自然不例外的继承了C
的处理字符串的优势。不过毕竟PHP是一门新的语言,与C语言还是有区别的,自然不能保证与C是完全相同
的。所以有些功能只有经过测试才能知道。
有时候需要对一个字符串的每个字符进行处理,一般的做法可能是:
$str="something";
for($i=0; $i<strlen($str); $i++)
{
$ch=substr($str, $i, 1);
//处理$ch
}
for($i=0; $i<strlen($str); $i++)
{
$ch=substr($str, $i, 1);
//处理$ch
}
这样是可以,但是有没有更优美一点的办法呢?有,就是把它看成一个数组,C语言就是这样处理的。
我们把上面的例子,改成用字符串数组的处理方式:
$str="something";
for($i=0; $i<strlen($str); $i++)
{
$ch=$str[$i];
//处理$ch
}
这样是不是好多了。 for($i=0; $i<strlen($str); $i++)
{
$ch=$str[$i];
//处理$ch
}
删除数组元素
定义了一个数组,有时想删除其中几项怎么办?我在www.phpbuilder.com中看到了一个答案,就是使用
unset()函数。还是让我们做一个测试吧。
$a[]="a1";
$a[]="a2";
$a[]="a3";
for($i=0; $i<sizeof($a); $i++)
{
echo $a[$i] . "
";
}
unset($a[0]);
for($i=0; $i<sizeof($a); $i++)
{
echo $a[$i] . "
";
}
$a[]="a2";
$a[]="a3";
for($i=0; $i<sizeof($a); $i++)
{
echo $a[$i] . "
";
}
unset($a[0]);
for($i=0; $i<sizeof($a); $i++)
{
echo $a[$i] . "
";
}
是什么意思呢?先生成一个有三个元素的数组$a,将其显示出来,然后,将第1个(下标为0)删除,再
显示出来。结果应该是数组还剩两个元素了。但是不对呀!答案与我们想的不一样,难道是unset() 不好用
吗?仔细想一想,原来unset($a[0])将第1个元素给删除了,但是输出时,我们还从$i=0 开始的,当然就不
对了,php可不会自动调整下标的。这样只好用别的方法处理了:
$a[]="a1";
$a[]="a2";
$a[]="a3";
for($i=0; $i<sizeof($a); $i++)
{
echo $a[$i] . "
";
}
unset($a[0]);
reset($a); //使数组指针回到第1个元素
while(list($c, $d)=each($a))
{
echo $d . "
"; //$c为数组下标
}
$a[]="a2";
$a[]="a3";
for($i=0; $i<sizeof($a); $i++)
{
echo $a[$i] . "
";
}
unset($a[0]);
reset($a); //使数组指针回到第1个元素
while(list($c, $d)=each($a))
{
echo $d . "
"; //$c为数组下标
}
这是一个通用的显示数组的方法,可以不用考虑数组的下标了。
注意:sizeof()用于返回数组的个数,同count()一样
<html>
<head><title>取得Cookie的內容</title></head>
<body>
<?
// 取得Cookie的內容
$user = $_COOKIE["Username"];
$pass = $_COOKIE["Password"];
print "名為Username的Cookie值 : ".$user."<br>";
print "名為Password的Cookie值 : ".$pass."<br>";
?>
</body>
</html>
<head><title>取得Cookie的內容</title></head>
<body>
<?
// 取得Cookie的內容
$user = $_COOKIE["Username"];
$pass = $_COOKIE["Password"];
print "名為Username的Cookie值 : ".$user."<br>";
print "名為Password的Cookie值 : ".$pass."<br>";
?>
</body>
</html>
php处理table表格的排版算法问题
Php/Js/Shell/Go jack 2010-1-14 14:23
缘起:
莫莫(406052573) 10:07:06
这么写了,怎么还输出那么多tr出来了
对于table布局实在是没有div布局li lu来布局好,table无非是tr /tr一行的方式,如果每行输出4个产品,如下:注意:
<tr>
echo "</tr><tr>";
是 if($i%4 ==0);
</tr>
详细点,如下:
<div style="height:930px">
<table border="0" cellspacing="0" cellpadding="0" style="color:#A61F24; font-size:12px;">
<tr>
<?php
$count = count($rows);
$i=0;
foreach($rows as $key =>$values)
{
$i++;
?>
。。。。循环产品输出
<?php
if($i%4 ==0)
{
echo "</tr><tr>";
}
}
?>
</tr>
</table></div>
为何加div是用来固定高度后,下面加入翻页等。
对其的问题:
http://www.jackxiang.com/post/2375/
莫莫(406052573) 10:07:06
这么写了,怎么还输出那么多tr出来了
对于table布局实在是没有div布局li lu来布局好,table无非是tr /tr一行的方式,如果每行输出4个产品,如下:注意:
<tr>
echo "</tr><tr>";
是 if($i%4 ==0);
</tr>
详细点,如下:
<div style="height:930px">
<table border="0" cellspacing="0" cellpadding="0" style="color:#A61F24; font-size:12px;">
<tr>
<?php
$count = count($rows);
$i=0;
foreach($rows as $key =>$values)
{
$i++;
?>
。。。。循环产品输出
<?php
if($i%4 ==0)
{
echo "</tr><tr>";
}
}
?>
</tr>
</table></div>
为何加div是用来固定高度后,下面加入翻页等。
对其的问题:
http://www.jackxiang.com/post/2375/
TCPDUMP数据包分析及在服务器维护过程中的作用。windump用法类似。今天特别为了测试tcpdump架设了两个虚拟机,对所述命令进行测试。以达到完全了解tcpdump的目的。环境centos 5 虚拟机用vmware。
tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
tcpdump -nnnv arp 查找ARP攻击时确定攻击原MAC地址时常用。
tcpdump -nnnv udp port 53 DNS服务器53端口受ARP攻击时查看攻击源时用。
tcpdump -nnnv udp and not port 53 可以确定是否有非53端口的大流量UDP攻击
tcpdump -nnnv port 80 and host 192.168.0.1 找出从192.168.0.1的80端口收到或发送的IP包。
tcpdump -nnnv ip host 210.27.48.1 and ! 210.27.48.2 获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
tcpdump -nnnv host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump -nnnv host ! 192.168.15.129 and ! 192.168.15.130 and dst port 80
捕获除了主机192.168.15.129与192.168.15.130 且到本机目标80端口的数据包。
tcpdump -nnnv src 192.168.15.129 and port 53 捕获由192.168.15.129到本机53端口的数据包。不管是UDP还是TCP
信息参考:Tcpdump命令的使用与示例http://tcpdump.anheng.com.cn/news/24/586.html" target="_blank"> http://tcpdump.anheng.com.cn/news/24/586.html
超级详细Tcpdump 的用法 http://course.51cto.com/art/200512/15473.htm
Linux下的Sniffer Tcpdump的安装和使用http://unix-cd.com/vc/www/28/2007-08/8018.html 注此文中部分命令是错的。
TCPDump使用方法小结 http://softtest.chinaitlab.com/qita/746811.html
TCPDUMP高级用法http://blog.csdn.net/linyt/archive/2007/12/14/1936073.aspx
================================================================================
Linux抓包工具:tcpdump简单使用
简单用法,可以分析soap数据包。
this is probably the easiest way to monitor SOAP messages.
simply use
#tcpdump -i eth0 -A -s 1024 port 80 | tee dump.log
to log all the packet sent to port 80 to dump.log
***********************************************************
今天在尝试TTserver的Http协议接口,为了确定走的协议是否为Http,需要抓包确定一下,
在windows下有很多工具很方便的抓包,linux下只能通过命令行来操作了,下面简单记录一下
tcpdump工具的使用:
//抓包,
tcpdump -nX -s 0 -w cap.raw host 123.123.123.123 and port 2978
//读包
tcpdump -r cap.raw -A
tcpdump有很多参数选项,man就可看到,
-----------------------------------------------------------------------------------
EXAMPLES
To print all packets arriving at or departing from sundown:
tcpdump host sundown
To print traffic between helios and either hot or ace:
tcpdump host helios and \( hot or ace \)
To print all IP packets between ace and any host except helios:
tcpdump ip host ace and not helios
To print all traffic between local hosts and hosts at Berkeley:
tcpdump net ucb-ether
To print all ftp traffic through internet gateway snup: (note that the
expression is quoted to prevent the shell from (mis-)interpreting the
parentheses):
tcpdump 'gateway snup and (port ftp or ftp-data)'
To print traffic neither sourced from nor destined for local hosts (if
you gateway to one other net, this stuff should never make it onto your
local net).
tcpdump ip and not net localnet
To print the start and end packets (the SYN and FIN packets) of each
TCP conversation that involves a non-local host.
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
To print all IPv4 HTTP packets to and from port 80, i.e. print only
packets that contain data, not, for example, SYN and FIN packets and
ACK-only packets. (IPv6 is left as an exercise for the reader.)
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<>2)) != 0)'
To print IP packets longer than 576 bytes sent through gateway snup:
tcpdump 'gateway snup and ip[2:2] > 576'
To print IP broadcast or multicast packets that were not sent via Eth-
ernet broadcast or multicast:
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
To print all ICMP packets that are not echo requests/replies (i.e., not
ping packets):
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
------------------------------------------------------------------------------------
注:需要root的权限才能运行tcpdump命令
说实话,tcpdump虽然强大,但是毕竟操作起来不如windows下一些图形软件方便。
tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
tcpdump -nnnv arp 查找ARP攻击时确定攻击原MAC地址时常用。
tcpdump -nnnv udp port 53 DNS服务器53端口受ARP攻击时查看攻击源时用。
tcpdump -nnnv udp and not port 53 可以确定是否有非53端口的大流量UDP攻击
tcpdump -nnnv port 80 and host 192.168.0.1 找出从192.168.0.1的80端口收到或发送的IP包。
tcpdump -nnnv ip host 210.27.48.1 and ! 210.27.48.2 获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
tcpdump -nnnv host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump -nnnv host ! 192.168.15.129 and ! 192.168.15.130 and dst port 80
捕获除了主机192.168.15.129与192.168.15.130 且到本机目标80端口的数据包。
tcpdump -nnnv src 192.168.15.129 and port 53 捕获由192.168.15.129到本机53端口的数据包。不管是UDP还是TCP
信息参考:Tcpdump命令的使用与示例http://tcpdump.anheng.com.cn/news/24/586.html" target="_blank"> http://tcpdump.anheng.com.cn/news/24/586.html
超级详细Tcpdump 的用法 http://course.51cto.com/art/200512/15473.htm
Linux下的Sniffer Tcpdump的安装和使用http://unix-cd.com/vc/www/28/2007-08/8018.html 注此文中部分命令是错的。
TCPDump使用方法小结 http://softtest.chinaitlab.com/qita/746811.html
TCPDUMP高级用法http://blog.csdn.net/linyt/archive/2007/12/14/1936073.aspx
================================================================================
Linux抓包工具:tcpdump简单使用
简单用法,可以分析soap数据包。
this is probably the easiest way to monitor SOAP messages.
simply use
#tcpdump -i eth0 -A -s 1024 port 80 | tee dump.log
to log all the packet sent to port 80 to dump.log
***********************************************************
今天在尝试TTserver的Http协议接口,为了确定走的协议是否为Http,需要抓包确定一下,
在windows下有很多工具很方便的抓包,linux下只能通过命令行来操作了,下面简单记录一下
tcpdump工具的使用:
//抓包,
tcpdump -nX -s 0 -w cap.raw host 123.123.123.123 and port 2978
//读包
tcpdump -r cap.raw -A
tcpdump有很多参数选项,man就可看到,
-----------------------------------------------------------------------------------
EXAMPLES
To print all packets arriving at or departing from sundown:
tcpdump host sundown
To print traffic between helios and either hot or ace:
tcpdump host helios and \( hot or ace \)
To print all IP packets between ace and any host except helios:
tcpdump ip host ace and not helios
To print all traffic between local hosts and hosts at Berkeley:
tcpdump net ucb-ether
To print all ftp traffic through internet gateway snup: (note that the
expression is quoted to prevent the shell from (mis-)interpreting the
parentheses):
tcpdump 'gateway snup and (port ftp or ftp-data)'
To print traffic neither sourced from nor destined for local hosts (if
you gateway to one other net, this stuff should never make it onto your
local net).
tcpdump ip and not net localnet
To print the start and end packets (the SYN and FIN packets) of each
TCP conversation that involves a non-local host.
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
To print all IPv4 HTTP packets to and from port 80, i.e. print only
packets that contain data, not, for example, SYN and FIN packets and
ACK-only packets. (IPv6 is left as an exercise for the reader.)
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<>2)) != 0)'
To print IP packets longer than 576 bytes sent through gateway snup:
tcpdump 'gateway snup and ip[2:2] > 576'
To print IP broadcast or multicast packets that were not sent via Eth-
ernet broadcast or multicast:
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
To print all ICMP packets that are not echo requests/replies (i.e., not
ping packets):
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
------------------------------------------------------------------------------------
注:需要root的权限才能运行tcpdump命令
说实话,tcpdump虽然强大,但是毕竟操作起来不如windows下一些图形软件方便。
虽说都是 *nix 系统,但一个简单的
函数居然用法都不一样。
例如,今天是 2008-6-18
FreeBSD:
输入:date -v -1d +%Y%m%d
输出:20080617
Linux:
输入:date --date='yesterday' +%Y%m%d
输出:20080617
看到这里,会发现,Linux 的局限性,他只能输出昨天的,但前天和大前天的之类的日期就没办法了。
因此,我喜欢FreeBSD就很自然了,呵呵。
函数居然用法都不一样。
例如,今天是 2008-6-18
FreeBSD:
输入:date -v -1d +%Y%m%d
输出:20080617
Linux:
输入:date --date='yesterday' +%Y%m%d
输出:20080617
看到这里,会发现,Linux 的局限性,他只能输出昨天的,但前天和大前天的之类的日期就没办法了。
因此,我喜欢FreeBSD就很自然了,呵呵。
shell 时用$?查看是否执行成功,成功是0,而在函数里是只要有没有成功,那么整个函数的$?就会是1,于是用它和||结合起来可以实现Shell函数是否成功执行的一个判断并提示。
cat fun.sh
sh fun.sh
hello world...\n
ls: cannot access /tmp2: No such file or directory
ls /tmp2 failed
今天重新再翻看了一下shell程序相关的资料。准备重新将shell再提高一下。
将http://seo-dic.com.cn/archives/2496 提到的《Advanced Bash-Scripting Guide》《高级bash脚本编程指南》上附带的源码重新再看一次。
为了方便查看。我将所有的源代码全部导到一个文件中,再一一查看。省去了每次只打开一个脚本的麻烦。同时,将几个经常用的shell脚本函数稍做了下列举。希望后面可以用得到。
find -type f -name "*.sh" -exec cat {} >>sh.all \;
检查目录是否存在,若不存在,则创建相应目录。
# Check for and create datadir if necessary:
if test ! -d $datadir
then
mkdir $datadir
fi
shell参数判断,若不符合则显示使用方式及退出。
E_BADARGS=65
case $# in
0|1) # The vertical bar means "or" in this context.
echo "Usage: `basename $0` old_file_suffix new_file_suffix"
exit $E_BADARGS # If 0 or 1 arg, then bail out.
;;
esac
另例:
E_OPTERR=65
if [ "$#" -eq 0 ]
then # Script needs at least one command-line argument.
echo "Usage $0 -[options a,b,c]"
exit $E_OPTERR
fi
检查是用户是否是root权限的方式:
ROOT_UID=0 # Root has $UID 0.
E_WRONG_USER=65 # Not root?
E_NOSUCHUSER=70
SUCCESS=0
if [ "$UID" -ne "$ROOT_UID" ]
then
echo; echo "Only root can run this script."; echo
exit $E_WRONG_USER
else
echo
echo "You should know better than to run this script, root."
echo "Even root users get the blues... "
echo
fi
进行用户目录判断:
LOG_DIR=/var/log
ROOT_UID=0 # Only users with $UID 0 have root privileges.
LINES=50 # Default number of lines saved.
E_XCD=66 # Can't change directory?
E_NOTROOT=67 # Non-root exit error.
cd $LOG_DIR
if [ `pwd` != "$LOG_DIR" ] # or if [ "$PWD" != "$LOG_DIR" ]
# Not in /var/log?
then
echo "Can't change to $LOG_DIR."
exit $E_XCD
fi # Doublecheck if in right directory, before messing with log file.
cat fun.sh
sh fun.sh
hello world...\n
ls: cannot access /tmp2: No such file or directory
ls /tmp2 failed
今天重新再翻看了一下shell程序相关的资料。准备重新将shell再提高一下。
将http://seo-dic.com.cn/archives/2496 提到的《Advanced Bash-Scripting Guide》《高级bash脚本编程指南》上附带的源码重新再看一次。
为了方便查看。我将所有的源代码全部导到一个文件中,再一一查看。省去了每次只打开一个脚本的麻烦。同时,将几个经常用的shell脚本函数稍做了下列举。希望后面可以用得到。
find -type f -name "*.sh" -exec cat {} >>sh.all \;
检查目录是否存在,若不存在,则创建相应目录。
# Check for and create datadir if necessary:
if test ! -d $datadir
then
mkdir $datadir
fi
shell参数判断,若不符合则显示使用方式及退出。
E_BADARGS=65
case $# in
0|1) # The vertical bar means "or" in this context.
echo "Usage: `basename $0` old_file_suffix new_file_suffix"
exit $E_BADARGS # If 0 or 1 arg, then bail out.
;;
esac
另例:
E_OPTERR=65
if [ "$#" -eq 0 ]
then # Script needs at least one command-line argument.
echo "Usage $0 -[options a,b,c]"
exit $E_OPTERR
fi
检查是用户是否是root权限的方式:
ROOT_UID=0 # Root has $UID 0.
E_WRONG_USER=65 # Not root?
E_NOSUCHUSER=70
SUCCESS=0
if [ "$UID" -ne "$ROOT_UID" ]
then
echo; echo "Only root can run this script."; echo
exit $E_WRONG_USER
else
echo
echo "You should know better than to run this script, root."
echo "Even root users get the blues... "
echo
fi
进行用户目录判断:
LOG_DIR=/var/log
ROOT_UID=0 # Only users with $UID 0 have root privileges.
LINES=50 # Default number of lines saved.
E_XCD=66 # Can't change directory?
E_NOTROOT=67 # Non-root exit error.
cd $LOG_DIR
if [ `pwd` != "$LOG_DIR" ] # or if [ "$PWD" != "$LOG_DIR" ]
# Not in /var/log?
then
echo "Can't change to $LOG_DIR."
exit $E_XCD
fi # Doublecheck if in right directory, before messing with log file.
前几天接手一台parking服务器,发现其流量经常达到上百M,为了进行流量分流。同时启用另两台机器做分流机。
因数据经整改后。可生成静态页面。所以对分流的服务器的系统就没什么要求了。只要可以显示静态网页的服务器即可。
选了两台电信机房及一台浙江机房的服务器。共三台,其中一台,可跑asp程序,用以生成静态页,其他两台一台是windows系统,另一台是linux系统。分别使用iis及apache实现web服务。
主服务器A 从服务器为B、C
架构为
A->B
A->C
数据通过contab及at指令,定时从A服务器自动用rsync实现数据同步。
因流量过大,经观察需要做的细化步骤有:
1.对IIS服务器要将所有的可能加载的dll工具等如7i24/iistracer等全部卸载。同时因是使用做parking服务器,将其所有的404页面做跳转到首页。
2.取消所有的动态执行权限。
3.对iis要注意观察是否会造成类似的CC全链接攻击。
4.对apache需进行重编译。许可超过256个链接数。
5.加入监控。实现跟踪自动化。
经过这几天的跟踪发现几点结论:
1.虽然我使用的目标服务器提供的web服务是基础是基于dns轮循查询方法上的。但从服务器的流量观察来看。每天都有一台机器要承受较大的流量的。即dns轮循实现的负载均衡不见得是实际的流量及响应均衡。
这点的证据是:浙江电信B与厦门电信C的流量明显不对等。
2.因A服务器同时提供udp53端口的查询功能。将所有域名的的dns解析记录直接都轮流指到A/B/C同时A服务器还提供asp服务cpu的负载稍高。
3.经过几天的观察,发现每天能响应的域名查询量差异较大。高时的流量ip>5万低时,只有2万多。
以此备注。rsync在对静态数据的同步化方面,用途明显。适合轻量级的数据同步。
因数据经整改后。可生成静态页面。所以对分流的服务器的系统就没什么要求了。只要可以显示静态网页的服务器即可。
选了两台电信机房及一台浙江机房的服务器。共三台,其中一台,可跑asp程序,用以生成静态页,其他两台一台是windows系统,另一台是linux系统。分别使用iis及apache实现web服务。
主服务器A 从服务器为B、C
架构为
A->B
A->C
数据通过contab及at指令,定时从A服务器自动用rsync实现数据同步。
因流量过大,经观察需要做的细化步骤有:
1.对IIS服务器要将所有的可能加载的dll工具等如7i24/iistracer等全部卸载。同时因是使用做parking服务器,将其所有的404页面做跳转到首页。
2.取消所有的动态执行权限。
3.对iis要注意观察是否会造成类似的CC全链接攻击。
4.对apache需进行重编译。许可超过256个链接数。
5.加入监控。实现跟踪自动化。
经过这几天的跟踪发现几点结论:
1.虽然我使用的目标服务器提供的web服务是基础是基于dns轮循查询方法上的。但从服务器的流量观察来看。每天都有一台机器要承受较大的流量的。即dns轮循实现的负载均衡不见得是实际的流量及响应均衡。
这点的证据是:浙江电信B与厦门电信C的流量明显不对等。
2.因A服务器同时提供udp53端口的查询功能。将所有域名的的dns解析记录直接都轮流指到A/B/C同时A服务器还提供asp服务cpu的负载稍高。
3.经过几天的观察,发现每天能响应的域名查询量差异较大。高时的流量ip>5万低时,只有2万多。
以此备注。rsync在对静态数据的同步化方面,用途明显。适合轻量级的数据同步。
一、构造字符串
直接构造
STR_ZERO=hello
STR_FIRST="i am a string"
STR_SECOND='success'
重复多次
#repeat the first parm($1) by $2 times
strRepeat()
{
local x=$2
if [ "$x" == "" ]; then
x=0
fi
local STR_TEMP=""
while [ $x -ge 1 ];
do
STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1"`
x=`expr $x - 1`
done
echo $STR_TEMP
}
举例:
STR_REPEAT=`strRepeat "$USER_NAME" 3`
echo "repeat = $STR_REPEAT"
二、赋值与拷贝
直接赋值
与构造字符串一样
USER_NAME=terry
从变量赋值
ALIASE_NAME=$USER_NAME
三、联接
直接联接两个字符串
STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
使用printf可以进行更复杂的联接
四、求长
求字符数(char)
COUNT_CHAR=`echo "$STR_FIRST" | wc -m`
echo $COUNT_CHAR
求字节数(byte)
COUNT_BYTE=`echo "$STR_FIRST" | wc -c`
echo $COUNT_BYTE
求字数(word)
COUNT_WORD=`echo "$STR_FIRST" | wc -w`
echo $COUNT_WORD
五、比较
相等比较
str1 = str2
不等比较
str1 != str2
举例:
if [ "$USER_NAME" = "terry" ]; then
echo "I am terry"
fi
小于比较
#return 0 if the two string is equal, return 1 if $1 < $2, else 2strCompare() { local x=0 if [ "$1" != "$2" ]; then x=2 localTEMP=`printf "%s\n%s" "$1" "$2"` local TEMP2=`(echo "$1"; echo "$2") |sort` if [ "$TEMP" = "$TEMP2" ]; then x=1 fi fi echo $x }
六、测试
判空
-z str
判非空
-n str
是否为数字
# return 0 if the string is num, otherwise 1
strIsNum()
{
local RET=1
if [ -n "$1" ]; then
local STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`
if [ -z "$STR_TEMP" ]; then
RET=0
fi
fi
echo $RET
}
举例:
if [ -n "$USER_NAME" ]; then
echo "my name is NOT empty"
fi
echo `strIsNum "9980"`
七、分割
以符号+为准,将字符分割为左右两部分
使用sed
举例:
命令 date --rfc-3339 seconds 的输出为
2007-04-14 15:09:47+08:00
取其+左边的部分
date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
输出为
2007-04-14 15:09:47
取+右边的部分
date --rfc-3339 seconds | sed 's/.*+//g'
输出为
08:00
以空格为分割符的字符串分割
使用awk
举例:
STR_FRUIT="Banana 0.89 100"
取第3字段
echo $STR_FRUIT | awk '{ print $3; }'
八、子字符串
字符串1是否为字符串2的子字符串
# return 0 is $1 is substring of $2, otherwise 1
strIsSubstring()
{
local x=1
case "$2" in
*$1*) x=0;;
esac
echo $x
}
Shell字符串截取
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘\(.\\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
1、第一种方法:
* ${varible##*string} 从左向右截取最后一个string后的字符串
* ${varible#*string}从左向右截取第一个string后的字符串
* ${varible%%string*}从右向左截取最后一个string后的字符串
* ${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子:
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg
2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
shell (bash) 比较运算符
运算符 描述 示例
文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 [size=-1](请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
直接构造
STR_ZERO=hello
STR_FIRST="i am a string"
STR_SECOND='success'
重复多次
#repeat the first parm($1) by $2 times
strRepeat()
{
local x=$2
if [ "$x" == "" ]; then
x=0
fi
local STR_TEMP=""
while [ $x -ge 1 ];
do
STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1"`
x=`expr $x - 1`
done
echo $STR_TEMP
}
举例:
STR_REPEAT=`strRepeat "$USER_NAME" 3`
echo "repeat = $STR_REPEAT"
二、赋值与拷贝
直接赋值
与构造字符串一样
USER_NAME=terry
从变量赋值
ALIASE_NAME=$USER_NAME
三、联接
直接联接两个字符串
STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
使用printf可以进行更复杂的联接
四、求长
求字符数(char)
COUNT_CHAR=`echo "$STR_FIRST" | wc -m`
echo $COUNT_CHAR
求字节数(byte)
COUNT_BYTE=`echo "$STR_FIRST" | wc -c`
echo $COUNT_BYTE
求字数(word)
COUNT_WORD=`echo "$STR_FIRST" | wc -w`
echo $COUNT_WORD
五、比较
相等比较
str1 = str2
不等比较
str1 != str2
举例:
if [ "$USER_NAME" = "terry" ]; then
echo "I am terry"
fi
小于比较
#return 0 if the two string is equal, return 1 if $1 < $2, else 2strCompare() { local x=0 if [ "$1" != "$2" ]; then x=2 localTEMP=`printf "%s\n%s" "$1" "$2"` local TEMP2=`(echo "$1"; echo "$2") |sort` if [ "$TEMP" = "$TEMP2" ]; then x=1 fi fi echo $x }
六、测试
判空
-z str
判非空
-n str
是否为数字
# return 0 if the string is num, otherwise 1
strIsNum()
{
local RET=1
if [ -n "$1" ]; then
local STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`
if [ -z "$STR_TEMP" ]; then
RET=0
fi
fi
echo $RET
}
举例:
if [ -n "$USER_NAME" ]; then
echo "my name is NOT empty"
fi
echo `strIsNum "9980"`
七、分割
以符号+为准,将字符分割为左右两部分
使用sed
举例:
命令 date --rfc-3339 seconds 的输出为
2007-04-14 15:09:47+08:00
取其+左边的部分
date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
输出为
2007-04-14 15:09:47
取+右边的部分
date --rfc-3339 seconds | sed 's/.*+//g'
输出为
08:00
以空格为分割符的字符串分割
使用awk
举例:
STR_FRUIT="Banana 0.89 100"
取第3字段
echo $STR_FRUIT | awk '{ print $3; }'
八、子字符串
字符串1是否为字符串2的子字符串
# return 0 is $1 is substring of $2, otherwise 1
strIsSubstring()
{
local x=1
case "$2" in
*$1*) x=0;;
esac
echo $x
}
Shell字符串截取
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘\(.\\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
1、第一种方法:
* ${varible##*string} 从左向右截取最后一个string后的字符串
* ${varible#*string}从左向右截取第一个string后的字符串
* ${varible%%string*}从右向左截取最后一个string后的字符串
* ${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子:
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg
2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
shell (bash) 比较运算符
运算符 描述 示例
文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 [size=-1](请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
比较操作符
整数比较
-eq 等于 if [ "$a"-eq "$b"]
-ne 不等于 if [ "$a"-ne "$b"]
-gt 大于 if [ "$a"-gt "$b"]
-ge 大于等于 if [ "$a"-ge "$b"]
-lt 小于 if [ "$a"-lt "$b"]
-le 小于等于 if [ "$a"-le "$b"]
>,<=,>,>= 只能在双括号里使用 if ((”$a”< “$b”))
字符串比较
= 等于 if [ "$a"= "$b"]
== 等于 它和=是同义词
!= 不相等 if [ "$a"!= "$b"]
< 小于,依照ASCII字符排列顺序,if [ "$a"\< "$b"] 注意 ”<”字 符在[ ] 结构里需要转义,或者if [[ "$a"< "$b"]]
> 大于,依照ASCII字符排列顺序,if [ "$a"\> "$b"] 注意 ”>”字 符在[ ] 结构里需要转义,或者if [[ "$a"> "$b"]]
-z 字符串为”null”,即是指字符串长度为零。
-n 字符串不为”null”,即长度不为零.
注意:
1.应该总是用引号把测试字符串引起来,以免引起不必要的错误
2.操作符在[[…]]结构里使用模式匹配.
[[ "$a"== z* ]] # 如果变量$a以字符”z”开始(模式匹配)则为真.
[[ "$a"== "z*"]] # 如果变量$a与z*(字面上的匹配)相等则为真.
整数比较
-eq 等于 if [ "$a"-eq "$b"]
-ne 不等于 if [ "$a"-ne "$b"]
-gt 大于 if [ "$a"-gt "$b"]
-ge 大于等于 if [ "$a"-ge "$b"]
-lt 小于 if [ "$a"-lt "$b"]
-le 小于等于 if [ "$a"-le "$b"]
>,<=,>,>= 只能在双括号里使用 if ((”$a”< “$b”))
字符串比较
= 等于 if [ "$a"= "$b"]
== 等于 它和=是同义词
!= 不相等 if [ "$a"!= "$b"]
< 小于,依照ASCII字符排列顺序,if [ "$a"\< "$b"] 注意 ”<”字 符在[ ] 结构里需要转义,或者if [[ "$a"< "$b"]]
> 大于,依照ASCII字符排列顺序,if [ "$a"\> "$b"] 注意 ”>”字 符在[ ] 结构里需要转义,或者if [[ "$a"> "$b"]]
-z 字符串为”null”,即是指字符串长度为零。
-n 字符串不为”null”,即长度不为零.
注意:
1.应该总是用引号把测试字符串引起来,以免引起不必要的错误
2.操作符在[[…]]结构里使用模式匹配.
[[ "$a"== z* ]] # 如果变量$a以字符”z”开始(模式匹配)则为真.
[[ "$a"== "z*"]] # 如果变量$a与z*(字面上的匹配)相等则为真.
freebsd 命令行下截图的方法
引用:
sudo vidcontrol -p dump.scr
ttyv0是控制台的名字,dump.scr是截屏输出的名字。
如果需要转换成图形格式,需要用一个叫scr2png的工具:
scr2png dump.png
这个工具可以从port安装 (graphics/scr2png) 今天在 delphij 的回帖中看到的,就记录下来分享了。。哈哈
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18630/showart_1419878.html
引用:
sudo vidcontrol -p dump.scr
ttyv0是控制台的名字,dump.scr是截屏输出的名字。
如果需要转换成图形格式,需要用一个叫scr2png的工具:
scr2png dump.png
这个工具可以从port安装 (graphics/scr2png) 今天在 delphij 的回帖中看到的,就记录下来分享了。。哈哈
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18630/showart_1419878.html




