【轉】Linux經常使用的SHELL

linux 經常使用SHELL

1.刪除0字節文件

find -type f -size 0 -exec rm -rf {} \;

2.查看進程

按內存從大到小排列:
ps -e   -o "%C   : %p : %z : %a"|sort -k5 -nr

3.按cpu利用率從大到小排列

ps -e   -o "%C   : %p : %z : %a"|sort   -nr

4.打印說cache裏的URL

grep -r -a   jpg /data/cache/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}'

5.查看http的併發請求數及其TCP鏈接狀態:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

6. 文件中直接替換

#sed在這個文裏Root的一行,匹配Root一行,將no替換成yes.
sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config

7殺掉mysql進程:

ps aux|grep mysql|grep -v grep|awk '{print $2}'|xargs kill -9 
killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid`

8.顯示運行3級別開啓的服務:

#從中瞭解到cut的用途,截取數據
ls /etc/rc3.d/S* |cut -c 15-

9.如何在編寫SHELL顯示多個信息,用EOF

cat << EOF
+--------------------------------------------------------------+
|       === Welcome to Tunoff services ===                |
+--------------------------------------------------------------+
EOF

10. for 的巧用(如給mysql建軟連接)

cd /usr/local/mysql/bin
for i in *
do ln /usr/local/mysql/bin/$i /usr/bin/$i
done

11. 取IP地址:

ifconfig eth0 |grep "inet addr:" |awk '{print $2}'|cut -c 6-   
#或者
ifconfig   | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'

12.內存的大小:

free -m |grep "Mem" | awk '{print $2}'

13.查看80端口鏈接數量

netstat -an -t | grep ":80" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort

14.查看Apache的併發請求數及其TCP鏈接狀態:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

15.由於同事要統計一下服務器下面全部的jpg的文件的大小,寫了個shell給他來統計.原來用xargs實現,但他一次處理一部分,搞的有多個總和....,下面的命令就能解決啦.

find / -name *.jpg -exec wc -c {} \;|awk '{print $1}'|awk '{a+=$1}END{print a}'

1六、CPU的數量(多核算多個CPU)

cat /proc/cpuinfo |grep -c processor

17   CPU負載  

cat /proc/loadavg
#檢查前三個輸出值是否超過了系統邏輯CPU的4倍。

18   CPU負載

mpstat 1 1
#檢查%idle是否太低(好比小於5%)

19   內存空間

free
#檢查free值是否太低   也能夠用
cat /proc/meminfo

20   swap空間

free
###檢查swap used值是否太高,若是swap used值太高,進一步檢查swap動做是否頻繁:
vmstat 1 5
###觀察si和so值是否較大

21   磁盤空間

df -h
#檢查是否有分區使用率(Use%)太高(好比超過90%)   如發現某個分區空間接近用盡,
#能夠進入該分區的掛載點,用如下命令找出佔用空間最多的文件或目錄:
du -cks * | sort -rn | head -n 10

22   磁盤I/O負載

iostat -x 1 2
#檢查I/O使用率(%util)是否超過100%

23   網絡負載

sar -n DEV
#檢查網絡流量(rxbyt/s, txbyt/s)是否太高

24   網絡錯誤

netstat -i
#檢查是否有網絡錯誤(drop fifo colls carrier)   也能夠用命令:
cat /proc/net/dev

25 網絡鏈接數目

netstat -an | grep -E 「^(tcp)」 | cut -c 68- | sort | uniq -c | sort -n

26   進程總數

ps aux | wc -l
#檢查進程個數是否正常 (好比超過250)

27   可運行進程數目

vmwtat 1 5
#列給出的是可運行進程的數目,檢查其是否超過系統邏輯CPU的4倍

28   進程

top -id 1
#觀察是否有異常進程出現

29   網絡狀態   檢查DNS, 網關等是否能夠正常連通

30   用戶

who | wc -l
#檢查登陸用戶是否過多 (好比超過50個)   也能夠用命令:
uptime

31   系統日誌

cat /var/log/rflogview/*errors
#檢查是否有異常錯誤記錄   也能夠搜尋一些異常關鍵字,例如:
 grep -i error /var/log/messages
 grep -i fail /var/log/messages

32   核心日誌

dmesg
#檢查是否有異常錯誤記錄

33   系統時間

date
#檢查系統時間是否正確

34   打開文件數目

lsof | wc -l
#檢查打開文件總數是否過多

35   日誌

logwatch –print 
#配置/etc/log.d/logwatch.conf,將 Mailto 設置爲本身的email 地址,
#啓動mail服務 (sendmail或者postfix),這樣就能夠天天收到日誌報告了。
#缺省logwatch只報告昨天的日誌,能夠用:
logwatch –print –range all
#得到全部的日誌分析結果。
#能夠用
logwatch –print –detail high
#得到更具體的日誌分析結果(而不單單是出錯日誌)。

36.殺掉80端口相關的進程

lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh

37.清除僵死進程。

ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9

38.tcpdump 抓包 ,用來防止80端口被人攻擊時能夠分析數據

tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts

39.而後檢查IP的重複數 並從小到大排序 注意 "-t\ +0"   中間是兩個空格

less pkts | awk {'printf $3"\n"'} | cut -d. -f 1-4 | sort | uniq -c | awk {'printf $1" "$2"\n"'} | sort -n -t\ +0

40.查看有多少個活動的php-cgi進程

netstat -anp | grep php-cgi | grep ^tcp | wc -l
chkconfig --list | awk '{if ($5=="3:on") print $1}'

41.kudzu查看網卡型號

kudzu --probe --class=network

40、殺死多個相關進程

ps -ef | grep oracleoratest | grep -v grep |awk '{print $2}' | xargs -t -l kill -9

4一、統計一個文件中第一列出現的次數

awk '{a[$1]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}'    1.txt

4二、匹配中文字符的正則表達式:


[\u4e00-\u9fa5] ####評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了

 #匹配雙字節字符(包括漢字在內):[^\x00-\xff] ####評註:能夠用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

 #匹配空白行的正則表達式:\n\s*\r ####評註:能夠用來刪除空白行

 #匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? /> ####評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的嵌套標記依舊無能爲力

 #匹配首尾空白字符的正則表達式:
^\s*|\s*$
####評註:能夠用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),很是有用的表達式

 #匹配Email地址的正則表達式:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
####評註:表單驗證時很實用

 #匹配網址URL的正則表達式:
[a-zA-z]+://[^\s]*
####評註:網上流傳的版本功能頗有限,上面這個基本能夠知足需求

 #匹配賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
####評註:表單驗證時很實用

 #匹配國內電話號碼:
\d{3}-\d{8}|\d{4}-\d{7}
####評註:匹配形式如 0511-4405222 或 021-87888822

 #匹配騰訊QQ號:[1-9][0-9]{4,}
####評註:騰訊QQ號從10000開始
 
 #匹配中國郵政編碼:
[1-9]\d{5}(?!\d)
####評註:中國郵政編碼爲6位數字

 #匹配身份證:
\d{15}|\d{18}
####評註:中國的身份證爲15位或18位

 #匹配ip地址:
\d+\.\d+\.\d+\.\d+
####評註:提取ip地址時有用


 #匹配特定數字:
^[1-9]\d*$                                       //匹配正整數
^-[1-9]\d*$                                       //匹配負整數
^-?[1-9]\d*$                                     //匹配整數
^[1-9]\d*|0$                                      //匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$                                    //匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$                   //匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$                 //匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$       //匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$          //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$     //匹配非正浮點數(負浮點數 + 0)
#####評註:處理大量數據時有用,具體應用時注意修正


 #匹配特定字符串:
^[A-Za-z]+$                                     //匹配由26個英文字母組成的字符串
^[A-Z]+$                                        //匹配由26個英文字母的大寫組成的字符串
^[a-z]+$                                        //匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$                                  //匹配由數字和26個英文字母組成的字符串
^\w+$                                           //匹配由數字、26個英文字母或者下劃線組成的字符串
####評註:最基本也是最經常使用的一些表達式
相關文章
相關標籤/搜索