﻿<?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>IT博客-WINDONE！第三块石头，相信自己能行，那你就一定能行！-随笔分类-LINUX</title><link>http://www.cnitblog.com/windone0109/category/6422.html</link><description>交流！共享！
既然选择了远方，便只管风雨兼程。
软件测试有所长进！自动化测试正在尝试！白盒测试希望介入！
                                    
欢迎各位朋友和我联系。 联系方式: QQ：70566744 Email：windone0109@yahoo.com.cn </description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 17:20:30 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 17:20:30 GMT</pubDate><ttl>60</ttl><item><title>Linux数据库热备份mysqlhotcopy</title><link>http://www.cnitblog.com/windone0109/archive/2008/05/09/43536.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Fri, 09 May 2008 03:19:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/05/09/43536.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/43536.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/05/09/43536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/43536.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/43536.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Linux数据库热备份mysqlhotcopy&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/05/09/43536.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/43536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-05-09 11:19 <a href="http://www.cnitblog.com/windone0109/archive/2008/05/09/43536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux字符集的修改方法 </title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42901.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:33:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42901.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42901.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42901.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42901.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42901.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用export LANG=zh_CN.UTF-8这样只下次重起又要重设置&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42901.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:33 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统下修改MySQL字符编码问题</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42899.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:32:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42899.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42899.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42899.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42899.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.在Linux系统中找到MySQL的安装文件夹，找到里面的my.ini文件<br><br>2.打开my.ini,里面有两处default-character-set <br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42899.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:32 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Linux系统下建立Samba用户</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42894.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:31:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42894.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42894.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42894.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.在Linux先建立系统用户 <br><br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42894.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:31 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将Linux加入Windows域的方法</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42895.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:31:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42895.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42895.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42895.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42895.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Samba3.0以上的版本提供了加入WindowsPDC域的命令net join，现在用它把Samba Server加入WindowsPDC，例如snoopy.echo是WindowsPDC域：&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42895.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:31 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux操作系统下激活网卡命令</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42892.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:30:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42892.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42892.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42892.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42892.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ifdown eth0 <br><br>ifup eth0 <br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42892.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:30 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统Shell入门命令介绍</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42888.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:29:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42888.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42888.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42888.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42888.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关机:halt,reboot,poweroff <br><br>小解: <br><br>halt停止系统运行,不关闭电源 <br><br>reboot重新启动系统 <br><br>poweroff停止系统运行,并关闭电源 <br><br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42888.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:29 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统下网卡网络配置基础</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/28/42887.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 28 Apr 2008 03:28:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/28/42887.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42887.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/28/42887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42887.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42887.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用netstat检查网络状态 <br>介绍一个很有用的命令——netstat，使用netstat命令可以监控TCP/IP网络配置和工作状况。它可以显示内核路由表、 活动的网络状态以及每个网络接口的有用的统计数字。<br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/windone0109/archive/2008/04/28/42887.html'>阅读全文</a><img src ="http://www.cnitblog.com/windone0109/aggbug/42887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-28 11:28 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/28/42887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux命令速查手册</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/23/42655.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 23 Apr 2008 09:02:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/23/42655.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42655.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/23/42655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42655.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42655.html</trackback:ping><description><![CDATA[<p>一. 启动,关机,登入,登出相关命令<br>&lt;login&gt; 登录<br>&lt;logout&gt; 登出<br>&lt;exit&gt; 登出<br>&lt;shutdown&gt; 停止系统<br>&lt;halt&gt; 停止系统<br>&lt;reboot&gt; 重启动<br>&lt;poweroff&gt; 切断电源<br>&lt;sync&gt; 把内存里的内容写入磁盘<br>&lt;lilo&gt; 安装lilo启动管理程序<br>&lt;grub&gt; 安装lilo启动管理程序
<p><br>二. Shell相关命令<br>&lt;chsh&gt; 切换Shell<br>&lt;history&gt; 显示命令履历<br>&lt;alias&gt; 设置命令别名<br>&lt;unalias&gt; 取消命令别名<br>&lt;which&gt; 显示命令所在位置<br>&lt;type&gt; 查询命令种类<br>&lt;echo&gt; 显示字符串或者变量内容<br>&lt;set&gt; 设置/显示Shell变量<br>&lt;printenv&gt; 显示环境变量<br>&lt;export&gt; 设置环境变量<br>&lt;env&gt; 设置临时环境变量<br>&lt;unset&gt; 释放环境变量<br>&lt;setenv&gt; 设置环境变量<br>&lt;unsetenv&gt; 释放环境变量<br>&lt;source&gt; 执行文件当中的命令<br>&lt;man&gt; 查询命令手册<br>&lt;info&gt; 查询超文本命令手册<br>&lt;whatis&gt; 显示命令简介<br>&lt;apropos&gt; 通过关键字查询手册
<p><br>三. 用户管理相关命令<br>&lt;su&gt; 切换到其他用户<br>&lt;useradd&gt; 追加用户<br>&lt;adduser&gt; 追加用户<br>&lt;userdel&gt; 删除用户<br>&lt;usermod&gt; 修改用户设置 <br>&lt;chfn&gt; 修改用户私人信息 <br>&lt;groupadd&gt; 追加组<br>&lt;groupdel&gt; 删除组<br>&lt;groupmod&gt; 修改组设置<br>&lt;passwd&gt; 更改密码<br>&lt;whoami&gt; 显示用户名<br>&lt;logname&gt; 显示登录用户帐号<br>&lt;users&gt; 显示所有登录用户信息<br>&lt;who&gt; 查询登录用户信息<br>&lt;w&gt; 查询登录用户信息<br>&lt;id&gt; 显示指定用户的ID信息<br>&lt;groups&gt; 显示指定用户的所属组<br>&lt;finger&gt; 显示指定用户的个人信息<br>&lt;mesg&gt; 开关与他人收发消息<br>&lt;write&gt; 给其他用户发消息<br>&lt;wall&gt; 给所有用户发消息<br>&lt;talk&gt; 和其他用户聊天
<p><br>四. 系统消息相关命令<br>&lt;date&gt; 显示/设置当前时间<br>&lt;uptime&gt; 显示系统运行时间<br>&lt;arch&gt; 显示机器的核心构架（如i386）<br>&lt;uname&gt; 显示操作系统信息<br>&lt;tty&gt; 显示终端名<br>&lt;last&gt; 显示登录/登出在履历<br>&lt;lastb&gt; 显示非法登录信息<br>&lt;dumpkeys&gt; 显示当前键盘配置<br>&lt;loadkeys&gt; 变更键盘配置<br>&lt;df&gt; 查询磁盘使用信息<br>&lt;du&gt; 查询磁盘使用信息<br>&lt;dmesg&gt; 显示系统启动消息<br>&lt;script&gt; 保存输入输出到文件
<p><br>五. 文件操作相关命令<br>&lt;ls&gt; 显示文件列表<br>&lt;tree&gt; 显示目录树 <br>&lt;pwd&gt; 显示当前路径<br>&lt;cd&gt; 更改当前路径<br>&lt;pushd&gt; 追加路径到目录堆栈<br>&lt;popd&gt; 从目录堆栈删除路径<br>&lt;dirs&gt; 显示目录堆栈的内容<br>&lt;mkdir&gt; 创建路径<br>&lt;rmdir&gt; 删除路径<br>&lt;cp&gt; 复制文件/目录<br>&lt;rm&gt; 删除文件/目录<br>&lt;mv&gt; 移动文件/目录，修改文件名<br>&lt;chown&gt; 更改文件/目录的所有者<br>&lt;chgrp&gt; 修改文件/目录的所有组<br>&lt;chmod&gt; 修改文件/目录的权限<br>&lt;touch&gt; 更改文件时间<br>&lt;ln&gt; 建立文件/目录链接<br>&lt;find&gt; 查找文件<br>&lt;whereis&gt; 显示文件存在的路径名<br>&lt;file&gt; 查询文件种类<br>&lt;size&gt; 查询文件大小
<p><br>六. 文件编辑相关命令<br>&lt;cat&gt; 显示文件内容<br>&lt;tee&gt; 输出到文件和屏幕<br>&lt;more&gt; 分屏显示文件内容<br>&lt;less&gt; 分屏显示文件内容<br>&lt;head&gt; 显示文件头部内容<br>&lt;tail&gt; 显示文件尾部内容<br>&lt;fold&gt; 折叠显示长行<br>&lt;sort&gt; 排列文件的行<br>&lt;cmp&gt; 比较文件内容<br>&lt;diff&gt; 显示文件差异<br>&lt;nkf&gt; 更改日语文件编码<br>&lt;dd&gt; 变更文件之后复制<br>&lt;wc&gt; 统计文本单词数，文件大小等<br>&lt;split&gt; 分割文件<br>&lt;paste&gt; 以行连接文件<br>&lt;join&gt; 以字段连接文件<br>&lt;grep&gt; 查询文字<br>&lt;uniq&gt; 过滤重复部分显示文件内容<br>&lt;tr&gt; 替换文字<br>&lt;sed&gt; 替换文字
<p><br>七. 压缩/解压缩相关命令<br>&lt;ar&gt; 压缩/解压缩文件<br>&lt;tar&gt; 压缩/解压缩文件<br>&lt;compress&gt; 压缩/解压缩文件<br>&lt;uncompress&gt; 解压缩<br>&lt;gzip&gt; 压缩/解压缩文件<br>&lt;gunzip&gt; 解压缩<br>&lt;zcat&gt; 显示压缩文件的内容<br>&lt;lha&gt; 压缩/解压缩文件<br>&lt;uuencode&gt; 把二进制文件编码为文本文件<br>&lt;uudecode&gt; 把经过编码的文本文件还原为二进制文件
<p><br>八. MS-DOS工具集[mtools]命令<br>&lt;mdir&gt; 显示文件列表<br>&lt;mcd&gt; 改变当前目录<br>&lt;mmd&gt; 新建目录<br>&lt;mrd&gt; 删除目录<br>&lt;mdeltree&gt; 删除目录树<br>&lt;mcopy&gt; 复制文件<br>&lt;mdel&gt; 删除文件<br>&lt;mmove&gt; 移动文件<br>&lt;mren&gt; 更改文件或目录名<br>&lt;mattrib&gt; 修改文件属性<br>&lt;mtype&gt; 显示文件内容<br>&lt;mdu&gt; 查询文件或目录大小<br>&lt;minfo&gt; 显示磁盘信息<br>&lt;mformat&gt; 以MS-DOS方式格式化磁盘<br>&lt;mlabel&gt; 设置磁盘标签
<p><br>九. 控制外部设备相关命令<br>&lt;mount&gt; mount上设备<br>&lt;umount&gt; 解除已经mount上的设备<br>&lt;eject&gt; 弹出（CD/DVD等）<br>&lt;fdformat&gt; 格式化软盘<br>&lt;fdisk&gt; 配置/显示硬盘分区<br>&lt;mkfs&gt; 格式化磁盘分区<br>&lt;fsck&gt; 检查/修复磁盘错误<br>&lt;lpr&gt; 打印到打印机<br>&lt;lprm&gt; 中断打印任务<br>&lt;lpq&gt; 显示打印任务的状态<br>&lt;lpc&gt; 管理/控制打印任务<br>&lt;ifconfig&gt; 显示/设定NIC配置
<p><br>十. 进程及任务管理相关命令<br>&lt;ps&gt; 显示正在运行的进程<br>&lt;jobs&gt; 显示后台运行任务<br>&lt;fg&gt; 把任务切换到前台<br>&lt;bg&gt; 把任务切换到后台<br>&lt;kill&gt; 中止进程或任务<br>&lt;killall&gt; 中止进程或任务<br>&lt;wait&gt; 等待进程或任务的结束<br>&lt;at&gt; 设置定时执行任务<br>&lt;atq&gt; 显示尚未执行的任务<br>&lt;atrm&gt; 删除定时执行任务<br>&lt;batch&gt; 在系统负荷减轻的时候执行任务<br>&lt;nice&gt; 改变优先度并执行任务<br>&lt;nohup&gt; 在后台执行任务，Logout之后也不退出<br>&lt;sleep&gt; 休眠一定的时间
<p><br>十一. 网络管理相关命令<br>&lt;netstat&gt; 显示当前网络连接状况<br>&lt;route&gt; 显示/设置路由<br>&lt;host&gt; 显示网络主机情况<br>&lt;hostname&gt; 显示/设置当前主机的名字<br>&lt;ping&gt; 确认和远程机器的连接情况<br>&lt;traceroute&gt; 显示路由信息<br>&lt;rwho&gt; 查询网上机器的登陆用户<br>&lt;ruptime&gt; 查询网上机器的系统运行时间<br>&lt;rlogin&gt; 登陆到远程机器<br>&lt;telnet&gt; 用telnet登陆到远程机器<br>&lt;rsh&gt; 给远程机器发送命令<br>&lt;rcp&gt; 在远程机器之间复制文件<br>&lt;mail&gt; 收取邮件<br>&lt;sendmail&gt; 发送邮件<br>&lt;mailq&gt; 确认邮件队列<br>&lt;ftp&gt; 用ftp传输文件
<p><br>十一. 其他命令<br>&lt;cal&gt; 显示日历<br>&lt;clear&gt; 清屏<br>&lt;gcc&gt; 编译C语言代码<br>&lt;as&gt; 汇编<br>&lt;bc&gt; 计算<br>&lt;rpm&gt; Redhat的包管理<br>&lt;dpkg&gt; Debian的包管理<br>&lt;installpkg&gt; Slackware的包安装（删除命令则是removepkg）<br>&lt;XF86Setup,turboxfg,Xconfigurator&gt; 配置 X 服务器<br>&lt;startx&gt; 启动 X-Window 系统<br>附：组合命令<br>重定向，如<br>$ ls -l /bin &gt; ls-output<br>$ more ls-output<br>管道命令，如<br>$ cat file1 file2 | sort | uniq<br>经常被用于管道的命令<br>awk, fold, grep, head, nnkf, pr, sed, sort, tail, tee, tr, uniq, wc </p><img src ="http://www.cnitblog.com/windone0109/aggbug/42655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-23 17:02 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/23/42655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chmod命令详解</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/23/42654.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 23 Apr 2008 09:01:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/23/42654.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42654.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/23/42654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42654.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42654.html</trackback:ping><description><![CDATA[<p>指令名称&nbsp;:&nbsp;chmod <br>使用权限&nbsp;:&nbsp;所有使用者 <br>使用方式&nbsp;:&nbsp;chmod&nbsp;[-cfvR]&nbsp;[--help]&nbsp;[--version]&nbsp;mode&nbsp;file... <br>说明&nbsp;:&nbsp;Linux/Unix&nbsp;的档案调用权限分为三级&nbsp;:&nbsp;档案拥有者、群组、其他。利用&nbsp;chmod&nbsp;可以藉以控制档案如何被他人所调用。
<p><br>参数&nbsp;: <br>mode&nbsp;:&nbsp;权限设定字串，格式如下&nbsp;:&nbsp;[ugoa...][[+-=][rwxX]...][,...]，其中 <br>u&nbsp;表示该档案的拥有者，g&nbsp;表示与该档案的拥有者属于同一个群体(group)者，o&nbsp;表示其他以外的人，a&nbsp;表示这三者皆是。 <br>+&nbsp;表示增加权限、-&nbsp;表示取消权限、=&nbsp;表示唯一设定权限。 <br>r&nbsp;表示可读取，w&nbsp;表示可写入，x&nbsp;表示可执行，X&nbsp;表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 <br>
<p>-c&nbsp;:&nbsp;若该档案权限确实已经更改，才显示其更改动作 <br>-f&nbsp;:&nbsp;若该档案权限无法被更改也不要显示错误讯息 <br>-v&nbsp;:&nbsp;显示权限变更的详细资料 <br>-R&nbsp;:&nbsp;对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) <br>--help&nbsp;:&nbsp;显示辅助说明 <br>--version&nbsp;:&nbsp;显示版本 <br>
<p>范例&nbsp;:将档案&nbsp;file1.txt&nbsp;设为所有人皆可读取&nbsp;: <br>chmod&nbsp;ugo+r&nbsp;file1.txt&nbsp; <br>
<p>将档案&nbsp;file1.txt&nbsp;设为所有人皆可读取&nbsp;: <br>chmod&nbsp;a+r&nbsp;file1.txt&nbsp; <br>
<p>将档案&nbsp;file1.txt&nbsp;与&nbsp;file2.txt&nbsp;设为该档案拥有者，与其所属同一个群体者可写入，但其他以外的人则不可写入&nbsp;: <br>chmod&nbsp;ug+w,o-w&nbsp;file1.txt&nbsp;file2.txt&nbsp; <br>
<p>将&nbsp;ex1.py&nbsp;设定为只有该档案拥有者可以执行&nbsp;: <br>chmod&nbsp;u+x&nbsp;ex1.py&nbsp; <br>
<p>将目前目录下的所有档案与子目录皆设为任何人可读取&nbsp;: <br>chmod&nbsp;-R&nbsp;a+r&nbsp;*&nbsp; <br>
<p>此外chmod也可以用数字来表示权限如&nbsp;chmod&nbsp;777&nbsp;file <br>
<p>语法为：chmod&nbsp;abc&nbsp;file <br>其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。 <br>r=4，w=2，x=1 <br>若要rwx属性则4+2+1=7； <br>若要rw-属性则4+2=6； <br>若要r-x属性则4+1=7。 <br>
<p>范例： <br>chmod&nbsp;a=rwx&nbsp;file&nbsp; <br>和 <br>chmod&nbsp;777&nbsp;file&nbsp; <br>效果相同 <br>chmod&nbsp;ug=rwx,o=x&nbsp;file&nbsp; <br>和 <br>chmod&nbsp;771&nbsp;file&nbsp; <br>效果相同 <br>
<p>若用chmod&nbsp;4755&nbsp;filename可使此程序具有root的权限</p><img src ="http://www.cnitblog.com/windone0109/aggbug/42654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-23 17:01 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/23/42654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux动态库(.so)搜索路径</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/23/42653.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 23 Apr 2008 08:57:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/23/42653.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42653.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/23/42653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42653.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42653.html</trackback:ping><description><![CDATA[<p>众所周知，Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后，一般都复制到这两个目录中。当程序执行时需要某动态库，并且该 动 态库还未加载到内存中，则系统会自动到这两个默认搜索路径中去查找相应的动态库文件，然后加载该文件到内存中，这样程序就可以使用该动态库中的函数，以及 该动态库的其它资源了。在Linux 中，动态库的搜索路径除了默认的搜索路径外，还可以通过以下三种方法来指定。
<p>方法一：在配置文件/etc/ld.so.conf中指定动态库搜索路径。
<p>可以通过编辑配置文件/etc/ld.so.conf来指定动态库的搜索路径，该文件中每行为一个动态库搜索路径。每次编辑完该文件后，都必须运行命令ldconfig使修改后的配置生效。我们通过例1来说明该方法。
<p>例1：
<p>我们通过以下命令用源程序pos_conf.c（见程序1）来创建动态库 libpos.so，详细创建过程请参考文[1]。
<p># gcc -c pos_conf.c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # gcc -shared -fPCI -o libpos.so pos_conf.o<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>#include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void pos()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("/root/test/conf/lib\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序1: pos_conf.c
<p>接着通过以下命令编译main.c（见程序2）生成目标程序pos。
<p># gcc -o pos main.c -L. -lpos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>void pos();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序2: main.c
<p>然后把库文件移动到目录/root/test/conf/lib中。
<p># mkdir -p /root/test/conf/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # mv libpos.so /root/test/conf/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>最后编辑配置文件/etc/ld.so.conf，在该文件中追加一行"/root/test/conf/lib"。
<p>运行程序pos试试。
<p># ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./pos: error while loading shared libraries: libpos.so: cannot open shared object file: No such file or directory<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>出错了，系统未找到动态库libpos.so。找找原因，原来在编辑完配置文件/etc/ld.so.conf后，没有运行命令ldconfig，所以刚才的修改还未生效。我们运行ldconfig后再试试。
<p># ldconfig<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /root/test/conf/lib <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>程序pos运行成功，并且打印出正确结果。
<p>方法二：通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
<p>通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时，路径之间用冒号"："分隔。下面通过例2来说明本方法。
<p>例2：
<p>我们通过以下命令用源程序pos_env.c（见程序3）来创建动态库libpos.so。
<p># gcc -c pos_env.c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # gcc -shared -fPCI -o libpos.so pos_env.o<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>#include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void pos()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("/root/test/env/lib\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序3: pos_env.c
<p>测试用的可执行文件pos可以使用例1中的得到的目标程序pos，不需要再次编译。因为pos_conf.c中的函数pos和pos_env.c中的函数pos 函数原型一致，且动态库名相同，这就好比修改动态库pos后重新创建该库一样。这也是使用动态库的优点之一。
<p>然后把动态库libpos.so移动到目录/root/test/conf/lib中。
<p># mkdir -p /root/test/env/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # mv libpos.so /root/test/env/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>我们可以使用export来设置该环境变量，在设置该环境变量后所有的命令中，该环境变量都有效。
<p>例如：
<p># export LD_LIBRARY_PATH=/root/test/env/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>但本文为了举例方便，使用另一种设置环境变量的方法，既在命令前加环境变量设置，该环境变量只对该命令有效，当该命令执行完成后，该环境变量就无效了。如下述命令：
<p># LD_LIBRARY_PATH=/root/test/env/lib ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /root/test/env/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>程序pos运行成功，并且打印的结果是"/root/test/env/lib"，正是程序pos_env.c中的函数pos的运行结果。因此程序pos搜索到的动态库是/root/test/env/lib/libpos.so。
<p>方法三：在编译目标代码时指定该程序的动态库搜索路径。
<p>还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数"-Wl,-rpath,"指定（如例3所示）。当指定多个动态库搜索路径时，路径之间用冒号"："分隔。
<p>例3：
<p>我们通过以下命令用源程序pos.c（见程序4）来创建动态库libpos.so。
<p># gcc -c pos.c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # gcc -shared -fPCI -o libpos.so pos.o<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>#include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void pos()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("./\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序4: pos.c
<p>因为我们需要在编译目标代码时指定可执行文件的动态库搜索路径，所以需要用gcc命令重新编译源程序main.c(见程序2)来生成可执行文件pos。
<p># gcc -o pos main.c -L. -lpos -Wl,-rpath,./<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>再运行程序pos试试。
<p># ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>程序pos运行成功，输出的结果正是pos.c中的函数pos的运行结果。因此程序pos搜索到的动态库是./libpos.so。
<p>以上介绍了三种指定动态库搜索路径的方法，加上默认的动态库搜索路径/lib和/usr/lib，共五种动态库的搜索路径，那么它们搜索的先后顺序是什么呢？
<p>在 介绍上述三种方法时，分别创建了动态库./libpos.so、 /root/test/env/lib/libpos.so和/root/test/conf/lib/libpos.so。我们再用源程序 pos_lib.c（见程序5）来创建动态库/lib/libpos.so，用源程序pos_usrlib.c（见程序6）来创建动态库 /usr/lib/libpos.so。
<p>#include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void pos()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("/lib\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序5: pos_lib.c
<p>#include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void pos()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("/usr/lib\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序6: pos_usrlib.c
<p>这 样我们得到五个动态库libpos.so，这些动态库的名字相同，且都包含相同函数原型的公用函数pos。但存储的位置不同和公用函数pos 打印的结果不同。每个动态库中的公用函数pos都输出该动态库所存放的位置。这样我们可以通过执行例3中的可执行文件pos得到的结果不同获知其搜索到了 哪个动态库，从而获得第1个动态库搜索顺序，然后删除该动态库，再执行程序pos，获得第2个动态库搜索路径，再删除第2个被搜索到的动态库，如此往复， 将可得到Linux搜索动态库的先后顺序。程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示：
<p>程序pos输出结果<br>使用的动态库<br>对应的动态库搜索路径指定方式
<p>./<br>./libpos.so<br>编译目标代码时指定的动态库搜索路径
<p>/root/test/env/lib<br>/root/test/env/lib/libpos.so<br>环境变量LD_LIBRARY_PATH指定的动态库搜索路径
<p>/root/test/conf/lib<br>/root/test/conf/lib/libpos.so<br>配置文件/etc/ld.so.conf中指定的动态库搜索路径
<p>/lib<br>/lib/libpos.so<br>默认的动态库搜索路径/lib
<p>/usr/lib<br>/usr/lib/libpos.so<br>默认的动态库搜索路径/usr/lib
<p>表1: 程序pos输出结果和动态库的对应关系
<p>创建各个动态库，并放置在相应的目录中。测试环境就准备好了。执行程序pos，并在该命令行中设置环境变量LD_LIBRARY_PATH。
<p># LD_LIBRARY_PATH=/root/test/env/lib ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>根据程序pos的输出结果可知，最先搜索的是编译目标代码时指定的动态库搜索路径。然后我们把动态库./libpos.so删除了，再运行上述命令试试。
<p># rm libpos.so<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm: remove regular file `libpos.so'? y<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # LD_LIBRARY_PATH=/root/test/env/lib ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /root/test/env/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>根据程序pos的输出结果可知，第2个动态库搜索的路径是环境变量LD_LIBRARY_PATH指定的。我们再把/root/test/env/lib/libpos.so删除，运行上述命令。
<p># rm /root/test/env/lib/libpos.so<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm: remove regular file `/root/test/env/lib/libpos.so'? y<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # LD_LIBRARY_PATH=/root/test/env/lib ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /root/test/conf/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>第3个动态库的搜索路径是配置文件/etc/ld.so.conf指定的路径。删除动态库/root/test/conf/lib/libpos.so后再运行上述命令。
<p># rm /root/test/conf/lib/libpos.so<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm: remove regular file `/root/test/conf/lib/libpos.so'? y<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # LD_LIBRARY_PATH=/root/test/env/lib ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>第4个动态库的搜索路径是默认搜索路径/lib。我们再删除动态库/lib/libpos.so，运行上述命令。
<p># rm /lib/libpos.so<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm: remove regular file `/lib/libpos.so'? y<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # LD_LIBRARY_PATH=/root/test/env/lib ./pos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/lib<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
<p>最后的动态库搜索路径是默认搜索路径/usr/lib。
<p>综合以上结果可知，动态库的搜索路径搜索的先后顺序是：
<p>1.编译目标代码时指定的动态库搜索路径；
<p>2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径；
<p>3.配置文件/etc/ld.so.conf中指定的动态库搜索路径；
<p>4.默认的动态库搜索路径/lib；
<p>5.默认的动态库搜索路径/usr/lib。
<p>在上述1、2、3指定动态库搜索路径时，都可指定多个动态库搜索路径，其搜索的先后顺序是按指定路径的先后顺序搜索的。对此本文不再举例说明，有兴趣的读者可以参照本文的方法验证。 </p><img src ="http://www.cnitblog.com/windone0109/aggbug/42653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-23 16:57 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/23/42653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>init.d，rc.d详解   Linux运行时详解</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/23/42651.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 23 Apr 2008 08:43:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/23/42651.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42651.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/23/42651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42651.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42651.html</trackback:ping><description><![CDATA[<p>Linux 启动时需要哪些步骤呢？本文将详细描述不同的运行级在启动中的作用。<br>对于那些在DOS/Win9x/NT 平台下的高级用户而言，Linux 似乎是一个怪物。没有config.sys ，没有 autoexec.bat，具有个人特色的机器配置不知道从何开始。<br>需要说明的是，很多人认为Linux 是Unix 的一个克隆，但是，这种说法对于Linux 是不公平的。Linux 比Unix更加开放，功能更强大。我们应该称之为GNU/Linux 。
<p><br>Linux 启动时，运行一个叫做init 的程序，然后由它来启动后面的任务，包括多用户环境，网络等。<br>那么，到底什么是运行级呢？简单的说，运行级就是操作系统当前正在运行的功能级别。这个级别从1 到6 ，具有不同的功能。这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件，最先运行的服务是那些放在/etc/rc.d 目录下的文件。<br>大多数的Linux 发行版本中，启动的是/etc/rc.d/init.d。这些脚本被ln 命令来连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)<br>例如/etc/rc.d/rc2.d 下面的S10network 就是连接到/etc/rc.d/init.d下的network 脚本的。<br>因此，我们可以知道，rc2.d 下面的文件就是和运行级2 有关的。<br>
<p>文件开头的S 代表start 就是启动服务的意思，后面的数字10 就是启动的顺序。例如，在同一个目录下，你还可以看到 S80postfix 这个文件，80 就是顺序在 10 以后，因为没有启动网络的情况下，启动postfix 是没有任何作用的。<br>再看一下 /etc/rc.d/rc3.d，可以看到文件S60nfslock，但是这个文件不存在于 /etc/rc.d/rc2.d 目录下。NFS 要用到这个文件，一般用在多用户环境下，所以放在rc3.d 目录下。<br>
<p>另外，在/etc/rc.d/rc2.d 还可以看到那些K 开头的文件，例如<br>/etc/rc.d/rc2.d/K45named ，K 代表 kill 。<br>标准的Linux运行级为3 或者5 ，如果是3 的话，系统就在多用户状态。如果是5的话，则是运行着X Window 系统。如果目前正在3或5，而你把运行级降低到2的话，init 就会执行 K45named 脚本。<br>不同的运行级定义如下：(可以参考Red Hat Linux 里面的/etc/inittab）<br>
<p># 缺省的运行级，RHS 用到的级别如下：<br># 0 - 停机（千万不要把initdefault 设置为0 ）<br># 1 - 单用户模式<br># 2 - 多用户，但是没有 NFS <br># 3 - 完全多用户模式<br># 4 - 没有用到<br># 5 - X11 <br># 6 - 重新启动 （千万不要把initdefault 设置为6 ）<br># <br>对各个运行级的详细解释：<br>0 为停机，机器关闭。<br>1 为单用户模式，就像Win9x 下的安全模式类似。<br>2 为多用户模式，但是没有NFS 支持。<br>3 为完整的多用户模式，是标准的运行级。<br>4 一般不用，在一些特殊情况下可以用它来做一些事情。<br>例如在笔记本电脑的电池用尽时，可以切换到这个模式来做一些设置。<br>5 就是 X11 ，进到 X Window 系统了。<br>6 为重启，运行 init 6 机器就会重启。<br>不同的运行级有不同的用处，也应该根据自己的不同情形来设置。例如，如果丢失了root 口令，那么可以让机器启动进入单用户状态来设置。在启动后的 lilo 提示符下输入：<br>init=/bin/sh rw <br>就可以使机器进入运行级1 ，并把 root 文件系统挂为读写。他会跳过所有系统认证，让你使用passwd 程序来改变root口令，然后启动到一个新的运行级。</p><img src ="http://www.cnitblog.com/windone0109/aggbug/42651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-23 16:43 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/23/42651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vi指令大全</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/09/42174.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 09 Apr 2008 08:15:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/09/42174.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42174.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/09/42174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42174.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42174.html</trackback:ping><description><![CDATA[进入vi的命令<br>============<br>vi filename: 打开或新建文件，并将光标置于第一行首<br>vi +n filename: 打开文件，并将光标置于第n行首<br>vi + filename: 打开文件，并将光标置于最后一行首<br>vi +/pattern filename: 打开文件，并将光标置于第一个与pattern匹配的串处<br>vi -r filename: 在上次正用vi编辑时发生系统崩溃，恢复filename<br>vi filename....filename: 打开多个文件，依次进行编辑
<p>移动光标类命令<br>==============<br>h: 光标左移一个字符<br>l: 光标右移一个字符<br>space: 光标右移一个字符<br>Backspace: 光标左移一个字符<br>k或Ctrl+p: 光标上移一行<br>j或Ctrl+n: 光标下移一行<br>Enter: 光标下移一行<br>w或W : 光标右移一个字至字首<br>b或B : 光标左移一个字至字首<br>e或E : 光标右移一个字至字尾<br>): 光标移至句尾<br>(: 光标移至句首<br>}: 光标移至段落开头<br>{: 光标移至段落结尾<br>nG: 光标移至第n行首<br>n+: 光标下移n行<br>n-: 光标上移n行<br>n$: 光标移至第n行尾<br>H: 光标移至屏幕顶行<br>M: 光标移至屏幕中间行<br>L: 光标移至屏幕最后行<br>0: 光标移至当前行首<br>$: 光标移至当前行尾</p>
<p>屏幕翻滚类命令<br>==============<br>Ctrl+u: 向文件首翻半屏<br>Ctrl+d: 向文件尾翻半屏<br>Ctrl+f: 向文件尾翻一屏<br>Ctrl＋b: 向文件首翻一屏<br>nz: 将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。</p>
<p>插入文本类命令<br>==============<br>i: 在光标前<br>I: 在当前行首<br>a: 光标后<br>A: 在当前行尾<br>o: 在当前行之下新开一行<br>O: 在当前行之上新开一行<br>r: 替换当前字符<br>R: 替换当前字符及其后的字符，直至按ESC键<br>s: 从当前光标位置处开始，以输入的文本替代指定数目的字符<br>S: 删除指定数目的行，并以所输入文本代替之<br>ncw或nCW: 修改指定数目的字<br>nCC: 修改指定数目的行</p>
<p>删除命令<br>========<br>ndw或ndW: 删除光标处开始及其后的n-1个字<br>do: 删至行首<br>d$: 删至行尾<br>ndd: 删除当前行及其后n-1行<br>x或X: 删除一个字符，x删除光标后的，而X删除光标前的<br>Ctrl+u: 删除输入方式下所输入的文本</p>
<p>搜索及替换命令<br>==============<br>/pattern: 从光标开始处向文件尾搜索pattern<br>?pattern: 从光标开始处向文件首搜索pattern<br>n: 在同一方向重复上一次搜索命令<br>N: 在反方向上重复上一次搜索命令<br>:s/p1/p2/g: 将当前行中所有p1均用p2替代<br>:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代<br>:g/p1/s//p2/g: 将文件中所有p1均用p2替换</p>
<p>选项设置<br>========<br>all: 列出所有选项设置情况<br>term: 设置终端类型<br>ignorance: 在搜索中忽略大小写<br>list: 显示制表位(Ctrl+I)和行尾标志($)<br>number: 显示行号<br>report: 显示由面向行的命令修改过的数目<br>terse: 显示简短的警告信息<br>warn: 在转到别的文件时若没保存当前文件则显示NO write信息<br>nomagic: 允许在搜索模式中，使用前面不带&#8220;\&#8221;的特殊字符<br>nowrapscan: 禁止vi在搜索到达文件两端时，又从另一端开始<br>mesg: 允许vi显示其他用户用write写到自己终端上的信息</p>
<p>最后行方式命令<br>==============<br>:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下<br>:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下<br>:n1,n2 d: 将 n1行到n2行之间的内容删除<br>:w: 保存当前文件<br>:e filename: 打开文件filename进行编辑<br>:x: 保存当前文件并退出<br>:q: 退出vi<br>:q!: 不保存文件并退出vi<br>:!command: 执行shell命令command<br>:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入<br>:r!command: 将命令command的输出结果放到当前行</p>
<p>寄存器操作<br>==========<br>"?nyy: 将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字<br>"?nyw: 将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字<br>"?nyl: 将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字<br>"?p: 取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字<br>ndd: 将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中</p><img src ="http://www.cnitblog.com/windone0109/aggbug/42174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-09 16:15 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/09/42174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux top命令详解</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/09/42171.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 09 Apr 2008 08:05:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/09/42171.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42171.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/09/42171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42171.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42171.html</trackback:ping><description><![CDATA[top命令和ps命令的基本作用是相同的，显示系统当前的进程和其它状况；但是top是一个动态显示过程，即可以通过用户按键来不断刷新当前状态。如? 前台执行该命令，它将独占前台，直到用户终止该程序为止。<br><br>比较准确的说，top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最&#8220;敏感&#8221;的任务列表。该命令可以按CPU使用、内存使用、执行时间对任务进行排序；而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。<br><br><span style="FONT-WEIGHT: bold">top命令语法</span>：<br>top [-] [d delay] [q] [c] [s] [S] [i]<br><br>&nbsp;&nbsp;&nbsp;&nbsp; d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
<p>　　q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限，那么top将以尽可能高的优先级运行。</p>
<p>　　S 指定累计模式。</p>
<p>　　s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。</p>
<p>　　i 使top不显示任何闲置或者僵死进程。</p>
<p>　　c 显示整个命令行而不只是显示命令名。(进程的command列显示进程的对应命令行或命令名)</p>
<span style="FONT-WEIGHT: bold">top命令结果详解：</span><br><br>top命令显示的项目很多，默认值是每5秒更新一次。显示的各项目为：<br><br><span style="COLOR: rgb(51,153,153)">15:06:57&nbsp;&nbsp; up 129 days, 19:03,&nbsp;&nbsp; 5 users,&nbsp;&nbsp; load average: 1.21, 1.20, 1.25</span><br>
<p>uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值（最近1秒，5秒，15秒的负载值）。</p>
<p style="COLOR: rgb(51,153,153)">222 processes: 219 sleeping, 2 running, 1 zombie, 0 stopped</p>
<p>processes 自最近一次刷新以来的运行进程总数。这些进程被分为正在运行的，休眠的，停止的等很多种类。</p>
<p><span style="COLOR: rgb(51,153,153)">CPU states:&nbsp;&nbsp; cpu&nbsp;&nbsp;&nbsp;&nbsp; user&nbsp;&nbsp;&nbsp;&nbsp; nice&nbsp;&nbsp; system&nbsp;&nbsp;&nbsp;&nbsp; irq&nbsp;&nbsp; softirq&nbsp;&nbsp; iowait&nbsp;&nbsp;&nbsp;&nbsp; idle</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total&nbsp;&nbsp;&nbsp;&nbsp; 0.9%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 27.4%&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.2%&nbsp;&nbsp;&nbsp; 71.2%</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu00&nbsp;&nbsp;&nbsp;&nbsp; 1.9%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 19.4%&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 78.6%</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu01&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 33.0%&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 66.9%</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu02&nbsp;&nbsp;&nbsp;&nbsp; 1.9%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 22.3%&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.9%&nbsp;&nbsp;&nbsp; 74.7%</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu03&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 35.2%&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp;&nbsp; 0.0%&nbsp;&nbsp;&nbsp; 64.7%</span><br></p>
<p>CPU states 显示用户模式，系统模式，优先级进程（只有优先级为负的列入考虑）和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中，所以总的百分比将大于100％。</p>
<span style="COLOR: rgb(51,153,153)">Mem:&nbsp;&nbsp; 16214336k av, 15682832k used,&nbsp;&nbsp; 531504k free,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0k shrd,&nbsp;&nbsp; 215016k buff</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10896844k actv, 3379680k in_d,&nbsp;&nbsp; 446432k in_c</span><br><br>Mem 内存使用情况统计，其中包括总的可用内存，空闲内存，已用内存，共享内存和缓存所占内存的情况。<br><br><span style="COLOR: rgb(51,153,153)">Swap: 10482404k av,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0k used, 10482404k free&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14856500k cached</span><br style="COLOR: rgb(51,153,153)">
<p>Swap 交换空间统计，其中包括总的交换空间，可用交换空间，已用交换空间。</p>
<p style="COLOR: rgb(51,153,153)">PID USER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRI&nbsp;&nbsp; NI&nbsp;&nbsp; SIZE&nbsp;&nbsp; RSS SHARE STAT %CPU %MEM&nbsp;&nbsp;&nbsp; TIME CPU COMMAND<br></p>
<p><span style="COLOR: rgb(51,153,153)">27869 root&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 460M 460M&nbsp;&nbsp; 455M R&nbsp;&nbsp;&nbsp;&nbsp; 25.0&nbsp;&nbsp; 2.9 12559m&nbsp;&nbsp;&nbsp; 1 vmware-vmx</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">31819 root&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 6016 6016&nbsp;&nbsp; 5048 S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6&nbsp;&nbsp; 0.0 17573m&nbsp;&nbsp;&nbsp; 2 magicdev</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">27837 root&nbsp;&nbsp;&nbsp; 15 -10&nbsp;&nbsp; 460M 460M&nbsp;&nbsp; 455M S &lt;&nbsp;&nbsp;&nbsp; 0.7&nbsp;&nbsp; 2.9&nbsp;&nbsp; 1328m&nbsp;&nbsp;&nbsp; 0 vmware-vmx</span><br style="COLOR: rgb(51,153,153)"><span style="COLOR: rgb(51,153,153)">27868 root&nbsp;&nbsp;&nbsp; 15 -10&nbsp;&nbsp; 460M 460M&nbsp;&nbsp; 455M S &lt;&nbsp;&nbsp;&nbsp; 0.3&nbsp;&nbsp; 2.9 644:35&nbsp;&nbsp;&nbsp; 3 vmware-vmx</span><br></p>
<p>PID 每个进程的ID。PPID 每个进程的父进程ID。UID 每个进程所有者的UID 。</p>
<p>USER 每个进程所有者的用户名。</p>
<p>PRI 每个进程的优先级别。</p>
<p>NI 该进程的优先级值。 </p>
<p>SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。 </p>
<p>TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。 </p>
<p>DSIZE 数据和堆栈的大小。</p>
<p>TRS 文本驻留大小。</p>
<p>D 被标记为&#8220;不干净&#8221;的页项目。</p>
<p>LIB 使用的库页的大小。对于ELF进程没有作用。</p>
<p>RES 该进程占用的物理内存的总数量，单位是KB。</p>
<p>SHARE 该进程使用共享内存的数量。 </p>
<p>STAT 该进程的状态。其中S代表休眠状态；D代表不可中断的休眠状态；R代表运行状态；Z代表僵死状态；T代表停止或跟踪状态。</p>
<p>TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式，那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。</p>
<p>％CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。</p>
<p>％MEM 该进程占用的物理内存占总内存的百分比。</p>
<p>COMMAND 该进程的命令名称，如果一行显示不下，则会进行截取。内存中的进程会有一个完整的命令行。</p>
<span style="FONT-WEIGHT: bold">top交互命令选项</span><br><br>Ctrl+L 擦除并且重写屏幕。
<p>h或者? 显示帮助画面，给出一些简短的命令总结说明。</p>
k 终止一个进程。系统将提示用户输入需要终止的进程PID，以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号；如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽.<br><br>i 忽略闲置和僵死进程。这是一个开关式命令。
<p>q 退出程序。</p>
r 重新安排一个进程的优先级别。<br><br>S 切换到累计模式。
<p>s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间，单位为s。如果有小数，就换算成m s。输入0值则系统将不断刷新，默认值是5 s。需要注意的是如果设置太小的时间，很可能会引起不断刷新，从而根本来不及看清显示的情况，而且系统负载也会大大增加。</p>
<p>f或者F 从当前显示中添加或者删除项目。</p>
<p>o或者O 改变显示项目的顺序。</p>
<p>l 切换显示平均负载和启动时间信息。</p>
<p>m 切换显示内存信息。</p>
<p>t 切换显示进程和CPU状态信息。</p>
<p>c 切换显示命令名称和完整命令行。</p>
<p>M 根据驻留内存大小进行排序。</p>
<p>P 根据CPU使用百分比大小进行排序。</p>
<p>T 根据时间/累计时间进行排序。</p>
<p>W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。</p><img src ="http://www.cnitblog.com/windone0109/aggbug/42171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-09 16:05 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/09/42171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下mysql整个数据库的备份和还原</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/07/42056.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 07 Apr 2008 04:25:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/07/42056.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42056.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/07/42056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42056.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42056.html</trackback:ping><description><![CDATA[<p><br>[root]# /usr/bin/mysqldump -h127.0.0.1 -uusername -ppassword databasename &gt;/opt/share/1/backup.sql</p>
<p>/usr/bin/mysqldump:用于执行的程序； <br>-h：主机名称 <br>-u：数据库用户 <br>-p：数据库密码 <br>databasename：数据库名称 <br>&gt;/opt/share/1/backup.sql：导出文件的保存名称 <br>以这样的方式导出的文件打开后发现里面有乱码，这个是正常的，是因为导出时没有设置字体的缘故，这个不影响数据库内容的备份和还原。<br></p>
<p><br>然后使用<br>[root]# /usr/bin/mysql -h127.0.0.1 -uusername -ppassword databasename2 &lt;/opt/share/1/backup.sql<br>导入数据到databasename2中<br><br>OK，完工！</p><img src ="http://www.cnitblog.com/windone0109/aggbug/42056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-07 12:25 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/07/42056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用mysql数据库的mysqldump实现自动备份</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/07/42053.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 07 Apr 2008 03:41:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/07/42053.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42053.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/07/42053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42053.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42053.html</trackback:ping><description><![CDATA[<br><br>
<p align=left>使用mysql数据库的mysqldump工具，可以实现数据库的备份功能，如果在linux系统中配置好crontabs,就可以实现自动备份！</p>
<p><font color=#006400><font color=#a52a2a>#!/bin/bash</font><br></font>##配置原数据库连接信息，即正在使用需要备份数据库机器。<br><font color=#a52a2a>SOURCE_USER=-uroot</font><br>##如果就是在本机ip，即SOURCE_HOST=-h127.0.0.1<br><font color=#a52a2a>SOURCE_HOST=-h10.10.10.12<br>SOURCE_PASS=-padministrator</font></p>
<p>##配置备份数据库的连接信息，即用于备份的数据库机器<br><font color=#a52a2a>BAK_USER=-uroot<br></font>##用于备份的数据库机器ip<br><font color=#a52a2a>BAK_HOST=-h10.10.10.22<br>BAK_PASS=-padministrator</font></p>
<p>##从原数据库中导出数据库表的内容，并生成sql的文件，STATION为数据库名，username和files为表名<br><font color=#a52a2a>/var/mysql/bin/mysqldump --add-drop-table --opt $SOURCE_USER $SOURCE_HOST $SOURCE_PASS STATION username &gt;/tmp/username.sql<br>/var/mysql/bin/mysqldump --add-drop-table --opt $SOURCE_USER $SOURCE_HOST $SOURCE_PASS STATION files &gt;/tmp/files.sql</font></p>
<p>##导入到备份的数据库中<br><font color=#a52a2a>/var/mysql/bin/mysql $BAK_USER $BAK_HOST $BAK_PASS STATION &lt;/tmp/username.sql<br></tmp username.sql<br />/var/mysql/bin/mysql $BAK_USER $BAK_HOST $BAK_PASS STATION &lt;/tmp/files.sql</font><font color=#006400></tmp files.sql<font></p>
</font><br><img src ="http://www.cnitblog.com/windone0109/aggbug/42053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-07 11:41 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/07/42053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux主要shell命令详解</title><link>http://www.cnitblog.com/windone0109/archive/2008/04/07/42049.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Mon, 07 Apr 2008 02:53:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/04/07/42049.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/42049.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/04/07/42049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/42049.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/42049.html</trackback:ping><description><![CDATA[&nbsp;shell是用户和Linux操作系统之间的接口。Linux中有多种shell，其中缺省使用的是Bash。本章讲述了shell的工作原理，shell的种类，shell的一般操作及Bash的特性。<br><br>　什么是shell<br><br>Linux系统的shell作为操作系统的外壳，为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。<br><br>shell是用户和Linux内核之间的接口程序，如果把Linux内核想象成一个球体的中心，shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时，内核会做出相应的反应。<br><br>shell是一个命令语言解释器，它拥有自己内建的shell命令集，shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。<br><br>有一些命令，比如改变工作目录命令cd，是包含在shell内部的。还有一些命令，例如拷贝命令cp和移动命令rm，是存在于文件系统中某个目录下的单独的程序。对用户而言，不必关心一个命令是建立在shell内部还是一个单独的程序。<br><br>shell首先检查命令是否是内部命令，若不是再检查是否是一个应用程序（这里的应用程序可以是Linux本身的实用程序，如ls和rm，也可以是购买的商业程序，如xv，或者是自由软件，如emacs）。然后shell在搜索路径里寻找这些应用程序（搜索路径就是一个能找到可执行程序的目录列表）。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件，将会显示一条错误信息。如果能够成功找到命令，该内部命令或应用程序将被分解为系统调用并传给Linux内核。<br>　<br>shell的另一个重要特性是它自身就是一个解释型的程序设计语言，shell程序设计语言支持绝大多数在高级语言中能见到的程序元素，如函数、变量、数组和程序控制结构。shell编程语言简单易学，任何在提示符中能键入的命令都能放到一个可执行的shell程序中。<br><br>当普通用户成功登录，系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值（TurboLinux系统默认的shell是BASH），对普通用户用&#8220;$&#8221;作提示符，对超级用户（root）用&#8220;#&#8221;作提示符。<br><br>一旦出现了shell提示符，就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行，或者在屏幕上产生了大量的输出，可以从键盘上按ctrl+c发出中断信号来中断它（在正常结束之前，中止它的执行）。<br><br>当用户准备结束登录对话进程时，可以键入logout命令、exit命令或文件结束符（EOF）（按ctrl+d实现），结束登录。<br><br>我们来实习一下shell是如何工作的。<br><br>$ make work<br><br>make:***No rule to make target &#8216;work&#8217;. Stop.<br><br>$<br><br>注释：make是系统中一个命令的名字，后面跟着命令参数。在接收到这个命令后，shell便执行它。本例中，由于输入的命令参数不正确，系统返回信息后停止该命令的执行。<br><br>在例子中，shell会寻找名为make的程序，并以work为参数执行它。make是一个经常被用来编译大程序的程序，它以参数作为目标来进行编译。在 &#8220;make work&#8221;中，make编译的目标是work。因为make找不到以work为名字的目标，它便给出错误信息表示运行失败，用户又回到系统提示符下。<br><br>另外，用户键入有关命令行后，如果shell找不到以其中的命令名为名字的程序，就会给出错误信息。例如，如果用户键入：<br><br>$ myprog<br><br>bash:myprog:command not found<br><br>$<br><br>可以看到，用户得到了一个没有找到该命令的错误信息。用户敲错命令后，系统一般会给出这样的错误信息。<br><br>shell的种类<br><br>Linux中的shell有多种类型，其中最常用的几种是Bourne shell（sh）、C shell（csh）和Korn shell（ksh）。三种shell各有优缺点。Bourne shell是UNIX最初使用的shell，并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀，但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne Again shell，它是Bourne shell的扩展，简称Bash，与Bourne shell完全向后兼容，并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中，它有许多特色，可以提供如命令补全、命令编辑和命令历史表等功能，它还包含了很多C shell和Korn shell中的优点，有灵活和强大的编程接口，同时又有很友好的用户界面。<br><br>C shell是一种比Bourne shell更适于编程的shell，它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法，它不仅和Bash shell是提示符兼容，而且还提供比Bash shell更多的提示符参数。<br><br>Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh（ksh的扩展），它支持任务控制，可以在命令行上挂起、后台执行、唤醒或终止程序。<br><br>Linux并没有冷落其他shell用户，还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途，有些shell是有专利的，有些能从Internet网上或其他来源获得。要决定使用哪个shell，只需读一下各种shell的联机帮助，并试用一下。<br><br>用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如：<br><br># fgrep lisa /etc/passwd<br><br>lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash<br><br>shell被列每行的末尾（/bin/bash）。<br><br>由于Bash是Linux上缺省的shell，本章主要介绍Bash及其相关知识。<br><br>shell命令<br><br>命令行c<br><br>用户登录到Linux系统时，可以看到一个shell提示符，标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如：<br><br>$ date<br><br>二 11 23 01:34:58 CST 1999<br><br>$<br><br>用户登录时，实际进入了shell，它遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个字必须是一个命令的名字，第二个字是命令的选项或参数，命令行中的每个字必须由空格或TAB隔开，格式如下：<br><br>$ Command Option Arguments<br><br>1. 选项和参数<br><br>选项是包括一个或多个字母的代码，它前面有一个减号（减号是必要的，Linux用它来区别选项和参数），选项可用于改变命令执行的动作的类型。例如：<br><br>$ ls<br><br>motd passwd<br><br>$<br><br>这是没有选项的ls命令，可列出当前目录中所有文件，只列出各个文件的名字，而不显示其他更多的信息。<br><br>$ ls -l<br><br>total 2<br><br>-rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd<br><br>-rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd<br><br>$<br><br>加入-l选项，将会为每个文件列出一行信息，诸如数据大小和数据最后被修改的时间。<br><br>大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词，例如：<br><br>$ ls -l text<br><br>-rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd<br><br>-rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd<br><br>$<br><br>将显示text目录下的所有文件及其信息。<br><br>有些命令，如ls可以带参数，而有一些命令可能需要一些最小数目的参数。例如，cp命令至少需要两个参数，如果参数的数目与命令要求不符，shell将会给出出错信息。例如：<br><br>$ cp -i mydata newdata<br><br>注意：命令行中选项先于参数输入。<br>2. 命令行特征 <br><br>命令行实际上是可以编辑的一个文本缓冲区，在按回车之前，可以对输入的文本进行编辑。比如利用BACKSPACE键可以删除刚键入的字符，可以进行整行删除，还可以插入字符，使得用户在输入命令，尤其是复杂命令时，若出现键入错误，无须重新输入整个命令，只要利用编辑操作，即可改正错误。<br><br>利用上箭头可以重新显示刚执行的命令，利用这一功能可以重复执行以前执行过的命令，而无须重新键入该命令。<br><br>bash保存着以前键入过的命令的列表，这一列表被称为命令历史表。按动上箭头，便可以在命令行上逐次显示各条命令。同样，按动下箭头可以在命令列表中向下移动，这样可以将以前的各条命令显示在命令行上，用户可以修改并执行这些命令。这一特征将在10.4节中进行详细的论述。<br><br>在一个命令行中还可以置入多个命令，用分号将各个命令隔开。例如：<br><br>$ ls -F;cp -i mydata newdata<br><br>也可以在几个命令行中输入一个命令，用反斜杠将一个命令行持续到下一行。<br><br>$ cp &#8211;i<br><br>mydata<br><br>newdata<br><br>　<br><br>上面的cp命令是在三行中输入的，开始的两行以反斜杠结束，把三行作为一个命令行。<br><br>shell中的特殊字符<br><br>shell中除使用普通字符外，还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含义和作用范围。下面分别对这些特殊字符加以介绍。<br><br>1. 通配符<br><br>通配符用于模式匹配，如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号［ ］中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符，构成一个所谓的&#8220;模式串&#8221;，在执行过程中进行模式匹配。<br><br>* 代表任何字符串（长度可以不等），例如：&#8220;f*&#8221;匹配以f打头的任意字符串。但应注意，文件名前的圆点（.）和路经名中的斜线（/）必须显式匹配。例如&#8220;*&#8221;不能匹配.file，而&#8220;.*&#8221;才可以匹配.file。<br><br>? 代表任何单个字符。<br><br>［］ 代表指定的一个字符范围，只要文件名中［ ］位置处的字符在［］中指定的范围之内，那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成，也可以由表示限定范围的起始字符、终止字符及中间的连字符（-）组成。例如，f ［a- d］ 与f ［abcd］的作用相同。Shell将把与命令行中指定的模式串相匹配的所有文件名都作为命令的参数，形成最终的命令，然后再执行这个命令。<br><br>下面我们给出表10-1说明这些通配符的具体含义。<br><br>表10-1　通配符含义举例<br><br>模式串<br><br>意 义<br><br>*<br><br>当前目录下所有文件的名称。<br><br>*Text*<br><br>当前目录下所有文件名中包含有Text的文件的名称。<br><br>［ab-dm］*<br><br>当前目录下所有以a、b、c、d、m开头的文件的名称。<br><br>［ab-dm］?<br><br>当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件的名称。<br><br>/usr/bin/??<br><br>目录/usr/bin下所有名称为两个字符的文件的名称。<br><br>　<br><br>特别需要注意的是，连字符&#8220;-&#8221;仅在方括号内有效，表示字符范围，如在方括号外面就成为普通字符了。而*和?只在方括号外面是通配符，若出现在方括号之内，它们也失去通配符的能力，成为普通字符了。例如，模式&#8220;- a［*?］abc&#8221;中只有一对方括号是通配符，*和?均为普通字符，因此，它匹配的字符串只能是- a*abc和- a?abc。<br><br>最后说明一下使用通配符时需要注意的一些问题。由于*、?和［］对于shell来说具有比较特殊的意义，因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们，否则Shell匹配起来可能会无穷的递归下去。另外要注意的一点是：如果目录中没有与指定的模式串相匹配的文件名，那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出现特殊字符的原因所在。<br>2. 引号 <br><br>在shell中引号分为三种：单引号，双引号和反引号。<br><br>* 单引号 &#8216;<br><br>由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后，也会失去原有意义，而只作为普通字符解释。例如：<br><br>$ string=&#8217;$PATH&#8217;<br><br>$ echo $string<br><br>$PATH<br><br>$<br><br>可见$保持了其本身的含义，作为普通字符出现。<br><br>* 双引号 &#8220;<br><br>由双引号括起来的字符，除$、、&#8217;、和&#8221;这几个字符仍是特殊字符并保留其特殊功能外，其余字符仍作为普通字符对待。对于$来说，就是用其后指定的变量的值来代替这个变量和$；对于而言，是转义字符，它告诉shell不要对其后面的那个字符进行特殊处理，只当作普通字符即可。可以想见，在双引号中需要在前面加上的只有四个字符$，，&#8217;和&#8221;本身。而对&#8221;号，若其前面没有加，则Shell会将它同前一个&#8221;号匹配。<br><br>例如，我们假定PATH的值为.:/usr/bin:/bin，输入如下命令：<br><br>$ TestString＝&#8221;$PATH\&#8221;$PATH&#8221;<br><br>$ echo $TestString<br><br>.:/usr/bin:/ bin&#8221;$PATH<br><br>$<br><br>读者可以自己试一下在第二个双引号之前不加会产生什么结果。<br><br>　<br><br>* 反引号 `<br><br>反引号（`）这个字符所对应的键一般位于键盘的左上角，不要将其同单引号（&#8217;）混淆。反引号括起来的字符串被shell解释为命令行，在执行时，shell首先执行该命令行，并以它的标准输出结果取代整个反引号（包括两个反引号）部分。例如：<br><br>$ pwd<br><br>/home/xyz<br><br>$ string=&#8221;current directory is `pwd`&#8221;<br><br>$ echo $string<br><br>current directour is /home/xyz<br><br>$<br><br>shell执行echo命令时，首先执行`pwd`中的命令pwd，并将输出结果/home/xyz取代`pwd`这部分，最后输出替换后的整个结果。<br><br>利用反引号的这种功能可以进行命令置换，即把反引号括起来的执行结果赋值给指定变量。例如：<br><br>$ today=`date`<br><br>$ echo Today is $today<br><br>Today is Mon Apr 15 16:20:13 CST 1999<br><br>$<br><br>反引号还可以嵌套使用。但需注意，嵌套使用时内层的反引号必须用反斜线（）将其转义。例如：<br><br>$ abc=`echo The number of users is `who| wc-l``<br><br>$ echo $abc<br><br>The number of users is 5<br><br>$<br><br>在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果，它实际上要去执行``中指定的命令。执行时，命令中的特殊字符，如$，&#8221;，?等又将具有特殊含义，并且``所包含的可以是任何一个合法的Shell命令，如：<br><br>$ ls<br><br>note readme.txt Notice Unix.dir<br><br>$ TestString＝&#8221;`echo $HOME ` ` ls ［nN］*`&#8221;<br><br>$ echo $TestString<br><br>/home/yxz note Notice<br><br>$<br><br>其他情况，读者可自行试之。<br><br>1. 注释符 <br><br>在shell编程中经常要对某些正文行进行注释，以增加程序的可读性。在Shell中以字符&#8220;#&#8221;开头的正文行表示注释行。<br><br>此外还有一些特殊字符如：用于输入/输出重定向与管道的&lt;、&gt;、&lt;&lt;、&gt;&gt;和|；执行后台命令的&amp;；命令执行操作符&amp;&amp;和||及表示命令组的{}将在下面各小节中加以介绍。
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><!--startfragment -->&nbsp;标准输入/输出和重定向<br><br>1. 标准输入与输出<br><br>我们知道，执行一个shell命令行时通常会自动打开三个标准文件，即标准输入文件（stdin），通常对应终端的键盘；标准输出文件（stdout）和标准错误输出文件（stderr），这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据，将正常输出数据输出到标准输出文件，而将错误信息送到标准错误文件中。<br><br>我们以cat命令为例，cat命令的功能是从命令行给出的文件中读取数据，并将这些数据直接送到标准输出。若使用如下命令：<br><br>$ cat config<br><br>将会把文件config的内容依次显示到屏幕上。但是，如果cat的命令行中没有参数，它就会从标准输入中读取数据，并将其送到标准输出。例如：<br><br>$ cat<br><br>Hello world<br><br>Hello world<br><br>Bye<br><br>Bye<br><br>&lt;ctrl+d&gt;<br><br>$<br><br>用户输入的每一行都立刻被cat命令输出到屏幕上。<br><br>另一个例子，命令sort按行读入文件正文（当命令行中没有给出文件名时，表示从标准输入读入），将其排序，并将结果送到标准输出。下面的例子是从标准输入读入一个采购单，并将其排序。<br><br>$ sort<br><br>bananas<br><br>carrots<br><br>apples<br><br>&lt;ctrl+d&gt;<br><br>apples<br><br>bananas<br><br>carrots<br><br>$<br><br>这时我们在屏幕上得到了已排序的采购单。<br><br>直接使用标准输入/输出文件存在以下问题：<br><br>输入数据从终端输入时，用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时，若输入有误修改起来不是很方便。<br><br>输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理，如将输出作为另一命令的输入进行进一步的处理等。<br><br>为了解决上述问题，Linux系统为输入、输出的传送引入了另外两种机制，即输入/输出重定向和管道。<br><br>2. 输入重定向<br><br>输入重定向是指把命令（或可执行程序）的标准输入重定向到指定的文件中。也就是说，输入可以不来自键盘，而来自一个指定的文件。所以说，输入重定向主要用于改变一个命令的输入源，特别是改变那些需要大量输入的输入源。<br><br>例如，命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入：<br><br>$ wc<br><br>wc将等待用户告诉它统计什么，这时shell就好象死了一样，从键盘键入的所有文本都出现在屏幕上，但并没有什么结果，直至按下＜ctrl+d＞，wc才将命令结果写在屏幕上。<br><br>如果给出一个文件名作为wc命令的参数，如下例所示，wc将返回该文件所包含的行数、单词数和字符数。<br><br>$ wc /etc/passwd<br><br>20 23 726 /etc/passwd<br><br>$<br><br>另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为：命令&lt;文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件：<br><br>$ wc &lt; /etc/passwd<br><br>20 23 726<br><br>$<br><br>另一种输入重定向称为here文档，它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用&lt;&lt;。它将一对分隔符（本例中用delim表示）之间的正文重定向输入给命令。下例将一对分隔符delim之间的正文作为wc命令的输入，统计出正文的行数、单词数和字符数。<br><br>$ wc&lt;&lt;delim<br><br>&gt;this text forms the content<br><br>&gt;of the here document,which<br><br>&gt;continues until the end of<br><br>&gt;text delimter<br><br>&gt;delim<br><br>4 17 98<br><br>在&lt;&lt;操作符后面,任何字符都可以作为正文开始前的分隔符，本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文（不包括开始和结束的分隔符）将重新定向送给命令wc作为它的标准输入。<br><br>由于大多数命令都以参数的形式在命令行上指定输入文件的文件名，所以输入重定向并不经常使用。尽管如此，当要使用一个不接受文件名作为输入参数的命令，而需要的输入内容又存在一个文件里时，就能用输入重定向解决问题。<br><br>1. 输出重定向<br><br>输出重定向是指把命令（或可执行程序）的标准输出或标准错误输出重新定向到指定文件中。这样，该命令的输出就不显示在屏幕上，而是写入到指定文件中。<br><br>输出重定向比输入重定向更常用，很多情况下都可以使用这种功能。例如，如果某个命令的输出很多，在屏幕上不能完全显示，那么将输出重定向到一个文件中，然后再用文本编辑器打开这个文件，就可以查看输出信息；如果想保存一个命令的输出，也可以使用这种方法。还有，输出重定向可以用于把一个命令的输出当作另一个命令的输入（还有一种更简单的方法，就是使用管道，将在下面介绍）。<br><br>输出重定向的一般形式为：命令&gt;文件名。例如：<br><br>$ ls &gt; directory.out<br><br>$ cat directory.out<br><br>ch1.doc ch2.doc ch3.doc chimp config mail/ test/<br><br>$<br><br>将ls命令的输出保存为一个名为directory.out的文件。<br><br>注：如果&gt;符号后边的文件已存在，那么这个文件将被重写。<br><br>为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容，shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似，区别仅在于输出追加重定向的功能是把命令（或可执行程序）的输出结果追加到指定文件的最后，而该文件原有内容不被破坏。<br><br>如果要将一条命令的输出结果追加到指定文件的后面，可以使用追加重定向操作符&gt;&gt;。形式为：命令&gt;&gt;文件名。例如：<br><br>$ ls *.doc&gt;&gt;directory.out<br><br>$ cat directory.out<br><br>ch1.doc ch2.doc ch3.doc chimp config mail/ test/<br><br>ch1.doc ch2.doc ch3.doc<br><br>$<br><br>和程序的标准输出重定向一样，程序的错误输出也可以重新定向。使用符号2&gt;（或追加符号2&gt;&gt;）表示对错误输出设备重定向。例如下面的命令：<br><br>$ ls /usr/tmp 2&gt; err.file<br><br>可在屏幕上看到程序的正常输出结果，但又将程序的任何错误信息送到文件err.file中，以备将来检查用。<br><br>还可以使用另一个输出重定向操作符（&amp;&gt;）将标准输出和错误输出同时送到同一文件中。例如：<br><br>$ ls /usr/tmp &amp;&gt; output.file<br><br>利用重定向将命令组合在一起，可实现系统单个命令不能提供的新功能。例如使用下面的命令序列：<br><br>$ ls /usr/bin &gt; /tmp/dir<br><br>$ wc &#8211;w &lt; /tmp/dir<br><br>459<br><br>统计了/usr/bin目录下的文件个数。<br><br>管 道<br><br>将一个程序或命令的输出作为另一个程序或命令的输入，有两种方法，一种是通过一个临时文件将两个命令或程序结合在一起，例如上个例子中的/tmp/dir文件将ls和wc命令联在一起；另一种是Linux所提供的管道功能。这种方法比前一种方法更好。<br><br>管道可以把一系列命令连接起来，这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令，第二个命令的输出又会作为第三个命令的输入，以此类推。显示在屏幕上的是管道行中最后一个命令的输出（如果命令行中未使用输出重定向）。<br><br>通过使用管道符&#8220;|&#8221;来建立一个管道行。用管道重写上面的例子：<br><br>$ ls /usr/bin|wc -w<br><br>1789<br><br>再如：<br><br>$ cat sample.txt|grep "High"|wc -l<br><br>管道将cat命令（列出一个文件的内容）的输出送给grep命令。grep命令在输入里查找单词High，grep命令的输出则是所有包含单词High的行，这个输出又被送给wc命令，wc命令统计出输入中的行数。假设sample.txt文件的内容如下：<br><br>Things to do today:<br><br>Low:Go grocery shopping<br><br>High:Return movie<br><br>High:Clear level 3 in Alien vs. Predator<br><br>Medium:Pick up clothes from dry cleaner<br><br>那么该管道行的结果是2。<br><br>命令替换<br><br>命令替换和重定向有些相似，但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为：<br><br>command1 `command2`<br><br>其中，command2的输出将作为command1的参数。需要注意的是这里的`符号，被它括起来的内容将作为命令执行，执行后的结果作为command1的参数。例如：<br><br>$ cd `pwd`<br><br>该命令将pwd命令列出的目录作为cd命令的参数，结果仍然是停留在当前目录下。<br><br>第二十二课　在Bash中的操作　　　　　　2000年/5月/29日<br><br>命令和文件名扩展特性<br><br>Bash命令行具有命令和文件名扩展特性。当输入一个还没完成的命令或文件名时，只需键入Tab键就能激活命令和文件名扩展特性，从而完成该命令的剩余输入。如果有多个命令或文件的前缀相同，Bash将响铃并等待用户输入足够的字符，以便选择唯一的命令或文件名，如果找到，系统将自动补齐搜索到的命令或文件名，用户按回车键后，系统将执行这条指令。例如：<br><br>$ cat pre &lt;Tab&gt;<br><br>$ cat preface<br><br>Bash也能列出当前目录下部分匹配的文件名来完成文件名扩展。如果键入Esc，然后键入?，shell将列出所有与输入的字符串相匹配的文件名。例如下例，在没有完成的输入后键入Esc ?，shell将列出所有与输入的字符串相匹配的字符串，然后shell回显命令行，根据列出的文件名，可以键入要输入的文件名或按下Tab键来完成文件名扩展。例如：<br><br>$ ls<br><br>document docudrama<br><br>$ cat doc &lt;ESC ?&gt;<br><br>document<br><br>docudrama<br><br>$ cat docudrama<br><br>［例】下面是一个目录包含的文件列表：<br><br>Firebird2.7.tgz Firebird.README Firebird2.60.tgz<br><br>FireBird Firebird2.60.tgz.README<br><br>现在要删除Firebird2.60.tgz.README文件，键入：<br><br>$ rm &#8211;f Fi&lt;Tab&gt;<br><br>系统会发出警报声，并且自动将命令行补全为：<br><br>$ rm &#8211;f Fire<br><br>并等待用户进一步输入文件名的后面部分。现在再键入：<br><br>b&lt;Tab&gt;<br><br>系统再次发出警报声，并且自动将命令行补全为：<br><br>$ rm &#8211;f Firebird<br><br>并等待用户进一步输入文件名的后面部分。现在再键入：<br><br>2.6&lt;Tab&gt;<br><br>系统再次发出警报声，并且自动将命令行补全为：<br><br>$ rm &#8211;f Firebird2.60.tgz<br><br>并等待用户进一步输入文件名的后面部分。现在再键入：<br><br>.&lt;Tab&gt;<br><br>此时命令将被补全为：<br><br>$ rm &#8211;f Firebird2.60.tgz..README<br><br>从上例可以看到，bash总是尽力根据用户输入的信息来补全命令。当无法根据现有信息补全命令时，则提示用户再给出更多的信息，然后再根据用户的提示来进一步补全命令。作为用户最好是能够一次性给出足够的信息以便于bash进行命令补全；否则多按几次&lt;Tab&gt;，时间也就消耗掉了。<br><br>命令行编辑<br><br>在Bash中可以对命令行进行编辑，以便用户在执行所键入的命令之前能够修改所键入的命令。如果在键入命令时出现拼写错误，只需在运行所键入的命令之前，使用编辑命令来纠正编辑错误，然后执行它，而不用重新输入整行命令。这个功能对以长路径文件名作参数的命令特别有用。<br><br>表10-2是对命令行编辑操作的一个总结。<br><br>表10-2　命令行编辑操作<br><br>　<br><br>命令行编辑操作<br><br>功能<br><br>Ctrl+b或左箭头键<br><br>左移一个字符（移至前一个字符）<br><br>Ctrl+f或右箭头键<br><br>右移一个字符（移至后一个字符）<br><br>Ctrl+a<br><br>移至行首<br><br>Ctrl+e<br><br>移至行尾<br><br>Esc b<br><br>左移一个单词<br><br>Esc f<br><br>右移一个单词<br><br>Del<br><br>删除光标所在处的字符<br><br>Ctrl+d<br><br>删除光标所在处的字符<br><br>BACKSPACE或Ctrl+h<br><br>删除光标左边的字符<br><br>Ctrl+k<br><br>删除至行尾<br><br>　<br><br>命令历史<br><br>在Bash中，history命令能够保存最近所执行的命令。这些命令的历史记录号从1开始，只有有限个命令可以被保存起来，最多500个，即 history命令的历史记录号缺省值为500。要查看最近执行的命令，只要键入history命令，然后键入回车键，最近执行过的命令即按先后顺序被显示出来（各条命令前的数字为历史记录号）。<br><br>［例】<br><br>$ history<br><br>1 cp mydata today<br><br>2 vi mydata<br><br>3 mv mydata reports<br><br>4 cd reports<br><br>5 ls<br><br>&#8230;<br><br>所有这些命令都被称为事件（event），一个事件表示一个操作已经发生，即一个命令已被执行。这些事件根据它们被执行的先后顺序用数字标识，这一标识称为历史事件号。最后执行的历史事件的事件号最大。每个事件都可由它的历史事件号或命令的初始字符或字符串等确定。<br><br>利用history命令能够查询以前的事件，并可把它们显示到命令行上执行这一事件。最简便的方法就是利用上下箭头键，把先前的事件逐次显示到命令行。这个操作不需要运行history命令就可以执行。按动一下上箭头键，那么上一次执行的一个事件就将出现在命令行上，再按一下，上一次的前一事件又会出现在命令行上；按动一下下箭头键，将会使当前事件的下一事件出现在命令行上。<br><br>Bash也可以通过键入Esc、Tab键来完成对历史事件的字符扩展。和标准命令行扩展特性一样，键入历史事件的部分字符串，然后键入Esc，再键入 Tab键，与刚才键入的字符串相匹配的历史事件将自动扩展并回显到命令行处。如果不止一个事件与输入的字符串相匹配，就会听到一声响铃，继续键入字符或字符串，shell将会唯一确定用户所要键入的历史事件。<br><br>还有一个查询和执行历史事件的命令——!命令。在!命令后键入与历史事件相关联的字符，这个关联字符可以是历史事件的历史事件号，也可以是该事件的前几个字符。在下面的例子中，查询到历史事件号为3的事件，然后又用其开头的几个字符去匹配，也查询到该命令。<br><br>［例】<br><br>$ !3<br><br>mv mydata reports<br><br>$ !mv<br><br>mv mydata reports<br><br>也可以用一个偏移量（相对于历史事件列表中最后一个事件）来查询历史事件。负的偏移量将从历史事件列表表尾向前偏移。在下面的例子中，历史事件号为2的事件&#8220;vi mydata&#8221;就是用一个负的偏移量查询到的。必须注意的是，这个偏移量是相对于历史事件列表中的最后一个事件的。在本例中，历史事件列表中最后一个事件是事件5，历史事件列表中第一个事件为1。从历史事件号为5的事件，往前偏移4，即是历史事件号为2的事件。<br><br>［例】<br><br>$ !-4<br><br>vi mydata<br><br>如果键入!!，则系统默认为上一事件。下面的例子中，用户在命令行上键入!!命令，系统将执行上一事件：&#8220;ls&#8221;命令。<br><br>［例】<br><br>$ !!<br><br>ls<br><br>mydata today reports<br><br>也可以用&#8220;模式&#8221;来搜索一个历史事件。搜索的&#8220;模式&#8221;必须用符号&#8220;?&#8221;括起来。下例是用&#8220;模式&#8221;&#8220;?myd?&#8221;来搜索历史事件号为3的历史事件&#8220;vi mydata&#8221;。<br><br>［例】<br><br>$ !?myd?<br><br>vi mydata<br><br>1. 查询历史事件<br><br>可以在命令行上编辑历史事件列表中的事件。表10-3列出了查询历史事件列表的各种操作。<br><br>表10-3　查询历史事件操作<br><br>查询历史事件操作<br><br>功能<br><br>Ctrl+n或向下光标键<br><br>移至历史事件列表中当前事件的下一历史事件<br><br>Ctrl+p或向上光标键<br><br>移至历史事件列表中当前事件的前一历史事件<br><br>Esc &lt;<br><br>移至历史事件列表表首<br><br>Esc &gt;<br><br>移至历史事件列表表尾<br><br>!event_num<br><br>用历史事件号来定位一个历史事件<br><br>!characters<br><br>用历史事件的字符前缀来查询一个历史事件<br><br>!?pattern<br><br>用&#8220;模式&#8221;来查询历史事件列表中的事件<br><br>!-event_num<br><br>通过偏移量来定位历史事件<br>2. 配置history：HISTFILE及HISTSIZE<br><br>系统保存的历史事件数被保存在一个特定的系统变量中，这个变量就是HISTSIZE。这个变量的缺省值通常被设置为500。这个值可以被修改。例如：<br><br>$ HISTSIZE=10<br><br>将HISTSIZE的值重新设置为10。<br><br>历史事件被保存在一个文件中，文件名由变量HISTFILE指定。通常这个文件的缺省名是.bash_history。通过给变量HISTFILE赋值，可以指定新的文件名。<br><br>［例】<br><br>$ echo $HISTFILE<br><br>/home/lisa/.bash_history<br><br>$ HISTFILE=&#8221;/home/lisa/newhist&#8221;<br><br>$ echo $HISTFILE<br><br>/home/lisa/newhist<br><br>以上操作先显示变量HISTFILE的值，然后赋予它新的值&#8220;/home/lisa/newhist&#8221;，以后所有的历史事件将被保存在newhist文件中。 </p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><!--startfragment -->&nbsp;别名<br><br>还有一个使工作变得轻松的方法是使用命令别名。命令别名通常是其他命令的缩写，用来减少键盘输入。<br><br>命令格式为:<br><br>alias ［alias-name=&#8217;original-command&#8217;］<br><br>其中，alias-name是用户给命令取的别名，original-command是原来的命令和参数。需要注意的是，由于Bash是以空格或者回车来识别原来的命令的，所以如果不使用引号就可能导致Bash只截取第一个字，从而出现错误。如果alias命令后面不使用任何参数，则显示当前正在使用的被别名化的命令及其别名。为命令取的别名在该次登录期间始终有效。如果用户需要别名在每次登录时都有效，那么就将alias命令写到初始化脚本文件中。<br><br>［例］如果经常要键入如下的命令，最好为它建立一个别名来减少工作量。<br><br>$ cd /usr/X11/lib/X11<br><br>假如为这个长命令建立一个名为goconfig的别名，在Bash提示符下键入如下命令：<br><br>$ alias goconfig=&#8217;cd /usr/X11/lib/X11&#8217;<br><br>现在，除非您退出Bash，键入goconfig将和原来的长命令有同样的作用。如果想取消别名，可以使用下面的命令：<br><br>$ unalias goconfig<br><br>这是一些很多人认为有用的别名，可以把它们写入初始化脚本文件中来提高工作效率：<br><br>alias ll=&#8217;ls &#8211;l&#8217;<br><br>alias log=&#8217;logout&#8217;<br><br>alias ls=&#8217;ls &#8211;F&#8217;<br><br>如果您是一名DOS用户并且习惯了DOS命令，可以用下面的别名定义使Linux表现得象DOS一样：<br><br>alias dir=&#8217;ls&#8217;<br><br>alias copy=&#8217;cp&#8217;<br><br>alias rename=&#8217;mv&#8217;<br><br>alias md=&#8217;mkdir&#8217;<br><br>alias rd=&#8217;rmdir&#8217;<br><br>注意：在定义别名时，等号两边不能有空格，否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字符时才需要引号。<br><br>如果键入不带任何参数的alias命令，将显示所有已定义的别名。<br><br>提示符<br><br>Bash有两级提示符。第一级提示符是经常见到的Bash在等待命令输入时的情况。第一级提示符的默认值是$符号。如果用户不喜欢这个符号，或者愿意自己定义提示符，只需修改PS1变量的值。例如将其改为：<br><br>PS1=&#8221;Enter a command:&#8221;<br><br>第二级提示符是当Bash为执行某条命令需要用户输入更多信息时显示的。第二级提示符默认为&gt;。如果需要自己定义该提示符，只需改变PS2变量的值。例如将其改为：<br><br>PS2=&#8221;More information:&#8221;<br><br>上面的两个例子都是设定提示符为静态字符串的情况。其实用户也可以使用一些事先已经定义好的特殊字符。这些特殊字符将使提示符中包含当前时间之类的信息。表10-4列出了最常用的一些特殊字符及其含义。<br><br>表10-4　bash提示符常用特殊字符<br><br>　<br><br>特殊字符<br><br>说 明<br><br>!<br><br>显示该命令的历史编号<br><br>#<br><br>显示shell激活后，当前命令的历史编号<br><br>$<br><br>显示一个$符号，如果当前用户是root则显示#符号<br><br>\<br><br>显示一个反斜杠<br><br>d<br><br>显示当前日期<br><br>h<br><br>显示运行该shell的计算机主机名<br><br>n<br><br>打印一个换行符，这将导致提示符跨行<br><br>s<br><br>显示正在运行的Shell的名称<br><br>t<br><br>显示当前时间<br><br>u<br><br>显示当前用户的用户名<br><br>W<br><br>显示当前工作目录基准名<br><br>w<br><br>显示当前工作目录<br><br>　<br><br>这些特殊字符可以组合起来，为用户提供一些提示符，提供很有用的信息。下面来看几个实际例子：<br><br>PS1=&#8221;t&#8221;<br><br>将使提示符变成如下所示：<br><br>02:16:15<br><br>而 PS1=t<br><br>将使提示符变成如下所示：<br><br>t<br><br>若PS1=&#8221;t\&#8221;<br><br>将使提示符变成如下所示：<br><br>02:16:30<br><br>该例就是使用两个特殊字符的组合得到的。<br><br>控制shell的运行方式<br><br>Bash有一些特殊变量，能控制shell以不同的方式工作。例如，变量noclobber能防止在重定向输出时意外地覆盖一个文件。通过set命令可以设置noclobber变量的有效或无效。set命令有两个参数：一个是指定变量开（on）或关（off）的选项，一个是特殊变量的变量名。要使某一特殊变量开（有效），用-o选项，要使其关（无效），用+o选项。例如：<br><br>$ set &#8211;o noclobber // 使noclobber变量开<br><br>$ set +o noclobber // 使noclobber变量关<br><br>三个最常用的shell特殊变量有：ignoreeof、noclobber及noglob。<br><br>ignoreeof<br><br>ignoreeof变量用来禁止使用ctrl+d来退出shell（ctrl+d不仅用来退出shell，而且可以终止用户直接输往标准输出上的输入。该操作经常在一些shell实用命令中使用，例如实用命令cat。在这些实用程序操作中，非常容易误操作而意外地退出shell。ignoreeof特殊变量正是用来防止这种意外的退出。例如：<br><br>$ set &#8211;o ignoreeof<br><br>之后，用户只能用logout或exit命令退出shell。<br><br>noclobber<br><br>noclobber变量可以在重定向输出时保护已存在的文件，防止被意外地覆盖。在下例中，用户设置noclobber为有效，在重定向时，用户试图去覆盖已经存在的文件myfile，此时系统将返回一个错误信息。<br><br>［例］<br><br>$ set &#8211;o noclobber<br><br>$ cat preface&gt;myfile<br><br>bash: myfile: cannot overwrite existing file<br><br>$<br><br>noglob<br><br>设置noglob变量后，shell将不扩展文件名中一些特殊的字符或字符串。如字符*、?、［］等将不再作为通配符。如果用户希望列出结尾为?的文件名answer?，可通过如下步骤：首先，用户使noglob变量为无效，然后再列出文件名。可以看到，目前命令行上的问号?被认为是文件名中的一个字符，而不再被看作通配符。<br><br>$ set &#8211;o noglob<br><br>$ ls answer?<br><br>answer?<br><br>子shell与export命令<br><br>用户登录到Linux系统后，系统将启动一个用户shell。在这个shell中，可以使用shell命令或声明变量，也可以创建并运行shell脚本程序。运行shell脚本程序时，系统将创建一个子shell。此时，系统中将有两个shell，一个是登录时系统启动的shell，另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕，它的脚本shell将终止，可以返回到执行该脚本之前的shell。从这种意义上来说，用户可以有许多 shell，每个shell都是由某个shell（称为父shell）派生的。<br><br>在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量，当该脚本程序运行时，这个定义的变量只是该脚本程序内的一个局部变量，其他的shell不能引用它，要使某个变量的值可以在其他shell中被改变，可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。<br><br>［例］在本例中，变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell，例如当执行printfile脚本程序时产生的子shell。<br><br>dispfile脚本程序清单：<br><br>/**************begin dispfile**************/<br><br>myfile=&#8221;List&#8221;<br><br>export myfile<br><br>echo &#8220;Displaying $myfile&#8221;<br><br>pr &#8211;t &#8211;n $myfile<br><br>printfile<br><br>/**************end dispfile***************/<br><br>　<br><br>printfile脚本程序清单：<br><br>/**************begin printfile**************/<br><br>echo &#8220;Printing $myfile&#8221;<br><br>lpr $myfile&amp;<br><br>/**************end printfile**************/<br><br>$dispfile<br><br>Displaying List<br><br>1 screen<br><br>2 modem<br><br>3 paper<br><br>Printing List<br><br>$<br><br>定制Bash<br><br>在本节中已经介绍了很多定制Bash的方法，但是迄今为止，这些方法都只是对当前Bash对话有用。只要用户退出登录，所做的一切改变都会丢失。所以应该在Bash的初始化文件中做永久性的修改。<br><br>用户可以将每次启动Bash所需要执行的命令放入初始化文件中，最常见的命令就是alias命令和变量定义两种。系统中的每个用户在其主目录中都有一个.bash_profile文件，Bash每次启动时都将读取该文件，其中包含的所有命令都将被执行。<br><br>下面便是默认.bash_profile文件的代码：<br><br>#.bash_profile<br><br>#Get the aliases and functions<br><br>if ［-f ~/.bashrc ］;then<br><br>.~/.bashrc<br><br>fi<br><br>#User specific environment and startup programs<br><br>PATH=$PATH:$HOME/bin<br><br>ENV=$HOME/.bashrc<br><br>USERNAME=&#8221;&#8221;<br><br>Export USERNAME ENV PATH </p><img src ="http://www.cnitblog.com/windone0109/aggbug/42049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-04-07 10:53 <a href="http://www.cnitblog.com/windone0109/archive/2008/04/07/42049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下mysql的最常用的操作指令_创建用户、备份和还原数据库</title><link>http://www.cnitblog.com/windone0109/archive/2008/02/22/40035.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Fri, 22 Feb 2008 05:38:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/02/22/40035.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/40035.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/02/22/40035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/40035.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/40035.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>1]如何创建mysqld数据库的管理用户？</p>
<p>数据库安装好后，我们应该为mysql数据库创建一个管理帐号。要把root用户设置为管理员，我们应该运行下面的命令；<br>[root@linuxsir01 root]# /opt/mysql/bin/mysqladmin -u root password 123456<br>[root@linuxsir01 root]#<br>通过上面的命令，我们可以知道，mysql数据库的管理员是root，密码是123456。</p>
<p><br>2]如何进入mysql数据库？以mysql数据库管理员root，密码为123456为例；</p>
<p>[root@linuxsir01 root]#/opt/mysql/bin/mysql -uroot -p123456<br>输出上面的命令后，出现的是如下的提示；<br>Welcome to the MySQL monitor. Commands end with ; or \g.<br>Your MySQL connection id is 6 to server version: 3.23.58<br>Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br>mysql&gt;<br>注意：操作这些命令的时候，应该把mysqld服务器打开。这些新手兄弟早就知道了吧</p>
<p><br>3]如何操作一个数据库呢，这个问题就比较多了，建议还是看一下mysql的手册吧。里面的东西太多了。如果操作一个数据库，首先是要指定一个数据库为当前数据库，应该用use命令</p>
<p>mysql&gt;use [数据库];<br>比如我想指定linux这个数据库为当前数据库，应该是<br>mysql&gt; use linux;<br>Database changed<br>mysql&gt;</p>
<p>&nbsp;</p>
<p>4]如何备份数据库？？</p>
<p>比如我们要备份mysql中已经存在的名为linux的数据库，要用到命令mysqldump<br>命令格式如下：<br>[root@linuxsir01 root]# /opt/mysql/bin/mysqldump -uroot -p linux &gt; /root/linux.sql<br>Enter password:在这里输入数据库的密码<br>通过上面的命令，我们要明白两件事，首先备份数据库是要以数据库管理员的身份备份；其次：备份目的地是/root，备份的文件名是linux.sql。其实备份的位置和文件名，根据自己的情况来定。文件名可以自己来取，路径也可以自己来安排；<br>比如我想把linux的数据库备份到/home/beinan，数据库的文件名为linuxsir031130.sql，所以应该输入如下的命令。<br>[root@linuxsir01 root]#/opt/mysql/bin/mysqldump -uroot -p linux &gt; /home/beinan/linuxsir031130.sql<br>Enter password:在这里输入数据库管理员root的数据库密码<br>这样我们到/home/beinan目录下就能发现mysql中名为linux的数据库的备份文件linuxsir031130.sql<br>综上所述，我们学习时要学会变通。</p>
<p>5]如何把把备份的数据库导入到数据库中？</p>
<p>首先我们还是要操作上面几个过程，比如添加数据库管理员(如果您没有添加过mysql数据库管理员的话)，创建数据库等。<br>比如我们要把在/home/beinan这个目录中的linuxsir031130.sql这个备份，导入名为linux的数据库中，应该如下操作；<br>[root@linuxsir01 root]# /opt/mysql/bin/mysql -uroot -p linux &lt; /home/beinan/linuxsir031130.sql<br>Enter password:在这里输入密码<br>如果机器好，数据库比较小，几分钟就好了。</p>
<p><br>6]对mysql数据库常用命令的一点补充；</p>
<p>几个常用的mysql相关的管理命令<br>mysql 命令：基本文本的，显示和使用的mysql数据库。前面已经简单的提过用法；比如登录等。<br>mysqladmin 命令，用来创建和维护mysql数据库的命令，前面已经简单的提过；<br>isamchk 是用来修复、检查和优化.ism后缀的数据库文件；<br>mysqldump 是用于备份数据库，前面已经简单的说明过；<br>myisamchk 用来修复.myi后缀的数据库文件；</p>
<p>比如我们要检查名为linux的数据库.myi数据库表是否存在问题，应该用下面的命令；</p>
<p>要把mysqld服务器停下来<br>[root@linuxsir01 root]# /opt/mysql/share/mysql.server stop</p>
<p>然后执行<br>[root@linuxsir01 root]# /opt/mysql/bin/myisamchk /opt/mysql/var/linux/*.MYI</p>
<p>上面的命令的意思就是检查所有的.myi文件，数据库的目录在/opt/mysql/var/linux/目录中</p>
<p>如果有问题，应该用-r参数来修复<br>[root@linuxsir01 root]# /opt/mysql/bin/myisamchk -r /opt/mysql/var/linux/*.MYI</p>
<p>7]mysqlshow 命令：显示用户选择的数据库和表<br>[root@linuxsir01 root]# /opt/mysql/bin/mysqlshow -uroot -p [数据库名]</p>
<p>比如我要查看名为linux的数据库；应该是：</p>
<p>[root@linuxsir01 root]# /opt/mysql/bin/mysqlshow -uroot -p linux<br></p><img src ="http://www.cnitblog.com/windone0109/aggbug/40035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-02-22 13:38 <a href="http://www.cnitblog.com/windone0109/archive/2008/02/22/40035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无法远程登入MySQL的几种解决办法</title><link>http://www.cnitblog.com/windone0109/archive/2008/02/22/40034.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Fri, 22 Feb 2008 05:33:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/02/22/40034.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/40034.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/02/22/40034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/40034.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/40034.html</trackback:ping><description><![CDATA[<span class=t18>&nbsp;
<p>　　方法一：</p>
<p>　　尝试用MySQL Adminstrator GUI Tool登入MySQL Server，Server却回复错误讯息：Host '60-248-32-13.HINET-IP.hinet.net' is not allowed to connect to this</p>
<p>　　MySQL server</p>
<p>　　这个是因为权限的问题，处理方式如下：</p>
<p>　　shell&gt;mysql --user=root -p</p>
<p>　　输入密码</p>
<p>　　mysql&gt;use mysql</p>
<p>　　mysql&gt;GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[ipadd] identified by '[password]';</p>
<p>　　[username]:远程登入的使用者代码</p>
<p>　　[db_name]:表示欲开放给使用者的数据库称</p>
<p>　　[password]:远程登入的使用者密码</p>
<p>　　[ipadd]:IP地址或者IP反查后的DNS Name，此例的内容需填入'60-248-32-13.HINET-IP.hinet.net' ，包函上引号(')</p>
<p>　　(其实就是在远端服务器上执行，地址填写本地主机的ip地址。)</p>
<p>　　如果希望开放所有权限的话请执行：</p>
<p>　　mysql&gt;update user set select_priv='Y' , Insert_priv='Y', Update_priv='Y', delete_priv='Y', Create_priv='Y', Drop_priv='Y',Reload_priv='Y', shutdown_priv='Y', Process_priv='Y', File_priv='Y', Grant_priv='Y', references_priv='Y',Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y', Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y' where user='[username]';</p>
<p>　　方法二：</p>
<p>　　如何解决客户端与服务器端的连接(mysql) ：xxx.xxx.xxx.xxx is not allowed to connect to this mysql serv</p>
<p>　　1、进入mysql，创建一个新用户xuys：</p>
<p>　　格式：grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码";</p>
<p>　　grant select,update,insert,delete on *.* to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#120;&#117;&#121;&#115;&#64;&#49;&#57;&#50;&#46;&#49;&#54;&#56;&#46;&#56;&#56;&#46;&#50;&#51;&#52;"><u><font color=#0000ff>xuys@192.168.88.234</font></u></a> identified by "xuys1234";</p>
<p>　　查看结果，执行：</p>
<p>　　use mysql;</p>
<p>　　select host,user,password from user;</p>
<p>　　可以看到在user表中已有刚才创建的xuys用户。host字段表示登录的主机，其值可以用IP，也可用主机名，</p>
<p>　　将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到mysql服务器，建议在开发时设为%。</p>
<p>3、./mysqld_safe --user-root &amp;</p>
<p>　　记住：对授权表的任何修改都需要重新reload，即执行第3步。</p>
<p>　　如果经过以上3个步骤还是无法从客户端连接，请执行以下操作，在mysql数据库的db表中插入一条记录：</p>
<p>　　use mysql;</p>
<p>　　insert into db values('192.168.88.234','%','xuys','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');</p>
<p>　　update db set host = '%' where user = 'xuys';</p>
<p>　　重复执行上面的第2、3步。</p>
<p>　　方法三：</p>
<p>　　附加fbysss解决phpMyAdmin连接远程用户的方法：</p>
<p>　　1.用root账户登录远程Mysql服务器，</p>
<p>　　grant select,update,insert,delete on *.* to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#115;&#115;&#64;&#49;&#57;&#50;&#46;&#49;&#54;&#56;&#46;&#48;&#46;&#49;&#49;&#52;"><u><font color=#0000ff>sss@192.168.0.114</font></u></a> identified by "sss";</p>
<p>　　update user set host = '%' where user = 'sss';</p>
<p>　　退出mysql,在shell下执行</p>
<p>　　#mysqladmin -u root -p [password] reload</p>
<p>　　#mysqladmin -u root -p [password] shutdown</p>
<p>　　#/etc/rc.d/init.d/mysqld start</p>
<p>　　2.修改phpMyAdmin目录下的config.inc.php文件，找到</p>
<p>　　$cfg['Servers'][$i]['host'] 修改为远程服务器地址</p>
<p>　　$cfg['Servers'][$i]['user'] 修改为sss</p>
<p>　　$cfg['Servers'][$i]['password']修改为sss的密码</p>
<p>　　要注意的是：grant all privilege并不能把&#8220;grant&#8221; 的权限赋给用户，如果要加，可以直接在mysql中使用use mysql;update user set Grant_priv ='Y'来达到要求。</p>
</span><!--正文内容结束--><img src ="http://www.cnitblog.com/windone0109/aggbug/40034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-02-22 13:33 <a href="http://www.cnitblog.com/windone0109/archive/2008/02/22/40034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下设置和修改IP</title><link>http://www.cnitblog.com/windone0109/archive/2008/02/22/40028.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Fri, 22 Feb 2008 03:29:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/02/22/40028.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/40028.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/02/22/40028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/40028.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/40028.html</trackback:ping><description><![CDATA[<p>在网上查找了配置linux配置IP的方法，简单的有下面两种：</p>
<p>最常用的给网卡配置ip的命令为</p>
<p>＃ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up<br>说明：<br>eth0是第一个网卡，其他依次为eth1，eth*<br>192.168.0.1是给网卡配置的第一个网卡配置的ip地址<br>netmask 255.255.255.0 配置的是子网掩码<br>up是表示立即激活</p>
<p>&nbsp;ifconfig的更多参数说明查看相关帮助</p>
<p>手动改/etc/sysconfig/network-scripts/ifcfg-eth0文件</p>
<p>vi打开ifcfg-eth0文件</p>
<p>原内容：</p>
<p>DEVICE=eth0<br>BOOTPROTO=dhcp<br>HWADDR=00:03:47:2C:D5:40<br>ONBOOT=yes<br>TYPE=Ethernet</p>
<p>改为：</p>
<p>DEVICE=eth0<br>BOOTPROTO=static<br>IPADDR=192.168.1.223</p>
<p>NETMASK=255.255.255.0<br>GATEWAY=192.168.1.1</p>
<p>HWADDR=00:0uu3:47:2C:D5:40<br>ONBOOT=yes<br>TYPE=Ethernet</p>
<p>分别执行命令<br>/sbin/ifdown eth0<br>/sbin/ifup eth0<br>/etc/init.d/network restart&nbsp; //使设置的网关马上生效</p>
<p>ifup － 代表拨号的连接命令，该命令只要在命令行或终端中可以成功执行就可以了 <br>ifdown - 代表断开连接的命令，同样该命令只要在命令行或终端中可以成功执行就可以了</p>
<p>设置DNS</p>
<p>/etc/resolv.conf</p>
<p>nameserver 202.102.24.35 指定了dns服务器的地址</p>
<p>&nbsp;</p><img src ="http://www.cnitblog.com/windone0109/aggbug/40028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-02-22 11:29 <a href="http://www.cnitblog.com/windone0109/archive/2008/02/22/40028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下安装mysql后无法启动的解决方法</title><link>http://www.cnitblog.com/windone0109/archive/2008/01/24/39287.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Thu, 24 Jan 2008 11:17:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/01/24/39287.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/39287.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/01/24/39287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/39287.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/39287.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Linux下安装完mysql后，mysql服务无法启动，总是failer。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个不是因为mysql安装失败，而是因为启动了SELinux。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进入<span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: Verdana; mso-fareast-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">/etc/selinux/config，修改SELinux的配置文件，设置SELINUX = Disable。保存配置文件后reboot后，mysql可以正常启动了。</span></p><img src ="http://www.cnitblog.com/windone0109/aggbug/39287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-01-24 19:17 <a href="http://www.cnitblog.com/windone0109/archive/2008/01/24/39287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统服务自启动设置_Tomcat</title><link>http://www.cnitblog.com/windone0109/archive/2008/01/09/38638.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 09 Jan 2008 03:51:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2008/01/09/38638.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/38638.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2008/01/09/38638.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/38638.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/38638.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">一. 简单的方法<br>最简单的方法就是通过Tomcat自带的startup.sh来自动启动，编辑/etc/rc.d/rc.local，增加：<br>export JDK_HOME=/usr/local/jdk<br>export JAVA_HOME=/usr/local/jdk<br>/usr/local/tomcat/bin/startup.sh<br>&nbsp;<br>二. 复杂而专业的方法<br>第一个方法无法指定启动Tomcat服务的用户，存在安全隐患，另外在系统关闭时无法自动停止服务。在Linux下，Tomcat可以作为一个守护进程来启动以及停止，这个必须借助于项目commons-daemon中的jsvc工具。Tomcat安装完后就带有这个工具的源码$CATALINA_HOME/bin/jsvc.tar.gz。首先安装这个工具：<br># tar zxvf jsvc.tar.gz<br># cd jsvc-src<br># chmod +x configure<br># ./configure --with-java=/usr/jdk<br># make<br># ./jsvc -help&nbsp; //检验<br>&nbsp;<br>完成后是无法用chkconfig --add tomcat设置为自动启动，会显示错误信息：service tomcat does not support chkconfig ，需要修改脚本$CATALINA_HOME/bin/jsvc-src/native/Tomcat.sh，并cp到/etc/rc.d/init.d。我的启动脚本如下（中间出现了几次问题，结果发现都是脚本的问题，所以一定要谨慎）：<br>#!/bin/sh <br># <br># Startup Script for Tomcat5 <br># <br># chkconfig: 345 87 13 <br># description: Tomcat Daemon <br># processname: jsvc <br># pidfile: /var/run/jsvc.pid <br># config: <br># <br># Source function library.<br>. /etc/rc.d/init.d/functions <br># <br>prog=tomcat <br># <br># Small shell script to show how to start/stop Tomcat using jsvc <br># If you want to have Tomcat running on port 80 please modify the server.xml <br># file: <br># <br># &lt;!-- Define a non-SSL HTTP/1.1 Connector on port 80 --&gt; <br># &lt;Connector className="org.apache.catalina.connector.http.HttpConnector" <br># port="80" minProcessors="5" maxProcessors="75" <br># enableLookups="true" redirectPort="8443" <br># acceptCount="10" debug="0" connectionTimeout="60000"/&gt; <br># <br># You need a developement version of Tomcat (Apache Tomcat/4.1-dev) <br># <br># Adapt the following lines to your configuration <br>JAVA_HOME=/usr/local/jdk<br>CATALINA_HOME=/usr/local/tomcat<br>DAEMON_HOME=$CATALINA_HOME/bin/jsvc-src <br>TOMCAT_USER=tomcat<br>TMP_DIR=/var/tmp <br>CATALINA_OPTS= <br>CLASSPATH=$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar<br>start(){ <br>echo -n $"Starting $prog: " <br>&nbsp;&nbsp;&nbsp; #<br>&nbsp;&nbsp;&nbsp; # Start Tomcat<br>&nbsp;&nbsp;&nbsp; #<br>&nbsp;&nbsp;&nbsp; $DAEMON_HOME/jsvc \<br>&nbsp;&nbsp;&nbsp; -user $TOMCAT_USER \<br>&nbsp;&nbsp;&nbsp; -home $JAVA_HOME \<br>&nbsp;&nbsp;&nbsp; -Dcatalina.home=$CATALINA_HOME \<br>&nbsp;&nbsp;&nbsp; -Djava.io.tmpdir=$TMP_DIR \<br>&nbsp;&nbsp;&nbsp; -outfile $CATALINA_HOME/logs/catalina.out \<br>&nbsp;&nbsp;&nbsp; -errfile '&amp;1' \<br>&nbsp;&nbsp;&nbsp; $CATALINA_OPTS \<br>&nbsp;&nbsp;&nbsp; -cp $CLASSPATH \<br>&nbsp;&nbsp;&nbsp; org.apache.catalina.startup.Bootstrap<br>&nbsp;&nbsp;&nbsp; #<br>&nbsp;&nbsp;&nbsp; # To get a verbose JVM<br>&nbsp;&nbsp;&nbsp; #-verbose \<br>&nbsp;&nbsp;&nbsp; # To get a debug of jsvc.<br>&nbsp;&nbsp;&nbsp; #-debug \<br>&nbsp;&nbsp;&nbsp; RETVAL=$? <br>&nbsp;&nbsp;&nbsp; [ $RETVAL = 0 ] &amp;&amp; touch /var/lock/subsys/jsvc <br>&nbsp;&nbsp;&nbsp; [ $RETVAL = 0 ] &amp;&amp; echo_success || echo_failure <br>&nbsp;&nbsp;&nbsp; echo <br>&nbsp;&nbsp;&nbsp; return $RETVAL <br>} <br>stop(){ <br>&nbsp;&nbsp;&nbsp; echo -n $"Stopping $prog: " <br>&nbsp;&nbsp;&nbsp; # <br>&nbsp;&nbsp;&nbsp; # Stop Tomcat <br>&nbsp;&nbsp;&nbsp; # <br>&nbsp;&nbsp;&nbsp; PID=`cat /var/run/jsvc.pid` <br>&nbsp;&nbsp;&nbsp; kill $PID <br>&nbsp;&nbsp;&nbsp; RETVAL=$? <br>&nbsp;&nbsp;&nbsp; [ $RETVAL = 0 ] &amp;&amp; rm /var/lock/subsys/jsvc <br>&nbsp;&nbsp;&nbsp; [ $RETVAL = 0 ] &amp;&amp; echo_success || echo_failure <br>&nbsp;&nbsp;&nbsp; echo <br>&nbsp;&nbsp;&nbsp; return $RETVAL <br>} <br>case "$1" in <br>start) <br>start <br>;; <br>stop) <br>stop <br>;; <br>restart|reload) <br>stop <br>start <br>;; <br>*) <br>echo "Usage $0 start/stop" <br>exit 1;; <br>esac<br>这样便大功告成了（某些路径、用户设置需要根据自己的具体环境修改）。可能还需要用chown tomcat tomcat及chmod&nbsp; +x tomcat修改属主及可执行权限。</span><img src ="http://www.cnitblog.com/windone0109/aggbug/38638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2008-01-09 11:51 <a href="http://www.cnitblog.com/windone0109/archive/2008/01/09/38638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux指令大全</title><link>http://www.cnitblog.com/windone0109/archive/2007/10/24/35267.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 24 Oct 2007 04:34:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2007/10/24/35267.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/35267.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2007/10/24/35267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/35267.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/35267.html</trackback:ping><description><![CDATA[<p>推荐给有需要的人。<br><br><a style="COLOR: #ff00ff" href="http://www.cnitblog.com/Files/windone0109/LinuxCommand.pdf">linux指令大全，下载</a>。<br><br>看过一段时间，现在被我用来做工具书查看了。</p>
<img src ="http://www.cnitblog.com/windone0109/aggbug/35267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2007-10-24 12:34 <a href="http://www.cnitblog.com/windone0109/archive/2007/10/24/35267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux操作系统Ifconfig命令详细解析</title><link>http://www.cnitblog.com/windone0109/archive/2007/10/24/35266.html</link><dc:creator>windone</dc:creator><author>windone</author><pubDate>Wed, 24 Oct 2007 04:24:00 GMT</pubDate><guid>http://www.cnitblog.com/windone0109/archive/2007/10/24/35266.html</guid><wfw:comment>http://www.cnitblog.com/windone0109/comments/35266.html</wfw:comment><comments>http://www.cnitblog.com/windone0109/archive/2007/10/24/35266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/windone0109/comments/commentRss/35266.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/windone0109/services/trackbacks/35266.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">　　无论是Linux <a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>自动</font></a>安装还是我们手工安装，Linux 都会向你询问有关<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>的问题并配置相关的软件。这个用于配置网卡的基本命令就是ifconfig。 </p>
<p style="FONT-SIZE: 10pt">　　在执行ifconfig 命令后，系统将在内核表中设置必要的参数，这样Linux 就知道如何与<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>上的网卡通信。ifconfig 命令有以下两种格式： </p>
<p style="FONT-SIZE: 10pt">　　※ifconfig [interface] </p>
<p style="FONT-SIZE: 10pt">　　※ifconfig interface [aftype] option | address &#8230; </p>
<p style="FONT-SIZE: 10pt">　　ifconfig 的第一种格式（或使用不带任何参数的ifconfig 命令）可以用来查看当前系统的<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>配置情况。 </p>
<p style="FONT-SIZE: 10pt">　　在刚刚安装完系统之后，实际上是在没有网卡或者<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>连接的情况下使用Linux，但通过ifconfig 可以使用回绕方式工作，使计算机认为自己工作在<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>上。 </p>
<p style="FONT-SIZE: 10pt">　　现在我们运行一下ifconfig 命令，不带参数的ifconfig 命令可以显示当前启动的<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>接口，其输出结果为： </p>
<p style="FONT-SIZE: 10pt">　　[root@machine1 /sbin]#ifconfig </p>
<p style="FONT-SIZE: 10pt">　　eth0 Link encap:Ethernet Hwaddr 52:54:AB:DD:6F:61 </p>
<p style="FONT-SIZE: 10pt">　　inet addr:210.34.6.89 Bcast:210.34.6.127 Mask:255.255.255.128 </p>
<p style="FONT-SIZE: 10pt">　　UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 </p>
<p style="FONT-SIZE: 10pt">　　RX packets:46299 errors:0 dropped:0 overruns:0 frame:189 </p>
<p style="FONT-SIZE: 10pt">　　TX packets:3057 errors:0 dropped:0 overruns:0 carrier:0 </p>
<p style="FONT-SIZE: 10pt">　　collisions:0 txqueuelen:100 </p>
<p style="FONT-SIZE: 10pt">　　Interrupt:5 Base address:0xece0 </p>
<p style="FONT-SIZE: 10pt">　　lo Link encap:Local Loopback </p>
<p style="FONT-SIZE: 10pt">　　inet addr:127.0.0.1 Mask:255.0.0.0 </p>
<p style="FONT-SIZE: 10pt">　　UP LOOPBACK RUNNING MTU:3924 Metric:1 </p>
<p style="FONT-SIZE: 10pt">　　RX packets:44 errors:0 dropped:0 overruns:0 frame:0 </p>
<p style="FONT-SIZE: 10pt">　　TX packets:44 errors:0 dropped:0 overruns:0 carrier:0 </p>
<p style="FONT-SIZE: 10pt">　　collisions:0 txqueuelen:0 </p>
<p style="FONT-SIZE: 10pt">　　其中以eth0 为首的部分是本机的以太网卡配置参数，这里显示了网卡在下的设备名/dev/eth0 和硬件的MAC 地址52:54:AB:DD:6F:61，MAC 地址是生产厂家定的，每个网卡拥有的唯一地址。 </p>
<p style="FONT-SIZE: 10pt">　　不过我们可以手工改<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>动网</font></a>卡的MAC 地址，只要我们在/etc/rc.d/init.d/中的network 中加入： </p>
<p style="FONT-SIZE: 10pt">　　ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx </p>
<p style="FONT-SIZE: 10pt">　　然后重启，此时再用ifconfig 命令查看一下，我们就会发现网卡的MAC 地址已经变成xx:xx:xx:xx:xx:xx了。 </p>
<p style="FONT-SIZE: 10pt">　　后继 常用网卡ip设置方法： </p>
<p style="FONT-SIZE: 10pt">　　直接通过setup 进行设置。 </p>
<p style="FONT-SIZE: 10pt">　　配置多个网卡 ifconfig -a 查看<a class=channel_keylink href="http://www.3800hk.com/"><font face=宋体 color=#0810b7>网络</font></a>设备 eth0 / eth1 / lo (回路)。 </p>
<p style="FONT-SIZE: 10pt">　　ifconfig eth1 //设备1 </p>
<p style="FONT-SIZE: 10pt">　　ifconfig eth1 192.168.1.10 netmask 255.255.255.0 //设置网卡子网及ip </p>
<img src ="http://www.cnitblog.com/windone0109/aggbug/35266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/windone0109/" target="_blank">windone</a> 2007-10-24 12:24 <a href="http://www.cnitblog.com/windone0109/archive/2007/10/24/35266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>