输入输出
Posted 师莹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入输出相关的知识,希望对你有一定的参考价值。
重定向
什么是重定向?
将原本要输出到屏幕上的内容,重新输入到其他设备中
为什么要学重定向?
# 1.输出的内容,比较重要的时候,我们想把它保存到文件中
# 2.在后台执行的程序,我不想让它输出的内容,干扰到屏幕
# 3.将定时任务的结果保存下来(备份,是否成功)
# 4.一些执行的命令,知道它有可能会有错误输出,但是不想看错误输出
# 5.执行一个命令,可能报错和正确的输出并存,类似错误日志与标准正确日志需要分别输出至不同的文件。
命令返回值
如何判断一个命令是否执行成功?????
echo $?命令的返回值
返回值是0,则代表上一条命令执行成功
返回值非0,则代表上一条命令执行不成功
输入输出文件描述符
名称 | 文件描述符 | 作用 |
stdin | 0 | 标准输入 |
stdout | 1 | 标准输出 |
stderr | 2 | 错误输出 |
文件名 | 3+ |
[root@shiying <sub>]# ll /proc
total 0
dr-xr-xr-x. 9 root root 0 Apr 13 18:01 1174
[root@shiying </sub>]# ll /proc/1174/fd
total 0
lrwx------. 1 root root 64 Apr 13 18:01 0 -> /dev/pts/0
lrwx------. 1 root root 64 Apr 13 18:01 1 -> /dev/pts/0
lrwx------. 1 root root 64 Apr 13 18:01 2 -> /dev/pts/0
lrwx------. 1 root root 64 Apr 13 18:45 255 -> /dev/pts/0
[root@shiying <sub>]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Apr 13 18:01 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Apr 13 18:01 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Apr 13 18:01 /dev/stdout -> /proc/self/fd/1
[root@shiying </sub>]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Apr 13 18:01 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Apr 13 18:01 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Apr 13 18:01 /dev/stdout -> /proc/self/fd/1
含有zls文件名的内容标准输出到/tmp/b.log,错误内容输出到/tmp/a.log
[root@shiying <sub>]# find / -type d -name *zls* 2>/tmp/a.log 1>/tmp/b.log
[root@shiying </sub>]# cat /tmp/a.log
输入输出符号
名称 | 符号 | 作用 |
标准输入重定向 | < 或者 0< | 将符号右边的内容交给符号左边的命令 |
<< 或者 0<< | ||
标准输出覆盖重定向 | > 或者 1> | 将原本要输出在屏幕上的正确内容,覆盖到重定向的文件中 |
标准输出追加重定向 | >> 或者1>> | 将原本要输出在屏幕上的正确内容,追加到重定向的文件中 |
错误输出覆盖重定向 | 2> | 将原本要输出在屏幕上的错误内容,覆盖到重定向的文件中 |
错误输出追加重定向 | 2>> | 将原本要输出在屏幕上的错误内容,追加到重定向的文件中 |
输出重定向举例
## 错误输出和正确输出,同时写入同一个文件
[root@shiying <sub>]# find /type d -name *111* &>/tmp/a.txt
[root@shiying </sub>]# find /type d -name *111* >/tmp/a.txt 2>&1
# 正确输出 错误输出放进正确输出里,然后全部重定向到/tmp/c.txt
[yyy@shiying <sub>]$ find / -type d -name *111* > /tmp/c.txt 2>&1
#正确输出 错误输出和别的所有输出同时放进c.txt文件里
[yyy@shiying </sub>]$ find / -type d -name *111* &> /tmp/c.txt
# >>
[root@shiying <sub>]# cat >> 111.txt <<EOF
> 456
> 789
> qwe
> EOF
[root@shiying </sub>]# cat 111.txt
1 a !
2 b @
3 c #
4 d $
5 e %
456
789
qwe
[root@shiying <sub>]# echo qqq >> 222.txt
[root@shiying </sub>]# cat 222.txt
456
qqq
# >
[root@shiying <sub>]# ls /oiuui >222.txt
ls: cannot access /oiuui: No such file or directory
[root@shiying </sub>]# cat 222.tx
cat: 222.tx: No such file or directory
[root@shiying <sub>]# cat 222.txt
# 正确内容覆盖到重定向的文件中,错误输出到屏幕上,222.txt文件中内容为空
[root@shiying </sub>]# ls /oiuui > 222.txt
ls: cannot access /oiuui: No such file or directory
[root@shiying <sub>]# cat 222.txt
[root@shiying </sub>]# > 222.txt
[root@shiying <sub>]# cat 222.txt
# 错误输出 报错内容会写进文件里
[root@shiying </sub>]# ls /oiuui 2> 222.txt
[root@shiying ~]# cat 222.txt
ls: cannot access /oiuui: No such file or directory
输入重定向
[root@shiying ~]# cat < /etc/passwd
< 可省略
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
dd </dev/zero >/opt/disk bs=1K count=1024
知识点
#1.文件描述符 0 1 2 3+
#2.标准输入 0< < 0<< <<
#3.标准输出 > >>1
#4.重定向 输出:1> >> 2> >> &> >>
输入:< 0< << 0<<
以上是关于输入输出的主要内容,如果未能解决你的问题,请参考以下文章