linux中的常用命令

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

#计算距离19700101到现在的天数

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< &lt;24)+(c<&lt;16)+(b<&lt;8)+a))"

}

 if [ "$1" = "-i" ]

then

    ip2num $2

elif [ "$1" = "-n" ]

then

    num2ip $2

else

    echo "$0 -[i|n] [ip|num]"

    exit 1

fi

6.  文件统计重复值

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));

  }

 8.  ipcs命令

命令ipcs用于读取System V IPC目标的状态。
ipcs -q: 
只显示消息队列。
ipcs -s: 
只显示信号量。
ipcs -m: 
只显示共享内存。
ipcs –help: 
其他的参数。

9.  监控句柄数、连接数

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

写法三:

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 
#
表示用于向外连接的端口范围。缺省情况下很小:3276861000,改为102465000
net.ipv4.tcp_max_tw_buckets = 5000
#
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,
#TIME_WAIT
套接字将立刻被清除并打印警告信息。默认为180000,改为5000
#
对于ApacheNginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,

典型修改:

修改如下两个参数,即可让TIME_WAIT 状态的sockets被快速回收

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_recycle=1

生效:

如下命令可是配置立即生效

/sbin/sysctl –p


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值