文章目录
- 一、实验目的
- 二、实验要求
- 三、实验内容
- ⭐(1)继续练习Linux系统的文件类、目录类、进程管理类与磁盘操作类常用命令,并使用常见的选择项;
- ⭐(2)了解ed、ex行编辑器与Emacs全屏幕编辑器的工作模式、基本操作命令;
- ⭐(3)掌握vi的编辑模式与命令模式,使用文本编辑命令,正确退出vi;
- ⭐(4)使用vi命令创建用户文件。
- ⭐(5)实现vi中文本的搜索与替换。
- ⭐(6)使用vi一次编辑多个文件,利用vi的工作缓冲区进行文本的移动、复制与删除等操作,并思考缓冲区原理;
- ⭐(7)在vi中使用较为复杂的ex命令;
- 🔥🔥🔥配置文件
- ⭐(8)使用vi的设置选项设置个性化的vi环境;(可编辑.vimrc文件设置vi的工作环境)
- ⭐(9)在vi中使用map命令编写一个简单的文本处理宏;
- ⭐(10)观察/etc/profile文件(/etc/csh.login)与用户home目录下的.profile文件(.login),使用环境变量与用户变量设置个性化的用户环境;【暂未做修改】
- 🔥🔥🔥脚本
- ⭐(11)使用for循环编写一段shell程序,完成显示用户注册目录中某个或某些子目录下所有普通文件的列表,并将之转入一个文件中;
- ⭐(12)自拟题目编写一段shell脚本,完成某个特定功能,并以三种方式实现脚本的运行。
- ⭐(13)编写shell函数,在命令行运行该函数;将函数放入一个shell脚本中并运行该脚本。
- 四、实验报告要求
- Reference
一、实验目的
要求进一步掌握Linux基础操作,掌握全屏幕编辑命令vi的高级应用,熟悉shell脚本编辑与命令行编辑。
二、实验要求
通过这个第二阶段实验,要求掌握以下操作与相关知识:
(1)进一步掌握Linux系统的文件类、目录类、进程管理类与磁盘操作类常用命令;
(2)了解或掌握Linux系统支持的编辑器功能、工作模式、基本命令与使用;
(3)掌握vi的较为高级应用;
(4)掌握或了解shell的功能、句法结构、基本命令及相关命令机制;
(5)使用shell编辑功能较为简单的脚本并实现运行;
(6)使用shell函数编写脚本或独立运行。
三、实验内容
⭐(1)继续练习Linux系统的文件类、目录类、进程管理类与磁盘操作类常用命令,并使用常见的选择项;
①知识点:
目录类
.ls族:l lc lf lr lx
进程管理
sleep命令:使进程暂停执行一段时间,多用于shell程序设计中
格式:sleep time
time即为暂停秒数
wait命令:等待后台进程的完成
格式:wait [pid1 pid2…]
等待列出的pid进程结束,若无参数则一直等到全部后台进程结束
磁盘管理
文件归档命令:tar
命令格式:tar [key] [files]
key—功能字母(注意前面不用加‘ - ’号),主要功能如下:
c–创建新文档(备出);
x—从归档文件中抽出指定文档(备入),用于文档恢复。若不指定files,则抽出全部归档文件
t—列出归档文件,若不指定files,则列出全部归档文件
v—显示归档文件中的每一个文件信息(清单形式)
f—令tar命令使用key之后的第一个参数作为归档文件名(可以是普通文件、目录,主要是如软驱等设备),若无该字母则tar使用/etc/default/tar中的默认设备
files—欲归档的文件名(普通文件、目录、设备文件)
tar命令的key与files两部分中,内容与参数数量随着归档方向而确定
$tar cvf /dev/rdf0 /usr/lj
将目录lj内容归档至软盘(备出)
$tar tvf /dev/rdf0
显示软盘上的归档文件清单
$tar xvf /dev/rdf0
恢复软盘中的归档文件(按原路径备入)
文件归档与恢复(拷贝入、拷贝出)命令:cpio
可将文件拷贝到另一个归档文件或目录层次中
可从归档文件或目录中恢复文件至原状态(路径、名称)
命令格式:
cpio -o[选择项]
cpio命令的数据源一般使用过滤器找出,经管道线传入;拷出可使用输出定向符>(可用-0替代)。$ls|cpio -ocv>/dev/rfd0
cpio -i[选择项]
$cpio -icdv</dev/rfd0
cpio –p[选择项] [directory]:从标准输入读取数据源,拷贝至[directory]
$ls /usr/lj|cpio -pmdv /tmp
②示例:
$ls -l (-lc -lf -lr -lx)$vi test.sh
编辑脚本
$chmod +x test.sh
$./test.sh$tar cvf /dev/rdf0 /usr/wangjingwang#将用户目录内容归档至软盘(备出)
$tar tvf /dev/rdf0#显示软盘上的归档文件清单
$tar xvf /dev/rdf0#恢复软盘中的归档文件(按原路径备入)
⭐(2)了解ed、ex行编辑器与Emacs全屏幕编辑器的工作模式、基本操作命令;
①知识点:
Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、Vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(Vi、Emacs)。
①行编辑器每次只能对一行进行操作,使用起来很不方便。
②全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。
linux 下vi/CSDN@nanyswing
vim的ex模式用法/术之多
Emacs是流行于UNIX用户中的另一个屏幕编辑器,不同于vi和ed的是,它是单模式编辑器。即不分输入模式和编辑模式。
Emacs有多种版本,GNU Emacs是最为普遍的版本。Korn shell也支持Emacs。
Emacs可以同时工作在命令模式和输入模式中:
正常的字符和文本将被作为文本接受
控制字符和转义字符(前面加一个Esc字符或CTRL字符)将被编辑器解释为命令。
emacs百度百科👇
Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境
当要退出编辑时C-x C-c 代表着,先按C-x 再按C-c才可以退出编辑环境
Emacs,最强编辑器,没有之一/简书@程序员联盟
👇👇👇
《Hackers & Painters》
②示例:
$sudo apt install jove #Jonathan's Own Version of EMACS(emacs的一个版本)
$emacs test.txt
⭐(3)掌握vi的编辑模式与命令模式,使用文本编辑命令,正确退出vi;
①知识点:
vi是UNIX系统提供的全屏幕文本编辑器,是行编辑器ex的扩充,包括命令与编辑两种模式,使用键可切入到命令模式。
UNIX系统的行编辑器有ed、ex、edit
emacs是流行于UNIX的另外一个屏幕编辑器,是单模式的编辑器。
①插入方式(编辑模式):进入vi界面后(命令模式)键入某种插入命令,则进入编辑状态,此时键盘上所有字符均做为编辑内容。
②命令方式(命令模式):键入Esc进入命令模式。各种编辑命令都须转为命令模式后方可使用。此时键盘上的相关字符均作为编辑命令。
③ex转义方式(命令模式):可在vi中使用ex对编辑的文件进行其它设置和管理。即:wq!
等命令
进入vi
$vi filename
- 此时进入vi界面的命令状态,须键入编辑命令(i、a、O、R……)方可进入编辑状态 。
- 若将编辑状态再转为命令状态(需要转换编辑命令或者退出时),须按下Esc键。
- 屏幕最下行通常为状态行,提示文件名等操作信息
退出vi
- 属于命令模式。常用退出命令:
: wq
保存编辑内容并退出: ZZ
文件内容有修改时则保存并推出: x
与: ZZ相同: q!
强行退出,不保存(放弃缓冲区内容)
②示例:
$touch test.txt
$vi test.txt
键入内容
Esc键
:wq! #强制保存并退出
⭐(4)使用vi命令创建用户文件。
①知识点:
使用vi编辑器创建文本文件/CSDN@黄佳俊、
👇👇👇
Linux编辑器中历史最悠久的、使用最广泛的就是vi编辑器及其增强版vim。
vi是“Visual Interface”的简称,可以完成输出、删除、查找、块操作等众多文本操作。需要注意的是,vi不是一个排版程序,仅仅是一个文本编辑程序。
②示例:
$vi filename
切换编辑模式
键入内容
Esc键
切换ex转义方式(命令模式)
$cat filname
⭐(5)实现vi中文本的搜索与替换。
①知识点:
- 向下(前)搜索:
/字符串
例:/unix
则光标定位至当前向后的第一个unix串首(u位置上)
/字符串/位移
:/串/-数字(+数字)
数字缺省时默认为1
例:/unix/-5
则光标定位至当前向后的匹配行之前倒数第5行行首
/unix/+3
则光标定位至当前向后的匹配行之下数第5行行首
- 向上(后)搜索
?字符串
例:?unix
则光标定位至当前向上的第一个unix串首(u位置上)
?字符串?位移
:?串?-数字(+数字)
数字缺省时默认为1
例:?unix?-5
则光标定位至当前向上的匹配行之前倒数第5行行首
- 全局搜索替换命令(ex命令):
格式:g/模式/命令表
模式:欲搜索内容
命令表:vi命令及参数列表
:g/unix/p
:g/unix/s//linux/
:g/unix/s//linux/g
:g/unix/s//linux/gp
:g/unix/s//linux/gc
:g/^/s// /g
在每一行首插入若干空格
:s/需要替换的内容/替换内容
#默认替换文本最后一个符合的字符
:行数,s/需要替换的内容/替换内容
#替换掉指定行数的字符
②示例:
$vi test.txt
键入文本内容
ex转义状态下:
/+想搜索的字符串
?+想搜索的字符串
我的全局搜索替换识别不到unix模式:g/^/s// /g #在每一行首插入若干空格,即用空格替换
⭐(6)使用vi一次编辑多个文件,利用vi的工作缓冲区进行文本的移动、复制与删除等操作,并思考缓冲区原理;
①知识点:
优质文章👉如何使用 Vim 编辑器编辑多个文件/Linux中国@Sk
格式:
”[缓冲区名称][命令]
注意在复制时,光标移动到首行
②示例:
$vi file1.txt file2.txt file3.txt
ex转义状态下:
:n #切换下一个文件
:N #切换上一个文件
如有改动并切换,输入
:n!
:N!#文本复制
"a9Y #复制前9行
"b2Y #复制前2行,同时复制两个文件中的内容用a、b缓冲区来区分,Y/yy代表复制#文本删除
file3.txt中
"a3D #删除前3行#文本移动(剪切粘贴,不太了解这类命令属于什么类,试出来的,故有偏差)
file1.txt中
"a3MV #剪切第3行,也可以Enter选择多行
x
file3.txt中
"ap
想要粘贴多次按下p键即可
⭐(7)在vi中使用较为复杂的ex命令;
①知识点:
e命令:可将新指定的文件放入编辑缓冲区,替换前编辑缓冲区内容。
格式::e filename
注意此时该文件须已经保存或未修改,否则不执行e命令
:e! filename
可忽略前一文件的任何编辑,强行编辑新文件
:e +n filename
从新文件的第n行开始编辑
:e #
返回前一文件的编辑(%表示当前文件)
w命令:将编辑缓冲区中全部或部分内容写到当前或另一文件中
格式::w filename
(注意:filename缺省则写入当前文件)
:w! filename
可强行创建不存在的filename
:w>> filename
将缓冲区中内容附加到现有文件尾
:行号,行号 w!文件名
将指定的各行写入指定文件中。
r命令:可将指定的文件或shell命令的输出读入编辑缓冲区(当前文件的当前位置)
:r filename
:r! filename
q命令:退出vi编辑
:q!
强行退出
:wq
将缓冲区中内容附加到现有文件尾并退出
:wq!
将缓冲区中内容附加到现有文件尾并强行退出
:x
filename(可缺省)如果 filename可执行,则为真
②示例:
$:e +3 filename
#从新文件的第3行开始编辑$:1,3 w! filename
#将当前文件1至3行写入filename$:r! date
#则在当前位置读入shell的date命令的输出
🔥🔥🔥配置文件
⭐(8)使用vi的设置选项设置个性化的vi环境;(可编辑.vimrc文件设置vi的工作环境)
①知识点:
在用户目录下可以创建和修改
.vimrc
文件设置vi/vim程序的工作环境。
linux/mac用户,.vimrc可放置到~/
目录下;
windows用户,将_vimrc放置到%USERPROFILE%目录下,一般是C:\Users\XXX_vimrc
vim常用的设置选项:
set nocompatible
//不兼容vi模式
set langmenu=en_US
set fileencodings=utf-8,chinese,latin-1
set fileencoding=utf-8
//设置文件编码
set number
set ignorecase
//查找时忽略大小写
au GUIEnter * simalt ~x
// vim 以最大化打开
set incsearch
//输入进行中实时匹配查找到的字符串
set tabstop=4
// tab占4个空格
set autoindent
//自动缩进
显示当前设置
:set optionname
//查看任何选项设置的确切值
例:set nu
:set
//查看更改过的所有选项值
:set all
//查看所有选项值
取消当前设置
:set no optionname
例:set no nu
转:Vim实战指南(六):环境偏好配置/博客园@Neter
②示例:
$sudo apt install vim
切换到/home/用户目录下
$ls -a
如果没有.vimrc文件,手动创建即可
设置显示行号的命令
set nu
⭐(9)在vi中使用map命令编写一个简单的文本处理宏;
①知识点:
宏是一串从键盘上输入的命令字符。
vi提供的map
功能可以将一系列编辑命令合成一个命令,并称之为宏。
可以使用map
功能组合成多达100个vi命令,并将它映射到任何一个按键上。
文本检查拼写错误
使用UNIX系统中的检查拼写错误程序spell
$spell kkk > erros
$vi kkk
: r erros
vispall宏
可使用带vispall宏的vi检查拼并更改拼写错误事先将如下宏定义加入.exrc文件,或加入.profile或.login文件的EXINIT变量中:
map #1 1G!Gvispell ^M^[
#宏的名字叫做#1,用户在vi中只需按下F1键或1号功能键就会得到一个拼写错误的单词清单
search宏
search宏在.exrc文件或EXINIT变量中定义为:
map #2 Gi/ \<^[A\>^”adda
#宏的名字叫做#2,用户在vi中输入/unix后,只需按下F2键或2号功能键就会得到文本中所有unix拼写错误的单词清单
[VIM] map 说明/CSDN@微尘_Frank
②示例:
$vi test.txt
编辑后ESC
ex转义状态下键入map编辑的宏命令
Enter回车
命令状态下键入qq(即设置的按键)
⭐(10)观察/etc/profile文件(/etc/csh.login)与用户home目录下的.profile文件(.login),使用环境变量与用户变量设置个性化的用户环境;【暂未做修改】
①知识点:
/etc/profile是系统全局的环境变量配置文件,作用于所有用户。
用户home目录下的.profile文件是用户级别的环境变量配置文件,只作用于当前用户。
因此,修改全局环境变量需要修改/etc/profile,而修改用户级别的环境变量则需要修改.profile文件。
②示例:
$sudo apt install vim$cd etc/
$cat profile #观察etc文件夹下的.profile文件$cd home/用户名
$cat .profile
# $vim .profile #如果没有则手动创建.profile文件
linux新建用户后,在“家”目录中没有.bash_profile文件/51CTO博客@赶路人儿
🔥🔥🔥脚本
⭐(11)使用for循环编写一段shell程序,完成显示用户注册目录中某个或某些子目录下所有普通文件的列表,并将之转入一个文件中;
①知识点:
shell脚本 for循环实现文件和目录遍历/CSDN@hustyangju
【Linux-5】利用shell脚本遍历某个目录下的所有文件/CSDN@玄苦大师233
用shell写一个批量获得文件名的循环脚本/CSDN@胡说先森
②示例:
$touch test.sh
$vi test.sh
编写脚本内容#!/bin/bash
#print the directory and file
#(注意第二行是注释,第一行因文章编辑器看起来像注释的样式,实则不然,每个shell脚本都需要该代码)
#详细见下图for file in /home/wangjingwang/*
do
if [ -d "$file" ]
then echo "$file is directory"
elif [ -f "$file" ]
thenecho "$file is file"
fi
done$chmod +x test.sh
$./test.sh
ChatGPT参考答案:
#!/bin/bash#显示用户注册目录中某个或某些子目录下所有普通文件的列表
#定义目录列表
dir_list="/home/user1 /home/user2 /home/user3"#遍历所有目录
for dir in $dir_list
do
# 判断目录是否存在
if [ -d $dir ]; then
# 遍历目录下所有文件,包括子目录中的文件
for file in $(find $dir -type f)
do
# 判断是否为普通文件
if [ -f $file ]; then
echo $file >> file_list.txt
fi
done
else
echo "$dir not exist"
fi
doneecho "File list is saved to file_list.txt"
⭐(12)自拟题目编写一段shell脚本,完成某个特定功能,并以三种方式实现脚本的运行。
①知识点:
- 输入定向到shell:
$ sh < 脚本名
- 以脚本名作为shell的参数:
$ sh 脚本名[参数]
这里的sh是shell的子程序 - 为shell文件设置可执行权限,而后运行该可执行文件:
$chmod + x 脚本名
$. /脚本名 [参数]
运行shell脚本的三种方式/CSDN@秋叶原の黑猫
👇👇👇
使用chmod命令赋予该脚本可执行的权限,然后再执行;
调用解释器使得脚本执行,例如:bash、csh、csh、ash、bsh、ksh等等;
使用source命令;
②示例:
$touch test.sh
$vi test.sh
设计脚本$chmod +x test.sh
$./test.sh #脚本所在文件夹内直接./$bash test.sh
$sh test.sh #bash、csh、csh、ash、bsh、ksh等等$source test.sh
⭐(13)编写shell函数,在命令行运行该函数;将函数放入一个shell脚本中并运行该脚本。
①知识点:
函数定义方式:
(1)交互运行时可以在提示符下定义;
(2)定义在用户的初始化文件.bash_profile中,这是最常用的方式。
函数的定义由花括号中的一组命令构成,命令之后必须以分号终结。花括号两侧需留空格。
函数定义格式:
$function_name () { commands ; commands; }
$function function_name { commands ; commands; }
$function function_name () { commands ; commands; }
自学Linux Shell16.4-在命令行上使用函数/博客园@CARLOS_KONG
②示例:
$greet () { echo "Hello $LOGNAME, today is $(date)"; } #注意空格
$greet$touch test.sh
$vi test.sh
编写脚本内容,注意调用函数
$chmod +x test.sh
$./test.sh
❌报错:bash: syntax error near unexpected token `{echo’
👇👇👇
大括号与字符之间注意空格
四、实验报告要求
(1)认真撰写实验报告,实验内容与实验结果真实并具备实质性。
(2)进行客观的个人评定。
Reference
-
Linux教程(第5版)孟庆昌版 课后答案/CSDN@tony_bfx
-
最详细的VI编辑器指南/51CTO@zhongqi2513
-
最详细的 Vi 编辑器使用指南/看云👈很全