大家好!
我在看关于SHELL编程的书看到了,转向的章节有点看不懂了,
0是标准输出,1是标准输入,2是标准输出。fd代表文件代码
那文件代码是干什么的。有哪些代码呢??
开启文件 fd<>文件 怎么开启,在什么地方开启呢??开启怎么输入呢??
请教关于bash中的转向问题
-
- 帖子: 1
- 注册时间: 2010-12-28 19:32
-
- 帖子: 482
- 注册时间: 2013-09-13 0:42
- 系统: Debian sid
Re: 请教关于bash中的转向问题
fd - 在C语言中通常代表file descriptor, "文件代码" 这个名字我是第一次听说.
终端里, 主要就是管道与重定向有一点不好理解, 但只用多用几次, 问题不大.
0 - 标准输入, 向终端里敲字符
1 - 标准输出, 比如在终端里: $ echo 'Hello, World!' 就会打印出Hello, World.
2 - 错误输出, 程序运行出错, 是很常见的问题, 为了区别正常输出流, 才引入了错误输出. 比如你输命令时, 可能少了一个选项, 没办运行, 这时会提示你你输入有误, 然后打印出一些帮助信息, 并退出.
这是从上个世纪遗留下来的用法, 当时还是大型机时代, 我们可以这样理解, 有一个终端(终端0)专门向里面输入代码, 输入命令, 命令/代码运行后, 会将运算结果显示到终端1(标准输出); 但是如果命令运算出了问题, 它会将错误信息输出到终端2(错误输出).
重定向的话, 可以这样理解, 我用例子来说吧:
tcpdump -vv -s 0 -c 1000 -w mozilla.pcap 1>/dev/null 2>&1
这里, 运行一个tcpdump程序来抓包, 我们不想看到它显示出的实时数据, 就把它的标准输出流(1) 重定向到/dev/null, /dev/null是一个特殊的文件, 就像黑洞一样, 它可以接收数据流输入但不会有任何回应.
同时, 我们还把错误输出(2), 重定向到了标准输出1上, 因为1已经被重定向到了/dev/null, 所以输出到2的数据也被重定向到了/dev/null, 就相当于这样写了:
tcpdump -vv -s 0 -c 1000 -w mozilla.pcap 1>/dev/null 2>/dev/null
因为在linux里, 经常要用到ssh, 比如你在连接到web服务器上抓一下数据包, 就需要用到上面的数据流重定向了, 不然的话, tcpdump输出的数据, 会通过ssh显示到你的本地终端, 这样的话tcpdump也会把这个ssh数据也一并抓取的, 这显然不是我们想要的结果.
另一个常用到的地方就是将输出重定向到日志文件:
这样分别将标准输出和错误输出重定向到了log 和error这两个文件.
有时候还要将新的日志记录追加到磁盘上的日志文件:
关键是多用几次.
终端里, 主要就是管道与重定向有一点不好理解, 但只用多用几次, 问题不大.
0 - 标准输入, 向终端里敲字符
1 - 标准输出, 比如在终端里: $ echo 'Hello, World!' 就会打印出Hello, World.
2 - 错误输出, 程序运行出错, 是很常见的问题, 为了区别正常输出流, 才引入了错误输出. 比如你输命令时, 可能少了一个选项, 没办运行, 这时会提示你你输入有误, 然后打印出一些帮助信息, 并退出.
这是从上个世纪遗留下来的用法, 当时还是大型机时代, 我们可以这样理解, 有一个终端(终端0)专门向里面输入代码, 输入命令, 命令/代码运行后, 会将运算结果显示到终端1(标准输出); 但是如果命令运算出了问题, 它会将错误信息输出到终端2(错误输出).
重定向的话, 可以这样理解, 我用例子来说吧:
tcpdump -vv -s 0 -c 1000 -w mozilla.pcap 1>/dev/null 2>&1
这里, 运行一个tcpdump程序来抓包, 我们不想看到它显示出的实时数据, 就把它的标准输出流(1) 重定向到/dev/null, /dev/null是一个特殊的文件, 就像黑洞一样, 它可以接收数据流输入但不会有任何回应.
同时, 我们还把错误输出(2), 重定向到了标准输出1上, 因为1已经被重定向到了/dev/null, 所以输出到2的数据也被重定向到了/dev/null, 就相当于这样写了:
tcpdump -vv -s 0 -c 1000 -w mozilla.pcap 1>/dev/null 2>/dev/null
因为在linux里, 经常要用到ssh, 比如你在连接到web服务器上抓一下数据包, 就需要用到上面的数据流重定向了, 不然的话, tcpdump输出的数据, 会通过ssh显示到你的本地终端, 这样的话tcpdump也会把这个ssh数据也一并抓取的, 这显然不是我们想要的结果.
另一个常用到的地方就是将输出重定向到日志文件:
代码: 全选
$ some_commands_here 1>log 2>error
有时候还要将新的日志记录追加到磁盘上的日志文件:
代码: 全选
$ some_commands 1>>log 2>>error
-
- 帖子: 482
- 注册时间: 2013-09-13 0:42
- 系统: Debian sid
Re: 请教关于bash中的转向问题
提醒你一下, 从你提供的信息可以分析出来, 你正在读的这本shell参考书写的不好.
"文件代码", "转向", 有这么翻译的吗? 只能说, 他很外行.
如果是中文翻译版的, 建议你直接读它的英文原版;
如果是中文作者写的, 把这个丢掉再换一本吧.
顺便给你推荐几本.
这是我从笔记里粘出来的.
"文件代码", "转向", 有这么翻译的吗? 只能说, 他很外行.
如果是中文翻译版的, 建议你直接读它的英文原版;
如果是中文作者写的, 把这个丢掉再换一本吧.
顺便给你推荐几本.
代码: 全选
Shell脚本学习指南
Learning the bash shell
The Linux System Administrator's Guide
The Linux Network Administrator's Guide
Linux 与Unix Shell 编程指南
Linux系统管理技术手册(第二版)
Linux 系统管理员必备参考书,
把Linux从头到脚都介绍了一遍, 并对各个发行版不同的特点进行了详细的对比.
Unix.Shell编程(第三版)
我学习Shell 就是由这本书入门的, 它讲述的非常详细, 里面有好多问题很实用.
我从中学到的关于编程的一方面是: 程序要尽可能的简洁.
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 请教关于bash中的转向问题
好神奇的翻译
重定向、文件描述符。
0 是标准输入,1 是标准输出,2 是标准错误。



重定向、文件描述符。
0 是标准输入,1 是标准输出,2 是标准错误。