当前位置:   article > 正文

Linux系统管理:重定向与管道_linux重定向和管道

linux重定向和管道

标准输入、标准输出、标准错误

文件描述符FD

简介

在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。在操作这些所谓的文件的时候,我们每操作一次就找一次名字,这会耗费大量的时间和效率。所以Linux中规定每一个文件对应一个索引,这样要操作文件的时候,我们直接找到索引就可以对其进行操作了。

Linux内核对所有打开的文件有一个文件描述符表格,里面存储了每个文件描述符作为索引与一个打开文件相对应的关系,简单理解就是一个数组,文件描述符(索引)就是文件描述符表这个数组的下标,数组的内容就是指向一个个打开的文件的指针。

文件描述符也叫文件句柄。进程使用文件描述符来管理打开的文件,用数字代替文件名,用来快速找到。类似于快捷方式,也叫软链接,用来更方便的调用文件。数字的范围是0~255,其中0、1、2是特别的。1号通常代表输出文件、2号是显示错误信息的,比如命令打错了,终端中会显示错误

FD是访问文件的标识,即链接文件。省去了冗长的绝对路径。0:键盘只读、1,2:是终端可以理解为屏幕、3+:是文件,可读可写,每个程序都有FD,用来链接文件的。

图示

在这里插入图片描述
在这里插入图片描述
标准输入(stdin);代码为 0 ;键盘只读

标准输出(stdout):代码为 1 ;是终端输出可以理解为屏幕显示

错误输出(stderr):代码为 2 ;是终端输出可以理解为屏幕显示

可在proc目录当中查看进程的FD
在proc中存放的是系统进程的相关信息,需要找到进程FD需要先知道进程PID。
看到的0124是FD,程序通过描述符访问文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

具体可看此文章FD详解

重定向

输出重定向分为正确输出,错误输出

  • > 把STDOUT重定向到文件
  • 2> 把STDERR重定向到文件
  • &> 把所有输出重定向到文件
  • > 文件内容会被覆盖
  • >> 原有内容基础上,追加内容

正确输出: 1>和1>> 等价于 >和>>
错误输出: 2>和2>> 没有简写

输出重定向

date:显示当前时间的程序
  • 1

例 1:输出重定向(覆盖

在这里插入图片描述
覆盖
在这里插入图片描述

例 2:输出重定向(追加

在这里插入图片描述
追加
在这里插入图片描述

例 3:错误输出重定向

在这里插入图片描述
重定向到不同的位置
在这里插入图片描述

例 4: 正确和错误都输入到相同位置

在这里插入图片描述
混合输出

在这里插入图片描述

例 5:重定向到空设备/dev/null

在这里插入图片描述
空设备,即将产生的输出丢掉,可以进行选择正确、错误、全部。

# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null 
空设备,即将产生的输出丢掉

# ls /home/ /aaaaaaaaa &>/dev/null 
空设备,即将产生的输出丢掉
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

输入重定向

mail -s 邮件程序
  • 1

标准输入: < 等价 0<
例:

# mail alice 没有改变输入的方向,默认键盘,前台被占领输入.退出
Subject: hello
1111
2222
3333
.
EOT

# su - alice
$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/alice": 1 message 1 new
>N 1 root Mon Jul 31 15:16 20/617 "hello"

# mail -s "test01" alice < /etc/hosts 
输入重定向,来自于文件,将该文件的内容,输入到mai程序中
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

管道

进程管道 Piping

语法:command1 | command2 |command3 |…
管道命令可以将多条命令组合起来,一次性完成复杂的处理任务。
使用重定向字符控制输出到文件,使用管道控制输出到其他程序。

命令1执行完后会有一些标准的输出信息会经过管道收集起来作为下一个程序的标准输入,直到完成最后一个指令进行输出到屏幕当中(管道左侧的输出,就是右侧的输入)
在这里插入图片描述
在这里插入图片描述

tee管道

三通管道,即交给另一个程序处理,又保存一份副本
tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件
在这里插入图片描述
在这里插入图片描述
tee管道把cat /etc/passwd前七行输出的同时也将内容输出到文件bbb
bbb文件中包含了 cat /etc/passwd 的前七行

参数Xargs

xargs是给命令 传递参数 的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

比如cp命令 管道左侧输出的是文本内容,但是cp复制的是文件,cp处理不了,这个时候就需要 Xargs,类似强制执行命令

例:
在这里插入图片描述

# touch /home/file{1..5}
# vim files3.txt 
/home/file1
/home/file2
/home/file4

# cat file3.txt |xargsls -l 
-rw-r--r--. 1 root root 0 Mar 11 10:35 /home/file1
-rw-r--r--. 1 root root 0 Mar 11 10:35 /home/file2
-rw-r--r--. 1 root root 0 Mar 11 10:35 /home/file4

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/211942
推荐阅读
相关标签
  

闽ICP备14008679号