重定向

重定向定义

将原本要输出到屏幕上的内容,重新输入到其他设备中

我们可以理解为改变标准输入、标准输出的方向的就是重定向

重定向的用法

# 1.输出的内容,比较重要的时候,我们想把它保存到文件中
# 2.在后台执行的程序,我不想让它输出的内容,干扰到屏幕
# 3.将定时任务的结果保存下来(备份,是否成功)
# 4.一些执行的命令,知道它有可能会有错误输出,但是不想看错误输出
# 5.执行一个命令,可能报错和正确的输出并存,类似错误日志与标准正确日志需要分别输出至不同的文件。

拓展内容 命令返回值

如何判断一个命令是否执行成功?????
$? 命令的返回值
返回值是0,则代表上一条命令执行成功
返回值非0,则代表上一条命令执行不成功
# 执行成功
[root@ yjc ~ ] # ll zls
-rwxr-xr-x 1 root root 355 Apr 11 18:21 zls
[root@ yjc ~ ] # $?
-bash: 0: command not found
# 执行不成功
[root@ yjc ~ ] # $?
-bash: 2: command not found

输入输出

文件描述符

名称

文件描述符

作用

stdin

0

标准输入

stdout

1

标准输出

stderr

2

错误输出

文件名

3+


# 举例 
我们使用cat可以查看文件的内容,cat会直接把这些内容传输到屏幕
*如果我们单使用cat不加参数,它就会从标准输入中读取数据并送到标准输出
[root@ yjc ~ ] # cat
a
a
123
123
^C
输入的内容都重新输出出来
[root@ yjc ~ ] # ps
PID TTY TIME CMD
1288 pts/0 00:00:00 bash
1337 pts/0 00:00:00 tail
1338 pts/0 00:00:00 ps
#查看1337进程中的文件描述符
[root@ yjc ~ ] # ls -l /proc/1337/fd
total 0
lrwx------ 1 root root 64 Apr 14 02:06 0 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 14 02:06 1 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 14 02:06 2 -> /dev/pts/0
lr-x------ 1 root root 64 Apr 14 02:06 3 -> /etc/passwd
lr-x------ 1 root root 64 Apr 14 02:06 4 -> anon_inode:inotify
# 查看标准输入输出设备
[root@ yjc ~ ] # ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Apr 14 01:25 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Apr 14 01:25 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Apr 14 01:25 /dev/stdout -> /proc/self/fd/1

输入输出符号

名称

符号

作用

标准输入重定向

<或者0< <<或者0<<

将符号右边的内容交给符号左边的命令

标准输出覆盖重定向

>或者1>

将原本要输出在屏幕上的正确内容,覆盖到重定向的文件中

标准输出追加重定向

>> 或者1>>

将原本要输出在屏幕上的正确内容,追加到重定向的文件中

错误输出覆盖重定向

2>

将原本要输出在屏幕上的错误内容,覆盖到重定向的文件中

错误输出追加重定向

2>>

将原本要输出在屏幕上的错误内容,追加到重定向的文件中

输出重定向举例

案例1:标准输出重定向(覆盖)

输入和输出_标准输入

标准输出重定向, 先清空,后写入, 如果文件不存在则创建

[root@ yjc ~ ] # test.txt > abc

案例2:标准输出重定向(追加)

输入和输出_标准输入_02

标准追加输出重定向, 向配置文件末尾追加内容
[root@ yjc ~ ] # echo "This is network conf" >> if

案例3:错误输出重定向

输入和输出_重定向_03

[root@ yjc ~ ] # useradd yjc
[root@ yjc ~ ] # su - yjc
//将标准输出和标准错误输出重定向到不同文件
[yjc@yjc ~]$ find /etc -name "*.conf" 1>a 2>b

案例4:正确和错误都输入到相同位置

输入和输出_标准输入_04

#将标准输出和标准错误输出重定向到同一个文件, 混合输出
[yjc@yjc ~]$ find / -type d -name '*zls*' &> /tmp/a.txt

[yjc@yjc ~]$ find / -type d -name '*zls*'> /tmp/a.txt 2>&1

#合并两个文件内容至一个文件
[yjc@yjc ~]$ cat a b > c

输入和输出_重定向_05

#重定向到相同的位置
[root@ yjc ~ ] # find / -type d -name “*zls” >abc 2>&1

案例5:重定向到空设备/dev/null

输入和输出_标准输入_06

dev/null空设备,把产生的输出丢掉

输入重定向

输入重定向:原本从键盘等设备上获得的输入信息,重定向由命令的输出作为输入。
dd if=/dev/zero of=/file1.txt bs=1M count=20
dd if=/dev/zero of=/opt/disk bs=1K count=1024
dd bs=1K count=1024 </dev/zero >/opt/disk
<adsadasd>