第一節,linux系統簡介css
1、實驗內容html
瞭解 Linux 的歷史,Linux 與 Windows 的區別等入門知識。前端
2、實驗要求node
閱讀linux簡介與歷史python
3、實驗步驟linux
Linux 也就是系統調用和內核那兩層,固然直觀的來看,咱們使用的操做系統還包含一些在其上運行的應用程序,好比文本編輯器,瀏覽器,電子郵件。nginx
1.免費與收費web
最新正版 Windows8.1 官方售價 ¥888;正則表達式
Linux 免費或少量費用shell
2. 軟件與支持
或許你以前不知道 Linux ,要知道,你以前在 Windows 使用百度,谷歌,上淘寶,聊 QQ 時,支撐這些軟件和服務的,是後臺成千上萬的 Linux 服務器主機,它們時時刻刻都在進行着忙碌的數據處理和運算,能夠說世界上大部分軟件和服務都是運行在 Linux 之上的。
明確目的:你是要用 Linux 來幹什麼,搭建服務器,作程序開發,仍是平常辦公,仍是娛樂遊戲;
面對現實:Linux 大都在命令行下操做,可否接受不用或少用圖形界面;
是學習 Linux 操做系統自己仍是某一個Linux發行版(Ubuntu,CentOS,Fedora,OpenSUSE,Debian,Mint 等等),若是你對發行版的概念或者它們之間的關係不明確的話能夠參看Linux 發行版。
第二節、基本概念及操做
1、實驗內容
一、實驗樓環境介紹 二、經常使用 Shell 命令及快捷鍵 三、Linux 使用小技巧
2、實驗步驟
相對於如今的 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,像以下幾個你們熟知也最流行的實現了客戶端功能的桌面環境KDE,GNOME,XFCE,LXDE,其中就有你看到的,實驗樓目前使用的 XFCE 桌面環境,部分老用戶可能能夠回想起,實驗樓以前使用的環境是 LXDE。這也意味着在 Linux 上你能夠本身選擇安裝不一樣的桌面環境,甚至能夠定製本身的專屬桌面
一般在咱們使用 Linux 時,咱們並非直接與系統打交道,而是經過一個叫作 Shell 的中間程序來完成的,在圖形界面下爲了實現讓咱們在一個窗口中完成接受用戶輸入和顯示輸出,Linux 系統還提供了一個叫作終端模擬器的程序(Terminal),下面幾個比較常見的終端模擬器,例如 gnome-terminal,kconsole,xterm,rxvt,kvt,nxterm 和 eterm,目前咱們的實驗中的終端程序是 xfce 桌面環境自帶的 xfce-terminal。不過要注意的是這裏所說的終端(Terminal)和控制檯(Console)是有區別的。
一般在圖形界面中對實際體驗帶來差別的不是上述的不一樣發行版的各類終端模擬器,而大都是這個 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。
雙擊桌面上的Xface終端
圖標,打開終端,打開終端後會自動運行 Shell 程序,而後咱們就能夠輸入命令讓系統來執行了:
真正學習命令行以前,你先要掌握幾個十分有用,必需掌握的小技巧:
使用Tab
鍵來進行命令補全,Tab
鍵通常鍵盤是在字母Q
旁邊,這個技巧給你帶來的最大的好處就是當你忘記某個命令的全稱時你能夠只輸入它的開頭的一部分而後按下Tab
鍵就能夠獲得提示或者幫助完成:
想一想你有沒有遇到這種狀況,當你在 Linux 命令行中無心輸入了一個不知道的命令,或者錯誤的使用了一個命令,致使在終端裏出現了你沒法預料的狀況,好比,只有光標在閃爍沒法繼續輸入命令,或者不停地在輸出一大堆你不想要的結果。你想要當即中止並恢復到你可控的狀態,那該怎麼辦呢。這時候你就能夠使用Ctrl+c
鍵來強行終止當前程序(你能夠放心它並不會使終端退出)。
按鍵 | 做用 |
---|---|
Ctrl+d |
鍵盤輸入結束或退出終端 |
Ctrl+s |
暫定當前程序,暫停後按下任意鍵恢復運行 |
Ctrl+z |
將當前程序放到後臺運行,恢復到前臺爲命令fg |
Ctrl+a |
將光標移至輸入行頭,至關於Home 鍵 |
Ctrl+e |
將光標移至輸入行末,至關於End 鍵 |
Ctrl+k |
刪除從光標所在位置到行末 |
Alt+Backspace |
向前刪除一個單詞 |
Shift+PgUp |
將終端顯示向上滾動 |
Shift+PgDn |
將終端顯示向下滾動 |
很簡單,你能夠使用鍵盤上的方向上
鍵,恢復你以前輸入過的命令,你一試便知。
通配符是一種特殊語句,主要有星號(*)和問號(?),用來對對字符串進行模糊匹配(好比文件名,參數名)。當查找文件夾時,能夠使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正的字符。
終端裏面輸入的通配符是由 Shell 處理的,不是由所涉及到命令語句處理的,它只會出如今命令的「參數值」裏(它不用在 命令名稱裏, 命令不記得,那就用Tab
補全)。當 Shell 在「參數值」中遇到了通配符時,Shell 會將其看成路徑或文件名去在磁盤上搜尋可能的匹配:若符合要求的匹配存在,則進行代換(路徑擴展);不然就將該通配符做爲一個普通字符傳遞給「命令」,而後再由命令進行處理。總之,通配符 實際上就是一種 Shell 實現的路徑擴展功能。在 通配符被處理後, Shell 會先完成該命令的重組,而後再繼續處理重組後的命令,直至執行該命令。
先使用 touch 命令建立 2 個文件,後綴都爲 txt:能夠給文件隨意命名,假如過了很長時間,你已經忘了這兩個文件的文件名,如今你想在你大堆其餘文件中找到這兩個文本文件,就能夠使用通配符:
Shell 經常使用通配符:
字符 | 含義 |
---|---|
* |
匹配 0 或多個字符 |
? |
匹配任意一個字符 |
[list] |
匹配 list 中的任意單一字符 |
[!list] |
匹配 除list 中的任意單一字符之外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
{c2..c2} |
匹配 c1-c2 中所有字符 如{1..10} |
在 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 | 通常命令 |
2 | 系統調用 |
3 | 庫函數,涵蓋了C標準函數庫 |
4 | 特殊文件(一般是/dev中的設備)和驅動程序 |
5 | 文件格式和約定 |
6 | 遊戲和屏保 |
7 | 雜項 |
8 | 系統管理命令和守護進程 |
要查看相應區段的內容,就在 man 後面加上相應區段的數字便可,如:
$ man 3 printf
全部的手冊頁遵循一個常見的佈局,其爲經過簡單的 ASCII 文本展現而優化,而這種狀況下可能沒有任何形式的高亮或字體控制。通常包括如下部份內容:
NAME(名稱)
該命令或函數的名稱,接着是一行簡介。
SYNOPSIS(概要)
對於命令,正式的描述它如何運行,以及須要什麼樣的命令行參數。對於函數,介紹函數所需的參數,以及哪一個頭文件包含該函數的定義。
DESCRIPTION(說明)
命令或函數功能的文本描述。
EXAMPLES(示例)
經常使用的一些示例。
SEE ALSO(參見)
相關命令或函數的列表。
也可能存在其餘部份內容,但這些部分沒有獲得跨手冊頁的標準化。常見的例子包括:OPTIONS(選項),EXIT STATUS(退出狀態),ENVIRONMENT(環境),BUGS(程序漏洞),FILES(文件),AUTHOR(做者),REPORTING BUGS(已知漏洞),HISTORY(歷史)和COPYRIGHT(版權)。
一般 man 手冊中的內容不少,你可能不太容易找到你想要的結果,不過幸運的是你能夠在 man 中使用搜索,/<你要搜索的關鍵字>
,查找到後你能夠使用n
鍵切換到下一個關鍵字所在處,shift+n
爲上一個關鍵字所在處。使用Space
(空格鍵)翻頁,Enter
(回車鍵)向下滾動一行,或者使用j
,k
(vim編輯器的移動鍵)進行向前向後滾動一行。按下h
鍵爲顯示使用幫助(由於man使用less做爲閱讀器,實爲less
工具的幫助),按下q
退出。
想要得到更詳細的幫助,你還能夠使用info
命令,不過一般使用man
就足夠了。若是你知道某個命令的做用,只是想快速查看一些它的某個具體參數的做用,那麼你能夠使用--help
參數,大部分命令都會帶有這個參數,如:
(三)做業截圖
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
$ ls --help
1、實驗內容
一、Linux 中建立、刪除用戶,及用戶組等操做。 二、Linux 中的文件權限設置
2、實驗步驟
經過第一節課程的學習,你應該已經知道,Linux 是一個能夠實現多用戶登錄的操做系統,好比「李雷」和「韓梅梅」均可以同時登錄同一臺主機,他們共享一些主機的資源,但他們也分別有本身的用戶空間,用於存放各自的文件。但實際上他們的文件都是放在同一個物理磁盤上的甚至同一個邏輯分區或者目錄裏,可是因爲 Linux 的 用戶管理 和 權限機制 ,不一樣用戶不能夠輕易地查看、修改彼此的文件。
請打開終端,輸入命令:
$ 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
命令其它經常使用參數
參數 | 說明 |
---|---|
-a |
打印能打印的所有 |
-d |
打印死掉的進程 |
-m |
同am i ,mom likes |
-q |
打印當前登陸用戶數及用戶名 |
-u |
打印當前登陸用戶登陸信息 |
-r |
打印運行等級 |
在 Linux 系統裏, root
帳戶擁有整個系統至高無上的權利,好比 新建/添加 用戶。
root 權限,系統權限的一種,與 SYSTEM 權限能夠理解成一個概念,但高於 Administrator 權限,root 是 Linux 和 UNIX 系統中的超級管理員用戶賬戶,該賬戶擁有整個系統至高無上的權力,全部對象他均可以操做,因此不少黑客在入侵系統的時候,都要把權限提高到 root 權限,用 Windows 的方法理解也就是將本身的非法賬戶添加到 Administrators 用戶組。更好比安卓操做系統中(基於 Linux 內核)得到 root 權限以後就意味着已經得到了手機的最高權限,這時候你能夠對手機中的任何文件(包括系統文件)執行全部增、刪、改、查的操做。
咱們通常登陸系統時都是以普通帳戶的身份登陸的,要建立用戶須要 root 權限,這裏就要用到 sudo
這個命令了。不過使用這個命令有兩個大前提,一是你要知道當前登陸用戶的密碼,二是當前用戶必須在 sudo
用戶組。shiyanlou 用戶的密碼就是 「shiyanlou」 ,它同時也屬於 sudo 用戶組(稍後會介紹如何查看和添加用戶組)。如今咱們新建一個叫 lilei 的用戶:
$ sudo adduser lilei
按照提示輸入 shiyanlou 密碼(Linux 下密碼輸入一般都是不可見的),而後是給 lilei 用戶設置密碼,後面的選項的一些內容你能夠選擇直接回車使用默認值:
在 Linux 裏面每一個用戶都有一個歸屬(用戶組),用戶組簡單地理解就是一組用戶的集合,它們共享一些資源和權限,同時擁有私有資源,就跟家的形式差很少,你的兄弟姐妹(不一樣的用戶)屬於同一個家(用戶組),大家能夠共同擁有這個家(共享資源),爸媽對待大家都同樣(共享權限),你偶爾寫寫日記,其餘人未經容許不能查看(私有資源和權限)。固然一個用戶是能夠屬於多個用戶組的,正如你既屬於家庭,又屬於學校或公司。
在 Linux 裏面如何知道本身屬於哪些用戶組呢?
$ groups shiyanlou
其中冒號以前表示用戶,後面表示該用戶所屬的用戶組。這裏能夠看到 shiyanlou 用戶同時屬於 shiyanlou 和 sudo 用戶組,每次新建用戶若是不指定用戶組的話,默認會自動建立一個與用戶名相同的用戶組(差很少就至關於家長的意思,或者說是老總)。默認狀況下在sudo用戶組裏的能夠使用sudo命令得到root權限。
/etc/group
文件$ cat /etc/group | sort
這裏 cat
命令用於讀取指定文件的內容並打印到終端輸出,後面會詳細講它的使用。 | sort
表示將讀取的文本進行一個字典排序再輸出,而後你將看到以下一堆輸出,你能夠在最下面看到 shiyanlou 的用戶組信息:
etc/group
文件格式說明/etc/group 的內容包括用戶組(Group)、用戶組口令、GID 及該用戶組所包含的用戶(User),每一個用戶組一條記錄。格式以下:
group_name:password:GID:user_list
你看到上面的 password 字段爲一個 'x' 並非說密碼就是它,只是表示密碼不可見而已。
默認狀況下新建立的用戶是不具備 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 權限了。
刪除用戶是很簡單的事:
咱們以前已經不少次用到 ls
命令了,如你所見,咱們用它來列出並顯示當前目錄下的文件,固然這是在不帶任何參數的狀況下,它能作的固然不止這麼多,如今咱們就要用它來查看文件權限。
使用較長格式列出文件:
你可能除了知道最後面那一項是文件名以外,其它項就不太清楚了,那麼究竟是什麼意思呢:
可能你仍是不太明白,好比第一項文件類型和權限那一堆東西具體指什麼,連接又是什麼,何爲最後修改時間,下面一一道來:
關於文件類型,這裏有一點你必需時刻牢記Linux 裏面一切皆文件,正由於這一點纔有了設備文件( /dev
目錄下有各類設備文件,大都跟具體的硬件設備相關)這一說,還有 socket
(網絡套接字,具體是什麼,感興趣的用戶能夠本身去了解或期待實驗樓的後續相關課程),和 pipe
(管道,這個東西很重要,咱們之後將會討論到,這裏你先知道有它的存在便可)。軟連接文件,連接文件是分爲兩種的,另外一種固然是「硬連接」(硬連接不經常使用,具體內容不做爲本課程討論重點,而軟連接等同於 Windows 上的快捷方式,你記住這一點就夠了)
讀權限,表示你能夠使用 cat <file name>
之類的命令來讀取某個文件的內容;寫權限,表示你能夠編輯和修改某個文件; 執行權限,一般指能夠運行的二進制程序文件或者腳本文件,如同 Windows 上的 'exe' 後綴的文件,不過 Linux 上不是經過文件後綴名來區分文件的類型。你須要注意的一點是,一個目錄要同時具備讀權限和執行權限才能夠打開,而一個目錄要有寫權限才容許在其中建立其它文件,這是由於目錄文件實際保存着該目錄裏面的文件的列表等信息
全部者權限,這一點相信你應該明白了,至於所屬用戶組權限,是指你所在的用戶組中的全部其它用戶對於該文件的權限,好比,你有一個艾派德,那麼這個用戶組權限就決定了你的兄弟姐妹有沒有權限使用它破壞它和佔有它。
連接到該文件所在的 inode 結點的文件名數目(關於這個概念涉及到 Linux 文件系統的相關概念知識,不在本課程的討論範圍,感興趣的用戶能夠本身去了解)。
以 inode 結點大小爲單位來表示的文件大小,你能夠給 ls 加上
-lh
參數來更直觀的查看文件的大小。
明白了文件權限的一些概念,咱們順帶補充一下關於 ls
命令的一些其它經常使用的用法:
若是你有一個本身的文件不想被其餘用戶讀、寫、執行,那麼就須要對文件的權限作修改。
一、Linux 的文件組織目錄結構。 二、相對路徑和絕對路徑。 三、對文件的移動、複製、重命名、編輯等操做。
在講 Linux 目錄結構以前,你首先要清楚一點東西,那就是 Linux 的目錄與 Windows 的目錄的區別,或許對於通常操做上的感覺來講沒有多大不一樣,但從它們的實現機制來講是徹底不一樣的。
第一層是, / 下面的各個目錄應該要放什麼文件數據,例如 /etc 應該要放置設置文件,/bin 與 /sbin 則應該要放置可執行文件等等。
第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如 /var/log 放置系統登陸文件、/usr/share 放置共享數據等等。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
使用 touch
命令建立空白文件,關於 touch
命令,其主要是來更改已有文件的時間戳的(好比,最近訪問時間,最近修改時間),但其在不加任何參數的狀況下,只指定一個文件名,則能夠建立一個爲指定文件名的空白文件
使用cp
(copy)命令複製一個文件或目錄到指定目錄。將以前建立的"test"文件複製到"/home/shiyanlou/father/son/grandson"目錄中
使用rm
(remove files or directories)命令,刪除一個文件或目錄
使用mv
(move or rename files)命令,移動文件(剪切)。將文件"file1"移動到"Documents"目錄mv 源目錄文件 目的目錄
:
cat
,tac
和nl
命令查看文件這兩個命令都是用來打印文件內容到標準輸出(終端),其中cat
爲正序顯示,tac
倒序顯示。
標準輸入輸出:當咱們執行一個 shell 命令行時一般會自動打開三個標準文件,即標準輸入文件(stdin),默認對應終端的鍵盤;標準輸出文件(stdout)和標準錯誤輸出文件(stderr),這兩個文件都對應被重定向到終端的屏幕,以便咱們能直接看到輸出內容。進程將從標準輸入文件中獲得輸入數據,將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。
6.查看文件類型
一般使用
file
命令能夠查看文件的類型7.編輯文件
在 Linux 下面編輯文件一般咱們會直接使用專門的命令行編輯器好比(emacs,vim,nano),因爲涉及 Linux 上的編輯器的內容比較多,且很是重要,故咱們有一門單獨的基礎課專門介紹這其中一個編輯器(vim)。在這裏強烈但願正在學習這門 Linux 基礎課的你先在這裏暫停一下,先去學習vim 編輯器的使用(至少掌握基本的操做)而後再繼續本課程後面的內容,由於後面的內容會假設你已經學會了 vim 編輯器的使用。若是你想更加快速的入門,你能夠直接使用 Linux 內部的 vim 學習教程
第五節、環境變量與文件查找
1、實驗內容
環境變量的做用與用法,及幾種搜索文件的方法。學會這些技巧高效地使用 Linux。
2、實驗步驟
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
下還都有一個或多個全局的配置文件,不過咱們通常只修改用戶目錄下的配置文件。
2、搜索文件
與搜索相關的命令經常使用的有以下幾個
whereis
,which
,find
,locate
。
whereis
簡單快速
locate
快而全經過"/var/lib/mlocate/mlocate.db"數據庫查找,不過這個數據庫也不是實時更新的,系統會使用定時任務天天自動執行
updatedb
命令更新一次,因此有時候你剛添加的文件,它可能會找不到,須要手動執行一次updatedb
命令(在咱們的環境中必須先執行一次該命令)。它能夠用來查找指定目錄下的不一樣文件類型,如查找 /etc 下全部以 sh 開頭的文件:
which
小而精
which
自己是 Shell 內建的一個命令,咱們一般使用which
來肯定是否安裝了某個指定的軟件,由於它只從PATH
環境變量指定的路徑中去搜索命令:
注意 find 命令的路徑是做爲第一個參數的, 基本命令格式爲 find [path] [option] [action]
與時間相關的命令參數:
參數 說明 -atime
最後訪問時間 -ctime
建立時間 -mtime
最後修改時間 下面以
-mtime
參數舉例:
-mtime n
: n 爲數字,表示爲在n天以前的」一天以內「修改過的文件-mtime +n
: 列出在n天以前(不包含n天自己)被修改過的文件-mtime -n
: 列出在n天以前(包含n天自己)被修改過的文件newer file
: file爲一個已存在的文件,列出比file還要新的文件名
第六節、文件打包與壓縮
1、實驗內容
Linux 上經常使用的 壓縮/解壓 工具,介紹了 zip,rar,tar 的使用。
2、實驗步驟
1、文件打包和解壓縮
在講 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
。下面會依次介紹這幾個命令及對應的解壓命令。
1.
zip
壓縮打包程序
- 使用zip打包文件夾:
2.使用
unzip
命令解壓縮zip文件將
shiyanlou.zip
解壓到當前目錄:$ unzip shiyanlou.zip
使用安靜模式,將文件解壓到指定目錄:
3.
rar
打包壓縮命令
rar
也是 Windows 上經常使用的一種壓縮文件格式,在 Linux 上能夠使用rar
和unrar
工具分別建立和解壓 rar 壓縮包。
4.
tar
打包工具在 Linux 上面更經常使用的是
tar
工具,tar 本來只是一個打包工具,只是同時仍是實現了對 7z,gzip,xz,bzip2 等工具的支持,這些壓縮工具自己只能實現對文件或目錄(單獨壓縮目錄中的文件)的壓縮,沒有實現對文件的打包壓縮,因此咱們也無需再單獨去學習其餘幾個工具,tar 的解壓和壓縮都是同一個命令,只需參數不一樣,使用比較方便。做業
第七節、文件系統操做與磁盤管理
1、實驗內容
本節實驗的文件系統操做的內容十分簡單,只會包含幾個命令的幾個參數的講解,但掌握這些也將對你在學習 Linux 和實驗樓後續其餘課程的過程當中有極大幫助。
由於本課程的定位爲入門基礎,儘快上手,故沒有打算涉及太多理論內容,前面省略了關於 Linux 文件系統的一些基本知識,也由於咱們是在線實驗環境,因此也避開了不多一部分但又十分重要的關於硬件的內容,咱們只能期待用戶可以抱着提升自學能力的心態本身去補充相關的知識。
1、簡單文件系統操做
1.查看磁盤和目錄的容量
使用 df 命令查看磁盤的容量
通常使用狀況下,咱們更多隻是關心第一行的內容也就是環境中的
rootfs
或者物理主機上的/dev/sda2
接着你還會看到"1k-blocks"這個陌生的東西,它表示以磁盤塊大小的方式顯示容量,後面爲相應的以塊大小表示的已用和可用容量,在你瞭解 Linux 的文件系統以前這個就先無論吧,咱們以一種你應該看得懂的方式展現:
使用 du 命令查看目錄的容量
2、簡單的磁盤管理
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
命令從標準輸入讀入用戶輸入到標準輸出或者一個文件:
使用 dd 命令建立虛擬鏡像文件
經過上面一小節,你應該掌握了
dd
的基本使用,下面就來使用dd
命令來完成建立虛擬磁盤的第一步。從
/dev/zero
設備建立一個容量爲 256M 的空文件:
使用 mkfs 命令格式化磁盤(咱們這裏是本身建立的虛擬磁盤鏡像)
你能夠在命令行輸入 mkfs 而後按下
Tab
鍵,你能夠看到不少個以 mkfs 爲前綴的命令,這些不一樣的後綴其實就是表示着不一樣的文件系統,能夠用 mkfs 格式化成的文件系統
使用 mount 命令掛載磁盤到目錄樹
用戶在 Linux/UNIX 的機器上打開一個文件之前,包含該文件的文件系統必須先進行掛載的動做,此時用戶要對該文件系統執行 mount 的指令以進行掛載。一般是使用在 USB 或其餘可移除存儲設備上,而根目錄則須要始終保持掛載的狀態。又由於 Linux/UNIX 文件系統能夠對應一個文件而不必定要是硬件設備,因此能夠掛載一個包含文件系統的文件到目錄樹。
Linux/UNIX 命令行的 mount 指令是告訴操做系統,對應的文件系統已經準備好,能夠使用了,而該文件系統會對應到一個特定的點(稱爲掛載點)。掛載好的文件、目錄、設備以及特殊文件便可提供用戶使用。
咱們先來使用
mount
來查看下主機已經掛載的文件系統:
使用 fdisk 爲磁盤分區(關於分區的一些概念不清楚的用戶請參看主引導記錄)
一樣由於環境緣由中沒有物理磁盤,也沒法建立虛擬磁盤的緣由咱們就沒法實驗練習使用該命令了,下面我將以個人物理主機爲例講解如何爲磁盤分區。
做業
cowsay
命令,可讓你在終端裏以一種動物說話的形式打印出一段話。
第八節、命令執行順序控制與管道
1、實驗內容
順序執行、選擇執行、管道、cut 命令、grep 命令、wc 命令、sort 命令等,高效率使用 Linux 的技巧。
2、實驗步驟
1、命令執行順序的控制
1.順序執行多條命令
一般狀況下,咱們每次只能在終端輸入一條命令,按下回車執行,執行完成後,咱們再輸入第二條命令,而後再按回車執行…… 你可能會遇到以下使用場景:我須要使用
apt-get
安裝一個軟件,而後安裝完成後當即運行安裝的軟件(或命令工具),又恰巧你的主機才更換的軟件源尚未更新軟件列表(好比以前咱們的環境中,每次從新開始實驗就得sudo apt-get update,如今已經沒有這個問題了),那麼你可能會有以下一系列操做:
2.有選擇的執行命令
關於上面的操做,不知你有沒有思考過一個問題,若是咱們在讓它自動順序執行命令時,前面的命令執行不成功,然後面的命令又依賴與上一條命令的結果,那麼就會形成花了時間,最終卻獲得一個錯誤的結果,並且有時候直觀的看你還沒法判斷結果是否正確。那麼咱們須要可以有選擇性的來執行命令,好比上一條命令執行成功才繼續下一條,或者不成功又該作出其它什麼處理,好比咱們使用
which
來查找是否安裝某個命令,若是找到就執行該命令,不然什麼也不作(雖然這個操做沒有什麼實際意義,但可幫你更好的理解一些概念):
2、管道
管道是什麼,管道是一種通訊機制,一般用於進程間的通訊(也可經過socket進行網絡通訊),它表現出來的形式就是將前面每個進程的輸出(stdout)直接做爲下一個進程的輸入(stdin)。
管道又分爲匿名管道和具名管道(這裏將不會討論在源程序中使用系統調用建立並使用管道的狀況,它與命令行的管道在內核中實際都是採用相同的機制)。咱們在使用一些過濾程序時常常會用到的就是匿名管道,在命令行中由
|
分隔符表示,|
在前面的內容中咱們已經屢次使用到了。具名管道簡單的說就是有名字的管道,一般只會在源程序中用到具名管道。下面咱們就將經過一些經常使用的能夠使用管道的"過濾程序"來幫助你熟練管道的使用。1.試用
先試用一下管道
2,grep 命令,在文本中或 stdin 中查找匹配字符串
grep
命令是很強大的,也是至關經常使用的一個命令,它結合正則表達式能夠實現很複雜卻很高效的匹配和查找,不過在學習正則表達式以前,這裏介紹它簡單的使用,而關於正則表達式後面將會有單獨一小節介紹到時會再繼續學習grep
命令和其餘一些命令。
grep
命令的通常形式爲:
4. wc 命令,簡單小巧的計數工具
wc 命令用於統計並輸出一個文件中行、單詞和字節的數目,好比輸出
/etc/passwd
文件的統計信息:
5.sort 排序命令
這個命令前面咱們也是用過屢次,功能很簡單就是將輸入按照必定方式排序,而後再輸出,它支持的排序有按字典排序,數字排序,按月份排序,隨機排序,反轉排序,指定特定字段進行排序等等
6. uniq 去重命令
uniq
命令能夠用於過濾或者輸出重複行。
簡單的文本處理
1、實驗內容
這一節咱們將介紹這幾個命令
tr
(注意不是tar),col
,join
,paste
。實際這一節是上一節關於能實現管道操做的命令的延續,因此咱們依然將結合管道來熟悉這些命令的使用。
1.tr 命令
tr 命令能夠用來刪除一段文本信息中的某些文字。或者將其進行轉換。
使用方式:
tr [option]...SET1 [SET2]
經常使用的選項有:
選項 說明 -d
刪除和set1匹配的字符,注意不是全詞匹配也不是按字符順序匹配 -s
去除set1指定的在輸入文本中連續並重復的字符
2.col 命令
col 命令能夠將
Tab
換成對等數量的空格建,或反轉這個操做。
3.join命令
學過數據庫的用戶對這個應該不會陌生,這個命令就是用於將兩個文件中包含相同內容的那一行合併在一塊兒。
4.paste命令
paste
這個命令與join
命令相似,它是在不對比數據的狀況下,簡單地將多個文件合併一塊兒,以Tab
隔開
3、小結
上面這些命令不是全部你都會常常用到,不過它們確是很實用的,熟練掌握以後,能夠減輕不少工做量,好比不停的用鼠標操做在 gedit 裏面複製粘貼賦值粘貼,將兩個文件的內容合併爲一個文件,這本來只須要一個命令就能完成。
4、做業
第十節、數據流重定向
1、實驗內容
你可能對重定向這個概念感到些許陌生,但你應該在前面的課程中屢次見過
>
或>>
操做了,並知道他們分別是將標準輸出導向一個文件或追加到一個文件中。這其實就是重定向,將本來輸出到標準輸出的數據重定向到一個文件中,由於標準輸出(/dev/stdout
)自己也是一個文件,咱們將命令輸出導向另外一個文件天然也是沒有任何問題的。1、數據流重定向
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 操做系統的經常使用命令。它的做用是將參數列表轉換成小塊分段傳遞給其餘命令,以免參數列表過長的問題。
做業
第十一節、正則表達式基礎
1、實驗內容
雖然咱們這一節的標題是正則表達式,但實際這一節實驗只是介紹
grep
,sed
,awk
這三個命令,而正則表達式做爲這三個命令的一種使用方式(命令輸出中能夠包含正則表達式)。正則表達式自己的內容不少,要把它說明清楚須要單獨一門課程來實現,不過咱們這一節中涉及到的相關內容一般也可以知足不少狀況下的需求了。想要更深刻地學習使用正則表達式,在這裏 正則表達式基礎。
1、正則表達式
正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫爲 regex、regexp 或 RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。
2.基本語法:
一個正則表達式一般被稱爲一個模式(pattern),爲用來描述或者匹配一系列符合某個句法規則的字符串。
選擇
|
豎直分隔符表示選擇,例如"boy|girl"能夠匹配"boy"或者"girl"數量限定
數量限定除了咱們舉例用的
*
,還有+
加號,?
問號,.
點號,若是在一個模式中不加數量限定符則表示出現一次且僅出現一次:
+
表示前面的字符必須出現至少一次(1次或屢次),例如,"goo+gle",能夠匹配"gooogle","goooogle"等;?
表示前面的字符最多出現一次(0次或1次),例如,"colou?r",能夠匹配"color"或者"colour";*
星號表明前面的字符能夠不出現,也能夠出現一次或者屢次(0次、或1次、或屢次),例如,「0*42」能夠匹配4二、04二、004二、00042等。範圍和優先級
()
圓括號能夠用來定義模式字符串的範圍和優先級,這能夠簡單的理解爲是否將括號內的模式串做爲一個總體。例如,"gr(a|e)y"等價於"gray|grey",(這裏體現了優先級,豎直分隔符用於選擇a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(這裏體驗了範圍,?
將圓括號內容做爲一個總體匹配)。語法(部分)
正則表達式有多種不一樣的風格,下面列舉一些經常使用的做爲 PCRE 子集的適用於
perl
和python
編程語言及grep
或egrep
的正則表達式匹配規則:(因爲markdown表格解析的問題,下面的豎直分隔符用全角字符代替,實際使用時請換回半角字符)PCRE(Perl Compatible Regular Expressions中文含義:perl語言兼容正則表達式)是一個用 C 語言編寫的正則表達式函數庫,由菲利普.海澤(Philip Hazel)編寫。PCRE是一個輕量級的函數庫,比Boost 之類的正則表達式庫小得多。PCRE 十分易用,同時功能也很強大,性能超過了 POSIX 正則表達式庫和一些經典的正則表達式庫。
字符 描述 \ 將下一個字符標記爲一個特殊字符、或一個原義字符。例如,「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」範圍內的任意字符。 優先級
優先級爲從上到下從左到右,依次下降:
運算符 說明 \ 轉義符 (), (?:), (?=), [] 括號和中括號 *、+、?、{n}、{n,}、{n,m} 限定符 ^、$、\任何元字符 定位點和序列 | 選擇 更多正則表達式的內容能夠參考如下連接:
regex的思導圖:
2、grep模式匹配命令
上面空談了那麼多正則表達式的內容也並無說起具體該如何使用它,實在枯燥,若是說正則表達式是一門武功話,那它也只能算得上一些口訣招式罷了,要把它真正練起來還得須要一些兵器在手才行,這裏咱們要介紹的
grep
命令以及後面要講的sed
,awk
這些就該算做是這樣的兵器了。1.基本操做
grep
命令用於打印輸出文本中匹配的模式串,它使用正則表達式做爲模式匹配的條件。grep
支持三種正則表達式引擎,分別用三個參數指定:
參數 說明 -E
POSIX擴展正則表達式,ERE -G
POSIX基本正則表達式,BRE -P
Perl正則表達式,PCRE 不過在你沒學過perl語言的大多數狀況下你將只會使用到
ERE
和BRE
,因此咱們接下來的內容都不會討論到PCRE中特有的一些正則表達式語法(它們之間大部份內容是存在交集的,因此你不用擔憂會遺漏多少重要內容)在經過
grep
命令使用正則表達式以前,先介紹一下它的經常使用參數:
參數 說明 -b
將二進制文件做爲文原本進行匹配 -c
統計以模式匹配的數目 -i
忽略大小寫 -n
顯示匹配文本所在行的行號 -v
反選,輸出不匹配行的內容 -r
遞歸匹配查找 -A n
n爲正整數,表示after的意思,除了列出匹配行以外,還列出後面的n行 -B n
n爲正整數,表示before的意思,除了列出匹配行以外,還列出前面的n行 --color=auto
將輸出中的匹配項設置爲自動顏色顯示 注:在大多數發行版中是默認設置了grep的顏色的,你能夠經過參數指定或修改
GREP_COLOR
環境變量。
2.使用正則表達式
使用基本正則表達式,BRE
- 位置
查找
/etc/group
文件中以"shiyanlou"爲開頭的行三、使用擴展正則表達式,ERE
要經過
grep
使用擴展正則表達式須要加上-E
參數,或使用egrep
。
3、sed 流編輯器
sed
工具在 man 手冊裏面的全名爲"sed - stream editor for filtering and transforming text ",意即,用於過濾和轉換文本的流編輯器。在 Linux/UNIX 的世界裏敢稱爲編輯器的工具,大都非等閒之輩,好比前面的"vi/vim(編輯器之神)","emacs(神的編輯器)","gedit"這些個編輯器。
sed
與上述的最大不一樣之處大於它是一個非交互式的編輯器,下面咱們就開始介紹sed
這個編輯器。sed經常使用參數介紹
4、awk文本處理語言
看到上面的標題,你可能會感到驚異,難道咱們這裏要學習的是一門「語言」麼,確切的說,咱們是要在這裏學習
awk
文本處理語言,只是咱們並不會在這裏學習到比較完整的關於awk
的內容,仍是由於前面的緣由,它太強大了,它的應用無處不在,咱們沒法在這裏以簡短的文字描述面面俱到,若是你有目標成爲一個linux系統管理員,確實想學好awk
,你一不用擔憂,實驗樓會在以後陸續上線linux系統管理員的學習路徑,裏面會有單獨的關於正則表達式
,awk
,sed
等相關課程,敬請期待吧。下面的內容,咱們就做爲一個關於awk
的入門體驗章節吧,其中會介紹一些awk
的經常使用操做。
2.awk的一些基礎概念
awk全部的操做都是基於pattern(模式)—action(動做)對來完成的,以下面的形式:
$ pattern {action}
你能夠看到就如同不少編程語言同樣,它將全部的動做操做用一對
{}
花括號包圍起來。其中pattern一般是是表示用於匹配輸入的文本的「關係式」或「正則表達式」,action則是表示匹配後將執行的動做。在一個完整awk操做中,這二者能夠只有其中一個,若是沒有pattern則默認匹配輸入的所有文本,若是沒有action則默認爲打印匹配內容到屏幕。
awk
處理文本的方式,是將文本分割成一些「字段」,而後再對這些字段進行處理,默認狀況下,awk以空格做爲一個字段的分割符,不過這不是固定了,你能夠任意指定分隔符,下面將告訴你如何作到這一點。3.awk命令基本格式
awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]
其中
-F
參數用於預先指定前面提到的字段分隔符(還有其餘指定字段的方式) ,-v
用於預先爲awk
程序指定變量,-f
參數用於指定awk
命令要執行的程序文件,或者在不加-f
參數的狀況下直接將程序語句放在這裏,最後爲awk
須要處理的文本輸入,且能夠同時輸入多個文本文件。
6.awk經常使用的內置變量
變量名 說明 FILENAME
當前輸入文件名,如有多個文件,則只表示第一個。若是輸入是來自標準輸入,則爲空字符串 $0
當前記錄的內容 $N
N表示字段號,最大值爲 NF
變量的值FS
字段分隔符,由正則表達式表示,默認爲" "空格 RS
輸入記錄分隔符,默認爲"\n",即一行爲一個記錄 NF
當前記錄字段數 NR
已經讀入的記錄數 FNR
當前輸入文件的記錄數,請注意它與NR的區別 OFS
輸出字段分隔符,默認爲" "空格 ORS
輸出記錄分隔符,默認爲"\n"
第十二節、Linux 下軟件安裝
實驗內容
介紹 Ubuntu 下軟件安裝的幾種方式,及 apt,dpkg 工具的使用。
1、Linux 上的軟件安裝
一般 Linux 上的軟件安裝主要有三種方式:
- 在線安裝
- 從磁盤安裝deb軟件包
- 從二進制軟件包安裝
- 從源代碼編譯安裝
這幾種安裝方式各有優劣,而大多數軟件包會採用多種方式發佈軟件,因此咱們經常須要所有掌握這幾種軟件安裝方式,以便適應各類環境。下面將介紹前三種安裝方式,從源碼編譯安裝你將在 Linux 程序設計中學習到。
2、在線安裝
試想一下,平時咱們在使用 Windows 的時候,想要安裝一個軟件,咱們須要在網上去下載對應軟件的安裝包,接着安裝的時候就是不斷的去點擊下一步,這些流程想必你們已經經歷的無數回了,可是在 Linux 下,一個命令加回車,等待一下,軟件就安裝好了,這就是方便的在線安裝軟件的方式。在學習這種安裝方式以前有一點須要說明的是,在不一樣的linux發行版上面在線安裝方式會有一些差別包括使用的命令及它們的包管理工具,由於咱們的開發環境是基於ubuntu的,因此這裏咱們涉及的在線安裝方式將只適用於ubuntu發行版,或其它基於ubuntu的發行版如國內的ubuntukylin(優麒麟),ubuntu又是基於debian的發行版,它使用的是debian的包管理工具dpkg,因此一些操做也適用與debian。而在其它一些採用其它包管理工具的發行版如redhat,centos,fedora等將不適用(redhat和centos使用rpm)。
2. apt 包管理工具介紹
APT是Advance Packaging Tool(高級包裝工具)的縮寫,是Debian及其派生髮行版的軟件包管理器,APT能夠自動下載,配置,安裝二進制或者源代碼格式的軟件包,所以簡化了Unix系統上管理軟件的過程。APT最先被設計成dpkg的前端,用來處理deb格式的軟件包。如今通過APT-RPM組織修改,APT已經能夠安裝在支持RPM的系統管理RPM包。這個包管理器包含以
apt-
開頭的的多個工具,如apt-get
apt-cache
apt-cdrom
等,在Debian系列的發行版中使用。當你在執行安裝操做時,首先
apt-get
工具會在本地的一個數據庫中搜索關於w3m
軟件的相關信息,並根據這些信息在相關的服務器上下載軟件安裝,這裏你們可能會一個疑問:既然是在線安裝軟件,爲啥會在本地的數據庫中搜索?要解釋這個問題就得提到幾個名詞了:
- 軟件源鏡像服務器
- 軟件源
咱們須要按期從服務器上下載一個軟件包列表,使用
sudo apt-get update
命令來保持本地的軟件包列表是最新的(有時你也須要手動執行這個操做,好比更換了軟件源),而這個表裏會有軟件依賴信息的記錄,對於軟件依賴,我舉個例子:咱們安裝w3m
軟件的時候,而這個軟件須要libgc1c2
這個軟件包才能正常工做,這個時候apt-get
在安裝軟件的時候會一併替咱們安裝了,以保證w3m
能正常的工做。3.apt-get
apt-get
使用各用於處理apt
包的公用程序集,咱們能夠用它來在線安裝、卸載和升級軟件包等,下面列出一些apt-get
包含的經常使用的一些工具:
工具 說明 install
其後加上軟件包名,用於安裝一個軟件包 update
從軟件源鏡像服務器上下載/更新用於更新本地軟件源的軟件包列表 upgrade
升級本地可更新的所有軟件包,但存在依賴問題時將不會升級,一般會在更新以前執行一次 update
dist-upgrade
解決依賴關係並升級(存在必定危險性) remove
移除已安裝的軟件包,包括與被移除軟件包有依賴關係的軟件包,但不包含軟件包的配置文件 autoremove
移除以前被其餘軟件包依賴,但如今再也不被使用的軟件包 purge
與remove相同,但會徹底移除軟件包,包含其配置文件 clean
移除下載到本地的已經安裝的軟件包,默認保存在/var/cache/apt/archives/ autoclean
移除已安裝的軟件的舊版本軟件包 下面是一些
apt-get
經常使用的參數:
參數 說明 -y
自動迴應是否安裝軟件包的選項,在一些自動化安裝腳本中使用這個參數將十分有用 -s
模擬安裝 -q
靜默安裝方式,指定多個 q
或者-q=#
,#表示數字,用於設定靜默級別,這在你不想要在安裝軟件包時屏幕輸出過多時頗有用-f
修復損壞的依賴關係 -d
只下載不安裝 --reinstall
從新安裝已經安裝但可能存在問題的軟件包 --install-suggests
同時安裝APT給出的建議安裝的軟件包 4.安裝軟件包
關於安裝,如前面演示的同樣你只須要執行
apt-get install <軟件包名>
便可,除了這一點,你還應該掌握的是如何從新安裝軟件包。 不少時候咱們須要從新安裝一個軟件包,好比你的系統被破壞,或者一些錯誤的配置致使軟件沒法正常工做。你能夠使用以下方式從新安裝:
$ sudo apt-get --reinstall install w3m
另外一個你須要掌握的是,如何在不知道軟件包完整名的時候進行安裝。一般咱們是使用
Tab
鍵補全軟件包名,後面會介紹更好的方法來搜索軟件包。有時候你須要同時安裝多個軟件包,你還能夠使用正則表達式匹配軟件包名進行批量安裝。5.軟件升級
# 更新軟件源 $ sudo apt-get update # 升級沒有依賴問題的軟件包 $ sudo apt-get upgrade # 升級並解決依賴關係 $ sudo apt-get dist-upgrade
6.卸載軟件
若是你如今以爲
w3m
這個軟件不合本身的胃口,或者是找到了更好的,你須要卸載它,那麼簡單!一樣是一個命令加回車sudo apt-get remove w3m
,系統會有一個確認的操做,以後這個軟件便「滾蛋7.軟件搜索
當本身剛知道了一個軟件,想下載使用,須要確認軟件倉庫裏面有沒有,就須要用到搜索功能了,命令以下:
sudo apt-cache search softname1 softname2 softname3……
apt-cache
命令則是針對本地數據進行相關操做的工具,search
顧名思義在本地的數據庫中尋找有關softname1
softname2
…… 相關軟件的信息。如今咱們試試搜索一下以前咱們安裝的軟件w3m
,3、使用 dpkg 從本地磁盤安裝 deb 軟件包
1.dpkg 介紹
dpkg 是 Debian 軟件包管理器的基礎,它被伊恩·默多克建立於 1993 年。dpkg 與 RPM 十分類似,一樣被用於安裝、卸載和供給和 .deb 軟件包相關的信息。
dpkg 自己是一個底層的工具。上層的工具,像是 APT,被用於從遠程獲取軟件包以及處理複雜的軟件包關係。"dpkg"是"Debian Package"的簡寫。
咱們常常能夠在網絡上簡單以
deb
形式打包的軟件包,就須要使用dpkg
命令來安裝。
dpkg
經常使用參數介紹:
參數 說明 -i
安裝指定deb包 -R
後面加上目錄名,用於安裝該目錄下的全部deb安裝包 -r
remove,移除某個已安裝的軟件包 -I
顯示 deb
包文件的信息-s
顯示已安裝軟件的信息 -S
搜索已安裝的軟件包 -L
顯示已安裝軟件包的目錄信息 2.使用dpkg安裝deb軟件包
咱們先使用
apt-get
加上-d
參數只下載不安裝,下載emacs編輯器的deb包,下載完成後,咱們能夠查看/var/cache/apt/archives/目錄下的內容,以下圖:而後咱們將第一個
deb
拷貝到home目錄下,並使用dpkg
安裝$ cp /var/cache/apt/archives/emacs24_24.3+1-4ubuntu1_amd64.deb ~ # 安裝以前參看deb包的信息 $ sudo dpkg -I emacs24_24.3+1-4ubuntu1_amd64.deb
如你所見,這個包還額外依賴了一些軟件包,這意味着,若是主機目前沒有這些被依賴的軟件包,直接使用dpkg安裝可能會存在一些問題,由於
dpkg
並不能爲你解決依賴關係。# 使用dpkg安裝 $ sudo dpkg -i emacs24_24.3+1-4ubuntu1_amd64.deb
跟前面預料的同樣,這裏你可能出現了一些錯誤:
咱們將如何解決這個錯誤了,這就要用到
apt-get
了,使用它的-f
參數了,修復依賴關係的安裝$ sudo apt-get -f install
沒有任何錯誤,這樣咱們就安裝成功了,而後你能夠運行emacs程序
3.查看已安裝軟件包的安裝目錄
若是你依然在糾結到底linux將軟件安裝到了什麼地方,那麼很幸運你將能夠經過
dpkg
找到答案使用
dpkg -L
查看deb
包目錄信息4、從二進制包安裝
二進制包的安裝比較簡單,咱們須要作的只是將從網絡上下載的二進制包解壓後放到合適的目錄,而後將包含可執行的主程序文件的目錄添加進
PATH
環境變量便可,若是你不知道該放到什麼位置,請從新複習第四節關於 Linux 目錄結構的內容。
總結:
實驗中遇到的問題:
在這個實驗中沒法打開軟件包,從新輸入屢次也未能解決。
實驗感悟:
本次實驗是本個學期對linux學習的第一個課程,讓咱們有效的掌握了linux基礎的知識。在實驗過程當中雖然遇到了許多問題,例如實驗樓掉線,代碼敲擊錯誤,沒法實現預約的項目,可是在本身的不停鑽研和同窗的幫助下順利地完成了本次學習。也體會到了linux的神奇之處,也大體掌握了linux的學習基礎知識,但願在將來的日子裏,可以更好地運用linux在咱們的平常生活和學習中。也但願在將來的日子裏更好的學習更多知識。