重定向的分类

名称 文件描述符 作用
标准输入(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

最新文章

  1. 【前端性能】高性能滚动 scroll 及页面渲染优化
  2. HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth
  3. 从Eclipse迁移到Android Studio碰到的问题记录
  4. 点击区域外隐藏该区域,event.stopPropagation()
  5. Java for LeetCode 207 Course Schedule【Medium】
  6. MySQL订单分库分表多维度查询
  7. CF-Approximating a Constant Range
  8. javascritp封装的类似java HashMap的类
  9. 【转】bootstrap 的 affix.js 插件
  10. qt+vs2017环境下XIMEA相机库的配置
  11. hbase版本升级的api对比
  12. Multiple websites on single instance of IIS
  13. php工厂模式的实例
  14. object cloning
  15. HDU 1251 统计难题(字典树模板题)
  16. Andrew机器学习第一课
  17. WPF实战案例-数据代理
  18. Action的模型绑定
  19. mysql 5.6 与5.7安装
  20. Java9的新特性

热门文章

  1. 容器化安装Mysql 8.0 并部署主从复制
  2. ctfshow_djb杯
  3. 转 1 认识开源性能测试工具jmeter
  4. 你真的了解Android系统启动流程吗?Android高级工程师必看系列,已开源
  5. Bitter.Core系列四:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 查询
  6. javascript之Banner图片焦点轮播
  7. # from tall import b from tall import * print(b) __all__ 模块 引用管理
  8. : cannot validate certificate for 127.0.0.1 because it doesn&#39;t contain any IP SANs
  9. (Sql Server)Soundex语音算法
  10. 性能优化(CSS优化)