bash.html

来自「学习linux的工具书」· HTML 代码 · 共 491 行 · 第 1/3 页

HTML
491
字号
<p><font color="#3366FF">cd t&lt;tab></font>
<p>&nbsp;&nbsp;&nbsp; 现在有第三种方法来做同样的事。因为仅有一个文件以字母
t 开头,你也能用 * 通配符来进入该目录。键入下列命令:
<p><font color="#3366FF">cd t*</font>
<p>&nbsp;&nbsp;&nbsp; * 匹配任何字符和任何数目的字符,所以 shell 将把 t*
替换为 test(当前目录里唯一和通配方案匹配的文件)。当前目录里只有一个文件以字母
t 开头的话这将是可靠的。但是如果当前目录里有不止一个文件以字母 t 开头,shell
将试着进入第一个符合匹配方案的目录,这个目录是以字母表排序的第一个目录,这个目录也许是也许不是你所期望的。
<p>&nbsp;&nbsp;&nbsp; 通配符 * 的一个更实际的用途是通配你要执行的命令中的多个名字相似的文件。例如,假设当前目录里包含以下文件:
<p><font color="#3366FF">ch1.doc&nbsp;&nbsp; ch2.doc&nbsp;&nbsp; ch3.doc&nbsp;
chimp&nbsp; config&nbsp;&nbsp;&nbsp; mail/&nbsp; test/&nbsp; tools/</font>
<p>&nbsp;&nbsp;&nbsp; 如果你需要打印所有扩展名是 .doc 的文件,你能使用象这样简化的命令:
<p><font color="#3366FF">lpr *.doc</font>
<p>&nbsp;&nbsp;&nbsp; 在这个例子中,bash 将把 *.doc 替换为当前目录下所有文件名符合通配方案的文件。在
bash 进行了替换后,该命令将被处理为:
<p><font color="#3366FF">lpr ch1.doc ch2.doc ch3.doc</font>
<p>&nbsp;&nbsp;&nbsp; lpr 命令将以ch1.doc, ch2.doc, 和 ch3.doc为参数被调用。
<p>
<hr WIDTH="100%">
<br>&nbsp;&nbsp;&nbsp; <b>注意:</b> 除了以上给出的例子外,还有几种方法:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpr *doc
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpr *oc
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpr *c
<br>
<hr WIDTH="100%">
<p>&nbsp;&nbsp;&nbsp; 通配符 ? 除了只能匹配单个字符外,其他功能都与通配符
*&nbsp; 相同,如果用通配符 ? 来打印前面提到的那个目录里所有扩展名是 .doc
的文件的话,键入下面的命令:
<p><font color="#3366FF">lpr ch?.doc</font>
<p>&nbsp;&nbsp;&nbsp; 通配符[...]能匹配括号中给出的字符或字符范围。同样以前面的目录为例,打印那个目录里所有扩展名是
.doc 的文件,你可以键入下列命令之一:
<p><font color="#3366FF">lpr ch[123].doc</font>
<p>或者:
<p><font color="#3366FF">lpr ch[1-3].doc</font>
<center><b><font size=+1>命令历史记录</font></b></center>

<br>&nbsp;
<p><br>
<p>&nbsp;&nbsp;&nbsp; bash 也支持命令历史记录。这意味着 bash 保留了一定数目的你先前已经在shell
里输入过的命令。这个数目取决于一个叫做HISTSIZE的变量。有关 HISTSIZE 的更多信息,请看本文后面的“bash
变量”一节。
<p>&nbsp;&nbsp;&nbsp; bash 把你先前输入的命令文本保存在一个历史列表中。当你用你的帐号登录后历史列表将根据一个历史文件被初始化。历史文件的文件名被一个叫
HISTFILE 的 bash变量指定。历史文件的缺省名字是 .bash_history。这个文件通常在你的用户目录中。(注意该文件的文件名以一个句号开头,这意味着它是隐含的,仅当你带
-a 或 -A参数的 ls 命令列目录时才可见)
<p>&nbsp;&nbsp;&nbsp; 仅将先前的命令存在历史文件里是没有用的,所以 bash
提供了几种方法来调用它们。使用历史记录列表最简单的方法是用上方向键。按下上方向键后最后键入的命令将出现在命令行上。再按一下则倒数第二条命令会出现,以此类推。如果上翻多了的话也可以用向下的方向键来下翻。(和
DOS 实用程序doskey一样)如果需要的话,显示在命令行上的历史命令可以被编辑。
<p>&nbsp;&nbsp;&nbsp; 另一个使用命令历史文件的方法是用 bash 的内部命令
history 和 fc(fix 命令)命令来显示和编辑历史命令。history 命令能以两种不同的方法来调用。第一种是:
<p><font color="#3366FF">history [n]</font>
<p>&nbsp;&nbsp;&nbsp; 当 history 命令没有参数时,整个历史命令列表的内容将被显示出来。下面是一个命令历史列表的例子:
<p><font color="#3366FF">1&nbsp; mkdir /usr/games/pool</font>
<p><font color="#3366FF">2&nbsp; cp XpoolTable-1.2.linux.tar.z /usr/games/pool</font>
<p><font color="#3366FF">3&nbsp; cd /usr/games/pool/</font>
<p><font color="#3366FF">4&nbsp; ls</font>
<p><font color="#3366FF">5&nbsp; gunzip XpoolTable-1.2.linux.tar.z</font>
<p><font color="#3366FF">6&nbsp; tar -xf XpoolTable-1.2.linux.tar</font>
<p><font color="#3366FF">7&nbsp; ls</font>
<p><font color="#3366FF">8&nbsp; cd Xpool</font>
<p><font color="#3366FF">9&nbsp; ls</font>
<p><font color="#3366FF">10&nbsp; xinit</font>
<p><font color="#3366FF">11&nbsp; exit</font>
<p><font color="#3366FF">12&nbsp; which zip</font>
<p><font color="#3366FF">13&nbsp; zip</font>
<p><font color="#3366FF">14&nbsp; more readme</font>
<p><font color="#3366FF">15&nbsp; vi readme</font>
<p><font color="#3366FF">16&nbsp; exit</font>
<p>&nbsp;&nbsp;&nbsp; 使用 n 参数的作用是仅有最后 n 个历史命令会被列出。例如,history
5 显示最后 5 个命令。
<br>&nbsp;&nbsp;&nbsp; 调用 history 命令的第二种方法用于修改命令历史列表文件的内容。命令的语法如下:
<p><font color="#3366FF">history [-r|w|a|n] [filename]</font>
<p>&nbsp;&nbsp;&nbsp; 这种形式中,-r 选项告诉 history 命令读命令历史列表文件的内容并且把它们当作当前的命令历史列表。-w
选项将把当前的命令历史记录写入文件中并覆盖文件原来的内容。-a 选项把当前的命令历史记录追加到文件中。-n
选项将读取文件中的内容并加入到当前历史命令列表中。如果 filename 选项没有被指定,history
命令将用变量HISTFILE 的值来代替。
<p>&nbsp;&nbsp;&nbsp; fc 命令能用两种方法来编辑历史命令。第一种使用下列语法:
<p><font color="#3366FF">fc [-e editor_name] [-n] [-l] [-r] [first] [last]</font>
<p>&nbsp;&nbsp;&nbsp; 这里所有参数都是可选的。-e editor_name 选项用来指定用于编辑命令的文本编辑器。
first 和 last 选项用于选择列出历史命令的范围,既可以是数字也可以是字符串。-n
选项禁止列出命令的编号。-r 选项反向列出匹配的命令。-l 选项把匹配的命令行列在屏幕上(而不是在编辑器中)。如果-e
editor_name参数没有被指定,则以变量FCEDIT的值来代替,如果该变量不存在的话,则用变量EDITOR的值来代替,都不存在的话将使用vi编辑器。
<center>
<p><b><font color="#000000"><font size=+1>别名</font></font></b></center>

<p>&nbsp;&nbsp;&nbsp; bash 的另一个使你的工作变得轻松的方法是命令别名。命令别名通常是其他命令的缩写,用来减少键盘输入。例如,你经常要键入如下的命令,你也许会倾向于为它建立一个别名来减少工作量:
<p><font color="#3366FF">cd /usr/X11/lib/X11/fvwm/sample-configs</font>
<p>&nbsp;&nbsp;&nbsp; 假如为这个长命令建立一个名为goconfig的别名,在bash提示符下键入如下命令:
<p><font color="#3366FF">alias goconfig='cd /usr/X11/lib/X11/fvwm/sample-configs'</font>
<p>&nbsp;&nbsp;&nbsp; 现在,除非你退出bash,键入goconfig将和原来的长命令有同样的作用。如果想取消别名,可以使用下面的命令:
<p><font color="#3366FF">unalias goconfig</font>
<p>&nbsp;&nbsp;&nbsp; 这是一些很多用户认为有用的别名,你可以把它们写入你的.profile文件中提高工作效
<p>&nbsp;<font color="#3366FF">&nbsp;&nbsp; alias ll='ls -l'</font>
<p><font color="#3366FF">&nbsp;&nbsp;&nbsp; alias log='logout'</font>
<p><font color="#3366FF">&nbsp;&nbsp;&nbsp; alias ls='ls -F'</font>
<p>&nbsp;&nbsp;&nbsp; 如果你是一名DOS用户并且习惯了DOS命令,你能下面的别名定义使你的
Linux 表现得象DOS 一样:
<p>&nbsp;<font color="#3366FF">&nbsp;&nbsp; alias dir='ls'</font>
<p><font color="#3366FF">&nbsp;&nbsp;&nbsp; alias copy='cp'</font>
<p><font color="#3366FF">&nbsp;&nbsp;&nbsp; alias rename='mv'</font>
<p><font color="#3366FF">&nbsp;&nbsp;&nbsp; alias md='mkdir'</font>
<p><font color="#3366FF">&nbsp;&nbsp;&nbsp; alias rd='rmdir'</font>
<p>
<hr WIDTH="100%">
<br>&nbsp;&nbsp;&nbsp; <b>注意:</b> 在定义别名时,等号的两头不能有空格,否则
shell 不能决定你需要做&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
什么。仅在你的命令中包含有空格或特殊字符时才需要引号。
<br>
<hr WIDTH="100%">
<p>&nbsp;&nbsp;&nbsp; 如果你键入不带任何参数的alias命令,将显示所有已定义的别名,例如:
<p><font color="#3366FF">alias dir='ls'</font>
<p><font color="#3366FF">alias ll='ls -l'</font>
<p><font color="#3366FF">alias ls='ls -F'</font>
<p><font color="#3366FF">alias md='mkdir'</font>
<p><font color="#3366FF">alias net='term &lt; /dev/modem > /dev/modem 2>
/dev/null&amp;'</font>
<p><font color="#3366FF">alias rd='rmdir'</font>
<center><b><font size=+1>输入重定向</font></b></center>

<p>&nbsp;&nbsp;&nbsp;&nbsp; 输入重定向用于改变一个命令的输入源。一些命令需要在命令行里输入足够的信息才能工作。比如
rm,你必须在命令行里告诉 rm 它你要删除的文件。另一些命令则需要更详细的输入,这些命令的输入可能是一个文件。比如命令
wc 统计输入给它的文件里的文件里的字符数,单词数和行数。如果你仅在命令行上键入
wc &lt;enter> ,wc 将等待你告诉它要统计什么,这时 bash 就好象死了一样,你键入的每样东西都出现在屏幕上,但什么事也不会发生。这是因为
wc 命令正在为自己收集输入。如果你按下Ctrl-D,wc 命令的结果将被写在屏幕上。如果你输入一个文件名做参数,象下面的例子一样,wc
将返回文件所包含的字符数,单词数,和行数:
<p><font color="#3366FF">wc test</font>
<p><font color="#3366FF">11 2 1</font>
<p>&nbsp;&nbsp;&nbsp; 另一种把test文件内容传给 wc 命令的方法是重定向 wc
的输入。&lt; 符号在bash里用于把当前命令的输入重定向为指定的文件。所以可以用下面的命令来把
wc 命令的输入重定向为 test 文件:
<p><font color="#3366FF">wc &lt; test</font>
<p><font color="#3366FF">11 2 1</font>
<p>&nbsp;&nbsp;&nbsp; 输入重定向并不经常使用因为大多数命令都以参数的形式在命令行上指定输入文件的文件名。尽管如此,当你使用一个不接受文件名为输入参数的命令,而需要的输入又是在一个已存在的文件里时,你就能用输入重定向解决问题。
<center>
<p>&nbsp;<b><font size=+1>输出重定向</font></b></center>

<br>&nbsp;
<p><br>
<p>&nbsp;&nbsp;&nbsp; 输出重定向比输入重定向更常用。输出重定向使你能把一个命令的输出重定向到一个文件里,而不是显示在屏幕上。
<p>&nbsp;&nbsp;&nbsp; 很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,你能把它重定向到一个文件中,稍后再用文本编辑器来打开这个文件;当你想保存一个命令的输出时也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入时。(还有一种更简单的方法可以把一个命令的输出当作另一个命令的输入,就是使用管道,管道的使用将在本文的“管道”一节介绍)
<br>&nbsp;&nbsp;&nbsp; 输出重定向的使用与输入重定向很相似,但是输出重定向的符号是
> 。
<p>
<hr WIDTH="100%">
<br>&nbsp;&nbsp;&nbsp; <b>注意:</b>记忆输入/输出重定向符号的最好方法是把&lt;看作是一个漏斗,漏斗的小口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
指向需要输入的命令(因为需要接受输入的命令会在 &lt;的左手边),而把>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
当作一个大口指向有输出的命令的漏斗。
<br>
<hr WIDTH="100%">
<p>&nbsp;&nbsp;&nbsp; 重定向举例,当你要把 ls 命令的输出保存为一个名为
directory.out 的文件时,你可以使用下面的命令:
<p><font color="#3366FF">ls > directory.out</font>
<center>
<p><b><font size=+1>管道</font></b></center>

<br>&nbsp;
<p><br>
<p>&nbsp;&nbsp;&nbsp; 管道可以把一系列命令连接起来。这意味着第一个命令的输出会通过管道传给第二个命令而作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入
,以此类推。而管道行中最后一个命令的输出才会显示在屏幕上(如果命令行里使用了输出重定向的话,将会放进一个文件里)。
<br>&nbsp;&nbsp;&nbsp; 你能通过使用管道符 | 来建立一个管道行,下面的示例就是一个管道行:
<p><font color="#3366FF">cat sample.text | grep "High" | wc -l</font>
<p>&nbsp;&nbsp;&nbsp; 这个管道将把 cat 命令(列出一个文件的内容)的输出送给grep命令。grep
命令在输入里查找单词 High,grep命令的输出则是所有包含单词 High的行,这个输出又被送给
wc命令。带 -l选项的 wc命令将统计输入里的行数。假设 sample.txt的内容如下:

⌨️ 快捷键说明

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