输入输出
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
#与上题讲解同理,只是数据单位及数量的变化
以上是关于输入输出的主要内容,如果未能解决你的问题,请参考以下文章
无论用户输入如何,我的基于用户输入和 if/else 语句的函数都会给出相同的输出[重复]