首页 > 系统相关 >4.linux重定向和管道

4.linux重定向和管道

时间:2024-09-15 11:49:21浏览次数:11  
标签:文件 重定向 输出 描述符 管道 FD linux txt pts

目录

 

一.重定向

1.FD

2.重定向案例> <

2.1 输出>

2.2 输入<

3.扩展

二.管道

1.管道 |

1.1 进程管道Piping

1.2 tee管道

2.参数传递Xargs


 

一.重定向

 

7146834711d1fb93f062d37bb80799c9.png

# touch time

# date > time.txt

//> 将本身输出到屏幕的东西给他弄到time文件中

 

1.FD

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

file descriptors,FD,文件描述符,文件句柄。进程使用文件描述符管理打开文件。调用一个名字又臭又长的文件很麻烦,这时候就可以将该文件与特定的FD绑定,就比如为1,这时呼唤1就能立刻调出该文件

--类似于链接或者快捷操作

 

d1a8fad464c22081abac0553aed7d1ba.png

FD的详解 - 第19分钟https://www.bilibili.com/video/BV1pz4y1D73n?p=32&vd_source=643340cedd32f246a3b3e944aa2493c8

 

e245906386c40b38143d5dd38f262c9d.png

 FD是访问文件的标识,即链接文件。省去了冗长的绝对路径

  •  0:    是键盘只读
  • 1 2: 是终端可以理解是屏幕
  • 3+:  是文件,可读可写

程序的FD(链接文件),省去了冗长的绝对路径

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

文件描述符(file descriptor)就是内核为了高效管理这些已经被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I0操作的系统调用都通过文件描述符来实现。同时还规定系统刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。这意味着如果此时去打开一个新的文件,它的文件描述符会是3,再打开一个文件文件描述符就是4..…

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

d732d415ec9e4238ae5c2642f4dfd982.png

 

 

通过一个终端,打开一个文本

# vim 1.txt

//注意别关闭,不关闭才能运行占据着一个终端

# tty

dev/pts/0

通过另一个终端,查询文本程序的进程号

# ps aux | grep vim

比如1.txt的是5912

在/proc目录中查看文本程序的FD

# ls - l /proc/5912/fd

# tty

/dev/pts/1

# echo 123 > /dev/pts/0

//可以发现会直接输入到1.txt文本中

//dev/pts/0是指终端,此时就代表着正打开着的1.txt

//通过调用标准输出文件(1>)实现将1终端的数据输出给0终端的vim程序的1.txt

扩展

(在后面文件存储章节会讲到)

# ln -s 文件名 链接名

eg:

# ln - s 123.txt 333

//123.txt文件已经关闭

# cat 333

//直接通过快捷方式访问

 

e2ca85ad9a07dfaf79186ebe9c969e5d.png

 

vim程序之所以能接收信息反馈信息,靠的就是 /dev/pts/序号 的终端设备文件,为了区别输入和输出就用0、1、2(相当于链接名)来区别,0代表键盘,1和2代表屏幕

# echo 123 > /dev/pts/0(也可以是文件名)之所以能够将东西写进在该终端打开的vim程序,是因为>(相当于1>),调用了标准输出文件,实现了在/dev/pts/1的终端的数据(123)输出给了另一个终端0中的vim程序

而文件也会有0、1、2这些FD,比如# date > date.txt也是一样的道理

通过FD可以将不同的信息引导到别的地方

 

b25249c87a2f3f0053074136edb406e2.png

 

2.重定向案例> <

2.1 输出>

 

52bf40d80d3dc033d41134e36976b968.png

正确输出

1> 等价于 >

(>是覆盖)

1>> 等价于 >>

(>>是追加)

 

案例1:输出重定向:

 

8995a7fbc993239f4e6b102da23ccdcf.png

mkdir是不行的,因为mkdir创建成功本身是没有输出的,需要- v才有输出内容

# mkdir - v 目录 -> test.txt

会将创建成功的信息输出到test文件

 

 

案例2:错误输出重定向

错误输出

2 >

2 >>

b0998cf12e5d1c0903d3b7839d04a658.png

 

 

 

案例3:正确和错误都输入到相同的位置

&>

740946c2bd0b6b93d5909c6c28329442.png

 

 

 

2.2 输入<

< 等价于 0<

 

观察默认发送邮件的过程

编写文件

# mail - s 标题 用户

内容

.

//点代表邮件编辑的结束

eg:

# mail - s "aaaaa" alice

进行输入内容

.

(alice是已经创建出来的用户)

查看文件

先切换到发送目标的用户账号

 

f32289ac9e09c23e8d8a61c2593d2466.png

 

使用重定向快速创建文件

 

c1d3426c9ebab4d5dfdb6ac9dcc50d4a.png

 

3.扩展

 

f7c8fecff054ee88cbfc355941d58fa3.png

 

 

 

二.管道

 

1.管道 |

1.1 进程管道Piping

 

58bb979896f6fe218e23a0c092d1457a.png

将指令1的输出信息丢给指令2进行加工后再一起输出出来

 

6aa52adc9f1ce7cbd5471ade1f5b865d.png

cut -d切割结束位 -f列号

dcb2f34c9b57bb0a7891fd23e3b1b051.png

 

 

 

1.2 tee管道

三通

9db48a7f9c2b1c1c5305a8f4a5b6b9ca.png

 

案例1:

1ad8801e8898869b8bc1ad3b09cb06ed.png

 

 

案例2:

0659c6ecfbbe4b003170e7461e846e39.png

 

 

 

2.参数传递Xargs

cp rm一些特殊命令就是不服其它程序

 

84d2c976c6dd34d857cdcd5a853df343.png

 

 

 

标签:文件,重定向,输出,描述符,管道,FD,linux,txt,pts
From: https://blog.csdn.net/caiji0169/article/details/142268032

相关文章

  • linux 操作系统下的compress命令介绍和使用案例
    linux操作系统下的compress命令介绍和使用案例compress命令是Linux系统中用于文件压缩的一个工具,主要使用Lempel-Ziv-Welch(LZW)算法进行数据压缩。压缩后,文件的扩展名将变为“.Z”。虽然compress命令在历史上有其重要性,但在现代Linux系统中,它已经被更高效的压缩工具如gzip......
  • linux 操作系统下cp命令介绍及案例应用
    linux操作系统下cp命令介绍及案例应用cp命令是Linux操作系统中用于复制文件和目录的基本命令。它的功能强大,适用于各种文件管理任务cp命令概述基本语法:bashcp[options]<source><destination>功能:复制单个文件或多个文件到指定位置。递归复制目录及其内容。选项可......
  • Linux内存管理方式
    Linux内存管理涉及到多个方面,包括物理内存的分配和回收、虚拟内存的管理、页面置换、内存保护等。以下是Linux内存管理的主要方式和机制:1.虚拟内存(VirtualMemory)虚拟地址空间:每个进程拥有自己的虚拟地址空间,虚拟地址空间与物理内存是分开的。进程在运行时使用虚拟地......
  • 1Panel:一个现代化、开源的 Linux 服务器运维管理面板
    前言之前有小伙伴问:Linux服务器运维管理除了宝塔,还有其他值得推荐的管理软件吗?,今天大姚给大家分享一个现代化、开源的Linux服务器运维管理面板:1Panel。项目介绍1Panel是新一代的Linux服务器运维管理面板,旨在通过现代化的Web界面帮助用户轻松管理Linux服务器。该项目是开......
  • 1Panel:一个现代化、开源的 Linux 服务器运维管理面板
    前言之前有小伙伴问:Linux服务器运维管理除了宝塔,还有其他值得推荐的管理软件吗?,今天大姚给大家分享一个现代化、开源的Linux服务器运维管理面板:1Panel。项目介绍1Panel是新一代的Linux服务器运维管理面板,旨在通过现代化的Web界面帮助用户轻松管理Linux服务器。该项目......
  • 3.linux进程管理
    目录一.进程管理1.进程概念2.进程生命周期和状态3.进程管理process3.1ps-静态查看进程3.2 top-动态查看进程3.3.使用信号控制进程3.4nice-优先级二.作业控制jobs三.虚拟文件系统proc四.线程(可看可不看)1.状态2.调度算法3.通信方式4.线程和进程的区别5.线......
  • USB总线-Linux内核USB3.0 Hub驱动分析(十四)
    1.概述USBHub提供了连接USB主机和USB设备的电气接口。USBHub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为RootHub,下行口连接下一级Hub的上行口或者USB设备。经过Hub的扩展,一个USB主机可以和多个USB设备通信。USBHub有如下特性:良好的......
  • Linux相关命令的使用
    一、压缩和归档的命令1.1压缩和解压缩操作对象是单个文件压缩方式:gzip--->.gzbzip--->.bz2xz--->.xz上是三种压缩方式:压缩率依次递减,压缩速率依次递减。gzipfile//将文件file按gzip格式进行压缩//压缩之后原文件就不存在了,只留下名为file.gz的压缩后......
  • Linux相关命令及shell命令
    一、链接文件1.1软链接(符号链接)ls-l能看到类型为链接文件的都是软连接软连接类似于windows的快捷方式创建软连接的方式:ln-s被链接的文件文件名要生成的文件名注意:1.我们一般创建软连接时最好使用绝对路径否则一旦相对位置发生变化链接就会失效。2.如果被链......
  • (Linux)嵌入式打卡第十一天
    指针数组简介概念:指针数组的本质是一个数组,只不过数组里面的每一个元素都是指针;定义格式:数组类型*数组名[成员个数];eg://定义一个数组,数组里面的每一个元素都是int*类型int*arr[5];指针数组使用#include<stdio.h>intmain(int......