免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4149 | 回复: 12
打印 上一主题 下一主题

望哪位DX给咱们讲讲管道文件的实用的使用方法!!!  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-28 11:55 |只看该作者 |倒序浏览
近来对管道文件感兴趣,在网上搜了搜都是compress命令组合使用的,哪位DX给我们介绍一下tar或gzip与管道文件组合使用的实用方法吧!!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-28 12:46 |只看该作者
ex:
find |tar cf file.tar * #用find找出需要的文件再打包

论坛徽章:
0
3 [报告]
发表于 2005-11-28 15:57 |只看该作者
管道文件,不是管道
类似用mknod mypipe p命令创建的一种linux 特殊文件。
我网上找了一下好像讲的不多……^_^!!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-11-28 16:02 |只看该作者
原帖由 roscoe 于 2005-11-28 15:57 发表
管道文件,不是管道
类似用mknod mypipe p命令创建的一种linux 特殊文件。
我网上找了一下好像讲的不多……^_^!!

sorry

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2005-11-28 16:05 |只看该作者
mknod mypipe p
for((i=0;i<15;i++)) ;do echo $i; sleep 1;done>mypipe &
cat <mypipe

不知道有什么可讲的?

论坛徽章:
0
6 [报告]
发表于 2005-11-28 17:33 |只看该作者
网上找了一篇:

  大多数Oracle效用,比如导出,导入和SQL*装入程序,但是我们通常会直接使用标准的输入和输出。这个是UNIX 的一个问题,因为大多数时候UNIX都默认或者通过特殊选择允许你使用标准的输入或者输出。
  
  为了接受标准的输入输出,允许你使用链式命令,比如:
  
  tar cvf - dir | gzip > file.tar.gz
  gunzip < file.tar.gz | tar -xvf –
  
  这些命令不需要中介文件因为管道的读或者写数据都在不同的线程中。
  
  一个管道事实上只是一个记忆的缓冲器,它接受两个不同进程的读写,这两个进程允许它们从前到后的传送数据。记忆缓冲器通常会限制大小;当它满的时候它会阻止写进程,当它空的时候,它回限制读进程。
  
  它们的优势就是永远不会把内存使用光也不会需要任何磁盘存储。当你没有空间存储非压缩版本的时候,上面的例子将允许你存储一个文档的压缩版本。
  
  Oracle的导出和导入不能直接引用标准的输出和输入。但是,一个命名的小窍门允许你完成这个命令。一个命名的管道是一个UNIX文件的操作它影射到操作系统的管道中。
  
  为了创造命名管道,你可以使用p选项来执行mknod命令。习惯上我们可以这么写:mknod -p <pipename>;另外,在Linux中,我们这么书写:mknod <pipename> p.大多数的系统效用中,管道的结果就好像顺序文件,比如,压缩用户的导出文件:
  
  mknod /tmp/mypipe p
  exp userid=scott/tiger file=/tmp/mypipe &
  gzip < /tmp/mypipe > exp.dat.gz
  rm /tmp/mypipe
  
  根据我的测试,压缩导出文件只是普通大小的八分之一:
  
  mknod /tmp/mypipe p
  imp userid=scott/tiger file=/tmp/mypipe &
  gunzip < exp.dat.gz > /tmp/mypipe
  rm /tmp/mypipe
  
  SQL*的装载程序是另外一个效用,它可以使用这个技巧。SQL*装入程序可以接受输入输出的数据。比如,你可以创建一个表格捕获输出:
  
  drop table lsout;
  create table lsout
  (
    attrs    char(10),
    links    integer,
    owner    varchar2(,
    grpname   varchar2(,
    filesize  integer,
    crdate   date,
    filename  varchar2(256)
  );
  
  为了检测输出,可以使用SQL*装入程序控制文件:
  
  load data
  truncate
  into table lsout
  (
    attrs    position(01:10),
    links    position(12:15),
    owner    position(17:24),
    grpname   position(26:34),
    filesize  position(36:42),
    crdate   position(44:55) DATE "Mon DD HH24:MI",
    filename  position(57:300)
  )
  
  现在,创建一个命名管道,在背景线程中创建SQL*装入程序:
  
  #!/bin/csh
  mknod /tmp/mypipe p
  sqlldr userid=scott/tiger control=lsout.ctl data=/tmp/mypipe skip=1 &
  ls -l > /tmp/mypipe
  wait
  cat lsout.log
  rm /tmp/mypipe
  
  SQL*装入程序可以装入一个文件到CLOB中,因为命名管道就好像是文件一样,你可以定义命名管道的名字来代替一个文件名并装入输出管道到数据库的CLOB中。
  
  下面来看个例子:
  
  create table xml_repository(doc clob);
  
  现在,你需要创建SQL*装入程序来控制文件:
  
  load data infile *
  truncate into table xml_repository
  fields terminated by whitespace
  (
    pipe filler,
    doc lobfile(pipe) terminated by eof
  )
  begindata
  /tmp/mypipe
  
  为了更详细的展示这个技术,这里有一个简单的脚本。这个脚本将把最新的文档进行命名:
  
  #!/bin/csh
  mknod /tmp/mypipe p
  wget NOTRACK http://myrss.com/f/c/n/cnnGf9z390.rss -O /tmp/mypipe &
  sqlldr userid=scott/tiger control=xmlload.ctl
  cat xmlload.log
  rm /tmp/mypipe
  
  一旦XML文档在CLOB中,你可以使用任何新的XML导航函数。你可以利用它来做其他的工作。

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
7 [报告]
发表于 2005-11-28 23:14 |只看该作者
原帖由 roscoe 于 2005-11-28 17:33 发表
比如,压缩用户的导出文件:
  
  mknod /tmp/mypipe p
  exp userid=scott/tiger file=/tmp/mypipe &
  gzip < /tmp/mypipe > exp.dat.gz
  rm /tmp/mypipe
  
  根据我的测试,压缩导出文件只是普通大小的八分之一:
  
  mknod /tmp/mypipe p
  imp userid=scott/tiger file=/tmp/mypipe &
  gunzip < exp.dat.gz > /tmp/mypipe
  rm /tmp/mypipe  

如果用bash可以这样处理(未测试)

  1. 导出
  2. exp userid=scott/tiger file=>(gzip >exp.dat.gz)
  3. 导入
  4. imp userid=scott/tiger file=<(gunzip <exp.dat.gz)
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-11-28 23:40 |只看该作者
原帖由 r2007 于 2005-11-28 23:14 发表

如果用bash可以这样处理(未测试)

  1. 导出
  2. exp userid=scott/tiger file=>(gzip >exp.dat.gz)
  3. 导入
  4. imp userid=scott/tiger file=<(gunzip <exp.dat.gz)
复制代码

r2007兄当初讨论管道问题,让我受益颇多~~   那篇精彩的文章至今我还保存着呢

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
9 [报告]
发表于 2005-11-28 23:54 |只看该作者
当初不能忍受教主的语气,为了斗嘴着实下了不少功夫,不过现在真有点挂念教主

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-11-29 00:30 |只看该作者
[quote]原帖由 r2007 于 2005-11-28 23:54 发表
当初不能忍受教主的语气,为了斗嘴着实下了不少功夫,不过现在真有点挂念教主 [/quo]
惺惺相惜嘛 ~~~`,据说教主去了广东的linux公共服务中心(?)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP