输入输出

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<<

以上是关于输入输出的主要内容,如果未能解决你的问题,请参考以下文章

双重背包问题

c/c++里将以空格隔开的字符放进数组的函数

python 题目: 怎么把while循环输出的每一个整数放进列表里呀?

感知机与BP神经网络的简单应用

如何在MATLAB中把一个一个的数值放进数组中

AOJ 0033 BallDFS