常用shell命令總結,非常實用

man 命令  查詢命令說明


1、cat  zcat

cat file1 file2 可以顯示兩個文件的內容

cat -n file1 可以爲文件增加行號

cat file1 file2  >> file3; 把file1和file2的內容合併到file3中

zcat file1[file2]  獲取壓縮文件file內容


2、sort

sort file1 對file1裏面的內容進行排序

sort -u file1  去重排序

sort -r  file1 降序排列

sort -f  file1 -o file1 將排序結果放到原來文件中【原來的內容就木有了】

sort -n file1  按數值的形式進行排序【默認是字母順序】

sort -n -k 2 -t : file1   以:爲分隔符 以第二列位排序列進行排序

http://system-administrator.lofter.com/post/c935d_1bfb98


3、cut

cut -d ‘分隔符’  -f num 如:

cut -d ‘:’ -f 3  

cut -d ‘:’ -f 3 4

cut -d ‘:’ -f 1-3

cut -d ‘:’ -f 1-3, 5


4、awk

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

awk的常見模式:awk '{pattern + action}' {filenames}。awk對於數據分析和生成報表功能會更加強大一些。


awk ‘{print $1}’ file1 讀取file1文檔,並且截取字符串的第一個被空格分割的單詞

awk -F ‘:’ ‘{print $1}’ file1 讀取file1文檔,每一行通過:進行分隔,然後輸出第一個被分割的單詞

awk -F ‘:’ ‘{print $1”\t”$2}’ file1 讀取file1文檔,並且把裏面的第一個和第二個分隔出的內容通過製表符連接起來

awk -F ‘:’ ‘BEGIN{print “開始前輸出內容”} {print $1 &3} END{print “結束語”}'

awk -F ‘:’ ‘/apple/{print $1}’ file1 讀取file1裏面的內容,搜索包含apple的行,並且打印出分割之後的第一個單詞

awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd   

awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

首先awk預留了很多的內置變量,可以獲取文件名稱,當前行數,沒一行的分隔出的列數。其中print和printf都可以用在輸出上面,printf的輸出模式更像c語言中的輸出。

awk -F ‘:’ ‘BEGIN{count = 0; print “start to cuunt”} {count ++; print $0} END{print “total:”count}’ file1 計算file1文件的行數【可以把begin看成一些初始化條件,中間部分是循環處理文檔時的計算,end部分就是總結性的內容】

ls -l | awk 'BEGIN{size = 0; print "start to count..."} {if($5 > 1000){size += $5}} END{print "total:"size}’ 計算當前目錄下所有自己數大於1000的文件的總大小。可以在awk中像使用c語言代碼一樣使用代碼和函數。

也可以使用for while等循環,可以放到{}中間使用


5、sed[一款流處理工具,對於輸入的內容,可以一行一行的進行過濾和替換等;sed處理的時候會在內存中創建一個模式空間,對於讀取的沒一行都放入到模式空間中進行處理]

sed命令模式: sed  選項  定址  文檔


【定址爲p時】

sed -n ‘1,3p’ file1 打印文檔的1-3行

sed -n ‘/a/,/b/p’ file1 打印文檔中從a開頭的行到b開頭的行,如果很多這種就都打印出來

sed -n ‘/a[pd]p/p’ file1 查找file1文件中包含了app adp的行


【定址爲d時】

sed ‘1d’ file1  刪除file1文件的第一行,返回的是刪除之後的結果,但是file1文件自身內容是不會改變的

sed ‘1d;3d’ file1 刪除file1文件的第一行和第三行

sed ‘1!d’ file1 除了第一行,刪除文件的其他行

使用d的時候,一般是不會加上-n選項的,因爲就看不到最終的結果了。


【地址爲s時】

sed ’s/app/APP/‘ file1 默認替換file1文件裏面沒一行的第一個app爲APP

sed ’s/app/APP/g’ file1 替換所有的app爲APP

sed ’s/app/APP/2’ file1 替換每行的第二個app爲APP

sed -n ’s/app/APP/p’ file1 只打印被替換的行,後面也可以是gp,表示全局替換並且展示

sed -n ’s/app/APP/gpw file2’ file1 把app全部替換爲APP,並且把有變動的行存儲到file2中,而且在控制行打印出來

sed ’s/^/#/g’ file1 在file1的沒一行開頭添加一個#號

sed ’s/.//2’ file1 刪除沒一行的第二個字符


sed ‘1i hello’ file1 在file1第一行前面插入hello

sed ‘1a hello’ file2 在file1第一行後面插入hello


sed -r ’s/^()()/\1/g’ file1 -r之後,在查找的時候就可以加入正則表達式了


sed ‘1h;3G’ file1 把第一行的內容複製到第三行的後面 


6、wc

wc -l content 多少行

wc -w 多少字【單詞也算一個字】

wc -m 多少字符【字符數】


7、head

head -n num file1 從file1中獲取前n行的內容

head -c num file1 從file1中獲取前n個字符


8、grep [global regular expression print]

grep ‘查找的內容’ 文檔

grep ’test’ file1

grep ’test’ file1 file2 -h  加上-h是因爲多個文件搜索的時候結果中會出現文檔名稱,加上-h就沒有了

grep ’test’ file*

grep ‘[a-z]\{5\}’ file1 查找連續出現5個字符

grep ‘w\(es\)t.*\1’  只要一個字符串前面出現es後面又出現es的就ok

grep ‘^test’ file1 以test開頭的

grep ’test$’ 以test結尾的

http://bbs.chinaunix.net/thread-3558099-1-1.html



能夠做以下事情:

(1)能夠批量拷貝文檔,並且重命名這些文檔

批量的重命名文件:for i in ./*; do mv $i $(sed ’s/a.txt/a.png/‘ <<< $i); done

【<<     重定向,用在"here document”     <<<  重定向,用在"here string"】


(2)能夠獲取某文檔裏面的指定行數內容【根據行數】

  tail -n num filename  如: tail -n 1 access.log 可以獲取末尾的1行內容【不加-n這個選項也可以】

  head -n num filename 獲取頭多少行

  head -n | tail -n 通過head和tail的組合獲取指定幾行之間的內容 如 head 20 access.log | tail 10  獲取10到20行之間的內容

  sed -n '3,5p’ access.log 獲取3到5行之間的內容


  tail -3 /etc/passwd | tac 將獲取的內容反過來顯示,比如最新註冊的幾個用戶等


  在這些命令的後面加上  >> filename  就可以把結果存儲到一個新的文件中了


(3)可以正常的切分字符串,並且拼湊產生另外一個文件

cut -d ':' -f 1,3 cut.txt | sed 's/:/-/' >> test.txt  以分隔符:切割文件,然後通過-連接起來,並且存儲到文件test.txt中

awk -F ‘:’ ‘{print $1”\t”$2}’ file1 >> test.txt 以分隔符:切割文件,把分割出來的前兩個字段用製表符連接起來放到文件test.txt中


(4)可以替換字符串中的內容

  sed ’s/a/b/g’ file 替換file中的a變爲b


(5)如何處理日誌中的字段,並且拼湊出自己想要的格式

awk -F '\t' '{if(NF == 16){print $16}}' reallog.log |  獲取日誌的訪問信息 

cut -d '?' -f 2 |    獲取參數信息

grep "tk=" |   獲取含有token信息的日誌/可以後續增加其他搜索條件排除不滿足的內容

awk -F '&' '{for(i = 1; i <= NF; i++){if(index($i,"tk=") || index($i,"h")) print $i}}’ | 獲取包含有指定數據的信息,其他信息不展示

uniq |  去除重複的信息

xargs |  把幾行數據合併爲一行

sed 's/ /\&/g’  把數據中的空格變爲&符號



awk -F '\t' '{if(NF == 16){print $16}}' reallog.log | cut -d '?' -f 2 | grep "tk=" | awk -F '&' '{for(i = 1; i <= NF; i++){if(index($i,"tk=") || index($i,"h")) print $i}}' | uniq | xargs | sed 's/ /\&/g'

  

【有問題,最終的結果是所有結果的連接,不是針對一行一行的進行的處理】


awk -F '\t' '{if(NF == 16){print $16}}' testlog.log | cut -d '?' -f 2 | awk -F '&' 'BEGIN{tempStr = ""} {for(i = 1; i <= NF; i++){if(index($i,"tk=") || index($i,"h")) {tempStr = tempStr"-"$i;}}} END{print tempStr}' | sed 's/-/\&/g' | sed 's/^./

【這種方式也是不行,返回的是所有內容的拼接結果】


(6)統計文件大小

du -sk server*/access* | awk -F '\t' 'BEGIN{i=0}{i = i + $1}END{print i}’  


(7)查看磁盤佔用情況

df -lh  查看系統磁盤佔用情況

du -sm * 查看所有文件包括文件夾大小

du -h 文件路徑  查看文件路徑下大小


(8)有時候因爲運行的程序還在引用文件,刪除後磁盤空間還在佔用。

http://www.cnblogs.com/mfryf/p/3334451.html

lsof | grep deleted 找到那些刪除被掛起的命令

結束對應的進程就ok了。最好能夠找到誰引用了這些文件。

ctrl + a到命令行頭   ctrl+e 到命令行尾


10、查看端口占用

lsof -i:8161




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章