Linux学习笔记基础-重定向与管道

重定向

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

进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个数字标识。这个标识叫文件描述符。 进程使用文件描述符来管理打开的文件(FD----file descriptors). 文件描述符:每打开一个程序都会有文件描述

0,标准输入(键盘) 1,标准输出 2,标准错误, 3+,进程在执行过程中打开的其他文件。 &:表示正确错误混合输出

; #分隔符,可在同一行执行多条命令,每条命令以‘;’ 分割, 命令之间没有逻辑关系 && #逻辑与(and),可在同一行执行多条命令,&&之前的命令执行成功,才会执行&&之后的命令,反之则不执行 || #逻辑或,可在同一行执行多条命令,||之前的命令执行失败,才会执行||之后的命令,反之则不执行

文件描述符是一个整数,代表一个文件,每个进程自动打开3个文件:stdin,stdout,stderr。目前我的电脑上每个进程可以打开的文件描述符是1024个(通过“ulimit -n”命令查询)。

image-20240416190649738

在 shell 程式中,最常使用的 文件描述符FD (file descriptor) 大概有三个, 分别是:

文件描述符缩写描述含义
0STDIN (Standard Input)标准输入键盘
1STDOUT (Standard Output)标准正确输出显示屏
2STDERR (Standard Error Output)标准错误输出显示屏
在标准情况下, 这些FD分别跟如下设备关联:
stdin(0): keyboard 键盘输入,并返回在前端
stdout(1): monitor 正确返回值 输出到前端
stderr(2): monitor 错误返回值 输出到前端

输出重定向

输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。

<覆盖重定向>

shell : >    输出的内容会覆盖已有文件的内容

<追加重定向>

shell : >>  输出的内容追加到已有的文件中
>a.txt  标准正确输出重定向,即将正确结果追加到a.txt文件
1>a.txt 标准正确输出重定向,与上一条命令相同,1可以省略不写
2>a.txt 标准错误输出重定向,即将错误结果追加到a.txt文件
&>a.txt 混合输出重定向,即将标准正确输出重定向与标准错误输出重定向共同追加到a.txt文件

例:在dir1目录下存在01.txt与02.txt文件

图一中使用的命令是正确的,所以01.txt的内容被追加到了02.txt文件

image-20240416195925829

图二中使用的因为是混合输出重定向,03.txt文件不存在,存在错误的返回值,所以在02.txt文件可以看到正确的内容与错误的内容

image-20240416200713184

1>&2    正确返回值传递给2输出通道 &2表示2输出通道
2>&1    错误返回值传递给1输出通道, 同样&1表示1输出通道

这个就比较好理解了03.txt文件不存在,此时存在错的返回值。2>&1 错误返回值传递给1输出通道,此时02.txt接收的是正确返回值的内容,所以02.txt中会存在错误内容。

而01.txt文件存在且有内容,1>&2 正确返回值传递给2输出通道,1>02.txt此时02.txt接收的是正确返回值的内容,所以查看02.txt时不存在内容

1>&2 正确返回值传递给2输出通道,2>02.txt此时02.txt接收的是错误返回值的内容,所以查看02.txt时会存在内容。

image-20240416201059864

拓展

在一条命令中,使用多个重定向时,会有一个先后顺序,在下面这个例子中,分别将正确输出,混合输出,错误输出重定向到了三个文件中,按命令来看,三个文件中都会存在相应的内容,但这是错误的。

例:cat a.txt 1.txt 2.txt >zq.txt &>hunhe.txt 2>cw.txt

上面这个例子中a.txt与1.txt都存在并有内容,2.txt不存在

image-20240429150518247

可以从上图看到,存有错误输出的cw.txt中有相应的内容,存有混合输出的hunhe.txt中只有正确输出的内容,而存有正确输出的zq.txt中则没有内容。

由此可以得出,“例:cat a.txt 1.txt 2.txt >zq.txt &>hunhe.txt 2>cw.txt”中重定向内容从右到左,分别被重定向至文件中,错误输出先被重定向至cw.txt中,例子中就只剩下正确输出了,而剩下的正确输出则被混合重定向至hunhe.txt中,到正确输出重定向时已经没有需要输出重定向的内容了

输入重定向

shell : < 将文件的内容重定向命令中,作为命令的输入 shell : << 输入不需要文件进行重定向,只需要在命令行中指定用于输入重定向的数据即可

通过输入重定向创建文件
EOF是一种特殊的输入重定向操作符。它的作用是在命令行中指定一个多行输入,并将其作为标准输入传递给命令。在编写 shell 脚本时,经常用来在命令行中提供多行输入,尤其常用于需要交互式输入的场景。
#可以写到脚本或者文件里面
命令 <<EOF
    交互命令1
    交互命令2
EOF
​
命令 <<ABC
    交互命令1
    交互命令2
ABC
在任意一个命令后方加入 <<EOF,在下一行编写需要交互的命令,最后以 EOF 结尾。
这个 EOF 命令不是固定的,可以是任意字符,但结尾字符必须与开始字符一致。且结尾的EOF 必须顶格书写

管道

语法:command1 | command2 | command3 | ......

image-20200725153028330

一个进程将正确输出结果通过管道符以标准输入传递给下一个进程

通产用法:过滤内容

#查询所有安装的软件包,过滤包含MySQL的包

例:rpm -qa | grep mysql

#查询本机IP,以下两个例子仅作用于学习环境下的虚拟机,工作中的网卡名一般为eth0

例:ip a | grep 'ens33' | awk 'NR==2 {print $2}' | awk -F'/' '{print $1}'

例:ip a | grep 'ens33' | awk 'NR==2 {print $2}' | cut -d'/' -f1

image-20240429170956673

例:cat /etc/passwd | wc -l #查看/etc/passwd并统计该文件有多少行内容

参数传递:xargs

对:ls cp rm 管道不能执行。所以通过xargs。

#实例中出现的a.txt和file.txt文件中的内容为路径,仅为演示xargs的使用方法
示例:
 cat a.txt | xargs  -i cp {} /目录  
 {}:前面传过来的内容
 -i :为了让大括号生效
 目录时  -r
 解释:前面传过来的东西交给大括号
​
 cat file.txt |xargs ls -l          
 前面是目录或者目录的路径。  ls - l  后面可以不加大括号,直接执行。

image-20240429175443868

拓展

文本工具,以下三者都可以配合管道来使用,可以帮助我们快捷的对文本进行编辑或查询

  • grep 更适合单纯的查找或匹配文本

  • sed 更适合编辑匹配到的文本

  • awk 更适合格式化文本,对文本进行较复杂格式处理

本次使用的为grep还有awk,先做简单了解,awk功能十分强大,再此处仅做文本处理的介绍:

例:ip a | grep 'ens33' | awk 'NR==2 {print $2}' | awk -F'/' '{print $1}'

上边的例子是用来取虚拟机IP的。awk 命令中默认以一个空格为分隔符,可以使用-F指定分隔符,NR==2的意思是取文本内容的第二行, {print $2}意味截取指定分割符分割的第二列内容

在上面的实例中,还展示了一种文本分割截取的命令:cut

例:ip a | grep 'ens33' | awk 'NR==2 {print $2}' | cut -d'/' -f1

同样是截取ip。 cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

-d:指定分隔符,默认分隔符为‘Tab’(制表符)

-f:指定截取分割符分割的第几列内容

显示每个文件和目录的磁盘使用空间

du命令 也是查看使用空间的

du -s /usr #查看文件的大小
du -sh /usr #查看文件的大小,人性化显示

image-20240429175738465

du -h --max-depth=1 $dirname
显示目录下的一层所有文件的大小

image-20240429180024646

wc -w#统计单词数

wc -l #统计行号

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值