<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post/1156/</link>
<title><![CDATA[快速替换git的提交地址]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Wed, 06 Sep 2023 08:46:27 +0000</pubDate> 
<guid>https://atim.cn/post/1156/</guid> 
<description>
<![CDATA[ 
	最近git的服务进行更换.导致本地的项目都需要更换新的地址<br/>但路径还是使用原来的路径.<br/>一个个修改太浪费时间了.<br/><div class="code"><br/># 找到需要更新的config文件路径,并保存到filepath.txt文件名,可以根据实例情况进行删除部分路径<br/>find ./ -name &#039;config&#039;&#124;grep &#039;.git&#039; &#124;grep -v &#039;vendor&#039; &gt;filepath.txt<br/># 替换<br/>cat filepath.txt &#124;xargs sed -i &quot;s/teambition/aliyun/g&quot;<br/></div>
]]>
</description>
</item><item>
<link>https://atim.cn/post/1131/</link>
<title><![CDATA[Idea 的Cannot access class]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Mon, 09 Mar 2020 06:46:54 +0000</pubDate> 
<guid>https://atim.cn/post/1131/</guid> 
<description>
<![CDATA[ 
	这两天idea总是出现不能访问某个类.<br/>尝试过rebuild project,但问题都没有解决.<br/><br/>好吧.然后网上很多文章说要重启.但这里的重启不是关掉重开.而是清理缓存,然后重新启动.<br/><br/>国内的文章实在是太简了.只能通过google找到原来的那边文章.<br/><br/>File-> Invalidate Cache and Restart<br/><br/><br/>https://intellij-support.jetbrains.com/hc/en-us/community/posts/206948405-Intellij-can-t-find-classes-in-same-package
]]>
</description>
</item><item>
<link>https://atim.cn/post/1123/</link>
<title><![CDATA[git 修改的文件打包]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Mon, 02 Sep 2019 11:54:28 +0000</pubDate> 
<guid>https://atim.cn/post/1123/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>git archive --output=&lt;file&gt; HEAD $(git diff --name-only ...)<br/><br/>tar -czf &lt;file&gt; $(git diff --name-only ...)<br/><br/>cp $(git diff --name-only ...) &lt;export-directory&gt;<br/></div>
]]>
</description>
</item><item>
<link>https://atim.cn/post/1099/</link>
<title><![CDATA[git flow]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Thu, 14 Jan 2016 09:43:27 +0000</pubDate> 
<guid>https://atim.cn/post/1099/</guid> 
<description>
<![CDATA[ 
	git flow是什么？<br/>不重要，重要的是他解决了流程的问题。保证了发开和发布版本的同步。<br/>这个图应该能看懂。不懂多看几次<br/><a href="https://atim.cn/attachment.php?fid=63" target="_blank"><img src="https://atim.cn/attachment.php?fid=63" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/1062/</link>
<title><![CDATA[SVN常用命令实例]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Wed, 22 May 2013 02:29:52 +0000</pubDate> 
<guid>https://atim.cn/post/1062/</guid> 
<description>
<![CDATA[ 
	1、将文件checkout到本地目录<br/>svn checkout path（path是服务器上的目录）<br/>例如：svn checkout svn://192.168.1.1/pro/domain<br/>简写：svn co<br/>2、往版本库中添加新的文件<br/>svn add file<br/>例如：svn add test.php(添加test.php)<br/>svn add *.php(添加当前目录下所有的php文件)<br/>3、将改动的文件提交到版本库<br/>svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁，就使用–no-unlock开关)<br/>例如：svn commit -m “add test file for my test“ test.php<br/>简写：svn ci<br/>4、加锁/解锁<br/>svn lock -m “LockMessage“ [--force] PATH<br/>例如：svn lock -m “lock test file“ test.php<br/>svn unlock PATH<br/>5、更新到某个版本<br/>svn update -r m path<br/>例如：<br/>svn update如果后面没有目录，默认将当前目录以及子目录下的所有文件都更新到最新版本。<br/>svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)<br/>svn update test.php(更新，于版本库同步。如果在提交的时候提示过期的话，是因为冲突，需要先update，修改文件，然后清除svn resolved，最后再提交commit)<br/>简写：svn up<br/>6、查看文件或者目录状态<br/>1）svn status path（目录下的文件和子目录的状态，正常状态不显示）<br/>【?：不在svn的控制中；M：内容被修改；C：发生冲突；A：预定加入到版本库；K：被锁定】<br/>2）svn status -v path(显示文件和子目录状态)<br/>第一列保持相同，第二列显示工作版本号，第三和第四列显示最后一次修改的版本号和修改人。<br/>注：svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的，原因是svn在本地的.svn中保留了本地版本的原始拷贝。<br/>简写：svn st<br/>7、删除文件<br/>svn delete path -m “delete test fle“<br/>例如：svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”<br/>或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘，推荐使用这种<br/>简写：svn (del, remove, rm)<br/>8、查看日志<br/>svn log path<br/>例如：svn log test.php 显示这个文件的所有修改记录，及其版本号的变化<br/>9、查看文件详细信息<br/>svn info path<br/>例如：svn info test.php<br/>10、比较差异<br/>svn diff path(将修改的文件与基础版本比较)<br/>例如：svn diff test.php<br/>svn diff -r m:n path(对版本m和版本n比较差异)<br/>例如：svn diff -r 200:201 test.php<br/>简写：svn di<br/>11、将两个版本之间的差异合并到当前文件<br/>svn merge -r m:n path<br/>例如：svn merge -r 200:205 test.php（将版本200与205之间的差异合并到当前文件，但是一般都会产生冲突，需要处理一下）<br/>12、SVN 帮助<br/>svn help<br/>svn help ci<br/>——————————————————————————<br/>以上是常用命令，下面写几个不经常用的<br/>——————————————————————————<br/>13、版本库下的文件和目录列表<br/>svn list path<br/>显示path目录下的所有属于版本库的文件和目录<br/>简写：svn ls<br/>14、创建纳入版本控制下的新目录<br/>svn mkdir: 创建纳入版本控制下的新目录。<br/>用法: 1、mkdir PATH…<br/>2、mkdir URL…<br/>创建版本控制的目录。<br/>1、每一个以工作副本 PATH 指定的目录，都会创建在本地端，并且加入新增<br/>调度，以待下一次的提交。<br/>2、每个以URL指定的目录，都会透过立即提交于仓库中创建。<br/>在这两个情况下，所有的中间目录都必须事先存在。<br/>15、恢复本地修改<br/>svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:<br/>用法: revert PATH…<br/>注意: 本子命令不会存取网络，并且会解除冲突的状况。但是它不会恢复<br/>被删除的目录<br/>16、代码库URL变更<br/>svn switch (sw): 更新工作副本至不同的URL。<br/>用法: 1、switch URL [PATH]<br/>2、switch –relocate FROM TO [PATH...]<br/>1、更新你的工作副本，映射到一个新的URL，其行为跟“svn update”很像，也会将<br/>服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的<br/>方法。<br/>2、改写工作副本的URL元数据，以反映单纯的URL上的改变。当仓库的根URL变动<br/>(比如方案名或是主机名称变动)，但是工作副本仍旧对映到同一仓库的同一目录时使用<br/>这个命令更新工作副本与仓库的对应关系。<br/>17、解决冲突<br/>svn resolved: 移除工作副本的目录或文件的“冲突”状态。<br/>用法: resolved PATH…<br/>注意: 本子命令不会依语法来解决冲突或是移除冲突标记；它只是移除冲突的<br/>相关文件，然后让 PATH 可以再次提交。<br/>18、输出指定文件或URL的内容。<br/>svn cat 目标[@版本]…如果指定了版本，将从指定的版本开始查找。<br/>svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
]]>
</description>
</item><item>
<link>https://atim.cn/post/1047/</link>
<title><![CDATA[浅谈Ddos攻击攻击与防御]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Thu, 10 May 2012 02:17:54 +0000</pubDate> 
<guid>https://atim.cn/post/1047/</guid> 
<description>
<![CDATA[ 
	一 背景<br/><br/>在前几天，我们运营的某网站遭受了一次ddos攻击，我们的网站是一个公益性质的网站，为各个厂商和白帽子之间搭建一个平台以传递安全问题等信息，我们并不清楚因为什么原因会遭遇这种无耻的攻击。因为我们本身并不从事这种类型的攻击，这种攻击技术一般也是比较粗糙的，所以讨论得比较少，但是既然发生了这样的攻击我们觉得分享攻击发生后我们在这个过程中学到得东西，以及针对这种攻击我们的想法才能让这次攻击产生真正的价值，而并不是这样的攻击仅仅浪费大家的时间而已。<br/>另外，我们发现大型的企业都有遭受攻击的案例，但是大家遭受攻击之后的应对措施及学到的经验却分享都比较少，这导致各家都是自行的摸索经验，依然停留在一家企业对抗整个互联网的攻击的局面，而对于攻击者却是此次攻击针对你，下次攻击却是针对他了，而且攻击之后无论是技术还是资源都没有任何的损耗，这也是导致这种攻击频繁并且肆无忌惮的原因。<br/>我们来尝试做一些改变：）<br/><br/><br/>二 应急响应<br/><br/>在攻击发生后，第一个现象是我们的网站上不去了，但是依然可以访问到管理界面，我们登陆上去简单执行了命令：<br/><br/>netstat -antp<br/><br/>我们看到有大量的链接存在着，并且都是ESTABLISHED状态，正常状态下我们的网站访问量没有这么高，如果有这么高我们相信中国的信息安全就有希望了，对于这样的情况其实处理就比较简单，这是一次四层的攻击，也就是所有ip都是真实的，由于目前为止只是消耗了webserver的网络连接资源，所以我们只需要简单的将这些ip在网络层封禁就可以，很简单，用下面的命令即可：<br/><div class="code">for i in `netstat -an &#124; grep -i &#039;:80 &#039;&#124;grep &#039;EST&#039;&#124; awk &#039;&#123;print $5&#125;&#039; &#124; cut -d : -f 1 &#124; sort &#124; uniq -c &#124; awk &#039;&#123;if($1 &gt; 50) &#123;print $2&#125;&#125;&#039;`;do<br/>echo $i<br/>echo $i&nbsp;&nbsp;&gt;&gt; /tmp/banip<br/>/sbin/iptables -A INPUT -p tcp -j DROP -s $i<br/>done</div><br/><br/>然后作为计划任务一分钟执行一次即可，很快，iptables的封禁列表就充斥了大量的封禁ip，我们简单的统计了下连接数最大的一些ip发现都来自韩国。为了保证系统的性能，我们调大了系统的可接受的连接数以及对Nginx进行了每个连接能够进行的请求速率，系统于是恢复了正常的运行。<br/>正常状态一直持续到第二天，但是到中午之后我们发现访问又出现了问题，网络很慢，使用ping发现大概出现了70%左右的丢包，在艰难的登陆到系统上之后，发现系统已经很少有TCP的正常连接，为了查明原因，我们对系统进行了抓包：<br/>抓包<br/><div class="code">tcpdump -w tmp.pcap port not 22</div><br/>查看包<br/><div class="code">tcpdump -r tmp.pcap -nnA</div><br/><br/>我们发现攻击已经从应用层的攻击调整到了网络层的攻击，大量的目标端口是80的udp和icmp包以极快的速度充满了网络，一个包大小大概在1k左右，这次占据的资源纯粹是带宽资源了，即使在系统上做限制也解决不了这个问题，不过也没有关系，对于网络层的问题我们可以在网络层上做限制，我们只需要在网络上把到达我们ip的非TCP的所有包如UDP和ICMP等协议都禁止掉即可，但是我们没有自己的服务器也缺乏对网络设备的控制权，目前是由工信部CERT提供支持的，由于临时无法协调进行相应的操作，后果如大家看到，我们的服务很慢，基本上停止了服务，在一段时间之后攻击者停止了攻击，服务才进行了恢复，很憋屈是么？但是同时我们得到了很多热心朋友的帮助，得到了更好的网络和服务器资源，在网络资源方面的能力得到了很大的提升，缓解了这方面的问题，这里对他们表示感谢。<br/><br/>三 常见ddos攻击及防御<br/><br/>继续秉承80sec的”Know it then hack it”，这里简单谈一下ddos攻击和防御方面的问题。ddos的全称是分布式拒绝服务攻击，既然是拒绝服务一定是因为某些原因而停止服务的，其中最重要的也是最常用的原因就是利用服务端方面资源的有限性，这种服务端的资源范围很广，可以简单的梳理一个请求正常完成的过程：<br/><br/>1 用户在客户端浏览器输入请求的地址<br/>2 浏览器解析该请求，包括分析其中的dns以明确需要到达的远程服务器地址<br/>3 明确地址后浏览器和服务器的服务尝试建立连接，尝试建立连接的数据包通过本地网络，中间路由最终艰苦到达目标网络再到达目标服务器<br/>4 网络连接建立完成之后浏览器根据请求建立不同的数据包并且将数据包发送到服务器某个端口<br/>5 端口映射到进程，进程接受到数据包之后进行内部的解析<br/>6 请求服务器内部的各种不同的资源，包括后端的API以及一些数据库或者文件等<br/>7 在逻辑处理完成之后数据包按照之前建立的通道返回到用户浏览器，浏览器完成解析，请求完成。<br/><br/>上面各个点都可以被用来进行ddos攻击，包括：<br/><br/>1 某些著名的客户端劫持病毒，还记得访问百度跳搜狗的事情么？：）<br/>2 某个大型互联网公司发生的dns劫持事件，或者直接大量的dns请求直接攻击dns服务器，这里可以使用一些专业的第三方dns服务来缓解这个问题，如Dnspod<br/>3 利用建立网络连接需要的网络资源攻击服务器带宽使得正常数据包无法到达如udp的洪水攻击，消耗前端设备的cpu资源以使得数据包不能有效转发如icmp和一些碎片包的洪水攻击，消耗服务器方建立正常连接需要的资源如syn flood或者就是占用大量的连接使得正常的连接无法发起，譬如这次的TCP flood<br/>4 利用webserver的一些特点进行攻击，相比nginx来说，apache处理一个请求的过程就比较笨重。<br/>5 利用应用程序内部的一些特性攻击程序内部的资源如mysql，后端消耗资源大的接口等等，这也就是传统意义上的CC攻击。<br/><br/>这里涉及到攻防的概念，但是实际上如果了解对方的攻击点和攻击手法，防御会变成简单的一个拼资源的过程，不要用你最弱的地方去抗人家最强的地方，应该从最合适的地方入手把问题解决掉，譬如在路由器等设备上解决应用层攻击就不是一个好的办法，同理，在应用层尝试解决网络层的问题也是不可能的，简单来说，目标是只让正常的数据和请求进入到我们的服务，一个完善的防御体系应该考虑如下几个层面：<br/><br/>1 作为用户请求的入口，必须有良好的dns防御<br/>2 与你的价值相匹配的带宽资源，并且在核心节点上布置好应用层的防御策略，只允许你的正常应用的网络数据包能够进入，譬如封杀除了80以外的所有数据包<br/>3 有支持你的服务价值的机器集群来抵抗应用层的压力，有必要的话需要将一个http请求继续分解，将连接建立的过程压力分解到其他的集群里，这里似乎已经有一般的硬件防火墙能做这个事情，甚至将正常的http请求解析过程都进行分解，保证到达后端的是正常的请求，剔除掉畸形的请求，将正常的请求的请求频度等行为进行记录和监控，一旦发生异常就在这里进行应用层的封杀<br/><br/>每个公司都有自己对自己价值的评估从而决定安全投入上的大小，每一次攻击也会涉及到利益的存在，正如防御因为种种原因譬如投入上的不足和实施过程中的不完美，有着天生的弱点一样，攻击也是有着天生的弱点的，因为每一次攻击涉及到不同的环节，每个环节都可能由不同水平的人完成，他所拥有的资源，他使用的工具和技术都不会是完美的，所以才有可能进行防御，另外，我相信进行DDOS攻击的人是一个固定的行业，会有一些固定的人群，对于其中使用的技术，工具，资源和利益链都是比较固定的，与之相对的是各个企业却缺乏相应的沟通，以个人企业对抗一个产业自然是比较困难，而如果每一个企业都能将自己遭受攻击时的经验分享出来，包括僵尸网络的大小及IP分布，攻击工具的特征，甚至有能力的可以去分析背后的利益点及操作者，那么每一次攻击都能让大家的整体防御能力上升，让攻击者的攻击能力有损失，我们很愿意来做这个事情。<br/><br/>四 根源及反击<br/><br/>我困惑的是一点，攻击我们并不能得到实际的好处为什么还是有人来攻击，而且听说其他公司都有被攻击的情况，我觉得有一点原因就是攻击我们的确得不到什么好处，但是实际上攻击者也并不损失什么，无论是资源上还是法律风险上，他不会因为一次攻击而损失太多，而相比之下，服务提供者损失的东西却太多了，这从经济学角度来讲就是不平衡的，我们处于弱势。<br/>一般而言，的确对于作恶者是没有什么惩罚措施，但是这次，我们觉得我们是可以做一些事情的，我们尝试挖掘背后的攻击者，甚至清除这个僵尸网络。<br/>首先这次攻击起源于应用层的攻击，所以所有的ip都是真实的，经过与CERT沟通，也发现这些ip都是韩国的，并且控制端不在国内，因为期间没有与国内有过通讯，即使在后面换成了udp+icmp的flood，但是依然是那些韩国的ip，这很有意思，正常情况下udp+icmp的数据包是可以伪造的，但是这里居然没有伪造，这在后面大概被我们证实了原因。<br/>这些ip是真实存在的ip，而且这些ip肯定在攻击完我们之后一定依然跟攻击者保持着联系，而一般的联系方式因为需要控制的方便都是dns域名，既然如此，如果我们能挖掘到这个dns域名我们就可能间接的挖掘出真正幕后黑手在哪里。首先，我们迅速的找出了这次攻击ip中开放了80端口的机器，因为我们对80端口上的安全问题比较自信，应该很快可以获知这些ip背后的细节（80sec名称由来），我们发现大部分是一些路由器和一些web的vpn设备，我们猜测这次攻击的主要是韩国的个人用户，而个人用户的机器操作系统一般是windows所以在较高版本上发送数据包方面可能有着比较大的限制，这也解释了为什么即使是udp+icmp的攻击我们看到的大都是真实ip。发现这些路由设备之后我们尝试深入得更多，很快用一些弱口令譬如admin/admin登陆进去，果然全世界的网民都一样，admin/admin是天生的入口。<br/>登陆进去一些路由之后我们发现这些路由器里面存在一个功能是设置自己的dns，这意味着这下面的所有dns请求都可以被定向到我们自己设置的dns服务器，这对于我们去了解内部网络的细节会很有用，于是我们建立了一个自己的dns服务器，并且开启了dns请求的日志功能以记录所有请求的细节。我们大约控制了20台路由器的dns指向，并且都成功重定向到我们自己的服务器。<br/>剩下的就是简单的数据分析，在这之前我们可以对僵尸网络的控制域名做如下的猜测：<br/><br/>1 这个dns应该为了灵活的控制域名的缓存时间TTL一般不会特别长<br/>2 这个dns应该是定期的被请求，所以会在dns请求里有较大的出现比例<br/>3 这个dns应该是为了控制而存在的，所以域名不应该在搜索引擎以及其他地方获得较高的访问指数，这与2中的规则配合起来会比较好确定，是一个天生的矛盾。<br/>4 这个dns应该在各个路由下面都会被请求<br/><br/>这些通过简单的统计就很容易得出答案，我们发现了一些3322的通用恶意软件域名但是发现它并不是我们需要的，因为只有少数机器去访问到，经过一些时间之后最后我们发现一个域名访问量与naver（韩国的一个门户）的访问量持平，workgroup001.snow****.net，看起来似乎对自己的僵尸网络管理很好嘛，大概有18台机器访问过这个域名，这个域名的主机托管在新加坡，生存时间TTL在1800也就是半小时，这个域名在所有的搜索引擎中都不存在记录，是一个韩国人在godady一年前才注册的，同时我们访问这个域名指向主机的3389，简单的通过5下shift就判断出它上面存在着一个典型的windows后门，似乎我们找到它了，不是么？经过后续的观察，一段时间后这个域名指向到了127.0.0.1，我们确信了我们的答案,workgroup001.snow****.net，看起来似乎对自己的僵尸网络管理很好嘛：）<br/>这是一次典型的ddos攻击，攻击之后我们获得了参与攻击的主机列表和控制端的域名及ip，相信中国和韩国的cert对于清理这次的攻击源很有兴趣，我们是有一些损失，但是攻击者也有损失了（大概包括一个僵尸网络及一个控制端域名，甚至可能包括一次内部的法律调查），我们不再是不平等的了，不是么？<br/><br/>五 总结<br/><br/>正如一个朋友所讲的，所有的防御是不完美的正如攻击是不完美的一样，好的防御者在提升自己的防御能力趋于完美的同时也要善于寻找攻击者的不完美，寻找一次攻击中的漏洞，不要对攻击心生恐惧，对于Ddos攻击而言，发起一次攻击一样是存在漏洞的，如果我们都能够擅长利用其中的漏洞并且抓住后面的攻击者那么相信以后的ddos攻击案例将会减少很多，在针对目标发起攻击之前攻击者也会做更多的权衡，损失，利益和法律。<br/><br/>浅谈Ddos攻击攻击与防御: http://www.80sec.com/ddos-attack-defend.html
]]>
</description>
</item><item>
<link>https://atim.cn/post/1046/</link>
<title><![CDATA[linux查看硬件信息大全]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Thu, 26 Apr 2012 01:21:57 +0000</pubDate> 
<guid>https://atim.cn/post/1046/</guid> 
<description>
<![CDATA[ 
	1, 主板信息<br/>.查看主板的序列号<br/>--------------------------------------------------<br/>#使用命令<br/>dmidecode &#124; grep -i 'serial number'<br/>#查看板卡信息<br/>cat /proc/pci<br/>--------------------------------------------------<br/>2, cpu信息<br/>--------------------------------------------------<br/>#通过/proc文件系统<br/>1) cat /proc/cpuinfo<br/>#通过查看开机信息<br/>2) dmesg &#124; grep -i 'cpu'<br/>#<br/>3)dmidecode -t processor<br/>--------------------------------------------------<br/>3, 硬盘信息<br/>--------------------------------------------------<br/>#查看分区情况<br/>fdisk -l<br/>#查看大小情况<br/>df -h<br/>#查看使用情况<br/>du -h<br/>#<br/>hdparm -I /dev/sda<br/>#<br/>dmesg &#124; grep sda<br/>--------------------------------------------------<br/>4, 内存信息<br/>--------------------------------------------------<br/>1) cat /proc/meminfo<br/>2) dmesg &#124; grep mem<br/>3) free -m<br/>4) vmstat<br/>5) dmidecode &#124; grep -i mem<br/>--------------------------------------------------<br/>5, 网卡信息<br/>--------------------------------------------------<br/>1) dmesg &#124; grep -i 'eth'<br/>2) cat /etc/sysconfig/hwconf &#124; grep -i eth<br/>3) lspci &#124; grep -i 'eth'<br/>--------------------------------------------------<br/>6, 鼠标键盘和USB信息<br/>查看键盘和鼠标：cat /proc/bus/input/devices<br/>查看USB设备：cat /proc/bus/usb/devices<br/>查看各设备的中断请求(IRQ):cat /proc/interrupts<br/>7, 显卡信息<br/>--------------------------------------------------<br/>1)lspci &#124;grep -i 'VGA'<br/>2)dmesg &#124; grep -i 'VGA'<br/>--------------------------------------------------<br/>8, 声卡信息<br/>--------------------------------------------------<br/>1)lspci &#124;grep -i 'VGA'<br/>2)dmesg &#124; grep -i 'VGA'<br/>--------------------------------------------------<br/>7, 其他命令<br/>.用硬件检测程序kuduz探测新硬件：service kudzu start ( or restart)<br/>.dmesg (查看所有启动时检测到的硬件信息)<br/>.lspci (显示外设信息, 如usb，网卡等信息)<br/>.cat /etc/sysconfig/hwconf<br/>.mpstat<br/>8, 需要手动安装的工具<br/>lshw,hwinfo,hal-device-manager<br/>9, Solaris如何检测硬件参数<br/>俺从别处发现了些有意思的东西：<br/>Solaris的硬件相关命令<br/>发表：2004-3-8 11:20:36 出处：你的博客网(yourblog.org)<br/>--------------------------------------------------------------------------------<br/>1)．查看当前处理器的类型和速度(主频)<br/># psrinfo –v<br/>Status of processor 1 as of: 11/24/01 10:34:41<br/>Processor has been on-line since 11/24/01 10:18:20.<br/>The sparcv9 processor operates at 432 MHz,<br/>and has a sparcv9 floating point processor.<br/>Status of processor 3 as of: 11/24/01 10:34:41<br/>Processor has been on-line since 11/24/01 10:18:22.<br/>The sparcv9 processor operates at 432 MHz,<br/>and has a sparcv9 floating point processor.<br/>2)．打印当前的OBP版本号<br/># prtconf –V<br/>OBP 3.20.0 2000/10/24 10:47<br/># /usr/platform/sun4u/sbin/prtdiag –v &#124; grep OBP<br/>OBP 3.20.0 2000/10/24 10:47&nbsp;&nbsp; POST 6.1.0 2000/10/24 10:49<br/>ok. .version<br/>Release 3.20 Version 0 created 2000/10/24 10:47<br/>OBP 3.20.0 2000/10/24 10:47<br/>POST 6.1.0 2000/10/24 10:49<br/>OBDIAG 4.5.1 2000/10/24 10:48<br/>3)．查看硬盘物理信息(vendor, RPM, Capacity)<br/># iostat –E<br/>sd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft Errors: 0 Hard Errors: 0 Transport Errors: 0<br/>Vendor: SEAGATE Product: ST34371W SUN4.2G Revision: 7462 Serial No:<br/>JDX394220KW EBC<br/>Size: 4.29GB ;<br/>Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0<br/>Illegal Request: 0 Predictive Failure Analysis: 0<br/>sd2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft Errors: 0 Hard Errors: 0 Transport Errors: 0<br/>Vendor: FUJITSU Product: MAJ3364M SUN36G Revision: 0804 Serial No: 01M18144<br/>Size: 36.42GB ;<br/>Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0<br/>Illegal Request: 0 Predictive Failure Analysis: 0<br/>sd3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft Errors: 0 Hard Errors: 0 Transport Errors: 0<br/>Vendor: FUJITSU Product: MAJ3364M SUN36G Revision: 0804 Serial No: 01M16199<br/>Size: 36.42GB ;<br/>Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0<br/>Illegal Request: 0 Predictive Failure Analysis: 0<br/>sd21&nbsp;&nbsp;&nbsp;&nbsp; Soft Errors: 0 Hard Errors: 0 Transport Errors: 0<br/>Vendor: TOSHIBA Product: DVD-ROM SD-M1401 Revision: 1007 Serial No: 06/22/00<br/>Size: 18446744073.71GB ;<br/>Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0<br/>Illegal Request: 0 Predictive Failure Analysis: 0<br/>4)．查看磁盘的几何参数和分区信息<br/># prtvtoc /dev/rdsk/c0t0d0s0<br/>* /dev/rdsk/c0t0d0s0 partition map<br/>*<br/>* Dimensions:<br/>*&nbsp;&nbsp;&nbsp;&nbsp; 512 bytes/sector<br/>*&nbsp;&nbsp;&nbsp;&nbsp; 135 sectors/track<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16 tracks/cylinder<br/>*&nbsp;&nbsp;&nbsp;&nbsp;2160 sectors/cylinder<br/>*&nbsp;&nbsp;&nbsp;&nbsp;3882 cylinders<br/>*&nbsp;&nbsp;&nbsp;&nbsp;3880 accessible cylinders<br/>*<br/>* Flags:<br/>*&nbsp;&nbsp; 1: unmountable<br/>* 10: read-only<br/>*<br/>* Unallocated space:<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; First&nbsp;&nbsp;&nbsp;&nbsp; Sector&nbsp;&nbsp;&nbsp;&nbsp;Last<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sector&nbsp;&nbsp;&nbsp;&nbsp; Count&nbsp;&nbsp;&nbsp;&nbsp;Sector<br/>*&nbsp;&nbsp;&nbsp;&nbsp; 8277120&nbsp;&nbsp;&nbsp;&nbsp;103680&nbsp;&nbsp; 8380799<br/>*<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First&nbsp;&nbsp;&nbsp;&nbsp; Sector&nbsp;&nbsp;&nbsp;&nbsp;Last<br/>* Partition Tag Flags&nbsp;&nbsp;&nbsp;&nbsp; Sector&nbsp;&nbsp;&nbsp;&nbsp; Count&nbsp;&nbsp;&nbsp;&nbsp;Sector&nbsp;&nbsp; Mount Directory<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp; 2049840&nbsp;&nbsp; 2049839&nbsp;&nbsp; /<br/>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;01&nbsp;&nbsp;&nbsp;&nbsp;2049840&nbsp;&nbsp;&nbsp;&nbsp;615600&nbsp;&nbsp; 2665439<br/>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp; 8380800&nbsp;&nbsp; 8380799<br/>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;2665440&nbsp;&nbsp; 2458080&nbsp;&nbsp; 5123519&nbsp;&nbsp; /opt<br/>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;5123520&nbsp;&nbsp; 3073680&nbsp;&nbsp; 8197199&nbsp;&nbsp; /usr<br/>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;8197200&nbsp;&nbsp;&nbsp;&nbsp; 79920&nbsp;&nbsp; 8277119&nbsp;&nbsp; /export/home<br/>5)．显示已经使用和未使用的i-node数目<br/># df –F ufs –o i<br/>Filesystem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iused&nbsp;&nbsp; ifree %iused Mounted on<br/>/dev/dsk/c0t0d0s0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7859 479821&nbsp;&nbsp;&nbsp;&nbsp; 2%&nbsp;&nbsp; /<br/>/dev/dsk/c0t0d0s6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;37763 339517&nbsp;&nbsp;&nbsp;&nbsp;10%&nbsp;&nbsp; /usr<br/>/dev/dsk/c0t0d0s5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;722 301102&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp; /opt<br/>/dev/dsk/c0t0d0s7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp; 24380&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp; /export/home<br/>6).显示cpu使用率最高的进程<br/># ps –eo pid,pcpu,args &#124; sort +1n<br/>该命令输出当前系统进程的pid, CPU占用率及命令描述，并以pcpu来排序<br/>7)．显示内存占用率最高的进程<br/># ps –eo pid,vsz,args &#124; sort +1n<br/>该命令输出当前系统进程的pid，内存占用率及命令描述，并以vsz来排序<br/>8)．查看及启动系统的32位或64位内核模式<br/>64位模式<br/># isalist –v<br/>sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7<br/>sparc<br/># isainfo –v<br/>64-bit sparcv9 applications<br/>32-bit sparc applications<br/># isainfo –b<br/>64<br/>启动64位内核模式<br/>ok. boot kernel/sparcv9/unix<br/>32位模式<br/># isalist –v<br/>sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc<br/># isainfo –v<br/>32-bit sparc applications<br/># isainfo –b<br/>32<br/>启动32位模式<br/>ok. boot kernel/unix<br/>9)．查看当前的OpenWindows版本<br/># showrev –w<br/>OpenWindows version:<br/>X11 Version 6.4.1 5 November 2001<br/>10)．查看当前CDE的版本<br/># /usr/ccs/bin/what /usr/dt/bin/dtmail<br/>/usr/dt/bin/dtmail:<br/>CDE Version 1.4.6_06<br/>CDEVersion1.4.6_06<br/>11)．测定当前的显示器刷新频率<br/>/usr/sbin/ffbconfig –rev &#92;?<br/>Valid values for -res option are:<br/>1024x768x60 [1]<br/>1024x768x70 [1]<br/>1024x768x75 [1] [2]<br/>1024x768x77<br/>1024x800x84<br/>1152x900x66<br/>1152x900x76<br/>1280x800x76 [1] [2]<br/>1280x1024x60 [1] [2]<br/>1280x1024x67<br/>1280x1024x76<br/>1280x1024x85 [1] [2]<br/>960x680x112s<br/>960x680x108s<br/>640x480x60 [1] [2]<br/>640x480x60i [1]<br/>768x575x50i [1]<br/>1440x900x76 [1] [2]<br/>1600x1000x66 [1] [2]<br/>1600x1000x76 [1] [2]<br/>1600x1280x76 [1] [2]<br/>1920x1080x72 [1] [2]<br/>1920x1080x76 [1] [2]<br/>1920x1200x70 [1] [2]<br/>1920x1200x75 [1] [2]<br/>svga [1]<br/>1152<br/>1280<br/>stereo<br/>vga [1] [2]<br/>ntsc [1]<br/>pal [1]<br/>none<br/>Notes:<br/>[1] monitor does not support this resolution.<br/>[2] this version of FFB (FFB1) does not support this resolution<br/>12)．查看系统配置<br/># /usr/platform/sun4u/sbin/prtdiag –v<br/>System Configuration: Sun Microsystems sun4u Sun Enterprise 450 (2 X<br/>UltraSPAR<br/>C-II 432MHz)<br/>System clock frequency: 86 MHz<br/>Memory size: 1024 Megabytes<br/>========================= CPUs =========================<br/>Run&nbsp;&nbsp; Ecache&nbsp;&nbsp; CPU&nbsp;&nbsp;&nbsp;&nbsp;CPU<br/>Brd CPU&nbsp;&nbsp; Module&nbsp;&nbsp; MHz&nbsp;&nbsp;&nbsp;&nbsp; MB&nbsp;&nbsp;&nbsp;&nbsp;Impl.&nbsp;&nbsp; Mask<br/>--More--<br/>--- --- ------- ----- ------ ------ ----<br/>SYS&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432&nbsp;&nbsp;&nbsp;&nbsp; 4.0&nbsp;&nbsp; US-II&nbsp;&nbsp;&nbsp;&nbsp;10.0<br/>SYS&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432&nbsp;&nbsp;&nbsp;&nbsp; 4.0&nbsp;&nbsp; US-II&nbsp;&nbsp;&nbsp;&nbsp;10.0<br/>========================= Memory =========================<br/>Interlv. Socket&nbsp;&nbsp; Size<br/>Bank&nbsp;&nbsp;&nbsp;&nbsp;Group&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;(MB) Status<br/>----&nbsp;&nbsp;&nbsp;&nbsp;-----&nbsp;&nbsp;&nbsp;&nbsp;------&nbsp;&nbsp; ---- ------<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1901&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1902&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1903&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1904&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1701&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1702&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>========================= IO Cards =========================<br/>No failures found in System<br/>===========================<br/>========================= Environmental Status =========================<br/>System Temperatures (Celsius):<br/>------------------------------<br/>AMBIENT&nbsp;&nbsp;&nbsp;&nbsp;20<br/>CPU 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40<br/>CPU 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40<br/>=================================<br/>Front Status Panel:<br/>-------------------<br/>Keyswitch position is in On mode.<br/>System LED Status:&nbsp;&nbsp;&nbsp;&nbsp;POWER&nbsp;&nbsp;&nbsp;&nbsp; GENERAL ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACTIVITY<br/>[ ON]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [OFF]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ ON]<br/>DISK ERROR THERMAL ERROR POWER SUPPLY ERROR<br/>[OFF]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [OFF]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [OFF]<br/>Disk LED Status:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK = GREEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR = YELLOW<br/>DISK 2:&nbsp;&nbsp;&nbsp;&nbsp;[OK]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DISK 3:&nbsp;&nbsp;&nbsp;&nbsp;[OK]<br/>DISK 0:&nbsp;&nbsp;&nbsp;&nbsp;[OK]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DISK 1: [EMPTY]<br/>=================================<br/>Fans:<br/>-----<br/>Fan Bank&nbsp;&nbsp; Speed&nbsp;&nbsp;&nbsp;&nbsp;Status<br/>--------&nbsp;&nbsp; -----&nbsp;&nbsp;&nbsp;&nbsp;------<br/>CPU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK<br/>PWR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK<br/>Power Supplies:<br/>---------------<br/>Supply&nbsp;&nbsp;&nbsp;&nbsp; Rating&nbsp;&nbsp;&nbsp;&nbsp;Temp&nbsp;&nbsp;&nbsp;&nbsp;Status<br/>------&nbsp;&nbsp;&nbsp;&nbsp; ------&nbsp;&nbsp;&nbsp;&nbsp;----&nbsp;&nbsp;&nbsp;&nbsp;------<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 550 W&nbsp;&nbsp;&nbsp;&nbsp; 33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK<br/>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 550 W&nbsp;&nbsp;&nbsp;&nbsp; 33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK<br/>========================= HW Revisions =========================<br/>ASIC Revisions:<br/>---------------<br/>STP2223BGA: Rev 4<br/>STP2223BGA: Rev 4<br/>STP2223BGA: Rev 4<br/>STP2003QFP: Rev 1<br/>STP2205BGA: Rev 1<br/>System PROM revisions:<br/>----------------------<br/>OBP 3.20.0 2000/10/24 10:47&nbsp;&nbsp; POST 6.1.0 2000/10/24 10:49<br/># sysdef<br/>*<br/>* Hostid<br/>*<br/>80fee99b<br/>*<br/>* sun4u Configuration<br/>*<br/>*<br/>* Devices<br/>*<br/>packages (driver not attached)<br/>terminal-emulator (driver not attached)<br/>deblocker (driver not attached)<br/>obp-tftp (driver not attached)<br/>disk-label (driver not attached)<br/>SUNW,builtin-drivers (driver not attached)<br/>sun-keyboard (driver not attached)<br/>ufs-file-system (driver not attached)<br/>chosen (driver not attached)<br/>openprom (driver not attached)<br/>client-services (driver not attached)<br/>options, instance #0<br/>aliases (driver not attached)<br/>memory (driver not attached)<br/>virtual-memory (driver not attached)<br/>associations (driver not attached)<br/>slot2disk (driver not attached)<br/>slot2led (driver not attached)<br/>slot2dev (driver not attached)<br/>pci, instance #0<br/>ebus, instance #0<br/>auxio (driver not attached)<br/>……<br/># prtconf –D<br/>System Configuration: Sun Microsystems sun4u<br/>Memory size: 1024 Megabytes<br/>System Peripherals (Software Nodes):<br/>SUNW,Ultra-4<br/>packages<br/>terminal-emulator<br/>deblocker<br/>obp-tftp<br/>disk-label<br/>SUNW,builtin-drivers<br/>sun-keyboard<br/>ufs-file-system<br/>chosen<br/>openprom<br/>client-services<br/>options, instance #0 (driver name: options)<br/>aliases<br/>memory<br/>virtual-memory<br/>associations<br/>slot2disk<br/>slot2led<br/>slot2dev<br/>pci, instance #0 (driver name: pcipsy)<br/>ebus, instance #0 (driver name: ebus)<br/>auxio<br/>power (driver name: power)<br/>SUNW,pll<br/>sc<br/>se, instance #0 (driver name: se)<br/>su, instance #0 (driver name: su)<br/>…..<br/>13)．查看当前系统中已经应用的补丁<br/># showrev –p<br/>Patch: 109618-01 Obsoletes: Requires: Incompatibles: Packages: SUNWeuxwe,<br/>SUN<br/>Weuezt, SUNWeudlg, SUNWeudda<br/>Patch: 109889-01 Obsoletes: 109353-04 Requires: Incompatibles: Packages:<br/>SUNWk<br/>vmx, SUNWkvm, SUNWmdb, SUNWhea, SUNWpstl, SUNWpstlx<br/>Patch: 110369-05 Obsoletes: 110709-02 Requires: Incompatibles: Packages:<br/>SUNWk<br/>vmx, SUNWcarx, SUNWcsr<br/>Patch: 110370-03 Obsoletes: 111643-01 Requires: Incompatibles: Packages:<br/>SUNWk<br/>vmx, SUNWkvm, SUNWmdb, SUNWhea, SUNWpstl, SUNWpstlx<br/>Patch: 110373-04 Obsoletes: 111508-01 Requires: Incompatibles: Packages:<br/>SUNWk<br/>vmx, SUNWcarx, SUNWcsr<br/>Patch: 110374-08 Obsoletes: 110136-02, 110516-02 Requires: Incompatibles:<br/>Pack<br/>ages: SUNWkvmx, SUNWcarx, SUNWcar, SUNWcsr, SUNWmdbx<br/>…..<br/>14)．显示当前的运行级别<br/># who –rH<br/>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDLE&nbsp;&nbsp;&nbsp;&nbsp;PID COMMENTS<br/>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run-level 3 Nov 24 10:18&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 S<br/>15)．查找一个文件所从属的包<br/># pkgchk –lp /usr/lib/sendmail<br/>Pathname: /usr/lib/sendmail<br/>Type: regular file<br/>Expected mode: 4555<br/>Expected owner: root<br/>Expected group: bin<br/>Expected file size (bytes): 761368<br/>Expected sum(1) of contents: 41707<br/>Expected last modification: Sep 24 03:13:13 2001<br/>Referenced by the following packages:<br/>SUNWsndmu<br/>Current status: installed<br/>16)．查看当前的bind版本信息<br/># nslookup –class=chaos –q=txt version.bind<br/>Server: ns.lnpta.net.cn<br/>Address: 202.96.64.68
]]>
</description>
</item><item>
<link>https://atim.cn/post/1041/</link>
<title><![CDATA[开机自动启用vmware系统]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Fri, 10 Feb 2012 09:18:25 +0000</pubDate> 
<guid>https://atim.cn/post/1041/</guid> 
<description>
<![CDATA[ 
	不可避免，企业的服务器不会象我们预想的那样一年365天不间断的运行。可能公司突然停电，或者服务器突然无故重启，这些情况都会造成电脑内的虚拟机开机不再运行。而如果此时系统管理员正好离开，那这个后果也就不言而喻了。<br/>所以，实现虚拟机开机自动启动，可以说是实现公司服务器正常运行的一个不可或缺的环节。<br/>实现其开机自动启动步骤其实很简单。<br/>首先写好一批处程序如下:<br/><div class="code"><br/>&quot;D:&#92;VMware Workstation&#92;vmware.exe&quot; -x &quot;D:&#92;vmare&#92;windows2003&#92;windows server 2003.vmx&quot;<br/></div><br/>然后<br/>在开始菜单->程序->启动中增加上页的批处的快捷方式<br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/1037/</link>
<title><![CDATA[iptables参数详解]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Wed, 28 Dec 2011 01:05:23 +0000</pubDate> 
<guid>https://atim.cn/post/1037/</guid> 
<description>
<![CDATA[ 
	Iptalbes 是用来设置、维护和检查Linux内核的IP包过滤规则的。<br/>可以定义不同的表，每个表都包含几个内部的链，也能包含用户定义的链。每个链都是一个规则列表，对对应的包进行匹配：每条规则指定应当如何处理与之相匹配的包。这被称作'target'（目标），也可以跳向同一个表内的用户定义的链。<br/><br/>TARGETS<br/>防火墙的规则指定所检查包的特征，和目标。如果包不匹配，将送往该链中下一条规则检查；如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过], DROP[删除], QUEUE[排队], 或者 RETURN[返回]。<br/>ACCEPT 表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到用户空间。RETURN表示停止这条链的匹配，到前一个链的规则重新开始。如果到达了一个内建的链(的末端)，或者遇到内建链的规则是RETURN，包的命运将由链准则指定的目标决定。<br/><br/>TABLES<br/>当前有三个表（哪个表是当前表取决于内核配置选项和当前模块)。<br/>-t table<br/>这个选项指定命令要操作的匹配包的表。如果内核被配置为自动加载模块，这时若模块没有加载，(系统)将尝试(为该表)加载适合的模块。这些表如下： filter,这是默认的表，包含了内建的链INPUT（处理进入的包）、FORWORD（处理通过的包）和OUTPUT（处理本地生成的包）。nat, 这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成：PREROUTING (修改到来的包)、OUTPUT（修改路由之前本地的包）、POSTROUTING（修改准备出去的包）。mangle 这个表用来对指定的包进行修改。它有两个内建规则：PREROUTING（修改路由之前进入的包）和OUTPUT（修改路由之前本地的包）。<br/>OPTIONS<br/>这些可被iptables识别的选项可以区分不同的种类。<br/><br/>COMMANDS<br/>这些选项指定执行明确的动作：若指令行下没有其他规定,该行只能指定一个选项.对于长格式的命令和选项名,所用字母长度只要保证iptables能从其他选项中区分出该指令就行了。<br/>-A -append<br/>在所选择的链末添加一条或更多规则。当源（地址）或者/与 目的（地址）转换为多个地址时，这条规则会加到所有可能的地址(组合)后面。<br/><br/>-D -delete<br/>从所选链中删除一条或更多规则。这条命令可以有两种方法：可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。<br/><br/>-R -replace<br/>从选中的链中取代一条规则。如果源（地址）或者/与 目的（地址）被转换为多地址，该命令会失败。规则序号从1开始。<br/><br/>-I -insert<br/>根据给出的规则序号向所选链中插入一条或更多规则。所以，如果规则序号为1，规则会被插入链的头部。这也是不指定规则序号时的默认方式。<br/><br/>-L -list<br/>显示所选链的所有规则。如果没有选择链，所有链将被显示。也可以和z选项一起使用，这时链会被自动列出和归零。精确输出受其它所给参数影响。<br/><br/>-F -flush<br/>清空所选链。这等于把所有规则一个个的删除。<br/><br/>--Z -zero<br/>把所有链的包及字节的计数器清空。它可以和 -L配合使用，在清空前察看计数器，请参见前文。<br/><br/>-N -new-chain<br/>根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。<br/><br/>-X -delete-chain<br/>删除指定的用户自定义链。这个链必须没有被引用，如果被引用，在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数，这条命令将试着删除每个非内建的链。<br/><br/><br/>-P -policy<br/>设置链的目标规则。<br/><br/>-E -rename-chain<br/>根据用户给出的名字对指定链进行重命名，这仅仅是修饰，对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则，而且内建链和用户自定义链都不能是规则的目标。<br/><br/>-h Help.<br/>帮助。给出当前命令语法非常简短的说明。<br/><br/>PARAMETERS<br/>参数<br/>以下参数构成规则详述，如用于add、delete、replace、append 和 check命令。<br/><br/>-p -protocal [!]protocol<br/>规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部，也可以是数值，代表这些协议中的某一个。当然也可以使用在 /etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol all会匹配所有协议，而且这是缺省时的选项。在和check命令结合时，all可以不被使用。<br/>-s -source [!] address[/mask]<br/>指定源地址，可以是主机名、网络名和清楚的IP地址。mask说明可以是网络掩码或清楚的数字，在网络掩码的左边指定网络掩码左边"1"的个数，因此， mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志 --src 是这个选项的简写。<br/><br/>-d --destination [!] address[/mask]<br/>指定目标地址，要获取详细说明请参见 -s标志的说明。标志 --dst 是这个选项的简写。<br/><br/>-j --jump target<br/>-j 目标跳转<br/>指定规则的目标；也就是说，如果包匹配应当做什么。目标可以是用户自定义链（不是这条规则所在的），某个会立即决定包的命运的专用内建目标，或者一个扩展（参见下面的EXTENSIONS）。如果规则的这个选项被忽略，那么匹配的过程不会对包产生影响，不过规则的计数器会增加。<br/><br/>-i -in-interface [!] [name]<br/>i -进入的（网络）接口 [!][名称]<br/>这是包经由该接口接收的可选的入口名称，包通过该接口接收（在链INPUT、FORWORD和PREROUTING中进入的包）。当在接口名前使用"!" 说明后，指的是相反的名称。如果接口名后面加上"+"，则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略，会假设为"+"，那么将匹配任意接口。<br/><br/>-o --out-interface [!][name]<br/>-o --输出接口[名称]<br/>这是包经由该接口送出的可选的出口名称，包通过该口输出（在链FORWARD、OUTPUT和POSTROUTING中送出的包）。当在接口名前使用"! "说明后，指的是相反的名称。如果接口名后面加上"+"，则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略，会假设为"+"，那么将匹配所有任意接口。<br/><br/>[!] -f, --fragment<br/>[!] -f --分片<br/>这意味着在分片的包中，规则只询问第二及以后的片。自那以后由于无法判断这种把包的源端口或目标端口（或者是ICMP类型的），这类包将不能匹配任何指定对他们进行匹配的规则。如果"!"说明用在了"-f"标志之前，表示相反的意思。<br/><br/>OTHER OPTIONS<br/>其他选项<br/>还可以指定下列附加选项：<br/><br/>-v --verbose<br/>-v --详细<br/>详细输出。这个选项让list命令显示接口地址、规则选项（如果有）和TOS（Type of Service）掩码。包和字节计数器也将被显示，分别用K、M、G(前缀)表示1000、1,000,000和1,000,000,000倍（不过请参看-x标志改变它），对于添加,插入,删除和替换命令，这会使一个或多个规则的相关详细信息被打印。<br/><br/>-n --numeric<br/>-n --数字<br/>数字输出。IP地址和端口会以数字的形式打印。默认情况下，程序试显示主机名、网络名或者服务（只要可用）。<br/><br/>-x -exact<br/>-x -精确<br/>扩展数字。显示包和字节计数器的精确值，代替用K,M,G表示的约数。这个选项仅能用于 -L 命令。<br/><br/>--line-numbers<br/>当列表显示规则时，在每个规则的前面加上行号，与该规则在链中的位置相对应。<br/><br/>MATCH EXTENSIONS<br/>对应的扩展<br/>iptables能够使用一些与模块匹配的扩展包。以下就是含于基本包内的扩展包，而且他们大多数都可以通过在前面加上!来表示相反的意思。<br/><br/>tcp<br/>当 --protocol tcp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载。它提供以下选项：<br/><br/>--source-port [!] [port[ort]<br/>源端口或端口范围指定。这可以是服务名或端口号。使用格式端口：端口也可以指定包含的（端口）范围。如果首端口号被忽略，默认是"0"，如果末端口号被忽略，默认是"65535"，如果第二个端口号大于第一个，那么它们会被交换。这个选项可以使用 --sport的别名。<br/><br/>--destionation-port [!] [port:[port]<br/>目标端口或端口范围指定。这个选项可以使用 --dport别名来代替。<br/><br/>--tcp-flags [!] mask comp<br/>匹配指定的TCP标记。第一个参数是我们要检查的标记，一个用逗号分开的列表，第二个参数是用逗号分开的标记表,是必须被设置的。标记如下：SYN ACK FIN RST URG PSH ALL NONE。因此这条命令：iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些SYN标记被设置而ACK、FIN和RST标记没有设置的包。<br/><br/>[!] --syn<br/>只匹配那些设置了SYN位而清除了ACK和FIN位的TCP包。这些包用于TCP连接初始化时发出请求；例如，大量的这种包进入一个接口发生堵塞时会阻止进入的TCP连接，而出去的TCP连接不会受到影响。这等于 --tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"标记，表示相反的意思。<br/><br/>--tcp-option [!] number<br/>匹配设置了TCP选项的。<br/><br/>udp<br/>当protocol udp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载,它提供以下选项：<br/><br/>--source-port [!] [port:[port]<br/>源端口或端口范围指定。详见 TCP扩展的--source-port选项说明。<br/><br/>--destination-port [!] [port:[port]<br/>目标端口或端口范围指定。详见 TCP扩展的--destination-port选项说明。<br/><br/>icmp<br/>当protocol icmp被指定,且其他匹配的扩展未被指定时,该扩展被装载。它提供以下选项：<br/>--icmp-type [!] typename<br/>这个选项允许指定ICMP类型，可以是一个数值型的ICMP类型，或者是某个由命令iptables -p icmp -h所显示的ICMP类型名。<br/><br/>mac<br/>--mac-source [!] address<br/>匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意它只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。<br/><br/>limit<br/>这个模块匹配标志用一个标记桶过滤器一一定速度进行匹配,它和LOG目标结合使用来给出有限的登陆数.当达到这个极限值时,使用这个扩展包的规则将进行匹配.(除非使用了"!"标记)<br/>接上--limit rate<br/>最大平均匹配速率：可赋的值有'/second', '/minute', '/hour', or '/day'这样的单位，默认是3/hour。<br/><br/>--limit-burst number<br/>待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5<br/><br/>multiport<br/>这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp 或者 -p udp 连着使用。<br/><br/>--source-port [port[, port]<br/>如果源端口是其中一个给定端口则匹配<br/><br/>--destination-port [port[, port]<br/>如果目标端口是其中一个给定端口则匹配<br/><br/>--port [port[, port]<br/>若源端口和目的端口相等并与某个给定端口相等,则匹配。<br/>mark<br/>这个模块和与netfilter过滤器标记字段匹配（就可以在下面设置为使用MARK标记）。<br/><br/>--mark value [/mask]<br/>匹配那些无符号标记值的包（如果指定mask，在比较之前会给掩码加上逻辑的标记）。<br/><br/>owner<br/>此模块试为本地生成包匹配包创建者的不同特征。只能用于OUTPUT链，而且即使这样一些包（如ICMP ping应答）还可能没有所有者，因此永远不会匹配。<br/><br/>--uid-owner userid<br/>如果给出有效的user id，那么匹配它的进程产生的包。<br/><br/>--gid-owner groupid<br/>如果给出有效的group id，那么匹配它的进程产生的包。<br/><br/>--sid-owner seessionid<br/>根据给出的会话组匹配该进程产生的包。<br/><br/>state<br/>此模块，当与连接跟踪结合使用时，允许访问包的连接跟踪状态。<br/><br/>--state state<br/>这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接，ESTABLISHED表示是双向传送的连接，NEW 表示包为新的连接，否则是非双向传送的，而RELATED表示包由新连接开始，但是和一个已存在的连接在一起，如FTP数据传送，或者一个ICMP错误。<br/><br/>unclean<br/>此模块没有可选项，不过它试着匹配那些奇怪的、不常见的包。处在实验中。<br/><br/>tos<br/>此模块匹配IP包首部的8位tos（服务类型）字段（也就是说，包含在优先位中）。<br/><br/>--tos tos<br/>这个参数可以是一个标准名称，（用iptables -m tos -h 察看该列表），或者数值。<br/><br/>TARGET EXTENSIONS<br/>iptables可以使用扩展目标模块：以下都包含在标准版中。<br/><br/>LOG<br/>为匹配的包开启内核记录。当在规则中设置了这一选项后，linux内核会通过printk()打印一些关于全部匹配包的信息（诸如IP包头字段等）。<br/>--log-level level<br/>记录级别（数字或参看 syslog.conf(5)）。<br/>--log-prefix prefix<br/>在纪录信息前加上特定的前缀：最多14个字母长，用来和记录中其他信息区别。<br/><br/>--log-tcp-sequence<br/>记录TCP序列号。如果记录能被用户读取那么这将存在安全隐患。<br/><br/>--log-tcp-options<br/>记录来自TCP包头部的选项。<br/>--log-ip-options<br/>记录来自IP包头部的选项。<br/><br/>MARK<br/>用来设置包的netfilter标记值。只适用于mangle表。<br/><br/>--set-mark mark<br/><br/>REJECT<br/>作为对匹配的包的响应，返回一个错误的包：其他情况下和DROP相同。<br/><br/>此目标只适用于INPUT、FORWARD和OUTPUT链，和调用这些链的用户自定义链。这几个选项控制返回的错误包的特性：<br/><br/>--reject-with type<br/>Type可以是icmp-net-unreachable、icmp-host- unreachable、icmp-port-nreachable、icmp-proto-unreachable、 icmp-net-prohibited 或者 icmp-host-prohibited，该类型会返回相应的ICMP错误信息（默认是port-unreachable）。选项 echo-reply也是允许的；它只能用于指定ICMP ping包的规则中，生成ping的回应。最后，选项tcp-reset可以用于在INPUT链中,或自INPUT链调用的规则，只匹配TCP协议：将回应一个TCP RST包。<br/>TOS<br/>用来设置IP包的首部八位tos。只能用于mangle表。<br/><br/>--set-tos tos<br/>你可以使用一个数值型的TOS 值，或者用iptables -j TOS -h 来查看有效TOS名列表。<br/>MIRROR<br/>这是一个试验示范目标，可用于转换IP首部字段中的源地址和目标地址，再传送该包,并只适用于INPUT、FORWARD和OUTPUT链，以及只调用它们的用户自定义链。<br/><br/>SNAT<br/>这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址（此连接以后所有的包都会被影响），停止对规则的检查，它包含选项：<br/><br/>--to-source [-][ort-port]<br/>可以指定一个单一的新的IP地址，一个IP地址范围，也可以附加一个端口范围（只能在指定-p tcp 或者-p udp的规则里）。如果未指定端口范围，源端口中512以下的（端口）会被安置为其他的512以下的端口；512到1024之间的端口会被安置为1024 以下的，其他端口会被安置为1024或以上。如果可能，端口不会被修改。<br/><br/>--to-destiontion [-][ort-port]<br/>可以指定一个单一的新的IP地址，一个IP地址范围，也可以附加一个端口范围（只能在指定-p tcp 或者-p udp的规则里）。如果未指定端口范围，目标端口不会被修改。<br/><br/>MASQUERADE<br/>只用于nat表的POSTROUTING链。只能用于动态获取IP（拨号）连接：如果你拥有静态IP地址，你要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像，当接口关闭连接会终止。这是因为当下一次拨号时未必是相同的接口地址（以后所有建立的连接都将关闭）。它有一个选项：<br/><br/>--to-ports [-port>]<br/>指定使用的源端口范围，覆盖默认的SNAT源地址选择（见上面）。这个选项只适用于指定了-p tcp或者-p udp的规则。<br/><br/>REDIRECT<br/>只适用于nat表的PREROUTING和OUTPUT链，和只调用它们的用户自定义链。它修改包的目标IP地址来发送包到机器自身（本地生成的包被安置为地址127.0.0.1）。它包含一个选项：<br/><br/>--to-ports []<br/>指定使用的目的端口或端口范围：不指定的话，目标端口不会被修改。只能用于指定了-p tcp 或 -p udp的规则。<br/><br/>DIAGNOSTICS<br/>诊断<br/>不同的错误信息会打印成标准错误：退出代码0表示正确。类似于不对的或者滥用的命令行参数错误会返回错误代码2，其他错误返回代码为1。<br/><br/>BUGS<br/>臭虫<br/>Check is not implemented (yet).<br/>检查还未完成。<br/><br/>COMPATIBILITY WITH IPCHAINS<br/>与ipchains的兼容性<br/>iptables和Rusty Russell的ipchains非常相似。主要区别是INPUT 链只用于进入本地主机的包,而OUTPUT只用于自本地主机生成的包。因此每个包只经过三个链的一个；以前转发的包会经过所有三个链。其他主要区别是 -i 引用进入接口；-o引用输出接口，两者都适用于进入FORWARD链的包。当和可选扩展模块一起使用默认过滤器表时，iptables是一个纯粹的包过滤器。这能大大减少以前对IP伪装和包过滤结合使用的混淆，所以以下选项作了不同的处理：<br/>-j MASQ<br/>-M -S<br/>-M -L<br/>在iptables中有几个不同的链。<br/>iptables -A INPUT -p tcp -s x.x.x.x/x --dport 22 -j ACCEPT //　允许源地址为x.x.x.x/x的主机通过22(ssh)端口.<br/><br/><br/>iptables -A INPUT -p tcp --dport 80 -j ACCEPT //　允许80(http)端口的数据包进入<br/>iptables -A INPUT -p tcp --dport 110 -j ACCEPT //　允许110(pop3)端口的数据包进入如果不加这规则，就只能通过web页面来收信(无法用OE或Foxmail等来收)<br/>iptables -A INPUT -p tcp --dport 25 -j ACCEPT //　允许25(smtp)端口的数据包进入,如果不加这规则，就只能通过web页面来发信(无法用OE或Foxmail等来发)<br/>iptables -A INPUT -p tcp --dport 21 -j ACCEPT　 //　允许21(ftp)端口的数据包进入(传数据)　　　　　<br/>iptables -A INPUT -p tcp --dport 20 -j ACCEPT　 //　允许20(ftp)端口的数据包进入(执行ftp命令,如dir等)<br/>iptables -A INPUT -p tcp --dport 53 -j ACCEPT　 //　允许53(dns)端口的数据包进入(tcp)<br/>iptables -A INPUT -p udp --dport 53 -j ACCEPT　 //　允许53(dns)端口的数据包进入(udp)<br/>iptables -A INPUT -p icmp -j ACCEPT //　允许ICMP包通过<br/>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT //利用 iptables 对连接状态的支持<br/>iptables -P INPUT DROP //把INPUT链的默认规则设置为DROP 
]]>
</description>
</item><item>
<link>https://atim.cn/post/1035/</link>
<title><![CDATA[Linux流量监控工具 - iftop (最全面的iftop教程)]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Fri, 23 Dec 2011 02:55:32 +0000</pubDate> 
<guid>https://atim.cn/post/1035/</guid> 
<description>
<![CDATA[ 
	在类Unix系统中可以使用top查看系统资源、进程、内存占用等信息。查看网络状态可以使用netstat、nmap等工具。若要查看实时的网络流量，监控TCP/IP连接等，则可以使用iftop。<br/>一、iftop是什么？<br/><br/>iftop是类似于top的实时流量监控工具。<br/><br/>官方网站：http://www.ex-parrot.com/~pdw/iftop/<br/>二、iftop有什么用？<br/><br/>iftop可以用来监控网卡的实时流量（可以指定网段）、反向解析IP、显示端口信息等，详细的将会在后面的使用参数中说明。<br/>三、安装iftop<br/>安装方法1、编译安装<br/><br/>如果采用编译安装可以到iftop官网下载最新的源码包。<br/><br/>安装前需要已经安装好基本的编译所需的环境，比如make、gcc、autoconf等。安装iftop还需要安装libpcap和libcurses。<br/><br/>CentOS上安装所需依赖包：<br/><br/>yum install flex byacc&nbsp;&nbsp;libpcap ncurses ncurses-devel libpcap-devel<br/><br/>Debian上安装所需依赖包：<br/><br/>apt-get install flex byacc&nbsp;&nbsp;libpcap0.8 libncurses5<br/><br/>下载iftop<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;tar zxvf iftop-0.17.tar.gz<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cd iftop-0.17<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;./configure<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;make && make install<br/><br/>安装方法2：(懒人办法，最简单)<br/><br/>直接省略上面的步骤<br/><br/>CentOS系统：<br/><br/>yum install flex byacc&nbsp;&nbsp;libpcap ncurses ncurses-devel<br/><br/>wget ftp://fr2.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/iftop-0.17-1.el5.rf.i386.rpm<br/><br/>rpm -ivh iftop-0.17-1.el5.rf.i386.rpm<br/><br/>Debian系统 运行：apt-get install iftop<br/>四、运行iftop<br/><br/>直接运行： iftop<br/><br/>效果如下图：<br/><br/>五、相关参数及说明<br/>1、iftop界面相关说明<br/><br/>界面上面显示的是类似刻度尺的刻度范围，为显示流量图形的长条作标尺用的。<br/><br/>中间的<= =>这两个左右箭头，表示的是流量的方向。<br/><br/>TX：发送流量<br/>RX：接收流量<br/>TOTAL：总流量<br/>Cumm：运行iftop到目前时间的总流量<br/>peak：流量峰值<br/>rates：分别表示过去 2s 10s 40s 的平均流量<br/>2、iftop相关参数<br/>常用的参数<br/><br/>-i设定监测的网卡，如：# iftop -i eth1<br/><br/>-B 以bytes为单位显示流量(默认是bits)，如：# iftop -B<br/><br/>-n使host信息默认直接都显示IP，如：# iftop -n<br/><br/>-N使端口信息默认直接都显示端口号，如: # iftop -N<br/><br/>-F显示特定网段的进出流量，如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0<br/><br/>-h（display this message），帮助，显示参数信息<br/><br/>-p使用这个参数后，中间的列表显示的本地主机信息，出现了本机以外的IP信息;<br/><br/>-b使流量图形条默认就显示;<br/><br/>-f这个暂时还不太会用，过滤计算包用的;<br/><br/>-P使host信息及端口信息默认就都显示;<br/><br/>-m设置界面最上边的刻度的最大值，刻度分五个大段显示，例：# iftop -m 100M<br/>进入iftop画面后的一些操作命令(注意大小写)<br/><br/>按h切换是否显示帮助;<br/><br/>按n切换显示本机的IP或主机名;<br/><br/>按s切换是否显示本机的host信息;<br/><br/>按d切换是否显示远端目标主机的host信息;<br/><br/>按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;<br/><br/>按N切换显示端口号或端口服务名称;<br/><br/>按S切换是否显示本机的端口信息;<br/><br/>按D切换是否显示远端目标主机的端口信息;<br/><br/>按p切换是否显示端口信息;<br/><br/>按P切换暂停/继续显示;<br/><br/>按b切换是否显示平均流量图形条;<br/><br/>按B切换计算2秒或10秒或40秒内的平均流量;<br/><br/>按T切换是否显示每个连接的总流量;<br/><br/>按l打开屏幕过滤功能，输入要过滤的字符，比如ip,按回车后，屏幕就只显示这个IP相关的流量信息;<br/><br/>按L切换显示画面上边的刻度;刻度不同，流量图形条会有变化;<br/><br/>按j或按k可以向上或向下滚动屏幕显示的连接记录;<br/><br/>按1或2或3可以根据右侧显示的三列流量数据进行排序;<br/><br/>按<根据左边的本机名或IP排序;<br/><br/>按>根据远端目标主机的主机名或IP排序;<br/><br/>按o切换是否固定只显示当前的连接;<br/><br/>按f可以编辑过滤代码，这是翻译过来的说法，我还没用过这个！<br/><br/>按!可以使用shell命令，这个没用过！没搞明白啥命令在这好用呢！<br/><br/>按q退出监控。<br/>六、常见问题<br/><br/>1、make: yacc: Command not found<br/>make: *** [grammar.c] Error 127<br/><br/>解决方法：apt-get install byacc&nbsp;&nbsp; /&nbsp;&nbsp; yum install byacc<br/><br/>2、configure: error: Curses! Foiled again!<br/>(Can't find a curses library supporting mvchgat.)<br/>Consider installing ncurses.<br/><br/>解决方法：apt-get install libncurses5-dev&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;yum&nbsp;&nbsp;install ncurses-devel<br/>Tags - <a href="https://atim.cn/tags/iftop/" rel="tag">iftop</a> , <a href="https://atim.cn/tags/%25E7%25AE%25A1%25E7%2590%2586/" rel="tag">管理</a> , <a href="https://atim.cn/tags/%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8%25E7%25AE%25A1%25E7%2590%2586/" rel="tag">服务器管理</a>
]]>
</description>
</item><item>
<link>https://atim.cn/iptables-config/</link>
<title><![CDATA[iptables 实例用法及配置手册]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Thu, 22 Dec 2011 06:51:33 +0000</pubDate> 
<guid>https://atim.cn/iptables-config/</guid> 
<description>
<![CDATA[ 
	1、查看防火墙状态<br/><br/>[root@localhost ~]# service iptables status<回车> <br/><a href="https://atim.cn/attachment.php?fid=33" target="_blank"><img src="https://atim.cn/attachment.php?fid=33" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>2、编辑/etc/sysconfig/iptables文件。我们实例中要打开8080端口和9990端口<br/>终端上输入 vim /etc/sysconfig/iptables <br/>可能 /etc/sysconfig/iptables 会不存在.自己创建也可以<br/><a href="https://atim.cn/attachment.php?fid=34" target="_blank"><img src="https://atim.cn/attachment.php?fid=34" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>3、依葫芦画瓢，我们添加8080端口和9990端口<br/><a href="https://atim.cn/attachment.php?fid=35" target="_blank"><img src="https://atim.cn/attachment.php?fid=35" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>4、保存/etc/sysconfig/iptables文件，并在终端执行<br/>[root@localhost ~]# service iptables restart <回车><br/><a href="https://atim.cn/attachment.php?fid=36" target="_blank"><img src="https://atim.cn/attachment.php?fid=36" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>5、从新查看防火墙状态<br/>[root@localhost ~]# service iptables status<回车><br/><a href="https://atim.cn/attachment.php?fid=37" target="_blank"><img src="https://atim.cn/attachment.php?fid=37" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>6、这时候，服务器的8080和9990端口就可以对外提供服务了。<br/><br/>7、其他端口的开放模式就是类似如此开放模式。<br/><br/>附上iptables的手册<br/><a href="attachment.php?fid=32">点击这里下载文件</a><br/>上面例子的代码<br/><div class="code"><br/>*filter<br/>:INPUT ACCEPT &#91;0:0&#93;<br/>:FORWARD ACCEPT &#91;0:0&#93;<br/>:OUTPUT ACCEPT &#91;0:0&#93;<br/>-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br/>-A INPUT -p icmp -j ACCEPT<br/>-A INPUT -i lo -j ACCEPT<br/>-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT<br/>-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT<br/>-A INPUT -j REJECT --reject-with icmp-host-prohibited<br/>-A FORWARD -j REJECT --reject-with icmp-host-prohibited<br/>-P INPUT DROP <br/>COMMIT<br/></div><br/>Tags - <a href="https://atim.cn/tags/iptables/" rel="tag">iptables</a> , <a href="https://atim.cn/tags/linux/" rel="tag">linux</a> , <a href="https://atim.cn/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a>
]]>
</description>
</item><item>
<link>https://atim.cn/post/458/</link>
<title><![CDATA[samba 安装方法 配置方法]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Thu, 13 Nov 2008 06:03:23 +0000</pubDate> 
<guid>https://atim.cn/post/458/</guid> 
<description>
<![CDATA[ 
	由于之前的服务器是原来的设计师配置的，现在需要重新再配置服务器。只好自己学着配置吧。<br/><br/>步骤1:安装samba<br/>#apt-get install samba<br/>#apt-get install smbfs<br/><br/>步骤2:添加linux用户<br/>#useradd user1　　　　　//添加用户名user1<br/>#passwd user1 //给用户名user1添加密码<br/>#mkdir /home/user1 //建立user1的home目录，如果不用这个用户名来登陆linux，此步骤不是必需<br/>#chown -R user1:user1 /home/user1　　　//给user1的home目录设置好权限<br/><br/>步骤3：给samba服务器添加用户<br/>说明：登陆samba的用户必须已经是linux中的用户<br/>#smbpasswd -a user1 //添加并给user1设置samba密码<br/><br/>步骤4：smb.conf设置<br/>#cd /etc/samb //进入设置目录<br/>#mv smb.conf　smb.conf.bak //做好备份，直接将系统默认配置文件改名<br/>#vim smb.conf //建立和配置smb.conf文件<br/><br/><br/>[global]<br/>workgrop=x1 //X1为你局域网中的工作组名<br/>server string=x2 //x2为你linux主机描述性文字，比如：samba server。<br/>security=user //samba的安全等级，user代表需要输入用户名和密码，改成share则不需要输入用户名和密码<br/><br/>[x3] //方框号中的x3这个名字可以随便取，只是在win的网上邻居中显示的共享文件夹名<br/>path=/home/x4 //x4为你要共享的文件夹名，在共享前还要建立这个文件夹，并设好权限以便访问，下面会说明。<br/>valid users=user1 //这个x4共享目录只允许user1这个用户进入<br/>public=no　　　　 //no表示除了user1这个用户，其它用户在进入samba服务器后看不见x4这个目录，如果为yes，虽然能看见x4这个目录，但除了user1这个用户能进入这个目录，其它人进不了。<br/>writable=yes　　 //允许user1在x4目录中进行读和写操作，反之no<br/><br/>//存盘退出<br/>#testparm //检查一下语法错误，比如拼错<br/><br/>步骤5：建立共享目录<br/>#mkdir /home/x4<br/>#chown -R user1:user1 /home/x4 //因为是root建立的目录，其它用户只有读的权限，所还得把权限改一下。当然也可以简单的用#chmod 777 /home/x4。还有个问题就是共享里目录的文件如果有些能访问有些不能访问，那肯定也是权限的问题,进入/home/x4,直接#chmod 777 *来解决。<br/><br/>步骤6：重启samba服务<br/>#/etc/init.d/samba restart<br/><br/>OK，设置到此结束。<br/>有不明白的后面跟贴问吧，我会仔细解答。<br/><br/>########################################################## <br/><br/>设置samba服务要注意以下两点（即两个两次）：<br/>1.添加两次用户：一次添加系统用户#useradd user1；再一次是添加samba用户#smbpasswd -a user1;<br/>2.设置两次权限：一次是在smb.conf中设置共享文件夹的权限：再一次是在系统中设置共享文件夹的权限#chmod 777 文件夹名。
]]>
</description>
</item><item>
<link>https://atim.cn/post/8/</link>
<title><![CDATA[Windows下通过xmanager远程桌面控制Linux]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Fri, 12 Jan 2007 07:17:49 +0000</pubDate> 
<guid>https://atim.cn/post/8/</guid> 
<description>
<![CDATA[ 
	<table cellspacing="0" cellpadding="0" width="570" border="0"><tbody><tr><td style="FONT-SIZE: 14px; TEXT-INDENT: 25px; LINE-HEIGHT: 20px" align="left" width="550"><p><font face="Verdana">  随着互联网的高速发展以及<a href="http://wiki.ccw.com.cn/Linux" target="_blank"><font color="#0000cc"><b>Linux</b></font></a>企业应用的成熟，Linux被广泛应用于服务器领域，如何实现Linux的远程管理成为网络管理员的首要任务。我们经常见到的几种最为常用的<a href="http://wiki.ccw.com.cn/index.php/Windows" target="_blank"><font color="#0000cc"><!-- server 正文页网画中画广告 &nbsp;--> <table style="MARGIN: 10px 7px 3px 4px" cellspacing="0" cellpadding="0" align="left" border="0"><tbody><tr><td><!--<SCRIPT LANGUAGE="JavaScript1.1" SRC="http://ad.ccw.com.cn/adshow.asp?positionID=30&js=1&innerJs=1"></SCRIPT>--></td></tr></tbody></table><b>windows</b></font></a>下远程管理Linux服务器的方法，基本上都是利用SecureCRT,F-Secure SSH 抑或是PUTTY等客户端工具通过ssh服务来实现Windows下管理Linux服务器的，这些客户端工具几乎不需要什么配置，使用简单，但是它们都无法启动窗口服务的程序或进程，也无法达到远程桌面控制。本文将介绍通过xmanager远程桌面控制Linux的方法和技巧。本文中所指的Linux系统，如无特别说明都以RedHat 9.0为例。</font></p><p><font face="Verdana">  有两种方法可以实现远程管理Linux桌面窗口，其中一个就是是我们所选择的X显示管理器（X display manager）或者说xdm，另一个流行的解决方案是vnc。我选择xdm而不是vnc出于两点原因。第一，vnc要有个服务端的守护进程，为每个共享的桌面运行。第二，我已经有X服务器的软件安装在所有的工作站上，不想再添加额外的客户端软件了。</font></p><p><font face="Verdana">我们先来了解一些X系统方面的知识，X是用在大多数<a href="http://wiki.ccw.com.cn/UNIX" target="_blank"><font color="#0000cc"><b>UNIX</b></font></a>系统中的图形支持系统。如果你在你的Linux机器上使用GNOME或者KDE的话，你就正在使用X系统。它由X联盟(www.X.org)定义并维护。大多数的Linux用户使用的都是由XFree86 项目 (www.xfree86.org)提供的X Window系统的实现。xdm 是一个显示管理器，提供了灵活的任务管理功能。然而xdm通常被认为是“GUI的登陆屏幕，可以自动启动我的X任务”，我们会看到实际上它要更为强大。</font></p><p><font face="Verdana">  xdm 使用X联盟的X显示管理控制协议，即XDMCP，来和X服务器通信。它允许X服务器从运行xdm服务的服务器上获得会话服务。</font></p><p><font face="Verdana">  当使用xdm管理这些X任务的时候在设置上有些复杂。但设置xdm 可以得到本地的和其他服务器上的桌面了。我们下面将介绍服务器上配置xdm的方法和步骤，这里描述的配置允许任何的 XDMCP 客户访问 Linux 服务器桌面环境（当然了影响了X的安全）。</font></p><p><font face="Verdana">  第一步，我们在Linux系统下，修改/etc/X11/xdm/Xaccess文件，找到下面的语句：# * #any  host  <a href="http://topic.ccw.com.cn/corpCenter/249.html" target="_blank"><font color="#0000cc"><b>ca</b></font></a>n  get  a  login  window<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906100711736.jpg" border="0" /><br /> <br />去掉最前面的#号，成为<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906100804950.jpg" border="0" /></font><font face="Verdana"><br />   <br />第二步，我们修改/etc/X11/gdm/gdm.conf文件，找到下面的语句：<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906100910861.jpg" border="0" /><br /> <br />  将其中的Enable＝false 改为Enable＝true 或 Enable＝1。<br />  同时我们要确保存在下面的语句，因为177端口是我们要配置的xdmcp服务的监听端口，我们在后面配置xmanager将看到。<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101013930.jpg" border="0" /><br /> <br />   第三步，我们要修改/etc/inittab文件，将下面的语句<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101126696.jpg" border="0" /><br /> <br />  改为如下，如果原来就是id:5:initdefault:就不用更改。<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101214364.jpg" border="0" /><br /> <br />  同时，找到如下图文字所在的地方，<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101255302.jpg" border="0" /><br /> <br />  将它修改为x:5:respawn:/usr/bin/gdm，即如下图所示，<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101342628.jpg" border="0" /><br /> <br />   第四步，我们修改/etc/X11/xdm/xdm-config的最后一行，在displayManager.requestPort:0前面加上一个！号，结果如下<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101453118.jpg" border="0" /><br /> <br />  第五步，我们修改确保/etc/X11/xdm/Xservers的属性为444，/etc/X11/xdm/Xsetup_0的属性为755，在RedHat 9.0中，我们可以看到这两个文件默认的属性就是444和775，因此不用修改。<br /> <img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101647407.jpg" border="0" /></font></p><p><font face="Verdana">   最后，如果我们的Linux机器配置有防火墙，为防止防火墙将通过177端口（即xdmcp服务）的数据过虑，我们必须加上如下的规则：<br />   iptables  -A  INPUT  -p udp -s 0/0 -d 0/0 --dport 177 -j ACCEPT<br />  <br />至此为止，我们在Linux下的配置xdm已经基本完成。但上面这些配置还只是x服务器端的配置，我们要想实现在Windows远程桌面控制Linux，还必须要<br />有Windows下的客户端工具，xmanager正是这样的一个工具，它是一个简单易用的高性能的运行在Windows平台上的 X Server 软件。我们现在来介绍xmanager的在Windows下的安装和配置技巧，这里我使用的机器是windows <a href="http://wiki.ccw.com.cn/Athlon+XP" target="_blank"><font color="#0000cc"><b>xp</b></font></a>。</font></p><p><font face="Verdana">我们先下载xmanager的安装文件，我下载的是xmanager1.3.9，安装后，在安装目录下，我们点击xconfig，选择xdm，如下图，选择”XDM Indirect”,在 host：后面填上我们已经配置好的Linux系统的ip，注意下面的XDMCP Port:177, 这就是我们在配置Linux服务器时必须保证 port＝177的原因。<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101822661.jpg" border="0" /><br /> <br />然后我们双击xmanager安装目录里的xmanager,出现下面的画面，<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906101958797.jpg" border="0" /><br /> <br />选择图中的linux机器，然后点击“连接”即可以连接到我们的redhat登陆桌面了。<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906102012270.jpg" border="0" /><br /> <br />输入用户名，确定后系统会提示让你输入密码，验证成功后就可以使用我们的redhat桌面了，效果如下：<br /><img src="http://imgs.ccw.com.cn/resources/server/200509/20050906102116399.jpg" border="0" /><br /> <br />本文介绍了windows下通过xmanager来远程桌面控制Linux的方法，并具体介绍了xdm和xmanager的配置和使用方法，希望给大家带来一定的帮助。</font></p><p><font face="Verdana">参考文献：<br />1：《配置XDM--一种Linux的图形登录界面》  http://www.hackhome.com/2005/7-14/00414266097.shtml<br />2：《XManager 系统配置简介》 http://www.7622.com/list/47086.htm</font></p></td><td width="10"> </td></tr></tbody></table>
]]>
</description>
</item><item>
<link>https://atim.cn/post/19/</link>
<title><![CDATA[试用了google的reader]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Thu, 14 Dec 2006 15:51:07 +0000</pubDate> 
<guid>https://atim.cn/post/19/</guid> 
<description>
<![CDATA[ 
	<div>前两日向google的实验项目里发现了一个reader</div><div>开始时以为是一个读书咖阅读器</div><div>后来进去后才发现是一个rss的阅读器</div><div>他咖功能跟foxmail的rss功能差不多</div><div>只是不过foxmail在䈀软件上看</div><div>而他系向web上看</div><div>今日细用之下发现了几个好处</div><div>1,你跑到那里浏览的还是你订阅的内容</div><div>好像我这种在家用一台电脑，在公司又一台电脑的人，用foxmail之类的话，那就是所看的内容可能完全不同</div><div>2,他会自动去更新内容，让我不会放过任何一个内容</div><div>foxmail之类的rss都要开着软件然后设定为自动更新才会去更新，而google会自动的完成这一操作。我完全不会掉失一个内容。</div><div>这个是首页</div><div><IMG src="up/1166114163.gif" width=500></div><div>这个是内容</div><div><IMG src="up/1166114286.gif" width=500></div>
]]>
</description>
</item><item>
<link>https://atim.cn/post/34/</link>
<title><![CDATA[关于屏幕偏移问题]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Sat, 27 May 2006 03:59:57 +0000</pubDate> 
<guid>https://atim.cn/post/34/</guid> 
<description>
<![CDATA[ 
	关于屏幕偏移问题<br/><br/> &nbsp; 1. sudo xvidtune<br/> &nbsp; 2. 用left和right按钮调屏幕位置，再test按钮试一试满意没有，满意了，就下一步，不满意再用left和right按钮调整。<br/> &nbsp; 3. 按show，好让终端有类似 "1024x768" 94.50 1024 1093 1168 1376 768 769 772 808 +hsync +vsync 的出现。<br/> &nbsp; 4. sudo gedit /etc/X11/xorg.conf，先另存为，作一个备份。然后找到Section "Monitor"中当前分辨率的那段，你应该会看到类似 Modeline "1024x768" 94.50 1024 1093 1168 1376 768 769 772 808 +hsync +vsync这样的语句（没有的话就将记下来的东西在开头加Modeline，将它添加到EndSection的前面），按照刚才记下来的东西修改其中的相应位置的数值，改完后保存文件为原来的xorg.conf，注销，然后重起xwindow，搞定！<br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/42/</link>
<title><![CDATA[找到了,终于找到了ubuntu设置自动挂载的文件了]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Sat, 01 Apr 2006 11:28:54 +0000</pubDate> 
<guid>https://atim.cn/post/42/</guid> 
<description>
<![CDATA[ 
	呵呵<br />花了一些时间去找了相关资料<br />终于找到了那个文件<br />/etc/fstab<br />这个文件真难找呀<br /><br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/49/</link>
<title><![CDATA[使用CVS进行版本管理]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Mon, 20 Feb 2006 16:29:36 +0000</pubDate> 
<guid>https://atim.cn/post/49/</guid> 
<description>
<![CDATA[ 
	<br/><br/>翻译:廖斌 <br/><br/><br/><br/>#////////////////////////////////////////////////////////////////////// <br/># 使用CVS进行版本管理 <br/># 2000-6-30 <br/># CVS 1.10.7 <br/># <br/># <br/># <br/># Per Cederqvist et al 著 <br/># 廖斌 译 <br/># 感谢黄箐的输入和排版工作 <br/># copyrigh： GPL <br/># <br/>#////////////////////////////////////////////////////////////////////// <br/><br/><br/>快捷内容索引 <br/>1． 概述.........................................................1 <br/>2． 代码仓库.....................................................7 <br/>3． 使用CVS开始一个项目..........................................29 <br/>4． 主干版本（Revision）.........................................33 <br/>5． 分支与合并...................................................41 <br/>6． Recarsive behavior...........................................49 <br/>7． 增加，删除，更名文件和目录...................................51 <br/>8． 回顾开发历史.................................................57 <br/>9． 放置二进制文件...............................................59 <br/>10 多个开发者的同时工作........................................61 <br/>11 主干版本管理.............................................71 <br/>12 关键字替代................................................73 <br/>13 跟踪第三方代码...............................................77 <br/>14 你的系统如何同CVS交互........................................81 <br/>15 特殊文件.....................................................83 <br/>16 附录 <br/>1） CVS命令导向..................................................85 <br/>2） CVS命令快速参考............................................115 <br/>3） 管理文件的参考习册.........................................127 <br/>4） 影响CVS的所有环境变量......................................141 <br/>5） CVS各版本之间的兼容性......................................143 <br/>6） 遇到的问题.................................................145 <br/>7） Credits....................................................153 <br/>8） 对CVS和这本手册的总是处理..................................155 <br/><br/>目录 ...........................................................157 <br/><br/><br/><br/>1 概论 <br/><br/>这一章为从未用过CVS的人写的，也许以前也从未用过任何版本控制工具。 <br/><br/>1.1 什么是CVS？ <br/><br/>CVS是个版本控制系统，使用它你可以记录你原代码文件的历史。 <br/>例如，当软件修改时有时会产生问题（*bugs这里被译为问题），并且你可能在做这 <br/>次修改后很长时间不会发现这些问题。使用CVS，你可以容易地回顾老的代码版本去 <br/>发现哪一次的修改导致这些问题。有时候这样会非常有帮助。 <br/><br/><br/>你可能会保留你每一次的代码版本，这可能会浪费你很多的代码空间。CVS使用一 <br/>种聪明的办法保存你的多个版本在一个文件中。它仅仅保留版本间的不同内容。如果 <br/>你是一个项目中的一组成员之一，CVS也能够帮助你。除非你特别仔细，你很容易覆盖其 <br/>他人的工 作。一些编辑器，例如GNUEmacs，试图去判定一个文件是否被两人同时修改。 <br/>不幸的是，如果一个人使用其它的编辑器时，这个安全方式将不再有效。CVS使用让不同 <br/>开发者独立工作的方式解决了这个问题。每一个开发者的工作都在他自己的目录内，并且 <br/>CVS将 在每个开发者的工作完成后进行合并工作。 <br/><br/>CVS是由Dick Grune作为Shell脚本的一个分支而创建的，1986年10月，在它的第6个发行卷 <br/>时，它被投递到新闻组comp.soures.unix。然而现在的CVS冲突算法中没有任何代码是从这 <br/>些脚本中来的。 <br/><br/>在1989年3月，Brian Berlinor设计并编写了CVS的代码。Jett.Polk在以后帮助 Brian 完成了CVS <br/>模型的设计和商业版本支持。 <br/><br/>你可以通过不同的方式得到CVS，包括在Internet上自由的下载。如果你想下载CVS和其它CVS <br/>文章以得到更多的信息，请看： <br/><br/>http：//www.cyxlic.com <br/>http：//www.loria.fr/~molli/cvs-index.html. <br/><br/><br/>有一个叫 info-cvs 的邮件列表是有关CVS的内容。订阅或取消订阅这个列表请发邮件到 <br/><br/>info-cvs-request@gnu.org <br/><br/>如果你更喜欢Usenet新闻组，CVS的讨论组为 <br/><br/>Comp.software.confg.mgmt. <br/><br/>在将来也许会建一个 <br/><br/>Comp.software.confg.mgmt.cvs <br/><br/>的新闻组， <br/><br/>但也许这会是Comp.software.confg.mgmt在有太多讨论之后的事情吧。 <br/><br/>你也许想订阅bug-cvs的邮件列表，这在附录H[BUGS]中有更多的信息。订阅它请发Email到 <br/><br/>bug-cvs-reqnest@gnu.org. <br/><br/>1.2 CVS不能做的事 <br/>（未译） <br/>2 <br/><br/><br/>3 使用CVS开始一个项目 <br/>======================= <br/><br/><br/>因为更改文件名并且把它们移动到另一个目录中不是经常发生的，因此你在开始一个新项 <br/>目时要做的第一件事是考虑你的文件组织。更改文件名或移动文件并非不可能，但增加了 <br/>理解上潜在的费解，并且CVS在更改名字的目录上特别的敏感。请参见7.4节[移动文件]。 <br/><br/>（* 译者注： 在Unix中改名和移动是相同的）。 <br/><br/>下一步做的事取决于手中的情况。 <br/><br/>3.1 建立文件 <br/><br/>第一步是在仓库中建立文件。这可以使用多种不同的方法来完成。 <br/><br/>-------------------------------------------------------------------- <br/><br/>3.1.1 建立一个目录树 <br/><br/>当你开始使用CVS时，你可能已经有几个项目可以使用CVS进行管理了。在这种情况下， <br/>最容易的方法就是使用： ＂import＂命令。一个例子是最容易解释如何使用它的。假定你现 <br/>在有一些你想放到CVS中的文件在＂wdir＂中，并且你想让它们放在数据仓库中的如下目录： <br/><br/>＂$CVSROOT/yoyodyne/rdir＂ <br/><br/>你可以使用如下命令： <br/><br/>$cd wdir <br/>$cvs inport -m ＂Inported Sources＂ yoyodyne/rdir yoyo start <br/><br/>如果你没有使用＂-m＂参数记录一个日志信息，CVS将调用一个编辑器（*译者注：通常是vi） <br/>并且提示输入信息。＂yoyo＂字符串是开发者标笺，＂start＂是发行标笺。他们没有什么特别 <br/>的意义，仅仅是因为CVS的需要才放在这里。 <br/><br/>请参见第13章[跟踪代码]，得到更多的这方面信息。 <br/><br/>你现在可以检查一下它是否有效了，然后可以删除你原来的代码目录。 <br/><br/>$cd <br/>$mv dir dir.orig <br/>$cvs checkout yoyodyne/dir <br/>$diff -r dir.orig yoyodyne/dir <br/>$rm -r dir.orig. <br/><br/>为了避免偶然进入到你原来的目录中去编辑文件，删除原来的代码是个好主意。当然，在 <br/>你删除之前保留一份备份到其它地方也是明智之举。 <br/><br/>＂checkout＂命令能使用模块名作为参数（正如前面所有例子）或是一个相对于$CVSROOT的路 <br/>径，如同上面的例子。你应当检查CVS目录中的权限情况是否合适，应当使它们属于某一个 <br/>特定的组。请参见2.2.2.节[文件权限]。 <br/><br/>如果你想＂import＂的一些文件是二进制代码，你可以使用一些特殊的方法表明这些文件是否 <br/>是二进制文件。请参见C.2节[Wrappers]。 <br/><br/><br/>------------------------------------------------------------------------------------ <br/><br/>3.1.2 从其它版本控制系统建立文件 <br/><br/>如果你有一个其它版本控制系统维护的项目，例如RCS，你也许希望把这些文件放到CVS中， <br/>并且要保留这些文件的历史。以下是一些讨论。 <br/><br/>从RCS： <br/>如果你使用RCS，找到RCS文件??通常一个文件名叫＂foo.c＂的文件会有＂RCS/foo.c,v＂的RCS文 <br/>件。（但它有可能在其它地方，请看RCS的文档以得到相关信息）。如果文件目录在CVS中不存 <br/>在，那在CVS中创建它。然后把这些文件拷贝到CVS的仓库目录中（在仓库中的名字必须是带 <br/>＂,v＂的原文件；这些文件直接放在CVS中的这个目录下，而非＂RCS＂子目录中）。这是在CVS中 <br/>一个为数不多的直接进入CVS仓库直接操作的情况，而没使用CVS命令。然后你就可以把它们 <br/>在新的目录下＂checkout＂了。 <br/><br/>当你把RCS文件移动CVS中时，RCS文件应在未被锁定的状态，否则移动操作时CVS 将会出 <br/>现一些问题。 <br/><br/>从其它版本控制工具 <br/><br/>许多版本控制工具都可以输出＂RCS＂格式的标准文档。如果你的版本控制工具可以做到这一 <br/>点，直接输出RCS文件，然后按照上面的例子做就可以了。 <br/><br/>如果你的版本工具不能输出RCS文件，那么你必需要写一个脚本文件来，每次取出一个版本 <br/>然后把它放到CVS中去。下面提到的＂sccsarcs＂脚本就是一个很好的例子。 <br/><br/>从SCCS： <br/><br/>有一个＂sccsarcs＂的脚本文件可以做把SCCS的文件转化成RCS文件，这个文件放在CVS原代码 <br/>目录的＂contrib＂目录中。注意： <br/><br/>你必须在一台同时安装了RCS和SCCS的机器上运行它。并且，正如其它在＂contrib.＂目录中的 <br/>其它脚本一样。（你的方法也许是变化多端的） <br/><br/>（*译者注：我并未查看过CVS的contrib目录：-（，因此不知道这下面都有些什么）。 <br/><br/>从PVCS： <br/><br/>在＂contrb＂中有一个叫＂pves-to-rcs＂的脚本可以转换PVCS到RCS文件。你必须在一台同时有 <br/>PVCS和RCS的机器上运行它。 <br/><br/>请看脚本中的注释以得到更多细节。 <br/><br/>3.1.3从无到有建立一个目录树 <br/><br/>建立一个新的项目，最容易的方法是建立一个空的目录树，如下所示： <br/><br/>$mkdir tc <br/>$mkdir tc/man <br/>$mkdir tc/testing <br/><br/>在这之后，你可以＂import＂这个（空）目录到仓库中去。 <br/><br/>$cd tc <br/>$cvs import -m ＂created directory structure＂yoyodyne/dir yoyo <br/>start <br/><br/>然后，当新增一个文件时，增加文件（或目录）到仓库中。请检查$CVSROOT中的权限是否正确。 <br/><br/>------------------------------------------------------------------------------------------- <br/><br/>3.2 定义模块 <br/><br/>下一步是在＂moduyes＂文件中定义模块。这不是严格需要的，但模块能把相关的目录和文件容易 <br/>关联起来。下面的例子可以充分演示如何定义模块。 <br/><br/>1. 得到模块文件的工作拷贝。 <br/><br/>$cvs checkout CVSROOT/modules <br/>$cd CVSROOT <br/><br/>2. <br/>编辑这个文件并写入定义模块的行。请参见2.4节[管理文件的介绍]。有一个简单介绍，参见C.1节 <br/>[模块文件]。有它的详细描述。你可以使用下面的行定义模块＂tc＂： <br/><br/>tc yoyodyne/tc <br/><br/>3. 提交你的更改到仓库 <br/><br/>$cvs commit -m ＂Added tc module.＂ modules <br/><br/>4. 发行模块文件 <br/><br/>$cd <br/>$cvs release -d CVSROOT <br/><br/>4 <br/>======= <br/><br/><br/>5 分支与合并 <br/>================== <br/>CVS允许你独立出一个派生的代码到一个分离的开发版本---分支。当你改变一个分支中的文 <br/>件时，这些更改不会出现在主开发版本和其它分支版本中。 <br/><br/>在这之后你可以使用合并（merging）把这些变更从一个分支移动到另一个分支（或主开发版 <br/>本）。合并涉及到使用“cvs update　-j”命令，合并这些变更到一个工作目录。你可以确认 <br/>（commit）这次版本，并且因此影响到拷贝这些变更到其它的分支。 <br/><br/>----------------------------------------------------------------------------------- <br/><br/>5.1 何时应当创建一个分支 <br/><br/>假定tc.c发行版已完成。你正在继续开发tc.c，计划在2个月后发行1.1的版本。在不久以后你的 <br/>客户开始抱怨说代码有些问题，你检查了一下1.0的发行版（请参见4.4节[标笺]）并且找到了这 <br/>个错误（这将会有一个小小的更正）。但是，这个当前的版本是处于一个不稳的状态，并且在下 <br/>一个月才能有希望稳定下来。这样就没有办法去发行一个最新的现有版本去更正问题。 <br/><br/>这时就可以去创建基于这棵版本树1.0版的分支。你可以修改这棵树的分支而不影响到主干。当 <br/>修订完成时，你可以选定是否要把它同主干合并或继续保留在这个分支里。 <br/><br/>----------------------------------------------------------------------------------- <br/><br/>5.2 建立一个分支 <br/><br/>你可以使用“tag -b”去建立一个分支。例如，假定你在工作于一个工作拷贝中： <br/><br/>$cvs tag -b rel_1_0_patches <br/><br/>这将基于当前的拷贝分离出一个分支，并分配“rel_1_0_patches”的名字。 <br/><br/>懂得分支是在CVS仓库中创建，而非在工作拷贝中创建的是非常重要的。正上面的例 <br/>子，创建一个基于当前版本的分支不会自动把当前的工作拷贝转到新的分支上。欲知 <br/>详情，请看5.3节[进入 一个分支]。你也可以不参考任何工作拷贝而建立一个分支。 <br/>你可以使用rtag命令： <br/><br/>cvs rtag -b -r rel-1-0 rel-1-0-patches tc. <br/><br/>“-r rel-1-0”说明这个分支是基于标志了rel-1-0的版本文件，它不是从最新的版本 <br/>开始分支．这对需要从老的版本进行分支很有用（例如：当修订一个过去的稳定版本时） <br/><br/>当使用“tag”标志，这个“-b”标志告诉rtag去创建一个分支（而非是这个版本的符号 <br/>连接）。注意标记“rel-1-0”可能对不同的文件有不同的版本数字。因此，这个命令的结果 <br/>是为tc模块建立了一个命名为“rel-1-0-patches”的新版本分支，它是基于标记为“rel-1-0” <br/>的版本树。 <br/><br/>----------------------------------------------------------------------------------- <br/><br/>5.3 进入分支 <br/><br/>你可以通过两种方式进入分支：重新checkout或是从现存的拷贝进入。重新checkout使用 <br/>checkout命令并带上“-r”标识，后面是这个分支的标笺（tag）名。（请看5.2［创建一个分支］）： <br/><br/>$cvs checkout -r rel-1-0-patches tc. <br/><br/>或者如果你已有了一个拷贝，你可以使用“update -r”命令转到这个分支。 <br/><br/>$cvs update -r rel-1-0-patches tc. <br/><br/>或者使用另一个等同的命令： <br/><br/>$cd tc <br/>$cvs update -r rel-1-0-patches <br/><br/>这对现有拷贝为主干代码或是其它分支都是有效的．上面的命令将把它转到命 <br/>名的分支。同“update”命令相类似。“update -r”合并你所做的任何改变，请注 <br/>意是否有冲突出现。 <br/><br/>一但你的工作拷贝已经转向一个特定的分支。它将一直保持在这个分支内，除非你 <br/>又做了其它的操作。这意味着从这个工作拷贝checkin的变更将加到这个分支的新版 <br/>本中，而不影响到主干版本和其它分支代码。 <br/><br/>想看一个工作拷贝是基于哪一个分支，可以使用“status”命令。在它们输出中查找 <br/>一个“sticky tag”的域（请参见4.9节[＂sticky tag＂]，第38页）．那就是你的当前分支号。 <br/><br/>$cvs status -v driver.c backend.c <br/><br/>==================================================================== <br/>File： driver.c Status： Up-to-date <br/><br/>Version： 1.7 Sat Dec S 18：25：54 1992 <br/>RCS version： 1.7 /u/cvsroot/yoyodyne/tc/driver.c，v <br/>Sticky Tag： rel-1-0-patches （branch： 1.7.2） <br/>Sticky Date： （none） <br/>Stick Option： （none） <br/><br/>Existing Tag： <br/>rel-1-0-patches （branck： 1.7.2） <br/>rel-1-0 （revision： 1.7） <br/><br/><br/>==================================================================== <br/>File： backend.c status： Up-to-date <br/><br/>Version： 1.4 Tue Dec 1 14：39：01 <br/>Rcs Version： 1.4 /u/cvsroot/yoyodyne/tc/ <br/>Sticky Tag： rel-1-0patches（branch：1.4.2） <br/>Sticky Date： （none） <br/>Sticky Option： （none） <br/><br/>Existing Tag： <br/>Rel-1-0-patches （branch： 1.4.2） <br/>Rel-1-0 （revision： 1.4） <br/>Rel-0-4 （revision： 1.4） <br/><br/><br/>请不要因为每个文件的分支是不同（“1.7.2”和1.4.2＂）而迷惑。分支的标笺（tag） <br/>是相同的：＂rel-1-0-patches＂，这些相同标笺的文件是相同分支的。在以上的例子中，分支建 <br/>立之前，＂driver.c＂ 比 ＂backend.c＂有更多的变更，因此它们的版本编号是不同的。请参见5.4节 <br/>[分支和主干版本号]去了解分支如何构建原理的细节。 <br/><br/>-------------------------------------------------------------------------------------- <br/><br/>5.4 分支与主干版本 <br/><br/>通常，一个文件的主干版本历史是一个增长线（请看4.1[主干版本]页）： <br/><br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/><br/>然而，CVS并不局限于线性的开发。主干版本可以分为不同的分支，每一个分支可 <br/>以是一个独立的自我维护的开发线。而在一个分支中的变更可以很容易的转移到主干中。 <br/>每一个分支均有一个分支号，由一个“.”分离的十进制奇数组成，分支号的编排依 <br/>赖于它分离出的主线版本。使用分支号允许从一个特定版本分离出多个分支。 <br/><br/>所有的分支版本都依赖于它的原始分离版本号。下面的例子将展示这一点。 <br/><br/><br/>+-------------+ <br/><br/>1.2.2.3.2 分支 -> +--! 1.2.2.3.2.1 ! <br/><br/>! +-------------+ <br/><br/>! <br/>+---------+ +---------+ +---------+ <br/>1.2.2 分支-> +--! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.2 ! <br/>! +---------+ +---------+ +---------+ <br/>! <br/>! <br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- 主干 <br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! <br/>! <br/>! +---------+ +---------+ +---------+ <br/>1.2.4 分支-> +--! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.2 ! <br/>+---------+ +---------+ +---------+ <br/><br/><br/><br/>你是如何创建具体的分支号的细节通常不是你需要考虑的，但这里谈谈它如何工作。 <br/><br/>当CVS建立一个分支号时，它先得到第一个未用的偶数，开始的数字是2，例如你 <br/>从6.4的主干版本创建分支时，分支号为6.4.2所有分支号码末位为0的号码用于CVS内 <br/>部，（例如6.4.0）。（请参见5.5节[内部分支号]44页）分支1.1.1有特别的含义，请看13章 <br/>[跟踪代码]。 <br/><br/>----------------------------------------------------------------------------------- <br/><br/>5.5 内部分支号码 <br/><br/>这一节描述CVS的内部分支（magic branches） （* 译者注：magic branch 译为内部分支） <br/>特性。在大多数情况下，你不用考虑内部分支号码，CVS将为你进行管理。然而，在 <br/>一些特定条件下，它将显现出来，因此理解它如何工作将是有用的。一般的，分支号 <br/>码将由奇数个 ＂.＂分隔的十进制整数组成。请看4.1节[版本号码]。然而那并非完全是这 <br/>样的，由于效率的原因，CVS有时插入一个额外的“0”在右末的第二个位置（1.2.4 <br/>变为1.2.0.4，8.9.10.11.12变为8.9.10.11.0.12等）。 <br/><br/>CVS将会很好的将这些变换隐蔽在背后进行，但在一些地方，这种隐蔽并不完全： <br/><br/>* 内部分支编号会出现在CVS的日志（log）文件中。 <br/>* 你不能够对 ＂cvs admin＂ 使用符号分支名。 <br/><br/><br/>你可以使用admin命令去为一个分支重新分配一个RCS希望的那样的符号名。如果 <br/>R4patches是一个分配给分支1.4.2（内部分支编号为1.4.0.2）的一个文件＂numbers.c＂的 <br/>命名，你可以使用如下命令： <br/><br/>$cvs admin -NR4patches：1.4.2 numbers.c <br/><br/>它将只在至少一个版本已经提交到这个分支时才会有效。请非常小心不要把一个标 <br/>笺（tag）分配给了一个错误标识号（现在没有看到昨天的一个标笺是如何分配的）。 <br/><br/>---------------------------------------------------------------------------------- <br/><br/>5.6 合并一个整个分支 <br/><br/>你可以合并一个分支到你的工作目录在“update”命令中“-j 分支号”的标识。使 <br/>用“-j 分支号”将合并这个派生分支点与原版本的最新版之间的变更到你的工作目录 <br/>“-j”的意思是“join”。 <br/><br/>我们现在来考察下面这棵树： <br/><br/><br/>+-----+ +-----+ +-----+ +-----+ <br/>! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- 主干 <br/>+-----+ +-----+ +-----+ +-----+ <br/>! <br/>! <br/>! +---------+ +---------+ <br/>R1fix 分支-> +--! 1.2.2.1 !----! 1.2.2.2 ! <br/>+---------+ +---------+ <br/><br/><br/>分支1.2.2分配了一个Rifix的名字.下面的例子假定模块＂mod＂只包含一个文件＂m.c＂ <br/><br/>$cvs checkout mod # 得到最新的1.4版 <br/>$cvs update -j R1fix m.c # 合并所有在分支中的改变，即：1.2与1.2.2.2 <br/># 之间的变化到这个文件的工作目 <br/>录. <br/><br/>$cvs commit -m ＂Included R1fix # 建立1.5版 <br/><br/><br/>在合并时可能会发生冲突，如果这种情况发生，你可以在提交新版本之前解决它。请 <br/>参见10.3节[冲突的例子]。 <br/><br/>如果你的原文件中包含关键字（请看第12章[关键字替代]）。你可能会得到比严格意义 <br/>上的冲突更多的冲突信息。请参见5.10节[合并和关键字]，去了解如何避免这个问题。 <br/>＂checkout＂命令也支持使用＂-j＂参数。下面的例子同上面所用的例子有相的效果。 <br/><br/>$cvs checkout -j R1fix mod. <br/>$cvs commit -m ＂Included R1fix＂ <br/><br/>--------------------------------------------------------------------------------- <br/><br/>5.7 从一个分支多次合并。 <br/><br/><br/>继续我们上面的例子。现在这棵树看起来是这样的： <br/><br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- 主干 <br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! * <br/>! * <br/>! +---------+ +---------+ <br/>R1fix 分支-> +--! 1.2.2.1 !----! 1.2.2.2 ! <br/>+---------+ +---------+ <br/><br/><br/>正如上面所讨论的，分支1.2.2.2所引导的“*”号表示从Rifix分支到主干的合并。 <br/><br/>现在我们继续开发Rifix分支： <br/><br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- 主干 <br/>+-----+ +-----+ +-----+ +-----+ +-----+ <br/>! * <br/>! * <br/>! +---------+ +---------+ +---------+ <br/>R1fix 分支-> +--! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! <br/>+---------+ +---------+ +---------+ <br/><br/>然后你可能会希望合并新的变更到主干中去。如果你仍使用“cvs update -j Fifix m.c＂ <br/>cvs将试图合并你已经合并过的东西，这可能写导致一些不希望发生的东西。 <br/><br/><br/>因此，你必须表达清楚你希望只合并未被合并的内容的意思。这样需要使用两个 <br/>“-j“参数。CVS合并从第一个“-j”的版本到第二个“-j”版本的变化。例如，在我们上面 <br/><br/>的例子中： <br/><br/>cvs update -j 1.2.2.2 -j R1fix m.c <br/><br/>如果出现的问题是你需要手工指定1.2.2.2的版本号，一个更好的方法是使用： <br/><br/>cvs update -j R1fix：yesterday -j R1fix m.c <br/><br/>然而，更好的方式是在每一次合并后重新放一个标笺给Rifix分支，然后使用标 <br/>笺做后的合并： <br/><br/>cvs update -j merged_from_Rifix_to_trunk -j R1fix m.c <br/><br/>---------------------------------------------------------------------------------- <br/><br/>5.8 合并两个任意版本之间的不同 <br/><br/>使用两个“-j”标志，这个update（和checkout）命令能合并两个任意不同的版本 <br/>到你的工作目录。 <br/><br/>$cvs update -j 1.3 backend.c <br/><br/>将把1.5版本恢复到1.3版本，所以一定要注意版本的顺序。 <br/><br/>如果你在操作多个文件时使用这个选择项，你必须了解在不同的文件之间，版本的 <br/>数字可能是完全不同的。你必须使用标笺（tag）而不是使用版本号来完成多个文件 <br/>的操作。使用两个“-j”操作也能会恢复增加或删除的文件。例如，假定你有一个 <br/>叫“file1”的文件在在于1.1版本中，然后你在1.2版本中删除了它，下面是如何操作的例子： <br/><br/>$cvs update -j 1.2 -j 1.1 file1 <br/>file1 <br/>$cvs commit -m test <br/>checking in file1; <br/>/tmp/cvs-sanity/cvsroot/first-dir/file1 file1，v <br/>new revision：1.3; previous revision：1.2 done <br/>$ <br/><br/>------------------------------------------------------------------------------------ <br/><br/>5.9 合并能添加和删除文件 <br/><br/>如果你在合并时的改变涉及到添加或删除一些文件，“update -j”将反映这些变化。 <br/>例如： <br/><br/>cvs update -A <br/>touch a b c <br/>cvs add a b c ; cvs ci -m ＂added＂ a b c <br/>cvs tag -b branchtag <br/>cvs update -r branchtag <br/>touch d ; cvs add d <br/>rm a ; cvs rm a <br/>cvs ci -m ＂added d ， removed a＂ <br/>cvs update -A <br/>cvs update -j branchtag <br/><br/><br/>在这些命令之后（注意要commit），文件a将被删除，而文件d将被加入到主干。 <br/><br/>------------------------------------------------------------------------------------- <br/><br/>5.10 合并和关键词 <br/><br/><br/>如果你合并的文件包含关键词（参见第12章[关键词替代]，73页），你通常将会在 <br/>合并时得到 无数个冲突报告，因为在不同版本中非常不同。 <br/><br/>因此，你常需要在合并时使用“-kk”（参见12.4节[替代模式]，75页）选择项。使用 <br/>关键字名字，而非去扩展关键字的值的方法，这个功能选择项确保你合并的版本之间互相相 <br/>同，而避免了冲突。 <br/><br/>例如：假设你有一个文件如下： <br/><br/>+---------+ <br/>br1 -> +--! 1.1.2.1 ! <br/>! +---------+ <br/>! <br/>! <br/>+-----+ +-----+ <br/>! 1.1 !----! 1.2 ! <br/>+-----+ +-----+ <br/><br/><br/><br/>并且你的当前工作目录拷贝为主干（1.2版本）。那么对于以下的合并将会产生一个 <br/>冲突的结果。请看例子： <br/><br/>$cat file1 <br/>Key $Revision： 1.3 $ <br/>... <br/>$cvs update -j br1 <br/>U file1 <br/>RCS file： /cvsroot/first-dir/file1，v <br/>retrieving revision 1.1 <br/>retrieving revision 1.1.2.1 <br/>Meging differences between 1.1 and 1.1.2.1 into file1 <br/>rscmerge： warning： conflicts during merge <br/>$ cat file1 <br/>$<<<<<<< file1 <br/>Key $Revision： 1.3 $ <br/>======= <br/>Key $Rerision： 1.1.2.1 $ <br/>$>>>>>>> 1.1.2.1 <br/>... <br/><br/><br/>冲突发生在试图将1.1和1.1.2.1合并到你的工作目录中去的时候。因此，当这个 <br/>关键词从“Revision：1.1＂到＂Revision：1.1.2.1＂时，CVS将试图合并这个变化到 <br/>你工作目录， 这就同你的目录中的变更“Revision：1.2＂发生了冲突。 <br/><br/>以下是使用了：“-kk”后的例子： <br/><br/>$cat file1 <br/>key $Revision： 1.3 $ <br/>... <br/>$cvs update -kk -j br1 <br/>V file1 <br/>RCS file： /cvsroot/first-dir/file1，v <br/>retrieving revision 1.1 <br/>retrieving revision 1.1.2.1 <br/>Merging differences between 1.1 and 1.1.2.1 into file1 <br/>$ cat file1 <br/>key $Revision： 1.3 $ <br/>... <br/><br/>在这里版本“1.1”和“1.1.2.1＂都扩展为单纯的 ＂Revision＂，因此，合并时就不会 <br/>发生冲突了。 <br/><br/>然而，使用 ＂-kk＂ 参数还一个主要的问题。即，它使用了CVS通常使用的关 <br/>键字扩展模式。在特殊情况下，如果模式使用针对二进制文件的 ＂-kb＂ <br/>参数。这将会产生问题。因此，如果你的数据库中包括有二进制文件，你将 <br/>必须手工处理这些问题，而不能使用 ＂-kk＂。 <br/><br/>10 多个开发者同时工作 <br/>--------------------- <br/><br/>当多个开发者同时参与一个项目时，常常会发生冲突。一般经常发生的情况是两个人想 <br/>同时编辑一个文件的时候。它的解决方法之一是文件锁定或是使用保留式的checkout，这种 <br/>方法允许一个文件一次只允许一个人编辑。这是一些版本控制系统的唯一解决方式，包括 <br/>RCS和SCCS。现在在CVS通常使用保留式checkout的方法是使用＂CVS admin-1＂命令（参见A-6-1AB <br/>[admin选择项]）。在下面将解释这不是一种好的智能的解决方式，当它是许多人喜欢使用的 <br/>一种方式。下面也将讲述可以使用适当的方法来避免两个人同时编辑一个文件，而非使用软件 <br/>的方式强迫达到这一点。 <br/><br/>在CVS中默认的方法是＂unreserved checkout＂--非保留式的导出。在这种方法下，开发者 <br/>可以同时在他们的工作拷贝中编辑一个文件。第一个提交工作的没有一种自动的方法可以知道 <br/>另一个人在编辑文件。另一个人可能会在试图提交时得到一个错误信息。他们必须使用CVS命令 <br/>使他们的工作拷贝同仓库的内容保持更新。这个操作是自动的。 <br/><br/>CVS可以支持facilitate多种不同的通信机制，而不会强迫去遵守某种规则，如＂resered <br/>checkouts＂那样。以下的部分描述这些不同的方式是如何工作的，和选择多种方式之间涉及到 <br/>的一些问题。 <br/><br/>10．1 文件状态 <br/><br/>基于你对导出的文件使用过的操作，和这些文件在仓库中的版本使用过的操作，我们可以 <br/>把一个文件分为几个状态。这个状态可以由＂status＂命令得到，它们是： <br/><br/>up-to-date： <br/>对于正在使用的这个分支，文件同仓库中的最后版本保持一致。 <br/><br/>Locally Modified： <br/>你修改过文件，但没有＂commit＂。 <br/><br/>Locally added： <br/>使用了＂add＂命令增加文件，但没有＂commit＂ <br/><br/>Locally Removed： <br/>你使用了＂remove＂命令，但没有＂commit＂ <br/><br/>Needs checkout： <br/><br/>其他人提交了一个更新的版本。这个状态的名字有些误导，你应当使用＂update＂而非 <br/><br/>＂checkout＂来更新新的版本。 <br/><br/>Needs Patch： <br/>象＂Needs checkout＂一样，但CVS服务将只给出Patch（补丁）文件，而非整个文件。而 <br/>给出Patch和给出整个文件的效果是相同的。 <br/><br/>Needs Merge： <br/>一些人提交了一个更新版本，而你却修改过这些文件。 <br/><br/>File had conflicts on merge： <br/><br/>这同＂Locally Modified＂相象，只是＂update＂命令给出了一个冲突信息。如果你还没有 <br/>解决冲突，那么你需要解这个问题，解决冲突的方法参见10.3节[冲突的例子]. <br/><br/>Unkown： <br/><br/>CVS不知道关于这个文件的情况.例如，你创建了一个新文件，而没有使用＂add＂命令 <br/><br/>为了帮助弄清楚文件的状态，＂status＂也报告工作版本（working <br/>vevision），这是这个文件是从哪个版本来的，另外还报告＂仓库版本＂（Repository <br/>vevision）。这是这个文件在仓库中的这个版本分支的最后版本。 <br/><br/>＂status＂命令的选择项例在附录B[invoking cvs]。有关＂sticky tag＂和＂sticky <br/>date＂输出内容的信息，参见4.9节[sticky tags]。有关＂sticky options＂输出内容参见＂-k＂选择项， <br/>A.16.1节[update选择项]。 <br/><br/>你应当把＂update＂和＂status＂命令放在一起来认识。你使用＂update＂使你的文件更新到最 <br/>新状态，你使用＂status＂命令来得到＂update＂命令将会做何种操作。（当然，仓库中的状态将可 <br/>能会在你运行update之前变化）。事实上，如果你想使用一个命令得到比使用＂status＂正式的状 <br/>态信息，你可以使用： <br/><br/>$cvs -n -q -update <br/><br/>这里＂-n＂选择项表示不真正执行update，而只显示状态；＂-q＂选择项表示不打印每个目录的 <br/>名字。有关更多的关于＂update＂命令的住处参见附录B[使用CVS]。 <br/><br/>10．2 使一个文件更新到最版本 <br/><br/>当你想更新或是合并一个，使用update命令。对于一个不是最新版本的文件，这个命令大略等 <br/>同于＂checkout＂命令：最新版本从仓库中提出并放到工作目录中。 <br/><br/>当你使用＂update＂命令时，你修改过的文件在任何情况下不会受到损害。如果在仓库中没有更 <br/>新的版本，＂update＂时你的代码没有任何影响。当你编辑过一个文件，并且仓库中有更新版本，那 <br/>么＂update＂将合并所有的变更到你的工作目录。 <br/><br/>例如，想象一个你导出了一个1.4版的文件并且开始编辑它，在某一时候其他人提交了1.5版，然 <br/>后又提交了1.6版，如果你运行update命令，CVS将把1.4版到1.6版之间的变更放到你的文件中。 <br/>如果在1.4版和1.6版之间的改变太靠近于的你一些变更的话，那么一个＂覆盖＂（＂overlop＂）冲突 <br/>就发生了。在这种情况下将输出一个警告信息，然后结果保留的文件中包含了有冲突代码的两个版 <br/>本，由特别的符号所分隔开。请参见A.16节[更新]，可以得到关于＂update＂命令的一个完全的描述。 <br/><br/><br/><br/>来源：中国Linux论坛 <br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/59/</link>
<title><![CDATA[一个好基础的java教程]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Fri, 10 Feb 2006 10:38:50 +0000</pubDate> 
<guid>https://atim.cn/post/59/</guid> 
<description>
<![CDATA[ 
	<p>这个东西看完了感觉不错</p><p>是繁体的，我想没多少人不会看繁体吧</p><p>至少我身边的朋友都会</p><p><a href="up/1139567800.ppt"><font color="#e000ff">下载</font></a></p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/69/</link>
<title><![CDATA[用PHP编程开发“虚拟域名”系统]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Sun, 05 Feb 2006 01:07:19 +0000</pubDate> 
<guid>https://atim.cn/post/69/</guid> 
<description>
<![CDATA[ 
	如果自己的服务器也能够实现简记域名就好了。其实这并不复杂。你也可以做一个简记域名系统。 <br/>　　简记域名系统的关键技术在于：实现Web页面的重定向（Redirctory）。在本质上，简 <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><BR>　　echo '&lt;meta http-equiv="refresh" content="0;','url=',,'"&gt;';&#125; 
]]>
</description>
</item><item>
<link>https://atim.cn/post/82/</link>
<title><![CDATA[正确配置和维护Apache WEB Server 安全性]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[软件应用]]></category>
<pubDate>Tue, 20 Dec 2005 07:44:17 +0000</pubDate> 
<guid>https://atim.cn/post/82/</guid> 
<description>
<![CDATA[ 
	<table cellspacing="0" cellpadding="0" width="600" align="center" border="0"><tbody><tr><td colspan="2" height="20"></td></tr><tr><td class="content3" colspan="2"><p>　　<strong>Apache服务器的主要安全缺陷<br /></strong><br />　　正如我们前言所说尽管Apache服务器应用最为广泛，设计上非常安全的程序。但是同其它应用程序一样，Apache也存在安全缺陷。毕竟它是完全源代码，Apache服务器的安全缺陷主要是使用HTTP协议进行的拒绝服务攻击(denial of service)、缓冲区溢出攻击以及被攻击者获得root权限三缺陷和最新的恶意的攻击者进行“拒绝服务”(DoS)攻击。合理的网络配置能够保护Apache服务器免遭多种攻击。我们来介绍一下主要的安全缺陷：<br /><br />　　（1）使用HTTP协议进行的拒绝服务攻击(denial of service)的安全缺陷<br /><br />　　这种方法攻击者会通过某些手段使服务器拒绝对HTTP应答。这样会使Apache对系统资源(CPU时间和内存)需求的剧增，最终造成Apache系统变慢甚至完全瘫痪。<br /><br />　　（2）缓冲区溢出的安全缺陷<br /><br />　　该方法攻击者利用程序编写的一些缺陷，使程序偏离正常的流程。程序使用静态分配的内存保存请求数据，攻击者就可以发送一个超长请求使缓冲区溢出。<br /><br />　　（3）被攻击者获得root权限的安全缺陷<br /><br />　　该安全缺陷主要是因为Apache服务器一般以root权限运行(父进程)，攻击者会通过它获得root权限，进而控制整个Apache系统。<br /><br />　　（4）恶意的攻击者进行“拒绝服务”(DoS)攻击的安全缺陷<br /><br />　　这个最新在6月17日发现的漏洞，它主要是存在于Apache的chunk encoding中，这是一个HTTP协议定义的用于接受web用户所提交数据的功能。 所有说使用最高和最新安全版本对于加强Apache Web服务器的安全是至关重要的。<br /><br />　　请广大Apache服务器管理员去http://www.apache.org/dist/httpd/下载补丁程序以确保其WEB服务器安全！<br /><br />　　<strong>正确维护和配置Apache服务器<br /></strong><br />　　虽然Apache服务器的开发者非常注重安全性，由于Apache服务器其庞大的项目， 难免会存在安全隐患。正确维护和配置Apache WEB服务器就很重要了。我们应注意的一些问题：<br /><br />　　（1）Apache服务器配置文件<br /><br />　　Apache Web服务器主要有三个配置文件，位于/usr/local/apache/conf目录下。 这三个文件是：<br /><br />　　httpd.conf-----&gt;主配置文件<br />　　srm.conf------&gt;填加资源文件<br />　　access.conf---&gt;设置文件的访问权限<br /><br /><strong>　　注：</strong>具体配置可以参考：http://httpd.apache.org/docs/mod/core.html<br /><br />　　（2）Apache服务器的目录安全认证<br /><br />　　在Apache Server中是允许使用 .htaccess做目录安全保护的，欲读取这保护的目录需要先键入正确用户帐号与密码。这样可做为专门管理网页存放的目录或做为会员区等。在保护的目录放置一个档案，档名为.htaccss <br />　　AuthName &quot;会员专区&quot; <br />　　AuthType &quot;Basic&quot; <br />　　AuthUserFile &quot;/var/tmp/xxx.pw&quot; -----&gt;把password放在网站外 require valid-user 到apache/bin目录，建password档 % ./htpasswd -c /var/tmp/xxx.pw username1 -----&gt;第一次建档要用参数&quot;-c&quot; % /htpasswd /var/tmp/xxx.pw username2 这样就可以保护目录内的内容，进入要用合法的用户．<br /><br /><strong>　　注：</strong>采用了Apache内附的模组。<br /><br />　　也可以采用在httpd.conf中加入：　 <br />　　options　indexes　followsymlinks　 <br />　　allowoverride　authconfig　 <br />　　order　allow,deny　 <br />　　allow　from　all　<br /><br />　　（3）Apache服务器访问控制<br /><br />　　我们就要看三个配置文件中的第三个文件了，即access.conf文件，它包含一些指令控制允许什么用户访问Apache目录。应该把deny from all设为初始化指令，再使用allow from指令打开访问权限。<br /><br />　　&lt;directory /usr/local/http/docs/private&gt;<br />　　&lt;limit&gt;<br />　　order deny,allow<br />　　deny from all<br />　　allow from safechina.net<br />　　&lt;/limit&gt;<br />　　&lt;/directory&gt;<br />　　设置允许来自某个域、IP地址或者IP段的访问。<br /><br /><br />　　（4）Apache服务器的密码保护问题<br /><br />　　我们再使用.htaccess文件把某个目录的访问权限赋予某个用户。系统管理员需要在httpd.conf或者rm.conf文件中使用 AccessFileName指令打开目录的访问控制。如：<br /><br />　　AuthName PrivateFiles<br />　　AuthType Basic<br />　　AuthUserFile /path/to/httpd/users<br />　　require Phoenix<br />　　# htpasswd -c /path/to/httpd/users Phoenix<br /><br />　　<strong>设置Apache服务器的WEB和文件服务器</strong> <br /><br />　　我们在Apache服务器上存放WEB服务器的文件，供用户访问，并设置/home/ftp/pub目录为文件存放区域，用http://download.your.com/pub/来访问。在防火墙上设置apache反向代理技术，由防火墙代理访问。　 <br />　 <br />　　（1）Apache服务器的设置　<br /><br />　　apache服务器采用默认配置。主目录为/home/httpd/html,主机域名为Phoenix.your.com, 且别名到www.your.com中,　并且设置srm.conf加一行别名定义如下：<br /><br />　　Alias　/pub　/home/ftp/pub/　<br /><br />　　更改默认应用程序类型定义如下：　 <br />　　DefaultType　application/octet-stream　<br /><br />　　最后在/etc/httpd/conf/access.conf中增加一项定义　 <br />　　Options　Indexes　 <br />　　AllowOverride　AuthConfig　 <br />　　order　allow,deny　 <br />　　allow　from　all　<br /><br /><strong>　　注：</strong>Options　Indexes允许在找不到index.html文件的情况下允许列出目录/文件列表。AllowOverride　AuthConfig允许做基本的用户名和口令验证。这样的话，需要在/home/ftp/pub目录下放入.htaccess，内容如下：　 <br />　　[root@　pub]#　more　.htaccess　 <br />　　AuthName　Branch　Office　Public　Software　Download　Area　 <br />　　AuthType　Basic　 <br />　　AuthUserFile　/etc/.usrpasswd　 <br />　　require　valid-user　 <br />　　用# htpasswd　-c　/etc/.usrpasswd　user1　 分别创建不同的允许访问/pub下文件服务的外部用户名和口令。<br />　 <br />　　（2）在防火墙上配置反向代理技术.<br />　 <br />　　在/etc/httpd/conf/httpd.conf　 中加入 NameVirtualHost　xxx.xxx.xxx.xxx #　xxx.xxx.xxx.xxx -----&gt;是防火墙外部在互联网上永久IP地址　 <br />　　servername　www.your.com　 <br />　　errorlog　/var/log/httpd/error_log　 <br />　　transferlog　/var/log/httpd/access_log　 <br />　　rewriteengine　on　 <br />　　proxyrequests　off　 <br />　　usecanonicalname　off　 <br />　　rewriterule　^/(.*)$　http://xxx.xxx.xx.x/$1　Apache服务器的IP地址。 </p><p>　　servername　http://download.your.com/pub/ <br />　　errorlog　/var/log/httpd/download/error_log　 <br />　　transferlog　/var/log/httpd/download/access_log　 <br />　　rewriteengine　on　 <br />　　proxyrequests　off　 <br />　　usecanonicalname　off　 <br />　　rewriterule　^/(.*)$　http://xxx.xxx.xx.x/$1　同上Apache服务器的IP地址。<br /><br />　　设置防火墙上的DNS，让download.your.com和www.your.com 都指向防火墙的外部网地址xxx.xxx.xxx.xxx。<br />用http://www.your.com访问主页，用http://download.your.com/pub/访问公共文件的下载区。<br /><br /><strong>　　注：</strong>还需要在apache服务器主机上建立目录/var/log/httpd/download/，否则会出错。另外，也可以设置防火墙主机上的/home/httpd/html/index.html的属性为750来阻止访问，这是防外部用户能访问到防火墙上的Apache服务器的http://www.your.com中。　<br /><br /><strong>　　总结：</strong>Apache Server是一个非常优秀，非常棒的服务器，只要你正确配置和维护好Apache服务器，<br />你就会感受到Apache Server 所带来的好处，同样希望你能够通过阅读本文达到理论和实践双丰收的目的。<br />谢谢。 </p></td></tr></tbody></table>
]]>
</description>
</item>
</channel>
</rss>