输入输出

Posted 酱油拌饭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入输出相关的知识,希望对你有一定的参考价值。

输入输出

重定向

什么是重定向?

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

为什么要学重定向

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

命令返回值(扩展)

如何判断一个命令是否执行成功????? 
echo $?   命令的返回值 返回值是0,则代表上一条命令执行成功 
返回值非0,则代表上一条命令执行不成功

输入与输出

文件描述符

名称 文件描述符 作用
stdin 0 标准输入
stdout 1 标准输出
stderr 2 错误输出
文件名 3+
1.stdin标准输入:我们使用键盘在终端或文件种输入内容时就是一种标准输入
2.stdout标准输出:最直观的例子,我们的电脑屏幕反馈给我们的结果,以及我们执行命令时系统在屏幕中反馈的结果也是标准输出
3.stderr错误输出:我们执行命令后的报错,比如我们使用命令时报错Permission denied(权限被拒绝),属于错误输出

#文件描述符
文件描述符,我们在运行程序或命令时,都会产生与之对应的文件描述符,产生的文件描述符也属于数据,会占据我们的内存,每一个程序至少有四个文件描述符,不论程序还是命令。
新装系统中大部分都是1024的文件描述符容量
#查看文件描述符容量命令
[xwq@ltl ~]$ ulimit -n
1024

#查看程序或命令的描述符
ll /proc/后台(pid)/fd
[xwq@ltl ~]$ ps -ef |tail -3
root        520      1  0 18:27 ?        00:00:02 /usr/bin/vmtoolsd
dbus        523      1  0 18:27 ?        00:00:00 /usr/bin/dbus-daemon --syst
root        534      1  0 18:27 ?        00:00:00 /usr/sbin/crond -n

[root@ltl ~]# ll /proc/520/fd
total 0
lr-x------ 1 root root 64 Apr 13 18:27 0 -> /dev/null
lrwx------ 1 root root 64 Apr 13 18:27 1 -> socket:[16504]
lrwx------ 1 root root 64 Apr 13 18:27 2 -> socket:[16504]
l-wx------ 1 root root 64 Apr 13 18:27 3 -> /var/log/vmware-vmsvc-root.log
lrwx------ 1 root root 64 Apr 13 18:27 4 -> anon_inode:[eventfd]
lr-x------ 1 root root 64 Apr 13 18:27 5 -> pipe:[16668]
l-wx------ 1 root root 64 Apr 13 18:27 6 -> pipe:[16668]
lrwx------ 1 root root 64 Apr 13 18:27 7 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 Apr 13 18:27 8 -> socket:[17186]

#root        520      1  0 18:27 ?        00:00:02 /usr/bin/vmtoolsd   可以看到该文件的文件描述符有9个

输入输出符号

名称 符号 作用
标准输入重定向 <或者0< 将符号右边的内容交给符号左边的命令
<<或者0<<
标准输出覆盖重定向 \\> 或者 1> 将原本要输出在屏幕上的正确内容,覆盖到重定向的文件中
标准输出追加重定向 \\>> 或者1>> 将原本要输出在屏幕上的正确内容,追加到重定向的文件中
错误输出覆盖重定向 2> 将原本要输出在屏幕上的错误内容,覆盖到重定向的文件中
错误输出追加重定向 2>> 将原本要输出在屏幕上的错误内容,追加到重定向的文件中

输出重定向举例

## 错误输出和正确输出,同时写入同一个文件 
[zls@localhost ~]$ find / -type d -name *zls* &> /tmp/a.txt 
#第一种,直接将错误输出和正确输出一次性全部定向到/tmp/a.txt文件里

[zls@localhost ~]$ find / -type d -name *zls* > /tmp/a.txt 2>&1
#第二种,将错误输出与正确输出合并之后再塞进/tmp/a.txt

输入重定向

#示例相关的命令,设备
命令:dd  命令用于读取、转换并输出数据。
dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

/dev/zero 文件,可以无限取出数据

#曾导示例
dd if=/dev/zero of=/file1.txt bs=1M count=20 
#第二种命令解释
dd < /dev/zero > /filet.txt bs=1M count=20

bs:取出的数据单位
count:取出的数量
#将取出的数据给到dd命令,再由dd交给filet.txt文件

dd if=/dev/zero of=/opt/disk bs=1K count=1024
dd < /dev/zero > /filet.txt bs=1k count=1024
#与上题讲解同理,只是数据单位及数量的变化

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

新装Windows Server 2008 R2的设置

新装系统或者安装显卡出现的卡住,循环登录等问题

无论用户输入如何,我的基于用户输入和 if/else 语句的函数都会给出相同的输出[重复]

我新装的2003服务器系统,在浏览网页时都有安全提示,该怎么去掉?

新装系统如何配置IP使其上网

新装Ubuntu20.04和win10双系统,有线网络DHCP方式,win10下可以连网。ubuntu下无法连网?