第六章 vi编辑器的高级用法
6.1 更多有关vi编辑器的知识
-
启动vi编辑器有以下两种方式
- ①vi 回车(这种属于直接进入vi环境,但没申明进入具体哪个文件,所以需要用到以下的操作对输入进行保存)
- :w myfile 回车 —— 将缓冲区内容保存到myfile文件
- :wq myfile 回车——将缓冲区内容保存到myfile,同时离开vi模式
- ②vi myfile
- :w 回车 —— 将缓冲区内容保存到myfile中
- :w otherfile 回车—— 将缓冲区内容保存到otherfile中,当前文件仍然为myfile
- :wq 回车——保存到mufile文件并退出vi模式 -
只读选项:-R(eg: vi -R filename),可阅读不可修改
- :w!或:wq!使只读选项无效,将修改写入文件 -
命令选项:-c(eg:vi -c /most filename:打开filename文件后立即查找所有most字符),指将指定vi命令作为命令行的一部分
-
编辑多个文件:vi filename1 filename2 ……
- :w :n —— 先保存对当前文件的修改,再启动下一个文件
- :n! —— 放弃修改,直接启动下一个文件
- :q!—— 强制退出vi
- :ar —— 查看要同时编辑的文件名列表,中括号中的为当前正在编辑的文件
- :e 文件名—— 切换到指定文件,同时旧文件会被关闭
- :w :e 文件名—— 保存当前的修改,切换到指定文件
- :e! 文件名—— 当前修改放弃保存,直接切换
- :r 文件名—— 指定文件的内容会被插入当前光标的下一行,被插入的文件原始内容不受影响
- :[a,b] w 文件名 —— 将当前文件的一部分写到指定文件中,如果指定文件已存在,需要在w后面加上!以强制覆盖
-
6.2 重排文本
6.2.1 移动行命令,需要使用dd,p,P
eg:将光标目前所停留的行向下移动3行
- :dd ——先删除光标目前所在的行
- :2j ——光标向下移动2行
- :p —— 将被删除行放置在光标所在行的下一行
eg:将光标目前所停留的行向上移动3行
- :dd
- :2l —— 光标向上移动2行
- :P ——将被删除行放置在光标所处行的上一行
需要强调,执行dd命令进行删除操作时,被删除文本会保存在临时缓冲区中,直到被下一个复制或删除操作文本取代
6.2.2 复制行命令,需要使用yy,p,P
eg:将光标目前所停留的行复制到光标之下
- :yy ——复制
- :p —— 将被复制行的内容放置在光标所在行的下一行
eg:将光标目前所停留的行复制到光标之上
- :yy
- :P ——将被复制行的内容放置在光标所在行的上一行
需要强调,执行dd命令进行删除操作时,被删除文本会保存在临时缓冲区中,直到被下一个复制或删除操作文本取代
6.3 vi操作符的域
基本的vi命令只能在一个文本块(一个字符、一个单词、一行、一句或其他指定字符集)上操作。
所以引入域控制键能够更好控制编辑任务——命令 = 操作符 + 域控制键
域控制键:
- $ 光标位置开始到当前行尾(包括光标所在位置处的字符)
- 0 光标位置前到当前行首(不包括光标所在位置处的字符)
- e或w 光标位置开始到当前单词的字尾(包括光标所在位置处的字符)
- b:光标位置到当前所处单词的字首(不包括光标所在位置处的字符)
6.3.1 使用删除操作符d和域控制键
- 将该行光标所处位置之后的文本全部删除(作用范围是一行):d$
- 将该行光标所处位置之前的文本全部删除:d0
- 删除光标位置到这个单词词尾的所有字符(作用范围只有一个单词):dw 或 de
- 光标位置开始删除两个单词:2dw
- 从光标所处位置的前面删除到所处单词的字首:db
6.3.2 使用复制操作符和域控制键
例子1:
- y$ 将该行光标所处位置之后的文本进行复制
- 移动光标
- p 复制文本置于光标之后
例子2:
- y0 将该行光标所处位置之前的文本进行复制
- 移动光标
- P 复制文本置于光标之前
6.3.3 使用修改操作符和控制键
c+域控制符:先将指定域文本清除,然后进入文本编辑模式
- cw 光标到所处单词词尾的所有字符清除,并进入文本编辑模式
- ESC 回到命令模式
- u 撤销刚才的修改操作
- c$ 光标到所处位置到改行行尾所有字符删除,并进入文本编辑模式
6.5 光标定位键
由于屏幕一般显示行有限,超过行数需要光标滚动文件:
- ctrl+d 向下翻半页down
- ctrl+u 向上翻半页up
- ctrl+f 向下翻一页forward
- ctrl+b 向上翻一页backward
- G 光标移动到文件尾部
- n+G n为行号,光标移动到第n行,G表示大范围移动光标
- :n n为行号,光标移动到第n行
- :1 与 1G 与 gg 等价
- ctrl+g 获取当前行号,在vi底部显示行信息
6.6 定制vi编辑器
vi编辑器拥有一些参数供用户设置来控制工作环境,它们一般都有默认值。
6.6.1 选项的格式
vi模式中用set命令设置选项:
- 布尔选项(类似开关):(设定)set x (取消)set nox
- 数字式选项:(赋值)set x=number
- 串选项:(赋值)set x=string
set命令
- :set all 显示所有选项和他们的值
- :set 只显示修改过的选项
- :set X?显示选项X的值
6.6.2 设置vi环境
使用set命令要在vi编辑器中的命令模式下进行,用set进行的修改都是临时的,只对当前编辑的会话期有效。下面进行一些参数的介绍:
布尔选项:
- autoindent,默认值是noai(ai表示将新行与前一行的行首对齐)
- ignorecase,默认值是noic(ic表示在搜索选项中忽略大小写)
- magic,默认值magic(magic表示在搜索中允许使用特殊字符)
- number,默认是nonu(nu表示显示行号)
6.6.3 行长和行回绕
6.6.4 缩写和宏
缩写ab:
- :ab 缩写字符串 被缩写字符串
- 缩写字符串+空格 能召唤出被缩写的完整字符串
- :unab 缩写字符串 取消缩写
- 总结缩写是在命令模式下设定,在文本输入模式下使用
宏操作符map
- :map 单个键 命令键序列
- :map q 5dd 将q键指定为删除5行的命令
注意: - ^M 表示将Enter回车键放到宏命令序列
- ^[ 表示将Esc键放到宏命令序列
eg:指定键V,在文件中查找字unix并用UNIX替换 - map V /unix ^M cw UNIX ^[
- ^M是回车
- c是清除,会进入文本编辑模式
- w是域,表示光标往后到该单词结尾的所有字符
- ^[ 表示从文本编辑模式退出到命令模式 - unmap 单个键 对相应的宏进行取消
- 设置的宏是临时的,只能在当前会话中使用
6.6.5 .exrc文件
vi在启动时会读取配置文件.exrc进行选项设置,所以想要长久设置需要改动这个配置文件。
6.7 其他vi的命令
6.7.1 可以在vi的命令模式下运行shell命令
- :!command
- :r! command——将命令执行结果加入文本中(光标所在行的下一行)
- J——行连接,链接光标所处行的下一行,也就是把光标所处行的下一行放到光标这一行的末尾
- / ——向后搜索
- ?——向前搜索
- :[行范围]s / 被替换单词 / 新单词 / [g]
- 在当前行找到misspelled并把它替换为spelled correctly:s/misspelled/spelled correctly/
第七章 UNIX文件系统的高级操作
8.2 shell重定向
shell重定向操作符能够改变命令获取输入和发送输出的地方:
- 将命令输出保存到文件
- 将文件作为命令进行输入
8.2.1 输出重定向
- command > filename 覆盖重定向
- command >> filename 追加重定向
8.2.1 输出重定向
输入重定向允许用户从指定文件得到输入来运行命令
- command < filename 覆盖重定向
- command << filename 追加重定向
8.2.3 cat命令
- $ cat filename —— 显示文件内容
- $ cat < filename —— 将filename文件作为输入并显示内容
- $ cat -n filename —— 显示文件内容加行号
- $ cat > filename —— 覆盖式创建文件
- $ cat >> filename —— 文本追加输入,输入完毕之后按Ctrl+d退出
- $ cat filename > filename.copy ——使用cat命令和输出重定向可以复制文件
8.4 文件操作命令
如果同级,文件名或目录均可以使用相对路径,不同级则要使用绝对路径
8.4.1 复制文件:cp命令
- $ cp 文件名1 文件名2 —— 创建文件副本
- $ cp 文件名1 目录名2 —— 将文件复制到其他目录
- $ cp 文件名1 文件名2 …… 目录名 —— 将多个文件复制到其它目录
- $ cp -i 文件名1 目录名2 —— 将文件复制到其他目录,-i是命令选项,表示“如果目标文件已经存在,要求确认”
-
- $ cp -r 目录名1 目录名2 —— 将目录复制到其他目录(适用于文件夹的移动)
8.4.2 移动文件:mv命令
- $ mv 文件名 目录 —— 将文件移动到其他目录(非文件所在目录)
- $ mv 文件名1/目录1 文件名2/目录2 —— 改变文件名/目录名
- $ mv 文件名1 文件名2 …… 目录名 —— 将文件批量移动到其它目录
- $ mv -i 文件名1 目录名2 —— 将文件移动到其他目录,-i是命令选项,表示“如果目标文件已经存在,要求确认”
8.4.3 链接文件:ln命令
ln命令是在已经存在文件和新文件名之间创建链接,为已存在的文件起新名字,使用不同名字引用相同文件,所以改变任一文件内容,文件内容发生改变
- $ ln 已有文件名 链接文件名
- $ mv 文件名1 文件名2 …… 目录名 —— 在目录中创建链接文件
8.4.4 字数计算:wc命令
wc命令计算一个或多个文件的行数、字数和字符数
- $ wc filename——对应的显示结果为:行数 字数 字符数
- wc命令的选项:
- $ wc -l filename —— 只统计行数
- $ wc -c filename ——只统计字符数
- $ wc -w filename —— 只统计字数
8.5 文件名替换
常用通配符:
- ?匹配任意单个字符
*
匹配任意字符串,包括空串- [list] 匹配任一在list中的字符
- [!list] 匹配任一不在list中的字符
- 使用通配符显示隐藏文件,必须将
.
作为指定模式的一部分
8.6 其他文件操作命令
8.6.1 查找文件:find命令
- $ fine 路径名 搜索选项 动作选项(路径名控制在哪找;搜索选项控制找的内容;动作选项指定找到之后怎么办)
8.6.2 find命令中的搜索选项
- eg:$ find ./ -name “*.c” -print (文件名可以使用通配符[] ?
*
;但需要在使用时用引号括起文件名) - 搜索选项中,+表示大于;-表示小于,n后可后缀【cwbkMG】表示单位,默认单位为块。
- type是通过类型查找文件,而相应的文件类型有四种:
- b:块特殊设备文件
- c:字符特殊设备文件
- d:目录文件
- f:普通文件
8.6.2 find命令中的动作选项
- -print 显示找到文件的路径名
- -exec 用户给出命令,对找到的文件进行操作
- 命令格式:-exec 命令名 {} \ ; - -ok 用户执行命令前需要确认
- 命令格式:-ok 命令名 {} \ ;
8.6.3 显示文件的头部:head命令
8.6.4 显示文件的尾部:tail命令
8.6.5 选择文件的一部分:cut命令
- $ cut 选项 文件名
- 选项:
- -f 指定域位置
- -c 指定字符位置
- -d 指定域分隔字符,后面跟非默认域分隔符,与-f连用
8.6.6 连接文件:paste命令
- paste 文件名1…文件名n
- 选项:-d 指定具体分隔符,默认是制表符
8.6.7 另页查看工具more命令
- more命令控制键
- Space向下翻一页
- Enter向下翻一行
- q或者Q 退出more命令
8.7 UNIX的内部:文件系统
UNIX系统将每个文件名与一个整数(i节点号)相关联,并用文件i节点号来标识每个文件,所有i节点号和对应文件的基础信息保存在i节点表中,存储在磁盘中。
- :$ ls -i ——查看文件i节点号
第九章:探索shell
9.1 shell角色、特征与功能
9.1.3 显示消息:echo命令
echo:将消息参数显示在用户终端上,没有参数输出空行
-
echo参数可以任意长
-
相应的命令选项:
- -n 禁止换行(输出后不换行)
- -e 解释反斜杠引导的转义字符 -
转义字符指的是:
- 用于控制消息格式的字符,是字符串的一部分
- 以\开始,由shell解释为用户想得到的输出
9.1.4 消除元字符的特殊含义
shell提供了消除元字符(指shell中具有特殊用途的字符)、通配符的特殊含义的字符
- \:后面的元字符按照字符字面解释
- “”:双引号“”中除$ 、’’、\ 外的字符都能按照字面意思解释
- ‘’:中的任何字符都失去特殊含义
9.2 shell变量与元字符
9.2.1 显示和清除变量:set和unset
set:查看当前使用的shell变量
unset:删除不需要的变量
9.2.2 给变量赋值
shell中可创建用户变量,修改标准变量
赋值方法:变量名=变量值
变量前加$,能够使用echo命令显示变量值
9.2.4 shell的标准变量
- HOME :保存用户主目录,可用于其他命令定位主目录
- PATH :设置shell定位命令(程序)时所要查找的目录名
- 修改PATH值的格式$PATH= $PATH:/usr/mybin - PS1:设置作为命令提示符的字符串(赋值方式PS1=“提示符”),PS1中可使用转义序列,默认的PS1为[\u@\h\W]$
- \u:显示当前用户的名称
- \h:显示当前机器的主机名
- \W:显示工作目录(最底层)
- $:当前用户是root,显示#;否则显示 $
- \s:当前运行的shell名称
- \w:工作目录的完整路径
- \d :显示当前日期
- \t:显示当前时间 - PS2:多行输入一条命令时,设置第二行及以后行的提示符,默认是>
- SHELL:设置登录shell的完整路径
- TERM:设置终端类型
9.3 其他元字符
‘’
是告诉shell先执行重音符号括起来的命令,其结果替换命令行中原来的命令
:
在一个命令行中分隔多个命令,shell从左至右执行
()
几个命令放在一对括号中,编成一组执行,编组命令可以被重定向
&
可以让程序在后台运行:command &
|
:链接命令,使用管道操作符
- 管道使用方式:command A | command B
- 管道流水线:com1 | com2 | com3 | … | …
9.4 内部进程与进程管理
sleep
:使执行该命令的进程延时指定的秒数
ps
:查看进程详细信息
- PID 进程ID
- TTY 控制进程的终端号
- TIME 进程已经运行的时间
- CMD 命令名
- ps命令选项:
- -e 显示所有进程
- -f显示信息的完整列表(包括完整的命令行)
kill
发信号给指定进程,进行进程间的通信 - kill -l —— kill信号列表
- kill [信号码/号码] PID
- eg:$ kill -SIGKLII 5025 —— 向5025号进程发送9号信号
- eg:$ kill -9 5025 —— 向5025号进程发送9号信号
- PID为0,会终止所有和shell有关的进程
tee
命令和| 一起实现多重输出
grep 字符串 文件名
:在一个或多个文件中查找满足特定格式的行
- grep命令文件参数可以使用通配符,grep命令选项:
- c:只显示每个文件中包含匹配样式的行数
- i: 搜索匹配时忽略大小写
- l :只显示具有匹配的行的文件名,而不显示匹配行
- n:每个输出前显示行号
- v:仅显示不匹配的行
sort 文件名
:对文件内容按照字母或数字顺序排序
- sort命令选项:
- b:忽略前导空格
- d: 按字典顺序排序,忽略标点符号和控制字符
- f :忽略大小写区别
- n:数字以数值排序,包括负数和小数
- o:将输出存储在指定文件中
- r:倒序排序,由升序变为降序