1. 批量修改文件
sed -i 's/10.133.7.83/10.133.7.80/' *.conf
2. UNIX时间戳与时间字符串的转换命令
#UNIX的时间戳转换为时间字符串
SELECT FROM_UNIXTIME( 1317030898, '%Y-%m-%d' );
date -d '1970-01-01 UTC 1317030898 seconds'
#时间字符串转换为UNIX的时间戳
date -d "2010-10-18 00:00:00" +%s
#转化为天
date -d '1970-01-01 UTC 15988 days'
Thu Oct 10 08:00:00 CST 2013
#计算距离1970-01-01到现在的天数
echo $(($(date +%s)/86400))
16407
3. 使用awk统计日志时间脚本例子
#使用awk统计时间
例如日志:
LogIP=10.224.148.45&SrcIP=10.153.131.21&LogType=realwater_report&TradeTime=1417140422:938702&TradeTimeStr=2014-11-28 10:07:02 938702&CostTime=149&ClientVer=android&CmdCode=report&ResultCode=0&ResultInfo=success
执行如下命令:
$ cat log.2014-11-28.0|awk -F "&" '{print $6}'
CostTime=149
CostTime=172
CostTime=39
CostTime=87
...
#统计时耗求平均值:
$ cat log.2014-11-28.0|awk -F "&" '{print $6}'|awk -F '=' '{print $2}'|awk '{a+=$1}END{print a/NR}'
124.938
4. 拷贝文件某几行
sed -n '1,10000p' a.txt >> b.txt
5. IP地址与int整型的转换
#IP_INT.sh
#!/bin/sh
if [ $# -ne 2 ]
then
echo "$0 -[i|n] [ip|num]"
exit 1
fi
function num2ip()
{
num=$1
a=$((num>>24))
b=$((num>>16&0xff))
c=$((num>>8&0xff))
d=$((num&0xff))
echo "$d.$c.$b.$a"
}
function ip2num()
{
ip=$1
a=`echo $ip | awk -F'.' '{print $1}'`
b=`echo $ip | awk -F'.' '{print $2}'`
c=`echo $ip | awk -F'.' '{print $3}'`
d=`echo $ip | awk -F'.' '{print $4}'`
echo "$(((d< <24)+(c<<16)+(b<<8)+a))"
}
if [ "$1" = "-i" ]
then
ip2num $2
elif [ "$1" = "-n" ]
then
num2ip $2
else
echo "$0 -[i|n] [ip|num]"
exit 1
fi
cat a.txt | sort -nr | uniq -c | sort -nr | less
7. 申请大内存二维数组
#define MaxQQUin 0xfffffff
//方法1:
char **qquin=new char*[MaxQQUin];
for(i=0;i<MaxQQUin;i++)
{
qquin[i] = new char[15];
}
//方法2:
char **qquin;
qquin = (char**)malloc(MaxQQUin*sizeof(char*));
for(i=0;i<MaxQQUin;i++)
{
qquin[i] = (char*)malloc(15*sizeof(char));
}
命令ipcs用于读取System V IPC目标的状态。
ipcs -q: 只显示消息队列。
ipcs -s: 只显示信号量。
ipcs -m: 只显示共享内存。
ipcs –help: 其他的参数。
lsof -p 32179|wc -l
netstat |grep "10.137.147.178:30555" |wc -l
10. Tcpdump监听端口
使用root用户:
tcpdump tcp port 端口号 -X -s 0 -i eth1
tcpdump host 机器ip -X -s 0 -i eth1
tcpdump host 机器ip and tcp port 端口号 -X -s 0 -i eth1
使用说明:
监视指定网络接口的数据包
tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。
监视指定主机的数据包
打印所有进入或离开sundown的数据包.
tcpdump host sundown
也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump host 210.27.48.1
打印helios 与 hot 或者与 ace 之间通信的数据包
tcpdump host helios and \( hot or ace \)
截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host ace and not helios
如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname
监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname
11. 只知道进程的端口,怎么查询启动的目录?
(1)先找到进程id,执行该命令:netstat -anp|grep 端口号
如果进程启动用户不是当前用户,则需要使用root用户。
$ netstat -anp|grep 12010
tcp 0 0 10.224.148.45:12010 0.0.0.0:* LISTEN 6336/./drm_gnp
(2)根据进程id查找启动目录,执行该命令:ls -al /proc/进程id
ls -l /proc/6336
12. 逐行读取文件内容
shell读取文件的每一行 写法一:
#!/bin/bash
while read line
do
echo $line
done < filename(待读取的文件)
写法二:
#!/bin/bash
cat filename(待读取的文件) | while read line
do
echo $line
done
![](http://avocado.oa.com/fconv/files/201412/89603635a618df2cb68868534951ad68.files/image002.gif)
写法三:
![](http://avocado.oa.com/fconv/files/201412/89603635a618df2cb68868534951ad68.files/image002.gif)
for line in `cat filename(待读取的文件)`
do
echo $line
done
13. 文件内容反向输出
输入:产品 人名;人名;...
输出:人名 产品;产品;...
1、先提取人名:>cat test.txt | awk -F ";" 'BEGIN{i=1}{for(i=2;i<=NF;i++)print $i}END{}' >>a.txt
2、去重:>cat a.txt | sort -nr | uniq -c | sort -nr|awk -F ' ' '{print $2}'>>result.txt
3、反向输出
#!/bin/bash
while read line
do
i=0
echo $line
grep $line test.txt >> tmp.txt
echo -n $line >> OK1.txt #回车不换行
while read line
do
i=`expr $i + 1`
cat tmp.txt|awk -F ';' '{printf $1 ";"}'>> OK1.txt
done < tmp.txt
echo " "$i >> OK1.txt
rm tmp.txt
done < result.txt #filename(待读取的文件)hhfghfghfghfgh
14. 使用IPTABLES手工设置你的网络连接
1、网络不可达:
客户端:iptables -A OUTPUT -d 10.153.131.84 -p tcp --dport 17001 -j DROP
> telnet 10.153.131.84 17001
Trying 10.153.131.84...
通过使用telnet命令,如果一直是Trying状态,则说明网络不可达。
2、 连接拒绝:
在客户端使用下面命令:
iptables -A OUTPUT -d 10.153.131.84 -p tcp --dport 17001 -j REJECT --reject-with tcp-rst
> telnet 10.153.131.84 17001
Trying 10.153.131.84...
telnet: connect to address 10.153.131.84: Connection refused
从telnet结果上看,连接已经拒绝。
查看:iptable -L
删除:iptable -D OUTPUT 序号
15. 跟踪进程运行
通用的完整用法:
strace -o output.txt -T -tt -e trace=all -p 28979
上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
16. 查看DB权限
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
mysql> show grants for test@10.224.148.45;
17. 导入\导出mysql数据
导出、导入表中的记录语句:
(1)从DB中导出到文件
mysql>select * into outfile '/data/home/mmp/kalyzhou/t_drm_rule_lib.txt' from t_drm_rule_lib;
(2)从文件导入到DB
mysql>load data infile '/data/home/mmp/kalyzhou/t_drm_rule_lib.txt' into table t_drm_rule_lib;
导入、导出数据库
(1)导出本地数据库:
#导出数据库DB
mysqldump -u 用户名 -p 数据库名> 导出的文件名
例如:mysqldump -u root -p db_name > test_db.sql
#mysql导出数据库一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p test_db users> test_users.sql (结尾没有分号)
(2)导入本地数据库
mysql -u用户名 -p 数据库名 < 数据库名.sql
18. TCP链接数配置修改
通常压力测试下,TCP短链接数过多,需要设置系统配置
可依需要在 /etc/sysctl.conf 中增加如下配置
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000
#表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_tw_buckets = 5000
#表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,
#TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
#对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,
典型修改:
修改如下两个参数,即可让TIME_WAIT 状态的sockets被快速回收
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
生效:
如下命令可是配置立即生效
/sbin/sysctl –p