做業說明shell
這個做業屬於哪一個課程 | 網絡攻防實踐(https://edu.cnblogs.com/campus/besti/19attackdefense) |
這個做業的要求在哪裏 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10228 |
我在這個課程的目標是 | 學習網絡攻防相關知識,並經過實踐深刻了解網絡攻防 |
這個做業在哪一個具體方面幫助我實現目標 | 複習鞏固Linux基礎知識 |
做業一安全
1. 你對網絡攻擊和防護瞭解多少?該課程須要計算機和網絡相關的基礎知識,你原專業是什麼專業,目前你掌握多少基礎知識?bash
● 上學期學習了《網絡系統安全》這門課,對網絡攻擊和防護的基礎知識有一些瞭解,並作過一些相關實踐。網絡攻擊分爲主動攻擊和被動攻擊,主動攻擊有假裝、重放、篡改和拒絕服務,被動攻擊有報文分析和流量分析,對於被動攻擊,重在防範,而不在於檢測。網絡
● 我原專業是網絡工程,對計算機網絡基礎知識較爲了解。less
2. 做業要使用Markdown格式,Markdown入門參考(需掌握)iphone
● 因上學期選修《Linux內核原理與分析》這門課,因此已掌握基本的Markdown語法。工具
做業二學習
你本身動手安裝過操做系統嗎?若是沒有話如今動手學一下吧。ui
1. 學習基於VirtualBox虛擬機安裝Ubuntu圖文教程在本身筆記本上安裝Linux操做系統(也可使用VMware安裝虛擬機,安裝方法本身百度)spa
● 因上學期選修《Linux內核原理與分析》這門課,已安裝虛擬機。
2. 經過實踐學習別出心裁的Linux命令學習法,掌握Linux命令的學習方法
● 因上學期選修《Linux內核原理與分析》這門課,已掌握Linux的基本命令。
3. 參考上面的學習方法經過實踐學習Linux基礎入門(新版)課程,掌握經常使用的Linux命令,重點是3/4/5/6/7/8節
實驗3 用戶及文件權限管理
在 Linux 系統裏, root
帳戶擁有整個系統至高無上的權利,好比 新建/添加 用戶。咱們通常登陸系統時都是以普通帳戶的身份登陸的,要建立用戶須要 root 權限,這裏就要用到 sudo
這個命令了。不過使用這個命令有兩個大前提,一是你要知道當前登陸用戶的密碼,二是當前用戶必須在 sudo
用戶組。
● 查看用戶:who am i 或者 who mom likes
● su,su- 與 sudo
su <user>
能夠切換到用戶 user,執行時須要輸入目標用戶的密碼。
sudo <cmd>
能夠以特權級別運行 cmd 命令,須要當前用戶屬於 sudo 組,且須要輸入當前用戶的密碼。
su - <user>
命令也是切換用戶,同時環境變量也會跟着改變成目標用戶的環境變量。
● 新建用戶:sudo adduser <user>,這個命令不但能夠添加用戶到系統,同時也會默認爲新用戶建立 home 目錄。
● 查看用戶屬於哪些用戶組:groups <user>
● 將其它用戶加入 sudo 用戶組
默認狀況下新建立的用戶是不具備 root 權限的,也不在 sudo 用戶組,可讓其加入 sudo 用戶組從而獲取 root 權限。使用usermod
命令能夠爲用戶添加用戶組,一樣使用該命令你必需有 root 權限,你能夠直接使用 root 用戶爲其它用戶添加用戶組,或者用其它已經在 sudo 用戶組的用戶使用 sudo 命令獲取權限來執行該命令。
$ su shiyanlou # 此處須要輸入 shiyanlou 用戶密碼,shiyanlou 的密碼能夠經過 `sudo passwd shiyanlou` 進行設置。 $ groups lilei $ sudo usermod -G sudo lilei $ groups lilei
● 刪除用戶: sudo deluser <user> --remove-home
● 查看文件權限:ls -l
出現以下所示結果:
● 變動文件全部者
# 注意當前的用戶必須是 lilei # 若是是 shiyanlou 用戶須要切換到 lilei(若是以前已經刪除須要從新建立下) $ su lilei $ cd /home/lilei $ touch iphone6 # 更改文件全部者爲shiyanlou,須要切換到 shiyanlou 用戶執行如下操做 $ cd /home/lilei $ ls iphone6 $ sudo chown shiyanlou iphone6
● 修改文件權限
方法一:二進制數字表示
每一個文件的三組權限(擁有者,所屬用戶組,其餘用戶,記住這個順序是必定的)對應一個 " rwx ",也就是一個 「 7 」 ,因此若是我要將文件「 iphone6 」的權限改成只有我本身能夠用那麼就這樣:
$ chmod 600 iphone6
方法二:加減賦值操做
$ chmod go-rw iphone6 // g、o 還有 u 分別表示 group、others 和 user,+ 和 - 分別表示增長和去掉相應的權限。
● adduser
和 useradd
的區別
useradd 只建立用戶,建立完了用 passwd lilei 去設置新用戶的密碼。adduser 會建立用戶,建立目錄,建立密碼(提示你設置),作這一系列的操做。其實 useradd、userdel 這類操做更像是一種命令,執行完了就返回。而 adduser 更像是一種程序,須要你輸入、肯定等一系列操做。
實驗4 Linux目錄結構及文件基本操做
● FHS標準
FHS 依據文件系統使用的頻繁與否以及是否容許用戶隨意改動,將目錄定義爲四種交互做用的形態,以下表所示:
● 進入上一級目錄:cd ..
進入你的 home
目錄:
絕對路徑:關於絕對路徑,簡單地說就是以根" / "目錄爲起點的完整路徑,以你所要到的目錄爲終點,表現形式如: /usr/local/bin
,表示根目錄下的 usr
目錄中的 local
目錄中的 bin
目錄。
相對路徑:也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 .
爲起點,以你所要到的目錄爲終點,表現形式如:usr/local/bin
(這裏假設你當前目錄爲根目錄)。你可能注意到,咱們表示相對路徑實際並無加上表示當前目錄的那個 .
,而是直接以目錄名開頭,由於這個 usr
目錄爲 /
目錄下的子目錄,是能夠省略這個 .
的(之後會講到一個相似不能省略的狀況);若是是當前目錄的上一級目錄,則須要使用 ..
,好比你當前目錄爲 /home/shiyanlou
目錄下,根目錄就應該表示爲 ../../
,表示上一級目錄( home
目錄)的上一級目錄( /
目錄)。
下面咱們以你的 home
目錄爲起點,分別以絕對路徑和相對路徑的方式進入 /usr/local/bin
目錄:
# 絕對路徑 $ cd /usr/local/bin # 相對路徑 $ cd ../../usr/local/bin
● 新建空白文件:touch <文件名>
新建目錄:mkdir <目錄名>
同時建立一個多級目錄:mkdir -p father/son/grandson
● 複製文件:
$ cd /home/shiyanlou $ mkdir family $ cp -r father family
● 刪除文件:rm <文件> 或 rm -f <文件>,表示強制刪除
刪除目錄:跟複製目錄同樣,要刪除一個目錄,也須要加上 -r
或 -R
參數,rm -r <目錄>
● 移動文件:mv <源目錄文件> <目的目錄>
重命名文件:mv <舊的文件名> <新的文件名>
批量重命名:rename
● 查看文件
使用 cat
,tac
和 nl
命令查看文件:前兩個命令都是用來打印文件內容到標準輸出(終端),其中 cat
爲正序顯示,tac
爲倒序顯示。nl
命令,添加行號並打印。
使用 more
和 less
命令分頁查看文件:若是說上面的 cat
是用來快速查看一個文件的內容的,那麼這個 more
和 less
就是天生用來"閱讀"一個文件的內容的。
使用 head
和 tail
命令查看文件:它們一個是隻查看文件的頭幾行(默認爲 10 行,不足 10 行則顯示所有)和尾幾行。
● 查看文件類型:file <文件>
實驗5 環境變量與文件查找
● 變量
$ declare tmp // 建立變量,或也能夠不用 declare 預聲明一個變量,直接即用即建立
$ tmp=shiyanlou // 使用 = 號賦值運算符,將變量 tmp 賦值爲 shiyanlou
$ echo $tmp // 讀取變量的值,使用 echo 命令和 $ 符號($ 符號用於表示引用一個變量的值)
● 環境變量
一般咱們會涉及到的變量類型有三種:
1)當前 Shell 進程私有用戶自定義變量,如上面咱們建立的 tmp 變量,只在當前 Shell 中有效。
2)Shell 自己內建的變量。
3)從自定義變量導出的環境變量。
也有三個與上述三種環境變量相關的命令:set
,env
,export
。這三個命令很類似,都是用於打印環境變量信息,區別在於涉及的變量範圍不一樣。
命 令 | 說 明 |
---|---|
set |
顯示當前 Shell 全部變量,包括其內建環境變量(與 Shell 外觀等相關),用戶自定義變量及導出的環境變量。 |
env |
顯示與當前用戶相關的環境變量,還可讓命令在指定環境中運行。 |
export |
顯示從 Shell 中導出成環境變量的變量,也能經過它將自定義變量導出爲環境變量。 |
● 咱們在 Shell 中輸入一個命令,Shell 經過環境變量 PATH
來進行搜索的,而後執行。
PATH
裏面的路徑是以 :
做爲分割符的,因此咱們能夠這樣添加自定義路徑:
$ PATH=$PATH:/home/shiyanlou/mybin //注意這裏必定要使用絕對路徑。
可是這樣只是給 PATH 環境變量追加了一個路徑,它也只是在當前 Shell 有效,我一旦退出終端,再打開就會發現又失效了。有沒有方法讓添加的環境變量全局有效?或者每次啓動 Shell 時自動執行上面添加自定義路徑到 PATH 的命令?下面咱們就來講說後一種方式——讓它自動執行。
在每一個用戶的 home 目錄中有一個 Shell 每次啓動時會默認執行一個配置腳本,以初始化環境,包括添加一些用戶自定義環境變量等等。zsh 的配置文件是 .zshrc
,相應 Bash 的配置文件爲 .bashrc
。它們在 etc
下還都有一個或多個全局的配置文件,不過咱們通常只修改用戶目錄下的配置文件。
$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
上述命令中 >>
表示將標準輸出以追加的方式重定向到一個文件中,注意前面用到的 >
是以覆蓋的方式重定向到一個文件中,使用的時候必定要注意分辨。在指定文件不存在的狀況下都會建立新的文件。
● 前面咱們在 Shell 中修改了一個配置腳本文件以後(好比 zsh 的配置文件 home 目錄下的 .zshrc
),每次都要退出終端從新打開甚至重啓主機以後其才能生效,非常麻煩,咱們可使用 source
命令來讓其當即生效,如:
$ cd /home/shiyanlou $ source .zshrc
source
命令還有一個別名就是 .
,上面的命令若是替換成 .
的方式就該是:
$ . ./.zshrc
在使用.
的時候,須要注意與表示當前路徑的那個點區分開。注意第一個點後面有一個空格,並且後面的文件必須指定完整的絕對或相對路徑名,source 則不須要。
● 搜索文件
whereis
簡單快速
locate
快而全
which
小而精
find
精而細
實驗6 文件打包與解壓縮
● zip
打包 :zip something.zip something (目錄請加 -r 參數)
解包:unzip something.zip
指定路徑:-d 參數
● tar
打包:tar -cf something.tar something
解包:tar -xf something.tar
指定路徑:-C 參數
實驗7 文件系統操做與磁盤管理
● 查看磁盤和目錄的容量
使用 df 命令查看磁盤的容量
# 默認一樣以 塊 的大小展現 $ df # 加上`-h`參數,以更易讀的方式展現 $ df -h
# 默認一樣以 塊 的大小展現 $ du # 加上`-h`參數,以更易讀的方式展現 $ du -h # 只查看1級目錄的信息 $ du -h -d 0 ~ # 查看2級 $ du -h -d 1 ~ du -h #同--human-readable 以K,M,G爲單位,提升信息的可讀性。 du -a #同--all 顯示目錄中全部文件的大小。 du -s #同--summarize 僅顯示總計,只列出最後加總的值。
● dd
命令用於轉換和複製文件,不過它的複製不一樣於cp。
dd
默認從標準輸入中讀取,並寫入到標準輸出中,但能夠用選項if
(input file,輸入文件)和of
(output file,輸出文件)改變。
用dd
命令從標準輸入讀入用戶的輸入到標準輸出或者一個文件中:
# 輸出到文件 $ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1 # 輸出到標準輸出 $ dd if=/dev/stdin of=/dev/stdout bs=10 count=1 # 注 在打完了這個命令後,繼續在終端打字,做爲你的輸入
上述命令從標準輸入設備讀入用戶輸入(缺省值,因此可省略)而後輸出到 test 文件,bs
(block size)用於指定塊大小(缺省單位爲 Byte,也可爲其指定如'K','M','G'等單位),count
用於指定塊數量。
dd
在拷貝的同時還能夠實現數據轉換,那下面就舉一個簡單的例子:將輸出的英文字符轉換爲大寫再寫入文件:
$ dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
使用dd
命令來完成建立虛擬磁盤的第一步。
# 從/dev/zero設備建立一個容量爲 256M 的空文件 $ dd if=/dev/zero of=virtual.img bs=1M count=256 $ du -h virtual.img
而後咱們要將這個文件格式化(寫入文件系統),這裏使用 mkfs 命令格式化磁盤(咱們這裏是本身建立的虛擬磁盤鏡像)
# 將咱們的虛擬磁盤鏡像格式化爲ext4文件系統 $ sudo mkfs.ext4 virtual.img
實驗8 Linux下的幫助命令
● 內建命令與外部命令
內建命令其實是 shell 程序的一部分,其中包含的是一些比較簡單的 Linux 系統命令,這些命令是寫在bash源碼的builtins裏面的,由 shell 程序識別並在 shell 程序內部完成運行,一般在 Linux 系統加載運行時 shell 就被加載並駐留在系統內存中。並且解析內部命令 shell 不須要建立子進程,所以其執行速度比外部命令快。好比:history、cd、exit 等等。
外部命令是 Linux 系統中的實用程序部分,由於實用程序的功能一般都比較強大,因此其包含的程序量也會很大,在系統加載時並不隨系統一塊兒被加載到內存中,而是在須要時纔將其調入內存。雖然其不包含在 shell 中,可是其命令執行過程是由 shell 程序控制的。外部命令是在 Bash 以外額外安裝的,一般放在/bin,/usr/bin,/sbin,/usr/sbin等等。好比:ls、vi等。
● 幾個經常使用的幫助命令
help 命令:只能用於顯示shell內建命令的幫助信息。外部命令基本上都有一個參數--help:ls --help
man命令:獲得的內容比用 help 更多更詳細,並且man沒有內建與外部命令的區分,由於 man 工具是顯示系統手冊頁中的內容,也就是一本電子版的字典,這些內容大多數都是對命令的解釋信息,還有一些相關的描述。經過查看系統文檔中的 man 也能夠獲得程序的更多相關信息和 Linux 的更多特性。
info命令:man 和 info 就像兩個集合,它們有一個交集部分,但與 man 相比,info 工具可顯示更完整的 GNU 工具信息。若 man 頁包含的某個工具的概要信息在 info 中也有介紹,那麼 man 頁中會有「請參考 info 頁更詳細內容」的字樣。