• linux命令


    1、nc命令详解

    #侦听和连接任意的TCP或UDP数据
    nc - arbitrary TCP and UDP connections and listens
    #参数:
    nc 
        -i interval:时间周期
        -p source_port:源端口
        -s source_ip_address:源IP
        -T ToS
        -w timeout
        -X proxy_protocol
        -x proxy_address[:port]] [hostname] [port[s]]
        -l listen:监听模式,只能监听进向连接,不能监听初始化的连接,不能与-s,-p,-z参数联合使用,在使用-w参数设置超时时间时会失效.
        -n 直接使用IP地址,不使用DNS解析
        -z 扫描通信端口,不发送任何数据
        -u 使用UDP协议,默认为TCP协议
        -v 输出过程
    
    [root@MySQL ~]# nc -l 1234   #通过1234端口连接
    nihao
    
    [root@ZabbixServer ~]# nc 192.168.72.16 1234
    nihao
    
     
    
     
    
    实例:通过NC监听51444端口,服务端通过该端口发送实时更新的日志信息,客户端接收日志信息
    
    tail -f  DASHBOARD_ht__564c08f5-02.log |xargs -i echo {} |nc -u -p 51444 172.27.4.2 51444    #服务端启用了udp进程
    
    nc -u -l 51444 >> aa.txt    #客户端接收信息到指定文件中;注意:如果文件aa.txt使用tail -f实时查看更新的话,就有可能造成该文件被锁定,导致后续的日志更新内容无法写入;
    View Code

    2、tee命令

    tee命令的作用是在同时输出命令结果的时候,将命令的输出加入的指定的文件中,如下:
    [root@MySQL ~]# who |tee (-a可选,表示追加) who.out
    
    当然,tee命令后面跟的内容也可以是别的终端
    View Code

    3、用()和{}将命令结合在一起

    如果希望将几个命令结合在一起执行,shell提供了两种方法,既可以在当前shell也可以在子shell中执行一组命令。

    如下:

    [root@MySQL ~]# ls && ( who;ps -ef; )
    如果使用{}来代替(),那么相应的命令将在当前shell中作为一个整体被执行。
    如下:
    [root@MySQL ~]# A=1;echo $A;{ A=2; };echo $A   #改变了当前shell的值
    1
    2
    [root@MySQL ~]# A=1;echo $A;( A=2; );echo $A    #未改变当前shell的值
    1
    1
    View Code

    4、awk内置函数

    a、gsub(r,s)   #在整个$0中用s替代r
         gsub(r,s,t)    #在整个t中用s替代r
    gsub函数有点类似于sed查找和替换,它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式形式执行;
    [root@MySQL ~]# cat >> grade.txt <<EOF
    > J.Troll 07/99   4842    Brown-3 12      26      26
    > EOF
    [root@MySQL ~]# awk 'gsub(/4842/,4888){print $0}' grade.txt 
    J.Troll 07/99   4888    Brown-3 12      26      26
    [root@MySQL ~]# cat grade.txt      #不会改变原文件的内容
    J.Troll 07/99   4842    Brown-3 12      26      26
    
    b、index(s,t)    #返回s中字符串t的第一个位置
    [root@MySQL ~]# awk 'BEGIN {print index("Bunny","ny")}'
    4
    
    c、length    #返回所需要字符串的长度
    [root@MySQL ~]# awk 'BEGIN {print length("This is a test")}'    
    14
    
    d、match    #测试目标字符串是否包含查找字符串的一部分,可以对查找部分使用正则表达式,成功出现字符的排列数,失败返回0,如下:
    [root@MySQL ~]# awk 'BEGIN {print match("ABCD",/d/)}'
    0
    [root@MySQL ~]# awk 'BEGIN {print match("ABCD",/C/)}'
    3
    [root@MySQL ~]# awk '$1=="J.Troll" {print match($1,"r")}' grade.txt
    
    e、split    #将字符串通过指定的字符进行分割,放入指定的数组中
    [root@MySQL ~]# awk 'BEGIN {split("123#456#789",array,"#");for(i=1;i<=3;i++)print a
    rray[i]}' 
    
    在使用awk数组的时候:
    [root@MySQL ~]# awk 'BEGIN {record="123#456#789";split(record,myarray,"#")} END{for
     (i in myarray) {print myarray[i]}}' grade.txt 
    123
    456
    789
    
    f、substr   
    [root@MySQL ~]# awk '$1=="J.Troll" {print substr($1,1,5)}' grade.txt    #从指定字符串的1~5截取字符串
    J.Tro
    
    [root@MySQL ~]# awk '{print substr($1,3)}' grade.txt 
    Troll    #从第三个字符开始往后截取
    [root@MySQL ~]# awk 'BEGIN{STR="This is a test"} END{print substr(STR,4)}' grade.tx 
    t 
    s is a test
    View Code

     5、set和eval

    set 可以设置系统的变量
    [root@MySQL shelltest]# set -- "I am " Charles
    [root@MySQL shelltest]# echo $#    #变量的个数
    2
    
    eval  有双重扫描作用,如下
    [root@MySQL shelltest]# a1=123
    [root@MySQL shelltest]# b=1
    [root@MySQL shelltest]# echo ${a$b}
    ${a1}
    [root@MySQL shelltest]# eval echo ${a$b}
    123
    View Code

     6、awk引用外部变量

    当awk运行于shell环境中的时候,awk命令要事先经过shell解释器解释,然后交给awk解释,awk引用外部变量有如下几种方式:
    1、使用-v参数(推荐)
    [root@MySQL scripts]# awk -v a=111 -v b=222 '{print a,b}' ceshi.txt 
    111 222
    111 222
    111 222
    2、使用单双引号
    [root@MySQL scripts]# echo $LOGNAME
    LOG
    [root@MySQL scripts]# awk '{print "'"$LOGNAME"'"}' ceshi.txt 
    LOG
    LOG
    LOG
    这里解释一下外什么要加两个双引号和一个单引号:
    $ str=Hello
    $ awk 'BEGIN{print " '$str' "}'
    Hello
    看上去是双引号套单引号,其实真正的原因为:
    这是shell的功能,shell对单引号和双引号,按从左到右的顺序成对匹配
    awk命令用单引号引起来,就是防止shell对其中内容进行解释
    awk '{print " '$str' "}' file
    实际上就是2部分
    1:awk '{print " '
    2:'"}'
    即awk对2个单引号内的命令起作用
    View Code

     7、在grep中匹配字符串时的点号问题

    #点号会作为任意单个字符处理,如果在字符串中存在.号而没有转义,有可能会匹配到多余的文件或内容
    [root@MySQL ~]# ls -l |grep --color "TTS.*160222.transaction.001.log" 
    -rw-r--r--  1 root root    0 Mar 17 11:30 TTS.160222.transaction.001.log
    -rw-r--r--  1 root root    0 Mar 17 13:17 TTS.160222.transaction1001.log
    
    [root@MySQL ~]# ls -l |grep --color "TTS.*160222.transaction.001.log" 
    -rw-r--r--  1 root root    0 Mar 17 11:30 TTS.160222.transaction.001.log
    View Code

    8、"2>&1"放置在">"前面和后面的区别

    首先看一个例子:

    [root@myhost ~]# aa 2>&1 > test    #和aa >test效果一样
    bash: aa: command not found...
    
    [root@myhost ~]# cat test    #值为空
    
    [root@myhost ~]# ls 2>&1 >test
    [root@myhost ~]# cat test     #有值
    123
    456
    aa
    aaaaa

    [root@myhost ~]# aa >test 2>&1 [root@myhost ~]# cat test #test内容 bash: aa: command not found...

    linux命令手册:http://man.linuxde.net/    

    参考博客:https://phpor.net/blog/

  • 相关阅读:
    C# winform 获取标题栏,状态栏,菜单栏的高度
    <转载>OleDb操作Access数据库:新增记录时获取自动编号的主键值
    《名利场》:微软 “ 失落的十年”
    Lisp的永恒之道(转)
    Google Earth KML数据格式转换成Shp数据格式(转)
    【转】ArcGIS投影转换与坐标转换
    利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
    C# mouseDoubleClick与DoubleClick的关系
    ACCESS通用操作数据类
    VS2010单元测试入门实践教程
  • 原文地址:https://www.cnblogs.com/cqq-20151202/p/5134577.html
Copyright © 2020-2023  润新知