[操作系统] Linux学习笔记(五)标准IO和管道与vim高级文本编辑器

4917 1
暗夜星魂 2021-12-10 19:00:05 | 显示全部楼层 |阅读模式
​​io指的是input和output 将程序或者文件的内容输出到屏幕或者文件内

标准的输入和输出
进程IO通道(文件描述符)
——————————————————————————————————————
  编 号               通过名称                 描述                     默认设备                         用法  
——————————————————————————————————————
      0                   stdin                    标准输入                 键盘                              仅读取
——————————————————————————————————————
      1                   stdout                  标准输出                显示器                          仅写入
——————————————————————————————————————
      2                   stderr                 标准错误输出           显示器                          仅写入
——————————————————————————————————————
     3+                  filename               其他文件                   无                        读取或者写入
——————————————————————————————————————

输出重定向操作符
>file 重定向stdout以覆盖文件

>>file 重定向stdout以追加到文件

2>file 重定向stderr以覆盖文件

2>/dev/null 重定向stder到/dev/null

&>file 重定向stdout和stderr以覆盖同一个文件     等同于>file2>&1

&>>file重定向stdout和stderr以追加同一个文件    等同于>>file2>&1

输出:标准输出(正确输出)
错误输出
全部输出
输入:标准输入(从键盘读取内容)
ehco redhat|passwd --stdin
​
输出重定向:cat 1.txt > 覆盖
/echo >> 追加
2 > 错误输出
&> 全部输出
​
/dev/null 空文件 linux黑洞


重定向输出到文件-示例
以下命令不做为root用户运行时,产生输出错误:
   $ find /etc - name passwd
可以执行以下操作保存输出和错误信息
   $ find /etc - name passwd > find.out
   $ find /etc - name passwd 2> /dev/null
   $ find /etc - name passwd > find.out 2 >find.err

less:一次查看一个页面的输入
$ ls -l /etc|less
mail:发送输入通过email
$ echo "test email" | mail -s "test user@example.com
lpr:发送输入到打印机
   $ echo  “test print" |lpr
   $ echo "test print" |lpr -P print_name
():结合多个应用程序的STDOUT
   $(cal 2007 ;cal 2008)|less

管道符
  command1 | command2 | command3...等
将commmand1的标准输出作为command2的标准输入,而不输出到屏幕
错误的输出不能通过管道

将管道前面的命令的输出结果作为管道后面的输入参数 只能接收正确输出

三通管道
做用户提醒 也是接收正确的用户
tee用法
  $ command1 | tee filename | command2
存储command1的stdout在filename里,然后通过管道传给command2
使用:
故障诊断复杂的管道
同时查看和记载输出

stdin的使用
从文件重定向stdin
使用  <   重定向标准输入
某些命令能接收数据的重定向从文件到标准输入:
$ tr 'A-Z' 'a-z'<.bash_profile
以上命令将把bash_profile文件中的大写字符全部转换成小写字符
等效于:$ cat .bash_profile | tr 'A-z' 'a-z

发送多行到stdin
使用  <<  word 从键盘重定向多行到stdin
接收所有的标准输入直到输入word字符
例如:
$ mail -s "Please Call" jane@example.com < < END(END为结束符,可以是任意的)
  > hello redhat
  > hello huawei
  > hello weibo
  > END


vim介绍
vim是增强的文本编辑器
vim具有语法纠正的功能
vim是vi的高级版本,由vim-enhanced软件包提供
gvim:vim的图形化版本    提供在vim-x11包里
优点:
速度:操作键盘次数减少(通过快捷键来操作文本)
简单:不依赖鼠标/图形(最小化运行)
可用:可适应于多种类unix系统(兼容unix和各种发行版本的linux)
缺点:
入门难    着重在于键盘的操作速度

vim的三种工作模式
命令模式:这种模式是用于文件的导航,剪切和粘贴,和简单的命令。打开文件的第一个模式就算命令模式
插入模式:这种模式是用于正常的文本编辑。
退出模式:这种模式是用来保存,退出,并打开文件,以及搜索和替换和其他更复杂的操作。

用vim打开一个文件
运行vim:
vim filename
如果文件存在则该文件被打开并显示内容
如果文件不存在,则vim在第一次编辑并保存的时候创建这个文件

插入模式-修改文件
在命令模式下按以下键进入插入模式:
i         光标左边插入文本
a        在光标右边插入文本
o        在光标所在行的下一行插入新行
I          在行首插入文本
A         在一行的结尾处添加文本
O        在光标所在行的上一行插入新行

命令模式  -   移动光标
——————————————————————————————————————————
   操作类型                               操作键                                                              功能
——————————————————————————————————————————
光标方向移动                      ↑    ↓   ←    →                                               上,下,左,右
——————————————————————————————————————————
     翻页                              Page Down或Ctrl + F                                    向下翻动一整页内容  
——————————————————————————————————————————
     翻页                              Page UP或Ctrl + B                                        向上翻动一整页内容
——————————————————————————————————————————
  行内快速跳转             Home键, ^  , 数字"0” 和 end键 , “$”键          跳转至行首  和  跳转至行尾
——————————————————————————————————————————
  行间快速跳转                   1G,gg  和  G   和    #G              跳转到文件的首行  和  末尾行 和第#行
——————————————————————————————————————————
     行号显示                     :set nu   和   set nonu   在编辑器中显示行号和取消编辑器中的行号显示
——————————————————————————————————————————

命令模式-复杂,剪切和粘贴
删除:
x或Del                             删除光标处的单个字符
dd                                    剪切当前光标所在行
Ndd                                 剪切前光标所在行以及下面N-1行
cc                                     替换改行,并进入插入模式
d^                                    删除当前光标之前到行首的所有字符
d$                                    删除当前光标处到行尾的所有字符
dw                                   删除当前光标处到词尾的所有字符

复制:     
Nyy                                   复制当前N行整行的内容到剪切板
:Start,end copy dest         将start到end行的内容复制到dest行以下
移动:
;Start,end m dest              将start到end行的内容移动到dest行以下
粘贴:
p                                       将缓冲区中的内容粘贴到光标位置处之后
P(大写)                        粘贴到光标位置处之前

命令模式
文件内容查找
/word                                从上而下在文件中查找字符串“word”
?word                               从下而上在文件中查找字符串“word”
   n                                    定位下一个匹配的被查找字符串
   N                                   定位上一个匹配的被查找字符串

撤销
u                                       按一次取消最近的一次操作多次重复按u键,恢复已进行的多步操作
U                                       撤销光标所在行的更改
Ctrl-r                                  取消最后一次“撤销”
.                                         重复操作

退出模式
保存退出
保存文件:
:w                                      保存当前文件
:w /root/newfile                  另存为其他文件
:m,nw 文件名                     把m到n行内容另存到指定文件中

退出vim:
:q                                        未修改退出
:q!                                       放弃对文件内容的修改,并退出vim

:wq                                      保存文件退出
:wq!                                     强制保存文件退出

查找替换
:s /old/new                           将当前行中查找到的第一个字符“old” 串替换为 “new”
:s /old/new/g                        将当前行中查找到的所有字符串“old”替换为“new”
:m,n s/old/new/g                  在行号“m,n”范围内替换所有的字符串”old“为”new“
:% s/old/new/gi                    在整个文件范围内替换所有的字符串”old“为”new“
:s /old/new/c                        在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认

可视化模式
允许选择文本块:
  • v开始字符高亮选定
  • V开始行高宽
  • ctrl+v列方向高亮选定
高亮显示的文本能被删除d,拷贝y,替换c,搜索/替换:s/old/new等

多行注释
  • ctrl+v  进入列编辑模式
  • 向下或向上移动光标
  • 把需要注释的行的开头标记起来
  • 然后按大写的I
  • 再插入注释符,比如”#“
  • 再按Esc,就会全部注释了。

多窗口模式
在单个vim屏幕中多个文档能被查看
Ctrl   w   ,s:横向分割屏幕
Ctrl   w   ,v:纵向分割屏幕
Ctrl   w   ,方向键:在窗口间移动
退出模式的指令只影响当前窗口
:sp file 在同一个窗口打开其他文件
:help windows :显示更多窗口命令


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行