需要知道:
linux系统的输入输出
当系统运行一个程序时,需要从某个位置读取输入信息,然后经过cpu处理
最后将输出显示到屏幕或者文件,进程通过文件描述的编号通道来获取输入并输出
标准输入0 从键盘获得输入
标准输出1 输出到屏幕(即控制台)
错误输出2 输出到屏幕(即控制台)
输入设备: 就是键盘、鼠标和一些硬件设备在系统输入的字符
输出设备: 就是系统接收到我们想要实现的功能字符后,经过进程的处理产生字符并且输出到屏幕上
输入会有两种:编号1为正确输出,编号2为错误输出
默认这两种输出都会被系统定向到字符设备中 /dev /pts中
一、控制输入输出
输出重定向 : 正确为1 , 错误为2 (因为计算机为二进制)
注意:直接输出重定向会覆盖掉原文内容
> | 重定向正确输出 (将正确的定向输出到指定地方) |
---|---|
2> | 重定向错误输出 (将错误的定向输出到指定地方) |
&> | 将所有的都重定向输出 |
>file | 清空file |
步骤:
1.切换到普通用户
1.找到实验的文件
2.重定向文件:find /etc/ -name passwd > file
##定向正确输出到file
3)find /etc/ -name passwd 2> file.err
##定向错误输出到file.err
内容
4)find /etc/ -name passwd &> file.all
##定向所有输出到file.all
(5)> file ##清空file
定向输出正确或者错误的到文件中时,剩下的错误或者正确的直接显示在shell命令框,并且定向输出到的目的文件的内容会被覆盖
输出追加在后面不覆盖
>> | 追加正确输出到文件最后 |
---|---|
2>> | 追加错误输出到文件最后 |
&>> | 追加所有输出到文件最后 |
二、追加重定向
追加不会覆盖原文件内容:
(1)find /etc/ -name passwd >> file
##追加正确输出到file
(2)find /etc/ -name passwd 2>> file
##追加错误输出到file
(3)find /etc/ -name passwd &>> file
##追加所有输出到file
三、管道的应用
什么是管道以及管道的作用:
(1) | (管道)把前一条命令的输出变成后一条命令的输入
(2)管道只识别正确的信息,也无判断能力,只能让正确的信息通过 (根本就看不见错误的东西,不存在判断能力)
注意:
管道只允许正确输出通过
通过管道的输出将会变成输入,而变成输入的这些输出是会被第二条命令处理的
如果需要保存输出内容,那么需要复制一份输出,用到的命令是“tee”
!!!因为超级用户对正确错误不筛选,因此必须在普通用户下进行
1.find /etc/ -name passwd | wc -l
##结果为2,因为错误输出不能通过管道
2.find /etc -name passwd 2>&1|wc -l
##结果为19,因为编号为2的输出被“2>&1”转换为编号1
本来只有两个正确输出,后来2>&1将17个错误输出转化为正确的,因此为19
3.find /etc -name passwd 2>&1|tee file |wc -l
##保存一份输出到file再统计行数
注意:当使用tee时,一定要注意其与wc -l的顺序,如果wc -l在前,那么输出保存的内容便是wc -l统计的结果
重定向总结如下:
重定向符号:
“>“ 输出重定向到一个文件或者设备,并且覆盖原来的文件
“>! “ 输出重定向到一个文件或者设备,强制覆盖原来的文件
“>>“ 输出重定向到一个文件或者设备,追加在原来的文件后面(不覆盖原来文件的内容)
“< “ 输入重定向到一个程序
标准错误重定向符号:
“2>" 将一个标准错误输出重定向到一个文件或者设备,覆盖原来的文件
“2>>” 将一个标准错误输出重定向到一个文件或者设备,追加到原来的文件后面
“2>&1” 将一个标准错误输出重定向到标准输出 注释:1代表标准输出 2代表错误输出
“>&” 将一个标准错误输出重定向到一个文件或者设备,覆盖原来的文件
“|&” 将一个标准错误 管道输送 到另一个命令作为输入
四、输入重定向
输入重定向?
允许用户不通过键盘输入而从文件中得到输入数据,这就允许用户使用一些编辑器生成一些文件,然后将文件内容输送到一个命令中。
简单说,一般输入设备总是键盘,如果你把文件的内容作为输入,这个就是“输入重定向”
输入重定向的意思是在命令行一条一条输入的内容不必很繁琐的输入
只需要将所有想要执行的命令打包其写入一个文件中,执行此文件便可
例如:用输入重定向同时执行passwd cal date命令
先建立一个file.sh文件,并在插入模式写入以下内容
cat >file <<EOF
hello
WORLD
EOF
此模式必须在root(超级用户模式下才能成功)
必须以EOF结束才可以
file.sh passwd westos
将passwd 和 westos文件同时写在file.sh shell脚本当中,可以实现前两个文件的批处理
将两个文件打包在一块,这样有利于打包提高效率,只有超级用户才有这个权力
这样做有利于文件的批处理,将好多文件集中包装在一起.
<<之后的字符表示开始,当再次出现相同的字符时,停止输入,可以自定义字符
sh是对脚本进行调用解析,sh记录命令
五.vim的常用功能
(1)vim的模式
命令模式 | 浏览文件,临时更改vim的工作方式,对字符批量处理 |
---|---|
插入模式 | 对文件内容进行编辑 |
退出模式 | 退出vim程序 |
1、命令模式
命令模式:
浏览文件,临时更改vim的工作方式,对字符批量处理
调整vim的工作方式,在vim程序当中,写:set 调整参数
1』:set nu
##在每一行前显示行号
:set nonu
##取消行号显示
:set mouse=a
##显示鼠标
:set cursorline
##显示行线
注意:
在vim程序中设定的vim工作方式是临时的,在vim关闭后会还源之前的
如果要永久保存vim的工作方式需要编辑vim的配置文件:/etc/vimrc
在vim中进行字符搜索使用 /关键字 ,n向下匹配,N向上匹配
(2)vim中的字符搜索:
/关键字 /后面的关键字会被搜索然后高亮显示出来
注意:
当我在/后输入关键字回车之后,被搜索出来的关键字会高亮显示出来
按下n会向下匹配,按下N会向上匹配
(3)vim中的字符管理
y#字符的复制##
yl | 复制一个字母 |
---|---|
y3l | 复制3个字母 |
yw | 复制一个单词 |
y3w | 复制3个单词 |
yy | 复制1行 |
y3y | 复制3行 |
== d#字符的删除==
dl | 删除一个字母 |
---|---|
d3l | 删除3个字母 |
dw | 删除1个单词 |
d3w | 删除3个单词 |
dd | 删除1行 |
d3d | 删除3行 |
== c#字符的剪切==
p ##粘贴
u ##撤销
ctrl+r ##恢复撤销
cl | 剪切1个字母 |
---|---|
c3l | 剪切3个字母 |
cw | 剪切1个单词 |
c3w | 剪切3个单词 |
cc | 剪切1行 |
c3c | 剪切3行 |
注意:
在剪切之后vim会进入插入模式
如果要粘贴需要按【esc】退出插入模式然后按p粘贴
输入按键时,一个一个依次按下
(4)vim的可视化模式(可以进行批量处理):
ctrl + v ##在这个模式下可以选择区域操作,此时左下角出现了VISUSL BLOCK,表示进入了vim可视化模式
批量添加字符的流程如下:
1.用ctrl + v 选中要加入字符所在的列
2.再按大写的I
3.然后输入要加入的字符
4.最后按【esc】即可
5.按下ctrl+v,进入可视化模式,然后利用上下键选中所要加入字符的列
按下大写的i,进入插入模式
输入所要加入的字符
按下esc键,就可以看到批量操作的结果
(5)字符的替换:
:%s/要替换的字符/替换成的字符/g
:%s/@/g ##替换全文的:为@
:1,5s/@/g ##替换1-5行的:为@
替换后:
注意:
%s标示所有的行
g标示所有的列
即替换选中的所有行和列
(6)vim的分屏功能:
ctrl+w s | 上下分屏(先按ctrl+w再按s) |
---|---|
ctrl+w v | 左右分屏 |
ctrl+w c | 关闭光标所在屏幕 |
ctrl+w 上下左右 | 光标移动到指定屏幕 |
:sp file2 | 同时编辑当前文件和file2 |
在命令模式下光标的移动:
gg ##光标移动到文件的第一行
G ##光标移动到文件的最后
:数字 ##光标移动到到指定的行
(7)插入模式:对文件内容进行编辑
插入模式下光标的移动
i | 光标所在位置插入 |
---|---|
I | 光标所在行行首插入 |
o | 光标所在行下一行插入 |
O | 光标所在行的上一行插入 |
a | 光标所在字符的下一个字符插入 |
A | 光标所在行的行尾插入 |
s | 光标所在字符删除并插入 |
S | 光标所在行删除并插入 |
(8)退出模式:退出vim程序
:q | 退出,在文件内容没有被改变时使用 |
---|---|
:wq | 退出保存 |
:q! | 强制退出不保存,在改变文件后不想保存时使用 |
:wq! | 强制退出保存,在对只读文件编写时使用,注意:所编辑的只读文件必须时当前用户的文件 或者当前操作的用户时root |