操作系統(tǒng)原理實(shí)驗(yàn)
實(shí)驗(yàn)1 linux基礎(chǔ)操作
!本文為個(gè)人的實(shí)驗(yàn)總結(jié),僅包含在校時(shí)上機(jī)實(shí)驗(yàn)所涉及的操作,并不包含所有的linux命令候味!
一、Linux基本命令
????任務(wù)1:使用pwd命令查看當(dāng)前目錄隔心。
? ? 任務(wù)2:使用ls命令以詳細(xì)列表的形式查看有關(guān)當(dāng)前目錄的信息白群。
????執(zhí)行命令:
? ??????$ pwd
? ????? $ ls -l -h?
(-l 中 l 代表long 意為詳細(xì)展示,-h 中 h 意味以人類易理解的方式展示 比如內(nèi)存顯示以k為單位)硬霍。
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)3:使用man命令獲取less命令的幫助信息,并將其保存到文件less.txt唯卖。
? ? 執(zhí)行命令:
? ??? ??$ man less
? ??? ??$ man less > less.txt
" > (文件名)" 意為將前者的運(yùn)行重定向到指定文件中粱玲,在這里指的是創(chuàng)建less.txt并將前者的運(yùn)行結(jié)果保存在less.txt中
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)4:在當(dāng)前目錄中創(chuàng)建D1子目錄。
????執(zhí)行命令:
? ??? ??$ mkdir D1
默認(rèn)是在當(dāng)前終端所在目錄下創(chuàng)建文件夾拜轨。
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)5:使用cp命令將/etc/profile文件復(fù)制到D1目錄抽减,文件名為profile.bak。
????執(zhí)行命令:
????????$ cp ../../etc/profile profile.bak
" ../../etc/profile" 指的是所在文件的地址橄碾。
" profile.bak" 為粘貼后的文件名卵沉,此文件默認(rèn)是在終端所在文件夾中創(chuàng)建。
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)6:使用less命令查看profile.bak文件的內(nèi)容
????執(zhí)行命令:
? ??? ??$ less profile.bak
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)7:在現(xiàn)有系統(tǒng)上查找后綴為.cfg的所有文件堪嫂,并將結(jié)果保存在/root/cfginfo.txt中偎箫。
????執(zhí)行命令:
? ??????$ find ../ -name ‘*.cfg’ > cfginfo.txt
" find "為尋找指定類型的文件
" ../ " 表示定義到根目錄(當(dāng)前為/root木柬,上一層為根目錄)
" -name ‘*.cfg’ "意思為以指定后綴為.cfg的文件
" > cfginfo.txt " 意思為將前面代碼的運(yùn)行結(jié)果輸出到當(dāng)前終端所在目錄下的cfginfo.txt中
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)8:編輯上述cfginfo.txt皆串,在vim編輯器的txt文件中,在文件的第一行插入“This is CFG file information”(這是CFG文件信息)并保存眉枕。
????執(zhí)行命令:
? ??? ??$ vi cfginfo.txt
" vi cfginfo.txt " 意思是用vim編輯器打開cfginfo.txt這個(gè)文件 恶复, 利用vim編輯器對(duì)該文件進(jìn)行編輯 怜森。
在vim編輯器中,按i谤牡、o副硅、a均可進(jìn)入編輯模式;Esc鍵為退出編輯模式翅萤;" :wq " 實(shí)現(xiàn)文件的保存+退出功能恐疲。
? ? 命令執(zhí)行結(jié)果截圖:
????任務(wù)9:使用cat命令查看編輯后的cfginfo.txt文件。
????執(zhí)行命令:
? ??????$ cat cfginfo.txt
? ? 命令執(zhí)行結(jié)果截圖:
二套么、基礎(chǔ)的Shell腳本與編程
注:1. Shell腳本的創(chuàng)建可以通過(guò)vi來(lái)創(chuàng)建和編寫的培己,要?jiǎng)?chuàng)建腳本文件需要將文件的后綴名改為.sh
2. 運(yùn)行腳本文件需要先賦予可執(zhí)行權(quán)限,在運(yùn)行前需要運(yùn)行 "chmod +x ./(文件名).sh "? chmod為賦予權(quán)限 +x為賦予執(zhí)行權(quán)限胚泌。
3. 運(yùn)行腳本:$ ./(文件名).sh
4. 每個(gè)腳本文件都需要在第一行表明運(yùn)行的Shell 一般都選用/bin/bash 代碼為:#!/bin/bash
????任務(wù)1:
????????編寫一個(gè)腳本省咨,用于打印當(dāng)前工作目錄中所有與文件相關(guān)的信息
????要求:
????????運(yùn)行腳本時(shí),顯示當(dāng)前工作目錄中的所有文件信息
展現(xiàn)當(dāng)前正在工作目錄中的文件玷室,運(yùn)用ls./ -l -h即可零蓉。
? ? 腳本代碼:
? ? 運(yùn)行結(jié)果:
????任務(wù)2:
????????編寫兩個(gè)數(shù)字相加的腳本
????要求:
????????請(qǐng)用戶輸入兩個(gè)數(shù)字
????????用戶還可以輸入實(shí)數(shù)
????????使用bc命令和管道來(lái)完成
????兩數(shù)相加 我們首先要讀入用戶輸入的兩個(gè)變量并存儲(chǔ)起來(lái),再通過(guò)piping和bc實(shí)現(xiàn)數(shù)字相加穷缤,此處利用${num}來(lái)讀取用戶輸入變量的具體的數(shù)值
? ??腳本代碼:
? ? 運(yùn)行結(jié)果:
????任務(wù)3:
????????編寫腳本以逆序打印給定的數(shù)字
????要求:
????????從用戶處讀取一個(gè)多位數(shù)的數(shù)字敌蜂,并將其反轉(zhuǎn)。
????????不僅僅是按相反的順序打印
????????您必須提取每個(gè)數(shù)字并轉(zhuǎn)換為反向绅项。
????????當(dāng)“0”作為最后一位時(shí)紊册,請(qǐng)?jiān)诘管嚂r(shí)丟棄。
通過(guò)if來(lái)判斷最后一位是否為0快耿,并根據(jù)判斷結(jié)果調(diào)整讀取的首個(gè)數(shù)的位置(最后一項(xiàng)為0直接不讀), 之后利用for循環(huán)逆序打印即可.
????腳本代碼:
? ? 腳本運(yùn)行結(jié)果:
? ?
????任務(wù)4:
????????對(duì)于$PATH中的每個(gè)目錄囊陡,顯示該目錄中的可執(zhí)行文件數(shù)
????要求:
????????從PATH變量獲取每個(gè)目錄。
????????使用-x選項(xiàng)if-if條件檢查可執(zhí)行權(quán)限掀亥。
????????逐個(gè)打印目錄和可執(zhí)行文件的數(shù)量撞反。
????????最后打印可執(zhí)行文件總數(shù)。
????????僅計(jì)數(shù)具有可執(zhí)行權(quán)限的文件搪花。
通過(guò)IFS改變系統(tǒng)的分詞符遏片,使其能夠分割path中路徑與路徑之間的冒號(hào)。
通過(guò)for循環(huán)將每個(gè)path打印出來(lái)撮竿,同時(shí)對(duì)每一個(gè)path下的所有文件進(jìn)行是否可執(zhí)行的篩選計(jì)數(shù)吮便,關(guān)鍵代碼為:ls $path -F | grep “*” | wc -l ,并將每個(gè)path中的可執(zhí)行文件數(shù)打印出來(lái)幢踏。
通過(guò)設(shè)置全局變量對(duì)總可執(zhí)行文件數(shù)進(jìn)行計(jì)數(shù)髓需,最后將總的可執(zhí)行文件數(shù)打印出來(lái)
最后別忘了重置IFS。
? ??腳本代碼:
? ??腳本運(yùn)行結(jié)果:
三房蝉、個(gè)人總結(jié)與心得
????實(shí)驗(yàn)過(guò)程中僚匆,我個(gè)人認(rèn)為對(duì)于初學(xué)者來(lái)說(shuō)最難的還是四個(gè)shell腳本編程中的后三個(gè)微渠。
? ? 先說(shuō)說(shuō)第二個(gè)shell腳本,有三個(gè)注意點(diǎn):
? ? ????1咧擂、read 可以讀入用戶輸入
? ? ? ? 2逞盆、echo 想要識(shí)別轉(zhuǎn)義字符"\c"(不換行),需要先寫上"-e"來(lái)表示開啟轉(zhuǎn)義字符的識(shí)別松申。
????????3云芦、想要調(diào)用參數(shù)的值(注意,是參數(shù)的值贸桶,比如系統(tǒng)輸入的num1為10焕数,需要用到10),在shell編程中是用美元符$加參數(shù)名來(lái)實(shí)現(xiàn)的刨啸。花括號(hào)可加可不加堡赔,不過(guò)為了方便看代碼還是加上為好。
????第三個(gè)shell腳本有兩個(gè)注意點(diǎn):
? ? ? ? 1设联、本題對(duì)shell編程語(yǔ)法熟練度要求高于前兩題的之前所有的linux操作善已,需要熟悉對(duì)參數(shù)的調(diào)用,結(jié)構(gòu)體的書寫离例,以及對(duì)字符串换团、數(shù)組的操作熟練度。
? ? ? ? 2宫蛆、在我自己寫的過(guò)程中經(jīng)常忘了給計(jì)算操作加上美元符$和雙引號(hào)艘包,同時(shí)我自己對(duì)shell中字符串的操作也很不熟悉,光是提取字符串的每一位這個(gè)操作我都想了很久耀盗,最后還是想到了用字符串的提取來(lái)進(jìn)行操作.??
eg. ${str:${pos}:1}
意為str字符串中第${pos}位(第一位為0)開始的第一個(gè)數(shù)(包括這一位)
? ??
? ? 第四個(gè)腳本困擾我的問題有兩個(gè)想虎。
????????一個(gè)是如何對(duì) $PATH 那一大串連起來(lái)的進(jìn)行劃分。通過(guò)echo可以發(fā)現(xiàn)這些地址都通過(guò) " :" 冒號(hào)連接叛拷,通過(guò)上網(wǎng)查找資料才知道shell自帶分隔符IFS (默認(rèn)為空格等)舌厨,但這是可以進(jìn)行修改的,所以經(jīng)過(guò)對(duì)IFS再賦值忿薇,我還是成功的把每個(gè)地址都分別打印了出來(lái)裙椭。
? ? ????第二是如何統(tǒng)計(jì)可執(zhí)行文件的數(shù)量,通過(guò)上網(wǎng)我還是找到了答案署浩,利用管道將ls grep wc這三個(gè)操作連在一起揉燃,也就是先將每一個(gè)path中的文件通過(guò) " ls -l " 讓文件一行一行列出來(lái),再通過(guò)grep篩選并顯示可執(zhí)行文件的每一行( "*" 為可執(zhí)行文件)筋栋, " wc -l " 用于統(tǒng)計(jì)上個(gè)操作的行數(shù)炊汤,最后通過(guò)$()讀取行數(shù),并賦給參數(shù)輸出即可。