1. 程式人生 > >shell編程(1)

shell編程(1)

ron 命令解釋 設備文件 上傳 符號 要求 用戶信息 shadow文件 檢索

一.回顧練習

一般通配符

技術分享圖片

技術分享圖片

花括號{}

技術分享圖片

倒引號,單引號,雙引號

技術分享圖片

輸出重定向> >>

技術分享圖片

輸入重定向< <<

技術分享圖片

用戶自定義變量

技術分享圖片

技術分享圖片

二 Shell命令練習

(1)通過幫助信息查看,簡述以下文件的用途

①/etc/passwd (提示:通過man 5 passwd查看此文件描述說明)

/etc/passwd存放密碼文件,文件中每個用戶都有一個對應的記錄行,它記錄了這個用戶的一些基本屬性,包括:登錄名,可選的加密後的密碼,數字用戶id,數字組id,用戶名和註釋字段,用戶主目錄,可選的用戶命令解釋器。

技術分享圖片

②/etc/shadow(提示:通過man 5 shadow查看此文件描述說明)

/etc/shadow是passwd文件的一個影子,/etc/shadow文件中的記錄行與/etc/passwd中的一一對應,但是只有系統管理員才能夠進行修改和查看。

技術分享圖片

③/etc/group(提示:通過man 5 group查看此文件描述說明)

/etc/group存儲有關本地用戶組的信息

技術分享圖片

④/etc/gshadow(提示:通過man 5 gshadow查看此文件描述說明)

/etc/gshadow是/etc/group的加密資訊文件,比如用戶組管理密碼就存放在該文件中。

技術分享圖片

(2)依次輸入如下命令,觀察運行結果。結合man id查看到的幫助信息,指出每一條命令功能

技術分享圖片

id:id命令可以顯示真實有效的用戶ID(UID)和組ID(GID)

id -u只顯示用戶ID

id -u root 即查看root的用戶ID,為0

id -u hadoop即查看用戶hadoop的用戶ID,為1000

(3)在shell命令終端依次輸入以下命令,觀察執行結果,理解每條命令實現的具體功能

which python

技術分享圖片

whereis python

技術分享圖片

locate python

技術分享圖片

find /usr/bin -name python

技術分享圖片

(說明: which, whereis, locate,find都具有檢索的功能,結合執行結果,查找幫助信息,總結其區別)

which查看可執行文件的位置

whereis查看文件的位置

locate

配合數據庫查看文件位置

find實際搜尋硬盤查詢文件名稱

②grep -n -E ‘root|jsj|^user*‘ /etc/passwd(提示:擴展正則表達式)

技術分享圖片

grep -n -E ‘[[:digit:]]‘ /etc/passwd

技術分享圖片

技術分享圖片

grep -n -E ‘[[:alpha:]]‘ /etc/passwd

技術分享圖片

技術分享圖片

grep -n ‘[0-9]\{4,\}‘ /etc/group(提示: 在用戶組文件中查找GID是4位數及以上的組信息記錄)

技術分享圖片

(說明:帶選項-E的表示擴展的正則表達式;不帶選項-E的是普通的正則表達式)

grep命令可通過正則表達式搜索文本,並打印匹配到的行;選項-n可打印行號,-E可使用多個正則表達式。

③sudo apt-get install gimp

which gimp

技術分享圖片

sudo apt-get remove gimp

which gimp

技術分享圖片

sudo apt-get install gimp命令可安裝gimp

sudo apt -get remove gimp命令可卸載gimp

which gimp用於查看文件的位置。

④ls -dl/root --time-style=long-iso

ls -dl /root --time-style=long-iso | cut -d‘ ‘ -f1,8

(說明:cut命令的選項-d後引號裏有空格;提示: 和前一行結果對比觀察)

技術分享圖片

選項-d可自定義分隔符,-f顯示指定的域中的內容,上述命令指定空格為分隔符,顯示第1和第8個域中的內容。

⑤ls -l --time-style=long-iso

ls -l --time-style=long-iso -t

ls -l --time-style=long-iso -t -r (說明:依次執行,對比觀察,結合幫助選項)

技術分享圖片

技術分享圖片

技術分享圖片

⑥ls /usr/share/man

技術分享圖片

ls /usr/share/man | grep man[1-8]

技術分享圖片

ls /usr/share/man/man1

技術分享圖片

file /usr/share/man/man1/ls.1.gz(結合執行結果,review2.8.1節gzip命令內容)

技術分享圖片

file命令可識別文件類型,然後創建新目錄temp,將ls.1.gz拷貝至temp目錄,gzip命令是進行解壓。

⑦ls –l /home | grep "^d" | wc –l

技術分享圖片

ls-l查找在 /home目錄下的文件,grep “^d”過濾行開頭為d的文件,wc -l統計行數

⑧sudo adduser user7

ls /home | tee users | wc -l (提示:輸入cat users觀察該文件內容)

技術分享圖片

sudo adduser命令是用來添加新用戶的

(4)根據要求寫出相應的shell命令

①在目錄/usr/include下搜索文件signal.h是否存在(提示: find命令)

技術分享圖片

②在/usr/include目錄下的所有文件中查找包含BUFSIZ的行,並顯示所在行號。要求:屏幕上只顯示查找到的結果,過濾錯誤信息。

(提示:①利用grep和通配符*;②利用錯誤信息重定向和特殊設備文件/dev/null)

技術分享圖片

技術分享圖片

③在用戶名密碼文件/etc/passwd中查找登錄shell為bash的用戶信息記錄,並顯示行號

(提示:使用grep和正則表達式中的$)

技術分享圖片

④從/etc/group文件中截取第1列(組名)和第3列(組id),並按照組id號的數值大小由小到大排序。(提示:綜合使用cut, 管道線及sort命令)

(提交文檔時,寫出其實現的功能的命令及截圖,包括命令和結果在內的截圖)

技術分享圖片

(5)體驗awk, sed用法:依次執行命令,觀察執行結果

①cp/etc/apt/sources.listt1; less t1

技術分享圖片

技術分享圖片

②sed -e "s/#.*//g"t1

技術分享圖片

技術分享圖片

③sed -e "s/#.*//g"t1| awk ‘{if (length != 0) print $0}‘

技術分享圖片

④tail -5 /etc/passwd | awk -F: ‘{print $1}‘

技術分享圖片

⑤tail -5 /etc/group | tee t2

awk ‘BEGIN{print "file t2"} {print "line" NR ":" $0} END {print "over"}‘ t2

技術分享圖片

技術分享圖片

(提交文檔時,查閱網絡,總結如下內容:

① 文件/etc/apt/sources.list用途,理解其內容

/etc/apt/sources.list是包管理工具apt所用的記錄

② 命令工具sed功能,截圖顯示2~3個自己嘗試的sed命令練習,並對具體功能作必要陳述說明

技術分享圖片

sed可將字符進行替換,上圖練習中將hello替換為hi

③ 命令工具awk功能,截圖顯示2~3個自己嘗試的awk命令練習,並對具體功能作必要陳述說明)

技術分享圖片

行匹配語句awk 只能用單引號

每行按空格或tab分割,輸出文本中的1,4項;

awk -F: -F相當於內置變量FS,指定分割字符,在上圖練習中使用,分割

(6)查閱網絡或幫助,體驗命令curl和wget用法。

(提交文檔時,查閱網絡,總結如下內容:

② 命令工具curl功能,截圖顯示自己嘗試的練習,並作必要陳述說明

在linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,是一款很強大的http命令行工具,它支持文件的上傳和下載,是綜合傳輸工具。

(1)安裝curl

技術分享圖片

(2)不加任何選項使用curl時,如 curl http://www.baidu.com ,默認會發送GET請求來獲取鏈接內容到標準輸出。

技術分享圖片

(3)只顯示http頭,而不顯示文件內容,使用-I選項

技術分享圖片

(4)同時顯示http頭和文件內容,使用-i選項。

技術分享圖片

(5)將鏈接保存到文件。使用 > 符號將輸出重定向到本地文件中。

技術分享圖片

②命令工具wget功能,截圖顯示自己嘗試的練習,並作必要陳述說明

wget是一個下載文件的工具,它用在命令行下.wget工具功能完善,支持斷點下載功能,同時支持FTP和HTTP下載方式,支持代理服務器和設置起來方便簡單。

(1) 使用wget下載單個文件,下載的過程中會顯示進度條,包含(下載完成百分比,已經下載的字節,當前下載速度,剩余下載時間)

技術分享圖片

(2) 使用wget -O下載並以不同的文件名保存。下圖練習中,下載一個文件並以名稱download1保存

技術分享圖片

三. 編寫一個shell腳本,使用4種方式(參見第4章教材/課件)分別執行。

(1)練習1

第1步,使用vi/vim/gedit或其它編輯器,編寫shell腳本ex1.sh,內容如下:

該腳本的功能是,備份當前目錄下最近1天以內(即24小時內)被修改過的普通文件。以backup系統當前日期時間為文件名,並壓縮存檔。備份過程中出錯信息寫入error_info。然後分別查看備份文檔和報錯信息。

技術分享圖片

第2步,嘗試第4章介紹的四種方式,運行該腳本,並理解本例中綜合使用的shell命令。

技術分享圖片

(2)練習2

第1步,使用vi/vim/gedit或其它編輯器,編寫shell腳本ex2.sh,內容如下:

嘗試第4章介紹的四種方式,運行該腳本。

若提示“找不到文件major_code.txt”,請將公郵實驗文件夾中的major_code.txt拷貝至ex1.sh所在目錄,重新執行一次。

註:文件major_code.txt,請不要做任何改動,包括格式。

結合運行結果,分析腳本代碼,在實驗報告中總結以下內容:

技術分享圖片

技術分享圖片

② 寫出line3中read命令選項-n11功能

read用於從鍵盤讀取變量值,11n代表有11位。

-n11表示輸入11個字符後輸入結束

②寫出line14的功能

Line14:grep $code $filename >t1 && read x major < t1

功能:搜索code和filename重定向到t1,然後從t1輸出到major;

$code:專業號,是11位學號中的5-8位。

$filename是major_code.txt.

四. 實驗總結

通過本次實驗練習,我了解了shell編程,並練習了很多shell命令。shell命令種類繁多,有很多需要自己去反復練習,在練習的過程中也會經常出現各種各樣的錯誤,比如少空格等等。Shell編程很有趣,但需要花更多時間去體驗去理解。

shell編程(1)