LINUX信息安全系統設計基礎第一周學習總結


 Linux系統簡介

 

一、實驗內容

 

了解 Linux 的歷史,Linux 與 Windows 的區別等入門知識。

 

二、實驗要求

 

閱讀linux簡介與歷史

 

三、實驗步驟

二、Linux 與 Windows 到底有哪些不同

1.免費與收費

最新正版 Windows8.1 官方售價 ¥888;

Linux 免費或少許費用

2. 軟件與支持

  • Windows 平台:數量和質量的優勢,不過大部分為收費軟件;由微軟官方提供重要支持和服務;
  • Linux 平台:大都為開源自由軟件,用戶可以修改定制和再發布,由於基本免費沒有資金支持,部分軟件質量和體驗欠缺;有全球所有的 Linux 開發者和自由軟件社區提供支持。

3.安全性

  • Windows 平台:三天兩頭打補丁安裝系統安全更新,還是會中病毒木馬;
  • Linux 平台:要說 Linux 沒有安全問題,那當然是不可能的,這一點仁者見仁智者見智,相對來說肯定比 Windows 平台要更加安全,使用 Linux 你也不用裝某殺毒,某毒霸。

4.使用習慣

  • Windows:普通用戶基本都是純圖形界面下操作使用,依靠鼠標和鍵盤完成一切操作,用戶上手容易入門簡單;
  • Linux:兼具圖形界面操作(需要使用帶有桌面環境的發行版)和完全的命令行操作,可以只用鍵盤完成一切操作,新手入門較困難,需要一些學習和指導(這正是我們要做的事情),一旦熟練之后效率極高。

5.可定制性

  • Windows:這些年之前算是全封閉的,系統可定制性很差;
  • Linux:你想怎么做就怎么做,Windows 能做到得它都能,Windows 做不到的,它也能。

6.應用范疇

或許你之前不知道 Linux ,要知道,你之前在 Windows 使用百度,谷歌,上淘寶,聊 QQ 時,支撐這些軟件和服務的,是后台成千上萬的 Linux 服務器主機,它們時時刻刻都在進行着忙碌的數據處理和運算,可以說世界上大部分軟件和服務都是運行在 Linux 之上的。

7.Windows 沒有的

  • 穩定的系統
  • 安全性和漏洞的快速修補
  • 多用戶
  • 用戶和用戶組的規划
  • 相對較少的系統資源占用
  • 可定制裁剪,移植到嵌入式平台(如安卓設備)
  • 可選擇的多種圖形用戶界面(如 GNOME,KDE)

8.Linux 沒有的

  • 沒有特定的支持廠商
  • 游戲娛樂支持度不足
  • 專業軟件支持度不足

 

 

 

 

 

 

學習路徑:

(三)、如何學習 Linux

1.學習心態

  • 明確目的:你是要用 Linux 來干什么,搭建服務器,做程序開發,還是日常辦公,還是娛樂游戲;

  • 面對現實:Linux 大都在命令行下操作,能否接受不用或少用圖形界面;

  • 是學習 Linux 操作系統本身還是某一個Linux發行版(Ubuntu,CentOS,Fedora,OpenSUSE,Debian,Mint 等等),如果你對發行版的概念或者它們之間的關系不明確的話可以參看Linux 發行版

2.注重基礎,從頭開始

第二節、基本概念及操作

一、實驗內容

1、實驗樓環境介紹 2、常用 Shell 命令及快捷鍵 3、Linux 使用小技巧

二、實驗步驟

 

(一)、Linux 桌面環境介紹

相對於現在的 Windows 系統,UNIX/Linux 本身是沒有圖形界面的,我們通常在 Unix/Linux 發行版上看到的圖形界面實際都只是運行在 Linux 系統之上的一套軟件,類似 Windows95 之前的Windows 的圖形界面實則也只是運行在 DOS 環境的一套軟件。而 Linux 上的這套軟件以前是XFree86,現在則是 xorg(X.Org),而這套軟件又是通過 X 窗口系統(X Window System,也常被稱為X11或X)實現的,X 本身只是工具包及架構協議,而 xorg 便是 X 架構規范的一個實現體,也就是說它是實現了 X 協議規范的一個提供圖形用戶界面服務的服務器,就像實現了 http 協議提供 web 服務的 Apache。如果只有服務器也是不能實現一個完整的桌面環境的,當然還需要一個客戶端,我們稱為 X Client,像如下幾個大家熟知也最流行的實現了客戶端功能的桌面環境KDEGNOMEXFCELXDE,其中就有你看到的,實驗樓目前使用的 XFCE 桌面環境,部分老用戶可能可以回想起,實驗樓之前使用的環境是 LXDE。這也意味着在 Linux 上你可以自己選擇安裝不同的桌面環境,甚至可以定制自己的專屬桌面

(二)、Linux終端

1.Terminal(終端)

通常在我們使用 Linux 時,我們並不是直接與系統打交道,而是通過一個叫做 Shell 的中間程序來完成的,在圖形界面下為了實現讓我們在一個窗口中完成接受用戶輸入和顯示輸出,Linux 系統還提供了一個叫做終端模擬器的程序(Terminal),下面幾個比較常見的終端模擬器,例如 gnome-terminal,kconsole,xterm,rxvt,kvt,nxterm 和 eterm,目前我們的實驗中的終端程序是 xfce 桌面環境自帶的 xfce-terminal。不過要注意的是這里所說的終端(Terminal)和控制台(Console)是有區別的。

2.Shell

通常在圖形界面中對實際體驗帶來差異的不是上述的不同發行版的各種終端模擬器,而大都是這個 Shell(殼),有殼就有核,這里的核就是指的 UNIX/Linux 內核,Shell 是指“提供給使用者使用界面”的軟件(命令解析器),類似於 DOS 下的 command(命令行)和后來的 cmd.exe。普通意義上的 Shell 就是可以接受用戶輸入命令的程序。它之所以被稱作 Shell 是因為它隱藏了操作系統底層的細節。同樣的 Unix/Linux 下的圖形用戶界面 GNOME 和 KDE,有時也被叫做“虛擬 shell”或“圖形 shell”。

Unix/Linux 操作系統下的 Shell 既是用戶交互的界面,也是控制系統的腳本語言。當然在這點也有別於 Windows 下的命令行,雖然也提供了很簡單的控制語句。在Windows 操作系統下,可能有些用戶從來都不會直接的使用 Shell,然而在 UNIX 系列操作系統下,Shell 仍然是控制系統啟動、X11 啟動和很多其他實用工具的腳本解釋程序。

在 UNIX/Linux 中比較流行的常見的 Shell 有 bash,zsh,ksh,csh 等等,Ubuntu 終端默認使用的是 bash,默認的桌面環境是 GNOME 或者 Unity(基於 GNOME),但我們的環境中使用的分別是zsh 和 xfce。

3.命令行操作體驗

雙擊桌面上的Xface終端圖標,打開終端,打開終端后會自動運行 Shell 程序,然后我們就可以輸入命令讓系統來執行了:

1).重要快捷鍵:

真正學習命令行之前,你先要掌握幾個十分有用,必需掌握的小技巧:

[Tab]

使用Tab鍵來進行命令補全,Tab鍵一般鍵盤是在字母Q旁邊,這個技巧給你帶來的最大的好處就是當你忘記某個命令的全稱時你可以只輸入它的開頭的一部分然后按下Tab鍵就可以得到提示或者幫助完成:

[Ctrl+c]

想想你有沒有遇到這種情況,當你在 Linux 命令行中無意輸入了一個不知道的命令,或者錯誤的使用了一個命令,導致在終端里出現了你無法預料的情況,比如,只有光標在閃爍無法繼續輸入命令,或者不停地在輸出一大堆你不想要的結果。你想要立即停止並恢復到你可控的狀態,那該怎么辦呢。這時候你就可以使用Ctrl+c鍵來強行終止當前程序(你可以放心它並不會使終端退出)。

2).學會利用歷史輸入命令

很簡單,你可以使用鍵盤上的方向鍵,恢復你之前輸入過的命令,你一試便知。

3).學會使用通配符

通配符是一種特殊語句,主要有星號(*)和問號(?),用來對對字符串進行模糊匹配(比如文件名,參數名)。當查找文件夾時,可以使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,常常使用通配符代替一個或多個真正的字符。

終端里面輸入的通配符是由 Shell 處理的,不是由所涉及到命令語句處理的,它只會出現在命令的“參數值”里(它不用在 命令名稱里, 命令不記得,那就用Tab補全)。當 Shell 在“參數值”中遇到了通配符時,Shell 會將其當作路徑或文件名去在磁盤上搜尋可能的匹配:若符合要求的匹配存在,則進行代換(路徑擴展);否則就將該通配符作為一個普通字符傳遞給“命令”,然后再由命令進行處理。總之,通配符 實際上就是一種 Shell 實現的路徑擴展功能。在 通配符被處理后, Shell 會先完成該命令的重組,然后再繼續處理重組后的命令,直至執行該命令。

先使用 touch 命令創建 2 個文件,后綴都為 txt:可以給文件隨意命名,假如過了很長時間,你已經忘了這兩個文件的文件名,現在你想在你大堆其他文件中找到這兩個文本文件,就可以使用通配符:

4).學會在命令行中獲取幫助

在 Linux 環境中,如果你遇到困難,可以使用man 命令,它是Manual page的縮寫。

Manual pages 是在 UNIX 或類 UNIX 操作系統在線軟件文檔的一種普遍的形式。 內容包括計算機程序(包括庫和系統調用),正式的標准和慣例,甚至是抽象的概念。用戶可以通過執行 man 命令調用手冊頁。

你可以使用如下方式來獲得某個命令的說明和使用方式的詳細介紹:

$ man <command_name>

比如你想查看 man 命令本身的使用方式,你可以輸入:

man man

通常情況下,man 手冊里面的內容都是英文的,這就要求你有一定的英文基礎。man 手冊的內容很多,涉及了 Linux 使用過程中的方方面面,為了便於查找,是做了分冊(分區段)處理的,在Research UNIX、BSD、OS X 和 Linux 中,手冊通常被分為8個區段,安排如下:

第三節、用戶及文件權限管理

一、實驗內容

1、Linux 中創建、刪除用戶,及用戶組等操作。 2、Linux 中的文件權限設置

二、實驗步驟

一、Linux 用戶管理

通過第一節課程的學習,你應該已經知道,Linux 是一個可以實現多用戶登陸的操作系統,比如“李雷”和“韓梅梅”都可以同時登陸同一台主機,他們共享一些主機的資源,但他們也分別有自己的用戶空間,用於存放各自的文件。但實際上他們的文件都是放在同一個物理磁盤上的甚至同一個邏輯分區或者目錄里,但是由於 Linux 的 用戶管理 和 權限機制 ,不同用戶不可以輕易地查看、修改彼此的文件。

1.查看用戶

請打開終端,輸入命令:

$ who am i

或者

$ who mom likes


輸入的第一列表示打開當前偽終端的用戶的用戶名(要查看當前登錄用戶的用戶名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示偽終端,所謂偽是相對於 /dev/tty 設備而言的,還記得上一節講終端時的那七個使用 [Ctrl]+[Alt]+[F1]~[F7] 進行切換的 /dev/tty 設備么,這是“真終端”,偽終端就是當你在圖形用戶界面使用 /dev/tty7 時每打開一個終端就會產生一個偽終端, pts/0 后面那個數字就表示打開的偽終端序號,你可以嘗試再打開一個終端,然后在里面輸入 who am i ,看第二列是不是就變成 pts/1 了,第三列則表示當前偽終端的啟動時間。

who 命令其它常用參數

3.用戶組

在 Linux 里面每個用戶都有一個歸屬(用戶組),用戶組簡單地理解就是一組用戶的集合,它們共享一些資源和權限,同時擁有私有資源,就跟家的形式差不多,你的兄弟姐妹(不同的用戶)屬於同一個家(用戶組),你們可以共同擁有這個家(共享資源),爸媽對待你們都一樣(共享權限),你偶爾寫寫日記,其他人未經允許不能查看(私有資源和權限)。當然一個用戶是可以屬於多個用戶組的,正如你既屬於家庭,又屬於學校或公司。

在 Linux 里面如何知道自己屬於哪些用戶組呢?

方法一:使用groups命令

$ groups shiyanlou

方法二:查看/etc/group文件

$ cat /etc/group | sort

這里 cat 命令用於讀取指定文件的內容並打印到終端輸出,后面會詳細講它的使用。 | sort 表示將讀取的文本進行一個字典排序再輸出,然后你將看到如下一堆輸出,你可以在最下面看到 shiyanlou 的用戶組信息:

 

etc/group 文件格式說明

/etc/group 的內容包括用戶組(Group)、用戶組口令、GID 及該用戶組所包含的用戶(User),每個用戶組一條記錄。格式如下:

group_name:password:GID:user_list

你看到上面的 password 字段為一個 'x' 並不是說密碼就是它,只是表示密碼不可見而已。

將其它用戶加入 sudo 用戶組

默認情況下新創建的用戶是不具有 root 權限的,也不在 sudo 用戶組,可以讓其加入sudo用戶組從而獲取 root 權限。

$ su -l lilei
$ sudo ls

會提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用戶組中,至於 sudoers 文件(/etc/sudoers)你現在最好不要動它,操作不慎會導致比較麻煩的后果。

使用 usermod 命令可以為用戶添加用戶組,同樣使用該命令你必需有 root 權限,你可以直接使用 root 用戶為其它用戶添加用戶組,或者用其它已經在 sudo 用戶組的用戶使用 sudo 命令獲取權限來執行該命令

這里我用 shiyanlou 用戶執行 sudo 命令將 lilei 添加到 sudo 用戶組,讓它也可以使用 sudo 命令獲得 root 權限

$ su shiyanlou
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei

然后你再切換會 lilei 用戶,現在就可以使用 sudo 獲取 root 權限了。

4.刪除用戶

刪除用戶是很簡單的事:

2.變更文件所有者

  • 文件類型

關於文件類型,這里有一點你必需時刻牢記Linux 里面一切皆文件,正因為這一點才有了設備文件( /dev 目錄下有各種設備文件,大都跟具體的硬件設備相關)這一說,還有 socket(網絡套接字,具體是什么,感興趣的用戶可以自己去了解或期待實驗樓的后續相關課程),和 pipe (管道,這個東西很重要,我們以后將會討論到,這里你先知道有它的存在即可)。軟鏈接文件,鏈接文件是分為兩種的,另一種當然是“硬鏈接”(硬鏈接不常用,具體內容不作為本課程討論重點,而軟鏈接等同於 Windows 上的快捷方式,你記住這一點就夠了)

  • 文件權限

讀權限,表示你可以使用 cat <file name> 之類的命令來讀取某個文件的內容;寫權限,表示你可以編輯和修改某個文件; 執行權限,通常指可以運行的二進制程序文件或者腳本文件,如同 Windows 上的 'exe' 后綴的文件,不過 Linux 上不是通過文件后綴名來區分文件的類型。你需要注意的一點是,一個目錄要同時具有讀權限和執行權限才可以打開,而一個目錄要有寫權限才允許在其中創建其它文件,這是因為目錄文件實際保存着該目錄里面的文件的列表等信息

所有者權限,這一點相信你應該明白了,至於所屬用戶組權限,是指你所在的用戶組中的所有其它用戶對於該文件的權限,比如,你有一個艾派德,那么這個用戶組權限就決定了你的兄弟姐妹有沒有權限使用它破壞它和占有它。

  • 鏈接數

鏈接到該文件所在的 inode 結點的文件名數目(關於這個概念涉及到 Linux 文件系統的相關概念知識,不在本課程的討論范圍,感興趣的用戶可以自己去了解)。

  • 文件大小

以 inode 結點大小為單位來表示的文件大小,你可以給 ls 加上 -lh 參數來更直觀的查看文件的大小。

明白了文件權限的一些概念,我們順帶補充一下關於 ls 命令的一些其它常用的用法:

  • 顯示除了 '.'(當前目錄),'..' 上一級目錄之外的所有包含隱藏文件(Linux 下以 '.' 開頭的文件為隱藏文件)

3.修改文件權限

如果你有一個自己的文件不想被其他用戶讀、寫、執行,那么就需要對文件的權限做修改。

第四節、Linux 目錄結構及文件基本操作

實驗介紹

1、Linux 的文件組織目錄結構。 2、相對路徑和絕對路徑。 3、對文件的移動、復制、重命名、編輯等操作。

一、Linux 目錄結構

在講 Linux 目錄結構之前,你首先要清楚一點東西,那就是 Linux 的目錄與 Windows 的目錄的區別,或許對於一般操作上的感受來說沒有多大不同,但從它們的實現機制來說是完全不同的。

 

1.FHS 標准

第一層是, / 下面的各個目錄應該要放什么文件數據,例如 /etc 應該要放置設置文件,/bin 與 /sbin 則應該要放置可執行文件等等。

第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如 /var/log 放置系統登錄文件、/usr/share 放置共享數據等等。

二、Linux 文件的基本操作

1.新建

新建空白文件

使用 touch 命令創建空白文件,關於 touch 命令,其主要是來更改已有文件的時間戳的(比如,最近訪問時間,最近修改時間),但其在不加任何參數的情況下,只指定一個文件名,則可以創建一個為指定文件名的空白文件

 

2.復制

復制文件

使用cp(copy)命令復制一個文件或目錄到指定目錄。將之前創建的"test"文件復制到"/home/shiyanlou/father/son/grandson"目錄中

 

3.刪除

刪除文件

使用rm(remove files or directories)命令,刪除一個文件或目錄

 

4.移動文件與文件重命名

移動文件

使用mv(move or rename files)命令,移動文件(剪切)。將文件"file1"移動到"Documents"目錄mv 源目錄文件 目的目錄

 

5.查看文件

使用cat,tacnl命令查看文件

這兩個命令都是用來打印文件內容到標准輸出(終端),其中cat為正序顯示,tac倒序顯示。

標准輸入輸出:當我們執行一個 shell 命令行時通常會自動打開三個標准文件,即標准輸入文件(stdin),默認對應終端的鍵盤;標准輸出文件(stdout)和標准錯誤輸出文件(stderr),這兩個文件都對應被重定向到終端的屏幕,以便我們能直接看到輸出內容。進程將從標准輸入文件中得到輸入數據,將正常輸出數據輸出到標准輸出文件,而將錯誤信息送到標准錯誤文件中。

6.查看文件類型

通常使用file命令可以查看文件的類型

7.編輯文件

在 Linux 下面編輯文件通常我們會直接使用專門的命令行編輯器比如(emacs,vim,nano),由於涉及 Linux 上的編輯器的內容比較多,且非常重要,故我們有一門單獨的基礎課專門介紹這其中一個編輯器(vim)。在這里強烈希望正在學習這門 Linux 基礎課的你先在這里暫停一下,先去學習vim 編輯器的使用(至少掌握基本的操作)然后再繼續本課程后面的內容,因為后面的內容會假設你已經學會了 vim 編輯器的使用。如果你想更加快速的入門,你可以直接使用 Linux 內部的 vim 學習教程

第五節、環境變量與文件查找

一、實驗內容

環境變量的作用與用法,及幾種搜索文件的方法。學會這些技巧高效地使用 Linux。

二、實驗步驟

1.變量

要解釋環境變量,得先明白變量是什么,准確的說應該是 Shell 變量,所謂變量就是計算機中用於記錄一個值(不一定是數值,也可以是字符或字符串)的符號,而這些符號將用於不同的運算處理中。通常變量與值是一對一的關系,可以通過表達式讀取它的值賦值給其它變量,也可以直接指定數值賦值給任意變量。為了便於運算和處理,大部分的編程語言會區分變量的類型,用於分別記錄數值、字符或者字符串等等數據類型。Shell 中的變量也基本如此,有不同類型(但不用專門指定類型名),可以參與運算,有作用域限定。

使用declare命令創建一個變量名為 tmp 的變量:

2.環境變量

簡單理解了變量的概念,就很好解釋環境變量了,環境變量就是作用域比自定義變量要大,如Shell 的環境變量作用於自身和它的子進程。在所有的 UNIX 和類 UNIX 系統中,每個進程都有其各自的環境變量設置,且默認情況下,當一個進程被創建時,處理創建過程中明確指定的話,它將繼承其父進程的絕大部分環境設置。Shell 程序也作為一個進程運行在操作系統之上,而我們在 Shell中運行的大部分命令都將以 Shell 的子進程的方式運行。

通常我們會涉及到的環境變量有三種:

  • 當前 Shell 進程私有用戶自定義變量,如上面我們創建的 temp 變量,只在當前 Shell 中有效。
  • Shell 本身內建的變量。
  • 從自定義變量導出的環境變量。

關於環境變量,可以簡單的理解成在當前進程的子進程是否有效,有效則為環境變量,否則不是(有些人也將所有變量統稱為環境變量,只是以全局環境變量和局部環境變量進行區分,我們只要理解它們的實質區別即可)。我們這里用export命令來體會一下,先在 Shell 中設置一個變量temp=shiyanlou,然后再新創建一個子 Shell 查看temp變量的值:

3.命令的查找路徑與順序

你可能很早之前就有疑問,我們在 Shell 中輸入一個命令,Shell 是怎么知道在哪去找到這個命令然后執行的呢?這是通過環境變量PATH來進行搜索的,熟悉 Windows 的用戶可能知道 Windows 中的也是有這么一個 PATH 環境變量。這個PATH里面就保存了Shell中執行的命令的搜索路徑。

4.添加自定義路徑到“PATH”環境變量

一定要使用絕對路徑

現在你就可以在其他任意目錄執行那兩個命令了。你可能會意識到這樣還並沒有很好的解決問題,因為我給 PATH 環境變量追加了一個路徑,它也只是在當前 Shell 有效,我一旦退出終端,再打開就會發現又失效了。有沒有方法讓添加的環境變量全局有效?或者每次啟動 Shell 時自動執行上面添加自定義路徑到 PATH 的命令?下面我們就來說說后一種方式——讓它自動執行。

在每個用戶的 home 目錄中有一個 Shell 每次啟動時會默認執行一個配置腳本,以初始化環境,包括添加一些用戶自定義環境變量等等。zsh 的配置文件是.zshrc,相應 Bash 的配置文件為.bashrc。它們在etc下還都有一個或多個全局的配置文件,不過我們一般只修改用戶目錄下的配置文件。

 

二、搜索文件

與搜索相關的命令常用的有如下幾個whereis,which,find,locate

  • whereis簡單快速
  • locate快而全
  • 通過"/var/lib/mlocate/mlocate.db"數據庫查找,不過這個數據庫也不是實時更新的,系統會使用定時任務每天自動執行updatedb命令更新一次,所以有時候你剛添加的文件,它可能會找不到,需要手動執行一次updatedb命令(在我們的環境中必須先執行一次該命令)。它可以用來查找指定目錄下的不同文件類型,如查找 /etc 下所有以 sh 開頭的文件:

  • which小而精

    which本身是 Shell 內建的一個命令,我們通常使用which來確定是否安裝了某個指定的軟件,因為它只從PATH環境變量指定的路徑中去搜索命令:

     

 

第六節、文件打包與壓縮

一、實驗內容

Linux 上常用的 壓縮/解壓 工具,介紹了 zip,rar,tar 的使用。

二、實驗步驟

一、文件打包和解壓縮

在講 Linux 上的解壓縮工具之前,有必要先了解以下常見常用的壓縮包文件格式。在 Windows 上我們最常見的不外乎這三種*.zip,*.rar,*.7z后綴的壓縮文件,而在 Linux 上面常見常用的除了以上這三種外,還有*.gz,*.xz,*.bz2,*.tar,*.tar.gz,*.tar.xz,*tar.bz2,簡單介紹如下:

文件后綴名 說明
*.zip zip程序打包壓縮的文件
*.rar rar程序壓縮的文件
*.7z 7zip程序壓縮的文件
*.tar tar程序打包,未壓縮的文件
*.gz gzip程序(GNU zip)壓縮的文件
*.xz xz程序壓縮的文件
*.bz2 bzip2程序壓縮的文件
*.tar.gz tar打包,gzip程序壓縮的文件
*.tar.xz tar打包,xz程序壓縮的文件
*tar.bz2 tar打包,bzip2程序壓縮的文件
*.tar.7z tar打包,7z程序壓縮的文件

講了這么多種壓縮文件,這么多個命令,不過我們一般只需要掌握幾個命令即可,包括zip,rar,tar。下面會依次介紹這幾個命令及對應的解壓命令。

 

2.使用unzip命令解壓縮zip文件

shiyanlou.zip解壓到當前目錄:

$ unzip shiyanlou.zip

使用安靜模式,將文件解壓到指定目錄:

 

3.rar打包壓縮命令

rar也是 Windows 上常用的一種壓縮文件格式,在 Linux 上可以使用rarunrar工具分別創建和解壓 rar 壓縮包。

 

4.tar打包工具

在 Linux 上面更常用的是tar工具,tar 原本只是一個打包工具,只是同時還是實現了對 7z,gzip,xz,bzip2 等工具的支持,這些壓縮工具本身只能實現對文件或目錄(單獨壓縮目錄中的文件)的壓縮,沒有實現對文件的打包壓縮,所以我們也無需再單獨去學習其他幾個工具,tar 的解壓和壓縮都是同一個命令,只需參數不同,使用比較方便。

第七節、文件系統操作與磁盤管理

一、實驗內容

本節實驗的文件系統操作的內容十分簡單,只會包含幾個命令的幾個參數的講解,但掌握這些也將對你在學習 Linux 和實驗樓后續其他課程的過程中有極大幫助。

因為本課程的定位為入門基礎,盡快上手,故沒有打算涉及太多理論內容,前面省略了關於 Linux 文件系統的一些基本知識,也因為我們是在線實驗環境,所以也避開了很少一部分但又十分重要的關於硬件的內容,我們只能期待用戶能夠抱着提高自學能力的心態自己去補充相關的知識。

一、簡單文件系統操作

1.查看磁盤和目錄的容量

使用 df 命令查看磁盤的容量

 

一般使用情況下,我們更多只是關心第一行的內容也就是環境中的rootfs或者物理主機上的/dev/sda2

 

接着你還會看到"1k-blocks"這個陌生的東西,它表示以磁盤塊大小的方式顯示容量,后面為相應的以塊大小表示的已用和可用容量,在你了解 Linux 的文件系統之前這個就先不管吧,我們以一種你應該看得懂的方式展示:

二、簡單的磁盤管理

1.創建虛擬磁盤

dd 命令簡介(部分說明來自dd (Unix) wiki))

dd命令用於轉換和復制文件,不過它的復制不同於cp。之前提到過關於 Linux 的很重要的一點,一切即文件,在 Linux 上,硬件的設備驅動(如硬盤)和特殊設備文件(如/dev/zero/dev/random)都像普通文件一樣,只要在各自的驅動程序中實現了對應的功能,dd 也可以讀取自和/或寫入到這些文件。這樣,dd也可以用在備份硬件的引導扇區、獲取一定數量的隨機數據或者空數據等任務中。dd程序也可以在復制時處理數據,例如轉換字節序、或在 ASCII 與 EBCDIC 編碼間互換。

dd的命令行語句與其他的 Linux 程序不同,因為它的命令行選項格式為選項=值,而不是更標准的--選項 值-選項=值dd默認從標准輸入中讀取,並寫入到標准輸出中,但可以用選項if(input file,輸入文件)和of(output file,輸出文件)改變。

我們先來試試用dd命令從標准輸入讀入用戶輸入到標准輸出或者一個文件:

使用 mkfs 命令格式化磁盤(我們這里是自己創建的虛擬磁盤鏡像)

你可以在命令行輸入 mkfs 然后按下Tab鍵,你可以看到很多個以 mkfs 為前綴的命令,這些不同的后綴其實就是表示着不同的文件系統,可以用 mkfs 格式化成的文件系統

 

使用 mount 命令掛載磁盤到目錄樹

用戶在 Linux/UNIX 的機器上打開一個文件以前,包含該文件的文件系統必須先進行掛載的動作,此時用戶要對該文件系統執行 mount 的指令以進行掛載。通常是使用在 USB 或其他可移除存儲設備上,而根目錄則需要始終保持掛載的狀態。又因為 Linux/UNIX 文件系統可以對應一個文件而不一定要是硬件設備,所以可以掛載一個包含文件系統的文件到目錄樹。

Linux/UNIX 命令行的 mount 指令是告訴操作系統,對應的文件系統已經准備好,可以使用了,而該文件系統會對應到一個特定的點(稱為掛載點)。掛載好的文件、目錄、設備以及特殊文件即可提供用戶使用。

我們先來使用mount來查看下主機已經掛載的文件系統:

第八節、命令執行順序控制與管道

一、實驗內容

順序執行、選擇執行、管道、cut 命令、grep 命令、wc 命令、sort 命令等,高效率使用 Linux 的技巧。

二、實驗步驟

一、命令執行順序的控制

1.順序執行多條命令

通常情況下,我們每次只能在終端輸入一條命令,按下回車執行,執行完成后,我們再輸入第二條命令,然后再按回車執行…… 你可能會遇到如下使用場景:我需要使用apt-get安裝一個軟件,然后安裝完成后立即運行安裝的軟件(或命令工具),又恰巧你的主機才更換的軟件源還沒有更新軟件列表(比如之前我們的環境中,每次重新開始實驗就得sudo apt-get update,現在已經沒有這個問題了),那么你可能會有如下一系列操作:

二、管道

管道是什么,管道是一種通信機制,通常用於進程間的通信(也可通過socket進行網絡通信),它表現出來的形式就是將前面每一個進程的輸出(stdout)直接作為下一個進程的輸入(stdin)。

管道又分為匿名管道和具名管道(這里將不會討論在源程序中使用系統調用創建並使用管道的情況,它與命令行的管道在內核中實際都是采用相同的機制)。我們在使用一些過濾程序時經常會用到的就是匿名管道,在命令行中由|分隔符表示,|在前面的內容中我們已經多次使用到了。具名管道簡單的說就是有名字的管道,通常只會在源程序中用到具名管道。下面我們就將通過一些常用的可以使用管道的"過濾程序"來幫助你熟練管道的使用。

1.試用

先試用一下管道

2,grep 命令,在文本中或 stdin 中查找匹配字符串

grep命令是很強大的,也是相當常用的一個命令,它結合正則表達式可以實現很復雜卻很高效的匹配和查找,不過在學習正則表達式之前,這里介紹它簡單的使用,而關於正則表達式后面將會有單獨一小節介紹到時會再繼續學習grep命令和其他一些命令。

grep命令的一般形式為:

4. wc 命令,簡單小巧的計數工具

wc 命令用於統計並輸出一個文件中行、單詞和字節的數目,比如輸出/etc/passwd文件的統計信息:

 

5.sort 排序命令

這個命令前面我們也是用過多次,功能很簡單就是將輸入按照一定方式排序,然后再輸出,它支持的排序有按字典排序,數字排序,按月份排序,隨機排序,反轉排序,指定特定字段進行排序等等

 

6. uniq 去重命令

uniq命令可以用於過濾或者輸出重復行。

 

簡單的文本處理

一、實驗內容

這一節我們將介紹這幾個命令tr(注意不是tar),coljoinpaste。實際這一節是上一節關於能實現管道操作的命令的延續,所以我們依然將結合管道來熟悉這些命令的使用。

 

1.tr 命令

tr 命令可以用來刪除一段文本信息中的某些文字。或者將其進行轉換。

第十節、數據流重定向

一、實驗內容

你可能對重定向這個概念感到些許陌生,但你應該在前面的課程中多次見過>>>操作了,並知道他們分別是將標准輸出導向一個文件或追加到一個文件中。這其實就是重定向,將原本輸出到標准輸出的數據重定向到一個文件中,因為標准輸出(/dev/stdout)本身也是一個文件,我們將命令輸出導向另一個文件自然也是沒有任何問題的。

一、數據流重定向

1.簡單的重定向

在更多了解 Linux 的重定向之前,我們需要先知道一些基本的東西,前面我們已經提到過 Linux 默認提供了三個特殊設備,用於終端的顯示和輸出,分別為stdin(標准輸入,對應於你在終端的輸入),stdout(標准輸出,對應於終端的輸出),stderr(標准錯誤輸出,對應於終端的輸出)。

文件描述符 設備文件 說明
0 /dev/stdin 標准輸入
1 /dev/stdout 標准輸出
2 /dev/stderr 標准錯誤

文件描述符:文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於 UNIX、Linux 這樣的操作系統。

 

2.標准錯誤重定向

重定向標准輸出到文件,這是一個很實用的操作,另一個很實用的操作是將標准錯誤重定向,標准輸出和標准錯誤都被指向偽終端的屏幕顯示,所以我們經常看到的一個命令的輸出通常是同時包含了標准輸出和標准錯誤的結果的。

3.使用tee命令同時重定向到多個文件

經常你可能還有這樣的需求,除了將需要將輸出重定向到文件之外也需要將信息打印在終端,那么你可以使用tee命令來實現:

 

4.永久重定向

你應該可以看出我們前面的重定向操作都只是臨時性的,即只對當前命令有效,那如何做到“永久”有效呢,比如在一個腳本中,你需要某一部分的命令的輸出全部進行重定向,難道要讓你在每個命令上面加上臨時重定向的操作嘛,當然不需要,我們可以使用exec命令實現“永久”重定向。exec命令的作用是使用指定的命令替換當前的 Shell,及使用一個進程替換當前進程,或者指定新的重定向:

 

5.創建輸出文件描述符

默認在 Shell 中可以有9個打開的文件描述符,上面我們使用了也是它默認提供的0,1,2號文件描述符,另外我們還可以使用3-8的文件描述符,只是它們默認沒有打開而已,你可以使用下面命令查看當前 Shell 進程中打開的文件描述符:

 

6.關閉文件描述符

如上面我們打開的3號文件描述符,可以使用如下操作將它關閉:

 

7.完全屏蔽命令的輸出

在 Linux 中有一個被成為“黑洞”的設備文件,所以導入它的數據都將被“吞噬”。

在類 UNIX 系統中,/dev/null,或稱空設備,是一個特殊的設備文件,它通常被用於丟棄不需要的輸出流,或作為用於輸入流的空文件,這些操作通常由重定向完成。讀取它則會立即得到一個EOF。

 

8.使用 xargs 分割參數列表

xargs 是一條 UNIX 和類 UNIX 操作系統的常用命令。它的作用是將參數列表轉換成小塊分段傳遞給其他命令,以避免參數列表過長的問題。

 

使用方式:

tr [option]...SET1 [SET2]

 

 

正則表達式基礎

一、正則表達式

正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫為 regex、regexp 或 RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。

 

許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在 Perl 中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由 UNIX 中的工具軟件(例如sed和grep)普及開的。正則表達式通常縮寫成“regex”,單數有 regexp、regex,復數有 regexps、regexes、regexen。

 

2.基本語法:

選擇  |豎直分隔符表示選擇,例如"boy|girl"可以匹配"boy"或者"girl"

數量限定

數量限定除了我們舉例用的*,還有+加號,?問號,.點號,如果在一個模式中不加數量限定符則表示出現一次且僅出現一次:

+表示前面的字符必須出現至少一次(1次或多次),例如,"goo+gle",可以匹配"gooogle","goooogle"等;

?表示前面的字符最多出現一次(0次或1次),例如,"colou?r",可以匹配"color"或者"colour";

*星號代表前面的字符可以不出現,也可以出現一次或者多次(0次、或1次、或多次),例如,“0*42”可以匹配42、042、0042、00042等。

范圍和優先級

 

()圓括號可以用來定義模式字符串的范圍和優先級,這可以簡單的理解為是否將括號內的模式串作為一個整體。例如,"gr(a|e)y"等價於"gray|grey",(這里體現了優先級,豎直分隔符用於選擇a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(這里體驗了范圍,?將圓括號內容作為一個整體匹配)。

     

優先級

優先級為從上到下從左到右,依次降低:

grep模式匹配命令

2.使用正則表達式

使用基本正則表達式,BRE

 

使用擴展正則表達式,ERE

要通過grep使用擴展正則表達式需要加上-E參數,或使用egrep。

sed 流編輯器

 

sed工具在 man 手冊里面的全名為"sed - stream editor for filtering and transforming text ",意即,用於過濾和轉換文本的流編輯器。

 

在 Linux/UNIX 的世界里敢稱為編輯器的工具,大都非等閑之輩,比如前面的"vi/vim(編輯器之神)","emacs(神的編輯器)","gedit"這些個編輯器。

sed 命令基本格式:

sed [參數]... [執行命令] [輸入文件]...

# 形如:$ sed -i '1s/sad/happy/' test # 表示將test文件中第一行的"sad"替換為"happy"

sed編輯器的執行命令(這里”執行“解釋為名詞)

sed執行命令格式:[n1][,n2]command

[n1][~step]command

# 其中一些命令可以在后面加上作用范圍,形如:$ sed -i 's/sad/happy/g' test # g表示全局范圍  $ sed -i 's/sad/happy/4' test # 4表示指定行中的第四個匹配字符串

 

sed操作舉例$ cp /etc/passwd ~

打印指定行

# 打印2-5行

$ nl passwd | sed -n '2,5p'

# 打印奇數行

$ nl passwd | sed -n '1~2p'

 

 

四、awk文本處理語言

1.AWK是一種優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一.其名稱得自於它的創始人Alfred Aho(阿爾佛雷德·艾侯)、Peter Jay Weinberger(彼得·溫伯格)和Brian Wilson Kernighan(布萊恩·柯林漢)姓氏的首個字母.AWK程序設計語言,三位創建者已將它正式定義為“樣式掃描和處理語言”。它允許您創建簡短的程序,這些程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其他的功能。最簡單地說,AWK是一種用於處理文本的編程語言工具。

2.awk的一些基礎概念

awk所有的操作都是基於pattern(模式)—action(動作)對來完成的。awk處理文本的方式,是將文本分割成一些“字段”,然后再對這些字段進行處理,默認情況下,awk以空格作為一個字段的分割符,不過這不是固定了,你可以任意指定分隔符,下面將告訴你如何做到這一點。

3.awk命令基本格式:awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]

4.awk操作體驗:print打印的非變量內容都需要用""一對引號包圍起來。

5.awk常用的內置變量

Linux 上的軟件安裝

apt 包管理工具介紹

APT是Advance Packaging Tool(高級包裝工具)的縮寫,是Debian及其派生發行版的軟件包管理器,APT可以自動下載,配置,安裝二進制或者源代碼格式的軟件包,因此簡化了Unix系統上管理軟件的過程。

3.apt-get

apt-get使用各用於處理apt包的公用程序集,我們可以用它來在線安裝、卸載和升級軟件包等,下面列出一些apt-get包含的常用的一些工具:

4.安裝軟件包

apt-get install <軟件包名>

重新安裝:$ sudo apt-get --reinstall install <軟件包名>

5.軟件升級

# 更新軟件源$ sudo apt-get update

# 升級沒有依賴問題的軟件包$ sudo apt-get upgrade

# 升級並解決依賴關系$ sudo apt-get dist-upgrade

 

6.卸載軟件

sudo apt-get remove<軟件包名>

7.軟件搜索

sudo apt-cache search softname1 softname2 softname3……

 

三、使用 dpkg 從本地磁盤安裝 deb 軟件包

我們經常可以在網絡上簡單以deb形式打包的軟件包,就需要使用dpkg命令來安裝。

dpkg常用參數介紹:


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com