Linux 經常使用命令學習

一、ps、grep和kill聯合使用殺掉進程

 
例如要殺掉hello這個進程,使用下面這個命令就能直接實現。
 

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腳本的寫法, 這裏不贅述。

相關文章
相關標籤/搜索