1. 程式人生 > >山東大學Linux應用課程實驗記錄

山東大學Linux應用課程實驗記錄

找到這篇博文的人,一定被Linux實驗弄得很爆炸吧哈哈哈。 這裡是我Linux實驗的記錄,供大家學習和參考。如有錯誤,還請指正。

-----------------------------

實驗一

-----------------------------

一. 基本命令

1. 顯示系統當前時間.

date

2. 顯示2003年的日曆.

cal 2003

3. 分別顯示1999年1月份和99年1月份的日曆. 1999年的和99年的是否是一個?

不是 cal 1 1999 cal 99

4. 列出系統中所有登陸使用者.

who

5. 顯示你的登陸名.

whoami

6. 顯示你的使用者資訊.

whoami

7. 清屏.

clear

8. 顯示字串’Out to lunch’.

echo ‘Out to lunch’

9. 使用wall命令進行系統廣播:Good Evening everyone!

wall ‘Good Evening everyone!’

10.使用一個命令遮蔽所有訊息.這個命令對所有使用者都起作用嗎?

不是 mesg n

二. Man 手冊

11. 使用man手冊察看ls命令如何使用.

man ls

12. 試著解釋一下ls命令的man手冊有幾部分組成?每一部分是用來說明什麼的?

指令名,指令格式,指令引數,作者,BUG反饋,版權說明

13. 在man手冊中試著移動游標:

上下鍵:上下移動一行 空格鍵:到下一頁

14.退出man手冊.

q鍵退出

-----------------------------

實驗二

-----------------------------

一. 對目錄的操作

1. 檢查你當前所在的目錄,該目錄是?

使用者主目錄 “~”.

2. 改變當前目錄到根目錄(/).

cd /

3. 驗證是否在根目錄,分別用簡單列表和長列表的方式列出目錄中的檔案.

ls ls -l

4. 列出當前目錄中的所有檔案,列出當前目錄及其子目錄中的所有檔案.

ls -R

5. 返回到你的主目錄,列出該目錄的內容包括隱藏檔案.

cd ~ ls -a

6. 在你的主目錄裡建立一個名為mydir的目錄. 然後, 發出命令分別顯示你的主目錄和~/mydir目錄的長列表.

cd ~ mkdir mydir

7. 分別用絕對路徑和相對路徑兩種方式轉到mydir目錄. 建立兩個名為myfile1和myfile2的檔案.

cd mydir cd ~/mydir touch myfile1 touch myfile2

8. 用長列表形式顯示mydir目錄的內容. 長列表列出的各欄分別顯示了什麼資訊?檔案myfile1和myfile2的大小是多少?

讀寫許可權 檔案數 擁有者 所屬的group 檔案大小 建檔日期 檔名 均為0   ls -l

9. 返回到你的主目錄然後使用 ls -R 命令來顯示你的目錄樹. 解釋顯示出來的資訊。

cd ~ ls -R

10. 試著用rmdir刪除mydir目錄. 能行嗎?為什麼?

不行,因為mydir非空

12. 進入mydir目錄刪除該目錄中的2個檔案. 然後返回到你的主目錄並且刪除掉mydir目錄.

cd mydir rm myfile1 rm myfile2 cd … rm mydir

13. 用一條rm命令可否實現12題中的要求?如何實現?解釋rm命令的作用。

rm -rf mydir

二. 對檔案的操作

14. 分別用cat,more和less命令檢視 /etc/passwd 檔案的內容。/etc/passwd 檔案包含了能使用該系統的所有授權的使用者的一個列表.這三個命令顯示的方式有什麼不同?

cat /etc/passwd more /etc/passwd less /etc/passwd cat 顯示檔案全部的內容。 more/less 分頁顯示檔案的內容

15. 複製/etc/passwd 檔案到你的主目錄, 並將其重新命名為usersfile.用一條命令實現。如果用兩條命令實現呢?

cp /etc/passwd ~/usersfile

cp /etc/passwd ~ mv passwd usersfile2

16. 用wc命令統計檔案userfile的字元數、行數和單詞數. 解釋顯示出的各欄對應的內容。如果只統計行數呢?

wc ~/usersfile

17. 分別建立userfile的一個硬連結檔案userfile-hard和一個字元連結檔案userfile-soft。

ln userfile userfile-hard ln -s userfile userfile-soft

18. 用whereis搜尋命令passwd所在的路徑。用locate命令搜尋檔名中帶有aa欄位的檔案。 whereis和locate命令的區別是什麼?

whereis是精確搜尋,locate可以模糊搜尋

whereis passwd locate aa

三. 對檔案和目錄的遞迴操作

19. 建立一個sub1目錄, 在sub1中再建立一個 sub2 目錄. 用一條命令來實現.

mkdir -p ~/sub1/sub2

20. 轉到 sub2 目錄, 建立一個檔案 myfile.

cd ~/sub1/sub2 touch myfile

21. 返回到你的主目錄. 複製整個 sub1目錄樹到tree1. 分別遞迴顯示目錄sub1和tree1裡的所有檔案.

mkdir ~/tree1 cp -Rf ~/sub1 ~/tree1 cd ~/tree1 ls -R cd ~/sub1 ls -R

22. 現在你有了2個目錄樹, sub1和tree1. 把目錄樹tree1 移到sub1子目錄中.

mv ~/tree1 ~/sub1

23. 列出你的主目錄的內容. 遞迴顯示sub1目錄中的所有檔案和目錄.

cd ~ ls cd sub1 ls -R

四. 建立使用者帳號

為了完整地演示許可權, 我們需要建立一些附加的使用者, tux1和tux2, 它們都是penguins 組的成員.

1. 切換到tty3(按Ctrl+Alt+F3鍵),用 root帳號登入.

2. 執行下列一系列命令:

groupadd penguins

useradd -m -g penguins -c “Tux the Penguin (1)” tux1

useradd -m -g penguins -c “Tux the Penguin (2)” tux2

passwd tux1

New password: penguin1

Retype new password: penguin1

passwd tux2

New password: penguin2

Retype new password: penguin2

3. 切換到tty1(按Ctrl+Alt+F1鍵), 用tux1帳號登入, 密碼是penguin1, 然後再切換到 tty2(按Ctrl+Alt+F2鍵),用tux2帳號登入, 密碼是penguin2.

這裡沒什麼可說的,照做就好

五. 檔案和目錄的許可權

24. 切換到tty1(按Ctrl+Alt+F1鍵), 你是以 tux1帳號登入的, 檢視你的主目錄的許可權.

讀、寫、執行許可權

25. 切換到tty2, 你是以 tux2帳號登入的. 試著改變到tux1的主目錄, 或者顯示tux1主目錄的內容. 能行嗎?為什麼?

不行,沒有許可權

26. 切換到tty1. 改變tux1主目錄的許可權以使其他使用者能夠有讀(read)和執行(execute)的許可權.然後再以tux2帳號試著進入tux1的主目錄. 現在能行嗎?

可以

27. 作為使用者tux2, 試著建立和刪除tux1的主目錄裡的檔案. 能否成功?

不行

28. 再次切換到tty1. 建立一個bin目錄,複製檔案/bin/ls 到此目錄,並且重新命名為my_ls.

29. 設定my_ls的許可權為rw-r-----, 然後分別以tux1和tux2登入試著執行它. 能否執行? 為什麼?

不行,沒有執行許可權

30. 重新設定my_ls的許可權為rwxr-xr-x, 然後再次分別以tux1和tux2登入試著執行它. 現在能否執行?

可以,有執行的許可權

31. 試著執行 my_ls , 分別以tux1 , tux2, 和你自己的帳號 , 許可權分別為 rw-------, rw-rw----, rwx------, rwx–x— 和 rwx–x--x . 對於tux1, 執行my_ls所需要的最小許可權是什麼? 對於tux2呢? 對於你自己的帳號呢?

對於tux1,需要–x------ 對於tux2,需要-----x— 對於自己的賬號,需要--------x

-----------------------------

實驗三

-----------------------------

一. 使用vi文字編輯器

1. 以某個帳號登入系統,確認是否在主目錄裡。在主目錄裡用vi文字編輯器建立一個名為vitest的檔案。可隨意輸入,儘量多輸入以便能多分幾屏顯示。

cd ~ vi vitest

2. 返回到命令列模式,儲存檔案但不退出vi。注意:按下“:”鍵, 該符號會在輸入區域的末行顯示。一旦緩衝區是空的,檔案被關閉,可以看到一段資訊,顯示出檔案的行數和字元數。

3. 任意修改檔案vitest的內容,然後放棄所有修改,強制退出vi。

輸入 q!

二. 游標移動鍵的使用

4. 再次開啟vitest檔案,注意在螢幕的底部指示出該檔案的名稱和字元數。

5. 使用,,和鍵,練習在檔案中移動游標。最簡單的移動游標的方法是使用上,下,左,右鍵.

三. 刪除和貼上

6. 將游標移動至第5行alphanumeric處。用yy命令複製這一行內容,並貼上到下一行。

7.將游標移至第6行,刪除這一行的內容。

四. 字串搜尋與取代

10. 設定一個檔案中已經存在的字串,比如在本檔案中設定該字串為"binary"。試著正向和反向搜尋字串binary.

11.轉入第14行。將該行中的字串"binary"用字串"str1"來取代。如果要用"str1"替換檔案中出現的所有字串"binary"呢?

12.用命令u撤銷11中進行的操作。

五. 其它

13. 移至檔案的末尾。另起一行輸入"the current path of file myfile is: ", 也即寫入myfile所在的路徑。如果忘記了myfile所在路徑,可在末行模式下輸入 :! pwd 進行檢視,然後把檢視的結果插入到the current path of file myfile is:的後面。

14. 在命令模式下用檢視當前文字的狀態。都顯示什麼資訊?

15. 儲存檔案退出。

在命令方式下可有幾種方法退出vi編輯器,:wq ,:ZZ ,:q!

-----------------------------

實驗四

-----------------------------

一. shell環境

(一)命令和檔名補全功能

1. 用date命令檢視系統當前時間,在輸入da後,按tab鍵,讓shell自動補齊命令的後半部分。

2. 用mkdir命令建立新的目錄newdir。首先輸入第一個字母m,然後按tab鍵,由於以m開頭的命令太多,shell會提示是否顯示全部的可能命令,輸入n。

cd ~ mkdir newdir

3. 再多輸入一個字母k,按tab鍵,讓shell列出以mk開頭的所有命令的列表。

4. 在列表中查詢mkdir命令,看看還需要多輸入幾個字母才能確定mkdir這個命令,然後輸入需要的字母,再按tab鍵,讓shell補齊剩下的命令。

5. 最後輸入要建立的目錄名newdir,按回車鍵執行命令。

6. 用ls命令檢視newdir目錄下的內容,看newdir是否可以用檔案補全功能來輸入?

可以進入

(二)命令別名功能

7.輸入alias命令,顯示目前已經設定好的命令的別名。

alias

8.設定別名ls為ls –l,以長格形式顯示檔案列表。

alias ls=‘ls -l’

9. 顯示別名ls代表的命令,確認設定生效。

alias ls

10. 使用別名ls顯示當前目錄中的檔案列表。

ls

11. 在使定義的別名不失效的情況下,使用系統的ls命令顯示當前目錄中的命令列表:

\ls

12. 刪除別名ls。

unalias lsalias cde=‘cd /etc’

13. 顯示別名ls,確認刪除別名已經生效。

alias ls

14. 最後再用命令ls 顯示當前目錄中的檔案列表。

ls

l5. 寫出定義別名cde為:cd /etc的命令。

alias cde=‘cd /etc’

二. 萬用字元的使用

16. 以tux1帳號登入系統,用ls /bin/*sh 命令顯示系統中的shell種類。

ls /bin/*sh

17. 進入/etc目錄並且列出該目錄下的所有檔案。

cd /etc

18. 使用帶萬用字元的ls命令列出檔名:

(1) 檔名以conf結尾的檔案

ls *conf

(2) 檔名以一個字母d或D開頭的檔案

ls [d,D]*

(3) 檔名的第五位包含一個字母o的檔案

ls ???o*

(4) 檔名包含文字tab且不區分大小寫字母的檔案

ls [t,T][a,A][b,B]

(5) 檔名以一位數字結尾的檔案

ls *[^0-9][0-9]

(6) 檔名不以一位數字結尾的檔案

ls *[^0-9]

19. 執行命令ls -d ?[!y]*[e-f]將會發生什麼情況?

匹配不是y開頭的且以e或f結尾的檔案。

20. 返回到你的主目錄。

cd ~

三. 重定向

21. (1)使用cat命令重定向建立一個名為junk的檔案,該檔案包含了一些文字行。鍵入一些行以後,中止cat命令返回到shell提示符。檢視你剛才建立的檔案的內容。(2)使用重定向在junk檔案中再新增一些行。然後檢視該檔案的內容,檢查你所輸入的內容是否完整。

cat junk 輸入一些內容之後:wq

22. 對於命令

(1)將其標準輸出重定向到檔案cat.out,標準錯誤重定向到cat.err。

cat 1>>cat.out cat 2>>cat.err

四. 管道

23. 使用管道統計你的當前目錄裡的檔案數,不要手動去計數。

ls -l|wc -l

24. 執行ls -l> tempfile ; wc -l tempfile ; rm tempfile 命令與第7題作用一樣嗎?為什麼一樣或不一樣?

第七題在哪……

25. 使用ls命令並把輸出結果儲存在名為tempfile2的檔案中,然後統計並顯示檔案數。

ls -l>tempfile2 ls -l|wc -l

五. 命令組

26. 在同一個命令列上,顯示當前的系統日期和登入的所有使用者,包括一些說明註釋,結果存入到一個檔案中。

date>>tempfile;who>>tempfile

六. 程序環境

27. 顯示在你的當前程序環境中定義的所有變數。顯示所有環境變數。

env

28. 用命令 $localvar=10 給本地變數localvar賦值。

localvar=10 echo $localvar

29. 用 $bash 命令啟動一個子shell。再顯示變數localvar的值。這次和28中顯示的為什麼不同?

/bin/bash echo $localvar 無法顯示localvar

八. 使用grep和正則表示式

30. 複製/etc/passwd檔案到你的主目錄,並換名為lspasswd。

cp /etc/passwd ~/lspasswd

31. 搜尋在lspasswd檔案中所有首字母是s的行,並用wc,grep和管道組合成一條命令統計lspasswd檔案中首字母是s的行數。

grep ‘^s’ ~/lspasswd|wc -l

32. 重複上面的操作,但這次只顯示符合條件的行的計數。

grep ‘^s’ ~/lspasswd

33. 嘗試用grep 和正則表示式在lspasswd中查詢其它你想要查詢的資訊。

九.Shell程式及其三種執行方式

34.使用vi編輯器,編輯一個名為setdir的指令碼檔案:

dir1=/tmp dir2=/usr echo $dir1 $dir2

35.分別用學過的三種不同的執行方式執行該指令碼,每次執行一種方式後,再次執行echo $dir1 $dir2

-----------------------------

實驗五

-----------------------------

一.引號的使用

### 1. 雙引號和單引號的使用。依次輸入下列命令:

(1)$string =“ hello world!”

(2)echoecho “string”

(3)echoecho ‘string’

比較(2)和(3)的結果,為什麼不同?

(2)中輸出hello world (3)中輸出string

2. 反引號的使用。進入你的主目錄,輸入:$echo “the current work directory is: pwd”會顯示什麼結果?解釋反引號的作用。

echo “the current work directory is:pwd” 輸出為the current work directory is:/home/username

二. shell程式設計

3.位置變數引數和特定變數引數.驗證講義中Param指令碼的執行結果。

(1)在你的主目錄/home/student下建立目錄bin,並進入到bin目錄。

用vi編輯器編輯本指令碼,內容如下:

echo " script name: "

echo $0

echo “show arguments:”

echo $*

echo “my process id:”

echo $$

echo “Did my script go with any errors?”

echo $?

(2) 執行本指令碼, 顯示什麼內容?

進入終端,執行: cd 實驗五的根目錄 sh 實驗5.sh hello world

顯示內容為: script name: /home/zy/桌面/Linux/實驗5.sh show arguments:

my process id: 19416 Did my script go with any errors? 0

(3)結合執行結果,解釋指令碼中0,0,*,$,,?的意義.

$$ Shell本身的PID(ProcessID) $? 最後執行的命令的結束程式碼(返回值) $* 所有引數列表。 $0 Shell本身的檔名

4. 表示式。依次進行以下操作:

(1) 給變數i賦值為10,變數j賦值為5.

(2) 分別用算術擴充套件$(())和expr兩種方式求表示式i*5-j的值。

i=10 j=5 r=$((i*5-j)) echo $r x=expr $i \* 5 y=expr $x + $j echo $y

5.test命令。

(1)字串操作符。依次輸入以下命令,並解釋執行結果。

$str1=abcd

$str2="abcd "

test"test "str1" = “$str2”

$echo $?

本指令碼輸出結果為1,意思為str1與str2不相等。

(2)整數操作符。依次輸入以下命令,並解釋執行結果。

$str1=1234

$str2=01234

["[ "str1" –eq “$str2” ]

$echo $?

本指令碼輸出結果為0,意思為str1與str2相等。

(3)檔案操作符。依次輸入以下命令,並解釋執行結果。

$touch aa

$ [ -w aa ]

$ test -w aa

$ echo $?

輸出0,aa具有寫許可權。

$[ ! -d aa ]

$ echo $?

輸出1,aa不是一個目錄。

(4)邏輯操作符。利用(3)中的檔案aa執行如下命令,並解釋結果。

$[ -r aa -a -x aa ]

$echo $?

輸出1,aa可讀,但是不可執行。

###6. shell控制語句. 編寫一個指令碼,要求如下:

(1)把使用者名稱作為輸入引數(位置變數引數),每隔60秒檢查一次使用者是否登陸,直至該使用者登陸。

(2)如果執行指令碼時輸入的引數數目不為1,則輸出"Incorrect number of arguments"提示資訊,並退出執行指令碼。

(3)該使用者登陸後,顯示"the user 使用者名稱 has logged on"。其中使用者名稱對應於使用者執行時輸入的引數資訊。

提示:

(1) 用[ "$### " –ne 1 ] 測試輸入引數個數是否為1

(2) 用 who|grep "^user">/dev/nulluser "> /dev/null 判斷使用者user是否登陸

(3) 用 sleep 60 表示每隔60秒進行某項操作。

指令碼內容: if [ $### -ne 1 ]; then echo “Incorrect number of arguments” exit else while true do if who|grep "^$1 "> /dev/null; then echo “the user $1 has logged on” fi sleep 60 done fi

-----------------------------

實驗六

-----------------------------

一.使用者和組的管理

1. 列出你的系統中定義的所有帳號。

compgen -u

2. 檢視是否所有帳號都有密碼? 如何確定是否有密碼?

sudo cat /etc/shadow 列出的所有資料中,第二列資料為密碼的雜湊值,如果密碼不是一個雜湊字串,則代表沒有密碼。

3. 以root帳號登入,增加一個帳號tux3。

sudo -s adduser tux3

4. 檢視/etc/shadow檔案。帳號tux3的密碼是什麼?

登入另一個終端 sudo cat /etc/shadow 密碼為“!”,代表沒有密碼。

5. 給出帳號tux3的密碼“penguin3”。再次檢視/etc/shadow 檔案,這次帳號tux3的密碼是什麼?

sudo cat /etc/shadow 密碼(雜湊字串)為: $68sbhzr9N8sbhzr9NH2.6I20UXLBIGA.SdxVRH7xguTByAvGUT4b8x4TfwR3yURP6HojTsjnxVBUSykdXv1Tl5e41nXjcVO.U4Z7OV

### 6. 檢視/etc/passwd- 檔案的內容。該檔案儲存的是什麼內容? sudo cat /etc/passwd- 儲存的是本機上使用者的資訊,包括使用者名稱,密碼,根目錄等資訊。

7. 帳號tux3所在的組是什麼?

groups tux3 所在的組為tux3

8. 增加一個組“penguins”。

groupadd penguins

9. 把帳號tux3 加入到組penguins中。

gpasswd -a tux3 penguins

10. 在哪個檔案中可以看到這個變化?解釋一下如何變化的。

11.不退出root帳號,用一個命令轉入到tux3使用者帳號,要求改變身份時,同時變更工作目錄。如果不要求變更工作目錄那應該怎麼做?

改變工作目錄: su - tux3 不改變工作目錄: su tux3

12.用一個命令從tux3使用者帳號退回到root帳號。

sudo -s

二.程序管理和任務自動化

13. 使用vi編輯器,在你的使用者主目錄的bin目錄下建立一個指令碼檔案myclock,內容如下:

while true do date sleep 10 done

14. 在前臺執行該指令碼檔案。

15. 掛起剛才執行的任務。

ctrl + z

16. 列出系統中執行的所有任務,在後臺重新執行上面的任務。

jobs

17.檢視系統中正在執行的所有程序的詳細資訊(包括前臺和後臺的),這裡面有剛才啟動的任務myclock嗎?

ps -A 沒有

18.只檢視由root使用者啟動的程序資訊

ps -u root

19.把myclock任務轉為前臺執行,螢幕顯示時間後退出該任務的執行。

20.再次在後臺執行myclock指令碼檔案。

21. 使用kill命令停止shell指令碼myclock的執行。

kill [myclock的程序號]

三.檔案的壓縮和歸檔

22.拷貝/usr/share目錄到使用者主目錄下,改目錄名為backup,然後建立一個包含backup子目錄中全部檔案的名為backup.tar的檔案檔案

cp -r /usr/share ~/backup tar -cf backup.tar backup

23.在當前目錄下,建立一個包含backup子目錄中全部檔案的經過gzip壓縮的名為backup.tar.gz的檔案檔案

tar -czf backup.tar.gz backup

24.試著釋放backup.tar.gz檔案.

tar -xf backup.tar.gz

四.網路配置

26.驗證一下網路配置相關命令的使用。

hostname ifconfig ifup {interface} ifdown {interface} ping www.baidu.com netstat nslookup

27、驗證netconfig程式的使用。

控制檯輸入:netconfig 進入網路設定(貌似ubuntu不行)