shell 的一些常用的指令(三)

本文介绍了Shell中重定向的概念及应用,包括从头重写文件、在文件末尾追加内容、重定向标准错误输出、同时重定向标准输出和错误输出到同一文件等技巧。此外还介绍了cat、sort、uniq等常用文件处理命令。

shell 的一些常用的指令(三)

六、重定向
  • cat - 连接文件

  • sort - 排序文本行

  • uniq - 报道或省略重复行

  • grep - 打印匹配行

  • wc - 打印文件中换行符,字,和字节个数

  • head - 输出文件第一部分

  • tail - 输出文件最后一部分

  • tee - 从标准输入读取数据,并同时写到标准输出和文件

1 . 文件重定向


  • 从头重写文件

I/O 重定向允许我们来重定义标准输出的地点。我们使用 “>” 重定向符后接文件名将标准输出重定向到除屏幕 以外的另一个文件。为什么我们要这样做呢?因为有时候把一个命令的运行结果存储到 一个文件很有用处。例如,我们可以告诉 shell 把 ls 命令的运行结果输送到文件 ls-output.txt 中去, 由文件代替屏幕。
这里,我们创建了一个长长的目录/usr/bin 列表,并且输送程序运行结果到文件 ls-output.txt 中。 我们检查一下重定向的命令输出结果:
如果我们用 less 阅读器来查看这个文件,我们会看到文件 ls-output.txt 的确包含 ls 命令的执行结果。

ls -l /usr/bin > ls-output.txt
less ls-output.txt

这里写图片描述

注意:当我们使用 “>” 重定向符来重定向输出结果时,目标文件总是从开头被重写。

如果我们需要清空一个文件内容(或者创建一个 新的空文件),可以使用这样的技巧:

> ls-output.txt

这里写图片描述

用less浏览ls-output.txt中的内容为空。

注意: 简单地使用重定向符,没有命令在它之前,这会清空一个已存在文件的内容或是 创建一个新的空文件。

  • 在文件的后边追加内容,不从头重写
    将重定向结果追加到文件内容后面,我们使用”>>“重定向符,将导致输出结果添加到文件内容之后。如果文件不存在,文件会 被创建

这里写图片描述

2 . 标准错误重定向

虽然我们已经将这些文件流的前 三个称作标准输入、输出和错误,shell 内部分别将其称为文件描述符0、1和2。shell 使用文件描述符提供 了一种表示法来重定向文件。因为标准错误和文件描述符2一样,我们用这种 表示法来重定向标准错误:

ls -l /bin/usr 2> ls-error.txt

这里写图片描述
文件描述符”2”,紧挨着放在重定向操作符之前,来执行重定向标准错误到文件 ls-error.txt 任务。

3 . 重定向标准输出和错误到同一个文件

可能有这种情况,我们希望捕捉一个命令的所有输出到一个文件。为了完成这个,我们 必须同时重定向标准输出和标准错误。有两种方法来完成任务。第一个,传统的方法, 在旧版本 shell 中也有效:

ls -l /bin/usr > ls-output.txt 2>&1

这里写图片描述

使用这种方法,我们完成两个重定向。首先重定向标准输出到文件 ls-output.txt,然后 重定向文件描述符2(标准错误)到文件描述符1(标准输出)使用表示法2>&1。

注意: 重定向的顺序安排非常重要。标准错误的重定向必须总是出现在标准输出 重定向之后,要不然它不起作用。

现在的 bash 版本提供了第二种方法,更精简合理的方法来执行这种联合的重定向。

ls -l /bin/usr &> ls-output.txt

这里写图片描述
在这个例子里面,我们使用单单一个表示法 &> 来重定向标准输出和错误到文件 ls-output.txt。

4 . 处理不需要的输出
有时候“沉默是金”,我们不想要一个命令的输出结果,只想把它们扔掉。这种情况 尤其适用于错误和状态信息。系统通过重定向输出结果到一个叫做”/dev/null”的特殊文件, 为我们提供了解决问题的方法。这个文件是系统设备,叫做位存储桶,它可以 接受输入,并且对输入不做任何处理。为了隐瞒命令错误信息,我们这样做:

ls -l /bin/usr 2> /dev/null

这里写图片描述

5 . cat - 连接文件

cat 命令读取一个或多个文件,然后复制它们到标准输出,就像这样:

cat fileName

例如查看ls-output.txt文件,cat ls-output.txt , 将会显示文件 ls-output.txt 的内容。cat 经常被用来显示简短的文本文件。因为 cat 可以 接受不只一个文件作为参数,所以它也可以用来把文件连接在一起。比方说我们下载了一个 大型文件,这个文件被分离成多个部分(USENET 中的多媒体文件经常以这种方式分离), 我们想把它们连起来。如果文件命名为:
movie.mpeg.001 movie.mpeg.002 … movie.mpeg.099

we could join them back together with this command:

我们能用这个命令把它们连接起来:cat movie.mpeg.0* > movie.mpeg
因为通配符总是以有序的方式展开,所以这些参数会以正确顺序安排。

参考链接: http://billie66.github.io/TLCL/book/chap07.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lancnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值