Linux重定向介绍及实例

   Linux重定向



程序:指令+数据

读入数据: Input

输出数据: Output

打开的文件都有一个fd: file descriptor (文件描述符)

Linux给程序提供三种I/O设备

标准输入( STDIN)   0  默认接受来自键盘的输入

标准输出( STDOUT)     1     默认输出到终端窗口

标准错误( STDERR)      2     默认输出到终端窗口

[[email protected] /testdir]# ll /dev/std*

lrwxrwxrwx. 1 root root 15 Aug 28 22:22 /dev/stderr -> /proc/self/fd/2

lrwxrwxrwx. 1 root root 15 Aug 28 22:22 /dev/stdin -> /proc/self/fd/0

lrwxrwxrwx. 1 root root 15 Aug 28 22:22 /dev/stdout -> /proc/self/fd/1

I/O重定向:改变默认位置

STDOUT和STDERR可以被重定向到文件:

命令 操作符号 文件名

支持的操作符号包括:

>      把STDOUT重定向到文件

2>     把STDERR重定向到文件

&>     把所有输出重定向到文件

> 文件内容会被覆盖

# set -C: 禁止将内容覆盖已有文件,但可追加

强制覆盖: >|

# set +C: 允许覆盖

>> 原有内容基础上,追加内容

2>: 覆盖重定向错误输出数据流;

2>>: 追加重定向错误输出数据流;

标准输出和错误输出各自定向至不同位置:

COMMAND > /path/to/file.out 2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向:

&>:覆盖重定向

&>>:追加重定向

COMMAND > /path/to/file.out 2> &1 (顺序很重要)

COMMAND >> /path/to/file.out 2>> &1

find /etc -name passwd 2> /dev/null

():合并多个程序的STDOUT

[[email protected] /testdir]# (cal 2016;cal 2017) > cal.txt    #将两个命令的结果输出到cal.txt文件中

[[email protected] /testdir]# (date; lsdf) &> all.txt          #将标准输出和错误输出全部写入到all.txt文件中

[[email protected] /testdir]# cat all.txt

Mon Aug 29 20:04:27 CST 2016

bash: lsdf: command not found...

注意:

1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。

2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。

3、当命令执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。

5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行

示例:

 

[[email protected] /testdir]# set -C bs                    #禁止将内容覆盖已有文件

[[email protected] /testdir]# echo "nnnnnnnnnn" > bs

-bash: bs: cannot overwrite existing file

[[email protected] /testdir]# echo "mmmmmmmmm" >| bs

[[email protected] /testdir]# echo "nnnnnnnn" >> bs

[[email protected] /testdir]# cat bs

mmmmmmmmm

nnnnnnnn

[[email protected] /testdir]# set +C bs                    #允许覆盖

[[email protected] /testdir]# echo "aaaaaaaa" > bs

[[email protected] /testdir]# echo "Hello World" > wel    #覆盖写入

[[email protected] /testdir]# echo "Hello" >> wel         #追加写入

[[email protected] /testdir]# cat wel

Hello World

Hello

[[email protected] /testdir]# cat < /etc/issue           #从指定文件读取内容

\S

Kernel \r on an \m

[[email protected] /testdir]# lsdfdf &> err.txt        #不管是标准输出还是错误输出都写入到err.txt文件中

[[email protected] /testdir]# cat err.txt

bash: lsdfdf: command not found...

从文件中导入STDIN



使用 < 来重定向标准输入


某些命令能够接受从文件中导入的STDIN:

把/etc/issue中的小写字符都转换成写写字符

[[email protected] /testdir]# tr ‘a-z‘ ‘A-Z‘ < /etc/issue

\S

KERNEL \R ON AN \M

删除issue文件中的指定的字符

[[email protected] /testdir]# tr -d ‘a-h‘ < /etc/issue

\S

Krnl \r on n \m

[[email protected] /testdir]# cat > t < test

[[email protected] /testdir]# cat t

1212121

[[email protected] /testdir]# cat test

1212121

把多行发送给STDIN



使用“ <<终止词”命令从键盘把多行重导向给STDIN

直到 终止词 位置的所有文本都发送给STDIN

有时被称为就地文本( heretext)

[[email protected] /testdir]# cat > file <<end

> hello

> world

> hi,

> end

[[email protected] /testdir]# cat file

hello

world

hi,

  管道



管道(使用符号“ |”表示)用来连接命令

命令1 | 命令2 | 命令3 | …

将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN

STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现

最后一个命令会在当前shell进程的子shell进程中执行用来

    组合多种工具的功能

[[email protected] /testdir]# ls

all.txt  cal.txt  err.txt  file

[[email protected] /testdir]# ls | tr ‘a-z‘ ‘A-Z‘

ALL.TXT

CAL.TXT

ERR.TXT

FILE

less :一页一页地查看输入:

[[email protected] /testdir]# ls -l /etc/ | less#分页显示/etc目录下的列表

mail: 通过电子邮件发送输入:

[[email protected] /testdir]# echo "test mail" | mail -s test root#给root发送邮件

lpr:把输入发送给打印机

[[email protected] /testdir]# echo "test print" | lpr -P printer

     重定向到多个目标( tee)

命令1 | tee 文件名 | 命令2

把命令1的STDOUT保存在文件名中,然后管道输入给命令2

使用:

保存不同阶段的输出

复杂管道的故障排除

同时查看和记录输出

[[email protected] /testdir]# ls | tee sc.txt | tr ‘a-z‘ ‘A-Z‘

ALL.TXT

CAL.TXT

ERR.TXT

FILE

[[email protected] /testdir]# cat sc.txt

all.txt

cal.txt

err.txt

file

时间: 2024-11-10 00:20:46

Linux重定向介绍及实例的相关文章

Linux Epoll介绍和程序实例

1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似,事实上都I/O多路复用技术而已,并没有什么神奇的. 事实上在Linux下设计并发网络程序,向来不缺少方法,比方典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入Epoll这个东东呢?那还是有得说说

Linux运维学习历程-第六天-Linux重定向和管道

本章内容我们将学习linux中的重定向和管道两大用法 I/O输入与输出设备 重定向 管道 tee命令与tr命令 一.I/O设备 1.什么是I/O设备 管理和控制计算机的所有输入/输出(I/O)设备是操作系统的主要功能之一,主要分为字符设备和块设备.一般由机械和电子两个部分组成. 功能介绍 输入/输出(Input /Output ,简称I/O),指的是一切操作.程序或设备与计算机之间发生的数据传输过程. 输入/输出系统(Input/Output System) ,指控制计算机数据流动的体制,包括程

linux系统服务介绍

linux系统服务介绍 在windows系统中,我们可以打开任务管理器来打开或者关闭某些服务.在Linux系统下也同样有这样的需求,那么linux下怎么打开类似于windows下的"任务管理器"呢? linux系统下调整服务的启动和不启动有两种办法: 1.ntsysv命令 如果这个命令不存在 yum install -y ntsysv 安装好之后,截图如下: 进入到这个界面后,空格键来改变*和空,空就代表不启动 关闭一些不常用的服务 禁用: atd auditd haldaemon i

Linux重定向相关(转载帖,供自己cookbook)

Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作.  Linux默认输入是键盘,输出是显示器.你可以用重定向来改变这些设置.比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了.输出也是一样,你可以把屏幕输出重定向到一个文件里,再到文件里去看结果.重定向操作符可

[Python]网络爬虫(四):Opener与Handler的介绍和实例应用(转)

在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl() 1.geturl(): 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向.获取的URL或许跟请求URL不同. 以人人中的一个超级链接为例, 我们建一个urllib2_test10.py来比较一下原始URL和重定向的链接: [p

Android开发之IPC进程间通信-AIDL介绍及实例解析

一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信:   2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身:linux除了支持Unix早期

Dockerfile命令介绍及实例

Dockerfile命令介绍及实例 当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程. 基础镜像可以用于创建Docker容器.镜像可以非常基础,仅仅包含操作系统:也可以非常丰富,包含灵巧的应用栈,随时可 以发布.当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.

Linux Tomcat介绍

Linux Tomcat介绍 背景: 之前做过javaweb开发,知道windows的eclipse开发工具里自带Tomcat服务来运行JSP页面和Serverlt,供开发者调试程序,不过在实际生产环境应该如何使用tomcat服务是个问题,在学习完Linux的Tomcat后,将学习到的记录与此. 什么是Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选. 安装T

shell重定向介绍及使用

我们在写脚本或用脚本时,往往会发现 > /dev/null 2>&1 这类的命令.之前都是简单的了解一下,并没有深度消化,直到自己写脚本时,不认真写成了2>&1 >/dev/null,导致结果出问题.下面我通过网络给大家介绍一下: shell重定向介绍: 我们平时写的脚本或启动程序,某段代码会处理外部的输入,然后将调用传参指行命令结果输出到屏幕或指定的位置.在交互式的脚本中,输入来自用户的键盘和鼠标,结果输出到用户的屏幕或设备中.而对于某些后台运行的启动脚本或程序,