2009年9月23日星期三

I/O 重新导向及管道

1. I/O 重新导向

  • 输出导向

# ls -al /etc > /test1/ext.txt     -> 将 /etc 目录下的文件数据结果存储到 /test1/etc.txt 文件中


# cat > /test1/editor.txt   -> 成为简单的文字编辑器

I Love Linux !! -> 按 Enter 键
                -> 按 Ctrl+c 就可结束文件编辑

  • 附加输出导向
# cat >> /test1/origin.txt -> 可以在键盘输入内容,附加在源文件之后

  • 输入导向
    输出导向的概念和输入导向刚好相反。前者是将命令或程序的执行结果通过屏幕或文件来输出,但是后者却是将键盘或文件提供命令来执行。

# cat file1

The content of file1 !


# cat < file1


The content of file1 !


    在上述的范例中,二者的输出结果完全相同,但是在执行的程序上却完全不同。在"cat file1"命令中,cat 的标准输入文件为 file1 。因此 cat 在收到输入文件后会执行它的功能而将 file1 的内容显示到屏幕。但是在 "cat < file1"命令中,cat 并没有任何的标准输入文件,而是利用“输入重导(<)”的功能将 file1 传给 cat 当成标准输入文件,最后才能将 file1 的内容显示到屏幕。
   
   在可以接受参数的命令上,输入重导并没有很大的用处,但是在无法接受参数的命令上就相当有用,例如 "patch"

# patch patch-2.4.3-2

# patch < patch-2.4.3-2

   因为patch命令无法接受参数,所以在上述的第一行命令输入后,patch 命令会将 
patch-2.4.3-2 视为参数,因为它无法接受参数,所以画面不会有任何的反应,若是利用输入重导 (<) 来将 patch-2.4.3-2 文件输入给 patch ,则系统就会开始执行源代码更新的操作。

  • 附加输入导向(<< 字符串)
    附加输入导向可以自行定义一个字符串,例如 quit ,系统在收到此字符串前,会持续地将数据输入文件,这个功能经常使用在电子邮件系统中。以下是一个传送电子邮件的范例,假设我们定义的字符串是"Finsh",可以继续输入邮件内容。当输入"Finsh"字符串后,系统便会结束邮件的编辑并且寄出。

# mail 751446682@qq.com << Finsh

>The mail is from sherlock

>Finsh -> 结束邮件的编辑并且寄出.

  • 错误输出导向(&>)
   错误输出导向不论是正常或错误的执行,都不会将信息结果显示在屏幕上,而是直接写入文件中。一般的程序设计师都会习惯将程序测试和出错时所有信息(正常和错误)记录在文件中,以利日后修改时参考。

# ls /user1 > /test1/error.txt

ls: /usr1 : No such file or directory -> 错误信息显示在屏幕

# cat /test1/error.txt -> 错误信息没有记录在文件中

# ls /usr1 &> /test1/error.txt -> 没有出现错误信息

# cat /test1/error.txt -> 错误记录在文件中

2.管道

   
   Linux 系统中的“管道”最主要的功能是将其他程序的输出结果直接导向到另一个程序来当成输入数据。

   举例来说,/etc 目录下的文件有很多。若是使用 "ls al"命令,它们并没有办法在同一页中显示,若是我们要浏览第一页中的数据,可能不是很方便,此时可以将"ls -al"命令产生的结果利用管道 (|) 直接导向至 "less" 命令。然后就可以使用上下键来逐行浏览输出结果。

# ls -al /etc | less

# ls -l /etc | grep mysql  ->在 etc 目录中搜索包含 mysql 关键字的文件

没有评论:

发表评论