管道和文件描述符
写在前面的话
在bash中一行执行多条命令,通常我们会这样 ls;pwd
或这样 (umask 077;openssl genrsa -out server.key 2048)
或这样 {ls;pwd}
在bash中把前一个命令的输出作为下一个命令的输入,通常我们会这样du -d2 /|sort -rn|head
上面的管道通过 |
来表示,如果希望创建一个命名的管道可以使用 mkfifo
命令
创建一个名为 pip1 的管道 mkfifo pip1
向管道中放入数据 echo "first line"> pip1
从管道中取出数据 【此时终端配当前指令占用,需要打开另一个终端】 cat pip1
使用文件描述符引用这个管道
sh-4.2# {mkfifo pip2;exec 7<>pip2}
sh-4.2# for ((i=1;i<10;i++));do echo $i;done >&7
sh-4.2# while true;do read -u7 a;echo $a;done
通过文件描述符创建一个消息队列,实现一个并发处理多任务的效果
#/bin/bash #Usage:sh $0 #Function: detect ip online or down and print online ip #version:1.0 #ip via read printf "\033[45m please input a ip like 192.168.0.1: \033[0m" #read -t 30 -p 'please input a ip like 192.168.0.1:' ip read -t 30 ip newip=`echo $ip|cut -d '.' -f1,2,3` #thread number fork_num=100 #mkfifo file tempfifo="my_temp_fifo" mkfifo ${tempfifo} #create filescripts exec 6<>${tempfifo} rm -f ${tempfifo} # [ -e /tmp/ping.log ] && rm -f /tmp/ping.log #echo >&6 for ((i=1;i<=${fork_num};i++)) do { echo } done >&6 # for num in `seq 1 255` do { read -u6 { ping -c 2 ${newip}.${num} >/dev/null 2>&1 if [ $? -eq 0 ];then echo "${newip}.${num} is online" >>/tmp/ping.log fi echo "" >&6 } & } done wait #print result to screen sort -t '.' -k 4n /tmp/ping.log printf '%s\t' 'online number:' echo -e "\033[41m `sort -t '.' -k 4n /tmp/ping.log|wc -l` \033[0m" #关闭6号输出和输入 exec 6>&- exec 6<&- rm -f /tmp/ping.log
>或1>
输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。
>>或1>>
追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。
<或<0 输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。
<<或<<0输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。
2> 错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。
2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
标准输入(stdin):代码为0,使用<或<<。
标准输出(stdout):代码为1,使用>或>>。正常的输出。
标准错误输出(sederr):代码为2,使用2>或2>>。
特殊:
2>&1就是把标准错误重定向到标准输出(>&)。
>/dev/null 2>&1
等价于 1>/dev/null 2>/dev/null
>/dev/null 2>&1
的作用
如果定时任务规范结尾不加 >/dev/null 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常(var/spool/clientmqueue邮件临时队列目录,垃圾文件存放于此,如果是centos 6.4系统,默认不装sendmail服务,所以不会有这个目录。)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示