操作系統原理實驗
實驗1 linux基礎操作
!本文為個人的實驗總結,僅包含在校時上機實驗所涉及的操作,并不包含所有的linux命令!
一、Linux基本命令
????任務1:使用pwd命令查看當前目錄。
? ? 任務2:使用ls命令以詳細列表的形式查看有關當前目錄的信息。
????執行命令:
? ??????$ pwd
? ????? $ ls -l -h?
(-l 中 l 代表long 意為詳細展示,-h 中 h 意味以人類易理解的方式展示 比如內存顯示以k為單位)。
? ? 命令執行結果截圖:
????任務3:使用man命令獲取less命令的幫助信息,并將其保存到文件less.txt。
? ? 執行命令:
? ??? ??$ man less
? ??? ??$ man less > less.txt
" > (文件名)" 意為將前者的運行重定向到指定文件中,在這里指的是創建less.txt并將前者的運行結果保存在less.txt中
? ? 命令執行結果截圖:
????任務4:在當前目錄中創建D1子目錄。
????執行命令:
? ??? ??$ mkdir D1
默認是在當前終端所在目錄下創建文件夾。
? ? 命令執行結果截圖:
????任務5:使用cp命令將/etc/profile文件復制到D1目錄,文件名為profile.bak。
????執行命令:
????????$ cp ../../etc/profile profile.bak
" ../../etc/profile" 指的是所在文件的地址。
" profile.bak" 為粘貼后的文件名,此文件默認是在終端所在文件夾中創建。
? ? 命令執行結果截圖:
????任務6:使用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中
? ? 命令執行結果截圖:
????任務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 " 實現文件的保存+退出功能。
? ? 命令執行結果截圖:
????任務9:使用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即可。
? ? 腳本代碼:
? ? 運行結果:
????任務2:
????????編寫兩個數字相加的腳本
????要求:
????????請用戶輸入兩個數字
????????用戶還可以輸入實數
????????使用bc命令和管道來完成
????兩數相加 我們首先要讀入用戶輸入的兩個變量并存儲起來,再通過piping和bc實現數字相加,此處利用${num}來讀取用戶輸入變量的具體的數值
? ??腳本代碼:
? ? 運行結果:
????任務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。
? ??腳本代碼:
? ??腳本運行結果:
三、個人總結與心得
????實驗過程中,我個人認為對于初學者來說最難的還是四個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 " 用于統計上個操作的行數,最后通過$()讀取行數,并賦給參數輸出即可。