本文是 i 春秋作家「xiehudie」表哥分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。本套Linux进阶教程共分为14章,欢迎大家前来系统学习。

前期回顾>>

第1章:访问命令行

第2章:从命令行管理文件

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(1)

第3章:编辑、查看和编辑文本文件

一、标准输入、标准输出和标准错误

一个运行的程序(或称为进程)需要从某位置读取输入并输出写入某位置。从shell提示符运行的命令通常从键盘读取其输入,并将输出发送到其终端端口。

进程使用称为文件描述符的编号通道来获取输入并发送输出。所有进程在开始时至少要有三个文件描述符。标准输入(通道0)从键盘通道读取输入。标准输出(通道1)将正常输出发送到终端。标准错误(通道2)将错误消息发送到终端。如果程序打开连接至其他文件的单独连接,则可能要使用更大编号的文件描述符。(进程1/0通道,如下图所示)

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(2)

通道(文件描述符)如下图所示。

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(3)

二、将输出重定向到文件

1/0重定向可更改进程获取其输入或输出的方式。该进程并不是从键盘获取输入,也不是将输出和错误发送到终端,而是执行文件读取或写入。重定向允许我们将消息保存到通常发送给终端窗口的文件中。或者我们也可以使用重定向来丢弃输出或错误,这样它们就不会显示在终端上或保存下来。

重定向stdout可以阻止进程输出显示在终端上。仅重定向stdout不会组织sderr错误消息显示在终端上。如果文件不存在,则会创建文件。如果文件确实存在,但是所需的重定向没有附加到文件,则该文件的内容将被覆盖。

如果想丢弃消息,特殊文件/del/null以静默方式重定向到其自身的通道输出,并且始终是空文件。(输出重定向操作符,如下图所示)

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(4)

输出重定向示例:

1. 保存时间戳

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(5)

2. 将日志的最后一百行复制到另一个文件

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(6)

3. 将四个文件连接成一个文件

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(7)

4. 将主目录的隐藏文件名和常规文件名列出到文件中

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(8)

5.将输出和生成的错误消息存储在一起

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(9)

6.将输出和生成的错误附加到现有文件

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(10)

三、构建管道

管道是一个或多个命令的序列,用竖线字符(|)分隔。管道将第一个命令的标准输出下一个命令的标准输入。(如下图所示,进程1/0传送)

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(11)

在某个进程输出到终端之前,管道允许另一个进程操作和格式化该进程的输出。为便于理解,可以这样想象一下:数据正在通过管道从另一个进程“流”向另一个进程,并且在其流动的管道中每个命令都会略微对其做些改动。

1.管道示例:

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(12)

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(13)

2. ls命令的输出传送到wc -l,用于统计从1s收到的行数并将该行数显示在终端

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(14)

3. 在此管道中,head将输出ls -t输出内容的前10行,并且最终结果会重定向到一个文件。

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(15)

四、管道、重定向和tee命令

当重定向与管道组合时,shell会首先设置整个管道,然后重定向输入/输出。如果在管道的中间用了输出重定向,则输出将转至文件,而不是前往管道中的下一个命令。

tee命令客服了这个限制。在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件。如果我们将数据想象成流管道的水,那么可将tee视觉化为管道中的T性接头,它负责输出在两个方向上的流向。(如下图所示,利用tee处理1/0传送)

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(16)

使用tee命令的管理示例:

1. 将ls命令的输出重定向到文件,并且将输出传递到less以便在终端以一次一屏的方式显示

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(17)

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(18)

2. 在管道末尾使用tee,则可以保存命令的最终输出并且同时输出到终端。

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(19)

五、使用vim编辑文件

Linux的一个重要设计原则是信息和配置设置通常都存储在基于文本的文件中。这些文件可以采用各种结构方式,如设置列表、类似INI的格式、结构化XML或YAML等等。但是,文本文件的优点在于能用任何简单的文件编辑器进行查看和编辑。

linux系统中文本文件用什么编辑(Linux进阶教程第3章)(20)

Vim管理模式:

Vim的一个不同寻常之处是它有几个运行模式,包括命令模式、扩展模式、编辑模式和可视模式。根据具体的模式,我们可以发出命令、编辑文本或处理文本块。

第一次打开vim时,它会以命令模式启动,可用于导航、剪切和粘贴,以及其他文本操作。通过单字符击键操作进入各个其他模式,访问特定的编辑功能:

1. 按i键进入插入模式,其中键入的所有文本将变为文件内容。按Esc键返回命令模式。

2. 按v键可选择文本块。用于进入可视模式的击键操作(v、shift v或ctrl v)也可用于退出。

3. 按:键启动扩展命令模式,可以执行的任务包括写入文件(进行保存),以及退出vim编辑器等。

最低程度的基本vim工作流:

Vim具有高效的组合击键操作,可进行高级编辑任务。I键可使vim进入插入模式。在此之后输入的所有文本内容,直到我们退出插入模式;Esc键可退出插入模式,并让vim返回命令模式;u键可撤销最近的编辑;按x键可删除单个字符;:w命令可写入(保存)文件,并保留在命令行模式中以进行更多编辑;:wq命令可写入(保存)文件并退出vim;:q!命令了退出vim,同时放弃上次写入以来进行的所有更改。

重排现有文本:

在vim中,复制和粘贴称为拖拉和放置,使用的命令字符是y和p,首先将光标定位到要选择的第一个字符,然后进入可视模式。使用箭头键拓展可视选择,准备好时,按y将所选内容拖拉到内存中。将光标定位到新位置上,然后按p将所选内容放置到光标处。

Vim中的可视模式:

可视模式是一种突出显示和操作文本的绝佳方式,他有三种击键模式:

字符模式:v

行模式:shirt v

块模式:ctrl v

字符模式可突出显示文本块中的句子,屏幕的底部会出现visual一词;按v可进入可视字符模式;按shirt v可进入行模式,屏幕底部会出现visual line一词;可视块模式非常适合于操作数据文件,从光标位置,按ctrl v可进入视觉块,屏幕的底部会出现visual block一词,使用箭头可突出显示要更改的部分。

,