免费注册 查看新帖 |

Chinaunix

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

- -新手小菜鸟询问一个关于shell的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-05 08:16 |只看该作者 |倒序浏览
本帖最后由 luxuluxu1 于 2010-06-06 02:44 编辑

- - 我是个小菜鸟 最近刚学linux 遇到了一个关于shell的问题 - - 我上网查了好多好多资料都没有明确答案
我本来想查书籍来着 但是不知道查哪本书- - 很囧啊

因为刚学linux 老师什么也没教 就教了教怎么配置 现在在家又联系不上老师 我在做mysql的安装试验 里面有这么一个命令

shell> gunzip < mysql.tar.gz | tar -xvf -  
这个命令的功能 我是明白了 但是不太清楚这个命令为什么会实现这个功能 以及gunzip < mysql.tar.gz和gunzip mysql.tar.gz的具体区别在哪里

我上网查了好多资料 但是并没有给出详细的解释

-------------------------

查阅了一些资料后 没有得到明确的答案 我做了如下实验

1.我分别在控制台中输入了三个命令
一:shell> gunzip < mysql.tar.gz  
二:shell> gunzip -c mysql.tar.gz
三:shell> cat mysql.tar.gz | gunzip
得到的结果是一样的 解压后的数据都被直接显示到了控制台上面 而且显示内容是相同的


2.我又在控制台中输入了下面两个命令
一:shell> gunzip -c mysql.tar.gz > mysql.tar  
二:shell> cat mysql.tar.gz | gunzip >mysql1.tar
得到两个tar包 均可用tar命令解包 并且里面包含的文件是相同的

问题1:在shell> gunzip < mysql.tar.gz | tar -xvf - 命令中 shell> gunzip < mysql.tar.gz  标准输入被重定向到mysql.tar.gz
gunzip的工作步骤是1.根据文件名找寻mysql.tar.gz 2.对文件名对应的文件进行解压 (我这么理解对吗?)

在tar -xvf - 中 tar的标准输入被重定向到stdout中 而stdout中的内容对应的是解压后的数据 而tar直接对这些数据进行解包
相比之前的gunzip < mysql.tar.gz 通过文件名定位文件然后解压 要少一步  这是为什么?(难道tar命令能识别stdout中的这些字符是文件名还是数据吗?)


问题2:为什么gunzip < mysql.tar.gz  和gunzip  mysql.tar.gz的执行结果不一样

问题3:在网上查阅资料 内容如下
我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),
通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。
进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。


执行这条命令的时候 也是对应上面的标准吗?
shell> gunzip  mysql.tar.gz

论坛徽章:
0
2 [报告]
发表于 2010-06-05 10:41 |只看该作者
1.
1.根据文件名找寻mysql.tar.gz 2.对文件名对应的文件进行解压 (我这么理解对吗?)

不对
对这里的gunzip 来说,它根本不知道文件mysql.tar.gz的存在,shell读取了mysql.tar.gz的内容然后作为标准输入给了gunzip
相比之前的gunzip < mysql.tar.gz 通过文件名定位文件然后解压 要少一步  这是为什么?

没有理解你的问题
对于gunzip,标准输入是mysql.tar.gz的内容,输出通过管道给了下一条命令
对于tar,标准输入是前面gunzip < mysql.tar.gz的结果,也就是mysql.tar的内容,标准输出是你最后在屏幕上看到的

2. 没有为什么,这就是gunzip这个命令的行为,一个是有标准输入,无参数,一个是有参数,无标准输入

3. 不一定每条命令都必须有标准输入和输出,对于
gunzip  mysql.tar.gz
没有标准输入也没有标准输出

论坛徽章:
0
3 [报告]
发表于 2010-06-05 17:48 |只看该作者
相比之前的gunzip < mysql.tar.gz 通过文件名定位文件然后解压 要少一步  这是为什么?
以上- - 这句话的前提是
1.根据文件名找寻mysql.tar.gz 2.对文件名对应的文件进行解压 (我这么理解对吗?)
因为其前提我理解错误 所以这句话已经作废咯

谢谢楼上的回答
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP