Linux-输出/输入重定向
重定向的分类
| 名称 | 文件描述符 | 作用 |
|---|---|---|
| 标准输入(stdin) | 0 | 默认由键盘输入(其他输入命令的终端设备或某个文件也可输入) |
| 标准输出(stdout) | 1 | 默认输出到屏幕 |
| 错误输出(stderr) | 2 | 默认输出到屏幕 |
| 文件名(filename) | 3+ |
进程描述符:一个进程或者终端在启动时,都会开启文件描述符。



# 关于标准输出重定向,标准输入重定向,错误输出重定向设备文件位置(软链接文件)
[root@wqh06 ~]# ll /dev/st*
lrwxrwxrwx. 1 root root 15 Nov 28 18:49 /dev/stderr -> /proc/self/fd/2 #错误输出 2> 2>> 不能省略
lrwxrwxrwx. 1 root root 15 Nov 28 18:49 /dev/stdin -> /proc/self/fd/0 #标准输入 < << 0 可以省略
lrwxrwxrwx. 1 root root 15 Nov 28 18:49 /dev/stdout -> /proc/self/fd/1 #标准输出 > >> 1 可以省略
各类重定向文件描述符的用法:
| 类型 | 符号 | 用途 | 备注 |
|---|---|---|---|
| 标准覆盖输出重定向 | 1> | 将命令执行的正确结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) | 通常'>'即可,1可以不写,默认就是1 |
| 标准追加输出重定向 | >> | 将命令执行的正确结果,输出到指定文件的末尾(不覆盖原有内容) | |
| 错误覆盖输出重定向 | 2> | 将命令执行的错误结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) | |
| 错误追加输出重定向 | 2>> | 将命令执行的错误结果,输出到指定文件的末尾(不覆盖原有内容) | |
| 标准输入重定向 | 0< | 将命令中接收输入内容由默认的键盘,改为命令或者文件 | 通常'<'即可0可以写也可以不写,默认0 |
| 标准输入追加重定向 | 0<< | 将命令中接收输入内容由默认的键盘,改为命令或者文件 |
输出重定向
将标准输出重定向到文件

# 将标准输出重定向到终端
[root@wqh06 pts]# echo "w shi da shui bi" > /dev/pts/1
# 标准覆盖输出重定向到文件
[root@wqh06 ~]# echo wqh>/tmp/1.txt # 字符串输出到文件中
[root@wqh06 ~]# cat /tmp/1.txt
wqh
[root@wqh06 ~]# echo 321>/tmp/2.txt # 会将`321`视作文件描述符,所以文件中不会有任何内容
[root@wqh06 ~]# cat /tmp/2.txt
[root@wqh06 ~]# echo wqh1>/tmp/3.txt # 因为`1`前面有`wqh`字符串作为连接,所以不会将`1`视作文件描述符
[root@wqh06 ~]# cat /tmp/3.txt
wqh1
将标准输出追加重定向到文件

# 标准追加输出重定向
[root@wqh06 ~]# echo 456 >> /var/log/messages
[root@wqh06 ~]# echo 123 >> /var/log/messages
将错误输出重定向到文件

# 错误输出重定向,使用普通用户cdx登录,查询/etc/下所有目录,有些文件会报错权限不足
[cdx@wqh06 ~]$ find /etc/ -type d 2> finderror.txt # 普通用户权限有时受限
[cdx@wqh06 ~]$ find /etc/ -type d > findright.txt 2> finderror.txt # 正确结果和错误结果分开保存
将标准输出和错误输出都重定向到文件

# 将标准输出和错误输出都输出到相同的文件中
[cdx@wqh06 ~]$ find /etc/ -type d > /tmp/100.txt 2>&1 # 错误输出需要由 1 输出到文件中
[cdx@wqh06 ~]$ find /etc/ -type d &> /tmp/101.txt # 错误输出和标准输出,同时输出到文件中,包括其他3,4,5,6...文件描述符的输出
# 上面两种方法方式不同,效率不同,且第二种方法 `&>` 包含的文件描述符范围更广泛
将错误输出重定向到黑洞文件

# 将错误输出,重定向到黑洞,这是我们常卸载Shell脚本中的语句,明知会有错,但不想看到错误提示
[root@wqh06 ~]# ls / /ooo 2> /dev/null
# 脚本中使用重定向
[root@wqh06 ~]# cat test.sh
#!/bin/bash
ping -c1 www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
echo "网络是通畅的....."
else
echo "网络是不通的....."
fi
[root@wqh06 ~]# ./test.sh
网络是通畅的.....
输入重定向
将默认从键盘上面输入的内容改为从命令中或者文件读取内容
< # 标准输入重定向, 作用:将默认从键盘上面读取内容改为从命令或者文件读取内容
<< # 标准输入限定标识符重定向,作用:标准输入内容,直到遇到标识符的分解符结束
案例1:标准输入重定向
[root@wqh06 ~]# cat < file1.txt # 将file1.txt的内容输入给cat,由cat输出到终端,我们通常省略了 `<`
hello
test
file1.txt
file2.txt
file3.txt
file4.txt
[root@wqh06 ~]# cat # 只写cat需要在终端输入内容,然后cat将输入的内容输出到终端
root
root
^C
[root@wqh06 ~]# tr 'f' 'F' # 和cat一样,只写tr命令需要在终端输入内容,tr命令替换后,输出到终端
file
File
^C
[root@wqh06 ~]# tr 'f' 'F' <file1.txt # 将file1.txt的内容输入给tr,tr执行替换后再输出到终端,tr命令无法省略 `<`
hello
test
File1.txt
File2.txt
File3.txt
File4.txt
[root@wqh06 ~]# tr 'f' 'F' < file1.txt > file2.txt # 把tr替换后的内容输出到一个新文件file2.txt中
[root@wqh06 ~]# grep 'root' /etc/passwd # 常用的grep语法,省略了`<`
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@wqh06 ~]# grep 'root' < /etc/passwd # 完整的grep语法,将/etc/passwd文件内容交给grep命令
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@wqh06 ~]# grep 'root' # 同样,如果没有标准输入重定向读取文件内容,就需要从键盘输入,交给grep,然后在终端输出
wqh06
root
root # 由grep输出,匹配的有root的行
roottt
roottt # 由grep输出,匹配的有root的行
^C
案例2:数据库中导入库或者表,恢复数据
[root@wqh06 ~]# mysql -uroot -p123 < database.sql # 恢复数据
案例3:生成一个文件
dd # 生成一个大文件
if # 从哪里读取数据
of # 输出到哪里
bs # 一次输出多少
count # 输出的次数
[root@wqh06 ~]# dd if=/dev/zero of=/root/test.log bs=10M count=100 # if/of的写法
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 27.5536 s, 38.1 MB/s
[root@wqh06 ~]# ll -h
total 1001M
-rw-r--r--. 1 root root 1000M Dec 19 18:27 test.log
[root@wqh06 ~]# dd </dev/zero >/root/test.txt bs=10M count=10 # 重定向的写法,与上面效果相同
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 11.6617 s, 9.0 MB/s
[root@wqh06 ~]# ll -h
total 1.1G
-rw-r--r--. 1 root root 1000M Dec 19 18:27 test.log
-rw-r--r--. 1 root root 100M Dec 19 18:28 test.txt
案例4:标准输入限定标识符重定向
[root@wqh06 ~]# cat > new.txt << EOF
> WQH01
> WQH02
> EOF
[root@wqh06 ~]# cat new.txt
WQH01
WQH02
Linux-输出/输入重定向的更多相关文章
- Shell系列(5)- 输出输入重定向及wc命令
输出重定向: 在Linux当中,0代表输入:1代表正确输出:2代表错误输出 类型 符号 作用 正确输出重定向 命令 > 文件 以覆盖得方式,把命令得正确输出,输出到指定文件或设备当中 命令 &g ...
- linux shell输入重定向
经常用(隔很久)经常忘. 备忘下:http://blog.csdn.net/ithomer/article/details/9288353
- [转]linux shell数据重定向(输入重定向与输出重定向)详细分析
在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...
- Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
1. 输出重定向 最基本的重定向是将命令的输出发送到一个文件中.在bash shell中用大于号(>) ,格式如下:command > inputfile.例如:将date命令的输出内容, ...
- Linux Shell基础 Shell的输入重定向和输出重定向
概述 在 Linux 中输入设备指的是键盘,输出设备指的是显示器.在 Linux 中,所有的内容都是文件,计算机硬件也是文件,标准输入设备(键盘)和标准输出设备(显示器)也是文件.这些设备的设备文件名 ...
- linux基础进阶命令详解(输出重定向(2>&1,1>&2,&>file)、输入重定向、管道符、通配符、三种引号、软连接、硬链接、根“/”、绝对路径vs相对路径)
本章命令(共9个): 1 2 3 4 5 6 7 8 9 输出重定向 输入重定向 管道符 通配符 三种引号 软连接 硬链接 根"/" 绝对路径vs相对路径 1.输出重定向 作用:一 ...
- linux:输入/输出、重定向、管道
输入.输出: 程序的默认输入设备,叫标准输入. stdin 键盘 0 程序的默认输出设备,叫标准输出. stdout 监视器 1 程序的默认错误输出设备,叫标准错误输出.stde ...
- 【shell编程】之基础知识-输入/输出和重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
- Linux系统教程 标准输入/输出和重定向
1. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘:标准输出文件(stdout)和标准错误输出文件(stderr), ...
- 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端
nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...
随机推荐
- USB限流芯片,4.8A最大,过压关闭6V
PW1503,PW1502是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路保护.它具有超温保护以及反向闭锁功能. PW1503,PW1502采用薄型(1毫米)5针薄型SOT2 ...
- RPC 实战与原理 精简版
什么是 RPC? RPC 有什么作用? RPC 步骤 为什么需要序列化? 零拷贝 什么是零拷贝? 为什么需要零拷贝? 如何实现零拷贝? Netty 的零拷贝有何不同? 动态代理实现 HTTP/2 特性 ...
- 转 Fiddler1 简单使用
Fiddler1 简单使用 文章转自:https://www.cnblogs.com/zhengna/p/9008014.html 1.Fiddler下载地址:https://www.tele ...
- GStreamer各个包构建
GStreamer按功能.维护的标准化程度.依赖库的版权差异等分了若干个包(package),如 gstreamer, gst-plugins-base, gst-plugins-good, gst- ...
- Code Review 的几个技巧
No magic: Explicit not implicit: 覆盖度比深度重要,覆盖度追求100%: 频率比仪式感重要,坐公交蹲厕所打开手机都可以 Review 别人代码,不需要专门组织会议: 粒 ...
- charles安装使用乱码连手机等问题解决方案
捣鼓半天终于安装好了,给大家分享下我的过程 1.安装, 正常网上安装即可,我安装了个有汉化包的,,推荐链接 安装方法下载破解版,安装即可 安装包地址:https://pan.baidu.com/s/1 ...
- 基于final shell的linux命令
final shell操作教程: 1.查看API实时日志:cd ../../data/log/api tail -100f anyAPI-server.log2.关闭日志:control+c3.恢复实 ...
- Unix Socket 代理服务 unix域套接字
基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议) - royalrover - 博客园 https://www.cnblogs.com/accordion ...
- proc/net/tcp中各项内容的含义
- 一个实体对象不能由多个 IEntityChangeTracker 实例引用
因为需求需要EF 实现批量的删除后插入,所以出现了这个报错, 这个报错的原因是,EF查询是有带跟踪的,跟踪后其他上下文想操作这个实体就会报错. 所以,查询使用 ef AsNoTracking 查后无追 ...