管道文件和i/o文件用途

author author     2022-09-07     767

关键词:

mknod pipe1 p与exec 8 pipe1指令合用,实现自动telnet功能

mknod pipe1 p与exec 8 pipe1指令合用,实现自动telnet功能

#vi autologin.sh

mknod pipe1 p
exec 8<>pipe1 I/O文件与前面建立的管道用<>符号连接到一起 

telnet 192.168.1.12 <&8 &
要求其输入重定向到 I/O文件&8
(引用I/O文件都要用&)
特殊要求:此程序必须在后台执行,否则后面的指令会
处于“等待”状态,因为 shell是顺序执行指令的
后台执行&实际是实现并行处理

sleep 1
echo macg > pipe1 用户名
sleep 1 要求指令输入之间要有间隔,用sleep sec 调整,
                    因为主机或ROUTER都有响应时间.
echo 008421 > pipe1 口令
sleep 1
echo "ls -l" > pipe1 指令
sleep 1
echo "exit" > pipe1
执行结果
$ sh autologin.sh
Trying 192.168.1.12...
Connected to www.macg.com.1.168.192.in-addr.arpa (192.168.1.12).
Escape character is ‘^]‘.
Fedora Core release 4 (Stentz)
Kernel 2.6.11-1.1369_FC4 on an i686
login: macg
Password:
Last login: Thu Jan 21 00:37:36 from 192.168.1.11
ls -l
[[email protected] ~]$ ls -l
total 64
drwxrwxr-x 2 macg macg 4096 Dec 3 2006 bigtest
drwxr-xr-x 2 macg macg 4096 Jan 3 10:02 Desktop
drwxrwxr-x 2 macg macg 4096 Jan 17 05:28 filetmp
drwxrwxr-x 2 macg macg 4096 Dec 15 2006 mysqltmp
[[email protected] ~]$ Connection closed by foreign host.
[[email protected] tiptest]$ exit
logout

Connection closed by foreign host.

自动telnet cisco路由器 并执行几个show命令

$ vi cisco.sh
#!/bin/bash

if (( $# != 2 )); then
echo "usage: $0 host enablepasswd"
exit 1
fi
host=$1
enablepasswd=$2

mknod pipe1 p

exec 8 <> pipe1

telnet 192.168.1.12 <&8 >output & 输入和输出都重定向
tail -f $outputfile &   将输出反显回屏幕
command=enable
sleep 1
echo $command >> pipe1
sleep 1
echo $enablepasswd >> pipe1

command="show ip int brief"
sleep 1
echo $command >> pipe1

command="show ip route"
sleep 1
echo $command >> pipe1

sleep 1
command="exit"
echo $command >> pipe1
$ sh cisco.sh 192.168.1.150 cisco
Trying 192.168.1.150...
Connected to 192.168.1.150 (192.168.1.150).
Escape character is ‘^]‘.
r5-2509> echo enable
Password:
r5-2509#show ip int brief
Interface IP-Address OK? Method Status Protocol
Ethernet0 192.168.1.150 YES NVRAM up up 
Serial0 135.7.35.5 YES NVRAM up down 
Serial1 192.4.7.1 YES NVRAM up up 
r5-2509#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 0.0.0.0 to network 0.0.0.0

C 192.4.7.0/24 is directly connected, Serial1
C 192.168.1.0/24 is directly connected, Ethernet0
S* 0.0.0.0/0 is directly connected, Ethernet0
r5-2509exit
[[email protected] ~]$ Connection closed by foreign host.
Exit


上边script的缺陷,tail -f file & 语句忘记关闭了,所以多次运行script后,会出现多个进程
[[email protected] ~]$ ps -ef | grep "tail -f out"
macg 3678 1 0 21:27 pts/1 00:00:00 tail -f out
macg 3712 1 0 21:29 pts/1 00:00:00 tail -f out
macg 3729 1 0 21:29 pts/1 00:00:00 tail -f out
macg 3770 3645 0 21:33 pts/1 00:00:00 grep tail -f out
解决办法一。用pgrep,pkill

[[email protected] tiptest]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
。。。
macg 3911 3876 0 01:16 pts/1 00:00:00 tail -f output

[[email protected] tiptest]$ pkill tail
   

解决办法二。用ps –ef获取,然后通过gawk摘出来

com=$(ps -ef | grep "tail -f out" | gawk -F" " ‘{ print $2 }‘)
if [ -f tmp ]
then
rm tmp
fi
echo $com > tmp

com1=$(gawk -F" " ‘{ print $1 }‘ tmp)
com2=$(gawk -F" " ‘{ print $2 }‘ tmp)
com3=$(gawk -F" " ‘{ print $3 }‘ tmp)
kill $com1 >/tmp/null 2>&1
kill $com2 >/tmp/null 2>&1
kill $com3 >/tmp/null 2>&1   


计划任务定期清空memcache数据。

#!/bin/bash

. /root/.bash_profile

PIPE_FILE=/root/shell/tmp_in

PORT=(11211 11212 11213 11214 11215 11216 11217)

if [ -e ${PIPE_FILE} ] ; then

rm  ${PIPE_FILE} -rf 

fi

#创建管道文件

/bin/mknod ${PIPE_FILE} p

#填写一个标识符

exec 8<> ${PIPE_FILE}

for i in ${PORT[*]} 

do

#判断端口是否存在

/bin/netstat -tnlp | /bin/grep ${i} >> /dev/null

#clean memcached data 

if [ $? == "0" ] ; then

telnet 127.0.0.1 ${i} <&8 & 

echo "stats reset" >> ${PIPE_FILE}

sleep 1 

echo -e "35quit" >> ${PIPE_FILE}

fi

done

 

   


本文出自 “梦想照进现实” 博客,请务必保留此出处http://lookingdream.blog.51cto.com/5177800/1946397

标准i/o和管道(代码片段)

标准I/O和管道>重定向操作符>,>>还能创建新文件>覆盖>>追加set-C禁止将内容覆盖已有文件,但可追加(相当于一个开关)>|file强制覆盖set+C允许覆盖1>标准输出重定向到一个文件里面2>标准错误重定向到一个文... 查看详情

标准i/o和管道

....三种I/O设备二.把I/O重定向入文件三.tr命令的使用四.使用管道链接命令五.tee命令的使用三种I/O设备(1)标准输入和输出程序:指令+数据a.指令:决定了功能是什么数据:b.读入数据:input输出数据:output(2)打开的文件都由一个(3)Linu... 查看详情

标准i/o和管道(代码片段)

3月14日标准I/O和管道1.在linux里每打开一个文件,就会响应开启一个文件描述符(fd)例:打开/var/log/message[[email protected]data]#tail-f/var/log/messagesMar1120:37:36centos7NetworkManager[6246]:<info>[1552307856.6123]dhcp4(ens33 查看详情

标准i/o重定向和管道(代码片段)

一级标题标准I/o重定向和管道二级标题三种I/o设备1.标准输入和输出程序:指令+数据读入数据input输出数据output标准输入---0(默认接收来自终端窗口的输入)标准输出---1(默认输出到终端窗口)标准错误---2(默认输出到终端窗口)二级... 查看详情

标准io和管道

标准I/O和管道##一,标准输入和输出##程序:指令+数据读入数据:Input输出数据:Output打开的文件都有一个fd:filedescriptor(文件描述符)Linux给程序提供三种I/O设备标准输入(STDIN)-0默认接受来自键盘的输入标准输出(STDOUT)-1默... 查看详情

标准i/o和管道

1、标准输入和输出1>程序:指令+数据(指令服务于数据)  读入数据:input  输出数据:output2>三种I/O设备  Linux给程序提供三种I/O设备    标准输入(STDIN)-0默认接受来自键盘的输入    标准输出(STDOUT)-... 查看详情

标准i/o与管道;用户组和权限;文件处理工具及正则表达式总结

四、标准I/O与管道标准输入和输出程序:指令+数据读入数据:Input输出数据:Output?打开的文件都有一个fd:filedescriptor(文件描述符)?Linux给程序提供三种I/O设备?标准输入(STDIN)-0默认接受来自键盘的输入?标准输出(STDOUT)-1默... 查看详情

第四章标准i/o和管道

笔记整体起始时间:2018年4月2日18:55:25 本章内容       三种I/O设备       把I/O重定向至文件       使用管道 标准输入和输出&nbs 查看详情

使用管道将文件 i/o 传输到另一个进程

】使用管道将文件i/o传输到另一个进程【英文标题】:usingpipestochannelfilei/otoanotherprocess【发布时间】:2011-03-1219:44:17【问题描述】:刚开始学习/使用管道,想知道如何将应用程序的文件输出路由到管道中,以便另一个应用程序... 查看详情

标准io重定向和管道(代码片段)

标准I/O重定向和管道1标准输入和输出程序:指令+数据读入数据:Input输出数据:Output打开的文件都有一个fd:filedescriptor(文件描述符)Linux给程序提供三种I/O设备标准输入(STDIN)-0默认接受来自终端窗口的输入标准输出(STDOUT)-1... 查看详情

linux——标准i/o以及管道

标准I/O以及管道目录一、什么是I/O二、什么是管道三、三种I/O设备四、把I/O输出错误重定向入文件五、tr六、从文件中导入STDIN七、使用管道链接命令八、tee一、什么是I/O    I/O(input/output),即输入/输出端口。&nbs... 查看详情

10标准i/o输入输出重定向及管道

标准输入及输出linux提供三种I/O设备标准输入stdin-0默认接受来自终端的输入标准输出stdout-1默认输出到终端窗口标准错误stderr-2默认输出到终端窗口I/O重定向redirectI/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的... 查看详情

i/o重定向及管道(代码片段)

打开的文件都有一个fd:filedescriptor(文件描述符)标准输入:keyborad,0标准输出:monitor,1标准错误输出:monitor,2I/O重定向:改变标准位置输出重定向:COMMAND>NEW_POS,COMMAND>>NEW_POS:覆盖重定向,目标文件中的原有文件内... 查看详情

apue第14章高级i/o

...以使进程永远阻塞的一类系统调用如果某些文件类型(读管道、终端设备和网络设备)的数据并不存在,读操作可能会使调用者永远阻塞如果数据不能被相同的文件类型立即接受(管道中无空间、网络流控制)。写操作可能会使调用... 查看详情

第五章linux重定向和管道

重定向和管道标准输入和输出:程序:指令+数据读入数据:Input输出数据:Output打开的文件都有一个fd:filedescriptor(文件描述符)Linux给程序提供三种I/O设备标准输入(STDIN)-0默认接受来自键盘的输入标准输出(STDOUT)-1默认输... 查看详情

随堂练习bashshell特性和i/o重定向及管道

history 命令语法格式history[-e][-doffset][n]orhistory-anrw[filename]orhistory-psarg[arg...]选项      说明-c      表示清空历史命令-d,offset  删除历史中指定的第offset个命令n       显示最近的n条历史-a    ... 查看详情

命名管道fifo

1.可以在任意进程(不需要有关系)中进行通信;2.管道本质是内核中的一块缓存;3.FIFO在文件系统中存在一个管道文件,管道文件也是和内核中的缓存同步的,是指向文件的路径;4.命令管道默认是阻塞型;5.对FIFO的操作跟普通... 查看详情

SideInput I/O 会影响性能

...413:59:21【问题描述】:我正在使用PythonSDK2.15.0构建数据流管道。在此管道中,我需要在管道的多个阶段将附加数据连接到每个元素。所有这些额外数据都是从GoogleCloudStorage上的avro文件(Dataflow和GCS存储桶使用的同一区域)中读取... 查看详情