1. 程式人生 > >實驗三、shell編程

實驗三、shell編程

實時 依次 什麽 所有 都沒有 個數字 處的 進度條 修改

一、實驗內容

1. 練習 shell 中命令歷史、別名、特殊字符用法(第 4 章 4.2 節~4.5 節)

2. shell 命令應用練習(具體見實驗步驟)

3. 編寫一個 shell 腳本,使用 4 種方式分別執行(具體見實驗步驟)

4. 結合個人學習進度條,選擇在 linux 環境下進行的新嘗試和新探索

二、實驗步驟

1.練習shell中命令歷史,別名,特殊字符用法。

2.shell命令應用練習

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

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

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

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

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

1)/etc/passwd文件描述

/etc/passwd中一行記錄對應著一個用戶,每行記錄又被冒號(:)分隔為7個字段,其格式和具體含義如下:
  用戶名:口令:用戶標識號:組標識號:註釋性描述:主目錄:登錄Shell

用戶名(login_name):是代表用戶賬號的字符串。

口令(passwd):一些系統中,存放著加密後的用戶口令字。

用戶標識號(UID):是一個整數,系統內部用它來標識用戶。

組標識號(GID):字段記錄的是用戶所屬的用戶組。它對應著/etc/group文件中的一條記錄。

註釋性描述(users):字段記錄著用戶的一些個人情況,例如用戶的真實姓名、電話、地址等。

主目錄(home_directory):也就是用戶的起始工作目錄,它是用戶在登錄到系統之後所處的目錄。

登錄Shell(Shell):用戶登錄後,要啟動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程序,即Shell。

2)/etc/shadow文件描述

/etc/shadow文件格式與/etc/passwd文件格式類似,同樣由若幹個字段組成,字段之間用“:”隔開。

文件中字段主要含義為:

登錄名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標誌

“登錄名”是與/etc/passwd文件中的登錄名相一致的用戶賬號

“口令”字段存放的是加密後的用戶口令字:

“最後一次修改時間”表示的是從某個時刻起,到用戶最後一次修改口令時的天數。時間起點對不同的系統可能不一樣。

“最小時間間隔”指的是兩次修改口令之間所需的最小天數。

“最大時間間隔”指的是口令保持有效的最大天數。

“警告時間”字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。

“不活動時間”表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數。

“失效時間”字段給出的是一個絕對的天數,如果使用了這個字段,那麽就給出相應賬號的生存期。期滿後,該賬號就不再是一個合法的賬號,也就不能再用來登錄了。

3)/etc/group

/etc/group文件與/etc/passwd和/etc/shadow文件都是有關於系統管理員對用戶和用戶組管理時相關的文件。linux /etc/group文件是有關於系統管理員對用戶和用戶組管理的文件,linux用戶組的所有信息都存放在/etc/group文件中。具有某種共同特征的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。

用戶組的所有信息都存放在/etc/group文件中。此文件的格式是由冒號(:)隔開若幹個字段,這些字段具體如下:

組名:口令:組標識號:組內用戶列表

 組名:

組名是用戶組的名稱,由字母或數字構成。與/etc/passwd中的登錄名一樣,組名不應重復。

口令:

口令字段存放的是用戶組加密後的口令字。一般Linux系統的用戶組都沒有口令,即這個字段一般為空,或者是*。

組標識號:

組標識號與用戶標識號類似,也是一個整數,被系統內部用來標識組。別稱GID.

組內用戶列表:

是屬於這個組的所有用戶的列表,不同用戶之間用逗號(,)分隔。這個用戶組可能是用戶的主組,也可能是附加組。

4)/etc/gshadow

/etc/gshadow
/etc/gshadow是/etc/group的加密資訊文件,比如用戶組(Group)管理密碼就是存放在這個文件。
/etc/gshadow和/etc/group是互補的兩個文件;對於大型服務器,針對很多用戶和組,定制一些關系結構比較復雜的權限模型,設置用戶組密碼是極有必要的。

組名:口令:組管理者:組內用戶列表
1) 組名: 是用戶組的名稱,由字母或數字構成。
2) 口令:用戶組密碼,這個段可以是空的或!,如果是空的或有!,表示沒有密碼
3) 組管理者:這個字段也可為空,如果有多個用戶組管理者,用,號分割
4) 組內用戶列表:如果有多個成員,用,號分割 ;

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

① id 顯示當前用戶id

② id -u 顯示用戶id

③ id -u root 顯示root的id

④ id -u kyo 顯示用戶kyo的id

技術分享圖片

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

① which python

whereis python

locate python

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

which 查看可執行文件的位置

which是通過 PATH環境變量到該路徑內查找可執行文件,所以基本的功能是尋找可執行文件
whereis 查看文件的位置

和find相比,whereis查找的速度非常快,這是因為linux系統會將 系統內的所有文件都記錄在一個數據庫文件中。當使用whereis和下面即將介紹的locate時,會從數據庫中查找數據,而不是像find命令那樣,通 過遍歷硬盤來查找,效率自然會很高。
但是該數據庫文件並不是實時更新,默認情況下時一星期更新一次,因此,我們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為數據庫文件沒有被更新。
locate 配 合數據庫查看文件位置
find 實際搜尋硬盤查詢文件名稱

find是在硬盤上遍歷查 找,因此非常消耗硬盤的資源,而且效率也非常低

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

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

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

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

grep 默認僅支持基礎正則表達式,如果要使用擴展性正則表達式,可以使用 grep - E。grep -E 與 egrep 相當於命令別名關系。

[:digit:] 匹配任意一個數字字符

[:alpha:] 匹配任意一個字母字符(包括大小寫字母)

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

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

使用 find /udr/include -name signal.h

技術分享圖片

② 在/usr/include 目錄下的所有文件中查找包含 BUFSIZ 的行,並顯示所在行號。 要求:屏幕上只顯示查找到的結果,過濾錯誤信息。 (提示: ① 利用 grep 和通配符*; ②利用錯誤信息重定向和特殊設備文件/dev/null)
③ 在用戶名密碼文件/etc/passwd 中查找登錄 shell 為 bash 的用戶信息記錄,並顯 示行號(提示:使用 grep 和正則表達式中的$)

技術分享圖片

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

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

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片

總結與體會

這次實驗非常難受,我的虛擬機上的ubuntu不知道為什麽很多實驗中的命令都無法執行,很多東西也無法安裝如gimp,就沒進行那部分實驗。等有時間會解決一下這個問題。shell總體感覺十分有趣,也非常強大,在考完研之後會好好琢磨琢磨。

實驗三、shell編程