第九章:输入输出重定向

第九章:输入输出重定向
第九章:输入输出重定向

第九章:输入输出重定向

目标

完成这一章,你能够做以下事情:

改变UNIX命令的输出,使其输出到文件。

将UNIX命令产生的错误信息输出到文件。

改变UNIX命令的输入。

定义一个过滤器

使用一些基本的过滤器例如sort,grep和wc。

9.1 输入输出重定向简介

shell提供重定向一个命令的输入和输出的功能。大多数的命令的输出是输出到终端屏幕;比如date,ls,who等等,很多命令从键盘得到输入,命令包括mail,write,cat。

在UNIX系统中任何对象都是一个文件,包括终端和键盘都是一个文件。输出重定向让你将一个命令的输出送到除终端以外的其他的文件中。而输入重定向让你从键盘以外的文件中得到输入。

输出重定向可以用来捕获一个命令的输出,作为日志记录记录下来,或者对其进行更进一步的处理。输入重定向可以让你可以使用一个编辑器创建一个文件,然后将这个文件送到一个命令,而来代替没有编辑的能力的交互式的输入方式(例如mail命令)。

这一章介绍输入输出重定向,然后介绍一些UNIX的过滤器。过滤器是一种特殊的工具,它能进一步处理一个文件的内容。

9.2 标准输入,标准输出,和标准错误

每一次系统启动的时候,都会自动建立三个文件,这三个文件叫做标准输入,标准输出,标准错误。

shell从标准输入文件得到输入。这个文件使用C语言的描述符“0”,来打开,通常指向你的键盘。所以,当shell需要输入的时候,必须使用键盘来输入数据。

一些命令,如mail,write,cat,从标准输入得到输入,其方式为输入命令和参数,回车,然后命令会等待你提供输入来进行处理。输入的结束标志是回车和ctrl+d

shell将输出写到这标准输出文件,这个文件使用C语言的描述符号“1”来打开,通常为你的终端。因此,当shell产生输出,这些输出数据通常显示在你的屏幕上

大多数的UNIX命令会产生标准输出,这些命令有date,ls,cat,who等等。

shell会将错误信息输出到标准错误文件,这个文件使用C语言的描述符“2”来打开。同标准输出一样,标准错误会输出到你的终端。标准错误可以重新定向输出到独立的标准错误文件中。

大多数UNIX系统命令在被不恰当调用的时候会产生一个错误信息。想要看一个标准错误的例子,输入:cp 然后回车。cp使用信息会显示在你的屏幕上,而这些信息实际上是通过标准错误流来传送的

下面将要告诉你如何更改标准输入,标准输出,标准错误的默认值,如从一个文件得到输入而不是从键盘,在其它地方产生输出(而错误信息)而不是在终端。

9.3 输入重定向- <

任何命令,只要能从标准输入得到的输入,都可以被重定向从另外一个文件得到输入

例子:

$ cat remind

your mother’s birthday is November 29

$ mail user3 < remind

$ mail

$ From user3 Mon July 15 11:30 EDT 1993

your mother ‘s birthday is November 29

?d

$

命令从标准输入得到它的输入,但是你可以重定向输入,使其能够从其他文件而不是从键盘得到输入。mail 命令常常和输入重定向一起使用。我们可以用一个编辑器创建一个文件,其中包含一些我们想要mail的文本,然后我们可以重定向mail命令的输入,使其可以使用这个文件中的文本。这种方式在你有一个非常长的mail信息。或者你想要保留这个邮件信息作为将来的参考的时候非常有用。

而命令从标准输入得到输入的方式为:输入命令和参数,回车,然后命令会等待你提供输入来进行处理。输入的结束标志是回车和ctrl+d。

许多命令接受标准输入同时也接受文件名作为参数。这个作为参数的文件会被这个命令处理。cat命令就是一个很好的例子。cat命令可以显示直接从键盘输入的文本,显示作为参数的文件的内容,或者显示通过重定向的文件的内容。

从标准输入得到输入使用命令行参数重定向输入

$ cat回车

在此输入文本

ctrl + d 结束

输入的文本的内容在这里显示

$ cat file

显示文本的内容

$ cat < file

显示文本的内容

注意:输入重定向不会改变被输入文件的内容。

9.4 输出重定向>和>>

所有的可以输出到标准输出的命令都能重定向输出到另外一个文件。

例子;

建立/覆盖 建立/增加

$ date > date.out $ ls >>ls.out

$ date > who.log $ who >> who.log

$cat > cat.out $ ls >> who.log

在此输入文本

ctrl + d

许多命令都会在屏幕上输出。输出重定向让你可以捕获这些输出,并且保存为一个文本文件。如果在一个命令的后面加上一个输出重定向符号(>),这个命令产生的标准输出就会输出到这个文件中,而不是到输出到屏幕上。如果这个文件在命令执行的时候并不存在,它会被自动建立。如果这个文件存在,它的内容会被覆盖;

如果你想要在文件后添加,而不是覆盖文件。你可以使用输出重定向的附加的符号(>>),如果文件不存在,也会被创建。在两个>符号之间不能有空格。

注意:shell不能在同一时刻打开同一个文件作为输入重定向和输出重定向。所以,唯一的限制是输入文件和输出文件必须不同。否则你会丢失文件的原始的内容,而输出重定向也会失败。

例子:cat f1 f2 >f1 会导致文件f1的内容丢失。

9.5 错误重定向-2>和2>>

任何命令,只要能产生错误信息到标准错误,都可以将错误信息重定向到其它的文件

例子:

$ cp 2> cp.err 创建/覆盖

$ cp 2>> cp.err 创建/增加

$

$ more cp.err

Usage: cp [-f] [-i] [-p] source_file target_file

cp [-f] [-i] [-p] source_file ...target_directory

cp [-f] [-i] [-p] -R|-rsource_directory

Usage: cp [-f] [-i] [-p] source_file target_file

cp [-f] [-i] [-p] source_file ...target_directory

cp [-f] [-i] [-p] -R|-rsource_directory

如果一个命令键入不正确,shell就不能正确地解释这个命令,这时会生成一个错误信息。虽然这个错误信息也是在你的屏幕上显示,但它们实际上是通过与原始输出信息不同的文件来传输的。错误信息的传送是通过错误流,也称为标准错误来传输的,标准错误的文件描述符为2。

所以,当指明一个错误重定向的时候,你必须指明你想要捕获是信息流为2的信息。为了重定向标准错误(2>),在2和>之间不能有空格。同输出重定向相似的是,如果需要,会创建一个文件,或者覆盖已经存在的文件。你能够使用(2>>)来在一个已存在的文件末尾添加信息。

从管理员的观点来看这种机制十分有用。通常你只关心命令出错或经验问题。而将错误信息同普通的输出信息分离,使你可以很容易捕获这些错误信息,形成和维护一个日志文件,其中记录有你的程序遇到的问题。

9.6 什么是过滤器

读取标准输入和产生标准输出。

过滤输出流或者一个文件的内容

发送结果到屏幕,不改变输出流或文件的内容。

当和输出重定向相联系的时候处理其它命令的输出。

例子:vcat,grep,sort,wc

你已经了解了如何重定向命令的输入或输出。而一些命令可以从标准输入接收输入,产生输出到标准输出。这些命令被称为过滤器。过滤器只过滤而不会修改其处理的文件的内容。过滤器产生的结果通常都传送到终端屏幕上。

过滤器在处理文件的内容时非常有用。例如计算行的数目(wc),按照字母排序(sort),或查找包含有一个模型的行(grep)。

另外,过滤器可以用来处理任何命令的输出。由于过滤器能够操作一个文件,并且命令的输出能够被重定向到一个文件,这两种操作联合起来能够对执行任何命令的输出进行强大和灵活的处理。由于大多数的过滤器的输出是输出到标准输出,被过滤的结果能够被进一步地处理,其方式是将过滤出来的内容输出到一个文件,并且在这个被过滤的文件上再执行另外的过滤。

9.7 wc - 单词计数(Word Count)

语法:

wc [-lwc] [file...] 计算一个文件的行数,单词数,和字符数

例子:

$ wc funfile funfile作为命令行参数提供

116 529 3134 funfile

$

$ wc -l funfile

116 funfile

$

$ ls >ls.out

$ wc -w ls.out 计算在你的目录下条目的数量。

72 ls.out

wc命令计算被提交到标准输入或是一个文件的行数,单词数,和字符数。命令的选项有-l,-w,-c。-l选项会显示行数,-w选项会显示字数,-c选项会显示字符数。选项的顺序没有要求,输出的结果都是按行,字和字符数排列。

由于wc从标准输入接收输入,并且将其结果写到标准输出,所以wc是一个过滤器。对一个文件执行wc不会影响到文件的内容。

其他例子

$ wc 回车 计算从标准输入提供的输入

ab cde

fghijkl

mno pqr stuvwxyz

ctrl + d

3 6 32

$ wc < funfile 标准输入被文件funfile代替,不显示文件名。

105 718 3967

$ wc -w funfile

718 funfile

9.8 sort - 字母或数字排序

语法:

sort [-ndutX] [-k field_no] [file...] sort lines

例子:

$ sort funfile funfile作为命令行参数提供

$tail -1 /etc/passwd

user3:xyzbkd:303:30:studentuser3:/home/user3:/usr/bin/sh

1 2 3 4 5 6 7

$ sort -nt: -k 3 < /etc/passwd

$ who>whoson

$ sort whoson 以字母排列登录的用户名。

$ sort -u -k 1,1 whoson 排序时排除双倍行

sort命令强大而灵活。它能够依靠数字或字母来对一个文件的行排序。通过sort也能选择一行中的一个特殊的字段。sort也是一个过滤器,所以它也能从标准输入接收数据,但是它也会对作为命令行参数而提供的文件的内容进行排序,

sort选项 sort类型

none 辞典(ASCII)

-d 目录(不处理非字母,数字,或空白的目录)

-n 数字

-u 唯一的(删除所有的双倍行)

字段之间的分隔符默认为空字符(一个空格或一个TAB)。你可以使用-t X选项来指定一个分隔符,其中X代表分隔符。由于冒号(:)在shell中没有特殊的意义,于是它通常被用来作为一个文件中的分隔符。

当你确定了字段之间的分隔符是什么,你就可以使用sort 的-K n 选项来通知sort命令,你想要基于那一个字段来排序,其中n代表sort将要排序的的字段号。sort命令假定字段号是由1开始的

sort命令支持多个选项来执行更复杂的操作。请使用man 来查找其具体用法。

其它例子

$ sort 回车 排序的输入来自标准输入

mmmmm

xxxx

aaaa

ctrl + d

aaaa

mmmmm

xxxx

$ sort < funfile 标准输入被文件funfile代替

sort可以从标准输入接收数据,如上例,因此,你可以使用输入重定向从一个文件得到输入。注意:shell不能同时打开同一个文件用作输入重定向和输出重定向。然而,sort选项-o output_file能被用来制造一个输出文件代替标准输出。这样,这个文件可以与输入文件同名。这样做的最大好处就是:

如:sort -0 whoson -d whoson 可以在文件whoson内部执行一个目录的排序。

9.9 - 匹配模型(字符串搜索)

语法:

grep [-cinv] [-e] pattern [-e pattern] [file...]

grep [-cinv] -f patterns_list_file [file...]

例子:

$ grep user /etc/passwd

$ grep -v user /etc/passwd

$ grep -in -e like -e love funfile

$ who > whoson

$ grep rob whoson

grep命令十分有用。它通常使用一个模型作为它的第一个参数,使用任何数目的文件名作为它剩下的参数。在每一个模型前面使用-e参数,或在一个模型列表后面使用-f选项都可以让grep命令一次搜寻几个模型。这个命令会搜寻文件的每一行来查找指定的模型。然后grep 命令会显示包含有这个模型的那些行。

grep有四个常用的参数:-n,-v,-i,和-c。

-c 仅仅显示匹配行的数目

-i 告诉grep忽略以下的模型中的字母。

-n 显示每一个显示行的行号。

-v 显示不包含模型的行

象所有的过滤器一样,如果没有指明文件,grep从标准输入读取数据,并且输出到标准输出。grep 能够进行一些更复杂的搜寻。你可以提供一个你想要查找的文本的模型。这个模型叫做通用表达式。以下是一些通用表达式的特殊字符。

^ 匹配一行的开始

$ 匹配一行的结尾

. 匹配任何单字符

* 先前的模型被重复0次或多次。

[] 字符类,指明一组字符

[ - ] 短斜杠指明一个字符的范围

[^ ] 切换选择的过程

为了避免shell解释特殊字符所产生的问题,最好使用引号来封闭通用表达式。

9.10 输入输出重定向总结

cmd < file 重定向命令的输入从文件输入

cmd > file 重定向命令的标准输出到文件

cmd >> file 重定向命令的标准输出并添加到文件的末尾

过滤器 一个能接收标准输入,产生标准输出的命令

wc 计算行数,字数,和字符数

sort 以字母和数字方式来排列

grep 查找一个模型在哪些行。

(设备管理)第九章输入输出设备

9.2基本题 9.2.1填空题 1.按功能分类,外部设备大致可以分为(输入设备)(输出设备)和(输入输出兼用设备) 2.输入设备的作用是将(外部信息)以一定的数据格式送入(系统内存)答案:、 3.输入设备和输出设备统称为(外设),通常通过(输入输出接口)与主机相连接 4.输入设备分为(图形)输入设备、(图像)输入设备、(语音)输入设备几类 5.输出设备的作用是将(计算机的处理结果)提供给(外界) 6.每一种外设都是在它自己的(设备控制器)控制下工作,而(、适配器)则是通过() 和()相连接并受(主机)控制 7.常用的按键有(机械触点)式、薄膜式和(电容)式。其中(电容)式键开关无触点, 简单可靠,使用寿命长 8.鼠标器主要有(机械)式和(光电)式两种,后者需要特制的网格板与鼠标配合使用 9.光笔可以与(屏幕)上光标配合画出或修改图形,是一种定位输入设备 10.按显示器件分类,显示器有(阴极射线管显示器)(CRT)(液晶显示器)(LCD)和等离 子显示器 11.显示器的主要性能指标是图像的(分辨率)和(灰度级)。前者的值越高,显示的图像 就越清晰 12.液晶显示器的主要工作电压(低)、功耗(低)、体积小、重量轻、常用作便携式设备的 显示器 13.字符显示器的控制逻辑电路的功能包括(显示控制)(同步控制)(消隐)和(光标控制) 14.不同CRT显示标准所支持的最大(分辨率)和(颜色)数目是(不同)的. 15.按所显示的信息内容分类,显示器可以分为(字符)显示器、(图形)显示器和(图像) 显示器三类 16.CRT显示器上构成图像的最小单元称为(像素) 17.常用的打印设备有(点阵式)打印机、(宽行)打印机、(激光)打印机、(彩色喷墨) 打印机,他们都属于(硬拷贝)输出设备 18.按照工作原理,打印机可分为(击打)式和(非击打)式两类,激光打印机和喷墨打印 机均属于后者 19.对于单色显示器,若每屏可以显示80列*25行=2000个字符,字符窗口为9*14点阵, 字符为7*9点阵,则VRAM中存放的(2000个字符的ASCII码),容量为(2000)字节20.显示适配器作为CRT和CPU的接口,由(刷新)存储器、(显示)控制器、(ROM BIOS) 三部分组成。先进的显示控制器具有(图形)加速能力 21.激光打印机的工作过程分为(处理)阶段、(成像)阶段、(转印)阶段、(定影)阶段 22.衡量打印机打印速度的指标是:每秒钟打印的英文字符数(或每分钟打印的页数) 23.打印字符的点阵存储在(字符发生器)中,该装置通常采用ROM实现 24.数模转换(D/A转换)是将(数字)信号转换成(模拟)信号 25.模数转换(A/D转换)是将(模拟)信号转换成(数字)信号 26.音频处理总体上可分为三部分,即(音频识别)、(音频合成)和音效处理 27.VESA标准是一个可以扩展的标准,它除兼容传统的](VGA)等显示方式外,还支持 (1280*1024)像素光栅,每像素点(24位)颜色深度 9.2.2选择题

管道与重定向

管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是standard output 的信息,对于stdandard error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入standard input. 先看下下面图: command1正确输出,作为command2的输入然后comand2的输出作为,comand3的输入,comand3输出就会直接显示在屏幕上面了。 通过管道之后:comand1,comand2的正确输出不显示在屏幕上面 注意: 1、管道命令只处理前一个命令正确输出,不处理错误输出 2、管道命令右边命令,必须能够接收标准输入流命令才行。 实例: [chengmo@centos5 shell]$ cat test.sh | grep -n 'echo' 5: echo "very good!"; 7: echo "good!"; 9: echo "pass!"; 11: echo "no pass!"; #读出test.sh文件内容,通过管道转发给grep 作为输入内容 [chengmo@centos5 shell]$ cat test.sh test1.sh | grep -n 'echo' cat: test1.sh: 没有那个文件或目录 5: echo "very good!"; 7: echo "good!"; 9: echo "pass!"; 11: echo "no pass!"; #cat test1.sh不存在,错误输出打印到屏幕,正确输出通过管道发送给grep [chengmo@centos5 shell]$ cat test.sh test1.sh 2>/dev/null | grep -n 'echo' 5: echo "very good!"; 7: echo "good!"; 9: echo "pass!"; 11: echo "no pass!"; #将test1.sh 没有找到错误输出重定向输出给/dev/null 文件,正确输出通过管道发送给grep [chengmo@centos5 shell]$ cat test.sh | ls catfile httprequest.txt secure test testfdread.sh testpipe.sh testsh.sh testwhile2.sh envcron.txt python sh testcase.sh testfor2.sh testselect.sh test.txt text.txt env.txt release sms testcronenv.sh testfor.sh test.sh testwhile1.sh #读取test.sh内容,通过管道发送给ls命令,由于ls 不支持标准输入,因此数据被丢弃 这里实例就是对上面2点注意的验证。作用接收标准输入的命令才可以用作管道右边。否则传递过程中数据会抛弃。常用来作为接收数据管道命令有:sed,awk,cut,head,top,less,more,wc,join,sort,split 等等,都是些文本处理命令。 管道命令与重定向区别 区别是: 1、左边的命令应该有标准输出| 右边的命令应该接受标准输入 左边的命令应该有标准输出> 右边只能是文件 左边的命令应该需要标准输入< 右边只能是文件

Windows进程内标准输出重定向

Windows进程内标准输出重定向及其在程序调试上的应用 一、如何实现 打印调试信息的方法有很多,最常用的是使用标准输出设备(如printf、cout等),也可以用OutPutDebugString输出、用DebugView工具查看,还可以写入日志文件。如果程序运行需要记录日志(log),往往需要打开个文件,或许是写入系统事件、用系统的事件查看器查看。 应用程序打印调试信息、日志的方法往往是确定的,但如果是要编写一个模块或者说组件,那样的输出信息应该写入哪里呢?或者说程序本身对此也没有明确需求的话,那该怎么办呢? 可喜的是一个进程的标准输出是可以重定向的,所以我建议把调试信息直接打到标准输出上,这样代码中可以统一使用cout或者printf,然后根据需要将标准输出重定向。 Linux中重定向标准输出就容易了,因为有强大的dup2函数。而对于Windows的重定向,貌似往往是用于子进程的,在用CreateProcess创建子进程时设置子进程的标准输出句柄。而我们想要的是重定向自己这个进程的标准输出,那个用不上。我在MSDN中也没找到类似dup2的Win32 API函数,只有一个DuplicateHandle函数,这相当于linux中的dup,也用不上。 这里顺便提下,SetStdHandle是不能实现重定向的。这个函数的功能是将某句柄指向标准设备,并不能将标准设备句柄重定向到另外的句柄。 于是我就想到,Windows不是支持一部分POSIX标准的吗。于是我找到了一个CRT的函数,叫_dup2,看起来是不是特眼熟,对了,这就是Windows中dup2的兼容版本。 值得注意的是,_dup2以及与此相关的一系列CRT中的IO函数(如_read,_write)均以下划线开头,其余与linux大致相同,其参数中所谓的文件描述符与Win32中的句柄不一样,文件描述符实际上是句柄数组的索引,也就是说文件描述符不能与句柄混用。比如0,1,2分别是标准输入、标准输出、标准错误的文件描述符,但句柄值不是这样确定的。文件描述符不是Win32的概念,是POSIX中的概念。 _dup2用法与dup2大致相同,不多解释,不了解的可以查阅dup2相关资料。下面讲点应用。 二、如何应用于调试 写一个模块时,我们可以直接用cout/printf来作调试。但是如果这个模块用于图形界面或许是系统服务呢?这时标准输出看不到了,我们可以用OutPutDebugString函数和DebugView 这样的调试工具。这样就带来一种选择,而选择往往是增加软件复杂度的因素。所以我的想法是代码中只用cout/printf,如果需要将其重定向到调试工具中去。 如何实现呢,用匿名管道和线程。 用一个pipe,标准输出重定向到其write端,然后创建一个线程,线程要做的就是从pipe的

Linux输入输出重定向的原理和实现

Linux I/O重定向的原理和实现 在Unix系统中,每个进程都有STDIN、STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式。几乎所有语言都有相应的标准I/O函数,比如,C语言可以通过scanf从终端输入字符,通过printf向终端输出字符。熟悉Shell的朋友都知道,我们可以方便地对Shell命令进行I/O重定向,比如find -name "*.java" >testfile.txt 把当前目录下的Java文件列表重定向到testfile.txt。多数情况下,我们只需要了解I/O重定向的使用就够了,但是如果要编程实现类似Shell的I/O重定向以及管道功能,那么就需要清楚它的原理和实现。 下面本文就以Linux系统为具体例子,介绍I/O重定向的原理和实现(文中实验环境为Ubuntu 12.04,内核版本3.2.0-59)。 文件描述符表 理解I/O重定向的原理需要从Linux内核为进程所维护的关键数据结构入手。对Linux 进程来讲,每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是STDIN、STDOUT和STDERR,如下图所示意: 所谓的I/O重定向也就是让已创建的FD指向其他文件。比如,下面是对STDOUT重定向到testfile.txt前后内核文件描述符表变化的示意图 重定向前:

重定向后: 在I/O重定向的过程中,不变的是FD 0/1/2代表STDIN/STDOUT/STDERR,变化的是文件描述符表中FD 0/1/2对应的具体文件,应用程序只关心前者。本质上这和接口的原理是相通的,通过一个间接层把功能的使用者和提供者解耦。 下面我们通过strace命令跟踪一下echo命令的系统调用: dagang@ubuntu12:~$ strace echo hello 2>&1 >/dev/null | grep write write(1, "hello\n", 6) = 6 我们可以看到write(1, "hello\n", 6) 这样一个系统调用,它的第一个参数1就是代表的STDOUT的FD,这说明对于echo程序,它只管(通过标准I/O函数从STDOUT)向FD 1写入,而不关心它们FD 1到底对应的是哪个文件。 Shell正是通过I/O重定向和管道这种特殊的文件把多个程序的STDIN和STDOUT串联在一起组成更复杂功能的,下面是Shell中通过管道的示意图: 下面我们用一个实际的例子来体验一下: dagang@ubuntu12:~$ sleep 30 | sleep 40 & [1] 5584 dagang@ubuntu12:~$ pgrep -l sleep 5583 sleep 5584 sleep dagang@ubuntu12:~$ ll /proc/5583/fd total 0 lrwx------ 1 dagang dagang 64 Feb 27 13:41 0 -> /dev/pts/3 l-wx------ 1 dagang dagang 64 Feb 27 13:41 1 -> pipe:[246469] lrwx------ 1 dagang dagang 64 Feb 27 13:41 2 -> /dev/pts/3 dagang@ubuntu12:~$ ll /proc/5584/fd

第十章 输入输出系统习题

第十章输入输出系统习题 一、单项选择题: 1、“总线忙”信号是由__ __建立的。 A.获得总线控制权的设备B.发出“总线请求”的设备 C.总线控制器D.CPU 2、在不同速度的设备之间传送数据__ __。 A.必须采用同步控制方式B.必须采用异步控制方式 C.可以选用同步方式,也可选用异步方式D.必须采用应答方式 3、挂接在总线上的多个部件___ _。 A.只能分时向总线发送数据,并只能分时从总线接收数据 B.只能分时向总线发送数据,但可同时从总线接收数据 C.可同时向总线发送数据,并同时从总线接收数据 D.可同时向总线发送数据,但只能分时从总线接收数据 4、总线从设备是____。 A.掌握总线控制权的设备 B.申请作为从设备的设备 C.被主设备访问的设备D.总线裁决部件 5、假设某系统总线在一个总线周期中传输4个字节信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线带宽是__ __。 A.10 MB/s B.20 MB/s C.40 MB/s D.80 MB/s 6、波特率表示传输线路上____。 A.信号的传输速率B.有效数据的传输速率 C.校验信号的传输速率D.干扰信号的传输速率 7、中断系统中的断点是指____。 A.子程序入口地址B.中断服务子程序入口地址 C.中断服务程序入口地址表D.中断返回地址 8、显示器的主要参数之一是分辨率,其含义是____。 A.显示屏幕的水平和垂直扫描频率 B.显示屏幕上光栅的列数和行数 C.可显示不同颜色的总线 D.同一个画面允许显示不同颜色的最大数目 9、下列选项中,能引起外部中断的事件是____。 A.键盘输入B.除数为0 C.浮点运算下溢D.访存缺页 10.CPU响应中断时,最先完成的两个步骤是_ __和保护现场信息。 A.开中断 B.恢复现场 C.关中断 D.不可屏蔽中断 11、在独立编址方式下,存储单元和I/O设备是靠来区分的。 A.不同的地址代码B.不同的地址总线 C.不同的指令和不同的控制信号D.上述都不同 12、计算机系统的输入/输出接口通常是__ __。 A.CPU与存储器之间的交界面B.存储器与打印机之间的交界面 C.主机与外围设备之间的交界面D.CPU与系统总线之间的交界面 13.根据连线的数量,总线可分为串行总线和_____ ___总线

第6章 输入输出系统-选择题

第6章输入输出系统(I/O管理)-选择题 1.以下关于设备属性的叙述中,正确的是()。 A.字符设备的基本特征是可寻址到字节,即能指定输入的源地址或输出的目标地址 B.共享设备必须是可寻址的和可随机访问的设备 C.共享设备是指同一时间内允许多个进程同时访问的设备 D.在分配共享设备和独占设备时都可能引起进程死锁 2.虚拟设备是指() A.允许用户使用比系统中具有的物理设备更多的设备 B.允许用户以标准化方式来使用物理设备 C.把一个物理设备变换成多个对应的逻辑设备 D.允许用户程序不必全部装入主存便可使用系统中的设备 3.磁盘设备的1O控制主要采取()方式 A.位 B.字节 C.帧 D. DMA 4.为了便于上层软件的编制,设备控制器通常需要提供() A.控制寄存器、状态寄存器和控制命令 B.1/O地址寄存器、工作方式状态寄存器和控制命令 C.中断寄存器、控制寄存器和控制命令 D.控制寄存器、编程空间和控制逻辑寄存器 5.在设备控制器中用于实现设备控制功能的是() A. CPU B.设备控制器与处理器的接 C.I/O逻辑 D.设备控制器与设备的接口 6.在设备管理中,设备映射表(DMT)的作用是() A.管理物理设备 B.管理逻辑设备 C.实现输入/输出 D.建立逻辑设备与物理设备的对应关系 7.DMA方式是在()之间建立一条直接数据通路 A.I/O设备和主存 B.两个I/O设备 C.I/O设备和CPU D.CPU和主存 8.通道又称1/O处理机,它用于实现()之间的信息传输。 A.内存与外设 B.CPU与外设 C.内存与外存 D.CPU与外存 9.在操作系统中,()指的是一种硬件机制 A.通道技术 B.缓冲池 C. Spooling技术 D.内存覆盖技术 10.若1O设备与存储设备进行数据交换不经过CPU来完成,则这种数据交换方式是() A.程序查询 B.中断方式 C.DMA方式 D.无条件存取方式 11.计算机系统中,不属于DMA控制器的是() A.命令/状态寄存器 B.内存地址寄存器 C.数据寄存器 D.堆指针寄存器 12.()用作连接大量的低速或中速1O设备

Linux重定向和管道(精)

6.3 Linux重定向和管道 实验目的 通过重定向和管道操作: 1) 熟悉输入/输出(I/O) 重定向; 2) 把标准输出重定向创建一个文件; 3) 防止使用重定向的时候覆盖文件; 4) 把输出追加到一个现有的文件中; 5) 把一个命令的输出导入到另一个命令中。 实验内容与步骤 在本实验中将会用到下列命令: pwd:显示当前的工作路径。 cd:改变目录路径。 ls:显示指定目录的内容。 more:分页显示文件的内容。这是用于显示文本文件的首选方法。 head:截取显示文件的开头部分(默认为开头10行) 。 tail:截取显示文件的结尾部分(默认为最后10行) 。 cal:有关日历的命令。 set:当前shell下定义的一系列变量及其值。 echo:显示变量的值。 ps:显示当前进程的信息。 data:显示或设置系统日期和时间。 grep:查找文件中指定的关键字的行并输出。 步骤1:开机,登录进入GNOME。 在GNOME登录框中填写指导老师分配的用户名和口令并登录。 步骤2:访问命令行。 单击红帽子,在“GNOME帮助”菜单中单击“系统工具”-“终端”命令,打开终端窗口。 1. 使用重定向标准输出符号 步骤3:重定向标准输出,创建一个文件。 右尖括号或称大于符号(>) 把命令的输出发送到一个文件中:使用单个右尖括号,当指定文件名不存在的时候,将创建一个新文件;如果文件名存在,它将

被覆盖。(注意:命令、重定向符号和文件名之间的空格是可选的) 。 重定向标准输出命令的格式是: command > file 1) 为核实当前所在目录位置,使用什么命令? ___pwd________________________________________________________ 如果当前位置不在主目录中,使用什么命令可以改变到主目录中? ___cd /__________________________________________________________ 2) 如果希望把文件和目录列表截获,存储为主目录中的一个文件,这样可以追踪主目录中有什么文件。使用什么命令,把长文件列表的输出重定向,创建一个叫做homedir.list的文件。 ____ls >homedir.list________________________________________________ 3) 新文件homedir.list被放在哪里? __根目录_________________________________________________________ 使用ls命令核实新文件存在。 4) 使用什么命令,以一次一屏的方式,来查看刚才创建的文件内容? __ls –l|more homedir.list____________________________________________ 5) 使用head命令截获homedir.list文件的前10行,通过重定向,创建一个叫做dhomedir.list-top-10的新文件。应该使用什么命令? ___head –10 homedir.list >dhomedir.list-tail-10_________________________ 使用more命令查看文件的内容。 6) 使用tail命令,截获homedir.list文件的最后10行,通过重定向,创建一个叫做dhomedir.list-top-10的新文件。使用什么命令? ___tail –10 homedir.list >dhomedir.list-top-10___________________________ 使用more命令查看文件的内容。 7) 截获cal -y命令的输出,把它存到名为calendar的文件中。查看文件的内容。截获了什么? ___cal –y>calendar |more calendar 截获了2008年12个月份的日历 8) 截获cal 2010命令的输出,把它存到名为calendar的文件中。查看文件的内容。其中有什么内容? _ cal -y 2010 > calendar |more calendar 2010年12月份的日历 日历有什么变化? ____不是2008年,变成2010年了_____________________________________ 步骤4:防止使用重定向的时候覆盖文件。 在bash shell中,一个叫做noclobber的选项可以用来设定防止在重定向的过程中覆盖文件。可以在命令行中使用$set -o noclobber命令来完成。o代表选项。 为了重新激活clobber特性,使用$set -o noclobber;撤消则用set +o noclobber。 如果你使用的是csh shell,为了激活/撤消C shell中的clobber特性,使用set noclobber和unset noclobber。 1) 输入命令,打开shell中的noclobber选项。输入什么命令? ___set –o noclobber__________________________________________ _____ 2) 输入命令ls -l > homedir.list,结果是什么? ___bash:homedir.list:cannot overwrite existing file.因为clobber选项防止了重定向过程覆盖文件___________________________________ _ _

计算机组成原理第八章输入输出系统

第八章输入输出系统 一、填空题; 1.直接内存访问(DMA)方式中,DMA控制器从CPU完全接管对A.______的控制,数据交换不经过CPU,而直接在内存和B.______之间进行。 2.通道是一个特殊功能的A.______ ,它有自己的B.______ 专门负责数据输入输出的传输控制。 3.并行I/O接口A.______ 和串行I/O接口B.______ 是目前两个最具有权威性的标准接口技术。 4.在计算机系统中,CPU对外围设备的管理,除了程序查询方式、程序中断方式外,还有A.______方式、B.______方式和C.______方式。 5.程序中断方式控制输入输出的主要特点是,可以使A 和B 并行工作。 6.DMA控制器按其A 结构,分为B 型和C 型两种。 7.通道是一个特殊功能的A ,它有自己的B 专门负责数据输入输出的传输控制,CPU只负责C 功能。 8.通道有三种类型:A 通道、B 通道、C 通道。 二、选择题: 1.下面有关“中断”的叙述,______是不正确的。 A.一旦有中断请求出现,CPU立即停止当前指令的执行,转而去受理中断请求 B.CPU响应中断时暂停运行当前程序,自动转移到中断服务程序 C.中断方式一般适用于随机出现的服务 D.为了保证中断服务程序执行完毕以后,能正确返回到被中断的断点继续执行程 序,必须进行现场保存操作 2.中断向量地址是______。 A. 子程序入口地址 B. 中断服务例行程序入口地址 C. 中断服务例行程序入口地址的地址 D. 主程序返回地址 3.在数据传送过程中,数据由串行变并行或由并行变串行,其转换是通过______。 A. 移位寄存器 B. 数据寄存器 C. 锁存器 D. 指令寄存器 4.采用DMA方式传送数据时,每传送一个数据要占用______的时间。 A. 一个指令周期 B. 一个机器周期 C. 一个时钟周期 D. 一个存储周期 5.发生中断请求的条件是______。 A. 一条指令执行结束 B. 一次I/O操作开始 C. 机器内部发生故障 D. 一次DMA操作开始 6.为了便于实现多级中断,保存现场最有效的方法是采用______。 A. 通用寄存器 B. 堆栈 C. 存储器 D. 外存 7.采用串行接口进行七位ASCII码的传送,带有一位奇校验位、一位起始位和一位停止位,当波特率为4800波特时,字符传送速率为___。 A.480 B. 436 C. 685 D. 240 8.在单级中断系统中,CPU一旦响应中断,则立即关闭___标志,以防止本次中断服务结束前同级的其他中断源产生另一次中断进行干扰。 A.中断允许 B. 中断请求 C. 中断屏蔽

linux管道学习笔记

声明:本文档所有内容均为网上整理所得,不保证所有内容正确性.版权属作者本人所有。不用做任何商业用途,仅供广大网友学习交流之用,如有侵权,请联系本人删除,若发现文档中内容有错误或者有个人见解,欢迎指教与相互讨论.Email:.weiming999@https://www.360docs.net/doc/a013141515.html,。 管道 无名管道 管道包括无名管道和有名管道两种,前者在父子进程中流行,后者由于可以独立成为磁盘文件而存在,因为能够被无血缘关系的进程共享. 无名管道通常直接称为管道,它占用两个文件描述符,不能被非血缘关系的进程共享,一般应用于父子进程. UNIX中一切皆为文件,管道也是一种文件,称为管道文件.当系统中创建一个管道时,它返回两个文件描述符:一个文件以只写打开,作为管道的输入端;另一个文件以只读打开,作为管道的输出端. #include int pipe(int fildes[2]); 函数pipe在内核中创建一个管道,并分配两个文件描述符标识管道的两端,这两个文件描述符存储与fildes[0]和fildes[1]中.一般约定fildes[0]描述管道和输出端,进程向此文件描述符中读取数据,fildes[1]描述管道的输入端,进程向此文件描述符写入数据. fildes[0]:只读文件描述符. fildes[1]:只写文件描述符. Pipe调用成功返回0,否则返回-1. 单向管道流模型 管道的两端(输入端和输出端)被一个进程控制没有太大的意义,如果管道的两端分别控制在不同的进程中,这两个进程之间就能够进行通信.拥有管道输入端的进程,可以向管道发送数据,拥有管道输出端的进程,可以从管道中接受前一个进程发送来的消息. 1)从父进程流向子进程的管道 在父进程创建无名管道并产生子进程后,父子进程均拥有管道两端的访问权.此时关闭父进程的管道输出端,关闭子进程的管道输入端,就形成一个从父进程到子进程的管道流,数据由父进程写入,从子进程读出. 2)从子进程流向父进程的管道 在父进程中创建无名管道并产生子进程后,父子进程均拥有两端的访问权.此时关闭父进程的管道输入端,关闭子进程的管道输出端,就形成了一个从子进程到父进程的管道流.数据由子进程写入,从父进程读出. #i n c l u d e

第九章 接口扩展技术

第九章MCS-51 接口扩展技术 §9.1 微型机I/O接口技术概述 所谓I/O即计算机数据的输入输出。计算机系统的数据输入输出有两类数据传送操作: 1.CPU和存储器之间的传送操作,如前章所述。 2.CPU与外围设备接口的数据输入输出操作: 由于外部设备情况复杂,例如速度的快慢差异很大,外围设备的数据信号格式各不相同,有电流信号、电压信号、数字信号、脉冲信号等。这些复杂的情况使CPU无法以固定的时序与外围设备同步协调工作,这就需要用一定的接口电路连接CPU与外围设备,使CPU 与外围设备之间的数据输入输出能有效地进行。 一.I/O接口电路的作用: 1.速度协调: CPU的速度很快,外围设备的速度较慢。 输入:当外围设备数据准备好后,CPU再执行输入操作,由I/O 接口电路提供准备好信号再输入。 输出:需当外围设备准备好才能执行输出操作,由I/O接口电路将外围设备的准备状态传送给CPU。 I/O接口电路充当了协调CPU与外围设备速度差异的角色。

2.输出接口电路应具有锁存功能: CPU向外输出数据是通过P0口数据通道输出的,P0口是分时传送低8位地址和数据信息的复用口,数据在数据总线上停留的时间很短,因此输出接口应将该输出数据锁存起来,等待这一数据被外围设备接收。 3.输入接口电路应具备三态缓冲功能: 外围设备向CPU输入数据仍需通过P0口数据通道,在该数据通道上挂着多个数据源,除了多种输入接口外,所有存储器的数据线也与P0口数据通道相连,CPU的一次输入操作只允许一个数据源的数据线与数据通道相连,其余数据源的数据线必须以高阻与数据通道隔离。 所谓三态即指高电平、低电平、高阻三种状态。 4.数据转换: CPU传送的信号必须是数字信号,并且是并行信号,外围设备的信号与此不符则需通过接口电路转换。例如模拟信号与数字信号、串行与并行之间的转换等。

Linux管道、重定向及多命令

管道和重定向 多命令协作就是通过管道和重定向机制完成的 1.命令行shell的数据流定义 2.重定向 >将STDOUT重定向到文件(覆盖) andy@Fred:~/fred$ echo "abcd" > dddd andy@Fred:~/fred$ ls a abc b b cc c dddd andy@Fred:~/fred$ cat dddd abcd andy@Fred:~/fred$ ls -l 总用量12 -rw-r--r-- 1 andy andy 0 1月 3 21:43 a drwxr-xr-x 2 andy andy 4096 1月 5 10:47 abc -rw-r--r-- 1 andy andy 0 1月 3 21:43 bb -rw-r--r-- 1 andy andy 24 1月 3 21:43 ccc -rw-r--r-- 1 andy andy 5 1月7 21:33 dddd andy@Fred:~/fred$ ls -l > ddd andy@Fred:~/fred$ cat ddd 总用量12 -rw-r--r-- 1 andy andy 0 1月 3 21:43 a drwxr-xr-x 2 andy andy 4096 1月 5 10:47 abc -rw-r--r-- 1 andy andy 0 1月 3 21:43 bb -rw-r--r-- 1 andy andy 24 1月 3 21:43 ccc -rw-r--r-- 1 andy andy 0 1月7 21:35 ddd -rw-r--r-- 1 andy andy 5 1月7 21:33 dddd >>将STDOUT重定向到文件(追加到最后,另起一行) 错误信息是不能添加进入的 2>是将错误信息进行添加,但是正确是信息是不会写入。

管道的一些实例代码

/*管道 可以把管道想象为两个实体之间的单向连接器。注意,管道是半双工的, 如果需要全双工通讯,应该转而考虑套接字。 匿名管道又称管道,提供了一个进程与它的兄弟进程通讯的方法,只存在于父进程中;命名管道,可以存在与文件系统中,任意进程都可找到它,使得不同先祖的进程也可以通讯。 #include int pipe( int dfs[ 2 ] );创建匿名管道 int dup(int oldfd );创建一个文件描述符的副本 int dup2(int oldfd, int targetfd); dup/dup2提供了复制文件描述符的功能。他们常用于stdin(0)、stdout(1)、stderr(2)的重定向; #include #include int mkfifo(const char* pathname,mode_t mode );创建一个命名管道 记住:管道只不过是一对文件描述符因此所有能够操作文件描述符的函数都可用于管道。这些函数 包括但不限于select,read,write,fcntl,freopen。 */ /**********1、简单匿名管道应用************/ #include #include #include #define MAX_LINE 80 #define PIPE_STDIN 0 #define PIPE_STDOUT 1 /* myPipe[ 1 ]向管道写入数据;myPipe[ 0 ]从管道读取数据。 */ int main( ) { const char* string={"A simple message."}; int ret,myPipe[ 2 ]; char buffer[ MAX_LINE+1 ]; //create the pipe ret=pipe( myPipe ); //pipe( )创建一个匿名管道 if( ret==0 ) { //write the message into the pipe write( myPipe[ PIPE_STDOUT ],string,strlen( string ) ); //read the message from the pipe ret=read( myPipe[ PIPE_STDIN ],buffer,MAX_LINE ); //NULL terminate the string buffer[ ret ]=0;

第10章 输入输出系统

第10章输入输出(I/O)系统 一、选择题(每题2分) 12.串行接口是指()。 A.主机和接口之间、接口和外设之间都采用串行传送 B.主机和接口之间串行传送,接口和外设之间并行传送 C.主机和接口之间并行传送,接口和外设之间串行传送 D.系统总线采用串行总线 【分析】主机的工作速度较快,因此主机和接口之间采用并行传送;外设的工作速度较慢,因此接口和外设之间采用串行传送。 【答案】C 35.为了便于实现多级中断,保存现场信息最有效的办法是采用______。 A 通用寄存器 B 堆栈 C 存储器 D 外存 【答案】B 35.为了便于实现多级中断,保存现场信息最有效的办法是采用______。 A 通用寄存器 B 堆栈 C 存储器 D 外存 【答案】B 70. 当采用______对设备进行编址情况下,不需要专门的I/O指令组。 A.统一编址法 B.单独编址法 C.两者都是 D.两者都不是 【答案】A 71. 下面有关“中断”的叙述,______是不正确的。 A.一旦有中断请求出现,CPU立即停止当前指令的执行,转而去受理中 断请求 B.CPU响应中断时暂停运行当前程序,自动转移到中断服务程序 C.中断方式一般适用于随机出现的服务 D.为了保证中断服务程序执行完毕以后,能正确返回到被中断的断点继 续执行程序,必须进行现场保存操作 【答案】A 95. 周期挪用(窃取)方式常用于______中。

A. 直接内存存取方式的输入/输出 B. 直接程序传送方式的输入/输出 C. CPU的某寄存器与存储器之间的直接传送 D. 程序中断方式的输入/输出 【答案】A 114. 采用DMA方式传送数据时,每传送一个数据就要用一个______时间。 A. 指令周期 B. 机器周期 C. 存储周期 D. 总线周期 【答案】C 二、填空题(每题2.5分) 3.按照传输数据格式不同划分,总线数据通信方式可分为串行总线和____________两类。 【答案】并行总线 4.对I/O数据传送的控制方式,可分为:程序直接控制方式、______________、DMA方式、_____________和外围处理机方式。 【答案】程序中断方式、通道控制方式 5.计算机系统的输入输出接口是(C)之间的交接界面。 A.CPU与存储器B.存储器与外围设备 C.主机与外围设备D.CPU与系统总线

父子进程通过管道通信(MFC重定向)

今天领导心血来潮说服务器的运行界面是一个黑乎乎的控制台,太低端了,看我们能不能把它图形化,至少做成一个窗口有按钮点启动、停止。好吧,领导拍脑袋就叫人干活的事不少,也没有产品规划,也就是让他看的舒服,只能去做了。 其中有一个关键性问题,就是原先是往控制台输出的信息,使用mfc图形化之后该往哪输出,工程维护人员肯定还是希望能在图形界面上能够看到这些信息的,因此就涉及到了如何获取到输出控制台的消息(都是cout、printf这种标准输出),然后再将这些消息重写到view上。这时候想到了标准输出重定向,因此整理了下思路: 1.将标准输出重定向到管道 2.创建一个线程从管道里取出数据 3.在view的OnPaint中将数据显示出来 二、实现 1.创建管道 [cpp]view plaincopyprint? 1.BOOL bRet = CreatePipe(&hRead, &hWrite, NULL, 0); // 创建匿名管道 2.if (bRet != TRUE) 3. printf("创建匿名管道失败,错误代码:%d\n", GetLastError()); 2.将标准输出重定向到管道的写句柄中 [cpp]view plaincopyprint? 1.int nOpenHandle = _open_osfhandle((intptr_t)hWrite, _O_TEXT); 2.FILE* fp = _fdopen( nOpenHandle, "w"); 3.*stdout = *fp; 注意:这里不能使用SetStdHandle(STD_OUTPUT_HANDLE, hWrite),在MFC中SetStdHandle是没有效果的。 3.创建线程从管道取数据 [cpp]view plaincopyprint? 1.boost::thread thr(boost::bind(&CKDSShellView::print_cb, this));

第九章:输入输出重定向

第九章:输入输出重定向 目标 完成这一章,你能够做以下事情: 改变UNIX命令的输出,使其输出到文件。 将UNIX命令产生的错误信息输出到文件。 改变UNIX命令的输入。 定义一个过滤器 使用一些基本的过滤器例如sort,grep和wc。 9.1 输入输出重定向简介 shell提供重定向一个命令的输入和输出的功能。大多数的命令的输出是输出到终端屏幕;比如date,ls,who等等,很多命令从键盘得到输入,命令包括mail,write,cat。 在UNIX系统中任何对象都是一个文件,包括终端和键盘都是一个文件。输出重定向让你将一个命令的输出送到除终端以外的其他的文件中。而输入重定向让你从键盘以外的文件中得到输入。 输出重定向可以用来捕获一个命令的输出,作为日志记录记录下来,或者对其进行更进一步的处理。输入重定向可以让你可以使用一个编辑器创建一个文件,然后将这个文件送到一个命令,而来代替没有编辑的能力的交互式的输入方式(例如mail命令)。 这一章介绍输入输出重定向,然后介绍一些UNIX的过滤器。过滤器是一种特殊的工具,它能进一步处理一个文件的内容。 9.2 标准输入,标准输出,和标准错误 每一次系统启动的时候,都会自动建立三个文件,这三个文件叫做标准输入,标准输出,标准错误。 shell从标准输入文件得到输入。这个文件使用C语言的描述符“0”,来打开,通常指向你的键盘。所以,当shell需要输入的时候,必须使用键盘来输入数据。 一些命令,如mail,write,cat,从标准输入得到输入,其方式为输入命令和参数,回车,然后命令会等待你提供输入来进行处理。输入的结束标志是回车和ctrl+d shell将输出写到这标准输出文件,这个文件使用C语言的描述符号“1”来打开,通常为你的终端。因此,当shell产生输出,这些输出数据通常显示在你的屏幕上 大多数的UNIX命令会产生标准输出,这些命令有date,ls,cat,who等等。 shell会将错误信息输出到标准错误文件,这个文件使用C语言的描述符“2”来打开。同标准输出一样,标准错误会输出到你的终端。标准错误可以重新定向输出到独立的标准错误文件中。 大多数UNIX系统命令在被不恰当调用的时候会产生一个错误信息。想要看一个标准错误的例子,输入:cp 然后回车。cp使用信息会显示在你的屏幕上,而这些信息实际上是通过标准错误流来传送的 下面将要告诉你如何更改标准输入,标准输出,标准错误的默认值,如从一个文件得到输入而不是从键盘,在其它地方产生输出(而错误信息)而不是在终端。 9.3 输入重定向- < 任何命令,只要能从标准输入得到的输入,都可以被重定向从另外一个文件得到输入 例子: $ cat remind your mother’s birthday is November 29 $ mail user3 < remind $ mail

Linux下管道命令及应用

利用输入/输出重定向 在Linux命令行模式中,如果命令所需的输出不是来自键盘,而是来自指定的文件,这就是输入重定向。同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。 接下来看看标准输入/输出重定向在构造一条Linux命令中的实际应用。 1.输入重定向和输出重定向 # wc home.txt 第一条命令将文件aa.txt作为wc命令的输入,统计出aa.txt的行数、单词数和字符数。第二条命令将ls命令的输出保存在一个名为home.txt的文件中。如果符号后边的文件已存在,那么这个文件将被重写。 2.同时使用输入和输出重定向 # iconv -f gb18030 -t utf-8 new-aa.txt 这条命令里同时用到了输入重定向(new-aa.txt)。aa.txt实际是一个gb18030编码的文件,而new-aa.txt则是将aa.txt的内容转换成utf-8格式的新文件。 利用管道 利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。下面来看看管道是如何在构造一条Linux命令中得到应用的。 1.利用一个管道 # rpm -qa|grep licq 这条命令使用一个管道符“|”建立了一个管道。管道将rpm -qa命令的输出(包括系统中所有安装的RPM包)作为grep命令的输入,从而列出带有licq字符的RPM包来。 4.利用多个管道 # cat /etc/passwd | grep /bin/bash | wc -l 这条命令使用了两个管道,利用第一个管道将cat命令(显示passwd文件的内容)的输出送给grep命令,grep命令找出含有“/bin/bash”的所有行;第二个管道将grep的输入送给wc命令,wc命令统计出输入中的行数。这个命令的功能在于找出系统中有多少个用户使用bash。 利用命令替换 在Linux命令行模式下,当遇到一对“`”(上分割符)时,将首先执行“`”中间包含的命令,然后将其输出结果作为参数代入命令行中,这就是命令替换了。它类似于输入输出的重定向功能,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。下面来看它的实际应用。 1.使用命令替换 # touch `date +%Y%m%d%k%M%S`.txt 该命令使用了一次命令替换,date +%Y%m%d%k%M%S命令将首先执行,它将按指定格式输出当前的时间。然后,这个时间将被作为touch命令的参数,其结果是建立了一个以当前时间为文件名的文件。 2.使用命令替换 # kill `/sbin/pidof smbd` 该命令将杀掉sshd的所有进程。这里用pidof这个命令给出进程号,因为kill是针对进程号进行操作的。两者通过命令替换,实现了只用一条命令就杀掉sshd所有进程的功能。

相关文档
最新文档