做業css
zyhtml
e前端
知識點:java
進入上一級目錄:$ cd ..
linux
進入你的「home」目錄:$ cd ~
# 或者 cd /home/<你的用戶名>
nginx
使用 pwd
獲取當前路徑正則表達式
絕對路徑,以根"/"目錄爲起點的完整路徑,以你所要到的目錄爲終點shell
表現形式如: /usr/local/bin
,表示根目錄下的 usr 目錄中的 local 目錄中的 bin 目錄。編程
相對路徑,相對於你當前的目錄的路徑,相對路徑是以當前目錄 .
爲起點,以你所要到的目錄爲終點,ubuntu
表現形式如:usr/local/bin
(這裏假設你當前目錄爲根目錄)。
實驗截圖:
使用 touch
命令建立空白文件
建立名爲 test 的空白文件,由於在其餘目錄沒有權限,因此須要先 cd ~
切換回用戶的/home/shiyanlou
目錄:
使用 mkdir
(make directories)命令能夠建立一個空目錄,也可同時指定建立目錄的權限屬性
使用cp
(copy)命令複製一個文件或目錄到指定目錄。
使用rm
(remove files or directories)命令,刪除一個文件或目錄:
直接使用rm
刪除會顯示一個提示,
想忽略這提示,直接刪除文件,可使用-f
參數強制刪除
跟複製目錄同樣,要刪除一個目錄,也須要加上-r
或-R
參數
使用mv
(move or rename files)命令,移動文件(剪切)。
出現問題:!!!!!
cat
,tac
和nl
命令查看文件cat
爲正序顯示,tac
倒序顯示。
標準輸入輸出:當咱們執行一個 shell 命令行時一般會自動打開三個標準文件,即標準輸入文件(stdin),默認對應終端的鍵盤;標準輸出文件(stdout)和標準錯誤輸出文件(stderr),這兩個文件都對應被重定向到終端的屏幕,以便咱們能直接看到輸出內容。進程將從標準輸入文件中獲得輸入數據,將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。
-n
參數顯示行號
nl
命令,添加行號並打印
經常使用的幾個參數:
-b : 指定添加行號的方式,主要有兩種: -b a:表示不管是否爲空行,一樣列出行號("cat -n"就是這種方式) -b t:只列出非空行的編號並列出(默認爲這種方式) -n : 設置行號的樣式,主要有三種: -n ln:在行號字段最左端顯示 -n rn:在行號字段最右邊顯示,且不加 0 -n rz:在行號字段最右邊顯示,且加 0 -w : 行號字段佔用的位數(默認爲 6 位)
more
和less
命令分頁查看文件tail
命令,不得不提的還有它一個很牛的參數-f
,這個參數能夠實現不停地讀取某個文件的內容並顯示。這可以讓咱們動態查看日誌起到實時監視的做用
一般使用file
命令能夠查看文件的類型
專門的命令行編輯器好比(emacs,vim,nano)
做業:
使用declare
命令建立一個變量名爲 tmp 的變量:
取變量的值,使用echo
命令和$
符號($符號用於表示引用一個變量的值,初學者常常會忘記輸入):
變量名只能是英文字母,數字或者下劃線,且不能以數字做爲開頭。
環境變量就是做用域比自定義變量要大
Shell 的環境變量做用於自身和它的子進程。
一般咱們會涉及到的環境變量有三種:
也有三個與上述三種環境變量相關的命令,set
,env
,export
。這三個命令很類似,均可以用於打印相關環境變量,區別在於涉及的是不一樣範圍的環境變量,詳見下表:
命令 | 說明 |
---|---|
set |
顯示當前 Shell 全部環境變量,包括其內建環境變量(與 Shell 外觀等相關),用戶自定義變量及導出的環境變量 |
env |
顯示與當前用戶相關的環境變量,還可讓命令在指定環境中運行 |
export |
顯示從 Shell 中導出成環境變量的變量,也能經過它將自定義變量導出爲環境變量 |
每一個用戶的 home 目錄中有一個 Shell 每次啓動時會默認執行一個配置腳本,以初始化環境,包括添加一些用戶自定義環境變量等等。zsh 的配置文件是.zshrc
,相應 Bash 的配置文件爲.bashrc
變量的修改有如下幾種方式
變量設置方式 | 說明 |
---|---|
${變量名#匹配字串} |
從頭向後開始匹配,刪除符合匹配字串的最短數據 |
${變量名##匹配字串} |
從頭向後開始匹配,刪除符合匹配字串的最長數據 |
${變量名%匹配字串} |
從尾向前開始匹配,刪除符合匹配字串的最短數據 |
${變量名%%匹配字串} |
從尾向前開始匹配,刪除符合匹配字串的最長數據 |
${變量名/舊的字串/新的字串} |
將符合舊字串的第一個字串替換爲新的字串 |
${變量名//舊的字串/新的字串} |
將符合舊字串的所有字串替換爲新的字串 |
好比要修改咱們前面添加到 PATH 的環境變量。
與搜索相關的命令經常使用的有以下幾個whereis
,which
,find
,locate
。
whereis
只能搜索二進制文件(-b),man幫助文件(-m)和源代碼文件(-s)。若是想要得到更全面的搜索結果可使用locate
命令。
which
小而精which
自己是 Shell 內建的一個命令,咱們一般使用which
來肯定是否安裝了某個指定的軟件,由於它只從PATH
環境變量指定的路徑中去搜索命令:
find
精而細find
應該是這幾個命令中最強大的了,它不但能夠經過文件類型、文件名進行查找並且能夠根據文件的屬性(如文件的時間戳,文件的權限等)進行搜索。
注意 find 命令的路徑是做爲第一個參數的, 基本命令格式爲 find [path] [option] [action]
做業:
《黑客帝國》電影裏滿屏幕代碼的「數字雨」,在 Linux 裏面你也能夠輕鬆實現這樣的效果
Linux 上經常使用的 壓縮/解壓 工具,介紹了 zip,rar,tar 的使用。
zip
壓縮打包程序第一行命令中,-r
參數表示遞歸打包包含子目錄的所有內容,-q
參數表示爲安靜模式,即不向屏幕輸出信息,-o
,表示輸出文件,需在其後緊跟打包輸出文件名。後面使用du
命令查看打包後文件的大小
unzip
命令解壓縮zip文件
不想解壓只想查看壓縮包的內容你可使用-l
參數
使用-O
(英文字母,大寫o)參數指定編碼類型:
rar
打包壓縮命令a
參數添加一個目錄~
到一個歸檔文件中,若是該文件不存在就會自動建立。做業:天冷的時候,要是有個火爐就行了。
而後再使用mkfs
格式化各分區
cowsay
命令,可讓你在終端裏以一種動物說話的形式打印出一段話。
順序執行、選擇執行、管道、cut 命令、grep 命令、wc 命令、sort 命令等
&&
就是用來實現選擇性執行的,它表示若是前面的命令執行結果(不是表示終端輸出的內容,而是表示命令執行狀態的結果)返回0則執行後面的,不然不執行,你能夠從$?
環境變量獲取上一次命令的返回結果
管道又分爲匿名管道和具名管道
在使用一些過濾程序時常常會用到的就是匿名管道,在命令行中由|
分隔符表示,|
在前面的內容中咱們已經屢次使用到了。具名管道簡單的說就是有名字的管道,一般只會在源程序中用到具名管道。下面咱們就將經過一些經常使用的可使用管道的"過濾程序"來幫助你熟練管道的使用。
uniq
命令能夠用於過濾或者輸出重複行。tr 命令能夠用來刪除一段文本信息中的某些文字。或者將其進行轉換。
col 命令能夠將Tab
換成對等數量的空格建,或反轉這個操做。
用於將兩個文件中包含相同內容的那一行合併在一塊兒。
paste
這個命令與join
命令相似,它是在不對比數據的狀況下,簡單地將多個文件合併一塊兒,以Tab
隔開。
注意不要將管道和重定向混淆,管道默認是鏈接前一個命令的輸出到下一個命令的輸入,而重定向一般是須要一個文件來創建兩個命令的鏈接
tee
命令同時重定向到多個文件除了將須要將輸出重定向到文件以外也須要將信息打印在終端
exec
命令的做用是使用指定的命令替換當前的 Shell,及使用一個進程替換當前進程,或者指定新的重定向使用exec
命令能夠建立新的文件描述符
在 Linux 中有一個被成爲「黑洞」的設備文件,因此導入它的數據都將被「吞噬」。
在類 UNIX 系統中,/dev/null,或稱空設備,是一個特殊的設備文件,它一般被用於丟棄不須要的輸出流,或做爲用於輸入流的空文件,這些操做一般由重定向完成。讀取它則會當即獲得一個EOF。
xargs 是一條 UNIX 和類 UNIX 操做系統的經常使用命令。它的做用是將參數列表轉換成小塊分段傳遞給其餘命令,以免參數列表過長的問題。
正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法
一個正則表達式一般被稱爲一個模式(pattern),爲用來描述或者匹配一系列符合某個句法規則的字符串。
|
豎直分隔符表示選擇,例如"boy|girl"能夠匹配"boy"或者"girl"
數量限定除了咱們舉例用的*
,還有+
加號,?
問號,.
點號,若是在一個模式中不加數量限定符則表示出現一次且僅出現一次:
優先級爲從上到下從左到右,依次下降:
rep
命令用於打印輸出文本中匹配的模式串,它使用正則表達式做爲模式匹配的條件。grep
支持三種正則表達式引擎,分別用三個參數指定:
參數 | 說明 |
---|---|
-E |
POSIX擴展正則表達式,ERE |
-G |
POSIX基本正則表達式,BRE |
-P |
Perl正則表達式,PCRE |
雖然咱們這一節的標題是正則表達式,但實際這一節實驗只是介紹grep
,sed
,awk
這三個命令,而正則表達式做爲這三個命令的一種使用方式(命令輸出中能夠包含正則表達式)。正則表達式自己的內容不少,要把它說明清楚須要單獨一門課程來實現,不過咱們這一節中涉及到的相關內容一般也可以知足不少狀況下的需求了。
想要更深刻地學習使用正則表達式,在這裏 正則表達式基礎。
咱們先找一個用於練習的文本文件:
$ cp /etc/passwd ~
# 打印2-5行 $ nl passwd | sed -n '2,5p' # 打印奇數行 $ nl passwd | sed -n '1~2p'
# 將輸入文本中"shiyanlou" 全局替換爲"hehe",並只打印替換的那一行,注意這裏不能省略最後的"p"命令 $ sed -n 's/shiyanlou/hehe/gp' passwd
注意: 行內替換能夠結合正則表達式使用。
$ nl passwd | grep "shiyanlou" # 刪除第21行 $ sed -n '21c\www.shiyanlou.com' passwd
關於sed命令就介紹這麼多,你若是但願瞭解更多sed的高級用法,你能夠參看以下連接:
看到上面的標題,你可能會感到驚異,難道咱們這裏要學習的是一門「語言」麼,確切的說,咱們是要在這裏學習awk
文本處理語言,只是咱們並不會在這裏學習到比較完整的關於awk
的內容,仍是由於前面的緣由,它太強大了,它的應用無處不在,咱們沒法在這裏以簡短的文字描述面面俱到,若是你有目標成爲一個linux系統管理員,確實想學好awk
,你一不用擔憂,實驗樓會在以後陸續上線linux系統管理員的學習路徑,裏面會有單獨的關於正則表達式
,awk
,sed
等相關課程,敬請期待吧。下面的內容,咱們就做爲一個關於awk
的入門體驗章節吧,其中會介紹一些awk
的經常使用操做。
AWK
是一種優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一.其名稱得自於它的創始人Alfred Aho(阿爾佛雷德·艾侯)、Peter Jay Weinberger(彼得·溫伯格)和Brian Wilson Kernighan(布萊恩·柯林漢)姓氏的首個字母.AWK程序設計語言,三位建立者已將它正式定義爲「樣式掃描和處理語言」。它容許您建立簡短的程序,這些程序讀取輸入文件、爲數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其餘的功能。最簡單地說,AWK是一種用於處理文本的編程語言工具。
在大多數linux發行版上面,實際咱們使用的是gawk(GNU awk,awk的GNU版本),在咱們的環境中ubuntu上,默認提供的是mawk,不過咱們一般能夠直接使用awk命令(awk語言的解釋器),由於系統已經爲咱們建立好了awk指向mawk的符號連接。
$ ll /usr/bin/awk
nawk: 在 20 世紀 80 年代中期,對 awk語言進行了更新,並不一樣程度地使用一種稱爲 nawk(new awk) 的加強版本對其進行了替換。許多系統中仍然存在着舊的awk 解釋器,但一般將其安裝爲 oawk (old awk) 命令,而 nawk 解釋器則安裝爲主要的 awk 命令,也可使用 nawk 命令。Dr. Kernighan 仍然在對 nawk 進行維護,與 gawk 同樣,它也是開放源代碼的,而且能夠免費得到; gawk: 是 GNU Project 的awk解釋器的開放源代碼實現。儘管早期的 GAWK 發行版是舊的 AWK 的替代程序,但不斷地對其進行了更新,以包含 NAWK 的特性; mawk 也是awk編程語言的一種解釋器,mawk遵循 POSIX 1003.2 (草案 11.3)定義的 AWK 語言,包含了一些沒有在AWK 手冊中提到的特點,同時 mawk 提供一小部分擴展,另外聽說mawk是實現最快的awk
awk全部的操做都是基於pattern(模式)—action(動做)對來完成的,以下面的形式:
$ pattern {action}
你能夠看到就如同不少編程語言同樣,它將全部的動做操做用一對{}
花括號包圍起來。其中pattern一般是是表示用於匹配輸入的文本的「關係式」或「正則表達式」,action則是表示匹配後將執行的動做。在一個完整awk操做中,這二者能夠只有其中一個,若是沒有pattern則默認匹配輸入的所有文本,若是沒有action則默認爲打印匹配內容到屏幕。
awk
處理文本的方式,是將文本分割成一些「字段」,而後再對這些字段進行處理,默認狀況下,awk以空格做爲一個字段的分割符,不過這不是固定了,你能夠任意指定分隔符,下面將告訴你如何作到這一點。
awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]
其中-F
參數用於預先指定前面提到的字段分隔符(還有其餘指定字段的方式) ,-v
用於預先爲awk
程序指定變量,-f
參數用於指定awk
命令要執行的程序文件,或者在不加-f
參數的狀況下直接將程序語句放在這裏,最後爲awk
須要處理的文本輸入,且能夠同時輸入多個文本文件。如今咱們仍是直接來具體體驗一下吧。
先用vim新建一個文本文檔
$ vim test
包含以下內容:
I like linux www.shiyanlou.com
# "quote>" 不用輸入 $ awk '{ > print > }' test # 或者寫到一行 $ awk '{print}' test
說明:在這個操做中我是省略了patter
,因此awk
會默認匹配輸入文本的所有內容,而後在"{}"花括號中執行動做,即print
打印全部匹配項,這裏是所有文本內容
$ awk '{ > if(NR==1){ > print $1 "\n" $2 "\n" $3 > } else { > print} > }' test # 或者 $ awk '{ > if(NR==1){ > OFS="\n" > print $1, $2, $3 > } else { > print} > }' test
說明:你首先應該注意的是,這裏我使用了awk
語言的分支選擇語句if
,它的使用和不少高級語言如C/C++
語言基本一致,若是你有這些語言的基礎,這裏將很好理解。另外一個你須要注意的是NR
與OFS
,這兩個是awk
內建的變量,NR
表示當前讀入的記錄數,你能夠簡單的理解爲當前處理的行數,OFS
表示輸出時的字段分隔符,默認爲" "空格,如上圖所見,咱們將字段分隔符設置爲\n
換行符,因此第一行本來以空格爲字段分隔的內容就分別輸出到單獨一行了。而後是$N
其中N爲相應的字段號,這也是awk
的內建變量,它表示引用相應的字段,由於咱們這裏第一行只有三個字段,因此只引用到了$3
。除此以外另外一個這裏沒有出現的$0
,它表示引用當前記錄(當前行)的所有內容。
$ awk -F'.' '{ > if(NR==2){ > print $1 "\t" $2 "\t" $3 > }}' test # 或者 $ awk ' > BEGIN{ > FS="." > OFS="\t" # 若是寫爲一行,兩個動做語句之間應該以";"號分開 > }{ > if(NR==2){ > print $1, $2, $3 > }}' test
1、Linux 上的軟件安裝
一般 Linux 上的軟件安裝主要有三種方式:
APT是Advance Packaging Tool(高級包裝工具)的縮寫,是Debian及其派生髮行版的軟件包管理器,APT能夠自動下載,配置,安裝二進制或者源代碼格式的軟件包,所以簡化了Unix系統上管理軟件的過程。APT最先被設計成dpkg的前端,用來處理deb格式的軟件包。如今通過APT-RPM組織修改,APT已經能夠安裝在支持RPM的系統管理RPM包。這個包管理器包含以
apt-
開頭的的多個工具,如apt-get
apt-cache
apt-cdrom
等,在Debian系列的發行版中使用。
OPT文件,cd OPT,卻顯示not a directory,經過閱讀《linux嵌入式》這本書使用mkdir建立目錄,多是由於OPT文件的存在,並不能建立新的目錄
與網上得搜索,瞭解應創建OPT文件夾,而不是文件。
2.同上,在創建fortest這個文件的時候,不當心按了兩次touch fortest,列出文件的時候,發現建了兩個forloutest文件,修改訪問權限得時候,哪怕修改兩次,被修改得也只有一個文件,另外一個文件修改不了,並且使用rm刪除,好像也沒有用。
體會:有時候按照實驗指導作,可是並非每一步都是告訴咱們得,因此作實驗以前最好要結合課本的知識。並且作實驗的時候,以爲本身要學的還有不少。