请教关于bash中的转向问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
sansan995
帖子: 1
注册时间: 2010-12-28 19:32

请教关于bash中的转向问题

#1

帖子 sansan995 » 2013-10-18 13:54

大家好!
我在看关于SHELL编程的书看到了,转向的章节有点看不懂了,
0是标准输出,1是标准输入,2是标准输出。fd代表文件代码
那文件代码是干什么的。有哪些代码呢??
开启文件 fd<>文件 怎么开启,在什么地方开启呢??开启怎么输入呢??
nae6taiyie0T
帖子: 482
注册时间: 2013-09-13 0:42
系统: Debian sid

Re: 请教关于bash中的转向问题

#2

帖子 nae6taiyie0T » 2013-10-18 16:09

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数据也一并抓取的, 这显然不是我们想要的结果.

另一个常用到的地方就是将输出重定向到日志文件:

代码: 全选

 $ some_commands_here 1>log 2>error
这样分别将标准输出和错误输出重定向到了log 和error这两个文件.

有时候还要将新的日志记录追加到磁盘上的日志文件:

代码: 全选

 $ some_commands 1>>log 2>>error
关键是多用几次.
nae6taiyie0T
帖子: 482
注册时间: 2013-09-13 0:42
系统: Debian sid

Re: 请教关于bash中的转向问题

#3

帖子 nae6taiyie0T » 2013-10-18 16:18

提醒你一下, 从你提供的信息可以分析出来, 你正在读的这本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中的转向问题

#4

帖子 lilydjwg » 2013-10-19 11:41

好神奇的翻译 :em05 :em05 :em05

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