vim添加指定開始的行號
:g/^/ s//\=line('.')+765.':'/
vim 將文件所有行合併到一行
在 Normal Mode下執行:
ggvGJ
逗號分割的字符串轉化成多行
%s/,/\r/g
gg 用於跳到行首
v 轉換成 visual 模式
G 跳到最後一行
J 合併行
大文件分割:
split -a 2 -d -l 790000 check_video_list.txt check_video_list
抓包命令:
#!/bin/bash /usr/sbin/tcpdump -i eth0 host fusion.qiniuapi.com -s0 -w fusion.qiniuapi.com.dump.cap
curl查看網絡情況
#!/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}\n";done
curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" "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"
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 "\ntime_nslookup:%{time_namelookup} time_connect:%{time_connect} time_starttranfer:%{time_starttransfer} time_total:%{time_total}\n=========\n\n";sleep 5
查看內存佔用
free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}'
#!/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%\n",('$phymemused'/'$phymem')*100}' sleep 3 done
svn 查看文件log
svn log -l 5 test.php svn diff -r r9982:r9988 test.php svn diff -r PREV:COMMITTED test.php
vim批量刪除註釋
:g/^#/d
vim刪除空行
:g/^$/d
查看網卡實時流量
nload iftop bmon
shell執行php腳本
#!/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 查找
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
查找替換
find dirname/ -name "*.m3u8" |xargs sed -i 's/#EXT-X-ENDLIST/#EXT-X-ENDLIST\n/g'
刪除兩分鐘之前的文件
find /var/www -type f -mmin 2 -exec rm {} \;
redis 批量刪除
redis-cli keys "prefix*" | xargs redis-cli del
查看linux當前連接數
netstat -an|awk '/tcp/ {print $6}'|sort| uniq -c 或 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 或 netstat -antp | grep 80 | grep ESTABLISHED -c
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' cat /proc/net/sockstat
統計nginx日誌訪問ip數
awk '{print $1}' access.log |uniq -c |wc -l
通過SSH將MySQL數據庫複製到新服務器
mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uroot -p'password' cms | ssh -C [email protected] "mysql -uUSER -pPASS NEW_DB_NAME"
通過壓縮的 SSH 隧道 Dump 一個 MySQL 數據庫,將其作爲輸入傳遞給 mysql 命令,我認爲這是遷移數據庫到新服務器最快最好的方法。
快速備份mysql大表
mysqldump -q -e --single-transaction --ignore-table=table1 --ignore-table=table2 -uroot -p'' --max_allowed_packet=16777216 --net_buffer_length=8192 dbname > dbname.sql
創建數據庫
CREATE DATABASE cms default charset utf8 COLLATE utf8_general_ci;
導入數據
mysql -u root -p
use cms; source /home/lhb/data/cms.sql
備份數據庫
mysqldump -uroot -p cms --ignore-table=cms.history --ignore-table=cms.statistics > cms.sql
/usr/bin/mysqldump -u root -p cms > /home/lhb/data/cms.sql
mysqldump --all-databases --lock-all-tables --lock-all-tables --flush-logs --master-data=2 > all.sql
把文件上傳到遠程服務器,把文件從遠程服務器copy到本地
scp /home/lhb/data/cms.sql [email protected]:/home/lhb/data
scp [email protected]:/home/lhb/data/cms.sql /home/lhb/data
mysql給root啓用遠程登錄
GRANT all privileges ON *.* TO 'root'@'%' IDENTIFIED BY '123'; flush privileges;
----------------------------------------------------------------------- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'test'@'172.16.%.%' IDENTIFIED BY 'test'
給表添加索引
ALTER TABLE ad_event ADD INDEX ind_order(order_id)
執行定時任務
0 2 * * * /home/lhb/cli/chk_nginx.sh >> /dev/null &
查看滿查詢日誌
show variables like '%slow%';
在線開啓mysql慢查詢
set global slow_query_log=1; set global long_query_time=2; set global slow_query_log_file='mysql-slow.log';
記錄沒有使用索引的sql
set global log_queries_not_using_indexes = 1;
關閉慢查詢
set global slow_query_log=0;
查看二進制事件信息
show binlog events in 'mysql-bin.000001';
show binlog events in 'mysql-bin.000001' from 107;
查看所有二進制文件
show binary logs;
刪除二進制文件
purge binary logs to '指定的二進制文件'
分析nginx log
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
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條
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進程
ps -ef |grep nginx |grep -v grep |awk '{print $2}' |xargs kill -9
查看nginx進程數
watch -n 1 -d "grep nginx|wc -l"
查看mysql進程鏈接數
ps axef | grep mysqld -c
查看端口是否佔用
lsof -i:80 或者 netstat -an |grep 80
查看系統調用的參數,返回值,耗時
strace -p
查看進程pid打開的文件描述符
lsof -p pid
查詢mysql 表信息-建立時間 更新時間 行數 版本等等
show table status; show table status like '%tablename%';
UPDATE video_link SET location = replace( location, '\t', '' ) SELECT `video_id` FROM `video_link` where left(`location`,1) = '\t' delete from video where starttime<(unix_timestamp()-3600*24+7); select count(*) from video where starttime<(unix_timestamp()-3600*24+7);
curl調用
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"
現在內存中建立一個文件夾
ln -s /dev/shm/checkfile /var/www/checkfile
linux 下 取進程佔用 cpu 最高的前10個進程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +10|head
linux 下 取進程佔用內存(MEM)最高的前10個進程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +10|head
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
查看網絡流量
watch more /proc/net/dev watch ifconfig
查看文件夾的大小
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文件目錄的大小和文件夾包含的文件數 統計總數大小
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模擬瀏覽器下載文件
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端口映射
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
查看清除mysql狀態該信息
show global status like 'Max_used_connections'; flush status
select @@max_user_connections;
查看設置mysql 最大連接數
show variables like 'max_connections'; set GLOBAL max_connections=2000;
mysql開啓獨立表空間
[mysqld] innodb_file_per_table
查看
show variables like '%per_table%';
sqlite查看命令
.header on .schema user .dump user select * from sqlite_master where type="table" and name="user";
更新數據庫多表相同字段數據
cat sn.txt 10000015 35084355 10000039 35084356
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;
生成隨機字符:
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
評估磁盤讀寫性能極限
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
創建賬戶和密碼
useradd lhb echo "lhb" | passwd --stdin lhbpwd
抓包命令
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
tcpdump -iany udp port 53
刪除指定數據庫的表
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:執行命令歷史中最近一個以指定字符串開頭的命令
!$:引用前一個命令的最後一個參數
git push -u origin newbranch