用于记录下积攒的小技巧。

kubectl命令设置别名

  1. pexec() {
  2. echo $1
  3. kubectl exec -it $1 -n tce -- /bin/bash
  4. }
  5. alias pe=pexec
  6. alias ke=pexec
  7. pexec2() {
  8. kubectl -n tce get pod $1 -o yaml | grep image:
  9. }
  10. alias pi=pexec2
  11. alias k='kubectl -n tce '
  12. alias kd='kubectl delete pod -n'
  13. alias ke='pexec'
  14. alias kg='kubectl get pod --all-namespaces -o wide |grep '
  15. alias kgs='kubectl get svc --all-namespaces -o wide |grep '
  16. alias kgtce='kubectl get pod -n tce -o wide |grep '
  17. alias kp='kubectl -n tce get po | grep '
  18. alias ks='kubectl -n tce get svc | grep '
  19. alias na='kubectl get node -o wide'
  20. alias nd='kubectl describe node'
  21. alias nlab='kubectl get node --show-labels'
  22. alias pa='kubectl get pod --all-namespaces -o wide'
  23. alias pag='kubectl get pod --all-namespaces -o wide |grep '
  24. alias pagw='kubectl get pod --all-namespaces -o wide -w |grep'
  25. alias paw='kubectl get pod --all-namespaces -o wide -w '
  26. alias pd='kubectl -n tce describe pod'
  27. alias pl='kubectl -n tce logs'
  28. alias sa='kubectl get svc --all-namespaces -o wide'
  29. alias sag='kubectl get svc --all-namespaces -o wide |grep '
  30. alias sagw='kubectl get svc --all-namespaces -o wide -w |grep'
  31. alias saw='kubectl get svc --all-namespaces -o wide -w '
  32. alias sd='kubectl -n tce describe svc'

rinetd配置端口转发

rinetd用于将 TCP 连接从一个 IP 地址和端口重定向到另一个。rinetd 是一个单进程服务器,它处理与文件中指定的地址/端口对的任意数量的连接/etc/rinetd.conf。由于 rinetd 使用非阻塞 I/O 作为单个进程运行,因此它能够重定向大量连接而不会对机器造成严重影响。这使得在 IP 伪装防火墙内的机器上运行 TCP 服务变得切实可行。rinetd不会重定向 FTP,因为 FTP 需要多个套接字。

参考:

  1. # 配置yum源
  2. cat > /etc/yum.repos.d/nux-misc.repo << EOF
  3. [nux-misc]
  4. name=Nux Misc
  5. baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/
  6. enabled=0
  7. gpgcheck=1
  8. gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
  9. EOF
  10. # 安装
  11. yum -y --enablerepo=nux-misc install rinetd
  12. # 配置将本机80端口的流量转发到192.168.20.2的8081端口
  13. cat >> /etc/rinetd.conf << EOF
  14. 0.0.0.0 80 192.168.20.2 8081
  15. EOF
  16. # 启动服务并设置为开机自启
  17. systemctl start rinetd
  18. /sbin/chkconfig rinetd on
  19. # 确认端口已监听
  20. ss -lnpt | grep -w 80
  21. LISTEN 0 5 *:80 *:* users:(("rinetd",pid=8181,fd=4))
  22. # 访问测试
  23. $ curl http://192.168.20.2:8081
  24. it's ok
  25. $ curl http://127.0.0.1
  26. it's ok

统计系统当前打开的文件数

不要使用lsof | wc -l统计打开的文件数,lsof 的功能是列出打开的文件,在 man 手册的 lsof 描述中,它有一段解释:

    An open file may be a regular file, a directory, a block special file, a character special file, an executing text reference, a library, a stream or a network file (Internet socket, NFS file or UNIX domain socket.)

它解释道:“一个打开的文件可以是一个普通文件、一个目录、一个块状文件、一个字符文件、一个执行中的文本引用、一个库、一个流或一个网络文件(网络套接字、NFS 文件或 UNIX 域套接字”

问题在于, lsof 列出所有打开的文件,包括不使用文件描述符的文件,所以使用 lsof |wc -l 统计出来的数目,会大于 FD 的 file-max,从而没法确定真正大量使用 FD 的进程。

这个坑,是跟着自己的片面理解和搜索引擎上的“引导”,两脚踩了进去……

正确的命令如下:

$ cd /proc
$ find -maxdepth 1 -type d -name '[0-9]*' | xargs -I {} ls {}/fd | wc -l

dmesg命令输出的时间戳转换为utc时间

# 将下面的 1303636.649363 替换为你dmesg命令输出的第一列中的时间戳
$ date -d "1970-01-01 UTC `echo "$(date +%s)-$(cat /proc/uptime|cut -f 1 -d' ')+1303636.649363"|bc ` seconds"

删除磁盘设备的文件系统

$ wipefs -af /dev/vdb

linux逻辑卷分配vg的所有空闲容量

# data_vg是卷组名称,lv是要创建的逻辑卷名称
$ lvcreate -l 100%FREE -n lv data_vg

PyCharm 2019.3.3激活码

JQE11SV0BR-eyJsaWNlbnNlSWQiOiJKUUUxMVNWMEJSIiwibGljZW5zZWVOYW1lIjoicGlnNiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkRQTiIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJETSIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUlNVIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9XSwiaGFzaCI6IjEyNzk2ODc3LzAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-khgsQrnDiglknF0m+yyoYGJXX4vFE3IIVaoMd0bkpfAlMiYM4FUK1JM7uMnVSN0NBC7qtZjYlNzPscEyKE8634uGuY/uToFQnIOCtyUfBxB6j0wF/DcCjhKMNDbnJ1RKZ2VaALuC9B6d6lhtEKm9+urXWTBq7h2VfIBv5wk1Ul9T/m9Dwkz/LccTqnxO0PP288fF13ZbmcLI1/D0dqp/QxYshW6CLR+2Tvk6QCPoaOTKDU/eL1AssD7/mO1g2ZJA+k//8qfRMLgdLmLrMdyiaIhrsM/jJk2qDfTaMcCNylkWXLgKwSvEQG95IhitLN9+GQ4pBW3gOTNl82Gem7jEkA==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ndaik1GD0nyTdqkZgURQZGW+RGxCdBITPXIwpjhhaD0SXGa4XSZBEBoiPdY6XV6pOfUJeyfi9dXsY4MmT0D+sKoST3rSw96xaf9FXPvOjn4prMTdj3Ji3CyQrGWeQU2nzYqFrp1QYNLAbaViHRKuJrYHI6GCvqCbJe0LQ8qqUiVMA9wG/PQwScpNmTF9Kp2Iej+Z5OUxF33zzm+vg/nYV31HLF7fJUAplI/1nM+ZG8K+AXWgYKChtknl3sW9PCQa3a3imPL9GVToUNxc0wcuTil8mqveWcSQCHYxsIaUajWLpFzoO2AhK4mfYBSStAqEjoXRTuj17mo8Q6M2SHOcwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQBonMu8oa3vmNAa4RQP8gPGlX3SQaA3WCRUAj6Zrlk8AesKV1YSkh5D2l+yUk6njysgzfr1bIR5xF8eup5xXc4/G7NtVYRSMvrd6rfQcHOyK5UFJLm+8utmyMIDrZOzLQuTsT8NxFpbCVCfV5wNRu4rChrCuArYVGaKbmp9ymkw1PU6+HoO5i2wU3ikTmRv8IRjrlSStyNzXpnPTwt7bja19ousk56r40SmlmC04GdDHErr0ei2UbjUua5kw71Qn9g02tL9fERI2sSRjQrvPbn9INwRWl5+k05mlKekbtbu2ev2woJFZK4WEXAd/GaAdeZZdumv8T2idDFL7cAirJwcrbfpawPeXr52oKTPnXfi0l5+g9Gnt/wfiXCrPElX6ycTR6iL3GC2VR4jTz6YatT4Ntz59/THOT7NJQhr6AyLkhhJCdkzE2cob/KouVp4ivV7Q3Fc6HX7eepHAAF/DpxwgOrg9smX6coXLgfp0b1RU2u/tUNID04rpNxTMueTtrT8WSskqvaJd3RH8r7cnRj6Y2hltkja82HlpDURDxDTRvv+krbwMr26SB/40BjpMUrDRCeKuiBahC0DCoU/4+ze1l94wVUhdkCfL0GpJrMSCDEK+XEurU18Hb7WT+ThXbkdl6VpFdHsRvqAnhR2g4b+Qzgidmuky5NUZVfEaZqV/g==

nc命令使用

使用nc传文件

主机A(192.168.20.2)要把文件(b.zip)传给主机B(192.168.20.3),命令如下:

# 主机B:
$ nc -l 1234 > b.zip


# 主机A:
$ nc 192.168.20.3 1234 < b.zip

# 主机B确认收到文件
$ ll b.zip   # 文件已存在
-rw-r--r-- 1 root root 131246 6月  19 22:42 b.zip

测试UDP端口连通性

$ nc -vuz 192.168.20.2 5162   # 返回如下表示连接成功
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.20.2:5162.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.

grep

过滤IP地址

# 匹配数字0-9和. 连续出现三次以上
$ awk '{print $1}' access.log | egrep "([0-9]{1,3}\.)"{3}

修改历史命令格式

$ tail -1 /etc/profile
export HISTTIMEFORMAT="%F %T `whoami` "

查看centos是虚拟还是物理机

>>> dmidecode -s system-product-name
OpenStack Nova

添加静态路由

# 配置临时静态路由(重启机器或network服务后,路由失效)
$ route add -net 192.30.0.0/16 gw 192.168.20.1 dev eth0

# 使静态路由永久生效
$ echo "any net 192.30.0.0/16 gw 192.168.20.1 dev eth0"  >> /etc/sysconfig/static-routes
# /etc/sysconfig/static-routes 文件可能没有,没关系,新建即可

查看服务器产品型号

$ dmidecode -s system-product-name
PowerEdge R730

sftp命令使用

# sftp指定端口号登录
$ sftp -P 32222 sftp_username@1.1.1.1

markdown字体设置

<font face="微软雅黑" color=red size=4>4号红色微软雅黑字体</font>


# face :定义字体,如宋体、微软雅黑、黑体、华文彩云等。
# color:定义字体颜色,如red、yellow、gree等。
# size :定义字体大小,最大值为72.

修改网页内容

此技巧不是用来装13的,而是…. 你有没有遇到过那种不能复制的网页?对,没错,你可以这样操作,然而会发现还是不能复制,不过….可以剪切,哈哈。

document.body.contentEditable='true';

linux高阶指令使用 - 图1

修改编码方式为zh_CN.UTF-8

locale
export LANG=zh_CN.UTF-8
localectl  set-locale LANG=zh_CN.UTF8

服务器初始化必备工具安装

yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache
yum -y install lrzsz git iproute vim traceroute tree zip unzip iftop nload net-tools nmap tcpdump gcc

设置acl权限

$ setfacl -Rm u:llyxpt:rwx apache-flume-1.9.0-bin

# getfacl : 查看acl权限

查看cpu相关信息

# 查看物理cpu个数
$ grep 'physical id' /proc/cpuinfo| sort | uniq | wc -l

# 查看单个cpu的核心数
$ grep 'cpu cores' /proc/cpuinfo | uniq 

# 查看逻辑cpu个数
$ grep 'processor' /proc/cpuinfo| wc -l

查看rpc及nfs所用端口

rpc服务所用端口不固定(通过ss或netstash有些端口查不到是对应的哪个服务),有时候我们需要统计系统是否有非正常的端口,可以使用此指令来确定rpc及nfs所用端口。

$ rpcinfo -p

tcpdump抓包

抓取69.89通过80请求的数据包并保存为文件。

$ tcpdump -i eth0 host 218.206.69.89 and port 80 -s 0 -w /tmp/218.206.69.89.cap -vvv

修改系统时间

用于机房环境中没有ntp及无法出外网时手动修改系统时间。

$ hwclock --set --date "2020-09-22 19:04:00"   # 修改硬件时间
$ hwclock --hctosys       # 同步系统时间和硬件时间
$ clock -w       # 保存
# 查看硬件时间和系统时间是否同步
$ hwclock --show         
$ date

iptables将80端口的流量转发至443端口

$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 443
$ iptables-save

查看系统可用内核

$ awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.4.223-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-caa6eb0d160246d39e7c615ab7f61304) 7 (Core)

服务器出口IP查询

# 方法1
[5::root@lv::~]# >>>curl myip.ipip.net
当前 IP:218.xxx.xxx.xxx  来自于:中国 北京 北京  移动


# 方法2
[6::root@lv::~]# >>>curl cip.cc
IP    : 218.xxx.xxx.xxx
地址    : 中国  北京
运营商    : 移动

数据二    : 北京市 | 移动

数据三    : 

URL    : http://www.cip.cc/218.205.209.238


# 方法3
[8::root@lv::~]# >>>curl ipinfo.io
{
  "ip": "218.xxx.xxx.xxx",
  "city": "Beijing",
  "region": "Beijing",
  "country": "CN",
  "loc": "39.9075,116.3972",
  "org": "AS56048 China Mobile Communicaitons Corporation",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}

使CPU使用率接近百分百

for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done

yum下载某个服务所需的包文件并安装

此功能用于服务器不能和外网通信,安装某个服务时需要先在能上外网的主机上下载rpm包,然后进行安装。

# 在本机未安装此服务时使用以下指令:
$ yum install --downloadonly --downloaddir=/tmp/httpd/ httpd
# 仅下载httpd服务所需的rpm包,而不安装
# --downloaddir:指定下载的rpm包存放路径
# 若本机已安装此服务,则使用reinstall选项即可
$ yum reinstall --downloadonly --downloaddir=/tmp/httpd/ httpd
# 当rpm包下载后打包到其他主机上,可以使用以下指令安装
$ yum -y localinstall /tmp/httpd/*

查看某个目录下容量占用最多的前10个文件或目录

$ du -sh /var/log/* 2> /dev/null | sort -nr | head -10

查找占用内存资源最多的前10个进程

$ ps -auxf | sort -nr -k 4 | head -10
# sort指令中的“-k”选项是以空格为间隔,要依据第几列进行排序

查找占用CPU资源最多的前10个进程

$ ps -auxf | sort -nr -k 3 | head -10

awk

[root@mysql nginx]# awk 'substr($9,1,3)>200' access.log
#查看访问日志中,过滤非200状态码的日志请求
# substr($4,20)  :表示从第四个字段里的第20个字符开始,一直到设定的分隔符 结束
# substr($4,1,3) :表示从第四个字段里的第1个字符开始,截取3个字符结束
# substr($4,3,6) : 表示从第四个字段里的第3个字符开始,截取6个字符结束
[root@nginx ~]# awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-caa6eb0d160246d39e7c615ab7f61304) 7 (Core)

# \':对单引号进行转义,表示以单引号进行分隔。
# $1=="menuentry:表示如果位置1变量的值是menuentry。
# {print i++ " : " $2}:则打印$2的值,i++表示在输出的信息开头增加序列号

# 如果$9 等于 403,则打印整条记录
$ awk '{if ($9 == 403) print $0}' access.log

awk查找特定时间段的日志

# 日志格式如下
10.252.201.136 - - [27/Apr/2020:00:00:01 +0800] "POST /api-stkp/callback HTTP/1.1" 200 221 "-" "Java/1.8.0_77"
# 过滤2020年4月29日的7:00到10:30的日志
cat access.log | awk '$4 >= "[29/Apr/2020:07:00:00" && $4 <= "[29/Apr/2020:10:30:35"' > nginx.log

使用awk统计nginx日志中每个独立ip的访问次数

$ awk '{print $1}' access.log | sort | uniq -c  | sort -rn

getopts

getopts指定参数,获取值。同样还有一个作用类似的选项getopt,可以自行百度查看其区别。

getopts使用

[root@mysql nginx]# vim test.sh       #脚本内容如下
#!/usr/bin/env bash
while  getopts  ":h:p:"  optname;do
        case "$optname"  in
        "h")
        host_ip=$OPTARG
        ;;
        "p")
        host_port=$OPTARG
        ;;
        "?" )
        echo "不知道此选项"
        ;;
        esac
done
echo "IP是${host_ip},端口是${host_port}"

#执行效果如下
[root@mysql nginx]# sh test.sh -h 192.168.20.2 -p 3306
IP是192.168.20.2,端口是3306
[root@mysql nginx]# sh test.sh -p 22 -h 192.168.20.3
IP是192.168.20.3,端口是22

在上面的脚本中,while后面的getopts关键字是必须的,引号中的h、p是可选自定义的,对应的是命令行-h、-p等指定的选项,optname也是自定义的,只要和case语句后引用的变量名称对应即可。在case语句下,需要给哪些选项赋值,则写多少就行,一般和getopts后面指定的选项对应。

fgrep命令

[root@mysql ~]# fgrep -c "hello" test.txt    #显示hello字符在test.txt文件中匹配行的数目
[root@mysql ~]# fgrep -l "hello" test.txt     #显示匹配hello的文件名

pkill

[root@mysql ~]# pkill -kill -t pts/1    #断掉连接当前终端的用户

脚本执行,获取脚本所在路径

大多数时候都是在脚本所在的目录下执行脚本,在脚本中使用pwd指令就可以获得所在路径,下面的语法是当没有在脚本所在路径执行脚本时,获取脚本所在路径的语法。

cur_dir=$(cd $(dirname ${BASH_SOURCE[0]}); pwd)

echo输出颜色

# 字背景颜色范围:30—–37
  echo -e "\033[30m 黑色字 \033[0m"
  echo -e "\033[31m 红色字 \033[0m"
  echo -e "\033[32m 绿色字 \033[0m"
  echo -e "\033[33m 黄色字 \033[0m"
  echo -e "\033[34m 蓝色字 \033[0m"
  echo -e "\033[35m 紫色字 \033[0m"
  echo -e "\033[36m 天蓝字 \033[0m"
  echo -e "\033[37m 白色字 \033[0m"
# 字背景颜色范围:40—–47
  echo -e "\033[40;37m 黑底白字 \033[0m"
  echo -e "\033[41;37m 红底白字 \033[0m"
  echo -e "\033[42;37m 绿底白字 \033[0m"
  echo -e "\033[43;37m 黄底白字 \033[0m"
  echo -e "\033[44;37m 蓝底白字 \033[0m"
  echo -e "\033[45;37m 紫底白字 \033[0m"
  echo -e "\033[46;37m 天蓝底白字 \033[0m"
  echo -e "\033[47;30m 白底黑字 \033[0m"
# 最后控制选项
  \33[0m 关闭所有属性
  \33[1m 设置高亮度
  \33[4m 下划线
  \33[5m 闪烁
  \33[7m 反显
  \33[8m 消隐
  \33[30m — \33[37m 设置前景色
  \33[40m — \33[47m 设置背景色
  \33[nA 光标上移n行
  \33[nB 光标下移n行
  \33[nC 光标右移n行
  \33[nD 光标左移n行
  \33[y;xH设置光标位置
  \33[2J 清屏
  \33[K 清除从光标到行尾的内容
  \33[s 保存光标位置
  \33[u 恢复光标位置
  \33[?25l 隐藏光标
  \33[?25h 显示光标

解析srv记录

# 使用nslookup
$ nslookup
> set q=srv
> api.qichacha.com

# 使用dig命令
$ dig api.qichacha.com -t srv

tr分隔符

testinfo="python,java,php"
for i in $testinfo;do
    echo $testinfo | tr ',' '\n'   #将逗号隔开,\n换行 
done

#结果输出:
python
java
php
# 使用-拼接 
testinfo="python,java,php";for i in $testinfo;do echo $testinfo | tr ',' '-'; done
python-java-php

查看timewait的连接数

ss -tan state time-wait | wc -l

获取系统当前时间

[root@mysql ~]# date +%Y.%m.%d-%H:%M:%S
2020.01.03-22:47:46
[root@mysql ~]# date '+%F %T'
2020-01-03 22:47:50

获取系统时间

[root@mysql ~]# date -d '-30 minutes' "+%F %T"    #获取三十分钟前的时间
2020-01-03 22:20:56
[root@mysql ~]# date -d yesterday "+%F %T"     #获取前一天的时间
2020-01-02 22:51:45

获取本机的内网IP

ip addr | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1

显示目录结构各级的权限

namei -om /var/log/messages