1:系统中的输入输出重定向:
要了解系统中的输入输出重定向,首先要了解的是“文件描述符”这一含义。
系统中,内核(kernel)是利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。而在Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2,文件描述符如:
文件 | 文件描述符 |
---|---|
输入文件—标准输入 | 0(缺省是键盘,为0时是文件或者其他命令的输出) |
输出文件—标准输出 | 1(缺省是屏幕,为1时是文件) |
错误输出文件—标准错误 | 2(缺省是屏幕,为2时是文件) |
而对于linux系统中的输入输出的管理,可以理解为对于文件的重定向,即就是改变系统中程序运行的输入和输出,也就是输入源和输出地点。可分为两部分学习:A:文件的重定向;B文件的追加重定向。在进行管理时,会使用不同的文件管理符号。
A:文件的重定向符号:
1> ###重定向正确输出
2> ###重定向错误输出
&> ###重定向所有输出
B:输出重定向:
命令 | 含义 |
---|---|
Command > filename | 把标准输出重定向到一个文件中 |
Command 2> filename | 把标准错误重定向到一个文件 |
Command > filename 2>&1 | 把标准输出和错误一起重定向到一个文件中 |
如:重定向正确输出到test文件:
使用student用户,查找/etc/目录下,文件/目录包含passwd的文件。由于权限不够,因此会报错无权限查看。而正确输出则被重定向到了test文件中。
重定向错误输出到test.err中:
重定向所有输出到test.all中
C:文件的追加重定向:
追加重定向和重定向大概类似,二者的区别是:输出重复重定向到某一文件时,该文件的内容会被覆盖;追加重定向则如其名,重复 重定向时,会在该文件的尾部追加输出,不会覆盖。
追加重定向的符号:
命令 | 含义 |
---|---|
Command >> filename | 把标准输出重定向到一个文件中(追加) |
Command 2 >> filename | 把标准输出重定向到一个文件中(追加) |
Command >> filename2>&1 | 把标准输出和错误一起重定向到一个文件(追加) |
如:
首先创建文件“wuxie”并编辑,查看“wuxie”中的内容:
其次,使用student用户,查找/etc/目录下,文件/目录包含passwd的文件。由于权限不够,因此会报错无权限查看。然后将正确输出追加重定向到文件“wuxie”中:
将错误输出追加重定向到文件“wuxie”中:
将所有输出追加重定向到文件“wuxie”中:
D:文件的输入重定向:
输入重定向:
命令 | 含义 |
---|---|
Command < filename > filename2 | Command命令以filename文件作为标准输入,以filename2文件作为标准输出 |
Command < filename | Command命令以filename文件作为标准输入 |
如:
单行输入重定向:
创建文件“west”并编辑其内容为:“westos”,然后使用输入重定向,将文件中的所有小写字母定向为大写字母:
多行输入重定向:利用多行输入重定向修改密码:
如:
创建文件“123”并编辑为:
passwd <<EOF
123
123
EOF
然后重命名为123.sh可执行文件(其实可以直接创建文件“123.sh”进行编辑),使用sh命令运行“123.sh”文件,会将第一个关键字“EOF”后的内容自动输入,知道遇到第二个关键字“EOF”则结束。
2:管道符“|”的使用:
管道的作用:将管道符左边的的输出 当做右边命令后面待处理的结果
注:图来自网络,侵删。
如:和上方重定向一样,查找/etc/目录下的文件,并统计正确输出的行数。
将查找的所有结果保存到文件“3”中,并统计一共有多少行。(理论上讲,管道符可以无限应用)