一、标准输入与输出、重定向

1、Linux 的标准输入与输出

在 Linux 中一切都使用文件表示,/dev/stdin 文件为标准输入设备通常是键盘,/dev/stdout 与 /dev/stderr 文件为标准输出和标准错误输出设备,通常是显示器。

设备 设备文件 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/stderr 2 标准错误输出

2、输入重定向

重新指定输入文件,即将标准输入的文件从 /dev/stdin 更改为另一个文件。

比如,默认情况下使用 cat 命令会接受默认标准输入设备键盘的输入,并输出到控制台,但是可以通过 < 符号修改标准输入设备,指定其他文件作为标准输入设备,并将文件中的内容读取并显示到控制台。

cat [0]< [file] :将 cat 的标准输入文件从 /dev/stdin 重定向为 [file](0 可省略)

wCdqiwhF-1.png

3、输出重定向

重新指定输出文件,即将标准输出的文件从 /dev/stdout 更改为另一个文件。

比如,cat /etc/passwd 会将文件信息标准输出到控制台,我们可以使用 > 修饰符修改标准输出设备,使用指定的文件做为标准输出设备。

cat [file] [1]> [File] :将 cat [file] 的标准输出文件从 /dev/stdout 重定向为 [File],输出方式为覆盖(1 可省略)

wCdqiwhF-2.png

cat [file] [1]>> [File] :将 cat [file] 的标准输出文件从 /dev/stdout 重定向为 [File],输出方式为追加(1 可省略)

wCdqiwhF-3.png

ls -l [file] [errFile] 1>[file.out] 2>[errFile.out] :将 ls -l [file] 的标准输出和标准错误输出分别从 /dev/stdout 和 /dev/stderr 重定向为 [file.out] 和 [errFile.out],输出方式为追加。

wCdqiwhF-4.png

二、使用 grep 过滤器搜索和过滤文件内容

grep "H" [grepText] :在 [grepText] 中查找含 "H" 字符串所在的行

wCdqiwhF-5.png

grep "^H" [grepText] :在 [grepText] 中查找以 "H" 开头的字符串所在的行

wCdqiwhF-6.png

grep "?" [grepText] :在 [grepText] 中查找以 "?" 结尾的字符串所在的行

wCdqiwhF-7.png

grep "l[ail]" [grepText] :在 [grepText] 中查找包含 "la"、"li"、 "ll" 字符串所在的行

wCdqiwhF-8.png

grep "e[a-z]" [grepText] :在 [grepText] 中查找包含 "ea"、"eb"、"ec"、......、"ey"、"ez" 字符串所在的行

wCdqiwhF-9.png

  • -n :打印匹配的行及其行号,行号打印在行首

    wCdqiwhF-10.png

  • -c :打印匹配的行数量

    wCdqiwhF-11.png

  • -v :反选匹配的行

    wCdqiwhF-12.png

二、管道

在命令执行时有时输出的数据过于繁杂,这时我们就能够通过管道命令 "|" 去处理这些数据。

注意管道命令 "|" 仅仅能处理前面一个命令传来的正确信息,也就是标准输出,对于标准错误输出没有直接处理的能力,这样的命令才可为管道命令。

在每个管道后面接的第一个数据是命令,且这个命令必须要能够接受标准输入的数据才行。比如 less、more、head、tail 等是可以接受标准输入的管道命令,而 ls、cp、mv 等就不是管道命令。

wCdqiwhF-13.png

ls -al [/etc] | more :当我们想查看 [/etc] 中的文件可以利用 ls -al 命令,但是命令的输出会将屏幕占满,这时我们就可以将 ls -al 的命令的标准输出作为 more 命令的标准输入,使用 more 命令翻页查看输出信息

wCdqiwhF-14.png