前言
在之前的学习中,我们已经掌握了Linux中的一些基本指令,已经可以实现自己创建,删除文件目录,复制移动文件等各种操作了,接下来我们将继续深入,从Linux的一切皆文件的思想开始,彻底理解Linux中重定向的概念。
学习本文,还需要一些C语言的基础。如果有C语言的部分看不懂,可以选择性跳过,C语言属于拔高部分。
1.Linux中文件的概念
学习Linux,必须接受一个Linux中的思想:一切皆文件。包括各种硬件:磁盘,键盘,麦克风,显卡,网卡等,尽管他们的物理结构各不相同,但在Linux中均可以看作一个个文件。
这些设备虽然在物理结构上大相径庭,但是他们的操作逻辑是相同的,都是需要输入输出的。所以Linux用大一统的思想把他们都当成了文件。
2.输出重定向
1.引入:
我们想在显示器中输出一些内容,可以使用命令echo
:
想输出什么,就在echo面的双括号内写入什么即可。上面的例子中,我们使用echo,在显示器上输出了一个hello world
。
我们刚刚学到了Linux中的思想,一切皆文件,所以这个命令又可以理解为向显示器这个文件中写入字符内容hello world
。
那么我们是否可以改变一下输出的方向,让这串字符输出到一个具体的文件中去呢?这就是我们接下来要讲的,输出重定向。
2.将内容输出到具体文件中:
1)输出到不存在的文件中:
使用>,改变了输出的方向,本来应该输出到显示器中的内容,现在被输出到了一个具体的文件中。如果这个指定文件不存在,那么系统会自己创建一个文件,并向其中写入你输入的内容。
2)输出到存在的文件中:
发现文件中原有的内容被覆盖了,变成了新的内容。这里有一个规则,每次写入文件之前,先把文件原内容清空,然后再把新内容写入。
我们知道,Linux中大部分的指令都是通过C/C++写的,>
这个指令会被解释成一个文件操作。先进行文件内容的清空,再进行写入。
那么如果我们想清空一个文件中的内容,可以这样操作:
只进行了文件内容的清空,而没有进行写入。
3)通过C语言代码实现文件的写入:
先使用命令vim log.c
,编辑一个叫log.c
的文件(文件名不可以随意取,后缀需是.c
,因为这是gcc
编译器只认识.c
后缀的文件):
以w的方式打开文件,会先清空文件原有的内容。
接着编译这个.c文件,执行生成的可执行程序:
成功将指定内容写入到指定文件中,通过C语言实现了文件的写入。
3.追加重定向
前面,我们学会了向一个文件中写入内容,但是这样的操作会令文件原本的内容清空。那么,如何在保存文件原本内容的前提下,向文件中追加内容呢?下面就让我们来学习一下。
1.使用>>
指令,追加内容:
2.使用语言代码,实现追加:
1)编辑log.c文件:
以a的方式打开文件,可以向文件中追加内容。
2)重新编译.c文件,同时执行多次可执行程序:
4.输入重定向
1.引入:
在学习Linux基本指令时,我们已经知道了,如果什么参数都不给,只在命令行输入cat就直接回车,效果是这样的:
可以发现,我们用键盘输入什么,再按回车,显示器就输出什么。这里,我们可以将cat的作用理解为,从键盘上读入数据,然后直接输出到显示器上。
那么,是否可以重定向输入,让cat不再从键盘读取数据,而是从具体的文件中呢?这就是我们接下来学习的内容。
2.用cat从具体文件中读入内容:
使用命令<
,改变输入的方向,从文件test.txt中读取数据,并输出到显示器中。
还可以集合cat的选项来使用输入重定向:
3.直接cat test.txt
和cat < test.txt
有什么区别呢?
这一点我们暂时不讲,留一个疑问,等学到命令行参数的时候,再具体讲解。
小结
在本文中,我们只是浅浅的认识了一下重定向,知道的如何使用重定向。关于重定向底层原理,和一些更深入的东西,我会在今后的文章中继续讲解,谢谢大家的支持。