首页 > 系统相关 >Linux--I/O重定向与管道

Linux--I/O重定向与管道

时间:2023-11-27 22:35:49浏览次数:37  
标签:输出 重定向 文件 -- qfedu Linux date root

  • 首先用一个例子来描述重定向的含义:

  在生产环境中,每天凌晨需要备份娄据库,这时工作人员会编写一个简单的脚本创建计划任务,把脚本执行结果放到一个或几个文件中以便第二天查看,这个过程就叫重定向。在使用“psaux”命令时,为了快速找到所需信息,经常使用grep命令进行过滤,此时就需要使用管道符。

 下面是一些进行I/O重定向的基本命令操作:

1.查看自己是第几个终端:

[root@qfedu~]# tty

2.显示当前时间:

[root@qfedu~]# date

如果在date后面添加>指向此文件,即定向于此文件:

[root@qfedu~]# date > date.txt

3.在输入ls查看/proc虚拟文件时,文件后面经常有->符号,以及0,1,2这三个数字,这些又代表什么含义呢?

其实这些是绝大多数进程都有的,其中0表示标准输入,可以理解为键盘输入;1表示标准输出,输出到终端;2表示标准错误,输出到终端;3及以上为常规文件的描述符。

具体如下图:

 

 例如,date命令在默认情况下将输出结果显示在终端,此时文件描述符为1。现在改变输出的方向,从终端改为date.txt文件,这个行为叫作重定向,具体如下所示。

4.重定向:[root@qfedu~]# date 1> date.txt

改变文件描述符为2(标准错误),如果命令正确,结果在终端显示,如果命令错误,结果会输出在终端上,再重新定向到date文件中,即将错误信息写入文件中。

[root@qfedu~]# date 2> date.txt

显示时间

[root@qfedu~]# linux 2> date.txt

[root@qfedu~]# cat date.txt

bash:linux:未找到命令...(错误信息)

文件描述符为0,表示为标准输入:

[root@qfedu~]# cat 0< (重定向的路径)

文件描述符的含义见下图:

 输出重定向分为正确与错误输出两种:

正确输出:1>,1>>;(1可省略)

错误输出:2>,2>>;

>表示覆盖,>>表示追加。

5.输出重定向(覆盖)

 [root@qfedu~]# date 1> date.txt  (date结果输出到date文件)

6.输出重定向(追加)

[root@qfedu~]# date >> date.txt(在文件尾部追加)

7.错误重定向:

[root@qfedu~]# ls /home/linux 2> error.txt (前提是/home/linux不存在,这样才会输出错误信息)

综合应用:

8.正确结果与错误结果都输出到相同位置:

[root@qfedu~]# ls /home/ /linux &>list.txt

9.正确结果与错误结果都输出重定向到相同位置:

[root@qfedu~]#  ls /home/ /linux >list.txt 2>&1

>&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出
<&n 标准输入复制自文件描述符 n
<&- 关闭标准输入(键盘)
>&- 关闭标准输出
n<&- 表示将 n 号输入关闭
n>&- 表示将 n 号输出关闭

10.输入重定向:

使用grep命令过滤root,输入端默认为键盘,接着将输入重定向到/etc/passwd。

[root@qfedu~]#  grep ‘root’

linux

wwww.qfedu.com

[root@qfedu~]#  grep 'root' </etc/passwd

11.dd命令读取数据:

[root@qfedu~]# dd if = /dev/zero of=/file01.txt bs=1M count2  (bs为每次写入多大的信息,count是一共写多少次)

拓展:

cmd >a 2>a 和 cmd >a 2>&1 为什么不同?
cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。
cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD1的管道之后,再被送往文件a 。a文件只被打开一遍,就是FD1将其打开。

他们的不同点在于:
cmd >a 2>a 相当于使用了FD1、FD2两个互相竞争使用文件 a 的管道;
而cmd >a 2>&1 只使用了一个管道FD1,但已经包括了stdout和stderr。
从IO效率上来讲,cmd >a 2>&1的效率更高。
重定向综合案例:

利用重定向建立多行文件(命令行)。
(1)使用 echo 命令重定向并不能建建立多行文件,一般使用cat 命令,在键盘上输入文本按回车键换行,完成后按组合键Ctrl+d 结束。

“>”表示覆盖,但在此处是指覆盖原来的file03.txt,输入的3 行文本一次输出到 file03.txt。如果退出后再次输出,那将覆盖掉先前的文本内容,此时就需要用“>>”进行追加。
(2)每次写入文本都需要按组合键Ctr 1+d 结束显得比较烦琐,用户可以自定义 个结束的符号,通常使用“EOF”。

利用重定向建立多行文件(脚本)。
(3)命令行和脚本都可以操纵Shell。 在命令行中可以用组合键Ctrl+d退出, 但在脚本中不可以。下面利用脚本创建多行文件,在脚本文件中写入文本,并加入“EOF”结束符号。

 (4)使用bash执行脚本

 (5)在编写脚本时,为排版整齐,经常在EOF前面使用tab键缩进,同时输入重定向符后添加“-”。

 多条命令输出重定向

(6)如果需要将两条命令输出都重定向,则需要添加括号:

 (7)让命令在后台运行,并且输出重定向到文件。

(8)终止后台程序:

 

管道综合案例

管道实际上也是一种重定向,重定向字符控制输出到文件,管道控制车输出到其他程序。管道的作用是把上一个进程的]输出作为下一个进程的输入,利用管道可以把若干个命令连接在一起
将/etc/passwd中的用户按UID数值大小排序并显示前3行

 统计出最占CPU的5个进程

   

以上就是关于Linux--I/O重定向与管道的一些基本内容了。

 

 

 

标签:输出,重定向,文件,--,qfedu,Linux,date,root
From: https://www.cnblogs.com/swxyoushijie/p/17860240.html

相关文章

  • DFS算法的非递归遍历分析
    两种写法,一个是边表顶点号全部压栈,一个是类似后序非递归遍历1、voidDFS(GraphG,inti){intp,w;StackS;InitStack(S);Push(S,i);visited[i]=true;while(!isEmpty(S)){Pop(S,p);printf("%d",G.Ver[p].num);......
  • Python实现完全二叉树
    给定一个元素序列(如列表),递归的创建一颗完全二叉树完整代码如下#!/usr/bin/envpython3classTreeNode:"""Nodeofcompletetree"""def__init__(self,data=0):self.data=dataself.left=Noneself.right=Nonedefb......
  • 分支限界法
    01背包问题:分支是使用广度优先策略,依次生成扩展结点的所有分支。分支限界法首先生成当前扩展结点的所有分支,然后再从所有活结点中选择一个作为扩展结点。每一个活结点都要计算限界(是否超出背包剩余重量),根据限界情况判断是否剪枝,或选择最有利的结点。分支限界法有两种不同的搜索......
  • Java的Buffer流输入封装类
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.StringTokenizer;classQuickReader{privatefinalBufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));......
  • 用户管理
    探索Linux用户管理与相关命令Linux操作系统以其强大的用户管理系统而著称,允许系统管理员轻松管理多个用户和其权限。在这篇博客中,我们将深入了解Linux用户管理的基础知识以及一些常用的命令。Linux用户管理基础1.用户和用户组在Linux中,每个用户都有一个唯一的用户名,而用......
  • 11.27
    *设置-->构建执行部署-->maven-->用户设置文件-->conf/settings.xml*配置文件在src/main/resources/application.properties,一般情况下会把application.properties改为application.yml*可以通过@Value("${email.user}")获取application.yml配置文件中的值或者使用@Confi......
  • 【linux日常】---mongdb日志切割
    前提操作导入包管理系统使用的公钥从终端发出以下命令以从https://www.mongodb.org/static/pgp/server-4.4.asc导入MongoDB公共GPG密钥:wget-qO-https://www.mongodb.org/static/pgp/server-4.4.asc|sudoapt-keyadd-返回的应是ok但是,如果您收到指示gnupg未安装......
  • 文件目录与权限
    基本概念​用户目录:位于/home/user,称之为用户工作目录或家目录,表示方式:#在home有一个user这里就是之前创建的msb123用户[root@localhost~]#cd/home[root@localhosthome]#lsmsb123#使用~回到root目录,使用/是回到根目录下[root@localhostmsb123]#cd~[root@localhos......
  • DBV-00107: Unknown header format 故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:DBV-00107:Unknownheaderformat故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]客户linux平台被勒索病毒加密,其中有oracle数据库.客户联系黑客进行解密【勒索解密oracl......
  • Shell快捷按键
    Shell的快捷按键用来导航命令行的按键:按键全称含义Ctrl+F向前一个字符前进一个字符Ctrl+B向后一个字符前后一个字符Alt+F向前一个单词向前一个单词Alt+B向后一个单词向后一个单词Ctrl+A命令行开头转到当前命......