目录
前言
重定向是一个非常常用的技术,重定向与变量的搭配可以帮助我们在动态系统中去利用一些不断改变的参数来完成日常的监测或者是批量的复制,运算,或者是其他的有有序或无序的改动。
交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 | |
混合输出 | &> | 将标准输出、标准错误的内容保存到同一个文件中 |
[root@192 home]# ls /home/ghr xxx >1.txt #缺省值为1,即只把结果重定向到txt文件
ls: 无法访问xxx: 没有那个文件或目录
[root@192 home]# cat 1.txt
/home/ghr:
a
[root@192 home]# ls /home/ghr xxx 2>2.txt #设置为2>2.txt则是只把错误文件重定向到txt
/home/ghr:
a
[root@192 home]# cat 2.txt
ls: 无法访问xxx: 没有那个文件或目录
[root@192 home]# ls /home/ghr xxx &>3.txt #&>的意思是把结果和错误都重定向到txt
[root@192 home]# cat 3.txt
ls: 无法访问xxx: 没有那个文件或目录
/home/ghr:
a
[root@192 home]# ls /home/ghr xxx >4.txt 2>&1 #我在这里把错误重定向到了标准输出,这个时候标准输出同时也会输出标准错误输出
[root@192 home]# cat 4.txt
ls: 无法访问xxx: 没有那个文件或目录
/home/ghr:
a
[root@192 home]# ls /home/ghr xxx >5.txt 1>&2 #反过来把标准输出重定向到标准错误输出则不做输出,这是因为缺省值为1的情况下标准输出已经被重定向到标准错误输出了。就不会再输出到txt
ls: 无法访问xxx: 没有那个文件或目录
/home/ghr:
a
[root@192 home]# cat 5.txt
[root@192 home]# ls /home/ghr xxx 2>5.txt 1>&2 #我们更改了输出参数可以看到标准错误输出此时输出了两边的东西。
[root@192 home]# cat 5.txt
ls: 无法访问xxx: 没有那个文件或目录
/home/ghr:
a
[root@192 home]# echo 111111 >pass.txt #制作密码文件
[root@192 home]# useradd ghr5 #创建全新用户
[root@192 home]# passwd --stdin ghr5 < pass.txt #通过重定向输出文件内容为账号密码,免去了交互
更改用户 ghr5 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# cat 1.txt #以键盘为输入设备,这也是系统默认的1234
1234
[root@localhost ~]# cat <1.txt #跟cat 1.txt 结果是一样的,但是这是以1.txt文件作为输入设备了
1234
[root@localhost ~]# cat <<0 #以0作为分界符,只要不输入0就会一直输入数据从而显示到屏幕
>123
>456
>0
123
456
[rootllocalhost ~]# cat << 0 > a.txt #可以把输入重定向和输出重定向结合使用,把从屏幕输出的内容保存到文件
>123
>456
>0
[root@localhost ~]#cat a.txt
123
456
注:可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁
管道符号
- 管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号"I"左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
- 在Shell脚本应用中,管道操作通常用来过滤所需要的关键信息。
- $bash $表示系统提示符,$表示此用户为普通用户,超级用户的提示符是#
- bash是shell的一种,是linux下最常用的一种shell
- $bash的意思是执行一个子shell,此子shell为bash。
[root@192 home]# rpm -qa | grep dhcp #把所有已安