系统中输入输出的管理
1.理解系统的输入输出
文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket。
最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应。
Shell会自动为我们打开和关闭0、1、2这三个文件描述符,我们不需要显式地打开或关闭它们。标准输入是命令的输入,默认指向键盘;标准输出是命令的输出,默认指向屏幕;标准错误是命令错误信息的输出,默认指向屏幕。
简单来说0表示我们输入的信息,1表示输出的正确结果,2表示输出的错误结果。
2.管理输入输出的符号
##输出重定向
用>定向正确输出
2> ##重定向错误输出
&> ##重定向所有输出
注意:
重定向会覆盖原文件内容
示例:
注意:以下实验必须在student用户下完成
find /etc/ -name passwd > file ##定向正确输出到file
find /etc/ -name passwd 2> file.err ##定向错误输出到file
find /etc/ -name passwd &> file.all ##定向所有输出到file
file ##清空file
find /etc/ -name passwd
查找/etc下名为passwd的文件并显示出来
该目录下有许多名为passwd的文件,但正确的只有两个(以find开头的文件全部为错误文件)
find /etc/ -name passwd > file
定向正确输出到文件file中
可以看到两条正确的命令不见了(实际是这两条命令被定向到文件file中)
find /etc/ -name passwd 2> file1
定向错误输出到文件file1中
可以看到,运行该命令后只有正确的文件被显示,错误的文件都被定向到(保存到)文件file1中
find /etc/ -name passwd &> file2
定向所有输出到file2,在运行该命令后,并没有文件显示,使用cat命令查看file2,发现所有的文件都被保存在file2中。
重定向覆盖原文件
重定向会覆盖原文件,从图中可以看到,原本file中只有两条正确的文件,而在使用定向含有passwd的文件全部到file时,再次查看文件file,可以发现文件file的内容被替换为所有含有passwd的文件。
##输出追加
>> ##追加正确输出到文件最后
2>> ##追加错误输出到文件最后
&>> ##追加所有输出到文件最后
示例:
find /etc/ -name passwd >> file ##追加正确输出到file
find /etc/ -name passwd 2>> file.err ##追加错误输出到file
find /etc/ -name passwd &>> file.all ##追加所有输出到file
find /etc/ -name passwd >> file
追加正确输出到文件file中
第一张图可以看到文件file中只存在两个正确的文件,在运行该命令后,从图二再次查看file的结果来看,file中多出了两个正确的passwd文件,之前的正确文件也没有被覆盖。
find /etc/ -name passwd 2>>file
追加错误文件到文件file中
通过该命令可以看到,正确的结果显示在屏幕,二错误结果则会被追加到文件file中。
find /etc/ -name passwd &>>file
追加所有含有passwd的文件到文件file中,file文件本来只有正确的两个文件,在运行该命令后又把所有含有passwd的文件加到文件file中,再次查看文件file,发现它会多出很多的命令。
管道的应用
1.管道的作用
“|” 管道的作用是把前一条命令的输出变成后一条命令的输入
注意:
管道只允许正确输出通过
通过管道的输入将会变成输入,而变成输入的这些输出是会被第二条命令处理的
如果需要保存输出内容,那么需要复制一份输出,用到的命令是“tee”
此实验在普通用户下操作:
find /etc/ -name passwd | wc -l ##会看到的结果为2,因为错误输出不能通过管道
find /etc -name passwd 2>&1|wc -l ##会看到19,因为编号为2的输出被“2>&1”转换为编号1
find /etc -name passwd 2>&1|tee file |wc -l ##保存一份输出到file再统计行数
find /etc/ -name passwd | wc -l
因为管道符只允许正确的结果输出,所以通过管道的文件只有两行,所以结果为2,错误的结果则被输出到屏幕.
find /etc -name passwd 2>&1|wc -l
因为所有的错误文件都被定向为正确,所以没有错误输出,全部都为正确输出,所以统计的行数为19,屏幕无输出。
find /etc -name passwd 2>&1|tee file |wc -l
管道符输出的结果可以用”tee“来保存到文件中,所有错误输出被定向为正确,所以统计的行数为19,无错误输出。
find /etc -name passwd 2>&1|wc -l |wc -l
为什么最后的输出是1呢?因为第一个统计行数的命令统计完毕后的结果为”19“,而”19“会被当作输入再次进入管道,第二次统计的行数实则是"19"的行数,所以输出结果为1.
vim的常用功能
1.vim的模式
命令模式
浏览文件,临时更改vim的工作方式,对字符批量处理
插入模式
对文件内容进行编辑
退出模式
退出vim程序
###命令模式###
1)
调整vim的工作方式
在vim程序中
:set 调整参数
示例:
:set nu ##在每一行前显示行号
:set nonu ##取消行号显示
:set mouse=a ##显示鼠标
:set cursorline ##显示行线
注意:
在vim程序中设定的vim工作方式是临时的,在vim关闭后会还源
如果要永久保存vim的工作方式需要编辑vim的配置文件:/etc/vimrc
vim /etc/vimrc
:set nu显示行号
:set nonu取消行号显示
- 字符的搜索
/关键字
n向下匹配
N向上匹配
见上一篇linux文件管理命令中查看文件模块。
-
字符的管理
y
yl ##复制一个字母
y3l ##复制3个字母
yw ##复制一个单词
y3w ##复制3个单词
yy ##复制1行
y3y ##复制3行
复制“llllllllllello”
复制字母“o”
复制一行
d
dl ##删除一个字母
d3l ##删除3个字母
dw ##删除1个单词
d3w ##删除3个单词
dd ##删除1行
d3d ##删除3行
按字母删除
按行删除
c
cl ##剪切1个字母
c3l ##剪切3个字母
cw ##剪切1个单词
c3w ##剪切3个单词
cc ##剪切1行
c3c ##剪切3行
“注意:在剪切之后vim会进入插入模式,如果要粘贴需要按【esc】退出插入模式然后按p粘贴”p ##粘贴
u ##撤销
ctrl+r ##恢复撤销
在剪切后,文件会进入insert模式,先按“esc”退出insert模式,然后按p粘贴。
-
vim可视化模式
ctrl + v ##在这个模式下可以选择区域操作
批量添加字符
ctrl + v 选中要加入字符所在的列
按大写的I
加入字符
按【esc】 -
字符的替换
:%s/要替换的字符/替换成的字符/g
:%s/: /@/g ##替换全文的:为@
:1,5s/: /@/g ##替换1-5行的:为@
注意:
%s标示所有的行
g标示所有的列:%s/ll/mm/g ##替换全文的ll为mm
:1,5s/mm/ll/g 替换1-5行的ll为mm
替换前的图
替换后的图
6)
vim 的分屏功能
ctrl+w s ##上下分屏
ctrl+w v ##左右分屏
ctrl+w c ##关闭光标所在屏幕
ctrl+w 上下左右 ##光标移动到指定屏幕
:sp file2 ##同时编辑当前文件和file2
使用ctrl+w s与ctrl+w v之后的界面如下所示
用ctrl+w移动光标,然后用ctrl+w c来关闭光标所在的屏幕。
7)
在命令模式下光标的移动
gg 光标移动到文件的第一行
G 光标移动到文件的最后
:数字 ##光标移动到到指定的行
#####插入模式######
1)
插入模式下光标的移动
i ##光标所在位置插入
I ##光标所在行行首插入
o ##光标所在行下一行插入
O ##光标所在行的上一行插入
a ##光标所在字符的下一个字符插入
A ##光标所在行的行尾插入
s ##光标所在字符删除并插入
S ##光标所在行删除并插入
####vim的退出模式#####
:q ##退出,在文件内容没有被改变时使用
:wq ##退出保存
:q! ##强制退出不保存,在改变文件后不想保存时使用
:wq! ##强制退出保存 在对只读文件编写时使用,注意,所编辑的只读文件必须时当前用户的文件
##或者当前操作的用户时root
修改文件后按:q退出系统会报错,因为文件内容发生改变。
修改文件后按:wq退出保存。
修改文件后若不想保存退出,按:q!即可。