ps -ef |grep hello |awk '{print $2}'|xargs kill -9php
這裏是輸出ps -ef |grep hello 結果的第二列的內容而後經過xargs傳遞給kill -9,其實第二列內容就是hello的進程號!html
附錄:mysql
1,awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更可能是做爲腳原本使用。awk的處理文本和數據的方式是這樣的,它逐行掃描文件,從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想要的操做。若是沒有指定處理動做,則把匹配的行顯示到標準輸出(屏幕),若是沒有指定模式,則全部被操做所指定的行都被處理。awk分別表明其做者姓氏的第一個字母。由於它的做者是三我的,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴展。linux
2. xargs是給命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。它把一個數據流分割爲一些足夠小的塊,以方便過濾器和命令進行處理。一般狀況下,xargs從管道或者stdin中讀取數據,可是它也可以從文件的輸出中讀取數據。xargs的默認命令是echo,這意味着經過管道傳遞給xargs的輸入將會包含換行和空白,不過經過xargs的處理,換行和空白將被空格取代。xargs 是一個強有力的命令,它可以捕獲一個命令的輸出,而後傳遞給另一個命令.ios
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 -i '/Root/s/no/yes/' /etc/ ssh /sshd_config sed 在這個文裏 Root的一行,匹配 Root 一行,將 no 替換 成 yes.
7.1. 如何殺掉 mysql 進程:
ps aux |grep mysql |grep -v grep |awk '{print $2}' |xargs kill -9 ( 從中瞭解到 awk 的用途 )
killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid` 試試查殺進程 PID
8. 顯示運行 3 級別開啓的服務 :
ls /etc/rc3.d/S* | cut -c 15- ( 從中瞭解到 cut 的用途,截取數據 )
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.
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}'
CPU 的數量(多核算多個 CPU , cat /proc/cpuinfo |grep -c processor )越多, 系統 負載越低,每秒能處理的請求數也越多。
---------------------------------------------------------------------------------------
16 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=networksql
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了shell
匹配雙字節字符 ( 包括漢字在內 ) : [^\x00-\xff]
評註:能夠用來計算字符串的長度(一個雙字節字符長度計 2 , ASCII 字符計 1 )apache
匹配空白行的正則表達式: \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 個英文字母或者下劃線組成的字符串
概述
就像再windows上有計劃任務同樣,centos7 天然也有計劃任務,並且設置更爲靈活,好用。再centos7 上能夠利用crontab 來執行計劃任務, 依賴與 crond 的系統服務,這個服務是系統自帶的,能夠直接查看狀態,啓動,中止。
50 安裝 crontabs服務並設置開機自啓
yum install crontabs
systemctl enable crond (設爲開機啓動)
systemctl start crond(啓動crond服務)
systemctl status crond (查看狀態)
設置用戶自定義定時任務
vi /etc/crontab
能夠看到: Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
即:
分鐘(0-59) 小時(0-23) 日(1-31) 月(11-12) 星期(0-6,0表示週日) 用戶名 要執行的命令
-
*/30 * * * root /usr/local/mycommand.sh
(天天,每30分鐘執行一次 mycommand命令) -
* 3 * * * root /usr/local/mycommand.sh
(天天凌晨三點,執行命令腳本,PS:這裏因爲第一個的分鐘沒有設置,那麼就會天天凌晨3點的每分鐘都執行一次命令) -
0 3 * * * root /usr/local/mycommand.sh
(這樣就是天天凌晨三點整執行一次命令腳本) -
*/10 11-13 * * * root /usr/local/mycommand.sh
(天天11點到13點之間,每10分鐘執行一次命令腳本,這一種用法也很經常使用) -
10-30 * * * * root /usr/local/mycommand.sh
(每小時的10-30分鐘,每分鐘執行一次命令腳本,共執行20次) -
10,30 * * * * * root /usr/local/mycommand.sh
(每小時的10,30分鐘,分別執行一次命令腳本,共執行2次)
保存生效
加載任務,使之生效:crontab /etc/crontab
查看任務:crontab -l
$ crontab -u 用戶名 -l (列出用戶的定時任務列表)
PS:特別注意,crond的任務計劃, 有並不會調用用戶設置的環境變量,它有本身的環境變量,當你用到一些命令時,好比mysqldump等須要環境變量的命令,手工執行腳本時是正常的,但用crond執行的時候就會不行,這時你要麼寫完整的絕對路徑,要麼將環境變量添加到 /etc/crontab 中。
好了,計劃任務就是這麼簡單了,可是計劃任務,執行的語句若是是多條,則須要用藥shell腳本,本身先寫一個shell腳本,而後在計劃任務中,執行這個腳本便可。至於shell腳本的寫法, 這裏不贅述。