LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 705|回复: 1

新手请教一个shell问题

[复制链接]
发表于 2010-6-5 04:18:06 | 显示全部楼层 |阅读模式
小弟最近刚学linux  - -遇到一个小问题 还请各位大侠帮忙解决
- - 这个问题我翻阅了很多资料 但是都没办法解决 无奈只好来论坛求助

在linux上安装mysql的时候遇到这么一个命令

shell> gunzip < mysql.tar.gz | tar -xvf -
这命令的意思是 gunzip解压mysql.tar.gz 解压后的编码直接显示到控制台上 而且不对原压缩包进行任何改动 并且把gunzip < mysql.tar.gz 输出作为 tar -xvf -的输入对该编码进行解压包操作

- - 我的语言表达能力有点差劲 还请见谅

一开始我不明白 gunzip < mysql.tar.gz的含义 就单独在控制台运行了一次 得到得结果是一些莫名其妙的数字 经过对比我发现和gunzip -c mysql.tar.gz的结果是一样的(我不知道他们的工作流程是

否相同)然后我把gunzip -c mysql.tar.gz输出重定向一下 得到一个文件 这个文件是一个解压后的包 可以用tar解包

而tar -xvf -的含义是把标准输出作为操作对象来进行解包

- - 以上内容我说的没有错吧

问题1:标准输入的作用是用来干嘛的?标准输出又是用来干嘛的?(也就是他们的作用)

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

问题3: gunzip < mysql.tar.gz 的标准输入被重定向为mysql.tar.gz
gunzip是通过mysql.tar.gz这个文件名寻找到文件的 对吗? 为什么解压后的数据被作为标准输出直接显示到屏幕上了?而不是像gunzip mysql.tar.gz那样什么也不显示?

问题4: gunzip mysql.tar.gz 的标准输出结果也是显示到屏幕的是这样吗? 只不过他的输出内容为空对吗?

问题5:tar -xvf -的含义是把标准输出作为操作对象来进行解包 为什么他直接能对解压后的编码进行操作? 在问题3中gunzip < mysql.tar.gz   gunzip通过mysql.tar.gz查找到操作对象 然后再对操

作对象进行解压 这是两个步骤  而tar -xvf -直接就对编码进行操作 这是一个步骤 为什么同样是从标准输入来定位操作对象 步骤却有差别?
发表于 2010-6-14 02:57:04 | 显示全部楼层
我也是新手。不过对于你的问题可以简单说一下我的看法。

我说的不一定对, 都是我个人理解, 真正的含义只有查手册了。
我希望的理解能 为你学习带来便利。

问题1:标准输入的作用是用来干嘛的?标准输出又是用来干嘛的?(也就是他们的作用)

输入输出, 这个是交互必须得。 命令行界面 默认的标准输入时键盘,标准输出是显示器。 管道操作可以改变这些。 键盘和显示器 就是命令行界面于系统交互的环境。
如果不需要交互。 那他们就没有什么用了。


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

其实这是一个命令行。 但执行的命令不同。 第一执行了一个命令。 mysql.tar.gz是作为gunzip 命令的一个参数传递给它使用的。 至于 gunzip 得到这个参数后干什么。 那时 gunzip 命令能管理的事。
第二个 其实是有一个管道操作的。 < 是一个管道符,标准输入的重定向。 这个命令行代表的只是执行了一个命令 gunzip ,并且没有给任何参数, 这个命令需要一个输入, 如果没有后面的 < 那么他会等待用户 键盘输入作为标准输入, 如果有 从定向输入 < ,那么就把它指示的文件作为输入, 也就是说。 mysql.tar.gz 是gunzip 的输入。 "<" 输入重定向。


问题3: gunzip < mysql.tar.gz 的标准输入被重定向为mysql.tar.gz
gunzip是通过mysql.tar.gz这个文件名寻找到文件的 对吗? 为什么解压后的数据被作为标准输出直接显示到屏幕上了?而不是像gunzip mysql.tar.gz那样什么也不显示?

这个问题 你能理解上个问题就能理解这个了。
头一个命令 gunzip 有一个参数 ,第二个命令 没有这个参数, 就是这个参数的差异,造成了屏幕的输出的差别。


问题4: gunzip mysql.tar.gz 的标准输出结果也是显示到屏幕的是这样吗? 只不过他的输出内容为空对吗?

可以这么理解。


问题5:tar -xvf -的含义是把标准输出作为操作对象来进行解包 为什么他直接能对解压后的编码进行操作? 在问题3中gunzip < mysql.tar.gz gunzip通过mysql.tar.gz查找到操作对象 然后再对操

tar - xvf 这个用来吧 tar 格式文件解包的。
如果没有 给出文件,那么就等待标准输入给出文件内容。
gunzip < mysql.tar.gz 他其实是执行了一个 gunzip 命令,这个命令也需要一个输入文件内容, 不过 "<mysql.tar.gz" 就是告诉gunzip , 把 mysql.tar.gz 内容作为标准输入的内容。


作对象进行解压 这是两个步骤 而tar -xvf -直接就对编码进行操作 这是一个步骤 为什么同样是从标准输入来定位操作对象 步骤却有差别?

方式不同。 效果一样

tar.gz 文件其实就是先打包成 tar 格式,然后 gunzip 压缩

现在的 tar 命令可以自动调用 gunzip
tar zxvf mysql.tar.gz 这样就自动调用 gunzip 来解压并 解包。
还可以 gunzip mysql.tar.gz |tar - xvf
你甚至可以这样 zcat mysql.tar.gz |tar - xvf
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表