⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unix的shell命令详解.htm

📁 很好的参考书
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>UNIX的Shell命令详解</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="Microsoft Border" content="none">
</head>

<body background="../images/waybkgnd.gif" text="#C0C0C0" link="#00FF00" vlink="#C0C0C0">
<font SIZE="2">

<p></font><font size="6" color="#0080FF"><strong><u>UNIX的Shell命令详解</u></strong></font></p>
<font SIZE="2">

<p></font><font size="3">1. 输出入转向</p>

<p>在 UNIX 中,每一个 process 均有三个特殊的 file descriptor , 标准输入</p>

<p>( standard input )、标准输出 ( standard output )、标准错误输出( standard</p>

<p>error )。这三个平常是接受 terminal 的输入,而由 terminal 
显示出去。但是</p>

<p>UNIX 提供使用者可以使用一般的档案或 pipe 
来取代这些标准输出入设备。在</p>

<p>tcsh 里头,使用者可以利用&quot;&gt;&quot;和&quot;&lt;&quot;来进行输出入转向的工作。</p>

<p></font> </p>

<pre>    输出转向:
      command &gt; file
      </pre>

<pre>        你可以将一个指令的输出结果转向到一个档案,让此档案储存这个 command
        的输出结果。
        </pre>

<pre>        但是请注意,如果 file 已经存在在系统中,则 file 将会被盖过。也就是
        原先 file 的内容将会消失。
        </pre>

<pre>      command &gt;&amp; file
      </pre>

<pre>        与 &gt; 相同,但是这个格式表示连 standard error 一起转向。在 UNIX 中,
        standard error 在 programer 的习惯是用来显示 error 的发生,因此如果
        没有被转向时, standard output 的结果将会被转向到 file ,而 standard
        error 的结果仍将显示在 terminal 上。
        </pre>

<pre>      command &gt;&gt; file
      </pre>

<pre>        此格示代表将 standard output 的结果 append 到 file 中。如果 file 已
        存在在系统中,则 standard output 的结果将会加到 file 的末端,如果 file
        原先并不存在,则 file 将会被开启而将 standard output 的结果存至 file
        中。
        </pre>

<pre>      command &gt;&gt;&amp; filE
      </pre>

<pre>        同上,不过此格式代表连 standard error 一起 append 到 file 之中。
      </pre>

<pre>    输入转向
      command &lt; file
      </pre>

<pre>        一般程式须要自终端机输入资料,而你可以将程式所要输入的资料统一
        编入档案中,利用转向一并输入。
        </pre>

<pre>    set ignoreeeof
      由於转向输出会有将现有档案 overwrite 的危险,csh 与 tcsh 提供使用
      者一个方式来避免。
      </pre>

<pre>      当你执行 set ignoreeeof 之後,如有输出转向到已存在之档案时,它会
      发出一个档案已存在的讯息。 而在处理 append 转向上,如果已经 set 
      ignoreeeof ,则当要 append 一个不存在的档案,将会出现一个 error 
      messege 。
      </pre>

<pre>      然而如果我们当真是要转向盖过一个已存在的档案,或者是要 append 一
      个不存在的档案时,又要如何呢?  
      </pre>

<pre>      我们只要在 &quot;&gt;&quot; &quot;&gt;&amp;&quot; &quot;&gt;&gt;&quot; &quot;&gt;&gt;&amp;&quot; 後面加上惊叹号&quot;!&quot;,成为 &quot;&gt;!&quot; , ... 就
      可以了。
                      </pre>

<pre>  2. Pipe
    如同前面说的转向,Pipe 也是在标准输出入和标准示误装置间作取代动作,如
    此一来可以将某一个程式的输出连到另一个程式的输入中。其语法如下:
    </pre>

<pre>    command1 | command2 [ | command3 ....]
    command1 |&amp; command2 [ |&amp; command3 ....] &lt;--- 连 standard error 一起 pipe
    </pre>

<pre>    
  3. 前景与背景
    在 sh 下面,一个新产生的 process 可以经由 command 後面的符号';'和'&amp;'来分
    别前景和背景。如以下语法
    </pre>

<pre>    command
    </pre>

<pre>      这表示产生一个 foreground 的 process ,你要等到它结束才能再下另一个指
      令。 
    </pre>

<pre>    command &amp;
    </pre>

<pre>      这样表示产生一个 background 的 process ,它会给你一个类似以下的讯息:
      </pre>

<pre>       [1] 21304
      </pre>

<pre>      然後就出现下一个提示号,以供你给下一个指令。然後在这个 background 的
      process 结束的时候再给你一个如下面的讯息,告诉你它把这个 process 执
      行完毕了。 
      </pre>

<pre>       [1]    Done                  command
        </pre>

<pre>    command1 ; command2 ; command3 
    </pre>

<pre>      这样表示你要求系统连续执行 command1 , command2 , command3 三个指令,
      其中 command2 要等待 command1 , command3 要等待 command2 ,而你要等
      待 command3 执行完毕才能下指令。
      </pre>

<pre>    command1 &amp; command2 &amp; command3 &amp;
    </pre>

<pre>      这样表示你要求系统连续执行 command1 , command2 , command3 三个指令,
      而这三个指令都放在背景执行,彼此之间不需等待。
      </pre>

<pre>    fg 与 bg 
      </pre>

<pre>      也许你会问,一个已经执行的 process 可不可以由前景换背景,或由背景换
      前景呢?
      </pre>

<pre>      可以的。一个在前景执行的 process ,你可以按 Ctl-Z 将 process 暂停,
      系统会给你一个讯息:
      </pre>

<pre>      Suspended
      </pre>

<pre>      然後出现提示号。此时你可以使用 fg 将其恢复前景执行,或按 bg 将其改为
      背景执行。
      </pre>

<pre>      而如果有一个 background 的 process , 你也可以用 fg 指令将其呼叫到前景
      来。首先你需用 jobs 指令来观查目前有多少在背景下的 proesses,然後根据
      它所显示出来的 job id 来决定将那一个 process 放到前景。如使用
      </pre>

<pre>        % fg %3 # 将第三个 job 放到 foreground 。
      </pre>

<pre>  4. 别名 alias
    在 csh 与 tcsh 中,提供 alias 的功能,使得使用者可以将常用却冗长的
    指令以其他的名字存起,不过不须像储存变数一样要在前面加一个&quot;$&quot;。
    </pre>

<pre>    alias 的格式:
      alias  aliasname   string ....  
      alias  aliasname   'string \!* string' 
      </pre>

<pre>    前面的一个格式是把 aliasname 直接用来取代後面的 string ,然後如有任何
    跟在後面的 argument 将会出现的其後。如下例:
    </pre>

<pre>      % alias la ls -Fa
      </pre>

<pre>    例中的 la . 相当於 ls -F . ,然而如果仅是如此并不足够,因此有後面的另
    一种格式。後面的格式中的 \!* 代表将来会出现在 aliasname 後面的所有参数,
    如下例:
    </pre>

<pre>      % alias dir 'ls -Flag \!* | more'
      </pre>

<pre>    例中的 dir doc 相当於 ls -Flag doc | more ,这样可提供使用者在设计上更大
    的弹性。  
    </pre>

<pre>  5. tcsh 的初始设定档
    tcsh 有两个 initial 档,一个是 $HOME/.tcshrc , 一个是 $HOME/.login 。
    </pre>

<pre>    每一个 tcsh 在被开启时,它都会去执行所有位於 .tcshrc 中的命令,因此你
    可以把所有的 alias , 变数设定都放到 .tcshrc 里面去。在tcsh 起动的时候
    便会自动的去执行这些对於你的环境的初始设定。
    </pre>

<pre>    .login 只有在 tcsh 本身是一个 login shell 的时候才会执行,它多半用来设
    定一些只需在 login 的时候要执行的命令,如环境变数的设定,因环境变数在
    设定之後,只要是其子 process 均会取得其环境,因此不须在每次开启 shell 的
    时候都重覆执行。
    </pre>

<pre>    tcsh 另有一个结束设定档,称为 .logout ,是在每一个 login shell 结束,
    logout 所要执行的动作,其编辑的方法跟 .login , .tcshrc 完全一模一样。
    </pre>

<pre>    source 指令
    </pre>

<pre>    如果要重新执行 .tcshrc 的内容,可以利用 source 指令来达到,此时就相
    当於把该档案中的所有内容重新在命令列输入一遍。如下:
    </pre>

<pre>      % source .login

</pre>

<p><a href="../hkbx!.htm"><strong><big>返回“新客补习”</big></strong></a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -