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