一、實(shí)驗(yàn)?zāi)康?/h2>
要求進(jìn)一步掌握Linux基礎(chǔ)操作,掌握全屏幕編輯命令vi的高級(jí)應(yīng)用,熟悉shell腳本編輯與命令行編輯。
二、實(shí)驗(yàn)要求
通過(guò)這個(gè)第二階段實(shí)驗(yàn),要求掌握以下操作與相關(guān)知識(shí):
(1)進(jìn)一步掌握Linux系統(tǒng)的文件類(lèi)、目錄類(lèi)、進(jìn)程管理類(lèi)與磁盤(pán)操作類(lèi)常用命令;
(2)了解或掌握Linux系統(tǒng)支持的編輯器功能、工作模式、基本命令與使用;
(3)掌握vi的較為高級(jí)應(yīng)用;
(4)掌握或了解shell的功能、句法結(jié)構(gòu)、基本命令及相關(guān)命令機(jī)制;
(5)使用shell編輯功能較為簡(jiǎn)單的腳本并實(shí)現(xiàn)運(yùn)行;
(6)使用shell函數(shù)編寫(xiě)腳本或獨(dú)立運(yùn)行。
三、實(shí)驗(yàn)內(nèi)容
?(1)繼續(xù)練習(xí)Linux系統(tǒng)的文件類(lèi)、目錄類(lèi)、進(jìn)程管理類(lèi)與磁盤(pán)操作類(lèi)常用命令,并使用常見(jiàn)的選擇項(xiàng);
①知識(shí)點(diǎn):
目錄類(lèi)
.ls族:l lc lf lr lx
進(jìn)程管理
sleep命令:使進(jìn)程暫停執(zhí)行一段時(shí)間,多用于shell程序設(shè)計(jì)中
格式:sleep time
time即為暫停秒數(shù)
wait命令:等待后臺(tái)進(jìn)程的完成
格式:wait [pid1 pid2…]
等待列出的pid進(jìn)程結(jié)束,若無(wú)參數(shù)則一直等到全部后臺(tái)進(jìn)程結(jié)束
磁盤(pán)管理
文件歸檔命令:tar
命令格式:tar [key] [files]
key—功能字母(注意前面不用加‘ - ’號(hào)),主要功能如下:
c–創(chuàng)建新文檔(備出);
x—從歸檔文件中抽出指定文檔(備入),用于文檔恢復(fù)。若不指定files,則抽出全部歸檔文件
t—列出歸檔文件,若不指定files,則列出全部歸檔文件
v—顯示歸檔文件中的每一個(gè)文件信息(清單形式)
f—令tar命令使用key之后的第一個(gè)參數(shù)作為歸檔文件名(可以是普通文件、目錄,主要是如軟驅(qū)等設(shè)備),若無(wú)該字母則tar使用/etc/default/tar中的默認(rèn)設(shè)備
files—欲歸檔的文件名(普通文件、目錄、設(shè)備文件)
tar命令的key與files兩部分中,內(nèi)容與參數(shù)數(shù)量隨著歸檔方向而確定$tar cvf /dev/rdf0 /usr/lj
將目錄lj內(nèi)容歸檔至軟盤(pán)(備出)$tar tvf /dev/rdf0
顯示軟盤(pán)上的歸檔文件清單$tar xvf /dev/rdf0
恢復(fù)軟盤(pán)中的歸檔文件(按原路徑備入)
文件歸檔與恢復(fù)(拷貝入、拷貝出)命令:cpio
可將文件拷貝到另一個(gè)歸檔文件或目錄層次中
可從歸檔文件或目錄中恢復(fù)文件至原狀態(tài)(路徑、名稱)
命令格式:cpio -o[選擇項(xiàng)]
cpio命令的數(shù)據(jù)源一般使用過(guò)濾器找出,經(jīng)管道線傳入;拷出可使用輸出定向符>(可用-0替代)。$ls|cpio -ocv>/dev/rfd0
cpio -i[選擇項(xiàng)]$cpio -icdv</dev/rfd0
cpio –p[選擇項(xiàng)] [directory]:從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)源,拷貝至[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#將用戶目錄內(nèi)容歸檔至軟盤(pán)(備出)
$tar tvf /dev/rdf0#顯示軟盤(pán)上的歸檔文件清單
$tar xvf /dev/rdf0#恢復(fù)軟盤(pán)中的歸檔文件(按原路徑備入)
?(2)了解ed、ex行編輯器與Emacs全屏幕編輯器的工作模式、基本操作命令;
①知識(shí)點(diǎn):
Linux系統(tǒng)提供了一個(gè)完整的編輯器家族系列,如Ed、Ex、Vi和Emacs等,按功能它們可以分為兩大類(lèi):行編輯器(Ed、Ex)和全屏幕編輯器(Vi、Emacs)。
①行編輯器每次只能對(duì)一行進(jìn)行操作,使用起來(lái)很不方便。
②全屏幕編輯器可以對(duì)整個(gè)屏幕進(jìn)行編輯,用戶編輯的文件直接顯示在屏幕上,修改的結(jié)果可以立即看出來(lái),克服了行編輯的那種不直觀的操作方式,便于用戶學(xué)習(xí)和使用,具有強(qiáng)大的功能。
linux 下vi/CSDN@nanyswing
vim的ex模式用法/術(shù)之多
Emacs是流行于UNIX用戶中的另一個(gè)屏幕編輯器,不同于vi和ed的是,它是單模式編輯器。即不分輸入模式和編輯模式。
Emacs有多種版本,GNU Emacs是最為普遍的版本。Korn shell也支持Emacs。
Emacs可以同時(shí)工作在命令模式和輸入模式中:
正常的字符和文本將被作為文本接受
控制字符和轉(zhuǎn)義字符(前面加一個(gè)Esc字符或CTRL字符)將被編輯器解釋為命令。
emacs百度百科??
Emacs不僅僅是一個(gè)編輯器,他是一個(gè)整合環(huán)境,或可稱它為集成開(kāi)發(fā)環(huán)境
當(dāng)要退出編輯時(shí)C-x C-c 代表著,先按C-x 再按C-c才可以退出編輯環(huán)境
Emacs,最強(qiáng)編輯器,沒(méi)有之一/簡(jiǎn)書(shū)@程序員聯(lián)盟
??????
《Hackers & Painters》
②示例:
$sudo apt install jove #Jonathan's Own Version of EMACS(emacs的一個(gè)版本)
$emacs test.txt
?(3)掌握vi的編輯模式與命令模式,使用文本編輯命令,正確退出vi;
①知識(shí)點(diǎn):
vi是UNIX系統(tǒng)提供的全屏幕文本編輯器,是行編輯器ex的擴(kuò)充,包括命令與編輯兩種模式,使用鍵可切入到命令模式。
UNIX系統(tǒng)的行編輯器有ed、ex、edit
emacs是流行于UNIX的另外一個(gè)屏幕編輯器,是單模式的編輯器。
①插入方式(編輯模式):進(jìn)入vi界面后(命令模式)鍵入某種插入命令,則進(jìn)入編輯狀態(tài),此時(shí)鍵盤(pán)上所有字符均做為編輯內(nèi)容。
②命令方式(命令模式):鍵入Esc進(jìn)入命令模式。各種編輯命令都須轉(zhuǎn)為命令模式后方可使用。此時(shí)鍵盤(pán)上的相關(guān)字符均作為編輯命令。
③ex轉(zhuǎn)義方式(命令模式):可在vi中使用ex對(duì)編輯的文件進(jìn)行其它設(shè)置和管理。即:wq!
等命令
進(jìn)入vi$vi filename
- 此時(shí)進(jìn)入vi界面的命令狀態(tài),須鍵入編輯命令(i、a、O、R……)方可進(jìn)入編輯狀態(tài) 。
- 若將編輯狀態(tài)再轉(zhuǎn)為命令狀態(tài)(需要轉(zhuǎn)換編輯命令或者退出時(shí)),須按下Esc鍵。
- 屏幕最下行通常為狀態(tài)行,提示文件名等操作信息
退出vi
- 屬于命令模式。常用退出命令:
-
: wq
保存編輯內(nèi)容并退出 -
: ZZ
文件內(nèi)容有修改時(shí)則保存并推出 -
: x
與: ZZ相同 -
: q!
強(qiáng)行退出,不保存(放棄緩沖區(qū)內(nèi)容)
②示例:
$touch test.txt
$vi test.txt
鍵入內(nèi)容
Esc鍵
:wq! #強(qiáng)制保存并退出
?(4)使用vi命令創(chuàng)建用戶文件。
①知識(shí)點(diǎn):
使用vi編輯器創(chuàng)建文本文件/CSDN@黃佳俊、
??????
Linux編輯器中歷史最悠久的、使用最廣泛的就是vi編輯器及其增強(qiáng)版vim。
vi是“Visual Interface”的簡(jiǎn)稱,可以完成輸出、刪除、查找、塊操作等眾多文本操作。需要注意的是,vi不是一個(gè)排版程序,僅僅是一個(gè)文本編輯程序。
②示例:
$vi filename
切換編輯模式
鍵入內(nèi)容
Esc鍵
切換ex轉(zhuǎn)義方式(命令模式)
$cat filname
?(5)實(shí)現(xiàn)vi中文本的搜索與替換。
①知識(shí)點(diǎn):
- 向下(前)搜索:
/字符串
例:/unix
則光標(biāo)定位至當(dāng)前向后的第一個(gè)unix串首(u位置上)
/字符串/位移
:/串/-數(shù)字(+數(shù)字)
數(shù)字缺省時(shí)默認(rèn)為1
例:/unix/-5
則光標(biāo)定位至當(dāng)前向后的匹配行之前倒數(shù)第5行行首/unix/+3
則光標(biāo)定位至當(dāng)前向后的匹配行之下數(shù)第5行行首
- 向上(后)搜索
?字符串
例:?unix
則光標(biāo)定位至當(dāng)前向上的第一個(gè)unix串首(u位置上)
?字符串?位移
:?串?-數(shù)字(+數(shù)字)
數(shù)字缺省時(shí)默認(rèn)為1
例:?unix?-5
則光標(biāo)定位至當(dāng)前向上的匹配行之前倒數(shù)第5行行首
- 全局搜索替換命令(ex命令):
格式:g/模式/命令表
模式:欲搜索內(nèi)容
命令表:vi命令及參數(shù)列表: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/需要替換的內(nèi)容/替換內(nèi)容
#默認(rèn)替換文本最后一個(gè)符合的字符:行數(shù),s/需要替換的內(nèi)容/替換內(nèi)容
#替換掉指定行數(shù)的字符
②示例:
$vi test.txt
鍵入文本內(nèi)容
ex轉(zhuǎn)義狀態(tài)下:
/+想搜索的字符串
?+想搜索的字符串
我的全局搜索替換識(shí)別不到unix模式
:g/^/s// /g #在每一行首插入若干空格,即用空格替換
?(6)使用vi一次編輯多個(gè)文件,利用vi的工作緩沖區(qū)進(jìn)行文本的移動(dòng)、復(fù)制與刪除等操作,并思考緩沖區(qū)原理;
①知識(shí)點(diǎn):
優(yōu)質(zhì)文章??如何使用 Vim 編輯器編輯多個(gè)文件/Linux中國(guó)@Sk
格式:
”[緩沖區(qū)名稱][命令]
注意在復(fù)制時(shí),光標(biāo)移動(dòng)到首行
②示例:
$vi file1.txt file2.txt file3.txt
ex轉(zhuǎn)義狀態(tài)下:
:n #切換下一個(gè)文件
:N #切換上一個(gè)文件
如有改動(dòng)并切換,輸入
:n!
:N!
#文本復(fù)制
"a9Y #復(fù)制前9行
"b2Y #復(fù)制前2行,同時(shí)復(fù)制兩個(gè)文件中的內(nèi)容用a、b緩沖區(qū)來(lái)區(qū)分,Y/yy代表復(fù)制
#文本刪除
file3.txt中
"a3D #刪除前3行
#文本移動(dòng)(剪切粘貼,不太了解這類(lèi)命令屬于什么類(lèi),試出來(lái)的,故有偏差)
file1.txt中
"a3MV #剪切第3行,也可以Enter選擇多行
x
file3.txt中
"ap
想要粘貼多次按下p鍵即可
?(7)在vi中使用較為復(fù)雜的ex命令;
①知識(shí)點(diǎn):
e命令:可將新指定的文件放入編輯緩沖區(qū),替換前編輯緩沖區(qū)內(nèi)容。
格式::e filename
注意此時(shí)該文件須已經(jīng)保存或未修改,否則不執(zhí)行e命令:e! filename
可忽略前一文件的任何編輯,強(qiáng)行編輯新文件:e +n filename
從新文件的第n行開(kāi)始編輯:e #
返回前一文件的編輯(%表示當(dāng)前文件)
w命令:將編輯緩沖區(qū)中全部或部分內(nèi)容寫(xiě)到當(dāng)前或另一文件中
格式::w filename
(注意:filename缺省則寫(xiě)入當(dāng)前文件):w! filename
可強(qiáng)行創(chuàng)建不存在的filename:w>> filename
將緩沖區(qū)中內(nèi)容附加到現(xiàn)有文件尾:行號(hào),行號(hào) w!文件名
將指定的各行寫(xiě)入指定文件中。
r命令:可將指定的文件或shell命令的輸出讀入編輯緩沖區(qū)(當(dāng)前文件的當(dāng)前位置)
:r filename
:r! filename
q命令:退出vi編輯
:q!
強(qiáng)行退出:wq
將緩沖區(qū)中內(nèi)容附加到現(xiàn)有文件尾并退出:wq!
將緩沖區(qū)中內(nèi)容附加到現(xiàn)有文件尾并強(qiáng)行退出:x
filename(可缺?。┤绻?filename可執(zhí)行,則為真
②示例:
$:e +3 filename
#從新文件的第3行開(kāi)始編輯
$:1,3 w! filename
#將當(dāng)前文件1至3行寫(xiě)入filename
$:r! date
#則在當(dāng)前位置讀入shell的date命令的輸出
??????配置文件
?(8)使用vi的設(shè)置選項(xiàng)設(shè)置個(gè)性化的vi環(huán)境;(可編輯.vimrc文件設(shè)置vi的工作環(huán)境)
①知識(shí)點(diǎn):
在用戶目錄下可以創(chuàng)建和修改
.vimrc
文件設(shè)置vi/vim程序的工作環(huán)境。
linux/mac用戶,.vimrc可放置到~/
目錄下;
windows用戶,將_vimrc放置到%USERPROFILE%目錄下,一般是C:\Users\XXX_vimrc
vim常用的設(shè)置選項(xiàng):
set nocompatible
//不兼容vi模式set langmenu=en_US
set fileencodings=utf-8,chinese,latin-1
set fileencoding=utf-8
//設(shè)置文件編碼set number
set ignorecase
//查找時(shí)忽略大小寫(xiě)au GUIEnter * simalt ~x
// vim 以最大化打開(kāi)set incsearch
//輸入進(jìn)行中實(shí)時(shí)匹配查找到的字符串set tabstop=4
// tab占4個(gè)空格set autoindent
//自動(dòng)縮進(jìn)
顯示當(dāng)前設(shè)置
:set optionname
//查看任何選項(xiàng)設(shè)置的確切值
例:set nu
:set
//查看更改過(guò)的所有選項(xiàng)值:set all
//查看所有選項(xiàng)值
取消當(dāng)前設(shè)置
:set no optionname
例:set no nu
轉(zhuǎn):Vim實(shí)戰(zhàn)指南(六):環(huán)境偏好配置/博客園@Neter
②示例:
$sudo apt install vim
切換到/home/用戶目錄下
$ls -a
如果沒(méi)有.vimrc文件,手動(dòng)創(chuàng)建即可
設(shè)置顯示行號(hào)的命令
set nu
?(9)在vi中使用map命令編寫(xiě)一個(gè)簡(jiǎn)單的文本處理宏;
①知識(shí)點(diǎn):
宏是一串從鍵盤(pán)上輸入的命令字符。
vi提供的map
功能可以將一系列編輯命令合成一個(gè)命令,并稱之為宏。
可以使用map
功能組合成多達(dá)100個(gè)vi命令,并將它映射到任何一個(gè)按鍵上。
文本檢查拼寫(xiě)錯(cuò)誤
使用UNIX系統(tǒng)中的檢查拼寫(xiě)錯(cuò)誤程序spell
$spell kkk > erros
$vi kkk
: r erros
vispall宏
可使用帶vispall宏的vi檢查拼并更改拼寫(xiě)錯(cuò)誤事先將如下宏定義加入.exrc文件,或加入.profile或.login文件的EXINIT變量中:map #1 1G!Gvispell ^M^[
#宏的名字叫做#1,用戶在vi中只需按下F1鍵或1號(hào)功能鍵就會(huì)得到一個(gè)拼寫(xiě)錯(cuò)誤的單詞清單
search宏
search宏在.exrc文件或EXINIT變量中定義為:map #2 Gi/ \<^[A\>^”adda
#宏的名字叫做#2,用戶在vi中輸入/unix后,只需按下F2鍵或2號(hào)功能鍵就會(huì)得到文本中所有unix拼寫(xiě)錯(cuò)誤的單詞清單
[VIM] map 說(shuō)明/CSDN@微塵_Frank
②示例:
$vi test.txt
編輯后ESC
ex轉(zhuǎn)義狀態(tài)下鍵入map編輯的宏命令
Enter回車(chē)
命令狀態(tài)下鍵入qq(即設(shè)置的按鍵)
?(10)觀察/etc/profile文件(/etc/csh.login)與用戶home目錄下的.profile文件(.login),使用環(huán)境變量與用戶變量設(shè)置個(gè)性化的用戶環(huán)境;【暫未做修改】
①知識(shí)點(diǎn):
/etc/profile是系統(tǒng)全局的環(huán)境變量配置文件,作用于所有用戶。
用戶home目錄下的.profile文件是用戶級(jí)別的環(huán)境變量配置文件,只作用于當(dāng)前用戶。
因此,修改全局環(huán)境變量需要修改/etc/profile,而修改用戶級(jí)別的環(huán)境變量則需要修改.profile文件。
②示例:
$sudo apt install vim
$cd etc/
$cat profile #觀察etc文件夾下的.profile文件
$cd home/用戶名
$cat .profile
# $vim .profile #如果沒(méi)有則手動(dòng)創(chuàng)建.profile文件
linux新建用戶后,在“家”目錄中沒(méi)有.bash_profile文件/51CTO博客@趕路人兒
??????腳本
?(11)使用for循環(huán)編寫(xiě)一段shell程序,完成顯示用戶注冊(cè)目錄中某個(gè)或某些子目錄下所有普通文件的列表,并將之轉(zhuǎn)入一個(gè)文件中;
①知識(shí)點(diǎn):
shell腳本 for循環(huán)實(shí)現(xiàn)文件和目錄遍歷/CSDN@hustyangju
【Linux-5】利用shell腳本遍歷某個(gè)目錄下的所有文件/CSDN@玄苦大師233
用shell寫(xiě)一個(gè)批量獲得文件名的循環(huán)腳本/CSDN@胡說(shuō)先森
②示例:
$touch test.sh
$vi test.sh
編寫(xiě)腳本內(nèi)容
#!/bin/bash
#print the directory and file
#(注意第二行是注釋,第一行因文章編輯器看起來(lái)像注釋的樣式,實(shí)則不然,每個(gè)shell腳本都需要該代碼)
#詳細(xì)見(jiàn)下圖
for file in /home/wangjingwang/*
do
if [ -d "$file" ]
then
echo "$file is directory"
elif [ -f "$file" ]
then
echo "$file is file"
fi
done
$chmod +x test.sh
$./test.sh
ChatGPT參考答案:
#!/bin/bash
#顯示用戶注冊(cè)目錄中某個(gè)或某些子目錄下所有普通文件的列表
#定義目錄列表
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
done
echo "File list is saved to file_list.txt"
?(12)自擬題目編寫(xiě)一段shell腳本,完成某個(gè)特定功能,并以三種方式實(shí)現(xiàn)腳本的運(yùn)行。
①知識(shí)點(diǎn):
- 輸入定向到shell:
$ sh < 腳本名
- 以腳本名作為shell的參數(shù):
$ sh 腳本名[參數(shù)]
這里的sh是shell的子程序 - 為shell文件設(shè)置可執(zhí)行權(quán)限,而后運(yùn)行該可執(zhí)行文件:
$chmod + x 腳本名
$. /腳本名 [參數(shù)]
運(yùn)行shell腳本的三種方式/CSDN@秋葉原の黑貓
??????
使用chmod命令賦予該腳本可執(zhí)行的權(quán)限,然后再執(zhí)行;
調(diào)用解釋器使得腳本執(zhí)行,例如:bash、csh、csh、ash、bsh、ksh等等;
使用source命令;
②示例:
$touch test.sh
$vi test.sh
設(shè)計(jì)腳本
$chmod +x test.sh
$./test.sh #腳本所在文件夾內(nèi)直接./
$bash test.sh
$sh test.sh #bash、csh、csh、ash、bsh、ksh等等
$source test.sh
?(13)編寫(xiě)shell函數(shù),在命令行運(yùn)行該函數(shù);將函數(shù)放入一個(gè)shell腳本中并運(yùn)行該腳本。
①知識(shí)點(diǎn):
函數(shù)定義方式:
(1)交互運(yùn)行時(shí)可以在提示符下定義;
(2)定義在用戶的初始化文件.bash_profile中,這是最常用的方式。
函數(shù)的定義由花括號(hào)中的一組命令構(gòu)成,命令之后必須以分號(hào)終結(jié)。花括號(hào)兩側(cè)需留空格。
函數(shù)定義格式:
$function_name () { commands ; commands; }
$function function_name { commands ; commands; }
$function function_name () { commands ; commands; }
自學(xué)Linux Shell16.4-在命令行上使用函數(shù)/博客園@CARLOS_KONG
②示例:
$greet () { echo "Hello $LOGNAME, today is $(date)"; } #注意空格
$greet
$touch test.sh
$vi test.sh
編寫(xiě)腳本內(nèi)容,注意調(diào)用函數(shù)
$chmod +x test.sh
$./test.sh
?報(bào)錯(cuò):bash: syntax error near unexpected token `{echo’
??????
大括號(hào)與字符之間注意空格
四、實(shí)驗(yàn)報(bào)告要求
(1)認(rèn)真撰寫(xiě)實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)內(nèi)容與實(shí)驗(yàn)結(jié)果真實(shí)并具備實(shí)質(zhì)性。
(2)進(jìn)行客觀的個(gè)人評(píng)定。
Reference
-
Linux教程(第5版)孟慶昌版 課后答案/CSDN@tony_bfx
-
最詳細(xì)的VI編輯器指南/51CTO@zhongqi2513 文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-420941.html
-
最詳細(xì)的 Vi 編輯器使用指南/看云??很全文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-420941.html
到了這里,關(guān)于【Linux操作系統(tǒng)】【綜合實(shí)驗(yàn)二 vi應(yīng)用與shell腳本編輯】【淺試編輯命令】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!