重定向:
把本来要显示在终端中的命令结果,输送到别的地方去;
到文件中或者作为其他命令的输入(命令的链接,或者叫命令管道);
把两个命令连接起来使用,一个命令的输出作为另一个命令的输入;
管道的英语是pipeline;
可以想象一个个水管,连接起来;
流:
这个概念不好理解;
流的简单定义,流是时间上可用的一系列数据元素。可以把流比喻成传送带上的物件,每个时间点传输一个,而不是多个打包传输;
重定向:
哪里:文件或者另一个命令的输入
如何实现:通过在命令间插入特定的符号
特定的符号被称为重定向流符号;
重定向流:
从Unix时代起就是很重要的概念;
重定向流会改变我们看待终端命令行的方式;
==================================================
先谈cut命令的进阶:
根据分隔符来剪切
了解一下CSV格式的文件
Comma Separated Values的缩写
中文意思是:都好分隔值
后缀名是.csv
-d 参数 delimiter的缩写,是英语“分隔符”的缩写
用于指定用什么分隔符(逗号、分号、双引号)
-f 参数 field的缩写,英语“区域”的意思
表示剪切下用分隔符分隔的哪一块或哪几块区域;
==================================================
>和>> : 重定向到文件
>可以将命令的输出结果重定向到你选择的文件中
使用>符号要小心
如果此文件不存在,则新建一个文件;
如果此文件已经存在,那就会把文件内容覆盖掉;
而且是不会征求用户确认的;
黑洞文件 /dev/null
这是一个特殊的文件,不是目录;
它能够使得发送到/dev/null的任何数据作废
>> 重定向到文件末尾
会将重定向内容写入到文件末尾,起到追加的作用;
如果文件不存在,则创建文件;
==================================================
stdinstdoutstderr
标准输入 stdin 键盘输入 ,对应文件描述符0
标准输出 stdout 终端中的输出,对应文件描述符1
标准错误输出 stderror 终端的错误输出,对应文件描述符2
上面这三个可以被看成是流;
文件描述符:
形式上是非负整数,实际上是一个索引值,指向从中系统内核为每个进程所维护的该进程打开文件的记录表;
当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符;
在Windows中称为“句柄”;
=================================================
2>符号
2 标准错误输出的描述符是2;
如果没有2,单独的>符号就是重定向标准输出(文件描述符为1)
>和>>只是将标准输出重定向到文件,但是无法将标准错误输出重定向;
合并输出 2>&1
将标准错误输出重定向到和标准输出一样的地方;
追加式的
====================================================
标准输出不一定要显示在屏幕上,可以存放到文件里;
> 重定向到文件
>> 可以追加内容到文件末尾
2> 重定向标准错误输出到文件
2>&1 将标准错误输出重定向与标准输出一样
====================================================
接下来讨论的是重定向输入
命令的输入可以来自键盘,还可以来自文件;
命令有时候有输出、有时候有输入;有时候不一定有输入,不一定有输出;
< 从文件中读取;用于指定命令的输入
cat < notes.csv 和 cat notes.csv 运行结果是一样的
但是原理是不一样的;
cat notes.csv 接受的输入是notes.csv这个文件名,那么它要先打开notes.csv文件;打印文件内容;
cat < notes.csv cat命令接受的输入是notes.csv这个文件的内容,cat命令只负责将其内容打印,打开文件并将文件内容传递给cat命令的工作则交给终端完成;
<< 从键盘读取
<<符号的作用是将键盘的输入重定向为某个命令的输入;
sort -n <<END
输入这条命令之后,按下回车,终端就进入了键盘输入模式;
==================================================
| 管道
管道符号 |
其作用是建立命令管道;
管道也算是重定向流的一种;
将两个命令连成管道,使得linux命令的威力倍增;