例如,下面的命令将在您的 home 目录中查找所有包含单词 Monthly Report 的文本文件:
$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Monthly Report"
2.UNIX Shell 提供了各种有用的快捷方法,具体包括:
|
最后一个命令 !!
(两个感叹号),可能看起来有些奇怪,但它是一种命令历史符号,可以一字不差地重复前面的命令。(许多 Shell 还允许您使用向上箭头键或按 Control+P 来浏览以前的命令列表。)
其实,要察看历史命令上下箭头更好使吧,&_&,history 也可以
1)$ echo $SHELL
/bin/zsh
2)$ ls
architecture.txt Services.pdf
services.txt Schema.pdf
3)$ echo *.txt
architecture.txt services.txt
echo
命令将完整地表达您在命令行中输入的内容。然而,因为 Shell 会在调用任何程序之前,对(大多数)命令行参数进行扩展,所以该命令将打印出所有替换的结果。(Shell 环境变量 $SHELL
包含当前正在运行的 Shell 的名称。)
Z Shell 具有一些独特的和不可多得的通配符匹配操作符。下面是其中一些典型的操作符。
**/
通配符匹配操作符展开为所有的下级目录,包括当前工作目录。可以将 **/
看作内置的 find
命令。再次使用 wget
源代码,您可以使用下面的命令查找所有的 Makefile:
$ echo **/Makefile |
如果您不打算包含当前工作目录,那么只需输入 */**/
,如下面的示例所示:
$ echo */**/Makefile |
另一种有用的 Z Shell 通配符匹配操作符可以匹配文件类型。提供与前面相同的模式,但需要追加 (.)
、(/)
、(*)
或 (@)
,以便分别匹配常规文件、目录、可执行文件和符号链接:
$ ls -d -F *(/) |
Z Shell 还为 (/)
表达式提供了一种快捷方法。只需在模式的末尾添加一个正斜杠,就可以将输出结果限定为目录:
$ ls -d */
ChangeLog-branches/ doc/ po/ src/ util/ windows/
到 目前为止,您已经了解了如何指定路径和选择相应的文件。您可以在命令行中描述需要完成的任务。然而,即使所有的命令行都很短并且很简单,但您仍然有可能对 反反复复地输入这些相同的内容而感到厌烦。尤其是,您可能厌倦了输入冗长的、复杂的命令行,其中可能包含大量的选项、或者参数的顺序有严格的要求。幸运的 是,大多数 Shell 都维护了以前命令的历史。要再次运行一个命令,只需从这个历史列表中找到相应的条目,然后再次运行它。与 Shell 中其他的部分一样,通过快捷方法可以快速和轻松地进行引用。
要在 Z Shell 中启用命令历史,可以输入:
$ HISTSIZE=5007. 环境变量
$ SAVEHIST=500
在 UNIX 中,环境变量保存了 Shell 中的相关设置,并允许您将首选项传播到从命令行启动的所有实用工具中。
有些环境变量称为 Shell 变量,Shell 仅使用这些变量控制其自身的行为。例如,只有 Z Shell 使用 $HISTSIZE
和 $SAVEHIST
管理命令历史,如上所述。可以将 Shell 变量看作相应的设置。
需要对其他的环境变量进行导出、或使得它们全局可用,并将它们复制到从命令行中启动的每个命令的进程空间(即环境)。例如,$HOME
是一个特殊的环境变量,它保存了您的 home 目录的位置。UNIX 登录序列将设置 $HOME
(以及其他的环境变量),然后启动 Shell,而 Shell 反过来使用 $HOME
查找所有的 Shell 启动文件。您所启动的其他应用程序,如 SSH 和 FTP,引用 $HOME
查找 .netrc 文件(用于存储机密的、远程访问的密码)。有些环境变量,如 $HOME
、$PATH
和 $SHELL
,会被所有应用程序使用。其他的环境变量可能专门针对某个应用程序。
要查看当前所有的环境变量,可以输入 printenv
,如清单 6 所示。(根据系统管理员对系统所进行的配置,您系统中的环境变量可能会比本文中所介绍的更多或更少。)
|
$SHLVL
)显示您所处的 Shell 的深度。
1 表示登录 Shell,
2 表示您从登录 Shell 中启动了另一个 Shell,依此类推。您可以使用
$SHLVL
的值来更改后续 Shell(嵌套 Shell)的提示符。
$TERM
反映了您的终端(可能是终端模拟程序)设置,对于确保正确地呈现文本、颜色以及对按键进行正确的解释,这是非常重要的信息。
$PWD
是您的当前工作目录,而
$OLDPWD
是上一次的工作目录
设置环境变量与设置 Shell 变量的方法相同。然而,您必须导出该变量,以使得它全局可用:
$ MYVARIABLE=$HOME/projectX |
前一个命令设置了名为 $MYVARIABLE
的 Shell 变量。(开头的美元符号是 Shell 提示符。您在设置变量时,不用提供这个 $ 符号。然而,当您使用这个变量时,必须使用美元符号,比如 $MYVARIABLE
。)$MYVARIABLE
仅对 Shell 是可见的,因为没有将其导出。要查看所有 Shell 变量的列表,可以输入 set
。set
的输出包括环境变量,因为它们对 Shell 来说也是可用的。
在后面的一个命令中,设置并导出了 $TMPDIR
,因此它对于从 Shell 中启动的所有应用程序都是可用的。GNU Compiler Collection (GCC) 编译器是一个使用 $TMPDIR
的应用程序。$TMPDIR
中所存储的值表示 GCC 用来存放生成的临时文件的位置。
如果您要删除一个环境变量,只需输入 unset
加上变量名即可,如清单 8 所示。
8. 别名和启动文件
$ set
HOME=/Users/strike
MYVARIABLE=/Users/strike/projectX
TMPDIR=/tmp/projectX
...
$ unset MYVARIABLE TMPDIR
$ set
HOME=/Users/strike
....
为了保留以前输入的内容和保存以前的所有设置,UNIX Shell 分别提供了别名和启动文件。别名 是您所创建的快捷方法。每次 Shell 启动时都会读取启动文件,这是保存(和共享)所有 Shell 设置的理想的地方,如 Shell 变量(选项)、环境变量和别名。
别名是一个简短的序列,您可以使用它来代替一个较长的命令。您可以把别名看作是一个命令行的缩写。无需输入:
$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Monthly Report" |
在命令提示符处,您可以输入已经创建的别名:
$ findreports |
Shell 减少了工作的复杂程度,它会将 findreports
替换成其扩展形式。要创建 findreports
别名,可以输入:
alias findreports='find $HOME -type f -name "*.txt" -print | |
必须使用单引号确定每个别名的界限。如果您需要在别名中使用引号,那么可以使用双引号。Z Shell 别名可以包含许多 Shell 基本单位,包括变量、管道、重定向、其他别名和其他 Shell 操作数,如清单 9 所示。
$ alias ll='/bin/ls -l'
$ ll -d 2002*
drwxrwxr-x 2 www-data www-data 4096 Jan 16 2002 2002-02
drwxrwxr-x 2 www-data www-data 4096 Jan 22 2002 2002-03
drwxrwxr-x 2 www-data www-data 4096 Apr 15 2002 2002-04
drwxrwxr-x 2 www-data www-data 4096 Apr 19 2002 2002-05
...
要查看 Shell 中设置的所有别名,只需输入 alias
(不带参数)即可,如清单 10 所示。
|
如果您要删除别名,只需输入 unalias
加上别名的名称即可。
$ unalias m snap ---删除别名
Z Shell 使用启动文件 .zshrc 和 .zprofile,这两个文件都位于您的 home 目录中。(其他的 Shell 也具有类似名称的类似文件,您可以阅读 Shell 文档以了解这些细节。有些 Shell 还提供了关闭 文件、或当 Shell 退出时运行的文件。)当启动新的 Shell 时,会将 .zshrc 文件作为信息来源,或对其进行读取和处理;而只有在启动登录 Shell 时才会将 .zprofile 文件作为信息来源。
在您完成对 Shell 的配置之后,请捕获这些设置的快照并将其保存到一个 Shell 启动文件中:
$ set >> $HOME/.zshrc |
注意:您可能需要编辑所得到的 .zshrc 文件,并删除那些会话特定的变量。