第二週

第二週(9.14-9.20):
 

學習計時:共xxx小時linux

讀書:web

代碼:正則表達式

做業:shell

博客:數據庫

1、學習目標編程

1. 可以獨立安裝Linux操做系統  
2. 可以熟練使用Linux系統的基本命令  
3. 熟練使用Linux中用戶管理命令/系統相關命令/文件目錄相關命令/打包壓縮相關命令/比較合併相關命令/網絡相關命令等
4. 熟練應用「搜索」進行觸類旁通的學習
 

2、學習資源vim

1. 課程資料:https://www.shiyanlou.com/courses/413   實驗一,課程邀請碼:W7FQKW4Y安全

2. Linux 基礎入門:https://www.shiyanlou.com/courses/1(重點,第一次課考覈內容所有從這裏面出)bash

3.  Linux命令:en   cn服務器

3、學習方法

1.  進度很重要:必須跟上每週的進度,閱讀,練習,問答,項目。我會認真對待每一位同窗,請你不要由於困難半途而廢。

2. 問答很重要:遇到知識難點請多多提問,這是你的權利更是您對本身負責的義務。問答到博客園討論小組:http://group.cnblogs.com/103791/
3. 實踐很重要:解決書中習題,實踐書中實例,完成每週項目,纔算真的消化了這本好書。經過實驗樓環境或本身安裝的虛擬機在實踐中進行學習
4. 實驗報告很重要:詳細記錄你完成項目任務的思路,得到老師點評和幫助本身複習。學習完成後在博客園中(http://www.cnblogs.com/)把學習過程經過博客發表,博客標題「信息安全系統設計基礎第一週學習總結」

4、學習任務

(提示:請將要求學生完成的任務、測驗或思考題列在此處)

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等

3. 測試示例:

  • 請在虛擬機中安裝DDD軟件(其餘軟件)
  • 請演示怎麼判斷DDD軟件能不能安裝
  • 請查找系統中50M以上的文件
  • 請查找系統中兩天前修改過的且小於5M的文件
  • 請問如何查找操做系統的信息
  • 請查找當前目錄下全部*.c文件中哪一個文件中包含main函數
  • 請創建一個目錄,裏面創建兩個子文目錄,如何一條命令刪除三個目錄?
  • 如何把一個目錄及子目錄拷貝到本身的主目錄中
  • ...

 

、後續學習預告(可選):

Linux下C語言編程基礎:
VIM進行編輯
GCC進行編譯
GDB進行調試
Make進行自動化

、學習過程

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終端

inux 默認提供了 6 個純命令行界面的 「terminal」(準確的說這裏應該是 6 個 virtual consoles)來讓用戶登陸,在物理機系統上你能夠經過使用[Ctrl]+[Alt]+[F1]~[F6]進行切換,不過在咱們的在線實驗環境中可能沒法切換,由於特殊功能按鍵會被你主機系統劫持。當你切換到其中一個終端後想要切換回圖形界面,你能夠按下[Ctrl]+[Alt]+[F7]來完成。

Shell 是指「提供給使用者使用界面」的軟件(命令解析器)。

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

使用Tab鍵來進行命令補全,補全目錄,補全命令參數。

使用Ctrl+c鍵來強行終止當前程序(你能夠放心它並不會使終端退出)

提示:在進行目錄切換的過程當中請多使用 Tab 鍵自動補全,可避免輸入錯誤,連續按兩次Tab能夠顯示所有候選結果

 

 

 

 

新建空白文件

 

使用 touch 命令建立空白文件,關於 touch 命令,其主要是來更改已有文件的時間戳的(好比,最近訪問時間,最近修改時間),但其在不加任何參數的狀況下,只指定一個文件名,則能夠建立一個爲指定文件名的空白文件(不會覆蓋已有同名文件),固然你也能夠同時指定該文件的時間戳

 

新建目錄

 

使用 mkdir(make directories)命令能夠建立一個空目錄,也可同時指定建立目錄的權限屬性,使用 -p 參數,同時建立父目錄(若是不存在該父目錄),以下咱們同時建立一個多級目錄(這在有時候安裝軟件,配置安裝路徑時很是有用):

 

$ mkdir -p father/son/grandson

2.複製

 

複製文件

使用cp(copy)命令複製一個文件或目錄到指定目錄。將以前建立的"test"文件複製到"/home/shiyanlou/father/son/grandson"目錄中:$ cp test father/son/grandson

複製目錄

若是直接使用cp命令,複製一個目錄的話,會出現以下錯誤:

要成功複製目錄須要加上-r或者-R參數,表示遞歸複製,就是說有點「株連九族」的意思:$ cp -r father family。

 

3.刪除

刪除文件

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

刪除目錄

跟複製目錄同樣,要刪除一個目錄,也須要加上-r或-R參數:$ rm -r family

 

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

移動文件

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

 

重命名文件

將文件"file1"重命名爲"myfile" mv 舊的文件名 新的文件名:$ mv file1 myfile

批量重命名: 用rename

 

5.查看文件

使用cat,tac和nl命令查看文件,其中cat爲正序顯示,tac倒序顯示。

nl命令,添加行號並打印,這是個比cat -n更專業的行號打印命令。

這裏簡單列舉它的經常使用的幾個參數:

-b : 指定添加行號的方式,主要有兩種:

    -b a:表示不管是否爲空行,一樣列出行號("cat -n"就是這種方式)

    -b t:只列出非空行的編號並列出(默認爲這種方式)

-n : 設置行號的樣式,主要有三種:

    -n ln:在行號字段最左端顯示

    -n rn:在行號字段最右邊顯示,且不加 0

    -n rz:在行號字段最右邊顯示,且加 0

-w : 行號字段佔用的位數(默認爲 6 位)

使用more工具打開passwd文件:$ more passwd。打開後默認只顯示一屏內容,終端底部顯示當前閱讀的進度(百分比)。可使用Enter鍵向下滾動一行,使用Space鍵向下滾動一屏,按下h顯示幫助,q退出。

6.查看文件類型

前面我提到過,在 Linux 下面文件的類型不是根據文件後綴來判斷的,咱們一般使用file命令能夠查看文件的類型:$ file /bin/ls

6.查看文件類型

前面我提到過,在 Linux 下面文件的類型不是根據文件後綴來判斷的,咱們一般使用file命令能夠查看文件的類型:$ file /bin/ls

 

做業:

 

1、環境變量

變量的做用域即變量的有效範圍(好比一個函數中、一個源文件中或者全局範圍),在該範圍內只能有一個同名變量。一旦離開則該變量無效,如同不存在這個變量通常。

注意:關於變量名,並非任何形式的變量名都是可用的,變量名只能是英文字母,數字或者下劃線,且不能以數字做爲開頭。

 

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

 

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

 

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

 

1、Linux 用戶管理

2.建立用戶

在 Linux 系統裏, root 帳戶擁有整個系統至高無上的權利,好比 新建/添加 用戶。

 

root 權限,系統權限的一種,與 SYSTEM 權限能夠理解成一個概念,但高於 Administrator 權限,root 是 Linux 和 UNIX 系統中的超級管理員用戶賬戶,該賬戶擁有整個系統至高無上的權力,全部對象他均可以操做,因此不少黑客在入侵系統的時候,都要把權限提高到 root 權限,用 Windows 的方法理解也就是將本身的非法賬戶添加到 Administrators 用戶組。更好比安卓操做系統中(基於 Linux 內核)得到 root 權限以後就意味着已經得到了手機的最高權限,這時候你能夠對手機中的任何文件(包括系統文件)執行全部增、刪、改、查的操做。

3.用戶組

如何知道本身屬於哪些用戶組

方法一:使用groups命令。其中冒號以前表示用戶,後面表示該用戶所屬的用戶組。這裏能夠看到 shiyanlou 用戶同時屬於 shiyanlou 和 sudo 用戶組,每次新建用戶若是不指定用戶組的話,默認會自動建立一個與用戶名相同的用戶組(差很少就至關於家長的意思,或者說是老總)。默認狀況下在sudo用戶組裏的可使用sudo命令得到root權限。

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

 

$ cat /etc/group | sort

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

 

4.刪除用戶

 

刪除用戶是很簡單的事:$ sudo deluser lilei --remove-home

 

2、Linux 文件權限

Linux 裏面一切皆文件,正由於這一點纔有了設備文件( /dev 目錄下有各類設備文件,大都跟具體的硬件設備相關)這一說,還有 socket(網絡套接字,具體是什麼,感興趣的用戶能夠本身去了解或期待實驗樓的後續相關課程),和 pipe (管道,這個東西很重要,咱們之後將會討論到,這裏你先知道有它的存在便可)。軟連接文件,連接文件是分爲兩種的,另外一種固然是「硬連接」(硬連接不經常使用,具體內容不做爲本課程討論重點,而軟連接等同於 Windows 上的快捷方式,你記住這一點就夠了)

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

$ ls -A

固然,你能夠同時使用 '-A' 和 '-l' 參數:$ ls -Al查看某一個目錄的完整屬性,而不是顯示目錄裏面的文件屬性:$ ls -dl <目錄名>。顯示全部文件大小,並以普通人類能看懂的方式呈現:$ ls –AsSh,其中小 s 爲顯示文件大小,大 S 爲按文件大小排序,若須要知道如何按其它方式排序,請使用「man」命令查詢。

         2.變動文件全部者

 

 

3.修改文件權限

 

每一個文件的三組權限(擁有者,所屬用戶組,其餘用戶,記住這個順序是必定的)就對應這一個 "rwx",也就是一個 '7'

目錄路徑

使用 cd 命令能夠切換目錄,在 Linux 裏面使用 . 表示當前目錄,.. 表示上一級目錄(**注意,以 . 開頭的文件都是隱藏文件,因此這兩個目錄必然也是隱藏的,你可使用 ls -a 命令查看隱藏文件), - 表示上一次所在目錄,~ 一般表示當前用戶的"home"目錄。使用 pwd 命令能夠獲取當前所在路徑(絕對路徑)。

 

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

關於相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 . 爲起點,以你所要到的目錄爲終點,表現形式如: usr/local/bin (這裏假設你當前目錄爲根目錄)。你可能注意到,咱們表示相對路徑實際並無加上表示當前目錄的那個 . ,而是直接以目錄名開頭,由於這個 usr 目錄爲 / 目錄下的子目錄,是能夠省略這個 . 的(之後會講到一個相似不能省略的狀況);若是是當前目錄的上一級目錄,則須要使用 .. ,好比你當前目錄爲「home」目錄,根目錄就應該表示爲 ../../ ,表示上一級目錄("home"目錄)的上一級目錄("/"目錄)。

 

 

 

 

 

 

 

 

 

1、環境變量

 

變量的做用域即變量的有效範圍(好比一個函數中、一個源文件中或者全局範圍),在該範圍內只能有一個同名變量。一旦離開則該變量無效,如同不存在這個變量通常。

 

注意:關於變量名,並非任何形式的變量名都是可用的,變量名只能是英文字母,數字或者下劃線,且不能以數字做爲開頭。

2.環境變量

環境變量就是做用域比自定義變量要大。一般咱們會涉及到的環境變量有三種:

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

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

4.添加自定義路徑到「PATH」環境變量

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

5.修改和刪除已有變量

變量刪除

可使用unset命令刪除一個環境變量:$ unset temp

6.如何讓環境變量當即生效

在上面咱們在 Shell 中修改了一個配置腳本文件以後(好比 zsh 的配置文件 home 目錄下的.zshrc),每次都要退出終端從新打開甚至重啓主機以後其才能生效,非常麻煩,咱們可使用source命令來讓其當即生效,如:$ source .zshrc

source命令還有一個別名就是.,注意與表示當前路徑的那個點區分開,雖然形式同樣,但做用和使用方式同樣,上面的命令若是替換成.的方式就該是$ . ./.zshrc

注意第一個點後面有一個空格,並且後面的文件必須指定完整的絕對或相對路徑名,source 則不須要。

 

 

2、搜索文件

與搜索相關的命令經常使用的有以下幾個whereis,which,find,locate。

whereis簡單快速:$whereis who

locate快而全,$ locate /etc/sh

which小而精,$ which man

find精而細,$ find /etc/ -name interfaces

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

將shiyanlou.zip解壓到當前目錄:$ unzip shiyanlou.zip

使用安靜模式,將文件解壓到指定目錄:$ unzip -q shiyanlou.zip -d ziptest

使用-O(英文字母,大寫o)參數指定編碼類型:unzip -O GBK 中文壓縮文件.zip

 

3.rar打包壓縮命令

從指定文件或目錄建立壓縮包或添加文件到壓縮包:$ rm *.zip;$ rar a shiyanlou.rar .上面的命令使用a參數添加一個目錄~到一個歸檔文件中,若是該文件不存在就會自動建立。

從指定壓縮包文件中刪除某個文件:$ rar d shiyanlou.rar .zshrc

查看不解壓文件:$ rar l shiyanlou.rar

使用unrar解壓rar文件

全路徑解壓:$ unrar x shiyanlou.rar

去掉路徑解壓:$ mkdir tmp

$ unrar e shiyanlou.rar tmp/

 

4.tar打包工具

 

 

解包一個文件(-x參數)到指定路徑的已存在目錄(-C參數):$ mkdir tardir

$ tar -xf shiyanlou.tar -C tardir

只查看不解包文件-t參數:$ tar -tf shiyanlou.tar

保留文件屬性和跟隨連接(符號連接或軟連接),有時候咱們使用tar備份文件當你在其餘主機還原時但願保留文件的屬性(-p參數)和備份連接指向的源文件而不是連接自己(-h參數):$ tar -cphf etc.tar /etc

對於建立不一樣的壓縮格式的文件,對於tar來講是至關簡單的,須要的只是換一個參數,這裏咱們就以使用gzip工具建立*.tar.gz文件爲例來講明。

 

咱們只須要在建立 tar 文件的基礎上添加-z參數,使用gzip來壓縮文件:$ tar -czf shiyanlou.tar.gz ~

解壓*.tar.gz文件:$ tar -xzf shiyanlou.tar.gz

                       

1、簡單文件系統操做

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

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

                       

使用 du 命令查看目錄的容量

d參數指定查看目錄的深度

2、簡單的磁盤管理

1.建立虛擬磁盤

dd 命令簡介

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

dd的命令行語句與其餘的 Linux 程序不一樣,由於它的命令行選項格式爲選項=值,而不是更標準的--選項 值或-選項=值。dd默認從標準輸入中讀取,並寫入到標準輸出中,但能夠用選項if(input file,輸入文件)和of(output file,輸出文件)改變。

1、命令執行順序的控制

 

1.順序執行多條命令:簡單的順序執行你可使用;來完成

2.有選擇的執行命令                        

 

 

2、管道

 

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

管道又分爲匿名管道和具名管道

1.試用

先試用一下管道,好比查看/etc目錄下有哪些文件和目錄,使用ls命令來查看:$ ls -al /etc

有太多內容,屏幕不能徹底顯示,這時候可使用滾動條或快捷鍵滾動窗口來查看。不過這時候可使用管道:$ ls -al /etc | less

經過管道將前一個命令(ls)的輸出做爲下一個命令(less)的輸入,而後就能夠一行一行地看。

2.cut 命令,打印每一行的某一字段

打印/etc/passwd文件中以:爲分隔符的第1個字段和第6個字段分別表示用戶名和其家目錄:$ cut /etc/passwd -d ':' -f 1,6

 

 

 

 

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

 

grep命令是很強大的,也是至關經常使用的一個命令,它結合正則表達式能夠實現很複雜卻很高效的匹配和查找

grep命令的通常形式爲:grep [命令選項]... 用於匹配的表達式 [文件]...

 

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

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

 

5.sort 排序命令

默認爲字典排序:$ cat /etc/passswd | sort

反轉排序:$ cat /etc/passwd | sort -r

按特定字段排序:$ cat /etc/passwd | sort -t':' -k 3

 

6. uniq 去重命令

uniq命令能夠用於過濾或者輸出重複行。由於uniq命令只能去連續重複的行,不是全文去重

 

 

 

文本處理命令

1.tr 命令

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

使用方式:

tr [option]...SET1 [SET2]

 

 

2.col 命令

 

col 命令能夠將Tab換成對等數量的空格建,或反轉這個操做。

使用方式:col [option]

 

 

.join命令

 

學過數據庫的用戶對這個應該不會陌生,這個命令就是用於將兩個文件中包含相同內容的那一行合併在一塊兒。

使用方式:join [option]... file1 file2

 

 

 

4.paste命令

 

paste這個命令與join 命令相似,它是在不對比數據的狀況下,簡單地將多個文件合併一塊兒,以Tab隔開。

使用方式:paste [option] file...

 

 

數據流重定向

實驗介紹

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

 

1、數據流重定向

下面咱們簡單的回顧一下咱們前面常常用到的兩個重定向操做:固然前面沒有用到的<和<<操做也是沒有問題的,如你理解的同樣,它們的區別在於重定向的方向不一致而已,>表示是從左到右,<右到左。

1.簡單的重定向

 

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

 

正則表達式基礎

1、正則表達式

正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語: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」能夠匹配4二、04二、004二、00042等。

範圍和優先級

 

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

     

  

字符

  
  

描述

  

\

將下一個字符標記爲一個特殊字符、或一個原義字符。例如,「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

匹配xy。例如,「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}

限定符

^、$、\任何元字符

定位點和序列

 選擇

 

 

 

 

2、grep模式匹配命令

2.使用正則表達式

使用基本正則表達式,BRE

 

使用擴展正則表達式,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 -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'

 

 

4、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經常使用的內置變量

     

  

變量名

  
  

說明

  

FILENAME

當前輸入文件名,如有多個文件,則只表示第一個。若是輸入是來自標準輸入,則爲空字符串

$0

當前記錄的內容

$N

N表示字段號,最大值爲NF變量的值

FS

字段分隔符,由正則表達式表示,默認爲" "空格

RS

輸入記錄分隔符,默認爲"\n",即一行爲一個記錄

NF

當前記錄字段數

NR

已經讀入的記錄數

FNR

當前輸入文件的記錄數,請注意它與NR的區別

OFS

輸出字段分隔符,默認爲" "空格

ORS

輸出記錄分隔符,默認爲"\n"

 

 

 

1、Linux 上的軟件安裝

 

2. apt 包管理工具介紹

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

3.apt-get

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

     

  

工具

  
  

說明

  

install

其後加上軟件包名,用於安裝一個軟件包

update

從軟件源鏡像服務器上下載/更新用於更新本地軟件源的軟件包列表

upgrade

升級本地可更新的所有軟件包,但存在依賴問題時將不會升級,一般會在更新以前執行一次update

dist-upgrade

解決依賴關係並升級(存在必定危險性)

remove

移除已安裝的軟件包,包括與被移除軟件包有依賴關係的軟件包,但不包含軟件包的配置文件

autoremove

移除以前被其餘軟件包依賴,但如今再也不被使用的軟件包

purge

與remove相同,但會徹底移除軟件包,包含其配置文件

clean

移除下載到本地的已經安裝的軟件包,默認保存在/var/cache/apt/archives/

autoclean

移除已安裝的軟件的舊版本軟件包

 

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……

 

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

咱們常常能夠在網絡上簡單以deb形式打包的軟件包,就須要使用dpkg命令來安裝。

dpkg經常使用參數介紹:

     

  

參數

  
  

說明

  

-i

安裝指定deb包

-R

後面加上目錄名,用於安裝該目錄下的全部deb安裝包

-r

remove,移除某個已安裝的軟件包

-I

顯示deb包文件的信息

-s

顯示已安裝軟件的信息

-S

搜索已安裝的軟件包

-L

顯示已安裝軟件包的目錄信息

 

2.使用dpkg安裝deb軟件包

3.查看已安裝軟件包的安裝目錄

使用dpkg -L查看deb包目錄信息:$ sudo dpkg -L emacs

做業:

 

 

7、遇到的問題及解決

vim 使用有困難,不知道怎麼輸入和結束

dapt安裝不會使用

 

 

 

 

8、其餘

此次任務的量總的來講有點大,我用了足足兩天的時間來完成這十二個實驗。有些內容在word上,因爲時間限制緣由沒有將其粘在博客園上。之因此使用word是由於,若是直接在博客園上操做,一旦網斷了,數據可能就所以丟失了。在這十幾個實驗中,有些內容含有大量術語,難以理解。可是,做業中有許多有趣的東西,又讓我對代碼增添了一點小興趣。是我在繁雜的實驗過程當中的一點小安慰。

相關文章
相關標籤/搜索