调用 history 命令的第二种方法用于修改命令历史列表文件的内容。命令的语法如下:
history [-r|w|a|n] [filename]
这种形式中,-r 选项告诉 history 命令读命令历史列表文件的内容并且把它们当作当前的命令历史列表。-w 选项将把当前的命令历史记录写入文件中并覆盖文件原来的内容。-a 选项把当前的命令历史记录追加到文件中。-n 选项将读取文件中的内容并加入到当前历史命令列表中。如果 filename 选项没有被指定,history 命令将用变量HISTFILE 的值来代替。
fc 命令能用两种方法来编辑历史命令。第一种使用下列语法:
fc [-e editor_name] [-n] [-l] [-r] [first] [last]
这里所有参数都是可选的。-e editor_name 选项用来指定用于编辑命令的文本编辑器。 first 和 last 选项用于选择列出历史命令的范围,既可以是数字也可以是字符串。-n 选项禁止列出命令的编号。-r 选项反向列出匹配的命令。-l 选项把匹配的命令行列在屏幕上(而不是在编辑器中)。如果-e editor_name参数没有被指定,则以变量FCEDIT的值来代替,如果该变量不存在的话,则用变量 EDITOR的值来代替,都不存在的话将使用vi编辑器。
别名
bash 的另一个使你的工作变得轻松的方法是命令别名。命令别名通常是其他命令的缩写,用来减少键盘输入。例如,你经常要键入如下的命令,你也许会倾向于为它建立一个别名来减少工作量:
cd /usr/X11/lib/X11/fvwm/sample-configs
假如为这个长命令建立一个名为goconfig的别名,在bash提示符下键入如下命令:
alias goconfig='cd /usr/X11/lib/X11/fvwm/sample-configs'
现在,除非你退出bash,键入goconfig将和原来的长命令有同样的作用。如果想取消别名,可以使用下面的命令:
unalias goconfig
这是一些很多用户认为有用的别名,你可以把它们写入你的.profile文件中提高工作效:
alias ll='ls -l'
alias log='logout'
alias ls='ls -F'
如果你是一名DOS用户并且习惯了DOS命令,你能下面的别名定义使你的 Linux 表现得象DOS 一样:
alias dir='ls'
alias copy='cp'
alias rename='mv'
alias md='mkdir'
alias rd='rmdir'
--------------------------------------------------------------------------------
注意: 在定义别名时,等号的两头不能有空格,否则 shell 不能决定你需要做 什么。仅在你的命令中包含有空格或特殊字符时才需要引号。
--------------------------------------------------------------------------------
如果你键入不带任何参数的alias命令,将显示所有已定义的别名,例如:
alias dir='ls'
alias ll='ls -l'
alias ls='ls -F'
alias md='mkdir'
alias net='term < /dev/modem > /dev/modem 2> /dev/null&'
alias rd='rmdir'
输入重定向
输入重定向用于改变一个命令的输入源。一些命令需要在命令行里输入足够的信息才能工作。比如 rm,你必须在命令行里告诉 rm 它你要删除的文件。另一些命令则需要更详细的输入,这些命令的输入可能是一个文件。比如命令 wc 统计输入给它的文件里的文件里的字符数,单词数和行数。如果你仅在命令行上键入 wc
wc test
11 2 1
另一种把test文件内容传给 wc 命令的方法是重定向 wc 的输入。< 符号在bash里用于把当前命令的输入重定向为指定的文件。所以可以用下面的命令来把 wc 命令的输入重定向为 test 文件:
wc < test
11 2 1
输入重定向并不经常使用因为大多数命令都以参数的形式在命令行上指定输入文件的文件名。尽管如此,当你使用一个不接受文件名为输入参数的命令,而需要的输入又是在一个已存在的文件里时,你就能用输入重定向解决问题。
输出重定向
输出重定向比输入重定向更常用。输出重定向使你能把一个命令的输出重定向到一个文件里,而不是显示在屏幕上。
很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,你能把它重定向到一个文件中,稍后再用文本编辑器来打开这个文件;当你想保存一个命令的输出时也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入时。(还有一种更简单的方法可以把一个命令的输出当作另一个命令的输入,就是使用管道,管道的使用将在本文的“管道”一节介绍)
输出重定向的使用与输入重定向很相似,但是输出重定向的符号是 > 。
--------------------------------------------------------------------------------
注意:记忆输入/输出重定向符号的最好方法是把<看作是一个漏斗,漏斗的小口 指向需要输入的命令(因为需要接受输入的命令会在 <的左手边),而把> 当作一个大口指向有输出的命令的漏斗。
--------------------------------------------------------------------------------
重定向举例,当你要把 ls 命令的输出保存为一个名为 directory.out 的文件时,你可以使用下面的命令:
ls > directory.out
管道
管道可以把一系列命令连接起来。这意味着第一个命令的输出会通过管道传给第二个命令而作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,以此类推。而管道行中最后一个命令的输出才会显示在屏幕上(如果命令行里使用了输出重定向的话,将会放进一个文件里)。
你能通过使用管道符 | 来建立一个管道行,下面的示例就是一个管道行:
cat sample.text | grep "High" | wc -l
这个管道将把 cat 命令(列出一个文件的内容)的输出送给grep命令。grep 命令在输入里查找单词 High,grep命令的输出则是所有包含单词 High的行,这个输出又被送给 wc命令。带 -l选项的 wc命令将统计输入里的行数。假设 sample.txt的内容如下:
