﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-搬砖头-随笔分类-Unix</title><link>http://www.blogjava.net/bluebillow/category/20374.html</link><description>Knocking on Heaven's Door</description><language>zh-cn</language><lastBuildDate>Sat, 23 Feb 2008 15:29:43 GMT</lastBuildDate><pubDate>Sat, 23 Feb 2008 15:29:43 GMT</pubDate><ttl>60</ttl><item><title>Linux学习提纲</title><link>http://www.blogjava.net/bluebillow/archive/2008/02/21/181061.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Thu, 21 Feb 2008 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2008/02/21/181061.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/181061.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2008/02/21/181061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/181061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/181061.html</trackback:ping><description><![CDATA[一、一些重要的概念(关于Linux系统的一些重要特性)<br />
&nbsp;&nbsp;&nbsp; 由于我们用Windows太多，我就感觉我自己除了会点鼠标之外对于Windows系统没有太多的了解，甚至没有Linux多.<br />
&nbsp;&nbsp;&nbsp; 1、文件系统结构<br />
&nbsp;&nbsp;&nbsp; 2、文件类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一切都是文件，包括普通文件、设备文件、目录等等<br />
&nbsp;&nbsp;&nbsp; 3、运行级别<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux有6个运行级别<br />
&nbsp;&nbsp;&nbsp; 4、管道<br />
&nbsp;&nbsp;&nbsp; 5、重定向<br />
&nbsp;&nbsp;&nbsp; 6、交换分区<br />
&nbsp;&nbsp;&nbsp; 7、根目录下各个目录的意义<br />
二、文本编辑<br />
&nbsp;&nbsp;&nbsp; 1、vi的用法<br />
三、常用的命令<br />
&nbsp;&nbsp;&nbsp; 1、基本<br />
&nbsp;&nbsp;&nbsp; 包括：cd&nbsp;&nbsp; clear&nbsp; alias&nbsp; unalias&nbsp; date&nbsp; ls&nbsp; pwd&nbsp; man exit&nbsp; echo<br />
&nbsp;&nbsp;&nbsp; 2、文件管理<br />
&nbsp;&nbsp;&nbsp; 包括：cat&nbsp; more&nbsp; rm&nbsp; head&nbsp; tail&nbsp; grep&nbsp; cp&nbsp; mv&nbsp; wc find<br />
&nbsp;&nbsp;&nbsp; 3、目录管理<br />
&nbsp;&nbsp;&nbsp; 包括：mkdir&nbsp; rmdir&nbsp; rm&nbsp; find&nbsp; file&nbsp; du&nbsp; df<br />
&nbsp;&nbsp;&nbsp; 4、权限命令<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如何设定我们用户和文件以及系统的权限。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包括：chmod&nbsp; chown&nbsp; chgrp umask<br />
&nbsp;&nbsp;&nbsp; 5、系统命令<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包括：mount&nbsp; umount&nbsp; uname&nbsp; free&nbsp; env<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uptime&nbsp; setup&nbsp; xinetd&nbsp; top&nbsp; kill&nbsp; 关机命令<br />
&nbsp;&nbsp;&nbsp; 5、常用的网络命令<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于网络管理以及使用的一些命令<br />
四、安装与卸载(限于Redhat以及相似系统)<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1、RPM命令<br />
&nbsp;&nbsp;&nbsp;&nbsp; 2、Oracle9i安装卸载以及基本管理<br />
五、相关工具的命令<br />
&nbsp;&nbsp;&nbsp; 1、FTP<br />
&nbsp;&nbsp;&nbsp; 2、Telnet<br />
六、常见的系统设置<br />
&nbsp;&nbsp;&nbsp; 1、运行级别<br />
&nbsp;&nbsp;&nbsp; 2、共享(NFS)<br />
&nbsp;&nbsp;&nbsp; 3、修改Swap<br />
&nbsp;&nbsp;&nbsp; 4、设定系统环境变量(JDK安装)<br />
&nbsp;&nbsp;&nbsp; 5、系统备份(打包、压缩以及解压缩)<br />
&nbsp;&nbsp;&nbsp; 6、常见的标志(权限:r w x s t 标志：l b c d)<br />
七、Shell编程<br />
&nbsp;&nbsp;&nbsp; 1、Shell变量和参数<br />
&nbsp;&nbsp;&nbsp; 2、环境变量<br />
&nbsp;&nbsp;&nbsp; 3、位置参数<br />
&nbsp;&nbsp;&nbsp; 4、运算符<br />
&nbsp;&nbsp;&nbsp; 5、常用语句<br />
&nbsp;&nbsp;&nbsp; 6、函数<br />
&nbsp;&nbsp;&nbsp; 7、控制<br />
&nbsp;&nbsp;&nbsp; 8、运行方式<br />
八、Linux安装<br />
九、Crontab简单应用<br />
<br />
以前的存档，源未知<br />
<img src ="http://www.blogjava.net/bluebillow/aggbug/181061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2008-02-21 14:24 <a href="http://www.blogjava.net/bluebillow/archive/2008/02/21/181061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用DenyHosts阻止SSH暴力破解</title><link>http://www.blogjava.net/bluebillow/archive/2007/10/30/156856.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Tue, 30 Oct 2007 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2007/10/30/156856.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/156856.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2007/10/30/156856.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/156856.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/156856.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近发现服务器被人穷举扫描，网上找了办法搞定了<br />
<br />
原贴：http://blog.chinaunix.net/u/17030/showart_315674.html<br />
<div id="art" style="margin: 15px">
<p style="text-indent: 2em">我的服务器每天都会有无数的SSH失败尝试记录，有些无聊的人一直不停的扫描，这些人真够无聊的，没事吃饱了撑着，老找些软件在那里穷举扫描,所以大家第一要记的设置一个好的够复杂的密码。 </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">怎么样防,如果要一条一条将这些IP阻止显然治标不治本，还好有DenyHosts软件来代替我们手搞定他。 </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">DenyHosts是Python语言写的一个程序，它会分析sshd的日志文件，当发现重复的攻击时就会记录IP到/etc/hosts.deny文件，从而达到自动屏IP的功能。 </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">DenyHosts官方网站为：http://denyhosts.sourceforge.net </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">以下是安装记录（以CentOS 4.3, DenyHosts 2.5 为例） </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"><strong>安装</strong> </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code># cd /usr/local/src<br />
            # wget http://mesh.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.5.tar.gz<br />
            # tar -zxvf DenyHosts-2.5.tar.gz<br />
            # cd DenyHosts-2.5<br />
            # python setup.py install</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">默认是安装到/usr/share/denyhosts目录的。 </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"><strong>配置</strong> </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code># cd /usr/share/denyhosts/<br />
            # cp denyhosts.cfg-dist denyhosts.cfg<br />
            # vi denyhosts.cfg</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">根据自己需要进行相应的配置(解释见下文件的配置文件) </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">设置启动脚本 </p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code># cp daemon-control-dist daemon-control<br />
            # chown root daemon-control<br />
            # chmod 700 daemon-control</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em">完了之后执行daemon-contron start就可以了。 </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code># ./daemon-control start</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">如果要使DenyHosts每次重起后自动启动还需做如下设置： </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code># cd /etc/init.d<br />
            # ln -s /usr/share/denyhosts/daemon-control denyhosts<br />
            # chkconfig &#8211;add denyhosts<br />
            # chkconfig &#8211;level 2345 denyhosts on</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em">或者修改/etc/rc.local文件： </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code># vi /etc/rc.local</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">加入下面这条命令 </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>/usr/share/denyhosts/daemon-control start</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">DenyHosts配置文件： </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>vi /etc/denyhosts.cfg<br />
            <br />
            SECURE_LOG = /var/log/secure <br />
            #ssh 日志文件，它是根据这个文件来判断的。<br />
            <br />
            HOSTS_DENY = /etc/hosts.deny <br />
            #控制用户登陆的文件<br />
            <br />
            PURGE_DENY = 5m<br />
            #过多久后清除已经禁止的<br />
            <br />
            BLOCK_SERVICE  = sshd<br />
            #禁止的服务名<br />
            <br />
            DENY_THRESHOLD_INVALID = 1<br />
            #允许无效用户失败的次数<br />
            <br />
            DENY_THRESHOLD_VALID = 10<br />
            #允许普通用户登陆失败的次数<br />
            <br />
            DENY_THRESHOLD_ROOT = 5<br />
            #允许root登陆失败的次数<br />
            <br />
            HOSTNAME_LOOKUP=NO<br />
            #是否做域名反解<br />
            <br />
            ADMIN_EMAIL = iakuf@163.com<br />
            #管理员邮件地址,它会给管理员发邮件<br />
            <br />
            DAEMON_LOG = /var/log/denyhosts<br />
            #自己的日志文件</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">然后就可以启动了： </p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>service denyhost start</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">可以看看/etc/hosts.deny内是否有禁止的ＩＰ，有的话说明已经成功了。 <br />
<br />
<br />
=========================================================<br />
<font color="#000099"><strong>原文地址</strong></font> <a href="http://www.taoran.net/tech/denyhosts.html" target="_blank">http://www.taoran.net/tech/denyhosts.html</a> <br />
<br />
DenyHosts是用Python2.3写的一个程序，它会分析/var/log/secure（redhat，Fedora Core）等日志文件，当发现同一IP在进行多次SSH密<br />
<br />
码尝试时就会记录IP到/etc/hosts.deny文件，从而达到自动屏蔽该IP的目的。<br />
<br />
DenyHosts官方网站为：http://denyhosts.sourceforge.net<br />
<br />
<br />
一、检查安装条件<br />
<br />
1、首先判断系统安装的sshd是否支持tcp_wrappers（默认都支持）<br />
# ldd /usr/sbin/sshd<br />
libwrap.so.0 =&gt; /usr/lib/libwrap.so.0 (0x0046e000)<br />
<br />
2、判断默认安装的Python版本<br />
# python -V<br />
Python 2.3.4<br />
<br />
二、已安装Python2.3以上版本的情况（以RedHat AS4为例）<br />
<br />
1、安装DenyHosts<br />
<br />
# cd /usr/local/src<br />
# wget http://umn.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz<br />
# tar zxf DenyHosts-2.6.tar.gz<br />
# cd DenyHosts-2.6<br />
# python setup.py install <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; 程序脚本自动安装到/usr/share/denyhosts<br />
&nbsp;&nbsp; 库文件自动安装到/usr/lib/python2.3/site-packages/DenyHosts<br />
&nbsp;&nbsp; denyhosts.py自动安装到/usr/bin<br />
<br />
2、设置启动脚本<br />
# cd /usr/share/denyhosts/<br />
# cp daemon-control-dist daemon-control<br />
# chown root daemon-control<br />
# chmod 700 daemon-control<br />
# grep -v "^#" denyhosts.cfg-dist &gt; denyhosts.cfg<br />
# vi denyhosts.cfg<br />
&nbsp; 根据自己需要进行相应的修改<br />
----------------denyhosts.cfg------------------------<br />
SECURE_LOG = /var/log/secure <br />
#RedHat/Fedora Core分析该日志文件<br />
#其它版本linux根据denyhosts.cfg-dist内提示选择。<br />
<br />
PURGE_DENY = 30m<br />
#过多久后清除<br />
<br />
DENY_THRESHOLD_INVALID = 1<br />
#允许无效用户（/etc/passwd未列出）登录失败的次数<br />
<br />
DENY_THRESHOLD_VALID = 5<br />
#允许有效（普通）用户登录失败的次数<br />
<br />
DENY_THRESHOLD_ROOT = 3<br />
#允许root登录失败的次数<br />
<br />
HOSTNAME_LOOKUP=NO<br />
#是否做域名反解<br />
----------------denyhosts.cfg------------------------<br />
<br />
如果需要DenyHosts随系统重启而自动启动，还需做如下设置：<br />
# vi /etc/rc.local<br />
&nbsp;&nbsp;&nbsp; 加入下面这条命令<br />
/usr/share/denyhosts/daemon-control start<br />
<br />
3、启动<br />
<br />
# /usr/share/denyhosts/daemon-control start<br />
<br />
<br />
<br />
三、未安装Python2.3以上版本的情况（以RedHat AS3、Python2.2为例）<br />
<br />
1、安装Python最新版本的源码包，不必卸载原有低版本Python<br />
# cd /usr/local/src<br />
# wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2<br />
# tar jxf Python-2.5.1.tar.bz2<br />
# cd Python-2.5.1<br />
# ./configure --prefix=/usr/local/python<br />
# make<br />
# make install<br />
<br />
2、安装DenyHosts<br />
# cd /usr/local/src<br />
# wget http://umn.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz<br />
# tar zxf DenyHosts-2.6.tar.gz<br />
# cd DenyHosts-2.6<br />
# vi setup.py<br />
&nbsp; 将"/usr/bin/env python"替换为"/usr/local/python/bin/python"，在第一行<br />
# vi daemon-control-dist<br />
&nbsp; 将"/usr/bin/env python"替换为"/usr/local/python/bin/python"，注意有两处<br />
# /usr/local/python/bin/python setup.py install <br />
<br />
&nbsp;&nbsp; 程序脚本自动安装到/usr/share/denyhosts<br />
&nbsp;&nbsp; 库文件自动安装到/usr/local/python/lib/python2.5/site-packages/DenyHosts<br />
&nbsp;&nbsp; denyhosts.py自动安装到/usr/local/python/bin<br />
<br />
# ln -s /usr/local/python/bin/denyhosts.py /usr/bin<br />
</p>
</div>
<img src ="http://www.blogjava.net/bluebillow/aggbug/156856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2007-10-30 10:01 <a href="http://www.blogjava.net/bluebillow/archive/2007/10/30/156856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式linux的tftp安装配置 (zt)</title><link>http://www.blogjava.net/bluebillow/archive/2007/07/24/132179.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Tue, 24 Jul 2007 15:57:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2007/07/24/132179.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/132179.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2007/07/24/132179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/132179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/132179.html</trackback:ping><description><![CDATA[<span class=postbody>TFTP是用来下载远程文件的最简单网络协议，它基于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面：一是嵌入式linux宿主机的 tftp-server支持，二是嵌入式linux目标机的tftp-client支持。因为u-boot本身内置支持tftp-client，所以嵌入式目标机就不用配置了。下面就详细介绍一下linux宿主机tftp-server的安装配置。<br><br>在FC6光盘的ISO镜像中，有tftp-server的rpm安装包。<br>（1）安装<br>#mount -o loop &lt;FC6光盘ISO镜像.iso&gt; /mnt/CD //挂载光盘<br>#rpm -ivh tftp-0.42-3.1.i386.rpm //安装tftp-client<br>#rpm -ivh tftp-server-0.42-3.1.i386.rpm //安装tftp-server<br>#umount /mnt/CD //卸载光盘<br><br>（2）修改文件<br>在linux 下，不管使用的是哪一种super-server，inetd或者xinetd，默认情况下TFTP服务是禁用的，所以要修改文件来开启服务。根据（1）的安装方法，可以修改文件/etc/xinetd.d/tftp。主要是设置TFTP服务器的根目录，开启服务。修改后的文件如下：<br><br>service tftp<br>{<br>socket_type = dgram<br>protocol = udp<br>wait = yes<br>user = root<br>server = /usr/sbin/in.tftpd<br>server_args = -s /tftpboot<br>disable = no<br>per_source = 11<br>cps = 100 2<br>flags = IPv4<br>}<br><br>说明：<span style="COLOR: red"><strong>修改项server_args= -s &lt;path&gt; -c</strong></span>，其中&lt;path&gt;处可以改为你的tftp-server的根目录，参数-s指定chroot。<br><br>(3）创建tftp根目录，启动tftp-server。<br>#mkdir /tftpboot<br>#chmod o+w /tftpboot<br>#service xinetd restart<br>这样，tftp-server就启动了。<br><br>(4)配置防火墙<br>TFTP (Trivial File Transfer Protocol)，中译简单文件传输协议或小型文件传输协议. 大家一定记得在2003年8月12日全球爆发冲击波（Worm.Blaster）病毒，这种病毒会监听端口69,模拟出一个TFTP服务器，并启动一个攻击传播线程,不断地随机生成攻击地址，进行入侵。另外tftp被认为是一种不安全的协议而将其关闭，同时也是防火墙打击的对象，这也是有道理的。tftp 在嵌入式linux还是有用武之地的。<br>打开防火墙，允许tftp访问网络。<br>[root@localhost /]# setup<br>Firewall configuration--&gt; Customize--other port 处：69:udp，保存就可以了。<br><br>你可以登陆本机测试以下，命令如下：<br>#tftp your-ip-address<br>tftp&gt;get &lt;download file&gt;<br>tftp&gt;put &lt;upload file&gt;<br>tftp&gt;q<br>#</span>&nbsp;<br><br>
<p id=TBPingURL>================整理====================<br><br>########################################################<br>安装过程中出现的问题及原因<br>现象一：<br>&nbsp; &nbsp; tftp&gt; get test.log<br>&nbsp; &nbsp; Transfer timed out.<br>原因：<br>&nbsp; &nbsp; tftpd服务没有启动<br><br><br>现象二：<br>&nbsp; &nbsp; tftp&gt; get test.log<br>&nbsp; &nbsp; Error code 2: Only absolute filenames allowed<br>原因：<br>&nbsp; &nbsp; 在/etc/xinetd.d/tftpd中设置的server_args为/etc/default/tftpd-hpa<br>&nbsp; &nbsp; cat /etc/default/tftpd-hpa<br>&nbsp; &nbsp; #Defaults for tftpd-hpa<br>&nbsp; &nbsp; RUN_DAEMON="no"<br>&nbsp; &nbsp; OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"<br>ps:实际根本就不用/etc/default/tftpd-hpa文件，它应该是用在standalone模式下的<br><br><br>现象三：<br>&nbsp; &nbsp; tftp&gt; put ex070416.log<br>&nbsp; &nbsp; Error code 1: File not found<br>原因：<br>&nbsp; &nbsp; 指定的文件不存在；或tftpd启动参数中没有指定-c选项，允许上传文件<br><br>########################################################<br>其它常用选项如下：<br>-l&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;使用standalone模式运行，此模式下，将会忽略-t选项<br>-a address:port&nbsp; &nbsp; 在standalone模式下服务所在的IP与端口，如果不指定，则在本机所有IP，/etc/service中指定的port上侦听连接<br>-c&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;允许在服务器上新建文件，否则只允许更新现有的文件。如果未指定-U或-p选项，则允许任何人上传文件<br>-s directory&nbsp; &nbsp; 服务器端默认的目录，默认为/var/lib/tftpdboot<br>-u username&nbsp; &nbsp; tftpd服务以什么身份运行，默认是nobody,一般可以新建一个tftpd的账号来运行<br>-U umask&nbsp; &nbsp; 上传的文件的掩码，如果未指定-p则为000，如果指定了-p，则采用指定的umask<br>-p&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;对于通过-u指定的用户执行的动作，不做额外的权限检查<br><br>更多权限请见man tftpd。</p>
<img src ="http://www.blogjava.net/bluebillow/aggbug/132179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2007-07-24 23:57 <a href="http://www.blogjava.net/bluebillow/archive/2007/07/24/132179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Linux　架设TFTP　Server备份路由器的配置文件 (zt)</title><link>http://www.blogjava.net/bluebillow/archive/2007/07/24/132178.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Tue, 24 Jul 2007 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2007/07/24/132178.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/132178.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2007/07/24/132178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/132178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/132178.html</trackback:ping><description><![CDATA[<p>TFTP (普通文件传输协议或一般文件传输协议) 大家一定记得在2003年8月12日全球爆发冲击波（Worm.Blaster）病毒，这种病毒会监听端口69,模拟出一个TFTP服务器，并启动一个攻击传播线程,不断地随机生成攻击地址，进行入侵。另外tftp被认为是一种不安全的协议而将其关闭，同时也是防火墙打击的对象，这也是有道理的。不过 tftp还是有用武之地的，下面讲的文件传输和备份router配置文件都时实际应用，它也只时一种手段而已。 </p>
<p>一、用TFTP实现文件传输 <br>环境：服务器A ：rhas11 <br>客户机B： rhas101<br>首先用rpm &#8211;qa | grep tftp看一下tftp有没安装，没有的话安 装一下。 <br>A：在服务器端设置 <br>#vi /etc/xinetd.d/tftp <br>service tftp <br>{ <br>disable = no <br>socket_type = dgram <br>protocol = udp <br>wait = yes <br>user = root <br>server = /usr/sbin/in.tftpd <br>server_args = -s /test <br>per_source = 11 <br>cps = 100 2 <br>flags = IPv4 <br>} </p>
<p>或用chkconfig tftp on 也可以打开xinetd代理的tftp服 </p>
<p>#mkdir /test <br>#service xinetd restart 从启xinetd服务，因为TFTP服务受控与xinetd, xinetd是管服务的服务，它是不开端口的。 <br>验证一下TFTP是否起来了： <br>[root@rhas11 tftp]# netstat -nlp <br>Active Internet connections (only servers) <br>Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name <br>tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN 3122/rpc.statd <br>tcp 0 0 127.0.0.1:32781 0.0.0.0:* LISTEN 4035/xinetd <br>tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3103/portmap <br>tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3324/httpd <br>tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3255/sshd <br>tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3213/cupsd <br>tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3295/sendmail: acce <br>tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 3415/0 <br>tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3324/httpd <br>udp 0 0 0.0.0.0:32768 0.0.0.0:* 3122/rpc.statd <br>udp 0 0 0.0.0.0:69 0.0.0.0:* 4035/xinetd <br>udp 0 0 0.0.0.0:69 0.0.0.0:* 4012/in.tftpd <br>udp 0 0 0.0.0.0:111 0.0.0.0:* 3103/portmap <br>udp 0 0 0.0.0.0:754 0.0.0.0:* 3122/rpc.statd <br>udp 0 0 0.0.0.0:631 0.0.0.0:* 3213/cupsd </p>
<p>A:服务器端 新建一文件file <br>#cd /test <br>[root@rhas11 test]# ls -l <br>总用量 4 <br>-rw-r--r-- 1 root root 19 5月 15 18:26 file </p>
<p>B客户端： </p>
<p>下载： <br>[root@rhas101 tmp]# tftp 172.31.0.11 <br>tftp&gt; get 1 <br>Received 72 bytes in 0.0 seconds <br>tftp&gt; </p>
<p>上传当前目录下文件&#8221;aaa&#8221; <br>[root@rhas101 client]# ls -l <br>总用量 4 <br>-rw-r--r-- 1 root root 15 5月 20 21:49 aaa </p>
<p>[root@rhas101 client]# tftp 172.31.0.11 <br>tftp&gt; put aaa <br>Error code 1: File not found <br>tftp&gt; </p>
<p>奇怪当前目录却是有aaa文件？？？让我想一下 <br>哦，原来服务器/test目录下没有文件aaa,那就touch一个吧 <br>[root@rhas11 test]# touch aaa <br>[root@rhas11 test]# ls -l <br>总用量 4 <br>-rw-r--r-- 1 root root 0 5月 15 18:46 aaa <br>-rw-r--r-- 1 root root 19 5月 15 18:26 file </p>
<p>好了再试一试 <br>[root@rhas101 client]# tftp 172.31.0.11 <br>tftp&gt; put aaa <br>Error code 1: File not found <br>tftp&gt; put aaa <br>Error code 2: Access denied <br>tftp&gt; <br>细心的读者一定想到这是权限问题 <br>再到服务器上设置 <br>(=========================================================================== <br>小插曲：#chown -R nobody.nobody /test <br>#vi /etc/xinetd.d/tftp <br>service tftp <br>{ <br>disable = no <br>socket_type = dgram <br>protocol = udp <br>wait = yes <br>user = nobody <br>server = /usr/sbin/in.tftpd <br>server_args = -u nobody -s /test <br>per_source = 11 <br>cps = 100 2 <br>flags = IPv4 <br>} <br>chmod 777 -R /test <br>=========================================================================== <br>) </p>
<p>#service xinetd restart </p>
<p>) </p>
<p>[root@rhas11 test]# chmod 007 aaa 其实只要有可写的权限就行了 <br>[root@rhas11 test]# ls -l <br>总用量 4 <br>-------rwx 1 root root 0 5月 15 18:46 aaa <br>-rw-r--r-- 1 root root 19 5月 15 18:26 file </p>
<p>[root@rhas101 client]# tftp 172.31.0.11 <br>tftp&gt; put aaa <br>Error code 1: File not found <br>tftp&gt; put aaa <br>Error code 2: Access denied <br>tftp&gt; put aaa <br>Sent 16 bytes in 0.0 seconds <br>tftp&gt; </p>
<p>二、 特殊应用：上传和下载路由器(或交换机)配置文件 </p>
<p>配使用Linux的tftp功能配置cisco route <br>在局域网环境中，如果有Cisco 路由器和Linux服务器。也许你需要利用Linux的 <br>TFTP服务去下载Cisco router配置文件 startup-config,在服务器上编辑后再上载 <br>到路由器，在实现中有一些特别注意的地方。 <br>所用软、硬件：Redhat Linux AS 3.0 ，Cisco 2611 路由器 </p>
<p>BEIJING#copy run tftp <br>Address or name of remote host []? 172.31.0.11 <br>Destination filename [beijing-confg]? beijing-route <br>!! <br>1968 bytes copied in 0.581 secs (3387 bytes/sec) </p>
<p>别忘了在tftp server 上创建beijing-route权限为777 <br>BEIJING#copy tftp flash <br>Address or name of remote host []? 172.31.0.11 <br>Source filename []? beijing-route <br>Destination filename [beijing-route]? <br>Accessing tftp://172.31.0.11/beijing-route... <br>Erase flash: before copying? [confirm] <br>Erasing the flash filesystem will remove all files! Continue? [confirm] <br>Erasing device... eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ...erased <br>Erase of flash: complete <br>Loading beijing-route from 172.31.0.11 (via FastEthernet0/0): ! <br>[OK - 1968 bytes] </p>
<p>Verifying checksum... OK (0x5248) <br>1968 bytes copied in 0.285 secs (6905 bytes/sec) <br>BEIJING#&nbsp;&nbsp; <br><img src="http://fanqiang.chinaunix.net/mirror/www.netadmin.com.cn/experience/20041214/20040922092839.jpg"><br>用tftp传输大文件时的带宽显示情宽<br></p>
<!-- 正文end -->
<img src ="http://www.blogjava.net/bluebillow/aggbug/132178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2007-07-24 23:46 <a href="http://www.blogjava.net/bluebillow/archive/2007/07/24/132178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux常用命令</title><link>http://www.blogjava.net/bluebillow/archive/2007/06/26/126258.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Tue, 26 Jun 2007 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2007/06/26/126258.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/126258.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2007/06/26/126258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/126258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/126258.html</trackback:ping><description><![CDATA[<p>&nbsp;1、pwd&nbsp; 查看自己当前所在位置</p>
<p>2、cat&nbsp; 列出、合并、创建文件</p>
<p>cat test.txt&nbsp; (列出test.txt) <br>cat test1.txt test2.txt &gt; test3.txt （1、2合并生成3） <br>cat test1.txt&nbsp; &gt;&gt; test2.txt&nbsp; (1合并到2中） <br>cat &gt; myfile.txt&nbsp; (创建myfile.txt)<br>3、mv file1 file2 (将file1改名为file2,如果file2已经存在，为避免改名时覆盖file2,加上-b参数会生成file2的备份，备份有个波浪号后缀）</p>
<p>4、cp&nbsp; 拷贝命令</p>
<p>cp file1 file2 覆盖掉file2的内容 <br>cp -i file1 file2&nbsp; 会出现提示信息 <br>cp -bi file1 file2 会备份file2 <br>cp -r tempdir1 tempdir2 把子目录tempdir1及其中文件拷贝到tempdir2 <br>cp -p tempdir2/tempdir1/temp1file1 tempdir3 把文件连同子目录结构一起拷贝到tempdir3<br>5、ln&nbsp; 建立硬链接和符号链接</p>
<p>ln file1 file2 (硬链接，file2和file1完全相同，修改其中任何一个都会影响另外一个，删除了file1后，file2仍存在) <br>ln -s file1 file2&nbsp; (符号链接，file2只是一个指向file1的假名，如果删除了file2，不影响file1,如果删除了file1，file2就没用了) <br>ln -s /usr/local/games play&nbsp; (建立一个子目录的硬链接必须用符号链接，建立完符号链接后，就不用cd /usr/local/games了，只要用cd play)<br>6、chowd 改变文件权限</p>
<p>chmod&nbsp; 600 file1 <br>chmod ugo-wx file(拥有者－组－其他用户直接增减权限)<br>7、chown 改变文件所有权</p>
<p>chown :users file1(把所有权分配给users用户组) <br>chown lucy:users file1(把存取权限分配给lucy用户)<br>8、groups 用户名&nbsp; （查看用户名属于哪个组）</p>
<p>9、groupadd 组名&nbsp; （创建新组）</p>
<p>10、usermod -G/-g 组名 用户名（把一个用户加入一个组/把一个用户改为属于另一个组）</p>
<p>11、userdel 用户名/groupdel 组名&nbsp;&nbsp; （删除用户/删除组）</p>
<p>12、scp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#50;&#48;&#50;&#46;&#49;&#57;&#56;&#46;&#51;&#49;&#46;&#54;&#54;&#58;&#47;&#117;&#115;&#114;&#47;&#108;&#111;&#99;&#97;&#108;&#47;&#102;&#105;&#108;&#101;&#49;">root@202.198.31.66:/usr/local/file1</a> /home/&nbsp; （远程拷贝） </p>
<p>13、history 3 （查看历史命令列表，此命令是查看刚才用过的3个命令）</p>
<p>14、find / -name http.conf -print （从根目录开始查找文件并列出属性）</p>
<p>15、grep -c word /file1 (grep查找文件内容，此命令找出file1中word串出现次数）</p>
<p>16、修改主机名&nbsp; vi /etc/sysconfig/network，修改HOSTNAME一行为"HOSTNAME=主机名"，然后运行命令" hostname 主机名"。一般还要修改/etc/hosts文件中的主机名。</p>
<p>17、修改IP地址和修改网关（gateway选项）<br>vi /etc/sysconfig/network-scripts/ifcfg-eth0<br>&nbsp;<br>18、查看机器域名（host IP）<br>host 202.198.31.62<br>&nbsp;<br>19、查看CPU<br>dmesg|grep CPU<br>&nbsp;<br>20、查看机器配置<br>dmesg|grep hd</p>
<img src ="http://www.blogjava.net/bluebillow/aggbug/126258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2007-06-26 09:51 <a href="http://www.blogjava.net/bluebillow/archive/2007/06/26/126258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rm -rf * -bash: /bin/rm: 参数列表过长 (zt)</title><link>http://www.blogjava.net/bluebillow/archive/2007/03/20/104901.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Tue, 20 Mar 2007 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2007/03/20/104901.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/104901.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2007/03/20/104901.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/104901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/104901.html</trackback:ping><description><![CDATA[
		<p>在linux下用rm删除大量文件时会出现这个错误:</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">   rm -rf 'wz-a1.2007-02*'<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">rm -rf * -bash: /bin/rm: 参数列表过长</span></div>
		<br />经过google, 发现这个方法, 特记下来, 以防以后忘记<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">find . -name </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wz-a1.2007-02*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> | xargs <font style="BACKGROUND-COLOR: #eeeeee">rm -rf 'wz-a1.2007-02*'</font></span></div><p><br /><br />原帖地址:http://www.blogjava.net/kelefa/archive/2007/02/02/97528.html</p><img src ="http://www.blogjava.net/bluebillow/aggbug/104901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2007-03-20 11:00 <a href="http://www.blogjava.net/bluebillow/archive/2007/03/20/104901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发人员行走Unix的随身四艺(zt)</title><link>http://www.blogjava.net/bluebillow/archive/2007/03/05/102018.html</link><dc:creator>生活在别处</dc:creator><author>生活在别处</author><pubDate>Mon, 05 Mar 2007 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/bluebillow/archive/2007/03/05/102018.html</guid><wfw:comment>http://www.blogjava.net/bluebillow/comments/102018.html</wfw:comment><comments>http://www.blogjava.net/bluebillow/archive/2007/03/05/102018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluebillow/comments/commentRss/102018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluebillow/services/trackbacks/102018.html</trackback:ping><description><![CDATA[ 作者：<a href="/calvin" _fcksavedurl="http://blog.csdn.net/calvinxiu"><font color="#366900">江南白衣</font></a>，原文出处：<a id="Editor_Edit_hlEntryLink" title="view: 开发人员行走Unix的随身四艺" href="/calvin/archive/2007/01/27/96318.html" target="_blank"><font color="#366900">http://www.blogjava.net/calvin/archive/2007/01/27/96318.html</font></a>，转载请保留出处。 
<p>  </p><p>   Unix系统永远只会越来越多，开发人员就没必要特意学习它们的安装、配置和管理了，就全部交给集成人员吧。<br />    但开发人员行走于Unix之间，依然有四样东西要熟练。</p><h2>    一、VI</h2><p>    虽然Unix上的文本编辑器已经越来越好用，但不在Console前面，网速也不够连XWindows的时候，还是要依赖VI。<br />    回想VI的时代背景，发现VI对开发人员已经周到得离谱了，热键多到你双手不离键盘就能完成大半编辑工作。<br />    建议自己制作一张自己认为有用，但又经常忘记的命令的sheet--参见附录A，拿出考试的力气把它背熟。</p><h2>    二、文本处理</h2><p>       开发人员在Unix下干得最多的除了Make和除Bug外，大概就是处理日志文件、业务文件的查错和统计了。<br />       只会more和grep是不够的，开发老手会把awk,sed,grep,sort,uniq,wc,head,tail这些文本处理命令，通过管道玩具式的拆卸拼装，最后完成一件原本以为非编写大段代码不可的工作。周到的参数设定，让人再一次感叹那个简单的年代，这样复杂到极致的设计.......怪不得《Unix 编程艺术》的作者有那么骄傲的自觉。<br />    <br />     比如车东的每月访问TOP10 统计脚本：</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /><span style="COLOR: #000000">awk -F '\</span><span style="COLOR: #000000"></span><span style="COLOR: #000000">t' '{</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">$</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">}' 2004_2</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">txt| grep chedong</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">com</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">tech</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">uniq -c|</span><span style="COLOR: #0000ff">sort</span><span style="COLOR: #000000"> -rn|head -</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000"> </span></div></div><p>      以上命令的具体用法--参见附录B：文本处理命令小结，大概说明如下：</p><ul><li>awk -F '\t' 将2004_2.txt访问纪录文件，用TAB分割，打印第4列 
</li><li>grep chedong.com/tech 只列出chedong.com/tech笔记目录下的文档 
</li><li>uniq -c 汇总计数 
</li><li>sort -rn 按数值排序 
</li><li>head -10 TOP 10 </li></ul><p>         补充：这些命令几乎都支持正则表达式，学正则比较好的书是OReilly的《Mastering.Regular.Expressions.3rd 2006》    </p><h2>    三、Bash Shell 编程</h2><p>    上面的纯粹命令管道拼装完成不了所有的事情，有时需要用Shell编程来配合调度。    <br /><br />    编程是开发人员的天赋本能，不论什么语言，看看参考手册应该就能上手。</p><p>    见<a href="http://xiaowang.net/bgb-cn/index.html" _fcksavedurl="http://xiaowang.net/bgb-cn/index.html"><font color="#366900">《Bash新手指南中文版》</font></a> ，一份快速的Bash Shell编程指南。<br />     <br />     更进一步，可以学习perl。<br /><br /></p><h2>    四、Make or AutoMake</h2><p>    用过Java的Ant后，想起Make就觉得很烦，很厌倦。总归还是会的，见<a href="http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/" _fcksavedurl="http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/"><font color="#366900">《GNU Make 3.8.0 中文手册》</font></a>     </p><p>     不过即使make已经精通到变态，每个人写出来的MakeFile还是千奇百怪，再看看开源项目们个个都是automake+autoconf了，我们自己也长进一点吧。手工编写MakeFile.am，让auotomake变成MakeFile.in，再让用户./configure 生成最终的MakeFile。<br />    <br />    autotools既能跨越平台，又是标准的写法，最重要的是，编写MakeFile.am的工作量比MakeFile少多了，只要简单的定义目标文件，先要处理的子目录，需要的源文件，头文件与库文件就可以了。<br />    <br />    入门文章<br />    <a href="http://www.ccw.com.cn/htm/app/linux/develop/01_7_25_7.asp" _fcksavedurl="http://www.ccw.com.cn/htm/app/linux/develop/01_7_25_7.asp"><font color="#366900">使用AutoMake轻松生成Makefile</font></a> <br />    <a href="http://www-128.ibm.com/developerworks/cn/linux/l-makefile/index.html"><font color="#366900">IBM DW:</font></a><a href="javascript:void(0);/*1169901219468*/" _fcksavedurl="javascript:void(0);/*1169901219468*/"><font color="#366900">例解 autoconf 和 automake 生成 Makefile 文件</font></a><br /><br />    上面两文只作入门了解，实际的操作步骤--参见附录C：我的automake1.9步骤小结。<br /><br />    完整的免费电子书：<br /> <a href="http://sources.redhat.com/autobook/download.html" _fcksavedurl="http://sources.redhat.com/autobook/download.html"><font color="#366900">《GNU Autoconf, Automake and Libtool》</font></a></p><p>    另外，ACE里还贡献了一个更厉害的<a href="http://www.ociweb.com/products/mpc" _fcksavedurl="http://www.ociweb.com/products/mpc"><font color="#366900">MPC(Makefile, Project, and Workspace Creator )</font></a>，  自动的生成MakeFile.am或者VC的项目文件。<br /><br /></p><h2>    附录A：我的VI易忘命令手册</h2><p><strong>    上下左右：</strong><br />    ctrl+u/d 上下半屏，ctrl+f/b,上下一屏<br />    H/G屏幕头/文章末 ，0/$ 行首行末<br />    <br /><strong>    增删改：</strong><br />    yy/dd 复制/删除 一行，p/P：将yy/dd的内容paste出来<br />    I/A 在行首/末添加， o/O 开新行，d0/d$ 删除到行首，行末<br />    u:undo</p><p>    <strong>查：</strong><br />    ? 向前查找， n/N 重复上一次查找</p><h2>附录B: 文本处理命令小结</h2><p>   <strong>awk：</strong>处理结构化的文本(每行以固定符号分成若干列)，提取打印某些字段，如：<br />    ls -l|awk '{print $1}'  --将ls-l结果的第一列打印出来<br />    awk -F":" '{print $1"  "$6}' /etc/passwd ，将以:分割的/etc/passwd文件的第1，6列打印出来，中间以空格分开<br />    详见<a href="http://www-128.ibm.com/developerworks/cn/linux/shell/awk/awk-1/index.html"><font color="#366900">IBM DW中国的AWK实例</font></a>(共3篇) 或 <a href="http://xiaowang.net/bgb-cn/ch06.html" _fcksavedurl="http://xiaowang.net/bgb-cn/ch06.html"><font color="#366900">Bash新手指南中文版第6章</font></a>。</p><p>    <strong>grep：</strong>过滤，大家用得最多的命令，支持正则表达式。参数有：<br />    -i忽略大小写，-n显示line number，-c 统计在每个文件的出现次数，-l只显示符合的文件的名字。</p><p>    <strong>sed：</strong>流编辑器，主要用于替换，如：<br />    sed -e '1,10s/foo/bar/g' myfile2.txt 将1到10行的文本中的foo 替换成bar,s代表替换,g代表全局替换 <br />    支持正则的替换字符串，可以只替换某个范围内的内容。<br />    用法不算简单,详见<a href="http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-1/index.html" _fcksavedurl="http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-1/index.html"><font color="#366900">IBM DW中国的Sed实例</font></a>(共3篇)或 <a href="http://xiaowang.net/bgb-cn/ch05.html" _fcksavedurl="http://xiaowang.net/bgb-cn/ch05.html"><font color="#366900">Bash新手指南中文版第5章</font></a>。<br />    <br />    <strong>sort：</strong>排序，参数有：<br />    -r逆序, -n 数字比较 , -M 日历比较 Feb,Dec, -f 忽略大小写<br />    同样支持结构化文件，如<br />    sort -t : -k 1,1 /etc/passwd，以: 分割,只按第1列排序<br />    sort -t : -k 1,1 -k2.2,3.4 /etc/passwd ，以:分割,先按第1列排序,再按第2列的第二个字符到第3列的第4个字符排序。</p><p>    <strong>uniq：</strong>去除重复行。<br />    除了正常用法外，还有-c统计重复次数，和-u （唯一）和 -d （重复）两个参数,只显示唯一的和重复的行。</p><p>    <strong>wc：</strong> 统计。<br />    -l 行,-m 字符,-w 单词<br /></p><h2>附录C: 我的automake1.9步骤小结</h2><ol><li>先编写MakeFile.am 
</li><li>运行autoscan，生成configure.scan 
</li><li>修改configure.scan，同时把文件改名为configure.in ：<br />去除AC_CONFIG_HEADER([config.h])那行<br />加入AM_INIT_AUTOMAKE([1.9 foreign])  (其中1.9是automake的版本号)<br />加入AC_PROG_LIBTOOL  (如果用libtool的话)<br />检查AC_CONFIG_FILES，如果之前没有先写齐所有MakeFile.am，autoscan就不会帮你加入，需要自己手工补充。 
</li><li>libtoolize (如果用libtool的话) 
</li><li>aclocal 
</li><li>autoconf 
</li><li>automake --add-missing 
</li><li>./configure 
</li><li>make<br /><br />大家需要编写的文件从Makefile转为了Makefile.am 和configure.in, ACE的Examples是很好的参考。<br /></li></ol><img src ="http://www.blogjava.net/bluebillow/aggbug/102018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluebillow/" target="_blank">生活在别处</a> 2007-03-05 22:53 <a href="http://www.blogjava.net/bluebillow/archive/2007/03/05/102018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>