Shell输入与输出
点击打开本章《LInux与Unix Shell变成指南》pdf文档cat命令
作用:可以显示文件内容,创建文件和显示控制字符。
格式:
cat [ options ] filename1 filename2 ...
最常用的选项为:
-v 显示控制字符
例如:
如果显示名为myfile文件
cat myfile
可能会出现内容太多的问题,原因是cat命令不会在文件分页符处停下来,即它会显示完整个文件。
解决方法:可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令,如:
cat myfile | more 或
cat myfile | pg
如果显示myfile1、myfile2、myfile3的内容,为:
cat myfile1 myfile2 myfile3
如果希望创建一个新文件bigfile,里面包含myfile1、myfile2、myfile3文件的内容,则:
cat myfile1 myfile2 myfile3 > bigfile
如果希望创建一个新文件myfile,通过标准输入-键盘,输入完毕后按<CTRL -D>结束输入,相当于一个简单的
编辑器。如:
[root@localhost test]# cat > myfile
This is great.
[root@localhost test]# cat myfile
This is great.
[root@localhost test]#
t命令
作用:把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。
格式为:
tee -a files
-a表示追加到文件尾。
举例:
[root@localhost /]# who
root pts/0 2011-02-20 08:22 (:0.0)
把上面的内容存到who.out中:
[root@localhost /]# who | tee who.out
root pts/0 2011-02-20 08:22 (:0.0)
查看结果:
[root@localhost /]# cat who.out
root pts/0 2011-02-20 08:22 (:0.0)
追加举例:
[root@localhost /]# ls -l | tee -a who.out
总计 242
drwxr-xr-x 2 root root 4096 02-18 13:07 bin
drwxr-xr-x 4 root root 1024 02-14 19:24 boot
[root@localhost /]# cat who.out
root pts/0 2011-02-20 08:22 (:0.0)
总计 242
drwxr-xr-x 2 root root 4096 02-18 13:07 bin
drwxr-xr-x 4 root root 1024 02-14 19:24 boot
标准输入与输出
当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。
-------------------------------
文件 文件描述符
-------------------------------
输入文件--标准输入 0
输出文件--标准输出 1
错误输出文件--标准错误 2
-------------------------------
系统中实际上有12个文件描述符,0、1、2如上所示,可以任意使用文件描述符3到9。
下面是0、1、2的解释:
0(标准输入),指命令的输入,缺省是键盘,也可以是文件或其他命令输入。
1(标准输出),是命令的输出,缺省是屏幕,也可以是文件。
2(标准错误),是命令错误的输出,缺省是屏幕,也可以是文件。
文件重定向
通过文件重定向,可以指定命令的标准输入、输出和错误。在对标准错误进行重定向时,必须使用文加描述符,而在
标准输出和输入时,可以不使用文件描述符。
常用文件重定向命令
---------------------------------------
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中 ( 追加 )
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中 ( 追加 )
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中 (加 )
command < filename >filename2 command命令以filename文件作为标准输入,以filename2文
件作为标准输出
command < filename command 命令以 filename 文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到 delimiter 分界符
command <&m 把文件描述符 m 作为标准输入
command >&m 把标准输出重定向到文件描述符 m 中
command <&- 关闭标准输入
----------------------------------------
举例:
a、重定向标准输出:
可以不使用文件描述符。
如:
先查看当前目录下有什么文件:
[root@localhost test2]# ls
file1 file2
把上面的输出重定向到ls.out中,并输出查看:
[root@localhost test2]# ls > ls.out
[root@localhost test2]# cat ls.out
file1
file2
ls.out
上面的ls.out刚创建,所以在前面ls命令中没有这个文件。上面的事例可以等同于:
[root@localhost test2]# ls 1>ls.out
[root@localhost test2]# cat ls.out
下面是追加的命令:
[root@localhost test2]# ls 1>>ls.out
[root@localhost test2]# cat ls.out
file1
file2
ls.out
file1
file2
ls.out
b、重定向标准输入:
例如:
先查看file1内容:
[root@localhost test1]# cat > file1
you can do it!
然后把file1作为mail的标准输入:
[root@localhost test1]# mail root < file1
现在可以查看/var/spool/mail/root的内容看是否正确。
上面的命令等同于:
[root@localhost test1]# mail root 0<file1
command << delimiter
功能:shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符,
shell就知道输入结束了。比如用FINISH:
[root@localhost test1]# cat >> file1 <<FINISH
> The user name is $LOGNAME
> bye
> FINISH
[root@localhost test1]# cat file1
The user name is root
bye
c、重定向标准错误:
例如:
[root@localhost test1]# grep "ok" nofile
grep: nofile: 没有那个文件或目录
现在把上面的错误重定向到myfile文件中,而且在屏幕中不回显。
[root@localhost test1]# grep "ok" nofile 2>myfile
查看myfile内容
[root@localhost test1]# cat myfile
grep: nofile: 没有那个文件或目录
上面的例子一般情况下都使用">>"符号来作为追加内容,文件内之前的内容就不会被覆盖。
d、结合使用标准输出和标准错误:
指将输出重定向到一个文件中,然后把标准错误重定向到另一个文件中,如:
[root@localhost test1]# cat file1
just do it!
[root@localhost test1]# cat myfile
[root@localhost test1]# cat file1 nofile 1>myfile 2>myfile.err
[root@localhost test1]# cat myfile.err
cat: nofile: 没有那个文件或目录
[root@localhost test1]# cat myfile
just do it!
e、合并标准输出和标准错误:
指把输出的内容和错误的内容都重定向到同一个文件中,如:
[root@localhost test1]# cat file1 nofile > myfile 2>&1
[root@localhost test1]# cat myfile
just do it!
cat: nofile: 没有那个文件或目录