今天我们学习了i/o重定向

首先我们可以打开多个终端使用tty命令可以看到终端的序列

我们再终端里输入date可以查看当前的时间和日期,如果我们在date命令后面加上>并指向date.txt文件那么结果就会写入date.txt文件,我们使用cat命令就可以查看。

我们使用date命令加上>指向之前打开的终端,在我们指定的终端里可以看到当前的日期和时间。

我们使用passwd命令修改密码时,此时不要把进程结束,我们在另一个终端里使用ps aux | grep passwd 命令可以查看到passwd这个进程的状态,在root后面的第一个数字就是我们的pid,使用ls命令可以查看其中的属性

我们可以看到有0 1 2 3 4这几个数字

0代表标准输入,1代表标准输出,2代表标准错误输出,3及以上为常规文件的描述符。、

达特命令在默认情况下将输出结果显示在终端,此时的文件描述符为1

我们重定向date.txt文件里

date 1> date.txt此时结果指向date.txt,我们使用cat命令查看date.txt可以看到输出结果;而我们使用date 2> date.txt因为文件描述符为2标准错误输出,所以结果并没有指向date.txt,反而在终端界面直接显示了结果。如果我们一开始输入的命令时错误的中间使用2>重定向,最后查看时也会发现显示错误输出。

而输入重定向和输出重定向的使用符号相反,使用的是<。

输出重定向分为>和>>,>是覆盖,你无论输出多少次前面输入的都被覆盖掉,最后显示的是最新的结果;而>>是将每一次输入的都保留下来最后输出重定向会把所有的结果显示出来。

接下来我们介绍两中相似但是不同的命令写法

首先是我们将正确结果和错误结果都输出到相同位置

ls /home/ /linux &> list.txt

这种是两个结果先得到了然后再输出

另一种是正确结果和错误结果都输出重定向到相同的位置

ls /home/ linux > list.txt 2> &1

它是将错误结果加入正确结果中然后一起重定向到相同位置。

将正确结果保留在文件list.txt,错误结果丢到/dev/null

ls /home/ /linux >list.txt 2> /dev/null

它们一开始都在list.txt里,只是将错误结果单独拿出来。

之后我们来学输入重定向

我们开始使用grep命令过滤root,然后输入重定向到/etc/passwd,

grep 'root' < /etc/passwd

如果不加<,此时/etc/passwd是作为一个文件,加了是作为一个参数。

我们使用dd命令从/dev/zero中读取数据并写入到file01.txt文件,每次写入1MB,一共写入两次

dd if= /dev/zero of= /file01.txt bs=1M count=2

我们使用输入重定向和输出重定向的方式也可以实现同样的功能

dd < /dev/zero > file02.txt bs=1M count=2

我们可以使用at命令创建一个计划任务,但如果是创建多个用户直接用at命令输入会十分繁琐,我们可以使用输入重定向的方式就会很方便

使用echo命令一次只能重定向一行文本,而使用cat命令可以创建多行,输入完后使用ctrl+d即可退出。

而每次使用快捷键比较麻烦,我们可以在输入时追加eof来结束。

在编写脚本时,为了排版整齐,经常在eof前面使用tab键缩进,同时在输入重定向符后添加“-"

如果需要将两条命令输出都重定向,则需要添加括号。