管道和重定向

Linux进程管理

管道和重定向

重定向

利用>可以使本应该输出在屏幕上的输出信息移到了一个文本文件中去保存,以便以后方便查看。
例如:date > file 将现在的时间信息保存到file文件中
在这里插入图片描述
例如ls / > file 将根目录下的信息输出在file文件中
在这里插入图片描述

重定向的原理
  • FD简介
    file descriptors,FD,文本描述符,进程使用文件描述符来管理打开的文件,又叫文件句柄。
    文件描述符是一个程序在打开的时候描述这个文件的,为了更加方便的调用文件,给每一个文件的路径都起一个别名(也就是软连接),在调用时就直接用别名即可。
  • FD图示
    在这里插入图片描述
    stdin代表标准输入 stdout代表标准输出 stderr代表标准错误。
    FD的范围是0到255。
    FD是相对于程序来说的,为的就是让程序更加方便、快捷的打开文件。
    FD是访问文件的标识,即链接文件,省去了冗长的绝对路径。

0代表标准输入
1代表标准输出
2代表标准错误输出
3+代表文件,可读可写

通过vim程序,来观察一个进程的FD信息

  • 1.通过一个终端,打开一个文本
touch /home/file
vim file
  • 2.通过另一个终端,查询文本程序的进程号
ps aux | grep vim

在这里插入图片描述

由此可以查询程序的进程编号是1633

  • 3.在/proc目录中查询文本程序的FD
ls /proc

在这里插入图片描述
在/proc文件夹下可以找到1633文件夹。

ls /proc/1633

在这里插入图片描述
进入到1633文件夹中又有很多文件夹,可以看到一个很关键的文件夹叫fd

ls /proc/1633/fd

在这里插入图片描述
查看fd文件夹中的详细内容,发现0,1,2,4代表的是一个一个的文件,而0,1,2这些数字代表的是/dev/pts/0,4数字代表的是/home/.file.swp

  • 在文件夹上创建一个文件的快捷方式
ln -s 文件名称 文件的快捷方式
ln -s file.txt 333

在这里插入图片描述

  • 在一个程序中往另一个程序发送消息
echo 1234 > /dev/pts/0

在这里插入图片描述

输出重定向
  • 正确输出

1>等价于>

date 1> /dev/pts/0

表示的是对文本内容进行覆盖

1>>等价于>>

date >> time.txt

表示的是对文本文件进行追加,并不是覆盖。
在这里插入图片描述

  • 错误输出

2>

当某条命令产生错误时,才会有错误输出。
在这里插入图片描述

2>>

在这里插入图片描述
如何在命令行中将正确的信息和错误的信息同时输出呢?
在这里插入图片描述
如何将正确的信息和错误的信息分开存放呢?可不可以创建两个文件进行分开存放呢?
答案是可以的。

在这里插入图片描述
一般情况下我们很少看输出的信息,在大多数情况下将程序输出的信息放入一个空洞程序。

ls /home/ /aaa &> /dev/null

在这里插入图片描述
此时屏幕上并没有输出任何信息。

输入重定向
mail -s "邮件名称" 计算机用户名称

在这里插入图片描述

按下回车键会让我们去输入邮件的内容。按下.回车回到命令行界面。
接下来会查看这封邮件。
首先我们要创建一个计算机用户

useradd alice

其次要为这个创建的用户更新一下密码

passwd alice

按下回车后会让输入自己的密码
最后从超级管理员切换到user01用户

su - alice

输入刚更新的密码回车之后就进入了user01用户界面
使用mail查看自己发送的邮件
在这里插入图片描述
按下1查看邮件中的内容
在这里插入图片描述
按下q退出邮件,在按下exit退出alice用户回到超级管理员。
但是这种不断编写邮件再去发送的方式有些麻烦,所以我们可以考虑写一个邮件的模板,之后利用重定向发送给邮件程序,来代替我们发送文件
首先我们要准备一个文件

vim word

在创建的word文件中写入内容
通过输入重定向想邮件程序发送文件

mail -s "test01" alice < word

这样就代替了我们发送邮件。

管道

进程管道简介

管道(Piping):管道命令可以将许多条命令组合起来,一次性完成复杂的处理任务。
语法:command1 | command2 | command3 |......
在这里插入图片描述
管道的工作原理:
指令1的输出信息通过管道作为输入信息输入进指令2,经过指令2整合分析处理后作为输出信息通过管道作为输入信息进指令3,依次类推,直到最后没有命令时就会把最后的输出信息显示在我们熟悉的命令行界面上。

  • 查看/etc/passwd的内容
cat /etc/passwd | head -4

在这里插入图片描述

cat /etc/passwd | head -4 | tail -2

在这里插入图片描述
这样管道可以帮助我们进行层层筛选达到我们想要的效果。

tee管道

管道通过层层筛选达到我们想要的结果,那么如果在筛选的过程当中我们如何将之前在某个管道筛选出的信息保存到文本中呢?这时就用到了tee管道。
tee管道就相当于一个三通管道,就是交给另一个程序处理的同时,又保存一份副本。
在这里插入图片描述

  • 例如:
cat /etc/passwd | tee file.txt | tail -1

在这里插入图片描述
将passwd文件中的内容保存到file.txt中,同时又经过了tail处理

cat /etc/passwd | grep "root" | file.txt | head -1

在这里插入图片描述
这条命令的结果是在file1.txt中保存了两条在命令行中输出了一行。

参数传递Xargs

Xargs的作用和管道的作用是一样的。它主要是管理那些不服管教的特殊命令,比如:cp、rm
1.准备一些文件

touch /home/file{1..5}

在这里插入图片描述

2.接到消息,部分文件需要删除,考虑使用管道试试

cat files | rm -rfv

在这里插入图片描述
由此可见并没有删除成功
4.再加上Xargs试试

cat files | xargs rm -rfv

在这里插入图片描述
由此可见加上xargs就可以了。
Linux存储管理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_45671732

你们鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值