常用shellsql命令

科技小先鋒發表於2017-11-14

抓包命令:

1
2
#!/bin/bash
/usr/sbin/tcpdump -i eth0 host fusion.qiniuapi.com -s0  -w fusion.qiniuapi.com.dump.cap


curl檢視網路情況

1
2
3
#!/bin/bash
#for i in {0..10000};do bash -c "bash prefetch.sh 2>&1" >> prefetch.log;done
for id in `seq 1 1000`;do curl "http://baidu.com" -o /dev/null -s -w "dns: %{time_namelookup} - connect: %{time_connect} - total: %{time_total}
"
;done


1
curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"
"
   "http://api.spark.ucloud.cn/?Action=PrefetchDomainCache&DomainId=ucdn-p50cmv&PublicKey=YakUkLeSntu13jD3d3XY3eklNgx5pS7M9905EUU3CEE%3D&UrlList.0=http%3A%2F%2Fauc.tangdou.com%2F5ED0E62CD33F15F89C33DC5901307461-20.mp4&Signature=70369069dfd920a898e6e167e60bec090e2dabeb"
1
curl -vX POST `http://fusion.qiniuapi.com/v2/tune/prefetch` -H `Authorization: QBox 557TpseUM8ovpfUhaw8gfa2DQ0104ZScM-BTIcBx:Safex72PcjqAzBuW0QPze8PyJ8o=` -H `Content-Type: application/json` -d `{"urls": ["http://o8aazd8hz.qnssl.com/ddCG.mp4","http://o8aazd8hz.qnssl.com/ddCG.mp4"]}`  -w "
time_nslookup:%{time_namelookup} time_connect:%{time_connect} time_starttranfer:%{time_starttransfer} time_total:%{time_total}
=========

"

;sleep 5


檢視記憶體佔用

1
free -m | sed -n `2p` awk `{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}`
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
while :
    do
    phymem=`free grep "Mem:" |awk `{print $2}``
    phymemused=`free grep `buffers/cache` awk `{print $3}``
    # echo $phymem
    # echo $phymemused
    awk `BEGIN{printf"%.2f%
",(`
$phymemused`/`$phymem`)*100}`
    sleep 3
    done


svn 檢視檔案log

1
2
3
svn log -l 5 test.php
svn diff -r r9982:r9988 test.php
svn diff -r PREV:COMMITTED test.php


vim批量刪除註釋

1
:g/^#/d

vim刪除空行

1
:g/^$/d

檢視網路卡實時流量

1
2
3
nload
iftop
bmon


shell執行php指令碼

1
2
3
4
5
6
7
#!/bin/bash
count=`ps -ef | grep script.php | grep -v grep | wc -l`
baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
cd $baseDirForScriptSelf
if [ $count -eq 0 ]; then
  nohup  php script.php >>/dev/null 2>&1 &
fi


shell 查詢

1
2
3
find dirname -type f -name "*.php"|xargs grep "sql"
find ./ -mmin +2 -type f  -exec ls -l {} ;
find ./ -type f -name "ad*_2012-03*.log" |xargs grep `4f5ff7a0d7a98_b.jpg` -l


查詢替換

1
find dirname/ -name "*.m3u8" |xargs sed -i `s/#EXT-X-ENDLIST/#EXT-X-ENDLIST
/g`


刪除兩分鐘之前的檔案

1
find /var/www -type f -mmin 2 -exec rm {} ;


redis 批量刪除

1
redis-cli keys "prefix*" xargs redis-cli del


檢視linux當前連線數

1
2
3
4
5
netstat -an|awk `/tcp/ {print $6}`|sortuniq -c
netstat -n | awk `/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}`
netstat -antp | grep 80 | grep ESTABLISHED -c
1
2
ss -ant | awk `NR>1 {++s[$1]} END {for(k in s) print k,s[k]}`
cat /proc/net/sockstat


統計nginx日誌訪問ip數

1
awk `{print $1}` access.log |uniq -c |wc -l


通過SSH將MySQL資料庫複製到新伺服器

1
mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uroot -p`password` cms | ssh -C root@192.168.2.30 "mysql -uUSER -pPASS NEW_DB_NAME"

通過壓縮的 SSH 隧道 Dump 一個 MySQL 資料庫,將其作為輸入傳遞給 mysql 命令,我認為這是遷移資料庫到新伺服器最快最好的方法。


快速備份mysql大表

1
mysqldump -q -e --single-transaction  --ignore-table=table1 --ignore-table=table2 -uroot -p``   --max_allowed_packet=16777216 --net_buffer_length=8192  dbname  > dbname.sql


建立資料庫

1
CREATE DATABASE cms default charset utf8 COLLATE utf8_general_ci;

匯入資料

1
mysql -u root -p
1
2
use cms;
source /home/lhb/data/cms.sql


備份資料庫

1
mysqldump -uroot -p cms --ignore-table=cms.history  --ignore-table=cms.statistics > cms.sql
1
/usr/bin/mysqldump -u root -p cms > /home/lhb/data/cms.sql
1
mysqldump --all-databases --lock-all-tables --lock-all-tables --flush-logs --master-data=2 > all.sql


把檔案上傳到遠端伺服器,把檔案從遠端伺服器copy到本地

1
scp /home/lhb/data/cms.sql lhb@192.168.1.30:/home/lhb/data
1
scp root@172.17.1.17:/home/lhb/data/cms.sql /home/lhb/data



mysql給root啟用遠端登入

1
2
GRANT all privileges ON *.* TO `root`@`%` IDENTIFIED BY `123`;
flush privileges;
1
2
-----------------------------------------------------------------------
GRANT ALL PRIVILEGES ON *.* TO `root`@`%` IDENTIFIED BY `123` WITH GRANT OPTION;
1
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO `test`@`172.16.%.%` IDENTIFIED BY `test`


給表新增索引

1
ALTER TABLE ad_event ADD INDEX ind_order(order_id)


執行定時任務

1
0 2 * * * /home/lhb/cli/chk_nginx.sh  >> /dev/null &


檢視滿查詢日誌

1
show variables like `%slow%`;


線上開啟mysql慢查詢

1
2
3
set global slow_query_log=1;
set global long_query_time=2;
set global slow_query_log_file=`mysql-slow.log`;


記錄沒有使用索引的sql

1
set global log_queries_not_using_indexes = 1;


關閉慢查詢

1
set global slow_query_log=0;


檢視二進位制事件資訊

1
show binlog events in `mysql-bin.000001`;
1
show binlog events in `mysql-bin.000001` from 107;


檢視所有二進位制檔案

1
show binary logs;


刪除二進位制檔案

1
purge binary logs to `指定的二進位制檔案`


分析nginx log

1
cat cms_access.log.1 |grep -v "templates" awk `{split($7,bbb,"?");print bbb[1]}` |sed `s/[0-9].*/num/g` sort uniq -c | sort -n -k 1 -r | head -n 100


分析廣告nginx log

1
cat ad_access.log.1 |grep -Po "a=[0-9a-zA-Z]*[&|[:space:]]" |awk -F `[=&]` `{print $2}` sort |uniq -c |sort -n -k 1 -r |head -n 100


統計 par 的IP,被多少個其它IP地址訪問前20條

1
grep par access.log | awk `{print $7" "$1}` |awk -F "par=" `{print $2}`|sort|uniq|awk `{print $1}`|uniq -c|sort -n|tail -n 20


kill程式

1
ps -ef |grep nginx |grep -v grep |awk `{print $2}` |xargs kill -9


檢視nginx程式數

1
watch -n 1 -d "grep nginx|wc -l"


檢視mysql程式連結數

1
ps axef | grep mysqld -c


檢視埠是否佔用

1
2
3
lsof -i:80
或者
netstat -an |grep 80


檢視系統呼叫的引數,返回值,耗時

1
strace -p

檢視程式pid開啟的檔案描述符

1
lsof -p pid


查詢mysql 表資訊-建立時間 更新時間 行數 版本等等

1
2
show table status;
show table status like `%tablename%`;


1
2
3
4
UPDATE video_link SET location = replace( location, ` ``` )
SELECT `video_id` FROM `video_link`  where left(`location`,1) = ` `
delete from video where starttime<(unix_timestamp()-3600*24+7);
select count(*) from video where starttime<(unix_timestamp()-3600*24+7);


curl呼叫

1
2
curl  -v -H "Content-Type: application/json"  -X POST -d `{"user_name":"lhb"}` "http://url"
curl -v -H "Content-Type: application/json" "http://url" -X POST --data "data_content"

現在記憶體中建立一個資料夾

1
ln -s  /dev/shm/checkfile  /var/www/checkfile


linux 下 取程式佔用 cpu 最高的前10個程式

1
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +10|head


linux 下 取程式佔用記憶體(MEM)最高的前10個程式

1
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +10|head

 

1
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head


檢視網路流量

1
2
watch more /proc/net/dev
watch ifconfig


檢視資料夾的大小

1
2
3
4
du -h --max-depth=1 work/testing
du -h --max-depth=1 work/testing/*
du -h --max-depth=1 work/testing/logs/
du -h --max-depth=1 work/testing/logs/*


檢視linux檔案目錄的大小和資料夾包含的檔案數 統計總數大小

1
2
3
4
5
6
7
8
du -sh xmldb/
du -sm * | sort -n //統計當前目錄大小 並安大小 排序
du -sk * | sort -n
du -sk * | grep guojf //看一個人的大小
du -m | cut -d "/" -f 2 //看第二個/ 字元前的文字
檢視此資料夾有多少檔案 /*/*/* 有多少檔案
du xmldb/
du xmldb/*/*/* |wc -l

解釋:

wc [-lmw]

引數說明:

-l :多少行

-m:多少字元

-w:多少字


wget模擬瀏覽器下載檔案

1
wget -x --header="User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)" -O tess.mp4  `http://f.youku.com/player/getFlvPath/sid/00_00/st/flv/fileid/03000201004B68D8A10C3B02E28CA60F302730-0349-CBF3-D0CF-B3E30E8C08AA?K=1c5738eed4f0012b2828aa27`


tomcat 啟動把8080->80埠對映

1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080


檢視清除mysql狀態該資訊

1
2
show global status like `Max_used_connections`;
flush status
1
select @@max_user_connections;


檢視設定mysql 最大連線數

1
2
show variables like `max_connections`;
set GLOBAL max_connections=2000;


mysql開啟獨立表空間

1
2
[mysqld]
innodb_file_per_table

檢視

1
show variables like `%per_table%`;


sqlite檢視命令

1
2
3
4
.header on
.schema user
.dump user
select from sqlite_master where type="table" and name="user";


更新資料庫多表相同欄位資料

1
2
3
cat sn.txt
10000015  35084355
10000039  35084356
1
2
3
4
5
6
7
8
9
user="root"
pass=`1234`
db="test"
tnames=("table1" "table2" "table3")
for table in ${tnames[@]};do
#echo $table
cat sn.txt | awk `{print "update `$table` set user_id = "$2 " where user_id = " $1 ";"}` >> update.sql
done
mysql -u "$user" -p"$pass" "$db" < update.sql;


生成隨機字元:

1
dd if=/dev/random count=1 bs=512 |md5sum


系統效能優化 常用命令:

top -ab -n 1

top -ab -n 1 |grep nginx 

vmstats

檢視cpu佇列,以及負載情況

sar -q -f sa08 

runq-sz:等待執行的任務佇列長度。越長阻塞越嚴重

plist-sz:佇列中的任務總數


cpu佔用率

sar -p -f sa08


檢視記憶體:

sar -r -f sa08

sar -B -f sa08

檢視sawp的交換的頻繁程度

sar -W -f sa08


檢視IO

sar -b -f sa08

sar -d -f sa08


檢視網路

sar -n DEV -f sa08


評估磁碟讀寫效能極限

1
fio -filename=/data/test -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size 2G -numjobs=10 -runtie=30 -group_reporting -name=mytest13

建立賬戶和密碼

1
2
useradd lhb
echo "lhb" passwd --stdin lhbpwd


抓包命令

1
2
tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 172.17.10.13
tcpdump -i eth0 -s0 -nn -XX tcp dst port 3306 and dst host 172.17.10.13
1
tcpdump -iany udp port 53


刪除指定資料庫的表

1
mysql -h`127.0.0.1` -utest -p`123456` -nse `show tables` test_db|while read table;do mysql -h127.0.0.1` -utest -123456` -e "drop table $table" test_db;done


bash命令列編輯

    Ctrl+a:跳轉到命令列首。

    Ctrl+e:跳轉到命令列尾

    Ctrl+u:刪除游標至命令列首的內容

    Ctrl+k:刪除游標至命令列委的內容

    Ctrl+l:清屏


命令歷史的使用技巧:

!n:執行命令歷史中的第N條命令

!-n:執行命令歷史中的倒數第N條命令

!!:執行上一條命令

!string:執行命令歷史中最近一個以指定字串開頭的命令

!$:引用前一個命令的最後一個引數


1
git push -u origin newbranch

本文轉自birdinroom 51CTO部落格,原文連結:http://blog.51cto.com/birdinroom/1399418,如需轉載請自行聯絡原作者