用户
搜索

该用户从未签到

i春秋-呆萌菜鸟

Rank: 1

1

主题

1

帖子

31

魔法币
收听
0
粉丝
1
注册时间
2020-9-9
发表于 2021-7-19 22:53:41 1768
本帖最后由 xiehudie 于 2021-7-19 22:55 编辑

本篇文章作者邪色蝴蝶,本篇文章参与i春秋作家连载计划所属邪色蝴蝶个人,未经许可,禁止转载。

0X00:前言
各位表哥们,大家好,这是我连载的第二篇文章,有不足之处请大家多多指出。
本篇是写Linux—创建、查看和编辑文本文件。

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


QQ截图20210719203242.png

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

QQ截图20210719203348.png


0X02:将输出重定向到文件
1/0重定向可更改进程获取其输入或输出的方式。该进程并不是从键盘获取输入,也不是将输出和错误发送到终端,而是执行文件读取或写入。重定向允许我们将消息保存到通常发送给终端窗口的文件中。或者我们也可以使用重定向来丢弃输出或错误,这样它们就不会显示在终端上或保存下来。
重定向stdout可以阻止进程输出显示在终端上。仅重定向stdout不会组织sderr错误消息显示在终端上。如果文件不存在,则会创建文件。如果文件确实存在,但是所需的重定向没有附加到文件,则该文件的内容将被覆盖。
  如果想丢弃消息,特殊文件/del/null以静默方式重定向到其自身的通道输出,并且始终是空文件。(输出重定向操作符,如下图所示)


QQ截图20210719204518.png


输出重定向示例:
1.     保存时间戳


QQ截图20210719205002.png


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



QQ截图20210719205312.png

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


QQ截图20210719205456.png

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



QQ截图20210719205621.png

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



QQ截图20210719205819.png


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


QQ截图20210719205954.png

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



QQ截图20210719211634.png

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


QQ截图20210719212606.png


QQ截图20210719212617.png

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



QQ截图20210719212900.png



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


QQ截图20210719213301.png

0X04:管道、重定向和tee命令
当重定向与管道组合时,shell会首先设置整个管道,然后重定向输入/输出。如果在管道的中间用了输出重定向,则输出将转至文件,而不是前往管道中的下一个命令。
tee命令客服了这个限制。在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件。如果我们将数据想象成流管道的水,那么可将tee视觉化为管道中的T性接头,它负责输出在两个方向上的流向。(如下图所示,利用tee处理1/0传送)


QQ截图20210719214315.png

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


QQ截图20210719214621.png

QQ截图20210719214630.png

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


QQ截图20210719215023.png

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

QQ截图20210719220509.png

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中,复制和粘贴称为拖拉和放置,使用的命令字符是yp,首先将光标定位到要选择的第一个字符,然后进入可视模式。使用箭头键拓展可视选择,准备好时,按y将所选内容拖拉到内存中。将光标定位到新位置上,然后按p将所选内容放置到光标处。
Vim中的可视模式:
可视模式是一种突出显示和操作文本的绝佳方式,他有三种击键模式:
字符模式:v
行模式:shirt+v
块模式:ctrl+v
字符模式可突出显示文本块中的句子,屏幕的底部会出现visual一词;按v可进入可视字符模式;按shirt+v可进入行模式,屏幕底部会出现visual line一词;可视块模式非常适合于操作数据文件,从光标位置,按ctrl+v可进入视觉块,屏幕的底部会出现visual block一词,使用箭头可突出显示要更改的部分。





QQ截图20210719220509.png
发表于 2021-7-20 11:58:15
大佬666,局长分你个鸡腿吃!
对论坛发展有任何想法
欢迎+QQ826177911来搞事!
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册