find
F i n d是一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。即使系统中含有网络文件系统( N F S ),f i n d命令在该文件系统中同样有效,只要你具有相应的权限。在运行一个非常消耗资源的f i n d命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指3 0 G字节以上的文件系统)。
F i n d命令的一般形式为:
find pathname -options [-print -exec -ok]
让我们来看看该命令的参数:
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
-exec find命令对匹配的文件执行该参数所给出的s h e l l命令。相应命令的形式为' c o m m -
and' {} \;,注意{ }和\;之间的空格。
-ok 和- e x e c的作用相同,只不过以一种更为安全的模式来执行该参数所给出的s h e l l命令,
在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
echo
使用e c h o命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
如果是LINUX系统,必须使用- n选项来禁止echo命令输出后换行
别忘了使用- e选项才能使转义符生效, 例如:
echo -e "this echo's 3 new lines \n\n\n"
cat
如果希望创建一个新文件,并向其中输入一些内容,只需使用c a t命令把标准输出重定向到该文件中,这时c a t命令的输入是标准输入—键盘,你输入一些文字,输入完毕后按< C T R L - D >结束输入。这真是一个非常简单的文字编辑器!
cat >myfile
cat -v filename 可以显示文本里的控制字符。
tee
t e e命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
例如: who | tee myfile
既将结果显示到终端上,又通过tee拷贝到 myfile (相当于 >)
tee -a file 是追加到文件尾。(相当于>>).
标准输入、输出和错误
当我们在s h e l l中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件系统中实际上有1 2个文件描述符, 0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。你可能会问为什么会有一个专门针对错误的特殊文件?这是由于很多人喜欢把错误单独保存到一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。
常用文件重定向命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把c o m m a n d命令以f i l e n a m e文件作为标准输入,以f i l e n a m e 2文件作为标准输出
command < filename 把c o m m a n d命令以f i l e n a m e文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 关闭标准输入
结合使用标准输出和标准错误
一个快速发现错误的方法就是,先将输出重定向到一个文件中,然后再把标准错误重定向到另外一个文件中。下面给出一个例子:我有两个审计文件,其中一个的确存在,而且包含一些信息,而另一个由于某种原因已
经不存在了(但我不知道)。我想把这两个文件合并到a c c o u n t s . o u t文件中。
$ cat account_qtr.doc account_end.doc 1>accounts.out 2>accounts.err
现在如果出现了错误,相应的错误将会保存在a c c o u n t s . e r r文件中。
合并标准输出和标准错误
在合并标准输出和标准错误的时候,切记s h e l l是从左至右分析相应的命令的。下面给出一个例子:
$ cleanup >cleanup.out 2>&1
在上面的例子中,我们将c l e a n u p脚本的输出重定向到c l e a n u p . o u t文件中,而且其错误也被重定向到相同的文件中。
$ grep "standard"* > grep.out 2>&1
exec
e x e c命令可以用来替代当前s h e l l;换句话说,并没有启动子s h e l l。使用这一命令时任何现有环境都将会被清除,并重新启动一个s h e l l。它的一般形式为:
exec command
其中的c o m m a n d通常是一个s h e l l脚本。
我所能够想像得出的描述e x e c命令最贴切的说法就是:它践踏了你当前的s h e l l。
当这个脚本结束时,相应的会话可能就结束了。e x e c命令的一个常见用法就是在用户的. p r o f i l e最后执行时,用它来执行一些用于增强安全性的脚本。如果用户的输入无效,该s h e l l将被关闭,然后重新回到登录提示符。e x e c还常常被用来通过文件描述符打开文件。
记住, e x e c在对文件描述符进行操作的时候(也只有在这时),它不会覆盖你当前的s h e l l。
/dev/null实际上就是系统的垃圾箱。
用户1053025 2006-10-20 09:53