linux标准输入输出与重定向

linux标准输入输出与重定向
linux标准输入输出与重定向

LINUX 标准输入输出和重定向

1. 标准输入与输出

我们知道,执行一个shell 命令行时通常会自动打开三个标准文件,即标

准输入文件(stdin ),通常对应终端的键盘;标准输出文件(stdout )和标准错误输出文件(stderr ),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

我们以cat 命令为例,cat 命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

$ cat config

将会把文件config 的内容依次显示到屏幕上。但是,如果cat 的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:

$ cat

Hello world

Hello world

Bye

Bye

$

用户输入的每一行都立刻被cat 命令输出到屏幕上。

另一个例子,命令sort 按行读入文件正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。

$ sort

bananas

carrots

apples

apples

bananas

carrots

$

这时我们在屏幕上得到了已排序的采购单。

直接使用标准输入/输出文件存在以下问题:

输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

2.输入重定向

输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。

例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:

$ wc

wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。

如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。

$ wc /etc/passwd

20 23 726 /etc/passwd

$

另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:

$ wc < /etc/passwd

20 23 726

$

另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here 文档的重定向操作符使用<<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。下例将一对分隔符delim之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。

$ wc<

>this text forms the content

>of the here document,which

>continues until the end of

>text delimter

>delim

4 17 98

在<<操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符)将重新定向送给命令wc作为它的标准输入。

由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。

1.输出重定向

输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。

输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。

输出重定向的一般形式为:命令>文件名。例如:

$ ls > directory.out

$ cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/ test/

$

将ls命令的输出保存为一个名为directory.out的文件。

注:如果>符号后边的文件已存在,那么这个文件将被重写。

为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。

如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。形式为:命令>>文件名。例如:

$ ls *.doc>>directory.out

$ cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/ test/

ch1.doc ch2.doc ch3.doc

$

和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:

$ ls /usr/tmp 2> err.file

可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。

还可以使用另一个输出重定向操作符(&>)将标准输出和错误输出同时送到同一文件中。例如:

$ ls /usr/tmp &> output.file

利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列:

$ ls /usr/bin > /tmp/dir

$ wc –w < /tmp/dir

459

统计了/usr/bin目录下的文件个数。

管道

将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个例子中的/tmp/dir文件将ls和wc命令联在一起;另一种是Linux所提供的管道功能。这种方法比前一种方法更好。

管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。

通过使用管道符“|”来建立一个管道行。用管道重写上面的例子:

$ ls /usr/bin|wc -w

1789

再如:

$ cat sample.txt|grep "High"|wc -l

管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词High,grep命令的输出则是所有包含单词High的行,这个输出又被送给wc命令,wc 命令统计出输入中的行数。假设sample.txt文件的内容如下:

Things to do today:

Low:Go grocery shopping

High:Return movie

High:Clear level 3 in Alien vs. Predator

Medium:Pick up clothes from dry cleaner

那么该管道行的结果是2。

命令替换

命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:

command1 `command2`

其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:

$ cd `pwd`

该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。

管道与重定向

管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是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操作系统(RHEL5) 使用VMware Workstation新建一台64位的虚拟机 1)启动“新建虚拟机”向导程序 在VMware Workstation软件中,通过菜单“文件”-->“新建虚拟机”打开“新建虚拟机向导”窗口,配置类型选“自定义(高级)”,如图-1所示,单击“继续”。 图-1 2)选择虚拟机的硬件兼容性 接受默认的Workstation 9.0,如图-2所示,单击“继续”。

图-2 3)指定虚拟机系统的安装方式 选择“我以后再安装操作系统”,如图-3所示。注意不要选择“安装盘镜像文件(iso)”,否则虚拟机启动后会自动执行快速安装,不方便用户控制安装过程。 图-3 4)选择将要为虚拟机安装的操作系统类型 选择“Linux”-->“Red Hat Enterprise Linux 5 64bit”,如图-4所示,然后再单击

“继续”。这一步只是通知VMware Workstation提供一些推荐的硬件配置和兼容性优化,至于以后到底装什么系统,并不在这里决定。 图-4 5)指定虚拟机名称和保存位置 为即将建立的虚拟机设置名称、保存位置,如图-5所示,单击“继续”。保存的“位置”应该是一个空文件夹(如果不存在,VMware Workstation也会自动创建),确保此位置所在的分区有足够的剩余磁盘空间。

图-5 6)选择虚拟机的处理器参数 接受默认的设置,使用单处理器、单核心数,如图-6所示,单击“继续”。 图-6 7)设置虚拟机的内存容量 若要顺利安装及运行64位的RHEL 5.9操作系统(特别是图形桌面),建议分配不少于1024MB的内存,如图-7所示。 图-7

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

从硬盘安装Linux操作系统的方法步骤(精)

从硬盘安装Linux操作系统的方法步骤来源: ChinaUnix博客日期:2007.04.22 18:30(共有0条评论我要评论从硬盘安装Linux操作系统,首先要准备安装包,Linux操作系统的安装包通常是一个或多个ISO镜像文件(一般通过网络下载就可以得到;其次,要通过某种手段启动镜像文件中的系统安装程序;接下来,按照安装程序的提示信息进行安装就可以了。安装过程中,需要指定Linux操作系统的安装位置,这主要涉及硬盘分区的一些知识。综合来看,学习Linux操作系统的安装,关键要学会两点:第一、如何为Linux操作系统准备硬盘空间?第二、如何启动ISO镜像文件中的安装程序。硬盘分区通常,在使用硬盘时,都要进行分区。如果把未分区的硬盘比做一张大白纸,那么分区后的硬盘就相当于这张大白纸被画上了几个大方框。一块硬盘被分成多个分区之后,各分区之间是相对独立的,每个分区都可以有自己的文件格式,例如 FAT16、FAT32、NTFS等等。Linux 操作系统需要的硬盘分区要安装一个操作系统,一般来讲都要为它准备专门的分区。专门,意味着不能与其他操作系统合用一个分区,也意味着不要与用户自己的数据文件合用一个分区,前者是因为不同的操作系统可能需要不同格式的磁盘分区,后者则更多地出于用户数据安全和系统维护方便的考虑。从最低配置角度讲,Linux 操作系统需要一个EXT2或EXT3格式的硬盘分区作为根分区,大小在2~5G就可以。另外还需要一个SWAP 格式的交换分区,大小与内存有关:如果内存在256M以下,交换分区的大小应该是内存的两倍;如果内存在256M以上,交换分区的大小等于内存大小即可。Linux 硬盘分区管理工具在安装Linux 操作系统时,如果选择了手工的分区方式,将启动硬盘分区工具Disk Druid。这个程序是安装程序自带的。下面讨论一下该软件的使用。Linux下硬盘分区的标识在Linux 下用hda、hdb 等来标识不同的硬盘;用hda1、hda2、hda5、hda6 来标识不同的分区。其中,字母a 代表第一块硬盘,b代表第二块硬盘,依次类推。而数字1 代表一块硬盘的第一个分区、2 代表第二个分区,依次类推。1到4 对应的是主分区(Primary Partition)或扩展分区(Extension Partition。从5开始,对应的都是硬盘的逻辑分区(Logical Partition)。一块硬盘即使只有一个主分区,逻辑分区也是从5开始编号的,这点应特别注意。系统上有一块硬盘,名字为/dev/hda,它上面有一个NTFS 格式的主分区hda1 以及

linux系统安装

欢迎使用Ylmf OS ?欢迎使用Ylmf OS ,雨林木风开源操作系统发布之后受到了全球的关注,这给了雨林木风开发团队极大的鼓舞, 根据广大用户的反馈,我们在以前版本的基础上对此版本的系统软件进行了部分调整,进一步美化了操作界面,添加了 更加人性化的脚本管理,主题依然采用精仿的Windows 主题。希望Linux 老用户用着更顺手,新用户入门更容易。 ?我们坚信,经过大家的努力,Linux 也可以做得和Windows 一样出色,给广大用户多一个选择。 Ylmf OS 3.0 可以分为多种安装方式:传统的CD 安装方式、wubi-hd 安装方式、wubi 安装方式以 及USB 设备如U 盘安装方式。 下面我们对这几种安装方式做以详细的介绍。 一.传统的CD 安装方式 这种方式跟往常我们安装Windows 有点相似,首先我们将加载的Ylmf OS 刻录成光盘,点此查看刻录软件的操作指导 将刻录好的CD 插入光驱,设置计算机启动顺序为光盘启动,启动计算机就会看到如下画面:

(图1 OS 引导界面1) 在OS的引导画面出现时,任意的键盘操作都会出现如下图所示的画面:

(图2 OS 引导界面2) 这时候我们用键盘的上下键选择上图中所示的语言界面,选定的语言呈深灰色,未选定的语言呈浅灰色。这里我们以简体中文操作系统安装为例,所以选择“中文(简体)”,这时候计算机的画面如下图所示:

(图3 OS 引导界面3) 这里出现了两部分,在屏幕正中间有五个选项,在屏幕下方有六个选项,下面我们依次介绍一下这些选项 1) 试用Ylmf_OS 而不安装(T) 这就是我们通常所说的Livecd 模式,Livecd 是个体验模式,进入系统此项后可以预览整个OS 的全貌,而且大多数的功能都能正常使用。当然,在进入Livecd 以后也会有安装OS 的接口,这样用户不用退出Livecd 模式,就可以继续安装过程。 2) 安装Ylmf_OS(I) 这个选项是直接安装Ylmf OS,不会出现Livecd 体验模式,而是直接进入系统安装界面。 3)检查盘片是否有错误(C) 此项是用来验证盘片的刻录质量的,检查是否在刻录过程中某些文件损坏。一般 只要此项检查顺利通过,则表示此盘片与下载的盘片完全一致,未出现文件损坏的现象,可以继续安装。 4)检测内存(M) 内存检测程序,检测内存工作是否正常 5) 从第一硬盘引导(B) 如果用户不想安装光盘上的操作系统,也不想运行上面的任何选项,而想从硬盘引导

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选项防止了重定向过程覆盖文件___________________________________ _ _

Linux操作系统的安装使用实验报告

实验报告 课程名称计算机网络原理与技术实验项目Linux操作系统的安装及使用专业班级姓名学号 指导教师成绩日期 一、实验目的 1、掌握虚拟机VMware软件的安装和使用; 2、掌握Linux系统软件的安装和使用; 4、掌握Linux命令的使用; 二、实验设备和环境 个人计算机一台、虚拟光驱、虚拟机VMware软件、Linux系统软件 三、实验内容 1、通过虚拟机安装Linux系统; 2、熟悉Linux的基本命令; 3、在Linux下编译一个C语言程序; 4、在Linux环境下配置TCP/IP协议; 5、设置Linux与Windows文件夹共享。 四、实验过程 1、安装VMware软件 双击安装文件,按照提示逐步安装,完成后的打开软件,如下图 这时就可以安装Linux系统了。

2.安装Lniux系统 选择“新建虚拟机”,按“下一步”,选择“典型”,“Linux”,“red hat linux”,其他按照默认选择。得到一个虚拟机界面(如下图所示)。 选中“CD-ROM”这项,将其设置为:“使用映像文件”然后导入Linux 系统的安装的第一张盘。(如下图所示)

点击“启动此虚拟机”,按照提示选择默认值,选择“个人工作站”。其他全部默认即可。在安装过程中,会提示“插入第二张光盘”,“插入第三张光盘”,这时同样用虚拟光驱加载镜像文件。重起后进入(如下图所示)。 选择默认,进入系统。 3.安装VMware tools。 选择VMware软件的菜单“虚拟机”、“安装VMware工具”,看见如下两个文件。双击rpm 格式文件。完成后,打开如下图的文件夹。

双击第一个压缩包进行解压到/usr/bin目录下。 在终端下运行以下命令(如图所示):

linux管道学习笔记

声明:本文档所有内容均为网上整理所得,不保证所有内容正确性.版权属作者本人所有。不用做任何商业用途,仅供广大网友学习交流之用,如有侵权,请联系本人删除,若发现文档中内容有错误或者有个人见解,欢迎指教与相互讨论.Email:.weiming999@https://www.360docs.net/doc/96105440.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

linux操作系统安装手册

操作系统安装 服务器推荐配置: CPU: Intel Xeon 3.2G 或以上 内存: 1G 或以上 网卡:100M 或1000M(视系统规模) 硬盘:73.4G 以上(视存储规模) 说明:此文档是REDHAT企业版AS4.0为基准的,REDHAT 9.0的安装也可以参考,只是选择安装包是不相同的。) 使用REDHAT AS4 光盘(4 碟装)。光盘版本号为:2.6.9-5和2.6.9-34,上述版本可按照下面方式安装。 设制BIOS 中的启动顺序,使计算机优先从cd-rom 启动。 打开计算机,把CD1 放入光驱,安装启动画面有多种选择, 直接回车,到下图 用TAB键切换到Skip回车 点击Next, 选择语言,如下图。

点击Next,配置键盘(默认),如下图。 点击Next,开始配置鼠标(默认),如下。 点击Next,分区格式选Manually partition with disk druid,如下图。 点击Next,开始分区。如下图。

如果此机器有两块或两块以上硬盘的话,会在图8 中显示出来例如hda 和hdc,那么注意要给在某个硬盘上(举例 说明,比如硬盘hda)创建分区时,点击new,在下一图形界面中,会提示有两块硬盘,此时必须打勾只选中需 要在上面创建分区的那块硬盘(例子中应该是hda),也就是说把另一块硬盘(例子中应该是hdc)前面的钩去掉。 对于只有一块硬盘的安装过程来说,只需按正常步骤就可以。 我们假设这台计算机中只有一块硬盘。一般使用IDE 硬盘时设备名为/dev/had(如果我们使用的是一个SCSI 硬盘,它的设备文件名为/dev/sda) 请注意。安装Linux 系统只要一个交换分区(swap)和一个根分区(/),一般情况下,根分区为10G 左右,如果还有剩余空间,那么再创建新分区,映射为(/xfmdata)做为存储分区吧。 点击new 按钮创建一个swap 分区,swap 分区大小选本机内存大小的2 倍,但不要超过1024M. FileSystem Type 选swap,一般分为512M 左右,如下图。 点击OK,配置好SWAP 分区,如下图。

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;

父子进程通过管道通信(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));

三种安装LINUX系统的方法及图示

三种安装LINUX系统的方法及图示 1、安装前的准备 1)收集系统资料:为了能够顺利安装和设置Linux系统,你必须将以下资料记录在案,以备系统安装时使用: 硬盘:数量, 容量和类型; 内存:您的计算机所装内存的数量; CD-ROM:接口类型(IDE, SCSI); SCSI卡:卡的型号; 网卡:网卡的型号; 鼠标:鼠标的类型(串口、PS/2、总线型),协议(Microsoft,Logitech, MouseMan, 等等),按键的数量,对串口鼠标还要知道它接在哪个串口; 显示卡:显示卡的型号(或者它用的芯片组), 显示内存的数量;(大多数PCI总线的显卡可以被安装程序自动识别.) 显示器:型号,以及水平和垂直刷新频率的范围。 你可以用Windows的控制面板 -> 设备管理器来获取相应资料,当然还可以查阅相应的随机资料。 2、检查CMOS设置: Anti vrius: Disable 关闭该选项,防止安装时死机,因为安装程序要写主引导扇。 Swap A,B:Disable 以免启动时可能出现问题。 Boot Sque:CDROM,A,C 让计算机从光盘启动。

Memory Hole : Disable 若未关闭,则LINUX只能识别16M内存。3、了解LINUX的硬盘分区的命名设计与文件系统知识: Linux安装至少要两个分区:Linux native(文件)分区和Linux Swap(交换)分区。主分区用作存放LINUX的文件,交换分区为运行LINUX时提供虚拟内存。 交换分区每个16~32M,最多可以有8个,具体可根据内存的多少来决定。一般来说,建一个16M的交换分区就可以了。 文件分区则根据需要和硬盘大小来决定,一般来说不应少于200M。由于我们接触最多的是DOS操作系统,所以大多数人都习惯于使用类似于\\\\\C:\\\\\的符号来标识硬盘分区,但这在LINUX却不是这样。Linux的命名设计比其他操作系统更灵活,能表达更多的信息。Linux通过字母和数字的组合来标识硬盘分区,如“hda1”,其具体含义是:分区名的前头两个字母表明分区所在设备的类型,例如hd 指IDE硬盘,sd(指SCSI硬盘);第三个字母分区在哪个设备,按a,b,c,d的顺序排列,如hda是IDE 1口的主硬盘,则IDE 2口的主硬盘就应该是hdc了;最后的数字在该设备上的分区顺序,前四个分区(主分区或扩展分区)用数字1 到4表示,逻辑分区从5开始,例如: hda3表示第一个IDE硬盘上的第三个主分区或扩展分区。 在Linux的文件系统中,不论有几个文件分区,全部集合于一个树形的目录结构中。比如说,你可以将某个分区指定给/(根目录)使用,某个分区指定给/usr目录使用,然而但你进入Linux系统后,你根本感觉不到他们在不同的分区中,你只是感觉都在一棵树上。不过如

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所有进程的功能。

linux输入输出重定向以及管道(精)

输入/输出重定向,管道 1、标准输入:/dev/stdin(键盘),描述符号是0 2、标准输出:/dev/stdout(屏幕),描述符号是1 3、错误输出:/dev/stderr(错误消息输出到屏幕上),描述符号是2 COMMAND_OUTPUT > OUTPUT_FILENAME #重定向stdout到一个文件 #如果没有这个文件就创建一个,否则就覆盖原文件里面的内容 :> OUTPUTFILENAME #如果文件没有,就创建一个0长度的文件(==touch) #:是一个占位符,不产生任何输出 #>会把文件“FILENAME”截断为0长度 > FILENAME #>会把文件“FILENAME”截断为0长度 #如果文件没有,就创建一个0长度的文件(==touch) #(与上面的“:>”效果相同,但是在某些shell下可能不能工作)如图所示

COMMAND [options] > file.list #创建一个包含目录树列表的文件 如图所示: COMMAND_OUTPUT >> OUTPUT_FILENAME #重定向stdout到一个文件 #如果没有这个文件就创建一个,否则就追加到文件后边如图所示: 1>filename #重定向stdout到文件filename中

1>>filename #重定向并且追加stadout到文件filename中如图所示 2>filaname #重定向stderr到文件filename中 2>>filename #重定向并且追加staderr到文件filename中如图所示

&>filename #把stdout和stderr都重定向到文件filename中 如图所示 2>&1 #重定向stderr到stdout #得到的错误的消息与stdout一样,发送到一个地方如图所示: i>&j #重定向文件描述符i到j中 #指向i文件的所有的输出都发送到j中去 >&j #默认的重定向文件描述符1 #所有传递到stdout的传输都送到j中去