管道文件和I/O文件用途

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 "\035quit" >> ${PIPE_FILE}

fi

done

时间: 2024-12-26 21:14:56

管道文件和I/O文件用途的相关文章

Linux查找多个类似但是不同名的文件并且重命名

这个题目据说是百度一面的面试题,Linux题:查找以core.1,core.2....形式命名的文件,然后将这些文件名改成bak.core.1,bak.core.2,...... 首先应该找到这些文件,使用 find . -name "core.[0-9]" -print   ,可以找到: find的使用方法: 1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参

Linux 常用查找文件或者文件内容

举例树形图 .|-- test_dir| `-- dir_test_doc.text|-- test_dir2| |-- dir2_test_doc.txt| `-- dir2_test_doc2.txt|-- test_doc1.text`-- test_doc2.txt 2 directories, 5 files 1.查找文件内容的行: grep  "被查找的字符串"  文件名 例如: [[email protected] demo]# grep "doc1_conte

Linux文件知识基础

文件所有者,用户组,其他用户? 在Linux中,任何一个文件都具有User,Group及Others三种身份的个别权限. User就是本文件的拥有者. Group当前用户所在的组. Ohters其他人. 2.Linux文件属性 示例如下:drwxr-xrwx 1.文件类型 -表示常规文件 d表示目录文件 c表示字符设备文件 b表示块设备文件 s表示管道文件 l表示链接文件 2.文件存取权限 r表示可读,w表示可写,x表示可执行文件(顺序不能乱) 3位一组,分别代表为文件拥有者,用户所在组,其他用

文件权限

文件的权限 当运行如下命令时: [[email protected] ~]# ll /etc/passwd 出现下面结果: -rw-r--r--. 1 root root 1933 May 19 11:14 /etc/passwd 解释如下: 1)- 代表文件类型 -:普通文件 d:目录文件 l:软连接文件 s:套接字文件 p:管道文件 c:字符设备文件 无缓存,顺序访问 b:块设备文件 有缓存,随机访问 2)rw-r--r-- 代表文件的权限 能使用此文件的用户分为三类,属主,属组的用户和其他

Linux学习日志--文件处理命令

1.用户的分类以及su 切换用户的用法. 1):超级用户用#标识,普通用户用$标识. 2):用户之间的切换 ,假设我们有一个hahaha的用户,从root->hahaha用户的切换 要用到su  hahaha命令,从hahaha->root的转换,只需su 就可以了. 2.添加用户(problem) useradd  user1 这个命令实现的是增加user1用户的功能 3.设置密码(problem) 4.查找文件或者目录 ls [选项][文件或者目录] 1)选项 -a 就是显现所有的文件,包

Linux下如何判断文件类型

在Linux下总共有7种文件类型,分别为: 普通文件(-) 目录文件(d), 软链接文件(l)=快捷方式, 块设备文件,二进制文件(b)   字符设备文件(c) 套接字文件(s) 管道文件(p) 其中常用的文件类型为:普通文件,目录文件和软链接文件 系统特殊文件类型为:块设备文件,字符设备文件,套接字文件,管道文件. 如何判断文件类型? 在当前目录下使用命令: ls -l,即可列出该目录下的所有文件,其第一列的第一个字母就包含了该文件的文件类型: 其第一列的长度为10位,除去第一位用于表示文件类

find结合rm删除大量文件

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://navarro.blogbus.com/logs/31502374.html 例:删除/home/raven下,包括子目录里所有名为abc.txt的文件: find /home/raven -name abc.txt | xargs rm -rf 如果不使用xargs,则为: find /home/raven -name abc.txt -exec rm -fv {} \; 另外搜到一篇linuxsir上的文章很详细的

linux管理目录文件命令总结

一.文件和目录管理常用命令 目录操作命令:pwd.cd.ls.mkdir.du. 文件操作命令: touch.file.cp.rm.mv.which.find.ln 文件内容操作命令: cat.more.less.head.tail.wc.grep 归档及压缩命令: gzip.bzip2.tar 因为在linux系统中目录属于一种特殊文件,所以许多对文件进行操作的命令对目录也同样适用. 二.命令具体用法 1.pwd命令 用途:查看工作目录 使用方法:直接在命令行下输入pwd .pwd命令一般单独

linux查找文件夹下的全部文件里是否含有某个字符串

查找文件夹下的全部文件里是否含有某个字符串 find .|xargs grep -ri "IBM" 查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称 find .|xargs grep -ri "IBM" -l 1.正則表達式 (1)正則表達式一般用来描写叙述文本模式的特殊使用方法,由普通字符(比如字符a-z)以及特殊字符(称为元字符.如/.*.?等)组成. (2)基本元字符集及其含义 ^ :仅仅匹配行首. 如^a 匹配以a开头的行abc,a2e,