Linux学习Day03

五. 重定向

  1. I/O重定向,把命令行的输入重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中。如果我们把多个命令行关联起来,将形成非常强大的命令——管道。
  2. cat(合并文件);sort(对文本行排序);uniq(报告或删除文件中重复的行);wc(打印文件中的换行符、字和字节的个数);grep(打印匹配行);head(输出文件的第一部分内容);tail(输出文件的最后一部分内容);tee(读取标准输入的数据,并将其内容输出到标准输出和文件中)
  3. 我们使用过很多程序生成了不同种类的输出,这些输出通常包含两种类型,一种是程序运行的结果,即该程序生成的数据;另一种是状态和错误信息,表示程序当前的运行情况。程序实际上把它们的运行结果发送到了一个称为标准输出(standard output,即stdout)的特殊文件中,它们的状态信息则发送到了另一个称为标准错误(stderr)的文件中。默认情况下,标准输出和标准错误都将被链接到屏幕上,并且不会被保存在磁盘文件中。另外,许多程序从一个称为标准输入(stdin)的设备来得到输入,默认情况下,标准输入连接到键盘。I/O重定向功能可以改变输出内容发送的目的地,也可以改变输入内容的来源地。
  4. 使用重定向操作符“>”,后面接文件名,就可以把标准输出重定向到另一个文件中(不存在则会创建这个文件),而不是显示在屏幕上(这样做主要是用于把命令的输出内容保存到一个文件中,如ls -l /usr/bin > ls-output.txt,就把ls命令的输出保存到ls-output.txt文件中,而不是输出到屏幕上)。若把一个不存在的目录用ls再重定向,则会发送错误信息到标准错误,这时屏幕会显示,但是目标的输出文件会重新改写,因没有输出内容,则实际上导致该文件内容被删除(创建一个新的空文件),可以作为一种方法,其实仅仅使用重定向符“>”,前面不加任何命令,就可以删除一个已存在的文件内容或创建一个新的空文件,如> ls-output.txt。
  5. 重定向符“>>”实现从文件的尾部开始添加输出内容(不存在则会创建这个文件)
  6. 标准错误重定向需要使用文件描述符2。一个程序可以把生成的输出内容发送到任意文件流中,如果把这些文件流中的前三个分别对应标准输入文件、标准输出文件和标准错误文件,那么shell将在内部用文件描述符分别索引它们为0、1、2。那么ls -l /bin/usr 2>ls-error.txt(2和重定向符之间无空格)就将标准错误重定向到ls-error.txt文件中
  7. 将标准输出和标准错误重定向到同一个文件:
    1. 第一种传统方法在旧版本shell中使用,如ls -l /bin/usr > ls-output.txt 2>&1,这个方法执行了两个重定向操作(重定向操作的顺序非常重要,标准错误的重定向操作通常发生在标准输出重定向操作之后,否则将不起作用,如果顺序为2>&1>ls-output.txt,那么标准错误将会重定向到屏幕上)
    2. 第二种为使用一个标记符“&>”,如ls -l /bin/usr &> ls-output.txt
  8. 处理不想要的输出,可以通过把输出重定向到一个称为/dev/null的特殊文件中来实现它。这个文件是一个称为位桶(bit bucket)的系统设备,它接受输入但是不对输入进行任何处理,以下命令可以用来抑制(即隐藏)一个命令的错误信息。ls -l /bin/usr 2> /dev/null
  9. 标准输入重定向
    1. cat(合并文件),读取一个或多个文件,并把它们复制到标准输出文件中。cat file...(在大多数情况下,可以认为cat命令和DOS中的TYPE命令类似。使用它显示文件而不需要分页,如cat ls-output.txt)。cat经常用来显示短的文本文件。由于cat可以接受多个文件作为输入参数,所以也可以用来把文件连接在一起;如一个多媒体文件被拆分为多个部分,那么就可以把各部分连接在一起,并还原为原来的文件,如若这些文件为movie.mpeg.001、movie.mpeg.002、...、movie.mpeg.009,那么就可以cat movie.mpeg.0* > movie.mpeg将它们重新连接在一起。(通配符一般都是按照顺序拓展,因此这些参数也将按正确的顺序来排列)
    2. 如果只输入cat命令,没有给定任何参数,它将从标准输入读取内容(默认键盘,等待键盘输入),输入后按下Ctrl-D,通知cat命令已经到达了标准输入的文件尾(end-of-file,EOF),缺少文件名参数的情况下,cat会将标准输入内容复制到标准输出文件中,那么就看到文本行重复显示。用这种办法可以创建短的文本内容,如cat > lazy_dog.txt,然后输入文本,结束时按下Ctrl-D;为了看到结果,再用cat命令就可以再次把文件复制到标准输出文件中。标准输入的重定向cat < lazy_dog.txt,可以把标准输入的源从键盘变为lazy_dog.txt文件,结果和只传递单个文件名参数一样。
  10. 管道是shell的一种特性,使用管道操作符“|”(竖线)可以把一个命令的标准输出传送到另一个命令的标准输入中。command1 | command2。less命令可以分页显示任意命令的输入,该命令将它的结果发送到标准输出,如ls -l /usr/bin | less
    1. 过滤器接受输入,按照某种方式对输入进行改变,然后再输出它。第一个要用到的命令是sort。假设要把/bin和/usr/bin目录下的所有可执行程序合并成一个列表,并且按照顺序排列,最后再查看这个列表。ls /bin /usr/bin | sort | less。(管道功能经常用来对数据执行复杂的操作,也可以把多条命令合在一起构成一个管道)
    2. uniq(报告或忽略文件中重复的行),经常和sort命令结合使用。uniq可以接受来自于标准输入或者一个单一文件名参数对应的已排好序的数据列表。默认为删除重复行。ls /bin /usr/bin | sort | uniq | less,删除了sort输出内容中的重复行;反过来想要查看重复行则加上-d即可ls /bin /usr/bin | sort | uniq -d | less
    3. wc(word count,打印行数、字数和字节数),wc ls-output.txt则打印出了三个数据(行数、字数和字节数),如果在执行wc时没有输入命令行参数,它将接受标准输入内容。-l则只报告行数,把wc -l添加到管道中可以方便地实现计数功能。
    4. grep(打印匹配行),grap pattern [file...],当grep在文件中遇到“模式”的时候,将打印包含该模式的行。例如结合上述,搜索出文件名中包含zip的所有文件,该搜索将获悉系统中与文件压缩相关的程序,ls /bin /usr/bin | sort | uniq | grep zip,通常情况下grep在搜索时区分大小写,-i可以忽略大小写,-v使得grep只输出和模式不匹配的行。
    5. head/tail(打印文件的开头部分/结尾部分),默认情况下,head命令将输出文件的前10行,tail命令将输出文件的最后10行,可以使用-n选项来调整输出行数,如head -n 5 ls-output.txt,也可用于管道中ls /usr/bin | tail -n 5;tail中有一个选项用来实时查看文件,该选项在观察正在被写入的日志文件的进展状态时很有用,如我们观察/var/log目录下的message文件,tail -f /var/log/message,-f选项tail将持续监视这个文件,一旦添加了新行,将会立即显示在屏幕上,该动作在按下Ctrl-C后停止。
    6. tee(从stdin读取数据,并同时输出到stdout和文件),当在某个中间处理阶段来捕获一个管道中的内容时,会很有用,如在使用grep命令过滤管道内容之前,先使用tee命令来获取整个目录列表并输出到ls.txt文件中, ls /usr/bin | tee ls.txt | grep zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值