首页 > 其他分享 >管道与重定向

管道与重定向

时间:2024-07-29 18:55:54浏览次数:16  
标签:输出 重定向 管道 home txt root localhost

文章目录

 

1.重定向

2.输出重定向

 3.输入重定向

3.1通过输入重定向创建文件:

4.管道

4.1 常用小命令

5.参数传递:xargs

总结

1.重定向

文件描述符:进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个数字标识。这个标识叫文件描述符。

进程使用文件描述符来管理打开的文件。

常用文件描述符:

0:标准输入(键盘)

1:标准正确输出

2:标准错误输出

3+:进程在执行过程中打开的其他文件

&:表示正确错误混合输出

2.输出重定向

输出重定向符号:> , >>

>:表示覆盖内容;

>>:表示追加内容;

1>, 1>>:表示正确输出,1可以省略

2>,2>>:表示错误输出

“ ; ”  是命令分隔符,表示命令间没有逻辑关系 

&&:表示上一条命令执行成功执行下一条指令,失败则不执行

 ||:与&含义相反

查看命令返回值:echo $?

 案例:

输出重定向(覆盖):

 date 1> date.txt  #正确输出--覆盖
# 注意:如果 > 前面什么都不加默认为1,标准正确输出。

 输出重定向(追加):

 date >> date.txt #正确输出--追加

错误输出重定向:(查看不存在的文件)

ls /home/  /aaaaaaaaa >list.txt 2>error.txt     #将输出的错误信息重定向到 error.txt 文件中,可以使用cat命令验证该文件中是否有返回的错误信息。

混合重定向:正确和错误都输入到相同的位置

ls /home/  /aaaaaaaaa &>list.txt  #混合输出到相同文件

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

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

ls /home/  /aaaaaaaaa &>/dev/null    #空设备,将正确与错误的输出丢掉

echo会将输入的内容送往标准输出(打印)
echo 内容 >> 文件名或脚本里面

将正确的输出当成错误的输出使用,将错误的输出当成正确的输出使用

例如:nginx -V 2>&1|  grep "version"

1>&2:将正确的放到错误的管道里
2>&1:将错误的放到正确的管道里

脚本中使用重定向:

一:没有使用重定向

[root@localhost home]# vim ping1.sh

编辑输入内容:

#!/bin/bash

ping -c1 10.35.154.251
if [ $? -eq 0 ];then
   echo "10.35.154.251 is up."
else
   echo "10.35.154.251 is down."
fi

[root@localhost home]# chmod +x ping1.sh   #更改ping1.sh的执行权限
[root@localhost home]# ./ping1.sh   #执行脚本文件

返回内容:
PING 10.35.154.251 (10.35.154.251) 56(84) bytes of data.
64 bytes from 10.35.154.251: icmp_seq=1 ttl=128 time=2.20 ms

--- 10.35.154.251 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.203/2.203/2.203/0.000 ms
10.35.154.251 is up.

二:使用重定向                                                          

[root@localhost home]# vim ping1.sh

编辑内容:

#!/bin/bash
ping -c1 10.35.154.251 &>/dev/null   #将ping的内容重定向到空设备
if [ $? -eq 0 ];then
   echo "10.35.154.251 is up."
else
   echo "10.35.154.251 is down."
fi                  

[root@localhost home]# ./ping1.sh

10.35.154.251 is up.

 3.输入重定向

标准输入: <   等价于 0<

3.1通过输入重定向创建文件:

cat > file <<EOF:是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。

语法:cat > file5 <<EOF    #可以写到脚本或者文件里面
EOF:开始和结束的标记,要成对使用,结尾的另一个EOF必须顶格写。

 案例1:

[root@localhost home]# cat >file4 <<EOF
> 111
> 222
> 333
> 444
> 555
> EOF

[root@localhost home]# cat file4
111
222
333
444
555

案例2:

利用重定向建立多行的文件 脚本创建多行文件

[root@localhost home]# vim create_file.sh
#!/bin/bash
cat >file200.txt <<EOF
111
222
333
yyy
ccc
EOF
[root@localhost home]# chmod +x create_file.sh 
[root@localhost home]# ./create_file.sh 
[root@localhost home]# cat file200.txt 
111
222
333
yyy
ccc

4.管道

用法:command1 | command2 |command3 |...

案例:

查询所有安装的软件包(使用rpm命令查询软件包),过滤包含httpd的包:

[root@localhost opt]# rpm -qa  |grep 'httpd'

4.1 常用小命令

tee:将文本同时输出到屏幕和命令中指定的文件中

例如:echo "hello" | tee hello.txt    #将hello打印到屏幕上,同时在当前目录下生成hello.txt文件,该文件中也包含“hello”

 sort:排序

例如:

sort -t: -k3 -n /ec/passwd   #将/etc/passwd文件中,以分隔符为‘ : ’的第三列内容按照升序排列

 sort -t: -k3 -nr /ec/passwd   #将/etc/passwd文件中,以分隔符为‘ : ’的第三列内容按照降序排列

' -t: ' :表示分隔符是' : ',-k3:表示以分隔符:分开的第三行,-n:表示升序,-nr:表示降序

-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行

awk:处理文本的命令,单位是行

案例:

netstat  -nplt |  awk 'NR==4'        #查找端口,显示第四行内容

 netstat  -nplt |  awk 'NR==4' {print $4}        #查找端口,显示第四行以空格为分隔符的第四个内容

netstat -nplt | awk 'NR==4 {print $4}' | awk -F ":" '{print $2}'        #显示该命令第四行以空格为分隔符的第四个内容中,以“ : ”为分隔符的第二个内容。

 netstat -nplt | awk 'NR==4 {print $4}' | cut -d: -f2         #同上一条命令,显示该命令第四行以空格为分隔符的第四个内容中,以“ : ”为分隔符的第二个内容

cut:表示切割

-d:指定分隔符

-f:指定列数

-f3-:第3列以后的所有列

du -h /etc/   #查看 /etc 及目录中的文件大小

du -sh /etc/  #查看目录的总大小

du -h --max -deptn=1 /etc        #只显示/etc目录下的一层

ls /etc/ | wc -l #查看目录中有多少个文件

ls /etc/ | wc -w         #查看目录中有多少个单词(单词以空格隔开)

5.参数传递:xargs

语法:
 cat a.txt | xargs  -i cp {} /目录  
 {}:前面传过来的内容
 -i :为了让大括号生效
 复制目录时加  -r
 解释:将前面传过来的东西交给大括号

案例:

[root@localhost ~]# touch /home/file{1..5}
[root@localhost ~]#  vim files.txt

/home/file1
/home/file2
/home/file3 
/home/file4
/home/file5
[root@localhost ~]#  cat files.txt |ls -l

[root@localhost ~]# cat files.txt |rm -rvf        #不加xargs传参,看输出结果

使用xargs传参:

[root@localhost ~]# touch /home/file{1..5}

[root@localhost ~]# cat files.txt | xargs -i cp -rvf {} /tmp/
"/home/file1" -> "/tmp/file1"
"/home/file2" -> "/tmp/file2"
"/home/file3" -> "/tmp/file3"
"/home/file4" -> "/tmp/file4"
"/home/file5" -> "/tmp/file5"

总结

本篇内容介绍了管道、重定向、参数传递和常用的小命令

标签:输出,重定向,管道,home,txt,root,localhost
From: https://blog.csdn.net/weixin_64502313/article/details/140645438

相关文章

  • Redis中pipeline(管道)详解
    redis管道pipeline举个例子:小卖铺免费让你拿50瓶饮料,你是一次拿一瓶拿回家,还是打包一次或者多次拿回家?概念Redis管道(pipelining)是一种在客户端向服务端发送多个请求而不等待响应的技术。它可以显著提高Redis应用程序的性能。管道的主要思想是客户端向服务端发送多个请求......
  • Redis(三)事务、管道、主从复制
    事务事务是可以执行一个命令,也可以执行多个命令,事务本质上是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化地执行而不会被其他命令插入Redis事务和传统数据库的区别单独的隔离操作:Redis的事务仅仅是保证事务里面的操作会被连续独占的执行,redis命令的执行......
  • 【C# 】Pipe管道通信使用
    管道通信        管道通信(PipeCommunication)可以用来在两个或多个进程之间传递数据。        管道可以是匿名的也可以是有名的,有名管道允许不同进程间的通信,而匿名管道通常用于父子进程之间的通信。    详细参考pipe管道通信原理_核间通信pipe通信......
  • 如何使用 LangChain 查看 MultiQueryRetriever 管道中的最终提示?
    我目前正在使用LangChain库开展一个项目,我想从向量数据库中检索相关文档,然后使用OllamaLLM根据这些文档生成答案。以下是我当前的实现:importlogginglogging.basicConfig()logging.getLogger("langchain.retrievers.multi_query").setLevel(logging.INFO)#Defin......
  • 管道与重定向
    一.重定向标准输入:0标准正确输出:1标准错误输出:2&表示将正确的和错误的混合输出二.输出重定向> ----覆盖>> ----追加正确输出:1>1>>等价于>>>错误输出:2>2>>;  命令分割符&&  上一条命令执行失败,不会进行下一条命令||    上一条命令执行......
  • django OAuth 工具包未获取重定向 URI
    我正在使用DjangoOAuth工具包并使用以下代码进行OAuth实现Application=get_application_model()defoauth_login(request):app=Application.objects.get(name="App")#redirect_uri=request.GET.get("redirect_uri","http://test.com:8000/ca......
  • Stripe 集成未重定向至付款
    我正在将前端应用程序与Stripe集成以进行付款处理。我正在遵循快速入门文档,并且几乎一切正常,但是我没有被自动重定向。我确实得到了一个包含链接的成功响应,因此从响应中提取该链接不会太困难。但是,如果这不是预期的实现,我不想这样做。我的后端:@app.post('/create-che......
  • 支付会话过期和重定向失败
    谁能帮我解决这个问题吗?我在结帐过程中遇到问题,付款会话URL在几分钟内过期,显示错误消息“此链接已过期。这意味着您的付款已被处理或您的会话已过期。”因此,客户在成功付款后不会被重定向到所提供的success_url,从而造成混乱并导致退款请求。constsession=awaitstri......
  • C++ printf/std::cout如何重定向到日志文件中
    在C++中,可以使用标准库中的头文件提供的ofstream类来打开文件,并使用std::freopen函数将stdout重定向到该文件。以下是一个示例代码,展示如何将printf输出重定向到日志文件中:#include<cstdio>#include<fstream>intmain(){std::ofstreamlogFile("log.txt",std::ios:......
  • 转发与重定向(超详细)
    转发与重定向(超详细)文章目录转发与重定向(超详细)一、概念转发重定向二、特点转发的特点重定向的特点三、转发与重定向使用转发的使用重定向的使用四、转发与重定向的区别一、概念在Web开发中,转发(Forward)和重定向(Redirect)是两种常用的请求处理方式,它们用于将客户......