學習時間:11個小時
一、 學習目標
1. 能夠獨立安裝Linux操作系統
2. 能夠熟練使用Linux系統的基本命令
3. 熟練使用Linux中用戶管理命令/系統相關命令/文件目錄相關命令/打包壓縮相關命令/比較合並相關命令/網絡相關命令等
4. 熟練應用“搜索”進行舉一反三的學習
二、 學習資源
1. 課程資料:https://www.shiyanlou.com/courses/413 實驗一,課程邀請碼:W7FQKW4Y
2. Linux 基礎入門:https://www.shiyanlou.com/courses/1(重點,第一次課考核內容全部從這里面出)
三、 學習方法
1. 進度很重要:必須跟上每周的進度,閱讀,練習,問答,項目。我會認真對待每一位同學,請你不要因為困難半途而廢。
2. 問答很重要:遇到知識難點請多多提問,這是你的權利更是您對自己負責的義務。問答到博客園討論小組:http://group.cnblogs.com/103791/
3. 實踐很重要:解決書中習題,實踐書中實例,完成每周項目,才算真的消化了這本好書。通過實驗樓環境或自己安裝的虛擬機在實踐中進行學習
4. 實驗報告很重要:詳細記錄你完成項目任務的思路,獲得老師點評和幫助自己復習。學習完成后在博客園中(http://www.cnblogs.com/)把學習過程通過博客發表,博客標題“信息安全系統設計基礎第一周學習總結”
四、 學習任務
1. 重點學習 cheat/find/locate/grep/man/whereis/which/apt-get
查找幫助文檔、各種示例多多練習,這幾個命令會貫穿我們整個學習的學習,掌握這幾個命令就可以很好學習其他命令了。
2. 這學期需要掌握的命令有ac,apt-get,bzip2,cat,chgrp,chmod,chown,clear,compress,cp,dd,df,diff,du,dump,evn,find,finger,free,grep,gzip,head,kill,less,ln,locate,l,gout,ls,man,mkdir,more,mount,mt,mv,netstat,nslookup,od,passwd,patch,ps,pstop,pwd,rm,shell,sort,ssh,stty,tail,tar,telnet,touch,tree,uname,unzip,vi,vim,whereis,which,who,write等
五、 學習過程
1. 了解Linux與windows的基本區別與學習Linux的目的
(1)Linux的開發更加自由
(2)使用Linux可以只用鍵盤操作,新手需要學習
(3)Linux可以進行更好的關於網絡與服務器方面的開發
2. Linux的基本概念和操作
(1)實驗環境的熟悉(實驗樓中的系統用戶名和密碼均為shiyanlou)
(2)終端(Terminal),Linux 的多用戶登陸就是通過不同的 /dev/tty 設備完成的,Linux 默認提供了 6 個純命令行界面的 “terminal”(准確的說這里應該是 6 個 virtual consoles)來讓用戶登錄,在物理機系統上你可以通過使用[Ctrl]+[Alt]+[F1]~[F6]進行切換。當你切換到其中一個終端后想要切換回圖形界面,你可以按下[Ctrl]+[Alt]+[F7]來完成。
中間程序(Shell),提供給使用者使用界面的軟件(命令解析器)。
(3)命令行操作
1) 重要快捷鍵:
使用Tab鍵來進行命令補全,補全目錄,補全命令參數都是沒問題的;
用Ctrl+c鍵來強行終止當前程序(它並不會使終端退出);
你可以使用鍵盤上的方向上鍵,恢復你之前輸入過的命令。

圖1:輸入tial

圖2:輸入find /
| 按鍵 |
作用 |
| Ctrl+d |
鍵盤輸入結束或退出終端 |
| Ctrl+s |
暫定當前程序,暫停后按下任意鍵恢復運行 |
| Ctrl+z |
將當前程序放到后台運行,恢復到前台為命令fg |
| Ctrl+a |
將光標移至輸入行頭,相當於Home鍵 |
| Ctrl+e |
將光標移至輸入行末,相當於End鍵 |
| Ctrl+k |
刪除從光標所在位置到行末 |
| Alt+Backspace |
向前刪除一個單詞 |
| Shift+PgUp |
將終端顯示向上滾動 |
| Shift+PgDn |
將終端顯示向下滾動 |
圖3:常用指令
2) 通配符:主要有星號(*)和問號(?),用來對對字符串進行模糊匹配(比如文件名,參數名)。

圖4:創建text文件與查找
圖5:創建多個txt文件與查找
| 字符 |
含義 |
| * |
匹配 0 或多個字符 |
| ? |
匹配任意一個字符 |
| [list] |
匹配 list 中的任意單一字符 |
| [!list] |
匹配 除list 中的任意單一字符以外的字符 |
| [c1-c2] |
匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z] |
| {string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
| {c2..c2} |
匹配 c1-c2 中全部字符 如{1..10} |
圖6:Shell 常用通配符
3) 幫助指令
可以使用man 命令,它是Manual page的縮寫。

圖7:查看man指令

圖8:查看相應區段的指令介紹

圖9:指令“ls --help”
3. 用戶及文件的操作權限
(1)查看用戶指令:who am i (who mom likes);

圖10:查看用戶
指令:whoami(去掉空格),只打印用戶名
圖11:只顯示用戶名
| 參數 |
說明 |
| -a |
打印能打印的全部 |
| -d |
打印死掉的進程 |
| -m |
同am i,mom likes |
| -q |
打印當前登錄用戶數及用戶名 |
| -u |
打印當前登錄用戶登錄信息 |
| -r |
打印運行等級 |
圖12:who 命令其它常用參數
(2)創建用戶:這里用到 sudo 這個命令,使用這個命令有兩個大前提,一是知道當前登錄用戶的密碼,二是當前用戶必須在 sudo 用戶組。
“$ sudo adduser lilei”指令創建新賬戶,輸入密碼界面上看不見,其他信息敲下回車鍵就表示默認。

圖13:創建新賬戶並查看
(3)在 Linux 里面如何知道自己屬於哪些用戶組
1) 使用groups命令:其中冒號之前表示用戶,后面表示該用戶所屬的用戶組。
2) 查看/etc/group文件,cat 命令用於讀取指定文件的內容並打印到終端輸出,后面會詳細講它的使用。 | sort 表示將讀取的文本進行一個字典排序再輸出,然后你將看到如下一堆輸出,你可以在最下面看到 shiyanlou 的用戶組信息。/etc/group 的內容包括用戶組(Group)、用戶組口令、GID 及該用戶組所包含的用戶(User),每個用戶組一條記錄。格式如下:
group_name:password:GID:user_list
你看到上面的 password 字段為一個 'x' 並不是說密碼就是它,只是表示密碼不可見而已。

圖14:groups指令

圖15:查看/etc/group/文件
(4)將用戶加入群組,使用 usermod 命令可以為用戶添加用戶組,同樣使用該命令你必需有 root 權限,你可以直接使用 root 用戶為其它用戶添加用戶組,或者用其它已經在 sudo 用戶組的用戶使用 sudo 命令獲取權限來執行該命令。

圖16:顯示用戶不在群組中

圖17:root用戶lilei
(5)刪除用戶:指令“$ sudo deluser lilei --remove-home”

圖18:刪除用戶
(6)查看文件權限:(Linux 里面一切皆文件),一個 目錄要同時具有讀權限和執行權限才可以打開,而一個目錄要有寫權限才允許在其中創建其它文件,這是因為目錄文件實際保存着該目錄里面的文件的列表等信息所有者權限。

圖19:同時使用 '-A' 和 '-l' 參數

圖20:顯示文件大小
(7)變更文件所有權

圖21:變更文件夾的位置
(8)修改文件權限
1)二進制表示

2)加減賦值操,指令“$ chmod go-rw iphone”,'g''o'還有'u',分別表示group,others,user,'+','-' 就分別表示增加和去掉相應的權限。
4. Linux目錄結構及文件基本操作
1) FHS標准,這種文件組織形式定義了系統中每個區域的用途、所需要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。指令“tree /”:

2) 目錄路徑,使用 cd 命令可以切換目錄,在 Linux 里面使用 . 表示當前目錄,.. 表示上一級目錄(**注意,還記得我們上一節介紹過的,以 . 開頭的文件都是隱藏文件,所以這兩個目錄必然也是隱藏的,你可以使用 ls -a 命令查看隱藏文件), - 表示上一次所在目錄,~ 通常表示當前用戶的"home"目錄。使用 pwd命令可以獲取當前所在路徑(絕對路徑)。

3) 絕對路徑,簡單地說就是以根"/"目錄為起點的完整路徑,以你所要到的目錄為終點,表現形式如: /usr/local/bin,表示根目錄下的 usr 目錄中的 local 目錄中的 bin 目錄。
相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 . 為起點,以你所要到的目錄為終點,表現形式如:usr/local/bin 。

4) Linux文件的基本操作
1) 新建空白文件,使用 touch 命令創建空白文件,主要是來更改已有文件的時間戳的(比如,最近訪問時間,最近修改時間),但其在不加任何參數的情況下,只指定一個文件名,則可以創建一個為指定文件名的空白文件(不會覆蓋已有同名文件),當然你也可以同時指定該文件的時間戳。

2) 新建目錄,使用 mkdir(make directories)命令可以創建一個空目錄,也可同時指定創建目錄的權限屬性,使用 -p 參數,同時創建父目錄(如果不存在該父目錄),如下我們同時創建一個多級目錄。

5) 復制文件,使用cp(copy)命令復制一個文件或目錄到指定目錄。
復制目錄,成功復制目錄需要加上-r或者-R參數,表示遞歸復制。

6) 刪除文件,使用rm(remove files or directories)命令;刪除目錄,跟復制目錄一樣,要刪除一個目錄,也需要加上-r或-R參數。
7) 移動文件,使用mv(move or rename files)命令,移動文件(剪切)。
8) 重命名,“mv 舊的文件名 新的文件名”
多個重命名:
# 批量將這 5 個后綴為 .txt 的文本文件重命名為以 .c 為后綴的文件
$ rename 's/\.txt/\.c/' *.txt
# 批量將這 5 個文件,文件名改為大寫
$ rename 'y/a-z/A-Z/' *.c
9) 查看文件,cat,tac這兩個命令都是用來打印文件內容到標准輸出(終端),其中cat為正序顯示,tac倒序顯示;
使用more和less命令分頁查看文件;
使用head和tail命令查看文件;
(只看一行, 加上-n參數,后面緊跟行數)
10) 查看文件類型,file命令查看文件類型

11) 編輯文件,直接使用 Linux 內部的 vim 學習教程,輸入如下命令即可開始。
5. 環境變量與文件查找
(1)變量,使用declare命令創建一個變量名;
使用=號賦值運算符為變量 tmp 賦值為 shiyanlou;
讀取變量的值,使用echo命令和$符號($符號可以表示引用一個變量的值)

(2)三種環境變量:
當前 Shell 進程私有用戶自定義變量,如上面我們創建的 temp 變量,只在當前 Shell 中有效;
Shell 本身內建的變量;
從自定義變量導出的環境變量。
| 命令 |
說明 |
| set |
顯示當前 Shell 所有環境變量,包括其內建環境變量(與 Shell 外觀等相關),用戶自定義變量及導出的環境變量 |
| env |
顯示與當前用戶相關的環境變量,還可以讓命令在指定環境中運行 |
| export |
顯示從 Shell 中導出成環境變量的變量,也能通過它將自定義變量導出為環境變量 |
(3)命令的查找路徑與順序
查看PATH環境變量的內容,使用指令“$ echo $PATH”
6. 文件的打包和壓縮
(1)使用zip指令壓縮文件,命令中,-r參數表示遞歸打包包含子目錄的全部內容,-q參數表示為安靜模式,即不向屏幕輸出信息,-o,表示輸出文件,需在其后緊跟打包輸出文件名。后面使用du命令查看打包后文件的大小。(使用-e參數可以使用加密壓縮包)
(2)使用unzip指令解壓文件,如果指定目錄不存在,將會自動創建。如果不想解壓只想查看壓縮包的內容可以使用-l參數。
(3)rar,打開壓縮包指令。

安裝rar和unrar工具
從指定文件或目錄創建壓縮包或添加文件到壓縮包:

unrar和rar的使用:
- 從指定壓縮包文件中刪除某個文件:$ rar d shiyanlou.rar .zshrc
查看不解壓文件:$ rar l shiyanlou.rar
全路徑解壓:$ unrar x shiyanlou.rar
去掉路徑解壓:$ mkdir tmp $ unrar e shiyanlou.rar tmp/
(4)tar打包工具,解包一個文件(-x參數)到指定路徑的已存在目錄(-C參數),只查看不解包文件-t參數,
7. 文件系統操作與磁盤管理
(1)df指令,查看磁盤容量

du指令查看目錄的容量,-d參數指定查看目錄的深度

(2)創建虛擬磁盤
1) dd指令,dd命令用於轉換和復制文件,不過它的復制不同於cp。dd的的命令行選項格式為
選項=值。

用dd命令從/dev/zero設備創建一個容量為 256M 的空文件

2) 使用mkfs命令格式化磁盤

(3)使用mount指令將磁盤掛載到目錄樹上,mount命令的一般格式如下:
mount [options] [source] [directory]
使用 umount 命令卸載已掛載磁盤:
$ sudo umount /mnt
(4)使用 fdisk 為磁盤分區,使用 losetup 命令建立鏡像與回環設備的關聯

8. 命令執行順序控制與管道
(1)cut 命令,打印每一行的某一字段
(2)grep 命令,在文本中或 stdin 中查找匹配字符串,一般表達形式為:
grep [命令選項]... 用於匹配的表達式 [文件]...
(3)wc 命令用於統計並輸出一個文件中行、單詞和字節的數目
(4)sort指令排序,-t參數用於指定字段的分隔符,這里是以":"作為分隔符;-k 字段號用於指定對哪一個字段進行排序,如果要按照數字排序就要加上-n參數。
(5)uniq命令可以用於過濾或者輸出重復行,使用history命令查看最近執行過的命令。
9. 簡單的文件處理
簡單的指令:
1) tr 命令可以用來刪除一段文本信息中的某些文字。或者將其進行轉換。
2) col 命令可以將Tab換成對等數量的空格建,或反轉這個操作。
3) join指令,將兩個文件中包含相同內容的那一行合並在一起。
4) paste這個命令與join 命令類似,它是在不對比數據的情況下,簡單地將多個文件合並一起,以Tab隔開。
10. 數據流重定向
(1)管道和重定向的區別:管道默認是連接前一個命令的輸出到下一個命令的輸入,而重定向通常是需要一個文件來建立兩個命令的連接
(2)標准錯誤的重定向(注意:在輸出重定向文件描述符前加上&,否則shell會當做重定向到一個文件名為1的文件中)
(3)Tee指令,輸出同時重定向到多個文件。
(4)使用指令exec可命令實現“永久”重定向

(5)同樣使用exec命令可以創建新的文件描述符
(6)可以利用設個/dev/null屏蔽命令的輸出,向上面這樣的操作將使你得不到任何輸出結果。
(7)xargs命令用於將/etc/passwd文件按:分割取第一個字段排序后,使用echo命令生成一個列表。
11. 正則表達式基礎
(1)正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。
(2)基本語法:一個正則表達式通常被稱為一個模式(pattern),為用來描述或者匹配一系列符合某個句法規則的字符串。
1) 選擇:|豎直分隔符表示選擇;
2) 數量限定
+表示前面的字符必須出現至少一次(1次或多次);
?表示前面的字符最多出現一次(0次或1次);
*星號代表前面的字符可以不出現,也可以出現一次或者多次;
3) 范圍和優先級,()圓括號可以用來定義模式字符串的范圍和優先級,
| 字符 |
描述 |
| \ |
將下一個字符標記為一個特殊字符、或一個原義字符。例如,“n”匹配字符“n”。“\n”匹配一個換行符。序列“\\”匹配“\”而“\(”則匹配“(”。 |
| ^ |
匹配輸入字符串的開始位置。 |
| $ |
匹配輸入字符串的結束位置。 |
| {n} |
n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。 |
| {n,} |
n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價於“o+”。“o{0,}”則等價於“o*”。 |
| {n,m} |
m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o。“o{0,1}”等價於“o?”。請注意在逗號和兩個數之間不能有空格。 |
| * |
匹配前面的子表達式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等價於{0,}。 |
| + |
匹配前面的子表達式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。 |
| ? |
匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價於{0,1}。 |
| ? |
當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對於字符串“oooo”,“o+?”將匹配單個“o”,而“o+”將匹配所有“o”。 |
| . |
匹配除“\n”之外的任何單個字符。要匹配包括“\n”在內的任何字符,請使用像“(.|\n)”的模式。 |
| (pattern) |
匹配pattern並獲取這一匹配的子字符串。該子字符串用於向后引用。要匹配圓括號字符,請使用“\(”或“\)”。 |
| x|y |
匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”則匹配“zood”或“food”。 |
| [xyz] |
字符集合(character class)。匹配所包含的任意一個字符。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符僅有反斜線\保持特殊含義,用於轉義字符。其它特殊字符如星號、加號、各種括號等均作為普通字符。脫字符^如果出現在首位則表示負值字符集合;如果出現在字符串中間就僅作為普通字符。連字符 - 如果出現在字符串中間表示字符范圍描述;如果如果出現在首位則僅作為普通字符。 |
| [^xyz] |
排除型(negate)字符集合。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。 |
| [a-z] |
字符范圍。匹配指定范圍內的任意字符。例如,“[a-z]”可以匹配“a”到“z”范圍內的任意小寫字母字符。 |
| [^a-z] |
排除型的字符范圍。匹配任何不在指定范圍內的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范圍內的任意字符。 |
(3)優先級:

(4)grep命令用於打印輸出文本中匹配的模式串,它使用正則表達式作為模式匹配的條件,

(5)grep指令
數量:

選擇:

選擇的符號說明:

排除字符:

(6)zo{1}只匹配zo,zo{1,}匹配zo開頭的所有單詞
選擇,grep – E 匹配相同的,Ev不相同的

(.號有特殊含義,所以需要轉義。)
(7)sed命令,常用格式
sed [參數]... [執行命令] [輸入文件]...
常用參數:

12. Linux下軟件的安裝
(1)apt-get使用各用於處理apt包的公用程序集,我們可以用它來在線安裝、卸載和升級軟件包等

一些常用參數:

(2)軟件升級

(3)軟件卸載:

(4)軟件搜索:
apt-cache search 軟件名
(5)在網絡上簡單以deb形式打包的軟件包,就需要使用dpkg命令來安裝,一些常用參數:



(6)查看已安裝的軟件包的目錄,使用dpkg -L查看deb包目錄信息
(7)二進制包安裝,從網絡上下載的二進制包解壓后放到合適的目錄,然后將包含可執行的主程序文件的目錄添加進PATH環境變量即可。
六、 課后作業
2.
作業圖1
作業圖2
作業圖3:下載toilet資料包之后
3.
創建用戶:指令(sudo adduser),敲下回車使用默認值

Root用戶:

4.


5.

6.

7.

8.
(1)現在實驗樓的環境中打開瀏覽器,然后輸入對應的網址,下載圖片
(2)之后下載對應程序,輸入程序名字后再后面加入圖片的目錄即可。

9.
下載文件,運行即可(方向鍵左右移動,空格射擊)

10.
DEMO:

FIRE:

12.

七、 心得體會
1.了解了Linux與windows的區別,認識了Linux的優缺點,了解了基本操作,為以后更方便的使用Linux打下基礎。
2.這次了解了磁盤分區,見識到了Linux的便利。並嘗試在Linux中打開瀏覽器,下載圖片。
3.學習了Linux中的軟件安裝,對以后自己在虛擬機中的使用打下基礎
