3.编辑普通文件
3.1 数据流,重定向
- 标准输入(standard input,简称 stdin):默认情况下,标准输入指从键盘获取的输入
- 标准输出(standard output,简称 stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
- 标准错误输出(standard error output,简称 stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
- 不管正确或错误的数据都默认输出到屏幕上,所以屏幕显示是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:
- 标准输入(stdin):代码为 0
- 标准输出(stdout):代码为 1
- 标准错误输出(stderr):代码为 2
重定向操作符
概念
- 重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。
- 重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
符号
- 输出重定向操作符: > >>
- 输入重定向操作符: < <<
用法
命令 >文件 或 命令 1>文件 : 将命令执行后的结果不在默认的屏幕上显示,而是以追加的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 2>文件 : 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 2>/dev/null : 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件(黑洞)中,即将输出的错误信息丢弃掉(ls /home/ /aaa >list.txt 2>&1一样)
命令 &>文件 命令 >&文件 : 将命令执行后的正确输出信息和错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 >>文件 : 将命令执行后的正确输出信息以追加的方式写入到指定的文件中,不覆盖原文件内容,若指定的文件不存在,则自动创建该文件
命令 <文件 : 使命令从指定的文件中读取数据作为输入
命令 <<结束标识字符串 : 在命令行读取数据作为输入,直到遇到指定的结束标识字符串
#将文件读取到数据为输入
[root@redhat ~]# tr a-z A-Z < /etc/passwd
[root@redhat ~]# cat < file#设置一个结束标识符,表示输入结束
[root@redhat ~]# cat > file3 << end(将界面上输入的内容覆盖到文件里,当输入到end时结束)
3.2 echo
- 输出字符串到屏幕上
- 提取变量的值
格式
echo “字符串”
echo “$变量”(输出变量的数据)
#查看变量数据
[root@redhat ~]# aa="hello aa"
[root@redhat ~]# echo $aa
#查看shell文件执行路径
[root@redhat ~]# echo $SHELL
#合并文件
[root@redhat ~]# cat t1.txt t2.txt > t3.txt
3.3 tee
- 读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕(即想把输出保存到文件中,又想在屏幕上看到内容)
- tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时输出到文件。
格式
tee -选项 文件选项
| 选项 | 功能 |
|---|---|
| -a | 追加 |
#将数据追加到文件里但不会显示在界面上
[root@redhat ~]# cat /etc/passwd > file1
#将数据追加到文件里并显示在界面上
[root@redhat ~]# cat /etc/passwd | tee file1
3.4 vi / vim 编辑器
- 在 Linux 系统中一切都是文件,配置一个服务就是使用文本编辑器修改配置文件的参数
- 所有的 Unix 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在
- 很多个别软件的编辑接口都会主动调用 vi,如:crontab, visudo 等指令
- Vim 的发布最早可以追溯到 1991 年,英文全称为:"Vi IMproved",也就是对 vi 编辑器的提升版本,最大的特点是以字体颜色辨别语法的正确性,方便程序设计,编辑速度快
vim编辑器有三个模式
- 命令模式:也就是阅读模式,可移动光标,实现文本删除、复制、粘贴等操作
- 输入模式:编辑模式,对文件进行编辑
- 末行模式:保存、退出、查找文本
- 进入 vim 编辑器的时候默认是在命令模式
- 命令模式→输入模式:a、i、o、s、A、I、O、S
- 输入模式→命令模式:ESC 键
- 命令模式→末行模式:冒号或者 / 键
- 末行模式→命令模式:ESC 键
- 注意:输入模式和末行模式之间不能直接进入,需要通过命令模式转换
命令模式
| 按键 | 功能 |
|---|---|
| 上下左右键 | 移动光标(单个字符) |
| w | 光标向后移动(单词字符) |
| b | 光标向前移动(单词字符) |
| ^ | 光标跳转到行首 |
| $ | 光标跳转到行尾 |
| gg | 光标跳转到首行第一个光标 |
| G | 光标跳转到末行最后一个光标 |
| 行号gg / 行号G | 光标跳转到指定行 |
| 按键 | 功能 |
|---|---|
| dd | 删除光标所在行 |
| 数字dd | 删除光标开始向下n行 |
| d^ | 删除光标先前至首字符 |
| d$ | 删除光标向后至尾字符 |
| yy | 复制光标所在行 |
| 数字yy | 复制光标开始向下n行 |
| p(小写) | 粘贴到光标所在行下一行 |
| P | 粘贴到光标所在行上一行 |
| u | 撤销 |
输入模式
| 按键 | 功能 |
|---|---|
| i | 在光标前插入 |
| I | 在光标所在行行首第一个非空字符插入 |
| a | 在光标后插入 |
| A | 在光标所在行行尾最后一个非空字符插入 |
| o | 在光标所在行下一行插入 |
| O | 在光标所在行上一行插入 |
| s | 删除光标所在字符并进入插入模式 |
| S | 删除光标所在行并进入插入模式 |
末行模式
| 搜索按键 | 功能 |
|---|---|
| /word | 查找word字符串 |
| :s/old/new | 将光标“所在行“查找到的”第一个“单词”old“替换为”new“ |
| :s/old/new/g | 将光标”所在行“查找到的所有单词”old“替换为”new“ |
| :n1,n2 s/old/new/g | 将n1行到n2行全部的”old“替换为”new“ |
| :%s/old/new/g | 将整个文件内容里的”old“替换为”new“ |
| 保存退出按键 | 功能 |
|---|---|
:q | 退出(没有修改文件才能这样退) |
| :q! | 强制不保存退出(退出后文件不会做改变) |
| :w | 保存文件 |
| :w/root/file | 将文件另存为/root/file |
| :wq 或者 ZZ (命令模式下输入) | 保存并退出 |
| :wq! | 强制保存并退出 |
| 其他按键 | 功能 |
|---|---|
| :r/home/file | 将/home/file文件读入当前文件 |
| :g/word/d | 查找包含”word“的行并删除 |
| :set nu | 显示行号 |
| :set nonu | 关闭显示行号 |
| :n1,n2 d | 删除n1 到 n2行的内容 |
| :n1,n2 co n3 | 复制n1 到n2行的内容到n3行后面 |
#异常处理
#编辑文件时异常退出,再次打开文件会出现
#按R键回复文件内容
#正常处理文件,保存退出
#异常退出每次会出现以.swp 为结尾的同名文件,需要删除
rm -rf .a1.swp
#再次使用文件回复正常