﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-思想比知识更重要 成长比成功更重要-随笔分类-Unix/Linux</title><link>http://www.blogjava.net/renyangok/category/19586.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 18 Mar 2008 04:21:10 GMT</lastBuildDate><pubDate>Tue, 18 Mar 2008 04:21:10 GMT</pubDate><ttl>60</ttl><item><title>[转] update-alternatives </title><link>http://www.blogjava.net/renyangok/archive/2008/02/13/179749.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Wed, 13 Feb 2008 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2008/02/13/179749.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/179749.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2008/02/13/179749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/179749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/179749.html</trackback:ping><description><![CDATA[Linux 发展到今天，可用的软件已经非常多了。这样自然会有一些软件的功能大致上相同。例如，同样是编辑器，就有
nvi、vim、emacs、nano，而且我说的这些还只是一部分。大多数情况下，这样的功能相似的软件都是同时安装在系统里的，可以用它们的名称来执
行。例如，要执行 vim，只要在终端下输入 vim
并按回车就可以了。不过，有些情况下我们需要用一个相对固定的命令调用这些程序中的一个。例如，当我们写一个脚本程序时，只要写下
editor，而不希望要为&#8220;编辑器是哪个&#8221;而操心。Debian 提供了一种机制来解决这个问题，而 update-alternatives
就是用来实现这种机制的。<br />
<br />
在说明 update-alternatives 的详细内容之间，先让我们看看系统中已有的例子。打开终端，执行下面的命令：<br />
<br />
herbert@natsu:~$ ls -l /usr/bin/editor<br />
lrwxrwxrwx 1 root root 24 2004-09-26 08:48 /usr/bin/editor -&gt; /etc/alternatives/editor<br />
herbert@natsu:~$ ls -l /etc/alternatives/editor<br />
lrwxrwxrwx 1 root root 12 2004-10-27 16:24 /etc/alternatives/editor -&gt; /usr/bin/vim<br />
herbert@natsu:~$<br />
<br />
我
们看到，editor 这个可执行命令实际上是个符号链接，它指向 /etc/alternatives/editor；而
/etc/alternatives/editor 也是个符号链接，它指向 /usr/bin/vim。这样，当我输入 editor
并回车时，将执行 vim。之所以要在 /usr/bin 和 /etc/alternatives
中费心建立这样两个链接，就是要实现上面说到的特性：方便脚本<br />
程序的编写和系统的管理。<br />
<br />
下面我们就来看看 update-alternatives 的功能。当然，如果你觉得我说得不详细，可以看看这个命令的 manpage：UPDATE-ALTERNATIVES(8)。<br />
<br />
首先要介绍的参数是 --display。它使我们可以看到一个命令的所有可选命令。执行<br />
<br />
natsu:/home/herbert# update-alternatives --display editor<br />
editor - status is auto.<br />
&nbsp;link currently points to /usr/bin/vim<br />
/bin/ed - priority -100<br />
&nbsp;slave editor.1.gz: /usr/share/man/man1/ed.1.gz<br />
/usr/bin/nvi - priority 19<br />
&nbsp;slave editor.1.gz: /usr/share/man/man1/nvi.1.gz<br />
/bin/nano - priority 40<br />
&nbsp;slave editor.1.gz: /usr/share/man/man1/nano.1.gz<br />
/usr/bin/vim - priority 120<br />
&nbsp;slave editor.1.gz: /usr/share/man/man1/vim.1.gz<br />
/usr/bin/emacs21 - priority 0<br />
&nbsp;slave editor.1.gz: /usr/share/man/man1/emacs.1emacs21.gz<br />
Current `best' version is /usr/bin/vim.<br />
natsu:/home/herbert#<br />
<br />
你可以看到我的机器上的所有可以用来被 editor 链接的命令。<br />
<br />
下面说说 --config。这个选项使我们可以选择其中一个命令：<br />
<br />
natsu:/home/herbert# update-alternatives --config editor<br />
<br />
There are 5 alternatives which provide `editor'. <br />
<br />
&nbsp; Selection Alternative<br />
-----------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 /bin/ed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 /usr/bin/nvi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 /bin/nano<br />
*+&nbsp;&nbsp;&nbsp; 4 /usr/bin/vim<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 /usr/bin/emacs21<br />
<br />
Press enter to keep the default[*], or type selection number: 4<br />
Using `/usr/bin/vim' to provide `editor'.<br />
natsu:/home/herbert#<br />
<br />
我并没有修改它，因为我还是比较喜欢 vim 的。当然，你可以选择别的程序。<br />
<br />
说
到这里我们就要介绍一些概念了。首先，update-alternatives 在一般情况下是由 postinst 和 prerm
这样的安装脚本自动调用的，所以一个 alternative 的状态有两种：自动和手动。每个 alternative
的初始状态都是自动。如果系统发现管理员手动修改了一个
alternative，它的状态就从自动变成了手动，这样安装脚本就不会更新它了。如果你希望将一个 alternative 变回自动，只要执行<br />
<br />
update-alternatives --auto editor<br />
<br />
就可以了。你注意到了吗？我们说到了&#8220;名字&#8221;。该怎样写名字呢？这就是我们要介绍的第二个概念：<br />
general name -- 这是指一系列功能相似的程序的&#8220;公用&#8221;名字（包括绝对路径），比如 /usr/bin/editor。<br />
link -- 这是指一个 alternative 在 /etc/alternative 中的名字，比如 editor。<br />
alternative -- 顾名思义，这是指一个可选的程序所在的路径（包括绝对路径），比如 /usr/bin/vim。<br />
--
auto，--display 和 --config 跟的都是
link。我们要说的第三个概念是优先级。这个比较简单，当然优先级越高的程序越好啦（在大多数情况下，我不想争论）最后一个概念是主和从的
alternative。想想看，你将 /usr/bin/editor 链接到了 vim，可是当你执行 man editor 时看到的却是
emacs 的 manpage，你会做何感想呢？这就引出了主和从 alternative 的概念了：当更新主的 alternative
时，从的 alternative 也会被更新。<br />
<br />
说完这四个重要的概念后，我们介绍另外两个选项。至于其他的。。。。我相信你会去看手册页的，对吗？<br />
<br />
第一个是 --install。它的格式是：<br />
<br />
update-alternatives --install gen link alt pri [--slave sgen slink salt] ...<br />
<br />
gen，
link，alt，pri 分别是我们上面说过的。如果需要从的 alternative，你可以用 --slave
加在后面。如果你在向一个已经存在的 alternative 组中添加新的 alternatives，该命令会把这些 alternatives
加入到这个已经存在的 alternative 组的<br />
列表中，并用新的可选命令作为新的命令；否则，将会建立一个新的自动的 alternative 组。<br />
<br />
呜呼！我加入了一个错误的 alternative。我不想要这个 alternative 了。在这种情况 下，可以执行下面的命令：<br />
<br />
update-alternatives --remove name path<br />
<br />
name
是一个在 /etc/alternatives 中的名字，也就是上面的 link，而 path
是希望删除的可选程序名的绝对路径名（放心，这样只是从列表中删除了这个程序，并不会真的从硬盘上删除程序的可执行文件）。如果从一个
alternative 组中删除了一个正在被链接的程序并且这个组仍然没有变成空的，update-alternatives
会自动用一个具有其他优先级的可选程序代替原来的程序。如果这个组变成空的了，那么连这个 alternative
组都会被移除。如果删除的程序没有被链接，则只有有关这个程序的信息会被移除。<br />
<br />
说个例子吧。我下载了 Eclipse，并且安装了
gcj 和 gij。可是我发现 GNU 的 java 工具还不足以运行 Eclipse。我只好到 Sun 公司的网页上下载了它的 java
工具 jdk。因为是自己安装的，我将它们安装在 /usr/local 上，以便将来重新安装 Linux
系统时这些程序仍然可以使用。于是我要做的就是用这个 jdk 中的 java 和 javac 来代替系统原来的。执行<br />
<br />
natsu:/home/herbert# update-alternatives --display java<br />
java - status is auto.<br />
&nbsp;link currently points to /usr/local/j2sdk1.4.2_06/bin/java<br />
/usr/bin/gij-wrapper-3.3 - priority 33<br />
&nbsp;slave java.1.gz: /usr/share/man/man1/gij-wrapper-3.3.1.gz<br />
/usr/local/j2sdk1.4.2_06/bin/java - priority 100<br />
&nbsp;slave java.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/java.1<br />
Current `best' version is /usr/local/j2sdk1.4.2_06/bin/java.<br />
natsu:/home/herbert# update-alternatives --display javac<br />
javac - status is auto.<br />
&nbsp;link currently points to /usr/local/j2sdk1.4.2_06/bin/javac<br />
/usr/bin/gcj-wrapper-3.3 - priority 33<br />
&nbsp;slave javah: /usr/bin/gcjh-wrapper-3.3<br />
&nbsp;slave javac.1.gz: /usr/share/man/man1/gcj-wrapper-3.3.1.gz<br />
&nbsp;slave javah.1.gz: /usr/share/man/man1/gcjh-wrapper-3.3.1.gz<br />
/usr/bin/gcj-wrapper-3.4 - priority 33<br />
&nbsp;slave javah: /usr/bin/gcjh-wrapper-3.4<br />
&nbsp;slave javac.1.gz: /usr/share/man/man1/gcj-wrapper-3.4.1.gz<br />
&nbsp;slave javah.1.gz: /usr/share/man/man1/gcjh-wrapper-3.4.1.gz<br />
/usr/local/j2sdk1.4.2_06/bin/javac - priority 100<br />
&nbsp;slave javah: /usr/local/j2sdk1.4.2_06/bin/javah<br />
&nbsp;slave javac.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/javac.1<br />
&nbsp;slave javah.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/javah.1<br />
Current `best' version is /usr/local/j2sdk1.4.2_06/bin/javac.<br />
natsu:/home/herbert#<br />
<br />
（你看到的是我更新以后的）就可以得到关于要更新哪些 alternatives 的信息。我是这么更新的：<br />
<br />
update-alternatives
--install /usr/bin/javac javac /usr/local/j2sdk1.4.2_06/bin/javac 100
--slave /usr/bin/javah javah /usr/local/j2sdk1.4.2_06/bin/javah --slave
/usr/share/man/man1/javac.1.gz javac.1.gz
/usr/local/j2sdk1.4.2_06/man/man1/javac.1 --slave
/usr/share/man/man1/javah.1.gz javah.1.gz
/usr/local/j2sdk1.4.2_06/man/man1/javah.1<br />
update-alternatives
--install /usr/bin/java java /usr/local/j2sdk1.4.2_06/bin/java 100
--slave /usr/share/man/man1/java.1.gz java.1.gz
/usr/local/j2sdk1.4.2_06/man/man1/java.1<br />
<img src ="http://www.blogjava.net/renyangok/aggbug/179749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2008-02-13 10:08 <a href="http://www.blogjava.net/renyangok/archive/2008/02/13/179749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu7.10系统安装（包括各种常用软件，显卡驱动，双显示器，chroot sarge环境）</title><link>http://www.blogjava.net/renyangok/archive/2007/12/19/168813.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Wed, 19 Dec 2007 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/12/19/168813.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/168813.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/12/19/168813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/168813.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/168813.html</trackback:ping><description><![CDATA[1, insert Ubuntu 7.10 CD<br />
a, format disc(primary 10G ext3; extend 59G ext3; swap 1G)<br />
<br />
b, install(timezone shanghai; en_US; "prepare disc space" manual, or the system will partition autoly)<br />
<br />
c, auto restart, go on install system(remenber cut off the net line except the netwidth is large, or it will cost long time to download from far away)<br />
<br />
2, config<br />
a, sources list<br />
sudo vim /etc/apt/sources.list<br />
# add "deb http://debian.exoweb.net/debian.cn99.com/debian etch main" into it<br />
sudo apt-get update<br />
sudo apt-get upgrade<br />
<br />
b, vedio card driver<br />
在ubuntu7.10下装nvidia 7 series显卡并配置双屏显示：<br />
<br />
一，显卡驱动 ＋ 双显示器 <br />
(修改X配置命令：sudo dpkg-reconfigure xserver-xorg)<br />
<br />
1，到nvidia网站下载7系列显卡的最新驱动<br />
<br />
2，ensure that the linux-restricted-modules or linux-restricted-modules-common packages have been uninstalled. Alternatively, you can edit the /etc/default/linux-restricted-modules or /etc/default/linux-restricted-modules-common configuration file and disable the NVIDIA linux-restricted kernel modules (nvidia, nvidia_legacy) via:<br />
<br />
DISABLED_MODULES="nv nvidia_new"<br />
<br />
3, <br />
sudo apt-get remove --purge nvidia-glx nvidia-glx-new<br />
sudo rm /etc/init.d/nvidia-glx /etc/init.d/nvidia-kernel /lib/linux-restricted-modules/.nvidia_new_installed<br />
<br />
4，然后ctrl+alt+1进入tty1<br />
sudo /etc/init.d/gdm stop<br />
sudo sh NVIDIA-Linux-x86-100.14.23-pkg1.run<br />
(这时会出现错误提示，说少了&#8220;libc header file...libc development package&#8221;)<br />
sudo apt-get install sudo apt-get install build-essential xorg-dev pkg-config linux-headers-$(uname -r), libc6-dev<br />
sudo sh NVIDIA-Linux-x86-100.14.23-pkg1.run<br />
sudo /etc/init.d/gdm start<br />
<br />
用application -&gt; system tools里的nvidia工具去配置双显示器<br />
<br />
c, multi-language<br />
System -&gt; Administration -&gt; Language support: install English and Chinese<br />
check "input method"<br />
<br />
d, Wen Quan Yi font<br />
browse http://wenq.org/, and download 文泉驿点阵宋体 and 文泉驿矢量正黑, then install them<br />
System -&gt; Preference -&gt; Appearance -&gt; Fonts 前四项选择：点阵宋体（WenQuanYi Bitmap Song）， 第五项不改（Monospace）<br />
sudo fc-cache -f -v (刷新字体缓存，每次修改字体都要这样，不然Xorg会很慢)<br />
<br />
e, stardict&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
sudo apt-get install stardict<br />
(http://stardict.sourceforge.net/Dictionaries_zh_CN.php 下载朗道英汉，汉英字典)<br />
tar -xjvf *** --directory /usr/share/stardict/dic/<br />
<br />
f, pidgin internet messager<br />
sudo apt-get install gaim-guifications<br />
config: Tools -&gt; Plugins -&gt; (check) Guifications; then, config it to uncheck on "Chat message"<br />
<br />
3, install and config Software<br />
sudo apt-get install postgresql-8.1 python2.4 ipython vim-gnome sun-java5-jdk eclipse subversion build-essential ssh build-essential meld kompare<br />
<br />
a, postgresql<br />
sudo su - postgres (for user postgres has Null password, so you can't just "su - postgres", or you can sudo "sudo passwd postgres" to set password for postgres, then "su - postgres")<br />
createuser (enter username and password.)<br />
config postgresql as below:<br />
In /etc/postgresql/8.1/main/postgresql.conf, Change listen_addresses to '*' and change datestyle to 'ISO,European' and uncomment them.<br />
In /etc/postgresql/8.1/main/pg_hba.conf, 最后加入一行&#8220;host&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp; justin&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 127.0.0.1/16&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; trust&#8221;<br />
<br />
b, eclipse<br />
sudo eclipse, exit, eclipse<br />
<br />
c, ssh<br />
When other mathines want to ssh or scp your mathine which is new OS, it should "rm ~/.ssh/known_hosts" to reload the new Cert.<br />
<br />
d, kompare<br />
add a file svndiff in src with context<br />
"""<br />
if [ $1 ] ; then<br />
&nbsp;&nbsp;&nbsp; svn up -r $1<br />
&nbsp;&nbsp;&nbsp; svn st -q<br />
&nbsp;&nbsp;&nbsp; svn log -r $1<br />
&nbsp;&nbsp;&nbsp; PRE=`expr $1 - 1`<br />
&nbsp;&nbsp;&nbsp; svn diff --diff-cmd=diff -x "-U 10000" -r$PRE:$1 &gt; /tmp/$1.diff<br />
&nbsp;&nbsp;&nbsp; cat /tmp/$1.diff | kompare -<br />
else<br />
&nbsp;&nbsp;&nbsp; svn up<br />
&nbsp;&nbsp;&nbsp; svn st<br />
&nbsp;&nbsp;&nbsp; svn diff --diff-cmd=diff -x "-U 10000" | kompare -<br />
fi<br />
"""<br />
then, in src, ./svndiff 9827 will show diff about r9827<br />
<br />
e, firefox add-ons<br />
firebug, flashblock<br />
<br />
3, chroot<br />
a,<br />
sudo apt-get install debootstrap<br />
sudo debootstrap --arch i386 etch /home/etch http://debian.exoweb.net/debian.cn99.com/debian/<br />
(if in 64 bit system, use --arch amd64)<br />
sudo chroot /home/etch<br />
#in etch as root<br />
apt-get install locales<br />
dpkg-reconfigure locales #(choose en_us UTF8 as before)<br />
apt-get install vim vim-gnome xbase-clients less sudo postgresql-client subversion<br />
echo "etch" &gt; /etc/debian-chroot<br />
visudo (add user justin to sudo)<br />
adduser justin (删除的命令是userdel justin)<br />
<br />
在ubuntu的/usr/bin/etch加入：<br />
sudo cp /etc/passwd /home/etch/etc/<br />
sudo cp /etc/shadow /home/etch/etc/<br />
sudo cp /etc/group /home/etch/etc/<br />
sudo cp /etc/sudoers /home/etch/etc/<br />
sudo cp /etc/resolv.conf /home/etch/etc/<br />
sudo cp /etc/hosts /home/etch/etc/<br />
<br />
在/etc/fstab加入：<br />
/home&nbsp;&nbsp; /home/etch/home&nbsp;&nbsp;&nbsp; none&nbsp;&nbsp;&nbsp; bind 0 0<br />
/tmp&nbsp;&nbsp;&nbsp; /home/etch/tmp&nbsp;&nbsp;&nbsp;&nbsp; none&nbsp;&nbsp;&nbsp; bind 0 0<br />
/dev&nbsp;&nbsp;&nbsp; /home/etch/dev&nbsp;&nbsp;&nbsp;&nbsp; none&nbsp;&nbsp;&nbsp; bind 0 0<br />
/proc&nbsp;&nbsp; /home/etch/proc&nbsp;&nbsp;&nbsp; none&nbsp;&nbsp;&nbsp; bind 0 0<br />
sudo chroot /home/etch/&nbsp; su - justin<br />
<br />
现在就可一享受chroot的双系统了<br />
<br />
b, run X in etch 3 steps<br />
b1, (etch)mkdir /tmp/.X11-unix<br />
(ubuntu)sudo echo "/tmp/.X11-unix/x0 /home/justin/etch/tmp/.X11-unix/x0 none bind 0 0" &gt;&gt; /etc/fstab<br />
# another way is write it in to /etc/fstab, or sudo mount --bind /tmp/*** /home/justin/etch/tmp/***<br />
b2, (etch)vim ~/.bashrc # add "export DISPLAY=:0.0"<br />
b3, (ubuntu) cp ~/.Xauthority ~/etch/home/justin/ （其实这步不需要，因为上面已经把/home mount到了/home/etch/home了）<br />
<br />
c, install java<br />
#download jdk-1_5_0_14-linux-i586.bin to /opt/, and into etch/opt/<br />
sudo chmod +x jdk-1_5_0_14-linux-i586.bin<br />
sudo ./jdk-1_5_0_14-linux-i586.bin<br />
vim ~/.bashrc<br />
#add below in the end of .bashrc<br />
#export JAVA_HOME=/opt/jdk1.5.0_14<br />
#export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar<br />
#export PATH=$JAVA_HOME/bin:$PATH<br />
<br />
java -version<br />
#java version "1.5.0_14"<br />
#Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)<br />
#Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing)<br />
<font size="-1">配置默认<font color="#c60a00">Java</font>使用哪个 <font color="#c60a00">sudo</font> update-alternatives --config <font color="#c60a00">java</font></font><br />
<img src ="http://www.blogjava.net/renyangok/aggbug/168813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-12-19 17:29 <a href="http://www.blogjava.net/renyangok/archive/2007/12/19/168813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>crontab用法</title><link>http://www.blogjava.net/renyangok/archive/2007/11/02/157783.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Fri, 02 Nov 2007 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/11/02/157783.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/157783.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/11/02/157783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/157783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/157783.html</trackback:ping><description><![CDATA[指令語法<br />
<br />
crontab [ -u user ] file<br />
crontab [ -u user ] { -l | -r | -e }<br />
<br />
指令說明<br />
<br />
crontab 提供我們在固定的間隔時間執行自訂的程式、系統指令或 shell secrip。時間間隔的單位可以是分鐘、小時、日、週、月及以上的任意組合。允許使用者離線執行，並且可以將執行結果以 email 通知使用者。因此，非常設合對週期性的管理分析或資料備份等工作。<br />
<br />
基本上，crontab 的指令格式分為六個部分，前五個為時間間隔，最後則是執行的指令。每一個部分用空格來區隔。<br />
<br />
分 -- 0-59<br />
時 -- 0-23<br />
日 -- 1-31<br />
月 -- 1-12 或使用英文名稱<br />
星期 -- 0-7 或使用英文名稱<br />
工作命令 -- 指令，shell script，程式....(建議使用絕對路徑)<br />
以上是 crontab 的基本格式。<br />
<br />
選項說明<br />
<br />
-u user<br />
以指定的使用者身份，執行 crontab 工作。此選項僅供 root 使用。<br />
<br />
<br />
-l<br />
顯示使用者現行的 crontab 檔。<br />
<br />
-r<br />
移除現行的 crontab 檔。<br />
<br />
-e<br />
進入 vi 編輯 crontab 檔(如有設定 VISUAL 或 EDITOR 環境變數，怎使用該環境變數所設定的編輯器來編輯)。在使用者退出編輯器後，會自動將所編輯 crontab 檔，置入 crontab 執行。<br />
相關檔案<br />
<br />
/etc/cron.allow<br />
/etc/cron.deny<br />
<br />
實例說明<br />
<br />
# crontab -l<br />
# DO NOT EDIT THIS FILE - edit the master and reinstall.<br />
# (/tmp/crontab.3672 installed on Thu Jan 1 15:55:18 2004)<br />
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)<br />
0 0-23/6 * * * /usr/bin/webalizer<br />
30 3 * * * /root/fbin/bak-web<br />
#<br />
<br />
先前曾提到，crontab 的格式分成六個部分，前五個是時間參數。在上例中你會發現除了數字與英文名稱，有使用到符號"*"，這個符號代表每一單位的意思，譬如 30 3 * * * 既代表 30分 3點 每日 每月 星期的每天。<br />
<br />
時間的指定，可以是單一的數字，或幾個數字用逗號來連接。看下例<br />
<br />
30 3,12 * * * /root/fbin/bak-web<br />
<br />
其中的第二項為 3,12，這代表 3 以及 12 小時的意思。再來看下例<br />
<br />
30 */6 * * * /root/fbin/bak-web<br />
<br />
我把第二項改成 */6 這代表每 6 小時，也相當於 6,12,18,24 的作用。此外還有一個區段的做法<br />
<br />
30 8-18/2 * * * /root/fbin/bak-web<br />
<br />
我把第二項改成 8-18/2 這代表在 8 小時到 18 小時之間每 2 小時，也相當於 8,10,12,14,16,18 的作用。<br />
<br />
在認知的以上介紹各項時間用法後，你可以視實際的需要自行組合。使用上的彈性是相當自由的。這篇暫時到此。<br />
<br />
<br />
<img src ="http://www.blogjava.net/renyangok/aggbug/157783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-11-02 16:56 <a href="http://www.blogjava.net/renyangok/archive/2007/11/02/157783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>diff和patch使用指南</title><link>http://www.blogjava.net/renyangok/archive/2007/10/25/155792.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Thu, 25 Oct 2007 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/10/25/155792.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/155792.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/10/25/155792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/155792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/155792.html</trackback:ping><description><![CDATA[<font size="4">(转自：</font>http://blog.chinaunix.net/u/24474/showart_217098.html<font size="4">)<br />
<br />
diff和patch是一对工具，在数学上来说，diff是对两个集合的差运算，patch是对两个集合的和运算。<br />
diff比较两个文件或文件集合的差异，并记录下来，生成一个diff文件，这也是我们常说的patch文件，即补丁文件。<br />
patch能将diff文件运用于 原来的两个集合之一，从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。<br />
因此我们只要能得到A, B, C三个文件中的任何两个，就能用diff和patch这对工具生成另外一个文件。<br />
<br />
这就是diff和patch的妙处。下面分别介绍一下两个工具的用法:<br />
<br />
1. diff的用法<br />
<br />
diff后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名，那么只作用在那么个目录下的同名文件。<br />
<br />
如果是两个目录的话，作用于该目录下的所有文件，不递归。如果我们希望递归执行，需要使用-r参数。<br />
<br />
命令diff A B &gt; C ,一般A是原始文件，B是修改后的文件，C称为A的补丁文件。<br />
不加任何参数生成的diff文件格式是一种简单的格式，这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式，可以标识出不同之处的上下文环境，这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。<br />
<br />
<br />
2. patch的用法<br />
<br />
patch用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说<br />
<br />
patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。<br />
<br />
之一步之后，你的文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢？<br />
<br />
patch -R B C 就可以重新还原到A了。<br />
<br />
所以不用担心会失去A的问题。<br />
<br />
其实patch在具体使用的时候是不用指定原文件的，因为补丁文件中都已经记载了原文件的路径和名称。patch足够聪明可以认出来。但是有时候会有点小
问题。比如一般对两个目录diff的时候可能已经包含了原目录的名字，但是我们打补丁的时候会进入到目录中再使用patch,着个时候就需要你告诉
patch命令怎么处理补丁文件中的路径。可以利用-pn开关，告诉patch命令忽略的路径分隔符的个数。举例如下：<br />
<br />
A文件在 DIR_A下，修改后的B文件在DIR_B下，一般DIR_A和DIR_B在同一级目录。我们为了对整个目录下的所有文件一次性diff,我们一般会到DIR_A和DIR_B的父目录下执行以下命令<br />
<br />
diff -rc DIR_A DIR_B &gt; C<br />
<br />
这个时候补丁文件C中会记录了原始文件的路径为 DIR_A/A<br />
<br />
现在另一个用户得到了A文件和C文件，其中A文件所在的目录也是DIR_A。 一般，他会比较喜欢在DIR_A目录下面进行patch操作，它会执行<br />
<br />
patch &lt; C<br />
<br />
但是这个时候patch分析C文件中的记录，认为原始文件是./DIR_A/A，但实际上是./A，此时patch会找不到原始文件。为了避免这种情况我们可以使用-p1参数如下<br />
<br />
patch -p1 &lt; C<br />
<br />
此时，patch会忽略掉第1个&#8221;/&#8221;之前的内容，认为原始文件是 ./A，这样就正确了。<br />
使用patch<br />
<br />
patch附带有一个很好的帮助，其中罗列了很多选项，但是99%的时间只要两个选项就能满足我们的需要：<br />
<br />
patch -p1 &lt; [patchfile]<br />
<br />
patch -R &lt; [patchfile] (used to undo a patch)<br />
<br />
-p1选项代表patchfile中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名左边目录的层数，顶层目录在不同的机器上有所不同。要使用这个选项，就要把你的patch放在要被打补丁的目录下，然后在这个目录中运行path -p1 &lt; [patchfile]。</font>
<img src ="http://www.blogjava.net/renyangok/aggbug/155792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-10-25 10:22 <a href="http://www.blogjava.net/renyangok/archive/2007/10/25/155792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.bash_profile和.bashrc的区别</title><link>http://www.blogjava.net/renyangok/archive/2007/07/16/130504.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Mon, 16 Jul 2007 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/07/16/130504.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/130504.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/07/16/130504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/130504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/130504.html</trackback:ping><description><![CDATA[<font size="2">/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.<br>
<br>
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.<br>
<br>
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.<br>
<br>
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.<br>
<br>
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. <br>
<br>
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.<br>
<br>
~/.bash_profile 是交互式、login 方式进入 bash 运行的<br>
<br>
~/.bashrc 是交互式 non-login 方式进入 bash 运行的<br>
<br>
通常二者设置大致相同，所以通常前者会调用后者。</font><img src ="http://www.blogjava.net/renyangok/aggbug/130504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-07-16 10:52 <a href="http://www.blogjava.net/renyangok/archive/2007/07/16/130504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下安装jython环境</title><link>http://www.blogjava.net/renyangok/archive/2007/07/13/130099.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Fri, 13 Jul 2007 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/07/13/130099.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/130099.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/07/13/130099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/130099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/130099.html</trackback:ping><description><![CDATA[一，安装jdk：<br><br>（这里的方法是用于ubuntu或debian的，把下载的jdk构建成deb包，我觉得是为了便于包管理，否则删除的时候都不知道删除哪些文件，很麻烦。）<br>1. 获取JDK<br>可以选择从Java官方下载: ::URL::http://java.sun.com 或者从其它网站下载.我用的版本是:jdk-1_5_0-linux-i586.bin<br><br>2. 构建打包环境<br>Debian专门提供了SDK 的DEB包构建工具: java-package,而Ubuntu是基于Debian的,所以<br># apt-get install -u java-package fakeroot<br><br>在apt-get之前最好update一下<br><br>3. 创建.deb 软件包<br><br>这一步要以普通用户运行,如果以Root运行是不允许的.会有下面的提示:<br><br>You are real root -- unfortunately, some Java distributions have<br>install scripts that directly manipulate /etc, and may cause some<br>inconsistencies on your system. Instead, you should become a<br>non-root user and run:<br><br>fakeroot make-jpkg jdk-1_5_0-linux-i586.bin<br><br>which will allow no damage to be done to your system files and<br>still permit the Java distribution to successfully extract.<br><br>Aborting.<br><br>以普通用户执行:<br>＄ fakeroot make-jpkg jdk-1_5_0_06-linux-i586.bin<br>接下来做一些必要的选择.几分钟后,就应当出现软件包创建成功的提示.你在当前目录下会发现类似:<br>sun-j2sdk1.5_1.5.0+update00_i386.deb的软件包<br><br>4. 安装<br>切换回root执行以下命令:<br># dpkg -i sun-j2sdk1.5_1.5.0+update06_i386.deb<br><br>5.配置环境<br><br>在 ~/.bashrc脚本文件中加入类似如下内容<br><br>PATH=＄PATH:/usr/lib/j2sdk1.5-sun/bin:/usr/lib/j2sdk1.5-sun/jre/bin<br>JAVA_HOME=/usr/lib/j2sdk1.5-sun<br>JRE_HOME=/usr/lib/j2sdk1.5-sun/jre<br>CLASSPATH=.:/usr/lib/j2sdk1.5-sun/lib/tools.jar:/usr/lib/j2sdk1.5-sun/lib/dt.jar <br>export PATH<br>export JRE_HOME<br>export JAVA_HOME<br>export CLASSPATH<br><br>6. 测试<br>创建一个简单的java程序(Hello.java)<br>public class Hello<br>{<br>public Hello()<br>{<br>}<br><br>public static void main(String[] args)<br>{<br>System.out.println("Hello World!";<br>}<br><br>}<br>然后<br>＄javac Hello.java<br>检查当前目录会生成一个Hello.class的文件, 然后运行<br>＄java Hello<br>Hello World!<br>OK,测试成功!<br><br>7. 中文化安装中文字体:<br>在 ＄JAVA_HOME/jre/lib/fonts/ 目录下创建一个fallback目录.<br>复制中文字体(例如:simsun.ttf 至此目录.<br><br>8. 安装插件<br>对于此种方法安装的Java环境, 浏览器插件文件位置应当位于:<br>/usr/lib/j2sdk1.5-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so<br><br>以 firefox1.5.0.1为例:<br># cd /usr/lib/mozilla-firefox/plugins<br># ln -s \<br>/usr/lib/j2sdk1.5-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so<br><br>卸载JDK:<br># apt-get remove --purge sun-j2sdk1.5<br>卸载插件, 直接删除符号链接:<br># rm /usr/lib/mozilla-firefox/plugins/libjavaplugin_oji.so<br><br>二，安装jython：<br><br>1，http://www.jython.org/Project/installation.html下载jython安装文件，运行命令&#8220;java -jar jython_installer-2.2rc2.jar&#8221;，jython即安装成功。比如安装在/home/justin/java/jython2.2目录下<br><br>2，把jython包加入classpath，即把上面的classpath改为：CLASSPATH=.:/usr/lib/j2sdk1.5-sun/lib/tools.jar:/usr/lib/j2sdk1.5-sun/lib/dt.jar:/home/justin/java/jython2.2/jython.jar<br>此后就可以在java文件中加入python库了，例如：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.python.util.PythonInterpreter;&nbsp;<br><br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.python.core.</span><span style="color: #000000;">*</span><span style="color: #000000;">;&nbsp;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;SimpleEmbedded&nbsp;{&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String&nbsp;[]args)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;PyException<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PythonInterpreter&nbsp;interp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PythonInterpreter();<br><br>&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Hello,&nbsp;brave&nbsp;new&nbsp;world</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interp.exec(</span><span style="color: #000000;">"</span><span style="color: #000000;">import&nbsp;sys</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interp.exec(</span><span style="color: #000000;">"</span><span style="color: #000000;">print&nbsp;sys</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interp.set(</span><span style="color: #000000;">"</span><span style="color: #000000;">a</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PyInteger(</span><span style="color: #000000;">42</span><span style="color: #000000;">));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interp.exec(</span><span style="color: #000000;">"</span><span style="color: #000000;">print&nbsp;a</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interp.exec(</span><span style="color: #000000;">"</span><span style="color: #000000;">x&nbsp;=&nbsp;2+2</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;interp.get(</span><span style="color: #000000;">"</span><span style="color: #000000;">x</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">x:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">x);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Goodbye,&nbsp;cruel&nbsp;world</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>3，将选择的/home/justin/java/jython2.2/jython安装路径添加到 PATH 环境变量。现在只要输入&#8220;jython&#8221;就可以运行交互式 PATH ：<strong></strong><br>
$ jython<br>
Jython 2.1 on java1.4.0_01 (JIT: null)<br>
Type "copyright", "credits" or "license" for more information.<br>&gt;&gt;&gt;# 通过 Jython 访问标准 Java 库<br>
&gt;&gt;&gt; from java.util import Random<br>
&gt;&gt;&gt; rng = Random()<br>
&gt;&gt;&gt; i = rng.nextBoolean()<br>
&gt;&gt;&gt; print i<br><br>jython 解释器对于快速检查和作提示都很方便，但您不必在这其中完成所有工作 ― Jython 还允许您在源文件中编写代码，并随后运行该代码（<br>from java.util import Random<br>rng = Random()<br>#This is a comment in Jython<br>print "Flipping a coin..."<br>if rng.nextBoolean():<br>&nbsp;&nbsp;&nbsp; print "Came up heads"<br>else:<br>&nbsp;&nbsp;&nbsp; print "Came up tails"<br>用jython运行该文件，即可<br><img src ="http://www.blogjava.net/renyangok/aggbug/130099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-07-13 15:42 <a href="http://www.blogjava.net/renyangok/archive/2007/07/13/130099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux学习笔记</title><link>http://www.blogjava.net/renyangok/archive/2007/05/08/115986.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Tue, 08 May 2007 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/05/08/115986.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/115986.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/05/08/115986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/115986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/115986.html</trackback:ping><description><![CDATA[一，网络时间服务：<span style="color: rgb(0, 0, 0);"><br />
</span>
<p class="STYLE1"><font size="2">1. 与一个已知的时间服务器同步<br />
</font>公司配置：<br />
#synchronize time with fw.exoweb.net<br />
00 0 1 * * root rdate -s fw.exoweb.net</p>
<p class="STYLE1"><font size="2">
2. 配置网络时间协议（ntp）</font></p>
<br />
<p class="STYLE1"><strong><font size="2">1. 让linux自动同步时间</font></strong></p>
<p class="STYLE1"><font color="#0000ff" size="2">vi /etc/crontab<br />
加上一句：<br />
00 0 1 * * root rdate -s time.nist.gov</font></p>
<p class="STYLE1"><font color="#0000ff" size="2">time.nist.gov 是一个时间服务器.</font></p>
<p class="STYLE1"><font size="2"><strong>2. 时间服务器配置(192.168.10.1)<br />
<br />
</strong><font color="#0000ff">1）. # rpm -ivh ntp-4.1.2-4.EL3.1.i386.rpm<br />
2）. # vi /etc/ntp.conf<br />
注释一行<br />
restrict default ignore<br />
加入一行<br />
restrict 192.168.10.0 mask 255.255.255.0 notrust nomodify notrap<br />
3）. # vi /etc/ntp/step-tickers<br />
加入一行<br />
pool.ntp.org<br />
这样每次ntpd启动时，会自动连接该国际标准时间服务器；<br />
4）. # service ntpd start<br />
5）. # netstat -an |grep 123<br />
确保该端口以udp方式开放</font></font></p>
<p class="STYLE1"><font color="#0000ff" size="2">时间客户端配置(192.168.10.2)<br />
1）. # ntpdate 192.168.10.2<br />
应该显示同步成功<br />
2）. # crond -e<br />
加入<br />
0-59/10 * * * * /usr/sbin/ntpdate 192.168.10.1<br />
表示每隔10分钟同步一次时间</font></p>
<p class="STYLE1"><font color="#0000ff" size="2"><br />
</font></p>
二, 出现&nbsp; must be setuid root 错误<br />
解决办法：<br />
<br />
ls -l&nbsp;&nbsp;/usr/bin/sudo<br />
chown root:root /usr/bin/sudo<br />
chmod 4755 /usr/bin/sudo<br />
reboot<br />
<br />
<span class="oblog_text">
<p><strong>三，用nohup命令让Linux下程序永远在后台执行</strong></p>
<p>  Unix/Linux下一般想让某个程序在后台运行，很多都是使用 &amp; 在程序结尾来让程序自动运行。比如我们要运行mysql在后台： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/mysql/bin/mysqld_safe --user=mysql &amp;</p>
<p> 但是我们很多程序并不象mysqld一样可以做成守护进程，可能我们的程序只是普通程序而已，一般这种程序即使使用 &amp;
结尾，如果终端关闭，那么程序也会被关闭。为了能够后台运行，我们需要使用nohup这个命令，比如我们有个start.sh需要在后台运行，并且希望在
后台能够一直运行，那么就使用nohup： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nohup /root/start.sh &amp; </p>
<p>四， python反编译工具<br />
decompyle</p>
<p>五，rpm包转deb包工具： fakeroot and alien<br />
fakeroot alien -d *.rpm</p>
<br />
<p>六， 保存ftest信息并查看<br />
nohup ./nordicbetsite ftest -v2 &gt;ftest_result 2&gt;&amp;1 &amp;<br />
tail -f ftest_result</p>
<p>七， ip信息<br />
ifconfig</p>
<p>八， dpkg命令<br />
查看python2.5是否安装： dpkg -l python2.5<br />
查看名称含有python的所有软件： dpkg -l | grep python<br />
查看python2.5软件包的位置： dpkg -L python2.5</p>
九， 分区情况<br />
查看所有分区情况： df -h<br />
查看某个软件在哪个分区： df -h ***<br />
<br />
</span><span class="oblog_text"><br />
</span>
<img src ="http://www.blogjava.net/renyangok/aggbug/115986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-05-08 16:47 <a href="http://www.blogjava.net/renyangok/archive/2007/05/08/115986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令行下载工具</title><link>http://www.blogjava.net/renyangok/archive/2007/04/25/113431.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Wed, 25 Apr 2007 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/04/25/113431.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/113431.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/04/25/113431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/113431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/113431.html</trackback:ping><description><![CDATA[<span id="post1"><font zize="1"> 命令行下载工具 ，转自：http://blog.chinaunix.net/u/9465/showart.php?id=186155，方便在虚拟机上开发，不用再从外面拷贝到虚拟机上了。<br><br>&nbsp;&nbsp;
对于喜欢命令行操作及追求高效率、高速度下载的朋友，推荐使用命令行下载工具。命令行工具不但使用方便，而且大多具有很高的下载速度及下载效率，尤其适合
于大批量下载文件。下面就为大家详细介绍一下这些工具。 <br><br>&nbsp;&nbsp;&nbsp; <span style="color: #0001ff;"><font style="color: #990133;" size="2">Wget
</font>&nbsp;</span>&nbsp;&nbsp; Wget是一个十分常用命令行下载工具，多数Linux发行版本都默认包含这个工具。如果没有安装可在<a  href="http://www.gnu.org/software/wget/wget.html" target="_blank">http://www.gnu.org/software/wget/wget.html</a>下
载最新版本，并使用如下命令编译安装： <br>&nbsp;&nbsp;&nbsp; #tar zxvf wget-1.9.1.tar.gz <br>&nbsp;&nbsp;&nbsp; #cd wget-1.9.1
#./configure <br>&nbsp;&nbsp;&nbsp; #make #make install <br>它的用法很简单，Wget使用格式如下： #wget [选项] [下载地址]
1.Wget常用参数 ◆-b：后台下载，Wget默认的是把文件下载到当前目录。 ◆-O：将文件下载到指定的目录中。
◆-P：保存文件之前先创建指定名称的目录。 ◆-t：尝试连接次数，当Wget无法与服务器建立连接时，尝试连接多少次。
◆-c：断点续传，如果下载中断，那么连接恢复时会从上次断点开始下载。 &nbsp; &nbsp;
除了上述常用功能，Wget还支持HTTP和FTP代理功能，编辑其配置文件&#8220;/etc/wgetrc&#8221;即可。具体方法是使用VI编辑器打开上述文件，将
&#8220;http_proxy&#8221;和&#8220;ftp_proxoy&#8221;前的#去掉，然后在这两项后输入相应的代理服务器的地址，保存退出即可。此外，Wget还可下载整个
网站，如下载<a  href="http://man.chinaunix.net/" target="_blank">http://man.chinaunix.net</a>整个Man手册中心。只需输入如下命令即可： #wget -r -p -np -k <a  href="http://man.chinaunix.net/" target="_blank">http://man.chinaunix.net</a>
其中-r参数是指使用递归下载，-p是指下载所有显示完整网页所以需要的文件，如图片等，-np是指不搜索上层目录，-k则是指将绝对链接转换为相对链
接。<br><br>&nbsp;&nbsp;&nbsp;&nbsp; <font style="color: #990133;" size="2">Prozilla</font> &nbsp; &nbsp; Prozilla也是一个十分流行的命令行下载工具，支持多线程下载和断点续传功能。可到<a  href="http://prozilla.genesys.ro/" target="_blank">http://prozilla.genesys.ro/</a>下
载最新的1.3.7.4安装包，下载安装包后使用如下命令进行安装： <br>&nbsp;&nbsp;&nbsp; #tar zxvf prozilla-1.3.7.4.tar.gz <br>&nbsp;&nbsp;&nbsp; #cd
prozilla-1.3.7.4 <br>&nbsp;&nbsp;&nbsp; #./configure #make <br>&nbsp;&nbsp;&nbsp; #make install <br>Prozilla命令格式如下： #proz
[参数] [下载地址] 常用的选项有： ◆-k=n ：设置n个线程下载。不加此参数指定线程数，Prozilla默认为4线程下载。 ◆-P,
--directory-prefix=DIR：指定将下载的文件保存在DIR/目录。 ◆-r,
--resume：继续下载未完成的文件。如果要指定线程数下载可用如下命令： #proz -k=5 <a  href="http://64.12.204.21/pub/mozilla.org/firefox/releases/1.0/linux-i686/zh-CN/firefox-1.0.installer.tar.gz" target="_blank">http://64.12.204.21/pub/mozilla.org/firefox/releases/1.0/linux-i686/zh-CN/firefox-1.0.installer.tar.gz</a>
这样便以5线程进行文件的下载，并将文件保存到当前目录。和Wget一样，Prozilla也提供了续传功能，下载中断后，重新输入上述命令，就会出现提
示续传，按R键就可继续下载了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp; <font style="color: #990133;" size="2">MyGet</font> &nbsp; &nbsp;
MyGet目标设计成一个可扩展的，拥有丰富界面的多线程下载工具，它支持HTTP、FTP、HTTPS、MMS、RTSP等协议。在<a  href="http://myget.sourceforge.net/release/myget-0.1.0.tar.bz2" target="_blank">http://myget.sourceforge.net/release/myget-0.1.0.tar.bz2</a>下
载其最新版本0.1.0，下载后使用如下命令安装：<br>&nbsp;&nbsp;&nbsp;&nbsp; #tar jxvf myget-0.1.0.tar.bz2 <br>&nbsp;&nbsp;&nbsp; #cd myget-0.1.0
#./configure <br>&nbsp;&nbsp;&nbsp; #make <br>&nbsp;&nbsp;&nbsp; #make install <br>MyGet命令格式如下： #mytget [选项] [下载地址]
常用的选项： ◆-d [目录]：指定下载到的文件在本地存放的位置，默认当前目录。 ◆-f [文件]：指定下载文件名称。 ◆-h：帮助选项。
◆-n [线程数]：下载线程数量，默认为4个。 ◆-x [代理服务器地址]：设置代理服务器地址，如&#8220;-x <a  href="http://user:password@host/" target="_blank">http://user:password@host:port</a>&#8221;。 MyGet常用的形式如下： #mytget －d /root/ -n 10 <a  href="http://lumaqq.linuxsir.org/download/patch/lumaqq_2004t_patch_2005.07.21.00.00.zip" target="_blank">http://lumaqq.linuxsir.org/download/patch/lumaqq_2004t_patch_2005.07.21.00.00.zip</a> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; <font style="color: #990133;" size="2">Linuxdown</font> &nbsp; &nbsp; Linuxdown是一个命令行多线程下载工具，最多可支持30线程的下载。在<a  href="https://gro.clinux.org/frs/download.php/1015/linuxdown-1.0.0.tar.gz" target="_blank">https://gro.clinux.org/frs/download.php/1015/linuxdown-1.0.0.tar.gz</a>下
载最新的1.1.0版本。然后使用如下命令进行编译安装： <br>&nbsp;&nbsp;&nbsp; #tar zxvf linuxdown-1.1.0.tar.gz <br>&nbsp;&nbsp;&nbsp; #cd
dandelion/ <br>&nbsp;&nbsp;&nbsp; #make <br>&nbsp;&nbsp;&nbsp; #make install <br>linuxdown格式为： #linuxdown [下载地址] [选项]
[线程数] &nbsp; &nbsp; 需要注意的是下载地址和选项都需要西文引号括起来，线程数不可超过30个。一个典型的下载如下： #linuxdown
"http://lumaqq.linuxsir.org/download/patch/lumaqq_2004t_patch_2005.07.21.00.00.zip"
30 <br><br>&nbsp;&nbsp;&nbsp; <font style="color: #990133;" size="2">Curl </font>&nbsp; &nbsp; Curl也是Linux下不错的命令行下载工具，小巧、高速，唯一的缺点是不支持多线程下载。在<a  href="http://curl.haxx.se/download/curl-7.14.0.tar.gz" target="_blank">http://curl.haxx.se/download/curl-7.14.0.tar.gz</a>下
载最新版本。下载后便可使用如下命令编译安装： &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #tar zxvf curl-7.14.0.tar.gz <br>&nbsp;&nbsp;&nbsp; #cd curl-7.14.0/
<br>&nbsp;&nbsp;&nbsp; #./configure <br>&nbsp;&nbsp;&nbsp; #make <br>&nbsp;&nbsp;&nbsp; #make test <br>&nbsp;&nbsp;&nbsp; #make install <br>Curl使用格式如下： #curl
[选项][下载地址] Curl典型下载如下： #curl -O <a  href="http://10.1.27.10/%7Ekennycx/tools/lumaqq_2004-linux_gtk2_x86_with_jre.tar.gz" target="_blank">http://10.1.27.10/~kennycx/tools/lumaqq_2004-linux_gtk2_x86_with_jre.tar.gz</a> &nbsp; &nbsp; 使用Curl下载一个文件并保存到当前目录。此外，Curl虽然不支持多线程下载，但它可同时下载多个文件或下载文件的某一部分，可使用如下命令实现： #curl -r 0-199 <a  href="http://www.netscape.com/" target="_blank">http://www.netscape.com/</a> 获得文件的前200 bytes。 &nbsp; &nbsp; 对于常用的代理下载Curl也可轻松实现，具体操作如下： #curl -x 10.1.27.10:1022 <a  href="ftp://ftp.funet.fi/README" target="_blank">ftp://ftp.funet.fi/README</a> 使用代理地址为10.1.27.10端口为1022的代理服务器下载一个文件。 #curl -U user:passwd -x 10.1.27.10:1022 <a  href="ftp://ftp.funet.fi/README" target="_blank">ftp://ftp.funet.fi/README</a> 如果代理服务器需要特别的验证，则需要在user:passwd处输入合法的帐号和密码。 <br><br>&nbsp;&nbsp;&nbsp; <font size="2"><span style="color: #990133;">Axel</span></font> &nbsp; &nbsp; Axel是命令行下的多线程下载工具，支持断点续传，速度通常情况下是Wget的几倍。可在<a  href="http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&amp;op=mydown&amp;did=1697" target="_blank">http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&amp;op=mydown&amp;did=1697</a>下
载。下载后使用如下命令编译安装： <br>&nbsp;&nbsp;&nbsp; #tar zxvf axel-1.0a.tar.gz <br>&nbsp;&nbsp;&nbsp; #cd axel-1.0a/ <br>&nbsp;&nbsp;&nbsp; #./configure
<br>&nbsp;&nbsp;&nbsp; #make <br>&nbsp;&nbsp;&nbsp; #make install <br>基本的用法如下： #axel [选项] [下载目录] [下载地址] 一个典型下载如下： #alex
-n 10 -o /home/kennycx/ <a  href="http://10.1.27.10/%7Ekennycx/tools/lumaqq_2004-linux_gtk2_x86_with_jre.tar.gz" target="_blank">http://10.1.27.10/~kennycx/tools/lumaqq_2004-linux_gtk2_x86_with_jre.tar.gz</a> 用10线程将指定路径的文件下载到/home/kennycx/这个目录下。 &nbsp; &nbsp; 本文详细介绍了Linux中常用的下载工具，这些下载工具功能上各有千秋，使用上都比较简单，所以无论是初学者还是Linux高手总有一款适合你。</font></span><img src ="http://www.blogjava.net/renyangok/aggbug/113431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-04-25 10:03 <a href="http://www.blogjava.net/renyangok/archive/2007/04/25/113431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发人员行走Unix的随身四艺（转载）</title><link>http://www.blogjava.net/renyangok/archive/2007/01/29/96553.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Mon, 29 Jan 2007 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/01/29/96553.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/96553.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/01/29/96553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/96553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/96553.html</trackback:ping><description><![CDATA[
		<p>   作者：<a href="http://blog.csdn.net/calvinxiu">江南白衣</a>，原文出处： <a href="http://blog.csdn.net/calvinxiu/archive/2007/01/27/1495778.aspx">http://blog.csdn.net/calvinxiu/archive/2007/01/27/1495778.aspx</a>，转载请保留出处。</p>
		<p>    Unix系统永远只会越来越多，开发人员就没必要特意学习它们的安装、配置和管理了，就全部交给集成人员吧。<br />    但开发人员行走于Unix之间，依然有四样东西要熟练。</p>
		<h2>    一、VI</h2>
		<p>    虽然Unix上的文本编辑器已经越来越好用，但不在Console前面，网速也不够连XWindows的时候，还是要依赖VI。<br />    回想VI的时代背景，发现VI对开发人员已经周到得离谱了，热键多到你双手不离键盘就能完成大半编辑工作。<br />    建议自己制作一张自己认为有用，但又经常忘记的命令的sheet，拿出考试的力气把它背熟。</p>
		<h2>    二、文本处理</h2>
		<p>       开发人员在Unix下干得最多的除了Make和除Bug外，大概就是处理日志文件、业务文件进行查错和统计了。<br />     只会more和grep是不够的，开发老手会把awk,sed,grep,sort,uniq,wc,head,tail这些文本处理命令，通过管道玩具式的拆卸拼装，最后完成一件原本以为非编写大段代码不可的工作。周到的参数设定，让人再一次感叹那个简单的年代，这样复杂到极致的设计.......怪不得《Unix 编程艺术》的作者有那么骄傲的自觉。</p>
		<p>     比如车东的每月访问TOP10 统计脚本：</p>
		<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
				<div>
						<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #000000">awk -F '</span>
						<span style="COLOR: #000000">
						</span>
						<span style="COLOR: #000000">t' '{</span>
						<span style="COLOR: #0000ff">print</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">$</span>
						<span style="COLOR: #000000">4</span>
						<span style="COLOR: #000000">}' 2004_2</span>
						<span style="COLOR: #000000">.</span>
						<span style="COLOR: #000000">txt| grep chedong</span>
						<span style="COLOR: #000000">.</span>
						<span style="COLOR: #000000">com</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">tech</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">|</span>
						<span style="COLOR: #000000">uniq -c|</span>
						<span style="COLOR: #0000ff">sort</span>
						<span style="COLOR: #000000"> -rn|head -</span>
						<span style="COLOR: #000000">10</span>
						<span style="COLOR: #000000"> </span>
				</div>
		</div>
		<ul>
				<li>awk -F '\t' 将2004_2.txt访问纪录文件，用TAB分割，打印第4列 
</li>
				<li>grep chedong.com/tech 只列出chedong.com/tech笔记目录下的文档 
</li>
				<li>uniq -c 汇总计数 
</li>
				<li>sort -rn 按数值排序 
</li>
				<li>head -10 TOP 10<br /></li>
		</ul>
		<h2>    三、Bash Shell 编程</h2>
		<p>    编程是开发人员的天赋本能，不论什么语言，看看参考手册应该就能上手。</p>
		<p>    见<a href="http://xiaowang.net/bgb-cn/index.html">Bash新手指南中文版</a>，一份写给新手看的包含很多老手知识的指南。</p>
		<h2>    四、Make与AutoMake</h2>
		<p>    用过Java的Ant后，想起Make就觉得很烦，很厌倦。总归还是会的，见<a href="http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/">GNU Make 3.8.0 中文手册</a>     </p>
		<p>     不过即使make已经精通到变态，每个人写出来的MakeFile还是千奇百怪，再看看开源项目们个个都是automake+autoconf了，我们自己也长进一点吧。手工编写MakeFile.am，让auotomake变成MakeFile.in，再让用户./configure 生成最终的MakeFile。<br />    <br />    生成的MakeFile既能跨越平台，又是标准的写法，最重要的是，编写MakeFile.am的工作量比MakeFile少多了，只要简单的定义目标文件，先要处理的子目录，需要的源文件，头文件与库文件就可以了。如果看完下面两篇还是不懂，直接看ACE里的Makefile.am就懂了。</p>
		<p>    入门文章：<a href="http://www.ccw.com.cn/htm/app/linux/develop/01_7_25_7.asp">使用AutoMake轻松生成Makefile</a> <br />    进阶文章：<a href="javascript:void(0);/*1169901219468*/">IBM DW:</a><a href="javascript:void(0);/*1169901219468*/">例</a><a href="javascript:void(0);/*1169901219468*/">解 autoconf 和 automake 生成 Makefile 文件</a><br />    完整的免费电子书： <a href="http://sources.redhat.com/autobook/download.html">GNU Autoconf, Automake and Libtool</a></p>
		<p>    另外，ACE里还贡献了一个更厉害的<a href="http://www.ociweb.com/products/mpc">MPC(Makefile, Project, and Workspace Creator )</a>，  自动的生成了MakeFile.am或者VC的项目文件。<br /><br /></p>
		<h2>    附录A：我的VI易忘命令手册</h2>
		<p>
				<strong>    上下左右：</strong>
				<br />    ctrl+u/d 上下半屏，ctrl+f/b,上下一屏<br />    H/G屏幕头/文章末 ，0/$ 行首行末<br />    <br /><strong>    增删改：</strong><br />    yy/dd 复制/删除 一行，p/P：将yy/dd的内容paste出来<br />    I/A 在行首/末添加， o/O 开新行，d0/d$ 删除到行首，行末<br />    u:undo</p>
		<p>    <strong>查：</strong><br />    ? 向前查找， n/N 重复上一次查找</p>
		<h2>附录B: 文本处理命令小结</h2>
		<p>   <strong>awk：</strong>处理结构化的文本(每行以固定符号分成若干列)，提取打印某些字段，如：<br />    ls -l|awk '{print $1}'  --将ls-l结果的第一列打印出来<br />    awk -F":" '{print $1"  "$6}' /etc/passwd ，将以:分割的/etc/passwd文件的第1，6列打印出来，中间以空格分开<br />    详见<a href="javascript:void(0);/*1169985856171*/">IBM DW中国的AWK实例</a>(共3篇) 或 <a href="http://xiaowang.net/bgb-cn/ch06.html">Bash新手指南中文版第6章</a>。</p>
		<p>    <strong>grep：</strong>过滤，大家用得最多的命令，支持正则表达式。参数有：<br />    -i忽略大小写，-n显示line number，-c 统计在每个文件的出现次数，-l只显示符合的文件的名字。</p>
		<p>    <strong>sed：</strong>流编辑器，主要用于替换，如：<br />    sed -e '1,10s/foo/bar/g' myfile2.txt 将1到10行的文本中的foo 替换成bar,s代表替换,g代表全局替换 <br />    支持正则的替换字符串，可以只替换某个范围内的内容。<br />    用法不算简单,详见<a href="http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-1/index.html">IBM DW中国的Sed实例</a>(共3篇)或 <a href="http://xiaowang.net/bgb-cn/ch05.html">Bash新手指南中文版第5章</a>。<br />    <br />    <strong>sort：</strong>排序，参数有：<br />    -r逆序, -n 数字比较 , -M 日历比较 Feb,Dec, -f 忽略大小写<br />    同样支持结构化文件，如<br />    sort -t : -k 1,1 /etc/passwd，以: 分割,只按第1列排序<br />    sort -t : -k 1,1 -k2.2,3.4 /etc/passwd ，以:分割,先按第1列排序,再按第2列的第二个字符到第3列的第4个字符排序。</p>
		<p>    <strong>uniq：</strong>去除重复行。<br />    除了正常用法外，还有-c统计重复次数，和-u （唯一）和 -d （重复）两个参数,只显示唯一的和重复的行。</p>
		<p>    <strong>wc：</strong> 统计。<br />    -l 行,-m 字符,-w 单词</p>
<img src ="http://www.blogjava.net/renyangok/aggbug/96553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-01-29 17:31 <a href="http://www.blogjava.net/renyangok/archive/2007/01/29/96553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>