操作系統原理實驗 實驗1 linux基礎操作

操作系統原理實驗

實驗1 linux基礎操作

!本文為個人的實驗總結,僅包含在校時上機實驗所涉及的操作,并不包含所有的linux命令!

一、Linux基本命令

????任務1:使用pwd命令查看當前目錄。

? ? 任務2:使用ls命令以詳細列表的形式查看有關當前目錄的信息。

????執行命令:

? ??????$ pwd

? ????? $ ls -l -h?

(-l 中 l 代表long 意為詳細展示,-h 中 h 意味以人類易理解的方式展示 比如內存顯示以k為單位)。

? ? 命令執行結果截圖:

任務1、2 命令執行結果截圖


????任務3:使用man命令獲取less命令的幫助信息,并將其保存到文件less.txt。

? ? 執行命令:

? ??? ??$ man less

? ??? ??$ man less > less.txt

" > (文件名)" 意為將前者的運行重定向到指定文件中,在這里指的是創建less.txt并將前者的運行結果保存在less.txt中

? ? 命令執行結果截圖:

執行man less后終端顯示的內容
輸出的less.txt文件


????任務4:在當前目錄中創建D1子目錄。

????執行命令:

? ??? ??$ mkdir D1

默認是在當前終端所在目錄下創建文件夾。

? ? 命令執行結果截圖:

右側主文件夾中第一個即為創建的D1文件夾


????任務5:使用cp命令將/etc/profile文件復制到D1目錄,文件名為profile.bak。

????執行命令:

????????$ cp ../../etc/profile profile.bak

" ../../etc/profile" 指的是所在文件的地址。

" profile.bak" 為粘貼后的文件名,此文件默認是在終端所在文件夾中創建。

? ? 命令執行結果截圖:

第六行的ls結果即為文件粘貼成功


????任務6:使用less命令查看profile.bak文件的內容

????執行命令:

? ??? ??$ less profile.bak

? ? 命令執行結果截圖:

less profile.bak 執行后在終端顯示的文件內容


????任務7:在現有系統上查找后綴為.cfg的所有文件,并將結果保存在/root/cfginfo.txt中。

????執行命令:

? ??????$ find ../ -name ‘*.cfg’ > cfginfo.txt

" find "為尋找指定類型的文件

" ../ " 表示定義到根目錄(當前為/root,上一層為根目錄)

" -name ‘*.cfg’ "意思為以指定后綴為.cfg的文件

" > cfginfo.txt " 意思為將前面代碼的運行結果輸出到當前終端所在目錄下的cfginfo.txt中

? ? 命令執行結果截圖:

存儲在cfginfo.txt中的所有后綴為.cfg的文件的地址


????任務8:編輯上述cfginfo.txt,在vim編輯器的txt文件中,在文件的第一行插入“This is CFG file information”(這是CFG文件信息)并保存。

????執行命令:

? ??? ??$ vi cfginfo.txt

" vi cfginfo.txt " 意思是用vim編輯器打開cfginfo.txt這個文件 , 利用vim編輯器對該文件進行編輯 。

在vim編輯器中,按i、o、a均可進入編輯模式;Esc鍵為退出編輯模式;" :wq " 實現文件的保存+退出功能。

? ? 命令執行結果截圖:

第一行為通過vim添加的文字


????任務9:使用cat命令查看編輯后的cfginfo.txt文件。

????執行命令:

? ??????$ cat cfginfo.txt

? ? 命令執行結果截圖:

cat cfginfo.txt執行結果


二、基礎的Shell腳本與編程


注:1. Shell腳本的創建可以通過vi來創建和編寫的,要創建腳本文件需要將文件的后綴名改為.sh

2. 運行腳本文件需要先賦予可執行權限,在運行前需要運行 "chmod +x ./(文件名).sh "? chmod為賦予權限 +x為賦予執行權限。

3. 運行腳本:$ ./(文件名).sh

4. 每個腳本文件都需要在第一行表明運行的Shell 一般都選用/bin/bash 代碼為:#!/bin/bash



????任務1:

????????編寫一個腳本,用于打印當前工作目錄中所有與文件相關的信息

????要求:

????????運行腳本時,顯示當前工作目錄中的所有文件信息

展現當前正在工作目錄中的文件,運用ls./ -l -h即可。

? ? 腳本代碼:

任務1 腳本文件

? ? 運行結果:

ls 運行結果


????任務2:

????????編寫兩個數字相加的腳本

????要求:

????????請用戶輸入兩個數字

????????用戶還可以輸入實數

????????使用bc命令和管道來完成

????兩數相加 我們首先要讀入用戶輸入的兩個變量并存儲起來,再通過piping和bc實現數字相加,此處利用${num}來讀取用戶輸入變量的具體的數值

? ??腳本代碼:

兩數相加(包括小數點)

? ? 運行結果:

任務2 兩數相加腳本運行結果


????任務3:

????????編寫腳本以逆序打印給定的數字

????要求:

????????從用戶處讀取一個多位數的數字,并將其反轉。

????????不僅僅是按相反的順序打印

????????您必須提取每個數字并轉換為反向。

????????當“0”作為最后一位時,請在倒車時丟棄。

通過if來判斷最后一位是否為0,并根據判斷結果調整讀取的首個數的位置(最后一項為0直接不讀), 之后利用for循環逆序打印即可.

????腳本代碼:

逆序打印數字腳本代碼

? ? 腳本運行結果:

成功實現逆序打印要求

? ?

????任務4:

????????對于$PATH中的每個目錄,顯示該目錄中的可執行文件數

????要求:

????????從PATH變量獲取每個目錄。

????????使用-x選項if-if條件檢查可執行權限。

????????逐個打印目錄和可執行文件的數量。

????????最后打印可執行文件總數。

????????僅計數具有可執行權限的文件。

通過IFS改變系統的分詞符,使其能夠分割path中路徑與路徑之間的冒號

通過for循環將每個path打印出來,同時對每一個path下的所有文件進行是否可執行的篩選計數,關鍵代碼為:ls $path -F | grep “*” | wc -l ,并將每個path中的可執行文件數打印出來。

通過設置全局變量對總可執行文件數進行計數,最后將總的可執行文件數打印出來

最后別忘了重置IFS

? ??腳本代碼:

打印每個path 統計可執行文件

? ??腳本運行結果:

腳本運行結果


三、個人總結與心得

????實驗過程中,我個人認為對于初學者來說最難的還是四個shell腳本編程中的后三個。


? ? 先說說第二個shell腳本,有三個注意點:

? ? ????1、read 可以讀入用戶輸入

? ? ? ? 2、echo 想要識別轉義字符"\c"(不換行),需要先寫上"-e"來表示開啟轉義字符的識別

????????3、想要調用參數(注意,是參數的值,比如系統輸入的num1為10,需要用到10),在shell編程中是用美元符$加參數名來實現的。花括號可加可不加,不過為了方便看代碼還是加上為好。


????第三個shell腳本有兩個注意點:

? ? ? ? 1、本題對shell編程語法熟練度要求高于前兩題的之前所有的linux操作,需要熟悉對參數的調用結構體的書寫,以及對字符串、數組的操作熟練度。

? ? ? ? 2、在我自己寫的過程中經常忘了給計算操作加上美元符$和雙引號,同時我自己對shell中字符串的操作也很不熟悉,光是提取字符串的每一位這個操作我都想了很久,最后還是想到了用字符串的提取來進行操作.??

eg. ${str:${pos}:1}

意為str字符串中第${pos}位(第一位為0)開始的第一個數(包括這一位)

? ??

? ? 第四個腳本困擾我的問題有兩個。

????????一個是如何對 $PATH 那一大串連起來的進行劃分。通過echo可以發現這些地址都通過 " :" 冒號連接,通過上網查找資料才知道shell自帶分隔符IFS (默認為空格等),但這是可以進行修改的,所以經過對IFS再賦值,我還是成功的把每個地址都分別打印了出來。

? ? ????第二是如何統計可執行文件的數量,通過上網我還是找到了答案,利用管道將ls grep wc這三個操作連在一起,也就是先將每一個path中的文件通過 " ls -l " 讓文件一行一行列出來,再通過grep篩選并顯示可執行文件的每一行( "*" 為可執行文件)" wc -l " 用于統計上個操作的行數,最后通過$()讀取行數,并賦給參數輸出即可

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容