﻿<?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-kooyee ‘s blog-随笔分类-Lniux/Unix </title><link>http://www.blogjava.net/Javawind/category/24930.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 25 Jan 2008 15:40:35 GMT</lastBuildDate><pubDate>Fri, 25 Jan 2008 15:40:35 GMT</pubDate><ttl>60</ttl><item><title>Linux的shell变量</title><link>http://www.blogjava.net/Javawind/archive/2008/01/25/177832.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 25 Jan 2008 10:55:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2008/01/25/177832.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/177832.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2008/01/25/177832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/177832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/177832.html</trackback:ping><description><![CDATA[<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>Linux</span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>的变量可分为两类：环境变量和本地变量</span></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>环境变量，或者称为全局变量，存在与所有的<span lang="EN-US">shell</span>中，在你登陆系统的时候就已经有了相应的系统定义的环境变量了。<span lang="EN-US">Linux</span>的环境变量具有继承性，即子<span lang="EN-US">shell</span>会继承父<span lang="EN-US">shell</span>的环境变量。</span></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>本地变量，当前<span lang="EN-US">shell</span>中的变量，很显然本地变量中肯定包含环境变量。<span lang="EN-US">Linux</span>的本地变量的非环境变量不具备继承性。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" LINE-HEIGHT: 150%; FONT-FAMILY: 14pt; 华文楷体?>Linux</span></strong><strong normal?><span LINE-HEIGHT: 150%; FONT-FAMILY: 14pt; 华文楷体?>中环境变量的文件</span></strong></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>当你进入系统的时候，<span lang="EN-US">linux</span>就会为你读入系统的环境变量，这些环境变量存放在什么地方，那就是环境变量的文件中。<span lang="EN-US">Linux</span>中有很多记载环境变量的文件，它们被系统读入是按照一定的顺序的。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>1.&nbsp;&nbsp;&nbsp; </span>/etc/profile</span></strong><strong normal?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>：</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>此文件为系统的环境变量，它为每个用户设置环境信息，当用户第一次登录时，该文件被执行。并从<span lang="EN-US">/etc/profile.d</span>目录的配置文件中搜集<span lang="EN-US">shell</span>的设置。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>这个文件，是任何用户登陆操作系统以后都会读取的文件（如果用户的<span lang="EN-US">shell</span>是<span lang="EN-US">csh</span>、<span lang="EN-US">tcsh</span>、<span lang="EN-US">zsh</span>，则不会读取此文件），用于获取系统的环境变量，只在登陆的时候读取一次。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>假设用户使用的是<span lang="EN-US">BASH</span>，那么</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?><br />
<br />
2.&nbsp;&nbsp;&nbsp; </span>/etc/bashrc</span></strong><strong normal?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>：</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>在执行完<span lang="EN-US">/etc/profile</span>内容之后，如果用户的<span lang="EN-US">SHELL</span>运行的是<span lang="EN-US">bash</span>，那么接着就会执行此文件。另外，当每次一个新的<span lang="EN-US">bash shell</span>被打开时<span lang="EN-US">,</span>该文件被读取。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>每个使用<span lang="EN-US">bash</span>的用户在登陆以后执行完<span lang="EN-US">/etc/profile</span>中内容以后都会执行此文件，在新开一个<span lang="EN-US">bash</span>的时候也会执行此文件。因此，如果你想让每个使用<span lang="EN-US">bash</span>的用户每新开一个<span lang="EN-US">bash</span>和每次登陆都执行某些操作，或者给他们定义一些新的环境变量，就可以在这个里面设置。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?><br />
<br />
3.&nbsp;&nbsp;&nbsp; </span>~/.bash_profile</span></strong><strong normal?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>：</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>每个用户都可使用该文件输入专用于自己使用的<span lang="EN-US">shell</span>信息。当用户登录时，该文件仅仅执行一次，默认情况下，它设置一些环境变量，执行用户的<span lang="EN-US">.bashrc</span>文件。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>单个用户此文件的修改只会影响到他以后的每一次登陆系统。因此，可以在这里设置单个用户的特殊的环境变量或者特殊的操作，那么它在每次登陆的时候都会去获取这些新的环境变量或者做某些特殊的操作，但是仅仅在登陆时。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?><br />
<br />
4.&nbsp;&nbsp;&nbsp; </span>~/.bashrc</span></strong><strong normal?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>：</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>该文件包含专用于单个人的<span lang="EN-US">bash shell</span>的<span lang="EN-US">bash</span>信息，当登录时以及每次打开一个新的<span lang="EN-US">shell</span>时<span lang="EN-US">,</span>该该文件被读取。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个<span lang="EN-US">bash</span>。因此，可以在这里设置单个用户的特殊的环境变量或者特殊的操作，那么每次它新登陆系统或者新开一个<span lang="EN-US">bash</span>，都会去获取相应的特殊的环境变量和特殊操作。</span></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>~/.bash_logout</span></strong><strong normal?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>：</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>当每次退出系统<span lang="EN-US">(</span>退出<span lang="EN-US">bash shell)</span>时<span lang="EN-US">,</span>执行该文件。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span LINE-HEIGHT: 150%; FONT-FAMILY: 14pt; 华文楷体?>几个命令</span></strong></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span>env</span></strong><strong normal?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>和<span lang="EN-US">printenv</span></span></strong></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>这两个变量用于打印所有的<span blue?>环境</span>变量：</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[root@devdb1 worksh]# env</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>HOSTNAME=devdb1</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>TERM=vt100</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>..........................................................</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>OLDPWD=/root </span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[root@devdb1 worksh]# printenv</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>HOSTNAME=devdb1</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>TERM=vt100</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>..........................................................</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>OLDPWD=/root</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[root@devdb1 worksh]#</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>另外，<span lang="EN-US">env</span>变量还有其他的功能，如下：</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>env [-i|-] [name=value] [command [argument]]</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span 宋体?>这里的&#8220;<span lang="EN-US">-i</span>&#8221;或者&#8220;<span lang="EN-US">-</span>&#8221;，都是表示忽略继承的环境变量；这里的<span lang="EN-US">name=value</span>，用于指定本地变量对，可以有多组；整个命令的含义是，忽略继承的环境变量，设定多组<span lang="EN-US">name</span>变量，在此基础上运行命令<span lang="EN-US">command</span>。如</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>env -i test="test" bash -c 'echo $SHELL; env'</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>/bin/bash</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>PWD=/home/oracle</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>test=test</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>SHLVL=1</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>_=/bin/env</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>很显然，这里新运行<span lang="EN-US">bash</span>并没有继承环境变量，但是却设置了本地变量<span lang="EN-US">test</span>。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span>set</span></strong></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>用于显示与设置<span blue?>当前本地</span>变量。单独一个<span lang="EN-US">set</span>就显示了当前环境的所有的变量，它肯定包括环境变量和一些非环境变量，如：</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[oracle@devdb1 oracle]$ set</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>BASH=/bin/bash</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>BASH_VERSION='2.05b.0(1)-release'</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>BDUMP=/opt/oracle/admin/devdb/bdump</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>COLORS=/etc/DIR_COLORS</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>COLUMNS=132</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>DIRSTACK=()</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>EUID=500</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>GROUPS=()</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>G_BROKEN_FILENAMES=1</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>HISTFILE=/home/oracle/.bash_history</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>HISTFILESIZE=1000</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>HISTSIZE=1000</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>HOME=/home/oracle</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>.............................</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span>set</span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>很有很多其他的选项，具体请参考<span lang="EN-US">man set</span>。</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span>unset</span></strong></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span></span><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>用于清除变量。不管这个变量是环境变量还是本地变量，它都可以清除。</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体? COLOR: fuchsia;>-- </span><span FONT-FAMILY: 9pt; 宋体? COLOR: fuchsia;>下面是清除本地变量</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[oracle@devdb1 oracle]$ set|grep myname</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>myname=ilonng</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[oracle@devdb1 oracle]$ unset myname</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[oracle@devdb1 oracle]$ set|grep myname</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体? COLOR: fuchsia;>-- </span><span FONT-FAMILY: 9pt; 宋体? COLOR: fuchsia;>下面是清除环境变量</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ env|grep myname</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>myname=ilonng </span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[oracle@devdb1 oracle]$ unset myname</span></p>
<p 0cm 0pt?><span lang="EN-US" FONT-FAMILY: 9pt; 宋体?>[oracle@devdb1 oracle]$ env|grep myname</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span>export</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>用于把变量变成当前<span lang="EN-US">shell</span>和其子<span lang="EN-US">shell</span>的环境变量，存活期是当前的<span lang="EN-US">shell</span>及其子<span lang="EN-US">shell</span>，因此重新登陆以后，它所设定的环境变量就消失了。如何将环境变量永久化？修改上面介绍的那几个环境变量的配置文件。</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ export myname=ilonng</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ env|grep myname</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>myname=ilonng</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ bash</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ env|grep myname</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>myname=ilonng</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ exit</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>exit</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@devdb1 oracle]$ env|grep myname</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>myname=ilonng</span></p>
<p 0cm 0pt; LINE-HEIGHT: 150%?><strong normal?><span lang="EN-US" 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?><span 1?>&nbsp;&nbsp;&nbsp; </span>source</span></strong></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>当直接执行一个脚本的时候，其实是在一个子<span lang="EN-US">shell</span>环境运行的，即开启了一个子<span lang="EN-US">shell</span>来执行这个脚本，脚本执行完后该子<span lang="EN-US">shell</span>自动退出。</span></p>
<p 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%?><span 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt?>有没有办法在当前<span lang="EN-US">shell</span>中执行一个脚本呢？使用<span lang="EN-US">source</span>命令就可以让脚本在当前<span lang="EN-US">shell</span>中执行。如：</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@dbamonitor NBU]$ cat test.sh <span yes?>&nbsp;&nbsp;</span><span fuchsia?>-- </span></span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: fuchsia;>查看脚本内容，显示变量内容</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>echo $myname</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@dbamonitor NBU]$ echo $myname<span yes?>&nbsp; </span><span fuchsia?>-- </span></span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: fuchsia;>变量存在，内容是<span lang="FR">ilonng</span></span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>ilonng</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@dbamonitor NBU]$ set |grep myname <span fuchsia?>-- </span></span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: fuchsia;>变量是本地变量</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>myname=ilonng</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@dbamonitor NBU]$ env |grep myname <span fuchsia?>-- </span></span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: fuchsia;>变量不是环境变量</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@dbamonitor NBU]$ sh test.sh<span yes?>&nbsp; </span><span fuchsia?>-- </span></span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: fuchsia;>直接执行，新开子<span lang="FR">shell</span>，非环境变量的本地变量不具备继承性，在子<span lang="FR">shell</span>中不可见</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: red;><span yes?>&nbsp; </span>-- </span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: red;>这里什么都没有输出</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>[oracle@dbamonitor NBU]$ source test.sh <span fuchsia?>-- source</span></span><span FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR? COLOR: fuchsia;>命令，是脚本在当前<span lang="FR">shell</span>中执行</span></p>
<p 0cm 0pt?><span lang="FR" FONT-FAMILY: 宋体; 9pt; mso-ansi-language: FR?>ilonng</span></p>
 <img src ="http://www.blogjava.net/Javawind/aggbug/177832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2008-01-25 18:55 <a href="http://www.blogjava.net/Javawind/archive/2008/01/25/177832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell基础学习系列（2）：学习shell变量</title><link>http://www.blogjava.net/Javawind/archive/2008/01/25/177828.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 25 Jan 2008 10:39:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2008/01/25/177828.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/177828.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2008/01/25/177828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/177828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/177828.html</trackback:ping><description><![CDATA[<div>1、登陆过程：</div>
<div><br />
第一步：键入用户名和密码<br />
第二步：系统通过查询/etc/passwd来检测是否为有效用户<br />
第三步：如果登陆正确并且密码有效，则系统执行环境设置文件/etc/profile--&gt;.bash_profile。</div>
<div><br />
一般情况下，root的权限太高，为了防止误操作造成系统崩溃，我现在的做法是以一个普通用户的身份登陆，重新定制环境，需要root权限时以su指令切换过去执行。这样比较安全。对于shell变量的定制，有新的理解。变量的作用很多，可以定制用户本身的工作环境，可以保存有用的信息，也可以暂时保存信息。所以出现了下面变量：</div>
<div><br />
1）本地变量。只是在当前shell生命期的脚本中使用，一旦shell中启动另一个进程或者退出，则失效。好处就是不会对其他的shell或者进程产生影响。</div>
<div><br />
2）环境变量。在建立嵌入式交叉编译环境的工具链时设置过环境变量，在这里算是对环境变量的位置特点比较清晰了。环境变量用于所有用户进程，登录进程称为父进程，shell中执行的用户进程称为子进程。按照传统方法，所有环境变量均为大写，这点与本地变量不同。而且，环境变量在应用于用户进程前，必须用export命令导出，而本地变量不需要。环境变量的两种定制方法前面已经掌握了，在命令行中定制用户注销时就会丢失，所以最好还是在.bash_profile中定制。</div>
<div><br />
3）位置变量。这种为特殊变量，因为它们是只读的。它的作用是向一个shell脚本传递参数，用位置参数的方式完成此功能。参数数目可以任意多，但是只有前9个可以被访问，不过使用shift命令可以改变这个限制。参数从第一个开始，在第9个结束；每个访问参数前都要加$符号。其中第一个参数为0，表示预留保存实际脚本名称，无论脚本是否有参数，此值均可用。以前为openvpn的启动看过一个脚本，实质上就是使用了位置变量。现在才理解，也能够编写此类脚本了。</div>
<div><br />
4）特定参数变量。为特殊变量，只读。共有7个特定变量，在编程时用的比较多。</div>
<div><br />
$# 传递到脚本的参数个数<br />
$* 以一个单字符串显示所有向脚本传递的参数，与位置变量不同，此选项参数可以超过9个。<br />
$$ 脚本运行的当前进程ID号<br />
$! 后台运行的最后一个进程的进程ID号<br />
$@ 与$#相同，但是使用时加引号，并在引号中返回每个参数<br />
$- 显示shell使用的当前选项，与set命令功能相同<br />
$? 显示最后命令的退出状态，0表示没有错误，其他表明错误。</div>
<div><br />
2、密码文件/etc/passwd的格式：7个域</div>
<div><br />
登陆名：加密的密码：uid：gid：用户全名：用户home目录：用户的shell路径<br />
以前总结过忘记root密码的处理方法，当时只是依葫芦画瓢，现在才明白原理。只要将加密的密码域去除，密码自然也就没有了。即&#8220;：：&#8221;</div>
<div>&nbsp;</div>
<div>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</div>
<div><font color="#ff0000">实例设置1</font></div>
<div>注：使用RedHat 9.0默认的bash shell</div>
<div>&nbsp;</div>
<div>嵌入式shell变量中有一些预留的环境变量，比如HOME，PATH等。现在要利用PS1，PS2来定制自己的命令提示符。
<div>&nbsp;</div>
<div>PS1：基本提示符包含shell提示符，缺省是对超级用户为＃，其他为$。</div>
<div>在默认情况下，我的命令提示符如下：</div>
<div>[armlinux@lqm armlinux]$ echo $PS1<br />
[\u@\h \W]\$</div>
<div>其中\u代表用户名，\h代表主机名，\W代表当前的文件夹。</div>
<div>现在我希望我的命令提示符由如下几个部分组成，首先要显示用户名，然后要显示绝对路径，方便使用。那么就可以用如下的命令定制：</div>
<div>[armlinux@lqm armlinux]$PS1="\u: \`pwd\`&gt;"</div>
<div>armlinux: /home/armlinux&gt;</div>
<div>如果想设置系统主机名做提示符，则只需令PS1="`hostname`&gt;"即可。</div>
<div>要想始终起作用，当然是修改.bash_profile文件，前面刚刚学了。</div>
<div>&nbsp;</div>
<div>PS2：为附属提示符，缺省符号为&gt;。当执行多行命令时，出现的符号。这个一般我习惯用默认的。</div>
<div>举例：</div>
<div>armlinux: /home/armlinux&gt;cat &gt;&gt;test&lt;&lt;EOF<br />
&gt; test<br />
&gt; test<br />
&gt; test<br />
&gt; EOF<br />
armlinux: /home/armlinux&gt;cat test<br />
test<br />
test<br />
test</div>
<div>如果设置成"@:"，则显示如下：</div>
<div>armlinux: /home/armlinux&gt;PS2="@:"<br />
armlinux: /home/armlinux&gt;cat &gt;&gt;test&lt;&lt;EOF<br />
@:test<br />
@:test<br />
@:test<br />
@:EOF<br />
armlinux: /home/armlinux&gt;cat test<br />
test<br />
test<br />
test</div>
<div>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</div>
<div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman" color="#ff0000">实例设置2</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">注：使用RedHat 9.0默认的bash shell</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">1 使用命令echo</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">显示环境变量</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">#本例使用echo显示常见的变量HOME</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ echo $HOME&nbsp;&nbsp; <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">/home/lqm</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">2 </font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置一个新的环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"> </p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">variable－name＝value；export variable－name</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">export <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">variable－name＝value</span></font></span></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></font></span></span></font></span>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ export HELLO=&#8221;Hello!&#8221;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ echo $HELLO<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">Hello!</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">3 </font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">env</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令显示所有的环境变量</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<font size="2"></font></span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ env<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">SSH_AGENT_PID=1875<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">HOSTNAME=lqm<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">SHELL=/bin/bash<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TERM=xterm<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">HISTSIZE=1000<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&#8230;&#8230;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">4<span style="mso-spacerun: yes">&nbsp; </span></font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">set</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令显示所有本地定义的</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">Shell</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<font size="2"></font></span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ set<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">BASH=/bin/bash<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&#8230;&#8230;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">5<span style="mso-spacerun: yes">&nbsp; </span></font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">unset</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令来清除环境变量</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></p>
<font size="2"></font></o:p></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ export TEST=&#8221;test&#8221;<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">增加一个环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ env | grep TEST<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此命令有输出，证明环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经存在了</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST=test<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ unset $TEST<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">删除环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ env | grep TEST<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此命令无输出，证明环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经存在了</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<font size="2"></font></span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">6<span style="mso-spacerun: yes">&nbsp; </span></font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">readonly</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令设置只读变量</span><span style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"> <span lang="EN-US"><o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果使用了</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">readonly</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令的话，变量就不可以被修改或清除了。示例如下：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ export TEST="Test..."&nbsp;<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">增加一个环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ readonly TEST<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">TEST</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设为只读</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ unset TEST <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会发现此变量不能被删除</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">-bash: unset: TEST: cannot unset: readonly variable<br />
$ TEST="New"<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会发现此变量不能被修改</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">-bash: TEST: readonly variable</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="mso-spacerun: yes">7&nbsp; </span></font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">C</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序来访问和设置环境变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">C</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序的用户来说，可以使用下列三个函数来设置或访问一个环境变量。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">getenv()</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问一个环境变量。输入参数是需要访问的变量名字，返回值是一个字符串。如果所访问的环境变量不存在，则会返回</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">NULL</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">setenv()</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在程序里面设置某个环境变量的函数。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">unsetenv()</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">清除某个特定的环境变量的函数。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外，还有一个指针变量</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">environ</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，它指向的是包含所有的环境变量的一个列表。下面的程序可以打印出当前运行环境里面的所有环境变量：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<font size="2"></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">#include &lt;stdio.h&gt;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">extern char**environ;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">int main ()<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">{<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">char**var;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">for (var =environ;*var !=NULL;++var)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">printf ("%s \n ",*var);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">return 0;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">}</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></p>
<font size="2"><o:p></o:p></font></font></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.75pt; text-indent: -21.75pt; mso-list: l0 level2 lfo1; tab-stops: list 21.75pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman">8<span style="font: 7pt 'Times New Roman'"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过修改环境变量定义文件来修改环境变量。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要注意的是，一般情况下，这仅仅对于普通用户适用，避免修改根用户的环境定义文件，因为那样可能会造成潜在的危险。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<font size="2"></font></span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><font color="#ff0000"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$cd<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到用户根目录下</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><font color="#ff0000"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ls -a<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看所有文件，包含隐藏的文件</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><font color="#ff0000"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$vi .bash_profile<span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>#</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改环境变量定义文件</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<font size="2"></font></span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font color="#0000ff">红色部分也可以用一条语句代替：$vi ～/.bash_profile。在这里，～实际上是shell变量的扩展。它包含着内建命令cd。可以这样理解，～就是你当前登录shell的根目录的绝对路径。假设你的当前用户是armlinux，那么你执行ls ～，将会显示/home/armlinux文件夹下的内容。同样的，$vi ～/.bash_profile展开后，实际上是$vi /home/armlinux/.bash_profile。所以，很容易理解为什么与红色部分等价了。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后编辑你的</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">PATH</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明，其格式为：</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">PATH=$PATH:&lt;PATH 1&gt;:&lt;PATH 2&gt;:&lt;PATH 3&gt;:------:&lt;PATH N&gt;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可以自己加上指定的路径，中间用冒号隔开。环境变量更改后，在用户下次登陆时生效，如果想立刻生效，则可执行下面的语句：$</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">source .bash_profile。如果在命令行中定制环境变量，那么你所设置的环境变量的生命期就是你当前shell用户的登录时间。一旦退出，那么环境变量也就失效了。所以，如果想只要登录改用户，就要使环境变量生效，还是在.bash_profile中修改。至于原因，这就与shell的激活模式相关了，可了解相关内容。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"></font></span>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 19.5pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要注意的是，最好不要把当前路径</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&#8221;./&#8221;</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">放到</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">PATH</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里，这样可能会受到意想不到的攻击。完成后，可以通过</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">$ echo $PATH</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看当前的搜索路径。这样定制后，就可以避免频繁的启动位于</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman">shell</font></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索的路径之外的程序了。</span></p>
</div>
</div>
<img src ="http://www.blogjava.net/Javawind/aggbug/177828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2008-01-25 18:39 <a href="http://www.blogjava.net/Javawind/archive/2008/01/25/177828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux环境变量设置及保存地点 </title><link>http://www.blogjava.net/Javawind/archive/2008/01/19/176378.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 18 Jan 2008 16:29:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2008/01/19/176378.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/176378.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2008/01/19/176378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/176378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/176378.html</trackback:ping><description><![CDATA[linux环境变量设置及保存地点
<p>
<p>1. 显示环境变量HOME <br />
$ echo $HOME<br />
/home/terry<br />
<br />
<br />
<br />
2. 设置一个新的环境变量WELCOME <br />
$ export WELCOME="Hello!"<br />
$ echo $WELCOME<br />
Hello!<br />
<br />
<br />
<br />
3. 使用env命令显示所有的环境变量 <br />
</p>
<br />
$ env<br />
HOSTNAME=terry.mykms.org<br />
PVM_RSH=/usr/bin/rsh<br />
SHELL=/bin/bash<br />
TERM=xterm<br />
HISTSIZE=1000<br />
...<br />
<br />
<br />
<br />
4. 使用set命令显示所有本地定义的Shell变量 <br />
$ set<br />
BASH=/bin/bash<br />
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")<br />
BASH_VERSION='2.05b.0(1)-release'<br />
COLORS=/etc/DIR_COLORS.xterm<br />
COLUMNS=80<br />
DIRSTACK=()<br />
DISPLAY=:0.0<br />
...<br />
<br />
<br />
<br />
5. 使用unset命令来清除环境变量 <br />
<br />
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值，则该变量值将被设为NULL。示例如下： <br />
$ export TEST="Test..." #增加一个环境变量TEST<br />
$ env|grep TEST #此命令有输入，证明环境变量TEST已经存在了<br />
TEST=Test...<br />
$ unset $TEST #删除环境变量TEST<br />
$ env|grep TEST #此命令没有输出，证明环境变量TEST已经不存在了<br />
<br />
<br />
<br />
6. 使用readonly命令设置只读变量 <br />
<br />
如果使用了readonly命令的话，变量就不可以被修改或清除了。示例如下： <br />
$ export TEST="Test..." #增加一个环境变量TEST<br />
$ readonly TEST #将环境变量TEST设为只读<br />
$ unset TEST #会发现此变量不能被删除<br />
-bash: unset: TEST: cannot unset: readonly variable<br />
$ TEST="New" #会发现此也变量不能被修改<br />
-bash: TEST: readonly variable<br />
<p><br />
<br />
环境变量的设置位于/etc/profile文件</p>
<p><span class="postbody"><br />
<br />
如果需要增加新的环境变量可以添加下属行</span></p>
<p><span class="postbody">export <strong style="color: black; background-color: #ff9999">PATH</strong>=$<strong style="color: black; background-color: #ff9999">PATH</strong>:/<strong style="color: black; background-color: #ff9999">path</strong>1:/<strong style="color: black; background-color: #ff9999">path</strong>2:/pahtN </span></p>
<img src ="http://www.blogjava.net/Javawind/aggbug/176378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2008-01-19 00:29 <a href="http://www.blogjava.net/Javawind/archive/2008/01/19/176378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【应用】GNU/screen</title><link>http://www.blogjava.net/Javawind/archive/2007/08/31/141806.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 31 Aug 2007 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/31/141806.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141806.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/31/141806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141806.html</trackback:ping><description><![CDATA[在远程登陆到其他主机做一些不能间断的事的时候，网络的不稳定，经常让自己前功尽弃。<br />
现在好了，使用 screen 将可以保证在你断线的时候还继续为你工作：<br />
1. 登陆远程主机，使用 screen 新建一个会话 mm<br />
&nbsp;&nbsp;&nbsp; $screen -S mm<br />
&nbsp;&nbsp;&nbsp; OK，开始干活吧，下载或者是编译<br />
&nbsp;&nbsp;&nbsp; 现在你可以按 Ctr+A+D 断开会话 mm，不要去管他了。<br />
2. 想看看任务完成的怎么样了？ 再次登陆远程主机，返回会话 mm<br />
&nbsp;&nbsp;&nbsp; $screen -r mm<br />
&nbsp;&nbsp;&nbsp; 原来事情已经完成了，不错！
<img src ="http://www.blogjava.net/Javawind/aggbug/141806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-31 18:38 <a href="http://www.blogjava.net/Javawind/archive/2007/08/31/141806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【应用】Linux下FTP 命令大全</title><link>http://www.blogjava.net/Javawind/archive/2007/08/31/141805.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 31 Aug 2007 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/31/141805.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141805.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/31/141805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141805.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141805.html</trackback:ping><description><![CDATA[<p>从FTP链接下载用wget，eg： <font color="#00ffff">wget</font> <a href="ftp://www.dekaino.net/pub/screen/screen-4.0.3.tar.gz">ftp://www.dekaino.net/pub/<strong style="color: black; background-color: #99ff99">screen</strong>/<strong style="color: black; background-color: #99ff99">screen</strong>-4.0.3.tar.gz</a></p>
<p>FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下 使用FTP,都会遇到大量的FTP内部命令,熟悉并灵活应用FTP的内部命令,可以大大方便 使用者,对于现在拨号上网的用户，如果ISP提供了shell可以使用nohup，那么ftp将是 你最省钱的上download方式，ftp的命令行格式为:ftp －v －d －i －n －g[主机名] 　<br />
　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;－v 显示远程服务器的所有响应信息。 <br />
　 　－d 使用调试方式。 <br />
　　 －n 限制ftp的自动登录,即不使用.netrc文件。 <br />
　　 －g 取消全局文件名。 <br />
<br />
<br />
　　<strong>ftp使用的内部命令如下(其中括号表示可选项): 　</strong>　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.![cmd[args]]在本地机中执行交互shell、exit回到ftp环境,如!ls＊.zip。 <br />
　　2.￥ macro－ame[args]执行宏定义macro－name。 <br />
　　3.account[password]提供登录远程系统成功后访问系统资源所需的补充口令。 <br />
　　4.appendlocal－file[remote－file]将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。 <br />
　　5.ascii 使用ascii类型传输方式。 <br />
　　6.bell每个命令执行完毕后计算机响铃一次。 <br />
　　7.bin使用二进制文件传输方式。 <br />
　　8.bye退出ftp会话过程。 <br />
　　9.case在使用mget时,将远程主机文件名中的大写转为小写字母。 <br />
　　10.cd remote－dir 进入远程主机目录。 <br />
　　11.cdup进入远程主机目录的父目录。 <br />
　　12.chmod modefile－name将远程主机文件file－name的存取方式设置为mode,如chmod 777 a.out。 <br />
　　13.close中断与远程服务器的ftp会话(与open对应)。 <br />
　　14.cr使用asscii方式传输文件时,将回车换行转换为回行。 <br />
　　15.delete remote－file删除远程主机文件。 <br />
　　16.debug[debug－value]设置调试方式,显示发送至远程主机的每条命令,如debug3,若 设为0,表示取消debug。 <br />
　　17.dir[remote－dir][local－file]显示远程主机目录,并将结果存入local－file。 <br />
　　18.disconnection同close。 <br />
　　19.form format将文件传输方式设置为format,缺省为file方式。 <br />
　　20.getremote－file[local－file]将远程主机的文件remote－file传至本地硬盘的local－file。 <br />
　　21.glob设置mdelete、mget、mput的文件名扩展,缺省时不扩展文件名,同命令行的－g参数。 <br />
　　22.hash每传输1024字节,显示一个hash符号(＃)。 <br />
　　23.help[cmd]显示ftp内部命令cmd的帮助信息,如help get。 <br />
　　24.idle[seconds]将远程服务器的休眠计时器设为[seconds]秒。 <br />
　&nbsp;&nbsp;&nbsp;&nbsp;25.image设置二进制传输方式(同binary) <br />
　&nbsp;&nbsp; &nbsp;26.lcd[dir]将本地工作目录切换至dir。 <br />
　　27.ls[remote－dir][local－file]显示远程目录remote－dir,并存入本地local－file。 <br />
　　 28.macdef macro－name定义一个宏,遇到macdef下的空行时,宏定义结束。 <br />
　　 29.mdelete[remote－file]删除远程主机文件。 <br />
　　 30.mdir remote－files local－file与dir类似,但可指定多个远程文件,如mdir＊.o.＊. zipoutfile。 <br />
　　 31.mget remote－files传输多个远程文件。 <br />
　　 32.mkdir dir－name 在远程主机中建一目录。 <br />
　　 33.mls remote－file local－file同nlist,但可指定多个文件名。 <br />
　　 34.mode[mode－name]将文件传输方式设置为mode－name,缺省为stream方式。 <br />
　　 35.modtime file－name显示远程主机文件的最后修改时间。 <br />
　　 36.mput local－file将多个文件传输至远程主机。 <br />
　　 37.newerfile－name如果远程机中file－name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。 <br />
　　 38.nlist[remote－dir][local－file]显示远程主机目录的文件清单,并存入本地硬盘的local－file。 <br />
　　 39.nmap[inpatternoutpattern]设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,如nmap￥1.￥2.￥3[￥1,￥2].[￥2,￥3],则传输文件a1.a2.a3时 ,文件名变为a1、a2，该命令特别适用于远程主机为非U－NIX机的情况。 <br />
　　 40.ntrans[inchars[outchars]]设置文件名字符的翻译机制,如ntrans1R,则文件名LL L将变为RRR。 <br />
　　 41.open host[port]建立指定ftp服务器连接,可指定连接端口。 <br />
　　 42.passive进入被动传输方式。 <br />
　　 43.prompt设置多个文件传输时的交互提示。 <br />
　　 44.proxyftp－cmd在次要控制连接中,执行一条ftp命令,该命令允许连接两个ft p <br />
服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。 <br />
　　 45.put local－file[remote－file]将本地文件local－file传送至远程主机。 <br />
　　 46.pwd显示远程主机的当前工作目录。 <br />
　　 47.quit同bye,退出ftp会话。 <br />
　　 48.quote arg1,arg2&#8230;&#8230;将参数逐字发至远程ftp服务器,如quote syst。 <br />
　　 49.recv remote－file[local－file]同get。 <br />
　　 50.regetremote－file[local－file]类似于get,但若local－file存在,则从上次传输中断处续传。 <br />
　　 51.rhelp[cmd－name]请求获得远程主机的帮助。 <br />
　　 52.rstatus[file－name]若未指定文件名,则显示远程主机的状态,否则显示文件状态。 <br />
　　 53.rename[from][to]更改远程主机文件名。 <br />
　　 54.reset清除回答队列。 <br />
　　 55.restart marker从指定的标志marker处,重新开始get或put,如restart 130。 <br />
　　 56.rmdir dir－name删除远程主机目录。 <br />
　　 57.runique设置文件名唯一性存储,若文件存在,则在原文件后加后缀。 <br />
　　 58.send local－file[remote－file]同put。 <br />
　　 59.sendport设置PORT命令的使用。 <br />
　　 60.site arg1,arg2&#8230;&#8230;将参数作为SITE命令逐字发送至远程ftp主机。 <br />
　　 61.size file－name显示远程主机文件大小,如site idle 7200。 <br />
　　 62.status显示当前ftp状态。 <br />
　　 63.struct[struct－name]将文件传输结构设置为struct－name,缺省时使用stream结构。 <br />
64.sunique将远程主机文件名存储设置为唯一(与runique对应)。 <br />
　　 65.system显示远程主机的操作系统类型。 <br />
　　 66.tenex将文件传输类型设置为TENEX机所需的类型。 <br />
　　 67.tick设置传输时的字节计数器。 <br />
　　 68.trace设置包跟踪。 <br />
　　 69.type[type－name]设置文件传输类型为type－name,缺省为ascii,如typebinary,设置二进制传输方式。 <br />
　　 70.umask[newmask]将远程服务器的缺省umask设置为newmask,如umask 3。 <br />
　　 71.useruser－name[password][account]向远程主机表明自己的身份,需要口令时,必须输入口令,如user anonymous my@email。 <br />
　　 72.verbose同命令行的－v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on. <br />
　　 73.?[cmd]同help。 <br />
　　<br />
那么如何应用这些命令提高效率呢？下面我举一个例子，如何利用fttp进行后台下载，假设你的ISP给你提供了shell并且可以用nohup，你想由fttp.download.com/pub/internet/ 下载一个30M的程序aaa.zip具体步骤如下： <br />
　　1.用notepad做一个文件如aaa1内容如下 <br />
　　 open ftp.dwonload.com <br />
　　 user anonymous <a href="mailto:zyz@cenpok.net"><font color="#000000">zyz@cenpok.net</font></a> <br />
　　 cd /pub/internet/ <br />
　　 i <br />
　　 get aaa.zip <br />
　　 close <br />
　　 bye <br />
　　 2.拨号登录到你的ISP上。用telnet 或netterm登录到shell，一般都在你的home子目录里bbs～/ <br />
　　 3.用fttp上传aaa1到ISP服务器你的子目录。 <br />
　　 4. 执行nohup fttp －invd aaa2＆ <br />
　　这样这个进程就被放在ISP服务器的后台进行了，如果你想知道情况如何，可以more aaa2就可以知道情况如何了。这时你可以断线了或干点别的，估计时间到了(time约=30M/(33.6K/9)s)拨号上去，more aaa2如果显示成功下载aaa.zip就表示 aaa.zip已经被下载到ISP的服务器上了，你再由ISP的服务器拉回来就相当与点对点了,记得下载完成后del掉你的文件(aaa.zip)，免得浪费ISP资源，它会关掉shell的 </p>
<img src ="http://www.blogjava.net/Javawind/aggbug/141805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-31 18:35 <a href="http://www.blogjava.net/Javawind/archive/2007/08/31/141805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中的应用软件安装</title><link>http://www.blogjava.net/Javawind/archive/2007/08/31/141779.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 31 Aug 2007 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/31/141779.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141779.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/31/141779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141779.html</trackback:ping><description><![CDATA[新的操作系统装好了，安装一些新的软件那是难免的。但是在Linux中，安装应用软件和Windows下有些不同哦。而且对于Linux初学者来说，安装软件是一件很让人头疼的事情。由于很多Linux应用软件都是以源代码的形式发布的，这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后，才能使用这些软件。<br />
　　<br />
　　　　大多数Linux 初学者往往不知道该如何进行配置和编译。下面笔者就简单介绍一下如何安装Linux应用软件。在安装应用软件之前，还要确保软件安装的编译环境，比如编译器GCC、必要的库文件等。不过，用户不需要担心这些问题，因为大多数 Linux发行版本都已经默认安装了GCC编译器。 <br />
　　<br />
　　　　目前流行的软件包有两种比较常见的形式，一种是以 RPM、deb包为代表的智能软件包，另一种是file.tar.gz形式的压缩。本文将讨论file.tar.gz的安装方法以及智能软件包在文本环境和图形环境下的安装方法。 <br />
　　<br />
　　　　一、源代码安装 <br />
　　<br />
　　　　应用软件的源代码一般是file.tar.gz或者file.tgz格式，也就是说是以tar来打包，然后用gzip来压缩。 <br />
　　<br />
　　　　以应用软件xfce-3.8.7.tar.gz为例，先进入软件的当前目录，然后使用gzip解压：#gzip -d xfce-3.8.7.tar.gz(注:-d 代表解压)。然后用tar解包：#tar -xvf xfce-3.8.7.tar。由于tar和gzip经常一起使用，所以tar还提供了一个参数，它可以自动调用gzip来解压，即：# tar -xzvf xfce-3.8.7.tar.gz。 <br />
　　<br />
　　　　进入解压完成之后新建立的目录，一般的应用软件中都有一个用来配置软件的可执行文件——configure，它的参数比较多，而且用法也非常灵活。当然，安装不同的软件参数也不相同，具体有些什么参数，可以用命令:#./configure help取得详细的帮助。例如./configure --prefix=/usr/local/mysql（表示设置软件的安装目录为:/usr/local/mysql） <br />
　　<br />
　　　　在运行#./configure 配置软件后，它会根据你当前系统、编译、安装相关的信息，生成一个安装配置文件Makefile。Makefile文件通常是用来编译和安装软件的，运行make命令时系统会自动根据Makefile文件中的设置对软件进行编译和安装，如果编译能够顺利通过的话，运行#make install命令来安装。运行#make uninstall 来卸载。<br />
　　<br />
　　二、智能包安装<br />
　　<br />
　　　　现在，以智能包形式提供的软件很多，像RedHat Linux的RPM、Debian Linux的DEB、KISS、BSD以及Slackware等。RPM和Debian几乎统治着Linux包管理世界，它们是首先被大多数商业Linux发行版本所广泛采用的应用软件。下面笔者就介绍一下如何安装以RPM和Deb格式打包的软件。 <br />
　　<br />
　　　　RPM是RedHat Package Manager的缩写，它只能使用在安装了RPM软件的系统中，不过好像目前大多数中文Linux发行版本都支持RPM软件包。 <br />
　　<br />
　　　　1.用命令管理 <br />
　　<br />
　　　　#rpm abc.rpm <br />
　　<br />
　　　　例如安装python-1.5.2-35.i386.rpm软件时，可以使用如下命令：#rpm &#8211;ivh python-1.5.2-35.i386.rpm。 <br />
　　<br />
　　　　如果你想知道RPM软件包中的相关信息，可以使用命令:#rpm ivh python-1.5.2-35.i386.rpm。 <br />
　　<br />
　　　　如果想知道python-1.5.2-35.i386.rpm会在系统里安装哪些文件，可以使用以下这个命令：rpm -qpl python-1.5.2-35.i386.rpm。 <br />
　　<br />
　　　　由于RPM的参数很多，我们就不一一列举，想得到更多有关RPM的参数，可以用命令：#man rpm取得详细的帮助信息。 <br />
　　<br />
　　　　2.图形界面工具管理 <br />
　　<br />
　　　　相对命令方式来说，在图形环境下，安装、升级、卸载和查询RPM软件包是一件非常简单轻松的事情，因为Linux提供了几个功能强大的RPM包管理工具。我们推荐使用Linux的图形管理工具来维护RPM软件包，GNOME中的GnoRPM和KDE中的Kpackage就是功能强大的RPM 包管理工具。由于国内用户使用的中文Linux发行版本中最常见的窗口管理器是KDE，下面笔者就以KDE中Kpackage为例，介绍如何使用RPM包管理工具。 <br />
　　<br />
　　　　点击Start（开始）&#8594;System tools（系统工具）&#8594;Kpackage，出现Kpackage界面，同时分析Linux系统中的 RPM数据库。它将安装好的RPM包形式的软件按照功能分在Amusements、Application、Development、Document、 Extension、Extentions、Networking、System Environment、User Interface以及X11等几个树形目录中，每个目录中有相应的文件图标和名称。要安装或升级软件，只要点击工具栏的相应按钮就会弹出打开文件的对话框，选中要安装的RPM文件，单击OK按钮，如果不缺必要的运行库，就开始安装软件了。卸载软件时，用鼠标选择相应的软件，单击右边的Uninstall按钮就可以了&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、bin文件安装<br />
<span id="nointelliTXT" twffan="done">
<div style="margin: 5px 20px 20px" twffan="done">
<div class="smallfont" style="margin-bottom: 2px" twffan="done">Code:</div>
<pre class="alt2" style="border-right: 1px inset; padding-right: 6px; border-top: 1px inset; padding-left: 6px; padding-bottom: 6px; margin: 0px; overflow: auto; border-left: 1px inset; width: 640px; padding-top: 6px; border-bottom: 1px inset; height: 50px">
<div dir="ltr" style="text-align: left" twffan="done">chmod +x file.bin
./file.bin</div>
</pre>
</div>
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;启动安装文件。多数情况会询问安装到那里，如果没有则安装到 .bin文件所在的文件夹。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果让所有用户都能使用system-wide install 需要login到root :<span id="nointelliTXT" twffan="done">
<div style="margin: 5px 20px 20px" twffan="done">
<div class="smallfont" style="margin-bottom: 2px" twffan="done">Code:</div>
<pre class="alt2" style="border-right: 1px inset; padding-right: 6px; border-top: 1px inset; padding-left: 6px; padding-bottom: 6px; margin: 0px; overflow: auto; border-left: 1px inset; width: 640px; padding-top: 6px; border-bottom: 1px inset; height: 50px">
<div dir="ltr" style="text-align: left" twffan="done">su -
password: &lt;enter password&gt;</div>
</pre>
</div>
<div style="margin: 5px 20px 20px" twffan="done"><strong>Linux下软件的安装与卸载(ZT)</strong><br />
<div twffan="done" width="100%">
<div style="float: right" twffan="done"></div>
<div twffan="done"><br />
在Windows下安装软件时，只需运行软件的安装程序（setup、install等）或者用zip等解压缩软件解开即可安装，运行反安装程序（uninstall、unware、&#8220;卸载&#8221;等）就能将软件清除干净，完全图形化的操作界面，简单到只要用鼠标一直点击&#8220;下一步&#8221;就可以了。而&nbsp;Linux好象就不一样了，很多的初学者都抱怨在Linux下安装和卸载软件非常地困难，没有像使用Windows时那么直观。其实在Linux下安装和卸载软件也非常简单，同样也有安装向导或解压安装的方式，不相同的只不过是除了二进制形式的软件分发外，还有许许多多以源代码形式分发的软件包，下面就来详细地讲一讲这些软件的安装与卸载：
<p>&nbsp;</p>
<p><br />
一、二进制分发软件包的安装与卸载<br />
<br />
Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式，其优点是安装使用容易，缺点则是缺乏灵活性，如果该软件包是为特定的硬件/操作系统平台编译的，那它就不能在另外的平台或环境下正确执行。<br />
<br />
1、*.rpm形式的二进制软件包<br />
安装：rpm&nbsp;-ivh&nbsp;*.rpm<br />
卸载：rpm&nbsp;-e&nbsp;packgename<br />
说明：RPM（RedHat&nbsp;Packge&nbsp;Manager）是RedHat公司出的软件包管理器，使用它可以很容易地对rpm形式的软件包进行安装、升级、卸载、验证、查询等操作，安装简单，而卸载时也可以将软件安装在多处目录中的文件删除干净，因此推荐初学者尽可能使用rpm形式的软件包。rpm的参数中-i是安装，-v是校验，-h是用散列符显示安装进度，*.rpm是软件包的文件名（这里的*.rpm特指*.src.rpm以外的以rpm为后缀的文件）；参数-e是删除软件包，&nbsp;packgename是软件包名，与软件包的文件名有所区别，它往往是文件名中位于版本号前面的字符串，例如apache-3.1.12-&nbsp;i386.rpm和apache-devel-3.1.12-i386.rpm是软件包文件名，它们的软件包名称分别是apache和apache-&nbsp;devel。更多的rpm参数请自行参看手册页：man&nbsp;rpm。<br />
如果你不喜欢在字符界面下安装或卸载这些软件包，完全可以在X-Window下使用图形界面的软件包管理程序，如glint、xrpm这样的图形接口，或者是KDE的kpackge等，这样对软件包的安装、升级、卸载、验证和查询就可以通过点击鼠标来轻松完成。<br />
<br />
2、*.tar.gz/*.tgz、*.bz2形式的二进制软件包<br />
安装：tar&nbsp;zxvf&nbsp;*.tar.gz&nbsp;或&nbsp;tar&nbsp;yxvf&nbsp;*.bz2<br />
卸载：手动删除<br />
说明：*.tar.gz/*.bz2形式的二进制软件包是用tar工具来打包、用gzip/bzip2压缩的，安装时直接解包即可。对于解压后只有单一目录的软件，卸载时用命令&#8220;rm&nbsp;-rf&nbsp;软件目录名&#8221;；如果解压后文件分散在多处目录中，则必须一一手动删除（稍麻烦），想知道解压时向系统中安装了哪些文件，可以用命令&#8220;tar&nbsp;ztvf&nbsp;*.tar.gz&#8221;/&#8220;tar&nbsp;ytvf&nbsp;*.bz2&#8221;获取清单。tar的参数z是调用gzip解压，x是解包，v是校验，f是显示结果，y是调用bzip2解压，t是列出包的文件清单。更多的参数请参看手册页：man&nbsp;tar。<br />
如果你更喜欢图形界面的操作，可以在X-Window下使用KDE的ArK压缩档案管理工具。<br />
<br />
3、提供安装程序的软件包<br />
这类软件包已经提供了安装脚本或二进制的安装向导程序（setup、install、install.sh等），只需运行它就可以完成软件的安装；而卸载时也相应地提供了反安装的脚本或程序。例如SUN公司的StarOffice办公软件套件就使用名为setup的安装程序，而且在软件安装后提供反安装的功能，目前这种类型的软件包还比较少，因其安装与卸载的方式与Windows软件一样，所以就无需多讲了。<br />
<br />
<br />
</p>
<p>二、源代码分发软件包的安装与卸载<br />
<br />
Linux软件的源代码分发是指提供了该软件所有程序源代码的发布形式，需要用户自己编译成可执行的二进制代码并进行安装，其优点是配置灵活，可以随意去掉或保留某些功能/模块，适应多种硬件/操作系统平台及编译环境，缺点是难度较大，一般不适合初学者使用。<br />
<br />
1、*.src.rpm形式的源代码软件包<br />
安装：rpm&nbsp;-rebuild&nbsp;*.src.rpm<br />
cd&nbsp;/usr/src/dist/RPMS<br />
rpm&nbsp;-ivh&nbsp;*.rpm<br />
卸载：rpm&nbsp;-e&nbsp;packgename<br />
说明：rpm&nbsp;--rebuild&nbsp;*.src.rpm命令将源代码编译并在/usr/src/dist/RPMS下生成二进制的rpm包，然后再安装该二进制包即可。packgename如前所述。<br />
<br />
2、*.tar.gz/*.tgz、*.bz2形式的源代码软件包<br />
安装：tar&nbsp;zxvf&nbsp;*.tar.gz&nbsp;或&nbsp;tar&nbsp;yxvf&nbsp;*.bz2&nbsp;先解压<br />
然后进入解压后的目录：<br />
./configure&nbsp;配置<br />
make&nbsp;编译<br />
make&nbsp;install&nbsp;安装<br />
卸载：make&nbsp;uninstall&nbsp;或&nbsp;手动删除<br />
说明：建议解压后先阅读说明文件，可以了解安装有哪些需求，有必要时还需改动编译配置。有些软件包的源代码在编译安装后可以用make&nbsp;install命令来进行卸载，如果不提供此功能，则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中，往往很难把它删除干净，那你应该在编译前进行配置，指定软件将要安装到目标路径：./configure&nbsp;--prefix=目录名，这样可以使用&#8220;rm&nbsp;-rf&nbsp;软件目录名&#8221;命令来进行干净彻底的卸载。与其它安装方式相比，需要用户自己编译安装是最难的，它适合于使用Linux已有一定经验的人，一般不推荐初学者使用。</p>
<p>关于Linux下软件的安装与卸载lanche已经讲了这么多，但可能还会有人问怎么知道一个tar.gz/bz2包是二进制文件包呢还是源代码包？如果你用过压缩工具就会明白，压缩包未必就是软件，它也可能是备份的许多图片，也可能是打包在一起的普通资料，要分辨它到底是什么最好的办法就是查看包里的文件清单，使用命令tar&nbsp;ztvf&nbsp;*.tar.gz&nbsp;/&nbsp;tar&nbsp;ytvf&nbsp;*.bz2或者在X-Window下使用图形化的ArK压缩档案管理工具都可以，源代码包里的文件往往会含有种种源代码文件，头文件*.h、c代码源文件&nbsp;*.c、C++代码源文件*.cc/*.cpp等；而二进制包里的文件则会有可执行文件（与软件同名的往往是主执行文件），标志是其所在路径含有名为&nbsp;bin的目录（仅有少数例外）。原来这么简单呀，还不快点自己试试！</p>
</div>
</div>
</div>
</span>
<img src ="http://www.blogjava.net/Javawind/aggbug/141779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-31 17:17 <a href="http://www.blogjava.net/Javawind/archive/2007/08/31/141779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【linux脚本】bad interpreter: No such file or directory</title><link>http://www.blogjava.net/Javawind/archive/2007/08/30/141493.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Thu, 30 Aug 2007 11:14:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/30/141493.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141493.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/30/141493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141493.html</trackback:ping><description><![CDATA[<p>一般来说，在windows用建立的sh文件在linux中运行时，因为window在每行后加入隐藏字符^M<br>所以当linux编译时 由于无法编译^M而导致bad interpreter错误
<p>使用&nbsp;vi -b &lt;file name&gt; 找出^M 然后删除。<br></p>
<img src ="http://www.blogjava.net/Javawind/aggbug/141493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-30 19:14 <a href="http://www.blogjava.net/Javawind/archive/2007/08/30/141493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux Shell 脚本入门</title><link>http://www.blogjava.net/Javawind/archive/2007/08/30/141488.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Thu, 30 Aug 2007 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/30/141488.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141488.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/30/141488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141488.html</trackback:ping><description><![CDATA[1. Linux 脚本编写基础<br>1.1 语法基本介绍<br>1.1.1 开头<br>程序必须以下面的行开始（必须方在文件的第一行）： <br>#!/bin/sh <br>　　符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 <br>　　当编辑好脚本时，如果要执行该脚本，还必须使其可执行。 <br>　　要使脚本可执行：<br>编译 chmod +x filename 这样才能用./filename 来运行<br><br>1.1.2 注释 <br>　　在进行shell编程时，以#开头的句子表示注释，直到这一行的结束。我们真诚地建议您在程序中使用注释。<br>如果您使用了注释，那么即使相当长的时间内没有使用该脚本，您也能在很短的时间内明白该脚本的作用<br>及工作原理。<br><br>-- 我们的技术是你的！<a href="http://www.icwin.net/" target=_blank><u><font color=#0000ff>www.icwin.net</font></u></a><br><br>1.1.3 变量 <br>　　在其他编程语言中您必须使用变量。在shell编程中，所有的变量都由字符串组成，并且您不需要对变量<br>进行声明。要赋值给一个变量，您可以这样写： <br>#!/bin/sh <br>#对变量赋值： <br>a="hello world" <br># 现在打印变量a的内容： <br>echo "A is:" <br>echo $a <br>有时候变量名很容易与其他文字混淆，比如： <br>num=2 <br>echo "this is the $numnd" <br>这并不会打印出"this is the 2nd"，而仅仅打印"this is the "，因为shell会去搜索变量numnd的值，<br>但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量： <br>num=2 <br>echo "this is the ${num}nd" <br>　　这将打印： this is the 2nd <br><br>1.1.4 环境变量<br>由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论，因为通常情况下仅仅在登录<br>脚本中使用环境变量。 <br><br>1.1.5 Shell命令和流程控制<br>在shell脚本中可以使用三类命令： <br>1)Unix 命令: <br>　　虽然在shell脚本中可以使用任意的unix命令，但是还是由一些相对更常用的命令。这些命令通常是用来<br>进行文件和文字操作的。 <br>常用命令语法及功能 <br>　　echo "some text": 将文字内容打印在屏幕上 <br>　　ls: 文件列表 <br>　　wc &#8211;l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数 <br>　　cp sourcefile destfile: 文件拷贝 <br>　　mv oldname newname : 重命名文件或移动文件 <br>　　rm file: 删除文件 <br>　　grep 'pattern' file: 在文件内搜索字符串比如：grep 'searchstring' file.txt <br>　　cut -b colnum file: 指定欲显示的文件内容范围，并将它们输出到标准输出设备比如：输出<br>每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆，<br>这是两个完全不同的命令 <br>　　cat file.txt: 输出文件内容到标准输出设备（屏幕）上 <br>　　file somefile: 得到文件类型 <br>　　read var: 提示用户输入，并将输入赋值给变量 <br>　　sort file.txt: 对file.txt文件中的行进行排序 <br>　　uniq: 删除文本文件中出现的行列比如： sort file.txt | uniq <br>　　expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 <br>　　find: 搜索文件比如：根据文件名搜索find . -name filename -print <br>　　tee: 将数据输出到标准输出设备(屏幕) 和文件比如：somecommand | tee outfile <br>　　basename file: 返回不包含路径的文件名比如： basename /bin/tux将返回 tux <br>　　dirname file: 返回文件所在路径比如：dirname /bin/tux将返回 /bin <br>　　head file: 打印文本文件开头几行 <br>　　tail file : 打印文本文件末尾几行 <br>　　sed: Sed是一个基本的查找替换程序。可以从标准输入（比如命令管道）读入文本，并将<br>结果输出到标准输出（屏幕）。该命令采用正则表达式（见参考）进行搜索。 <br>不要和shell中的通配符相混淆。比如：将linuxfocus 替换为 <br>LinuxFocus ：cat text.file | sed 's/linuxfocus/LinuxFocus/' &gt; newtext.file <br>　　awk: awk 用来从文本文件中提取字段。缺省地，字段分割符是空格，可以使用-F指定其他分割符。<br>cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用，作为字段分割符，同时打印<br>第一个和第三个字段。如果该文件内容如下： Adam Bor, 34, IndiaKerry Miller, 22, USA<br>命令输出结果为：Adam Bor, IndiaKerry Miller, USA <br>2) 概念: 管道, 重定向和 backtick <br>　　这些不是系统命令，但是他们真的很重要。<br><br>　　管道 (|) 将一个命令的输出作为另外一个命令的输入。 <br>grep "hello" file.txt | wc -l <br>　　在file.txt中搜索包含有&#8221;hello&#8221;的行并计算其行数。 <br>　　在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。 <br>　　重定向：将命令的结果输出到文件，而不是标准输出（屏幕）。<br><br>　　&gt; 写入文件并覆盖旧文件 <br>　　&gt;&gt; 加到文件的尾部，保留旧文件内容。 <br><br>反短斜线 <br>　 使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。<br>命令： <br>find . -mtime -1 -type f -print <br>　　用来查找过去24小时（-mtime &#8211;2则表示过去48小时）内修改过的文件。如果您<br>想将所有查找到的文件打一个包，则可以使用以下脚本： <br>#!/bin/sh <br># The ticks are backticks (`) not normal quotes ('): <br>tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print` <br>3) 流程控制 <br>1.if <br>　　"if" 表达式 如果条件为真则执行then后面的部分： <br>if ....; then <br>　 .... <br>elif ....; then <br>　 .... <br>else <br>　 .... <br>fi<br>大多数情况下，可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件<br>是否存在及是否可读等等&#8230; <br>　　通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 <br>[ -f "somefile" ] ：判断是否是一个文件 <br>[ -x "/bin/ls" ] ：判断/bin/ls是否存在并有可执行权限 <br>[ -n "$var" ] ：判断$var变量是否有值 <br>[ "$a" = "$b" ] ：判断$a和$b是否相等 <br>　　执行man test可以查看所有测试表达式可以比较和判断的类型。 <br>　　直接执行以下脚本： <br>#!/bin/sh <br>if [ "$SHELL" = "/bin/bash" ]; then <br>　echo "your login shell is the bash (bourne again shell)" <br>else <br>　echo "your login shell is not bash but $SHELL" <br>fi <br>　　变量$SHELL包含了登录shell的名称，我们和/bin/bash进行了比较。 <br>快捷操作符 <br>熟悉C语言的朋友可能会很喜欢下面的表达式： <br>[ -f "/etc/shadow" ] &amp;&amp; echo "This computer uses shadow passwors" <br>　　这里 &amp;&amp; 就是一个快捷操作符，如果左边的表达式为真则执行右边的语句。<br>您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在<br>则打印&#8221; This computer uses shadow passwors&#8221;。同样或操作(||)在shell编程中也是<br>可用的。这里有个例子： <br>#!/bin/sh <br>mailfolder=/var/spool/mail/james <br>[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; } <br>echo "$mailfolder has mail from:" <br>grep "^From " $mailfolder<br><br>该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的"From" 一行。如果不可读<br>则或操作生效，打印错误信息后脚本退出。这里有个问题，那就是我们必须有两个命令： <br>　　-打印错误信息 <br>　　-退出程序 <br>　　我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。 <br>　　不用与和或操作符，我们也可以用if表达式作任何事情，但是使用与或操作符会更便利很多。<br><br>2.case<br><br>case :表达式可以用来匹配一个给定的字符串，而不是数字。 <br>case ... in <br>...) do something here ;; <br>esac <br>　　让我们看一个例子。 file命令可以辨别出一个给定文件的文件类型，比如： <br>file lf.gz <br>　　这将返回： <br>lf.gz: gzip compressed data, deflated, original filename, <br>last modified: Mon Aug 27 23:09:18 2001, os: Unix <br>　我们利用这一点写了一个叫做smartzip的脚本，该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件： <br>#!/bin/sh <br>ftype=`file "$1"` <br>case "$ftype" in <br>"$1: Zip archive"*) <br>　　unzip "$1" ;; <br>"$1: gzip compressed"*) <br>　　gunzip "$1" ;; <br>"$1: bzip2 compressed"*) <br>　　bunzip2 "$1" ;; <br>*) echo "File $1 can not be uncompressed with smartzip";; <br>esac <br>　　您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。<br>也就是说，当我们运行： <br>smartzip articles.zip <br>$1 就是字符串 articles.zip <br><br>3. selsect<br>select 表达式是一种bash的扩展应用，尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。 <br>select var in ... ; do <br>　break <br>done <br>.... now $var can be used .... <br>下面是一个例子： <br>#!/bin/sh <br>echo "What is your favourite OS?" <br>select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do <br>　　　　break <br>done <br>echo "You have selected $var" <br>　　下面是该脚本运行的结果： <br>What is your favourite OS? <br>1) Linux <br>2) Gnu Hurd <br>3) Free BSD <br>4) Other <br>#? 1 <br>You have selected Linux <br><br>4.loop<br><br>loop表达式： <br>while ...; do <br>.... <br>done <br>　　while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true. <br>关键字"break" 用来跳出循环。而关键字&#8221;continue&#8221;用来不执行余下的部分而直接跳到下一个循环。 <br>　　<br>for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量： <br>for var in ....; do <br>　 .... <br>done <br>在下面的例子中，将分别打印ABC到屏幕上： <br>#!/bin/sh <br>for var in A B C ; do <br>　 echo "var is $var" <br>done <br>下面是一个更为有用的脚本showrpm，其功能是打印一些RPM包的统计信息： <br>#!/bin/sh <br># list a content summary of a number of RPM packages <br># USAGE: showrpm rpmfile1 rpmfile2 ... <br># EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm <br>for rpmpackage in $*; do <br>　if [ -r "$rpmpackage" ];then <br>　　echo "=============== $rpmpackage ==============" <br>　　rpm -qi -p $rpmpackage <br>　else <br>　　echo "ERROR: cannot read file $rpmpackage" <br>　fi <br>done <br>　　这里出现了第二个特殊的变量$*，该变量包含了所有输入的命令行参数值。<br>如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm <br>此时 $* 包含了 3 个字符串，即openssh.rpm, w3m.rpm and webgrep.rpm. <br><br><br>5. 引号 <br>在向程序传递任何参数之前，程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符<br>（比如*）替换成合适的文件名，它变量替换成变量值。为了防 止程序作这种替换，您可以使用<br>引号：让我们来看一个例子，假设在当前目录下有一些文件，两个jpg文件， mail.jpg 和tux.jpg。 <br>1.2 编译SHELL脚本 <br>#ch#!/bin/sh mod +x filename <br>　cho *.jpg &#8746;缓螅梢酝&#252;淙耄?./filename 来执行您的脚本。 <br>　　这将打印出"mail.jpg tux.jpg"的结果。 <br>　 　　引号 (单引号和双引号) 将防止这种通配符扩展： <br>#!/bin/sh <br>echo "*.jpg" <br>echo '*.jpg' <br>　　这将打印"*.jpg" 两次。 <br>　　单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。 <br>#!/bin/sh <br>echo $SHELL <br>echo "$SHELL" <br>echo '$SHELL' <br>　　运行结果为： <br>/bin/bash <br>/bin/bash <br>$SHELL <br>　　最后，还有一种防止这种扩展的方法，那就是使用转义字符——反斜杆： <br>echo *.jpg <br>echo $SHELL <br>　　这将输出： <br>*.jpg <br>$SHELL <br><br>6. Here documents -- 我们的技术是你的！<a href="http://www.icwin.net/" target=_blank><u><font color=#0000ff>www.icwin.net</font></u></a><br><br>当要将几行文字传递给一个命令时，here documents（译者注：目前还没有见到过对该词适合的翻译）<br>一种不错的方法。对每个脚本写一段帮助性的文字是很有用的，此时如果我们四有那个 here documents<br>就不必用echo函数一行行输出。 一个 "Here document" 以 &lt;&lt; 开头，后面接上一个字符串，这个字符串<br>还必须出现在here document的末尾。下面是一个例子，在该例子中，我们对多个文件进行重命名，并且<br>使用here documents打印帮助： <br>#!/bin/sh <br># we have less than 3 arguments. Print the help text: <br>if [ $# -lt 3 ] ; then <br>cat &lt; <br>ren -- renames a number of files using sed regular expressions <br>USAGE: ren 'regexp' 'replacement' files... <br>EXAMPLE: rename all *.HTM files in *.html: <br>　ren 'HTM$' 'html' *.HTM <br>HELP <br>　exit 0 <br>fi <br>OLD="$1" <br>NEW="$2" <br># The shift command removes one argument from the list of <br># command line arguments. <br>shift <br>shift <br># $* contains now all the files: <br>for file in $*; do <br>　　if [ -f "$file" ] ; then <br>　　　newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"` <br>　　　if [ -f "$newfile" ]; then <br>　　　　echo "ERROR: $newfile exists already" <br>　　　else <br>　　　　echo "renaming $file to $newfile ..." <br>　　　　mv "$file" "$newfile" <br>　　　fi <br>　　fi <br>done <br>　这是一个复杂一些的例子。让我们详细讨论一下。第一个if表达式判断输入命令行参数是<br>否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个，则将帮助文字传递<br>给cat命令，然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。 如果输入参数等<br>于或大于3个，我们就将第一个参数赋值给变量OLD，第二个参数赋值给变量NEW。下一步，我<br>们使用shift命令将第一个和第二个参数从 参数列表中删除，这样原来的第三个参数就成为参<br>数列表$*的第一个参数。然后我们开始循环，命令行参数列表被一个接一个地被赋值给变量$file。<br>接着我 们判断该文件是否存在，如果存在则通过sed命令搜索和替换来产生新的文件名。然后<br>将反短斜线内命令结果赋值给newfile。这样我们就达到了我们的目 的：得到了旧文件名和新<br>文件名。然后使用mv命令进行重命名。 <br>4)函数<br>如果您写了一些稍微复杂一些的程序，您就会发现在程序中可能在几个地方使用了相同的代码，<br>并且您也会发现，如果我们使用了函数，会方便很多。一个函数是这个样子的： <br>functionname() <br>{ <br># inside the body $1 is the first argument given to the function <br># $2 the second ... <br>body <br>} <br>您需要在每个程序的开始对函数进行声明。 <br><br>　　下面是一个叫做xtitlebar的脚本，使用这个脚本您可以改变终端窗口的名称。<br>这里使用了一个叫做help的函数。正如您可以看到的那样，这个定义的函数被使用了两次。 <br>#!/bin/sh <br># vim: set sw=4 ts=4 et: <br>help() <br>{ <br>　　cat &lt; <br>xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole <br>USAGE: xtitlebar [-h] "string_for_titelbar" <br>OPTIONS: -h help text <br>EXAMPLE: xtitlebar "cvs" <br>HELP <br>　　exit 0 <br>} <br># in case of error or if -h is given we call the function help: <br>[ -z "$1" ] &amp;&amp; help <br>[ "$1" = "-h" ] &amp;&amp; help <br># send the escape sequence to change the xterm titelbar: <br>echo -e "33]0;$107" <br>#<br><br>在脚本中提供帮助是一种很好的编程习惯，这样方便其他用户（和您）使用和理解脚本。 <br>命令行参数 <br>　　我们已经见过$* 和 $1, $2 ... $9 等特殊变量，这些特殊变量包含了用户从命令<br>行输入的参数。迄今为止，我们仅仅了解了一些简单的命令行语法（比如一些强制性的<br>参数和查看帮助的-h选项）。 但是在编写更复杂的程序时，您可能会发现您需要更多的<br>自定义的选项。通常的惯例是在所有可选的参数之前加一个减号，后面再加上参数值 (<br>比如文件名)。 <br>有好多方法可以实现对输入参数的分析，但是下面的使用case表达式的例子无遗是一个不错的方法。 <br>#!/bin/sh <br>help() <br>{ <br>　cat &lt; <br>This is a generic command line parser demo. <br>USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2 <br>HELP <br>　exit 0 <br>} <br>while [ -n "$1" ]; do <br>case $1 in <br>　　-h) help;shift 1;; # function help is called <br>　　-f) opt_f=1;shift 1;; # variable opt_f is set <br>　　-l) opt_l=$2;shift 2;; # -l takes an argument -&gt; shift by 2 <br>　　--) shift;break;; # end of options <br>　　-*) echo "error: no such option $1. -h for help";exit 1;; <br>　　*) break;; <br>esac <br>done <br><br>echo "opt_f is $opt_f" <br>echo "opt_l is $opt_l" <br>echo "first arg is $1" <br>echo "2nd arg is $2" <br>　　您可以这样运行该脚本： <br>cmdparser -l hello -f -- -somefile1 somefile2 <br>　　返回的结果是： <br>opt_f is 1 <br>opt_l is hello <br>first arg is -somefile1 <br>2nd arg is somefile2 <br>　　这个脚本是如何工作的呢？脚本首先在所有输入命令行参数中进行循环，将输入参数<br>与case表达式进行比较，如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例，<br>首先输入的应该是包含减号的参数.<br>第2部分 实例<br>现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本（framework.sh），该脚本包含了大多数脚本都需要的框架结构，是一个非常不错的主意。这时候，在写一个新的脚本时我们只需要执行一下copy命令： <br>cp framework.sh myscript <br>　然后再插入自己的函数。 <br>　　让我们再看两个例子： <br>　　二进制到十进制的转换 <br>　　脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子： <br>#!/bin/sh <br># vim: set sw=4 ts=4 et: <br>help() <br>{ <br>　cat &lt; <br>b2h -- convert binary to decimal <br>USAGE: b2h [-h] binarynum <br>OPTIONS: -h help text <br>EXAMPLE: b2h 111010 <br>will return 58 <br>HELP <br>　exit 0 <br>} <br>error() <br>{ <br>　　# print an error and exit <br>　　echo "$1" <br>　　exit 1 <br>} <br>lastchar() <br>{ <br>　　# return the last character of a string in $rval <br>　　if [ -z "$1" ]; then <br>　　　　# empty string <br>　　　　rval="" <br>　　　　return <br>　　fi <br>　　# wc puts some space behind the output this is why we need sed: <br>　　numofchar=`echo -n "$1" | wc -c | sed 's/ //g' ` <br>　　# now cut out the last char <br>　　rval=`echo -n "$1" | cut -b $numofchar` <br>} <br><br>chop() <br>{ <br>　　# remove the last character in string and return it in $rval <br>　　if [ -z "$1" ]; then <br>　　　　# empty string <br>　　　　rval="" <br>　　　　return <br>　　fi <br>　　# wc puts some space behind the output this is why we need sed: <br>　　numofchar=`echo -n "$1" | wc -c | sed 's/ //g' ` <br>　　if [ "$numofchar" = "1" ]; then <br>　　　　# only one char in string <br>　　　　rval="" <br>　　　　return <br>　　fi <br>　　numofcharminus1=`expr $numofchar "-" 1` <br>　　# now cut all but the last char: <br>　　rval=`echo -n "$1" | cut -b 0-${numofcharminus1}` <br>} <br>while [ -n "$1" ]; do <br>case $1 in <br>　　-h) help;shift 1;; # function help is called <br>　　--) shift;break;; # end of options <br>　　-*) error "error: no such option $1. -h for help";; <br>　　*) break;; <br>esac <br>done <br># The main program <br>sum=0 <br>weight=1 <br># one arg must be given: <br>[ -z "$1" ] &amp;&amp; help <br>binnum="$1" <br>binnumorig="$1" <br><br>while [ -n "$binnum" ]; do <br>　　lastchar "$binnum" <br>　　if [ "$rval" = "1" ]; then <br>　　　　sum=`expr "$weight" "+" "$sum"` <br>　　fi <br>　　# remove the last position in $binnum <br>　　chop "$binnum" <br>　　binnum="$rval" <br>　　weight=`expr "$weight" "*" 2` <br>done <br>echo "binary $binnumorig is decimal $sum" <br>　该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..)，比如二进制"10"可<br>以这样转换成十进制： <br>0 * 1 + 1 * 2 = 2 <br>　　为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc &#8211;c计算字符个数，<br>然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。 <br><br>文件循环程序 <br>　　或许您是想将所有发出的邮件保存到一个文件中的人们中的一员，但是在过了几个月<br>以后，这个文件可能会变得很大以至于使对该文件的访问速度变慢。下面的 脚本rotatefile<br>可以解决这个问题。这个脚本可以重命名邮件保存文件（假设为outmail）为outmail.1，<br>而对于outmail.1就变成了outmail.2 等等等等... <br>#!/bin/sh <br># vim: set sw=4 ts=4 et: <br>ver="0.1" <br>help() <br>{ <br>　　cat &lt; <br>rotatefile -- rotate the file name <br><br>USAGE: rotatefile [-h] filename <br><br>OPTIONS: -h help text <br>EXAMPLE: rotatefile out <br>This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1 <br>and create an empty out-file <br>The max number is 10 <br>version $ver <br>HELP <br>　　exit 0 <br>} <br><br>error() <br>{ <br>　　echo "$1" <br>　　exit 1 <br>} <br>while [ -n "$1" ]; do <br>case $1 in <br>　　-h) help;shift 1;; <br>　　--) break;; <br>　　-*) echo "error: no such option $1. -h for help";exit 1;; <br>　　*) break;; <br>esac <br>done <br># input check: <br>if [ -z "$1" ] ; then <br>error "ERROR: you must specify a file, use -h for help" <br>fi <br>filen="$1" <br># rename any .1 , .2 etc file: <br>for n in 9 8 7 6 5 4 3 2 1; do <br>　　if [ -f "$filen.$n" ]; then <br>　　　　p=`expr $n + 1` <br>　　　　echo "mv $filen.$n $filen.$p" <br>　　　　mv $filen.$n $filen.$p <br>　　fi <br>done <br># rename the original file: <br>if [ -f "$filen" ]; then <br>　　echo "mv $filen $filen.1" <br>　　mv $filen $filen.1 <br>fi <br>echo touch $filen <br>touch $filen <br>　　这个脚本是如何工作的呢？在检测用户提供了一个文件名以后，我们进行一个9到1的循环。文件9被命名为10，文件8重命名为9等等。循环完成之后，我们将原始文件命名为文件1同时建立一个与原始文件同名的空文件。 <br>调试 //---------------------------------------　　<br>//-- <a href="http://www.icwin.net/" target=_blank><u><font color=#0000ff>www.icwin.net</font></u></a><br>//--------------------------------------- <br>　　最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译，插入一个echo命令也不需要多少时间。 <br>　　shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误，您可以这样来进行调试： <br>sh -x strangescript <br>　　这将执行该脚本并显示所有变量的值。 <br>　　shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用： <br>sh -n your_script <br>　　这将返回所有语法错误。
<img src ="http://www.blogjava.net/Javawind/aggbug/141488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-30 18:47 <a href="http://www.blogjava.net/Javawind/archive/2007/08/30/141488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【应用】Linux查找文件的相关命令</title><link>http://www.blogjava.net/Javawind/archive/2007/08/30/141472.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Thu, 30 Aug 2007 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/30/141472.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141472.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/30/141472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141472.html</trackback:ping><description><![CDATA[　Linux查找文件的相关命令如表2-7所示。
<p>　　表2-7 Linux查找文件的相关命令说明</p>
<div align=center>
<table style="MARGIN-LEFT: -0.3pt; BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-padding-alt: 0cm 1.4pt 0cm 1.4pt" cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 0cm; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" width=82>
            <p class=a1 style="MARGIN: 0cm 0cm 0pt"><font size=1><span lang=AR-SA style="FONT-FAMILY: 黑体; mso-ascii-font-family: 'Times New Roman'">常</span><span lang=AR-SA style="mso-fareast-language: ZH-CN"> </span><span lang=AR-SA style="FONT-FAMILY: 黑体; mso-ascii-font-family: 'Times New Roman'">用</span><span lang=AR-SA style="mso-fareast-language: ZH-CN"> </span><span lang=AR-SA style="FONT-FAMILY: 黑体; mso-ascii-font-family: 'Times New Roman'">命</span><span lang=AR-SA style="mso-fareast-language: ZH-CN"> </span><span lang=AR-SA style="FONT-FAMILY: 黑体; mso-ascii-font-family: 'Times New Roman'">令</span><span lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 0cm; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" width=263>
            <p class=a1 style="MARGIN: 0cm 0cm 0pt"><font size=1><span lang=AR-SA style="FONT-FAMILY: 黑体; mso-ascii-font-family: 'Times New Roman'">简要中文说明</span><span lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 0cm; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" width=120>
            <p class=a1 style="MARGIN: 0cm 0cm 0pt"><font size=1><span lang=AR-SA style="FONT-FAMILY: 黑体; mso-ascii-font-family: 'Times New Roman'">程序所在目录</span><span lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>more<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分页显示一个文件或任何输出结果</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>less<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分页显示一个文件并且可以回头</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/usr/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>whereis<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寻找文件工具</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/usr/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>find<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寻找文件工具</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/usr/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>locate<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寻找文件工具</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/usr/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>grep <o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寻找某字串内容工具</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 61.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" width=82>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>env<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 196.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" width=263>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><font size=1><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看环境设置</span><span lang=EN-US><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 1.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 1.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 90.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" width=120>
            <p class=a2 style="MARGIN: 0cm 0cm 0pt 10.5pt"><span lang=EN-US><font size=1>/usr/bin<o:p></o:p></font></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><font color=#ff0000><strong>　　more [文件名]</strong></font></p>
<p><font color=#ff0000><strong>　　分页显示一个文件或任何输出结果</strong></font></p>
<p>　　其实more不是用来寻找文件的，但是一般人却十有八九是在找文件时把它派上用场。</p>
<p>　　因为 more 主要的作用是把输出结果显示在屏幕上，一页停止一次，所以例如当我们用 ls 命令去找一个 x字母开头的文件，而下达了 ls x* 却仍然列出太多文件，一个屏幕看不完时，就可以配合管道符号和 more 命令：</p>
<p>　　ls x* | more</p>
<p>　　它会一屏停止一下，等待您按空白键才继续往上卷。于是 more 俨然犹如 DOS 的 DIR 命令 /P 选项的地位了。而 more 当主角的时候，是用做一页一次显示文章，例如我们想要看 /etc 里面的 XF86Config 文件，可以下如下命令：</p>
<p>　　more /etc/XF86Config</p>
<p>　　这样，我们就可以不断按空白键把这个文件慢慢看完。但是，因为more 先天的设计，如果您看完了这页，想要回头看上一页，很抱歉，是不行的，您必须从头再来！于是大家在使用中就干脆摒弃这个命令，而代之以 vi 或者pico, joe等文书编辑器来看文字文件了！</p>
<p>　　pico /etc/XF86Config</p>
<p>　　到最后，很少人再用more了。所以more经常配合 ls在找文件的场合出现，每天都可以上场十几次。</p>
<p>　　所以，相信把失去主要舞台的 more归类为找寻文件的相关命令虽不合法，但合情合理也合于现状。</p>
<p>　　练习：</p>
<p>　　请您用 more 去看一个文字文件，与用 pico 去看一个文字文件相比较，哪一个比较方便？<br><br><strong><font color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;less [文件名]</font></strong></p>
<p><strong><font color=#ff0000>　　分页显示一个文件并且可以回头</font></strong></p>
<p>　　less命令很好笑，取名时就故意与more 命令打对台，你叫&#8220;更多&#8221;，我就叫&#8220;更少&#8221;，就好像你叫黑人牙膏我就叫白人牙膏一样。事实上与什么&#8220;更多&#8221;、&#8220;更少&#8221;都没有关系。它最主要只是为了改进一点：more 不能回头看的问题！</p>
<p>　　less 的优点就是可以随时回头，最简单的用【PgUp】键就可以向上翻。</p>
<p>　　可是依我们的孤陋之见，还是用文书编辑器去阅读文件就好了嘛，更何况 less 本身还有高达 42 个选项，何必那么麻烦！</p>
<p>　　所以，为了您好，选项我们也不介绍了。这个命令目前只在 Linux 系统可以使用，其他 UNIX 家族尚无。</p>
<p>　　练习：</p>
<p>　　（1）请您用 less 去看一个文字文件，与用 pico 去看一个文字文件相比，哪一个比较方便？</p>
<p>　　（2）less命令能像more命令一样配合管道符号，让ls的列示文件能够回头翻看吗？</p>
<p><font color=#ff0000><strong>　　whereis 文件名</strong></font></p>
<p><font color=#ff0000><strong>　　寻找文件工具</strong></font></p>
<p>　　whereis 是一个小巧好用的文件寻找工具，它专门用来寻找可执行的程序、原始程序和使用手册。</p>
<p>　　例如执行命令：</p>
<p>　　whereis bzip2</p>
<p>　　它就会告诉您，bzip2 放在 /usr/bin 。通常，如果您确定某个东西是程序，而用 whereis 找不到的话，那就表示本系统没有安装该程序了，例如：</p>
<p>　　whereis cjoe</p>
<p>　　表示这套系统中没有装 cjoe，否则应该会找到才对。</p>
<p>　　练习：</p>
<p>　　（1）找找您的系统上有没有xpaint这个程序？因为这个程序在 KDE 和 GNOME 的默认主菜单上都没有列出来，但并不表示一定没有。</p>
<p>　　（2）能用 whereis 命令去找到XF86Config设置文件在哪里吗？为什么 ？<br><br><strong><font color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find [寻找的目录] [表示式]</font></strong></p>
<p><strong><font color=#ff0000>　　寻找文件工具</font></strong></p>
<p>　　find 是高级的寻找文件工具，可不像 whereis 那么&#8220;阳春白雪&#8221;。但也因为它太高级了，复杂到很多人用不熟练。我们尽量只举简单的例子。</p>
<p>　　最简单的格式如下：</p>
<p>　　find / -name my* -print</p>
<p>　　这个意思是请它从最底层的主目录开始找，找出文件名是 my 开头的文件，把它显示出来。-print 选项是显示，您可把它当做固定要加上的项目。</p>
<p>　　但它还可以用时间来找，例如：</p>
<p>　　find /usr -atime 3 &#8211;print</p>
<p>　　会从 /usr 目录开始往下找，找最近3天之内存取过的文件。</p>
<p>　　find /usr -ctime 5 &#8211;print</p>
<p>　　会从 /usr 目录开始往下找，找最近5天之内修改过的文件。</p>
<p>　　find /doc -user jacky -name 'j*' &#8211;print</p>
<p>　　会从 /doc 目录开始往下找，找jacky 的、文件名开头是 j的文件。</p>
<p>　　find /doc \( -name 'ja*' -o- -name 'ma*' \) &#8211;print</p>
<p>　　会从 /doc 目录开始往下找，找寻文件名是 ja 开头或者 ma开头的文件。</p>
<p>　　find /doc -name '*bak' -exec rm {} \;</p>
<p>　　会从 /doc 目录开始往下找，找到凡是文件名结尾为 bak的文件，把它删除掉。-exec 选项是执行的意思，rm 是删除命令，{ } 表示文件名，&#8220;\;&#8221;是规定的命令结尾。</p>
<p>　　练习：</p>
<p>　　用 find 命令能否找出XF86Config这个文件在哪里<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color=#ff0000>locate 文件名</font></strong></p>
<p><strong><font color=#ff0000>　　寻找文件工具</font></strong></p>
<p>　　locate 也是一个寻找文件的工具，但是它不像 whereis 只能找程序文件等几种文件，也不像find那么复杂，可以算是&#8220;中庸之道&#8221;！</p>
<p>　　中庸之道，往往就是大部分人最佳的选择，如图2-32所示。</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td align=middle><img src="http://photo.sohu.com/2004/06/09/32/Img220453227.gif" border=1><br><font size=2>图2-32 3种寻找文件命令的对比</font></td>
        </tr>
    </tbody>
</table>
</p>
<p>　　whereis找不到的文件，find要一大串命令，还花了很久的时间才找到的XF86Config设置文件，而用locate一下子就简单找到了！</p>
<p>　　练习：</p>
<p>　　（1）用 locate 找找有没有一个inittab文件？</p>
<p>　　（2）用 locate 找找有哪些 .pcf 字形文件。如果找不到的话，找找看已经压缩过的字形文件 .pcf.Z 或者 .pcf.gz。</p>
<p><font color=#ff0000><strong>　　grep [-选项] [字串] [文件名]</strong></font></p>
<p><font color=#ff0000><strong>　　寻找某字串内容工具</strong></font></p>
<p>　　有些时候，我们存储文件时随手乱取了一个文件名，事后自己都忘了那个文件名叫什么，连开头第一个字母都想不起来。那么，如果您还记得该文件一点特殊的词语，应该可以用 grep 命令找到。</p>
<p>　　例如，我们想在一个目录的200个文件里面，找出哪一个文件提到&#8220;排版&#8221;这个词语：</p>
<p>　　grep 排版 *.txt</p>
<p>　　找到了两个文件有此字样。然后您再自行调出看看到底哪一篇才是您所要的即可。寻找时注意尽量寻找特殊词语，如果您输入&#8220;然后&#8221;、&#8220;这样&#8221;、&#8220;不是&#8221;、&#8220;电脑&#8221;&#8230;&#8230;这类太普遍的词语，可能几百篇文章中都有，那就失去了用 grep 找文件的意义了。</p>
<p>　　因为例子中第二篇文章出现了两次，所以列出了3行，其实只有两个文件符合。如果您想要让它凡是符合条件的只出现一次的话，加上 -l 选项就可以了，如图2-33所示。</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td align=middle><img src="http://photo.sohu.com/2004/06/09/32/Img220453228.gif" border=1><br><font size=2>图2-33 增加-l选项后的grep命令</font></td>
        </tr>
    </tbody>
</table>
</p>
<p>　　其他常用的选项还有：</p>
<p>　　-n 同时列出该词语出现在文章的第几行。</p>
<p>　　-c 计算一下该字串出现的次数。</p>
<p>　　-i 比对的时候，不计较大小写的不同。</p>
<p>　　练习：</p>
<p>　　当我们要为系统增加一个用户时，往往担心添加一个已经存在的用户名字。如果用 grep 命令，可不可以避免这个问题？如何避免 ？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color=#ff0000>env</font></strong></p>
<p><strong><font color=#ff0000>　　查看环境设置</font></strong></p>
<p>　　env 命令可以设置很多环境变量，例如终端机的类型、使用的浏览器、用户主目录（Home Directory）的所在等等。</p>
<p>　　但是我们现在把焦点集中在其中一项：PATH环境变量。</p>
<p>　　因为 PATH 这个环境变量掌管了您下达命令的时候，它会到下面几个目录去找您命令的程序：</p>
<p>　　/usr/bin</p>
<p>　　/sbin</p>
<p>　　/usr/sbin</p>
<p>　　/usr/X11R6/bin</p>
<p>　　/root/bin</p>
<p>　　那么您用 env 命令，让它把所有的环境变量列出来的时候，就可以看到有一行PATH 设置，把上述几个目录用分号分开，然后串成一串。这就是它所谓寻找命令的&#8220;路径&#8221;。DOS 系统也有一个同名而且意义非常相似的路径设置。如图2-34所示。</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td align=middle><img src="http://photo.sohu.com/2004/06/09/32/Img220453229.gif" border=1><br><font size=2>图2-34 执行env命令</font></td>
        </tr>
    </tbody>
</table>
</p>
<p>　　如果您想在它查找命令的路径上增加一个 /usr/bin/he，而把 /root/bin 去掉，那么您可以重新下达：</p>
<p>　　env PATH=/usr/bin;/sbin;/usr/sbin;/usr/X11R6/bin;/usr/bin/he</p>
<p>　　当然env 其他的变量也可以这样改变。但是因为涉及面太广，我们就只把焦点集中在改变查找路径上，其他暂时不谈。</p>
<p>　　练习：</p>
<p>　　用env命令改变您默认的浏览器</p>
<img src ="http://www.blogjava.net/Javawind/aggbug/141472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-30 17:55 <a href="http://www.blogjava.net/Javawind/archive/2007/08/30/141472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【调试】Setting Environment Variables</title><link>http://www.blogjava.net/Javawind/archive/2007/08/29/141122.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Wed, 29 Aug 2007 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/29/141122.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141122.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/29/141122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141122.html</trackback:ping><description><![CDATA[<font face="Courier New">export PATH=${ANT_HOME}/bin:${JAVA_HOME}/bin:${PATH}<br><br>这里的${PATH}指向为以前path中的variavle值，所以这个命令运行后是把${ANT_HOME}/bin:${JAVA_HOME}/bin添加到以前的path中去。 如果没有${PATH}则会用新的变量替换原来的。<br><br>单独调用export or env&nbsp;查看当前的variable 设置情况&nbsp;</font> <br><br><br><br>You can <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">check</strong> the <strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">CLASSPATH</strong> setting by typing: <!-- macro JDisplay classpath.example211.bat --><!-- generated -->
<pre class=bat><span class=keyword twffan="done">echo </span><span class=divoperator twffan="done">%</span><strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">CLASSPATH</strong><span class=divoperator twffan="done">%</span></pre>
<!-- /generated by JDisplay -->under <!-- macro OSes WIN95+ --><!-- generated --><span class=os twffan="done">W95/W98/Me/NT/W2K/XP/W2K3/Vista</span><!-- /generated by OSes --> or <!-- macro JDisplay classpath.example212.bat --><!-- generated -->
<pre class=bat><span class=keyword twffan="done">echo </span>$<strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">CLASSPATH</strong></pre>
<!-- /generated by JDisplay -->under Unix/Linux. <br>
<img src ="http://www.blogjava.net/Javawind/aggbug/141122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-29 23:06 <a href="http://www.blogjava.net/Javawind/archive/2007/08/29/141122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【软件安装】Installing the Java Software Developers Kit Version (SDK) 1.4: </title><link>http://www.blogjava.net/Javawind/archive/2007/08/29/141119.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Wed, 29 Aug 2007 14:51:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/29/141119.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141119.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/29/141119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141119.html</trackback:ping><description><![CDATA[<table cellSpacing=0 cellPadding=2 width="100%" border=0>
    <tbody>
        <tr bgColor=#ffcc33>
            <td><strong><big>Installing the Java Software Developers Kit Version (SDK) 1.4:</big></strong></td>
        </tr>
    </tbody>
</table>
<p>Download: <a href="http://java.sun.com/j2se/1.4/download.html"><u><font color=#0000ff>http://java.sun.com/j2se/1.4/download.html</font></u></a> <br>(Download j2sdk-1_4_0_03-linux-i586-rpm.bin) <br><a href="http://java.sun.com/j2se/1.5.0/install-linux-64.html"><u><font color=#0000ff>x86_64 AMD Athelon/Opteron/Turion-64/EM64T info</font></u></a> for: jdk-1_5_0_<em>version</em>-linux-amd64-rpm.bin
<p>Install:
<dl>
<dd>
<pre>chmod +x j2sdk-1_4_0_03-linux-i586-rpm.bin
./j2sdk-1_4_0_03-linux-i586-rpm.bin
...
<em>This is where you agree to their license. Press the space bar to scroll down in "More".</em>
Do you agree the the above license terms? [yes or no]
yes
...
rpm -ivh j2sdk-1_4_0_03-fcs-linux-i586.rpm
</pre>
</dd></dl>The SDK installed in <tt>/usr/java/j2sdk1.4.0_03/</tt>
<p>Set environment variables. (Add to $HOME/.bash_profile)
<dl>
<dd>
<pre>PATH=/usr/java/j2sdk1.4.0_03/bin:$PATH:$HOME/bin:./
export PATH
export JAVA_HOME=/usr/java/j2sdk1.4.0_03
export CLASSPATH=/usr/java/j2sdk1.4.0_03/lib/tools.jar:/usr/java/j2sdk1.4.0_03/jre/lib/rt.jar:./
</pre>
</dd></dl>Must include "./" in CLASSPATH. This is necessary in 1.4.0_03.
<p>Test program: <tt>Test.java</tt>
<dl>
<dd>
<table cellSpacing=1 cellPadding=4 width="100%" bgColor=#000000 border=1>
    <tbody>
        <tr bgColor=#c0c0c0>
            <td>
            <pre>public class Test
            {
            public static void main(String[] args)
            {
            System.out.println("Hello world");
            }
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</dd></dl>Compile: <tt>javac Test.java</tt>
<p>(or /usr/java/j2sdk1.4.0/bin/javac Test.java) <br>Note that the file name and the class name are the same. This became a requirement in SDK 1.4. The result of the compile is the file: Test.class
<p>Run:
<dl>
<dd>
<pre>[prompt]$ java Test
Hello world
</pre>
</dd></dl>(or /usr/java/j2sdk1.4.0/bin/java Test)
<p><font color=#ff0000>[Potential Pitfall]</font>: Red Hat Enterprise Linux and other Linus systems which install GNU Java may find that this conflicts with the Sun Java installation. You may have to remove this (for example RHEL4): <br><tt>rpm -e java-1.4.2-gcj-compat-1.4.2.0-27jpp java-1.4.2-gcj-compat-devel-1.4.2.0-27jpp.noarch</tt>
<p><strong>The Java SDK includes the following commands:</strong>
<ul>
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/javac.html"><u><font color=#0000ff>javac</font></u></a>: Linux Java compiler (i.e. <tt>javac <em>program-name</em>.java</tt>)
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/java.html"><u><font color=#0000ff>java</font></u></a>: Byte code interpreter / Java program launcher. (i.e. <tt>java <em>program-name</em></tt> Do not include ".class" extension.) <br>Test version: <tt>java -version</tt>
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/appletviewer.html"><u><font color=#0000ff>appletviewer</font></u></a>: Views Java applet embedded in html file. (<tt>appletviewer <em>myfile</em>.html</tt>)
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/javaws.html"><u><font color=#0000ff>javaws</font></u></a>: Java Web Start application manager. Java application handler for browser. <br>(Also see <a href="http://www.yolinux.com/TUTORIALS/LinuxTutorialMozillaConfiguration.html#JAVA"><u><font color=#0000ff>YoLinux Mozilla configuration tutorial</font></u></a>)
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/javadoc.html"><u><font color=#0000ff>javadoc</font></u></a>: Generate API documentation from tagged comments.
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/javah.html"><u><font color=#0000ff>javah</font></u></a>: Creates C header and stub files for Java class.
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/javap.html"><u><font color=#0000ff>javap</font></u></a>: Java file disassembler
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jdb.html"><u><font color=#0000ff>jdb</font></u></a>: Java debugger
    <li><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jar.html"><u><font color=#0000ff>jar</font></u></a>: JAR archive file generation tool. </li>
</ul>
<img src ="http://www.blogjava.net/Javawind/aggbug/141119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-29 22:51 <a href="http://www.blogjava.net/Javawind/archive/2007/08/29/141119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【基础学习】文件结构</title><link>http://www.blogjava.net/Javawind/archive/2007/08/29/141109.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Wed, 29 Aug 2007 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/29/141109.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141109.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/29/141109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141109.html</trackback:ping><description><![CDATA[<p>~ 表示root文件夹</p>
<img src ="http://www.blogjava.net/Javawind/aggbug/141109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-29 22:19 <a href="http://www.blogjava.net/Javawind/archive/2007/08/29/141109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>