Linux命令进阶

来源:互联网 发布:软件测试的发展史 编辑:程序博客网 时间:2024/06/07 23:11

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\n/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 命令,我认为这是迁移数据库到新服务器最快最好的方法。


创建数据库

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, '\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调用

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


本文出自 “宅鸟乐园” 博客,请务必保留此出处http://birdinroom.blog.51cto.com/7740375/1399418
1 0