linux命令随笔

2016年10月17日

grep 输出匹配内容

grep -oE sub[0-9]{15} log

-o 只输出匹配内容

-E 扩展的正则表达式匹配

分组统计数量

sort file | uniq -c

sort 参数

  -k : 按照指定key进行排下
  -r : revert,倒序
  -n : number,将用于排序的字符串列当作数字进行处理

sort -k -5rn 按照第五列倒序

ssh 保存known_host,且不询问是否继续连接新地址

    在 .ssh/config 文件中加入

    host *

    UserKnownHostsFile /dev/null

    StrictHostKeyChecking no

top 与 free 中的 buffers 和 cached

linux 会将空闲内存用作磁盘文件的缓存使用,用以提升读取速度。

  • buffers : 是正在执行的I/O操作的缓冲
  • cached : 是已经完成的I/O操作的缓存

参考:

https://serverfault.com/questions/23433/in-linux-what-is-the-difference-between-buffers-and-cache-reported-by-the-f

https://askubuntu.com/questions/198549/what-is-cached-in-the-top-command

/tmp 默认删除时间

http://www.opsers.org/base/clean-up-on-the-linux-system-tmp-folder-you-may-want-to-know.html

查找指定文件目录将文件压缩

    #!/bin/sh
    for logfile in $(find $filePath -regex ".+[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].*.log")
    do
     echo $logfile
    done

curl 命令

增加用户名密码鉴权

curl -X POST –user username:password ‘http:example.com’

查看进程启动时间和运行时间

    ps -eo pid,lstart 启动时间
    ps -eo pid,etime   运行多长时间.
    ps -eo pid,lstart,etime | grep 进程id

随机生成密码

  openssl rand -base64 18

shell 字符串操作

${str#} 表示从左边开始删除字符,# 后面跟指定字符串或者通配符,例如 str=xiaomo.wj, ${str#xi}结果为 aomo.wj , ${str#.} 结果为 wj , 一个 # 表示非贪婪模式, ## 表示贪婪模式, str=’/a/b/c/d/e’, ${str#/} 结果为 a/b/c/d/e , ${str##*/} 结果为 e

${str%} 表示从右边开始删除,% 后面是匹配的后缀字符串。

http://www.cnblogs.com/myitm/archive/2012/07/05/2577416.html

http://www.cnblogs.com/pengdonglin137/p/3272361.html

获取所有 es 索引

  curl -XGET 127.0.0.1:9200/_cat/indices

yarn 获取集群日志

  yarn logs -applicationId application_编号

lsof 列出持有文件句柄的进程

文件被删除,但是文件句柄还被其他进程持有的话,无法释放文件所占用的存储空间

https://blog.csdn.net/ljguo212/article/details/8282133

多主机同时执行命令 polysh

查询 使用端口的进程pid

    netstat -anp | grep 端口 | awk '{print $7}' | awk -F"/" '{ print $1 }'

linux本地端口复用

重点:内核是以一个5元信息组来标识不同的socket(源地址、源端口、目的地址、目的端口、协议号) 所以即使本地端口一样,也是可以正常使用连接的(需要设置 SO_REUSEPORT)

https://blog.lilydjwg.me/2015/8/19/tcp-fun.180084.html

spark集群报错

原因是内存不够

  executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM  

自定列求和

  awk '{sum += $8};END {print sum}'

  awk '/aaa/ {sum += $2};END {print sum}' test # 对文件test中 第一列为aaa的行求和

lsof 查看端口使用情况

  lsof -i:22 #查看22端口连接情况

shell 中特殊变量

    $0 这个程式的执行名字
    $n 这个程式的第n个参数值,n=1..9
    $* 这个程式的所有参数,此选项参数可超过9个。
    $# 这个程式的参数个数
    $$ 这个程式的PID(脚本运行的当前进程ID号)
    $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
    $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
    $- 显示shell使用的当前选项,与set命令功能相同
    $@ 跟$*类似,但是可以当作数组用    

nohup 和 & 的差别

  nohub 忽略终端关闭信号
  & 后台执行进程          

nginx 限流策略

  • 连接数限流模块ngx_http_limit_conn_module
  • 漏桶算法实现的请求限流模块ngx_http_limit_req_module

tar 打包

    tar -cf 不压缩打包
    tar -zcf 压缩打包
    tar -cf --exclude=tomcat/logs 排除指定文件夹

vim 替换指定字符串

    :%s/foo/bar/g    使用 bar 替换所有的 foo

# linux 进程间通信

https://blog.csdn.net/gatieme/article/details/50908749

CPU, CPU核数,逻辑CPU个数关系

https://blog.csdn.net/dba_waterbin/article/details/8644626

CPU超线程

https://news.mydrivers.com/1/546/546656.htm

软中断问题排查

https://huoding.com/2013/10/30/296

TCP连接状态详解

    LISTEN: 侦听来自远方的TCP端口的连接请求
    SYN-SENT: 再发送连接请求后等待匹配的连接请求
    SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
    ESTABLISHED: 代表一个打开的连接
    FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
    FIN-WAIT-2: 从远程TCP等待连接中断请求
    CLOSE-WAIT: 等待从本地用户发来的连接中断请求
    CLOSING: 等待远程TCP对连接中断的确认
    LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
    TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
    CLOSED: 没有任何连接状态

提取时间段内的日志

从第一处匹配开始位置正则的位置,到第一个匹配结束正则的位置 中间的所有日志。

2019-01-17 1[1-8]:[0-9][0-9]:[0-9][0-9] 为开始位置正则 2019-01-17 18:[0-9][0-9]:[0-9][0-9] 为结束位置正则

sed -n ‘/2019-01-17 1[1-8]:[0-9][0-9]:[0-9][0-9]/,/2019-01-17 18:[0-9][0-9]:[0-9][0-9]/p’ logfile

查看进程io情况

    sudo yum install iotop

    sudo iotop -oP

操作系统64位和32位的区别及原理

操作系统64位和32位的区别及原理

ulimit 限制用户资源使用

http://man.linuxde.net/ulimit