1.查找文件
find / -name filename.txt
根據名稱查找/目錄下的filename.txt文件。
2.查看一個程序是否運行
ps –ef|grep tomcat
查看所有有關tomcat的進程
3.終止線程
kill -9 19979
終止線程號位19979的線程
4.查看文件,包含隱藏文件
ls -al
5.當前工作目錄
pwd
6.復制文件包括其子文件到自定目錄
cp -r sourceFolder targetFolder
7.創建目錄
mkdir newfolder
8.刪除目錄(此目錄是空目錄)
rmdir deleteEmptyFolder
9.刪除文件包括其子文件
rm -rf deleteFile
10.移動文件
mv /temp/movefile /targetFolder
擴展重命名 mv oldNameFile newNameFile
11.切換用戶
su -username
12.修改文件權限
chmod 777 file.java //file.java的權限-rwxrwxrwx,r表示讀、w表示寫、x表示可執行
13.壓縮文件
tar -czf test.tar.gz /test1 /test2
14.列出壓縮文件列表
tar -tzf test.tar.gz
15.解壓文件
tar -xvzf test.tar.gz
16.查看文件頭10行
head -n 10 example.txt
17.查看文件尾10行
tail -n 10 example.txt
18.查看日志文件
tail -f exmaple.log //這個命令會自動顯示新增內容,屏幕只顯示10行內容的(可設置)。
19.啟動Vi編輯器
vi
20.查看系統當前時間
date
命令會輸出 周幾 幾月 幾日 時間 和 時間顯示格式 和年份
Sat Jan 20 04:39:49 CST 2018
date +"%Y-%m-%d"
顯示如下:
[root@ming xxx]# date +"%Y-%m-%d" 2018-01-20
注:這個我們如果不確定 就help 即可;
21.解壓zip 文件
unzip -oq
22.查看線程個數(方便查看程序是否有誤)
ps -Lf 端口號|wc -l
23、查看進程(例:如何查看所有xx進程)
ps -ef | grep xxx
ps -aux | grep xxx(-aux顯示所有狀態)
24、殺掉進程
kill -9[PID] ---(PID用查看進程的方式查找)
25、啟動/停止服務
cd到bin目錄cd/ ./startup.sh --打開(先確保有足夠的權限) ./shutdown.sh ---關閉
26、查看日志
1.cd到服務器的logs目錄(里面有xx.out文件) 2.tail -f xx.out --此時屏幕上實時更新日志。ctr+c停止 3.查看最后100行日志 tail -100 xx.out
4.查看關鍵字附件的日志。如:cat filename | grep -C 5 '關鍵字'(關鍵字前后五行。B表示前,A表示后,C表示前后) ----使用不多 5.還有vi查詢啥的。用的也不多。
27、查看端口:(如查看某個端口是否被占用)
netstat -anp | grep 端口號(狀態為LISTEN表示被占用)
28、查找文件
查找大小超過xx的文件: find . -type f -size +xxk -----(find . -type f -mtime -1 -size +100k -size-400k)--查區間大小的文件 通過文件名:find / -name xxxx ---整個硬盤查找
29、vim(vi)編輯器
有命令模式、輸入模式、末行模式三種模式。 命令模式:查找內容(/abc、跳轉到指定行(20gg)、跳轉到尾行(G)、跳轉到首行(gg)、刪除行(dd)、插入行(o)、復制粘貼(yy,p) 輸入模式:編輯文件內容 末行模式:保存退出(wq)、強制退出(q!)、顯示文件行號(set number) 在命令模式下,輸入a或i即可切換到輸入模式,輸入冒號(:)即可切換到末行模式;在輸入模式和末行模式下,按esc鍵切換到命令模式
30. awk命令
awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。awk是一個報告生成器,它擁有強大的文本格式化的能力。awk其實是一門編程語言,它支持條件判斷、數組、循環等功能。所以,我們也可以把awk理解成一個腳本語言解釋器。grep 、sed、awk被稱為linux中的"三劍客"。
grep 更適合單純的查找或匹配文本;
sed 更適合編輯匹配到的文本;
awk 更適合格式化文本,對文本進行較復雜格式處理;
從字面上理解 ,action指的就是動作,awk擅長文本格式化,並且將格式化以后的文本輸出,所以awk最常用的動作就是print和printf,因為awk要把格式化完成后的文本輸出啊,所以,這兩個動作最常用。
我們先從最簡單用法開始了解awk,我們先不使用[options] ,也不指定pattern,直接使用最簡單的action,從而開始認識awk,示例如下
上圖中,我們只是使用awk執行了一個打印的動作,將testd文件中的內容打印了出來。
好了,現在,我們來操作一下另一個類似的場景。
上圖中的示例沒有使用到options和pattern,上圖中的awk '{print $5}',表示輸出df的信息的第5列,$5表示將當前行按照分隔符分割后的第5列,不指定分隔符時,默認使用空格作為分隔符,細心的你一定發現了,上述信息用的空格不止有一個,而是有連續多個空格,awk自動將連續的空格理解為一個分割符了,是不是比cut命令要簡單很多,這樣比較簡單的例子,有利於我們開始了解awk。
awk是逐行處理的,逐行處理的意思就是說,當awk處理一個文本時,會一行一行進行處理,處理完當前行,再處理下一行,awk默認以"換行符"為標記,識別每一行,也就是說,awk跟我們人類一樣,每次遇到"回車換行",就認為是當前行的結束,新的一行的開始,awk會按照用戶指定的分割符去分割當前行,如果沒有指定分割符,默認使用空格作為分隔符。
$0 表示顯示整行 ,$NF表示當前行分割后的最后一列($0和$NF均為內置變量)
注意,$NF 和 NF 要表達的意思是不一樣的,對於awk來說,$NF表示最后一個字段,NF表示當前行被分隔符切開以后,一共有幾個字段。
也就是說,假如一行文本被空格分成了7段,那么NF的值就是7,$NF的值就是$7, 而$7表示當前行的第7個字段,也就是最后一列,那么每行的倒數第二列可以寫為$(NF-1)。
我們也可以一次輸出多列,使用逗號隔開要輸出的多個列,如下,一次性輸出第一列和第二列
同理,也可以一次性輸出多個指定的列,如下圖
我們發現,第一行並沒有第5列,所以並沒有輸出任何文本,而第二行有第五列,所以輸出了。
除了輸出文本中的列,我們還能夠添加自己的字段,將自己的字段與文件中的列結合起來,如下做法,都是可以的。
從上述實驗中可以看出,awk可以靈活的將我們指定的字符與每一列進行拼接,或者把指定的字符當做一個新列插入到原來的列中,也就是awk格式化文本能力的體現。
但是要注意,$1這種內置變量的外側不能加入雙引號,否則$1會被當做文本輸出,示例如下
我們也可以輸出整行,比如,如下兩種寫法都表示輸出整行。
我們說過,awk的語法如下:
awk [options] 'Pattern{Action}' file
而且我們說過awk是逐行處理的, 剛才已經說過了最常用的Action:print
現在,我們來認識下一Pattern,也就是我們所說的模式
不過,我們准備先把awk中最特殊的模式展示給大家,以后再介紹普通的模式,因為普通模式需要的篇幅比較長,所以我們先來總結特殊模式。
AWK 包含兩種特殊的模式:BEGIN 和 END。
BEGIN 模式指定了處理文本之前需要執行的操作:
END 模式指定了處理完所有行之后所需要執行的操作:
什么意思呢?光說不練不容易理解,我們來看一些小例子,先從BEGIN模式開始,示例如下
上述寫法表示,在開始處理test文件中的文本之前,先執行打印動作,輸出的內容為"aaa","bbb".
也就是說,上述示例中,雖然指定了test文件作為輸入源,但是在開始處理test文本之前,需要先執行BEGIN模式指定的"打印"操作
既然還沒有開始逐行處理test文件中的文本,那么是不是根本就不需要指定test文件呢,我們來試試。
經過實驗發現,還真是,我們並沒有給定任何輸入來源,awk就直接輸出信息了,因為,BEGIN模式表示,在處理指定的文本之前,需要先執行BEGIN模式中指定的動作,而上述示例沒有給定任何輸入源,但是awk還是會先執行BEGIN模式指定的"打印"動作,打印完成后,發現並沒有文本可以處理,於是就只完成了"打印 aaa bbb"的操作。
這個時候,如果我們想要awk先執行BEGIN模式指定的動作,再根據執我們自定義的動作去操作文本,該怎么辦呢?示例如下
上圖中,藍色標注的部分表示BEGIN模式指定的動作,這部分動作需要在處理指定的文本之前執行,所以,上圖中先打印出了"aaa bbb",當BEGIN模式對應的動作完成后,在使用后面的動作處理對應的文本,即打印test文件中的第一列與第二列,這樣解釋應該比較清楚了吧。
看完上述示例,似乎更加容易理解BEGIN模式是什么意思了,BEGIN模式的作用就是,在開始逐行處理文本之前,先執行BEGIN模式所指定的動作。以此類推,END模式的作用就一目了然了,舉例如下。
聰明如你一定明白了,END模式就是在處理完所有的指定的文本之后,需要指定的動作。那么,我們可以結合BEGIN模式和END模式一起使用。示例如下
上述示例中返回的結果有沒有很像一張"報表",有"表頭" 、"表內容"、 "表尾"。
32.grep命令
先說說grep命令能做什么?
我們可以使用grep命令在文本中查找指定的字符串,就像你在windows中打開txt文件,使用快捷鍵 "Ctrl+F" 在文本中查找某個字符串一樣,說白了,可以把grep理解成字符查找工具。
grep是Linux中最常用的"文本處理工具"之一,grep與sed、awk合稱為Linux中的三劍客。
grep的全稱為: Global search Regular Expression and Print out the line
全稱中的"Global search"為全局搜索之意。
全稱中的"Regular Expression"表示正則表達式。
所以,從grep的全稱中可以了解到,grep是一個可以利用"正則表達式"進行"全局搜索"的工具,grep會在文本文件中按照指定的正則進行全局搜索,並將搜索出的行打印出來。
當然,不使用正則表達式時也可以使用grep,但是當grep與正則表達式結合在一起時,威力更強大。
我們先來看一個最簡單的使用示例,從最簡單的示例開始認識grep。
為了實驗方便,我們先准備一個測試文件,文件名為testgrep,文件內容如下。
假設,現在我們想要從testgrep文本文件中搜索包含"test"字符串的行,則可以使用如下命令
上圖中的命令表示使用grep命令,在testgrep文件中搜索包含"test"字符串的行,並將包含test字符串的行打印出來。
於是,testgrep文件中的第一行被打印了出來,默認情況下,grep是區分大小寫的,所以,文件中包含大寫"TEST"的行沒有被打印出來。
如果我們想要在搜索字符串的時候,不區分大小寫,應該怎樣做呢?grep很貼心,為我們准備了一個選項,使用"-i"選項,即可在搜索時不區分大小寫,示例如下:
如上圖所示,在不區分大小寫的情況下,由於testgrep文本中的第一行與第五行中都包含"test",所以,這兩行都被打印了出來。
由於testgrep文本中的內容不較少、行比較少,所以,我們能數過來,是第一行與第五行包含"test"字符,如果文本中有1000行,我們還想要知道哪行文本包含"test"字符串,則可以使用"-n"選項,表示顯示打印出的行在文本中的行號,示例如下。
如上圖所示,grep不僅將符合條件的行輸出了,同時還顯示了行號,證明testgrep文本中的第1行與第5行,在不區分大小寫的情況下,都包含字符串"test"。
在centos6中,我們使用grep在文本中搜索出的行雖然會被打印了出來,但是在打印這些行時,被匹配到的關鍵字沒有高亮顯示,如果我們想要高亮顯示行中的關鍵字,該怎么辦呢?我們可以使用"--color"選項,高亮顯示行中的關鍵字,示例如下
注:"--color選項"是長選項
使用"--color"與使用"--color=auto"的效果相同,都表示高亮顯示關鍵字,我比較懶,習慣使用"--color"。
在centos7中,系統默認為grep命令配置了別名,所以在centos7中使用grep命令時,不用顯式的指定"--color"選項,默認就會高亮顯示被匹配到的關鍵字,在centos7中使用alias命令,即可查看到grep命令的別名,如下
可以看到,centos7中為grep命令配置的別名中,默認包含了--color選項,所以,不用顯示指定,也可高亮顯示。
所以,我們也可以在centos6中借鑒這種方法。
上圖中,testgrep文本中一共有兩行包含"test"字符串,如果我們只想知道有多少行包含指定的字符串,而不在乎哪些行包含這些字符串,我們可以使用如下命令,獲取到符合條件的總行數。
沒錯,使用"-c"選項即可只統計符合條件的總行數,而不會打印出行。
之前的示例中,包含關鍵詞的行都會被打印出來,整行都會被打印出來,如果我們只想看被匹配到的關鍵字,不想整行都被打印出來,可以嗎?必須的,使用"-o"選項即可只打印出匹配到的關機字,而不打印出整行,示例如下。
如上圖所示,使用"-o"選項,可以只顯示被匹配到的關鍵字,而不是講整行的內容都輸出。
但是需要注意,"-o"選項會把每個匹配到的關鍵字都單獨顯示在一行中進行輸出,什么意思呢?看如下示例即可明白。
如上圖所示,當沒有使用"-o"選項時,包含"123"字符串的行都會被打印出來,當同一行中包含多個"123"時,所在行會被打印出來,對應的關鍵字也會高亮顯示,當使用了"-o"選項時,每個被匹配到的關鍵字都會被單獨打印在一行中,如上圖所示,第三個"123"與第四個"123"都屬於第10行的文本,但是它們仍然各自獨占一行的輸出了。
其實,我們在使用grep命令搜索文本時,往往有這種需求:在找到對應的關鍵字時,同時需要顯示關鍵字附近的信息,什么意思呢?
我們來看一個場景,就能明白,我們新建了一個測試文件:testgrep1,測試文件內容如下
假設,我們想從testgrep1文件中找出"年齡為18"的人,我們該怎么找呢?你可能會嘗試使用如下命令。
如上圖所示,我們是匹配到了"年齡:18"的行,但是我們並不能從結果中得知年齡為18的人的姓名,因為姓名與年齡並不在一行中,那么我們該怎么辦呢?
我們可以使用"-B"選項,顯示符合條件的行之前的行,"B"有before之意,示例如下
如上圖所示,包含字符串"年齡:18"的行被高亮輸出了,同時,符合條件的行"之前的一行"也被打印了出來,這時,我們就能從結果中得知,朱雙印今年18歲,王尼美今年18歲。
沒錯,上例中的"-B1"選項表示顯示符合條件的行的同時還顯示之前的1行,舉一反三,"-B5"代表同時顯示之前的5行,"-B3"代表同時顯示之前的3行,"-B"選項的后面必須有數字,否則會報錯。
與"-B"選項對應的選項是"-A"選項,"-B"有Before之意,"-A"有After之意,聰明如你,一定已經猜到了"-A"的含義,沒錯,"-A"代表顯示符合條件的行的同時,還要顯示之后的行,"-A3"表示同時顯示符合條件的行之后的3行,我就不再贅述了。
說了"-A",說了"-B",現在說說"-C","-C"選項可以理解為"-A與-B"的結合,"-C"選項表示在顯示符合條件的行的同時,也會顯示其前后的行,如"-C1","-C1"表示打印符合條件的行的同時,也打印出之前的一行與之后的一行,"-C"有Context之意(上下文之意),示例如下。
這樣我們就能看到"年齡是18歲"的人的所有信息了。
有的時候,我們往往需要進行所謂的"精確匹配",但是使用之前的方法似乎無法滿足我們,示例如下。
上圖中,當我們在文本中搜索"zsy"字符串的時候,"zsy"、"zsythink"、"123zsy123"所在的行都被匹配到了,因為"zsythink"中也包含了"zsy",所以也被匹配到了,但是當我們想要"精確匹配"zsy字符串的時候,按照上例中的方法就無法做到了,所謂的精確匹配,就是"zsy"作為一個獨立的單詞存在,而不是包含於某個字符串中,那么,如果有這種需求,我們怎么辦呢?使用"-w"選項可以實現我們的需求,示例如下。
如上圖所示,只有"zsy"作為一個獨立的單詞存在的時候,才會被匹配到,"zsy"包含於某個字符串的時候,則不會被匹配到,這就是所謂的精確匹配,"-w"有word之意,表示搜索的字符串作為一個獨立的單詞時才會被匹配到。
有的時候,我們需要反向查找,比如,查找"不包含某個字符串"的行,這個時候,我們需要用到"-v"選項,示例如下。
上例表示查找出文本中不包含"zsy"字符串的行。
某些場景下,我們可能想要同時從多個目標中匹配,什么意思呢?看了示例就秒懂,示例如下。
上例中,我們同時在文本中搜索了"abc"字符串與"test"字符串,包含這兩個字符串中任意一個的行都會被打印出來,沒錯,就像上圖中的示例一樣,使用"-e"選項可以同時匹配多個目標,多個目標之間存在"或"關系,即匹配其中的任意一個都算作匹配成功。
在寫腳本時,你可能只是想要利用grep判斷文本中是否存在某個字符串,你只關心有沒有匹配到,而不關心匹配到的內容,你只關心有,或者沒有,這時,我們可以使用grep的靜默模式,示例如下。
當使用"-q"選項時,表示grep使用靜默模式,靜默模式下grep不會輸入任何信息,無論是否匹配到指定的字符串,都不會輸出任何信息,所以,我們需要配合"echo $?"命令,查看命令的執行狀態,如果返回值為0,證明上一條grep命令匹配到了指定的字符串,如果返回值為1,則證明上一條grep命令沒有匹配到指定的字符串,就像上圖示例中顯示的那樣,靜默模式下,grep沒有輸出任何信息,當我們在testgrep文本中查找"test"字符串時,可以匹配到結果,當在文本中查找"ttttttttttttt"字符串的時候,沒有匹配到結果,所以,我們只關心有沒有匹配到指定字符時,可以使用"-q"選項,但是需要配合"echo $?"命令查看執行狀態。
文章開頭說了,grep可以利用正則表達式進行搜索,但是之前的舉例中,grep都沒有使用正則表達式,只是純粹的去查找一些字符串,這次,我們使用grep命令,配合正則表達式,來查找我們想要的目標。
比如,我們想要查找某個文本中的合法郵箱,示例如下
眼尖的你肯定發現了,上圖中的正則表達式為擴展正則表達式,而不是基礎正則表達式,所以,在上述命令中,我使用了"-E"選項。
在使用"-E"選項時,grep才支持"擴展正則表達式",不使用"-E"選項時,grep默認只支持"基本正則表達式"。
不同的開發語言中,正則表達式的規則可能略有不同,我們在使用grep時,可以使用"-P"選項,指明使用perl兼容的正則表達式。
示例如下:
好了,grep的常用選項我們已經總結完畢,剩下需要做的就是不斷的練習了。
其實,除了grep命令,其實還有egrep命令,還有fgrep命令(fast grep),它們有各自的特點。
grep:支持基本正則表達式
egrep:支持擴展正則表達式,相當於grep -E
fgrep:不支持正則表達式,只能匹配寫死的字符串,但是速度奇快,效率高,fastgrep
參考:https://zhuanlan.zhihu.com/p/73337659
https://www.cnblogs.com/cbslock/p/10136220.html
http://www.zsythink.net/archives/category/linuxbase/%e5%9f%ba%e7%a1%80%e5%91%bd%e4%bb%a4/page/2/